@patternfly/react-core 4.217.4 → 4.219.1

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 (50) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/esm/components/FileUpload/FileUploadField.d.ts +4 -0
  3. package/dist/esm/components/FileUpload/FileUploadField.d.ts.map +1 -1
  4. package/dist/esm/components/FileUpload/FileUploadField.js +2 -2
  5. package/dist/esm/components/FileUpload/FileUploadField.js.map +1 -1
  6. package/dist/esm/components/Modal/ModalBoxTitle.d.ts.map +1 -1
  7. package/dist/esm/components/Modal/ModalBoxTitle.js +3 -3
  8. package/dist/esm/components/Modal/ModalBoxTitle.js.map +1 -1
  9. package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
  10. package/dist/esm/components/Slider/Slider.js +1 -3
  11. package/dist/esm/components/Slider/Slider.js.map +1 -1
  12. package/dist/esm/components/Tooltip/Tooltip.d.ts +4 -1
  13. package/dist/esm/components/Tooltip/Tooltip.d.ts.map +1 -1
  14. package/dist/esm/components/Tooltip/Tooltip.js +2 -2
  15. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  16. package/dist/esm/helpers/Popper/Popper.d.ts +4 -0
  17. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  18. package/dist/esm/helpers/Popper/Popper.js +7 -1
  19. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  20. package/dist/js/components/FileUpload/FileUploadField.d.ts +4 -0
  21. package/dist/js/components/FileUpload/FileUploadField.d.ts.map +1 -1
  22. package/dist/js/components/FileUpload/FileUploadField.js +2 -2
  23. package/dist/js/components/FileUpload/FileUploadField.js.map +1 -1
  24. package/dist/js/components/Modal/ModalBoxTitle.d.ts.map +1 -1
  25. package/dist/js/components/Modal/ModalBoxTitle.js +3 -3
  26. package/dist/js/components/Modal/ModalBoxTitle.js.map +1 -1
  27. package/dist/js/components/Slider/Slider.d.ts.map +1 -1
  28. package/dist/js/components/Slider/Slider.js +1 -3
  29. package/dist/js/components/Slider/Slider.js.map +1 -1
  30. package/dist/js/components/Tooltip/Tooltip.d.ts +4 -1
  31. package/dist/js/components/Tooltip/Tooltip.d.ts.map +1 -1
  32. package/dist/js/components/Tooltip/Tooltip.js +2 -2
  33. package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
  34. package/dist/js/helpers/Popper/Popper.d.ts +4 -0
  35. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  36. package/dist/js/helpers/Popper/Popper.js +7 -1
  37. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  38. package/dist/umd/react-core.js +15 -11
  39. package/dist/umd/react-core.min.js +3 -3
  40. package/package.json +5 -5
  41. package/src/components/ExpandableSection/examples/ExpandableSection.md +47 -0
  42. package/src/components/FileUpload/FileUploadField.tsx +8 -0
  43. package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +1 -0
  44. package/src/components/FileUpload/__tests__/__snapshots__/FileUploadField.test.tsx.snap +1 -0
  45. package/src/components/FileUpload/examples/FileUpload.md +6 -3
  46. package/src/components/Modal/ModalBoxTitle.tsx +3 -9
  47. package/src/components/Slider/Slider.tsx +1 -3
  48. package/src/components/Slider/examples/Slider.md +29 -2
  49. package/src/components/Tooltip/Tooltip.tsx +7 -2
  50. package/src/helpers/Popper/Popper.tsx +12 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "4.217.4",
3
+ "version": "4.219.1",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -34,9 +34,9 @@
34
34
  "generate": "node scripts/copyStyles.js"
35
35
  },
36
36
  "dependencies": {
37
- "@patternfly/react-icons": "^4.68.4",
38
- "@patternfly/react-styles": "^4.67.4",
39
- "@patternfly/react-tokens": "^4.69.4",
37
+ "@patternfly/react-icons": "^4.70.1",
38
+ "@patternfly/react-styles": "^4.69.1",
39
+ "@patternfly/react-tokens": "^4.71.1",
40
40
  "focus-trap": "6.2.2",
41
41
  "react-dropzone": "9.0.0",
42
42
  "tippy.js": "5.1.2",
@@ -60,5 +60,5 @@
60
60
  "react": "^16.8.0 || ^17.0.0",
61
61
  "react-dom": "^16.8.0 || ^17.0.0"
62
62
  },
63
- "gitHead": "ba782c2941a816480fc345e27ce9f15782a81298"
63
+ "gitHead": "7a00f2e2733a593e840464c786f7096e004d02f1"
64
64
  }
@@ -5,6 +5,8 @@ cssPrefix: pf-c-expandable-section
5
5
  propComponents: ['ExpandableSection', 'ExpandableSectionToggle']
6
6
  ---
7
7
 
8
+ import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
9
+
8
10
  ## Examples
9
11
 
10
12
  ### Basic
@@ -178,3 +180,48 @@ class SimpleExpandableSection extends React.Component {
178
180
  }
179
181
  }
180
182
  ```
183
+
184
+ ### With custom toggle content
185
+
186
+ By using the `toggleContent` prop, you can pass in content other than a simple string such as an icon or a badge. When passing in custom content in this way, you should not pass in any interactive element such as a button.
187
+
188
+ ```js
189
+ import React from "react";
190
+ import { ExpandableSection, Badge } from "@patternfly/react-core";
191
+ import CheckCircleIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
192
+
193
+ class CustomExpandableSection extends React.Component {
194
+ constructor(props) {
195
+ super(props);
196
+ this.state = {
197
+ isExpanded: false
198
+ };
199
+ this.onToggle = (isExpanded) => {
200
+ this.setState({
201
+ isExpanded
202
+ });
203
+ };
204
+ }
205
+
206
+ render() {
207
+ const { isExpanded } = this.state;
208
+ return (
209
+ <ExpandableSection
210
+ toggleContent={
211
+ <div>
212
+ <span>You can also use icons </span>
213
+ <CheckCircleIcon />
214
+ <span> or badges </span>
215
+ <Badge isRead={true}>4</Badge>
216
+ <span> !</span>
217
+ </div>
218
+ }
219
+ onToggle={this.onToggle}
220
+ isExpanded={isExpanded}
221
+ >
222
+ This content is visible only when the component is expanded.
223
+ </ExpandableSection>
224
+ );
225
+ }
226
+ }
227
+ ```
@@ -78,6 +78,10 @@ export interface FileUploadFieldProps extends Omit<React.HTMLProps<HTMLDivElemen
78
78
  containerRef?: React.Ref<HTMLDivElement>;
79
79
  /** Text area text changed */
80
80
  onTextChange?: (text: string) => void;
81
+ /** Callback for when focus is lost on the text area field */
82
+ onTextAreaBlur?: (event?: any) => void;
83
+ /** Placeholder string to display in the empty text area field */
84
+ textAreaPlaceholder?: string;
81
85
  }
82
86
 
83
87
  export const FileUploadField: React.FunctionComponent<FileUploadFieldProps> = ({
@@ -90,6 +94,8 @@ export const FileUploadField: React.FunctionComponent<FileUploadFieldProps> = ({
90
94
  onClearButtonClick = () => {},
91
95
  onTextAreaClick,
92
96
  onTextChange,
97
+ onTextAreaBlur,
98
+ textAreaPlaceholder = '',
93
99
  className = '',
94
100
  isDisabled = false,
95
101
  isReadOnly = false,
@@ -169,6 +175,8 @@ export const FileUploadField: React.FunctionComponent<FileUploadFieldProps> = ({
169
175
  value={value as string}
170
176
  onChange={onTextAreaChange}
171
177
  onClick={onTextAreaClick}
178
+ onBlur={onTextAreaBlur}
179
+ placeholder={textAreaPlaceholder}
172
180
  />
173
181
  )}
174
182
  {isLoading && (
@@ -59,6 +59,7 @@ exports[`simple fileupload 1`] = `
59
59
  class="pf-c-form-control pf-m-resize-vertical"
60
60
  id="simple-text-file"
61
61
  name="simple-text-file"
62
+ placeholder=""
62
63
  />
63
64
  </div>
64
65
  <input
@@ -58,6 +58,7 @@ exports[`simple fileuploadfield 1`] = `
58
58
  class="pf-c-form-control pf-m-resize-vertical"
59
59
  id="custom-file-upload"
60
60
  name="custom-file-upload"
61
+ placeholder=""
61
62
  />
62
63
  </div>
63
64
  <p>
@@ -268,7 +268,8 @@ class CustomFileUpload extends React.Component {
268
268
  isLoading: false,
269
269
  isDragActive: false,
270
270
  hideDefaultPreview: false,
271
- children: false
271
+ children: false,
272
+ hasPlaceholderText: false
272
273
  };
273
274
  this.handleTextAreaChange = value => {
274
275
  this.setState({ value });
@@ -283,11 +284,12 @@ class CustomFileUpload extends React.Component {
283
284
  isLoading,
284
285
  isDragActive,
285
286
  hideDefaultPreview,
286
- children
287
+ children,
288
+ hasPlaceholderText
287
289
  } = this.state;
288
290
  return (
289
291
  <div>
290
- {['filename', 'isClearButtonDisabled', 'isDragActive', 'isLoading', 'hideDefaultPreview', 'children'].map(
292
+ {['filename', 'isClearButtonDisabled', 'isDragActive', 'isLoading', 'hideDefaultPreview', 'children', 'hasPlaceholderText'].map(
291
293
  stateKey => (
292
294
  <Checkbox
293
295
  key={stateKey}
@@ -321,6 +323,7 @@ class CustomFileUpload extends React.Component {
321
323
  isDragActive={isDragActive}
322
324
  hideDefaultPreview={hideDefaultPreview}
323
325
  browseButtonText="Upload"
326
+ textAreaPlaceholder={hasPlaceholderText ? "File preview" : ''}
324
327
  >
325
328
  {children && (
326
329
  <div className="pf-u-m-md">(A custom preview of the uploaded file can be passed as children)</div>
@@ -37,7 +37,7 @@ export const ModalBoxTitle: React.FunctionComponent<ModalBoxTitleProps> = ({
37
37
  titleLabel = '',
38
38
  ...props
39
39
  }: ModalBoxTitleProps) => {
40
- const [isTooltipVisible, setIsTooltipVisible] = React.useState(false);
40
+ const [hasTooltip, setHasTooltip] = React.useState(false);
41
41
  const h1 = React.useRef<HTMLHeadingElement>();
42
42
  const label = titleLabel || (isVariantIcon(titleIconVariant) ? `${capitalize(titleIconVariant)} alert:` : titleLabel);
43
43
  const variantIcons = {
@@ -50,7 +50,7 @@ export const ModalBoxTitle: React.FunctionComponent<ModalBoxTitleProps> = ({
50
50
  const CustomIcon = !isVariantIcon(titleIconVariant) && titleIconVariant;
51
51
 
52
52
  useIsomorphicLayoutEffect(() => {
53
- setIsTooltipVisible(h1.current && h1.current.offsetWidth < h1.current.scrollWidth);
53
+ setHasTooltip(h1.current && h1.current.offsetWidth < h1.current.scrollWidth);
54
54
  }, []);
55
55
 
56
56
  const content = (
@@ -70,12 +70,6 @@ export const ModalBoxTitle: React.FunctionComponent<ModalBoxTitleProps> = ({
70
70
  </h1>
71
71
  );
72
72
 
73
- return isTooltipVisible ? (
74
- <Tooltip content={title} isVisible>
75
- {content}
76
- </Tooltip>
77
- ) : (
78
- content
79
- );
73
+ return hasTooltip ? <Tooltip content={title}>{content}</Tooltip> : content;
80
74
  };
81
75
  ModalBoxTitle.displayName = 'ModalBoxTitle';
@@ -235,9 +235,7 @@ export const Slider: React.FunctionComponent<SliderProps> = ({
235
235
  if (!areCustomStepsContinuous && customSteps) {
236
236
  let percentage = newPercentage;
237
237
  if (customSteps[customSteps.length - 1].value !== 100) {
238
- const numSteps = customSteps.length - 1;
239
- const percentagePerStep = 100 / numSteps;
240
- percentage = newPercentage / percentagePerStep;
238
+ percentage = (newPercentage * (max - min)) / 100 + min;
241
239
  }
242
240
  const stepIndex = customSteps.findIndex(stepObj => stepObj.value >= percentage);
243
241
  if (customSteps[stepIndex].value === percentage) {
@@ -29,7 +29,8 @@ class DiscreteInput extends React.Component {
29
29
  value3: 25,
30
30
  value4: 50,
31
31
  value5: 50,
32
- value6: 3
32
+ value6: 3,
33
+ value7: 25
33
34
  };
34
35
 
35
36
  this.steps = [
@@ -53,6 +54,15 @@ class DiscreteInput extends React.Component {
53
54
  { value: 5, label: "F" }
54
55
  ];
55
56
 
57
+ this.stepsDiscreteNoLinearWithMaxMin = [
58
+ { value: 12, label: '12' },
59
+ { value: 15, label: '15' },
60
+ { value: 25, label: '25' },
61
+ { value: 54, label: '54' },
62
+ { value: 67, label: '67' },
63
+ { value: 86, label: '86' }
64
+ ];
65
+
56
66
  this.onChange = value => {
57
67
  this.setState({
58
68
  value1: value
@@ -88,6 +98,12 @@ class DiscreteInput extends React.Component {
88
98
  value6: value
89
99
  });
90
100
  };
101
+
102
+ this.onChange7 = value => {
103
+ this.setState({
104
+ value7: value
105
+ });
106
+ };
91
107
  }
92
108
 
93
109
  render() {
@@ -123,7 +139,18 @@ class DiscreteInput extends React.Component {
123
139
  customSteps={this.stepsDiscreteWithMax}
124
140
  onChange={this.onChange6}
125
141
  />
126
- <br />
142
+ <br />
143
+ <Text component={TextVariants.h3}>Slider value is: {Math.floor(this.state.value7)}</Text>
144
+ <Text component={TextVariants.small}>(min = 12, max = 86, custom steps with non linear data) </Text>
145
+ <Slider
146
+ value={this.state.value7}
147
+ showTicks
148
+ customSteps={this.stepsDiscreteNoLinearWithMaxMin}
149
+ onChange={this.onChange7}
150
+ min={12}
151
+ max={86}
152
+ />
153
+ <br />
127
154
  </>
128
155
  );
129
156
  }
@@ -63,7 +63,10 @@ export interface TooltipProps extends Omit<React.HTMLProps<HTMLDivElement>, 'con
63
63
  enableFlip?: boolean;
64
64
  /** Delay in ms before the tooltip appears */
65
65
  entryDelay?: number;
66
- /** Delay in ms before the tooltip disappears */
66
+ /** Delay in ms before the tooltip disappears, Avoid passing in a value of "0", as users should
67
+ * be given ample time to move their mouse from the trigger to the tooltip content without the content
68
+ * being hidden.
69
+ */
67
70
  exitDelay?: number;
68
71
  /**
69
72
  * The desired position to flip the tooltip to if the initial position is not possible.
@@ -149,7 +152,7 @@ export const Tooltip: React.FunctionComponent<TooltipProps> = ({
149
152
  enableFlip = true,
150
153
  className = '',
151
154
  entryDelay = 300,
152
- exitDelay = 0,
155
+ exitDelay = 300,
153
156
  appendTo = () => document.body,
154
157
  zIndex = 9999,
155
158
  maxWidth = tooltipMaxWidth.value,
@@ -318,6 +321,8 @@ export const Tooltip: React.FunctionComponent<TooltipProps> = ({
318
321
  placement={position}
319
322
  onMouseEnter={triggerOnMouseenter && show}
320
323
  onMouseLeave={triggerOnMouseenter && hide}
324
+ onPopperMouseEnter={triggerOnMouseenter && show}
325
+ onPopperMouseLeave={triggerOnMouseenter && hide}
321
326
  onFocus={triggerOnFocus && show}
322
327
  onBlur={triggerOnFocus && hide}
323
328
  onDocumentClick={triggerOnClick && onDocumentClick}
@@ -95,6 +95,10 @@ export interface PopperProps {
95
95
  onTriggerEnter?: (event?: KeyboardEvent) => void;
96
96
  /** Callback function when popper is clicked */
97
97
  onPopperClick?: (event?: MouseEvent) => void;
98
+ /** Callback function when mouse enters popper content */
99
+ onPopperMouseEnter?: (event?: MouseEvent) => void;
100
+ /** Callback function when mouse leaves popper content */
101
+ onPopperMouseLeave?: (event?: MouseEvent) => void;
98
102
  /** Callback function when document is clicked */
99
103
  onDocumentClick?: (event?: MouseEvent, triggerElement?: HTMLElement, popperElement?: HTMLElement) => void;
100
104
  /** Callback function when keydown event occurs on document */
@@ -140,6 +144,8 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
140
144
  onTriggerClick,
141
145
  onTriggerEnter,
142
146
  onPopperClick,
147
+ onPopperMouseEnter,
148
+ onPopperMouseLeave,
143
149
  onDocumentKeyDown,
144
150
  enableFlip = true,
145
151
  flipBehavior = 'flip',
@@ -186,6 +192,8 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
186
192
  addEventListener(onTriggerClick, refOrTrigger, 'click');
187
193
  addEventListener(onTriggerEnter, refOrTrigger, 'keydown');
188
194
  addEventListener(onPopperClick, popperElement, 'click');
195
+ addEventListener(onPopperMouseEnter, popperElement, 'mouseenter');
196
+ addEventListener(onPopperMouseLeave, popperElement, 'mouseleave');
189
197
  onDocumentClick && addEventListener(onDocumentClickCallback, document, 'click');
190
198
  addEventListener(onDocumentKeyDown, document, 'keydown');
191
199
 
@@ -203,6 +211,8 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
203
211
  removeEventListener(onTriggerClick, refOrTrigger, 'click');
204
212
  removeEventListener(onTriggerEnter, refOrTrigger, 'keydown');
205
213
  removeEventListener(onPopperClick, popperElement, 'click');
214
+ removeEventListener(onPopperMouseEnter, popperElement, 'mouseenter');
215
+ removeEventListener(onPopperMouseLeave, popperElement, 'mouseleave');
206
216
  onDocumentClick && removeEventListener(onDocumentClickCallback, document, 'click');
207
217
  removeEventListener(onDocumentKeyDown, document, 'keydown');
208
218
  observer.disconnect();
@@ -217,6 +227,8 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
217
227
  onTriggerClick,
218
228
  onTriggerEnter,
219
229
  onPopperClick,
230
+ onPopperMouseEnter,
231
+ onPopperMouseLeave,
220
232
  onDocumentClick,
221
233
  onDocumentKeyDown,
222
234
  refElement