@patternfly/react-docs 7.6.0-prerelease.6 → 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 (163) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +12 -13
  3. package/patternfly-docs/generated/components/about-modal/react.js +149 -0
  4. package/patternfly-docs/generated/components/accordion/react.js +262 -0
  5. package/patternfly-docs/generated/components/action-list/react.js +144 -0
  6. package/patternfly-docs/generated/components/alert/react-demos.js +56 -0
  7. package/patternfly-docs/generated/components/alert/react.js +1433 -0
  8. package/patternfly-docs/generated/components/avatar/react.js +166 -0
  9. package/patternfly-docs/generated/components/back-to-top/react-demos.js +60 -0
  10. package/patternfly-docs/generated/components/back-to-top/react.js +77 -0
  11. package/patternfly-docs/generated/components/backdrop/react.js +64 -0
  12. package/patternfly-docs/generated/components/background-image/react.js +62 -0
  13. package/patternfly-docs/generated/components/badge/react.js +97 -0
  14. package/patternfly-docs/generated/components/banner/react-demos.js +57 -0
  15. package/patternfly-docs/generated/components/banner/react.js +148 -0
  16. package/patternfly-docs/generated/components/brand/react.js +142 -0
  17. package/patternfly-docs/generated/components/breadcrumb/react.js +206 -0
  18. package/patternfly-docs/generated/components/button/react-demos.js +57 -0
  19. package/patternfly-docs/generated/components/button/react.js +826 -0
  20. package/patternfly-docs/generated/components/card/react-demos.js +201 -0
  21. package/patternfly-docs/generated/components/card/react.js +1015 -0
  22. package/patternfly-docs/generated/components/charts/area-chart/-Victory.js +1350 -0
  23. package/patternfly-docs/generated/components/charts/bar-chart/-Victory.js +1334 -0
  24. package/patternfly-docs/generated/components/charts/box-plot-chart/-Victory.js +1282 -0
  25. package/patternfly-docs/generated/components/charts/bullet-chart/-Victory.js +848 -0
  26. package/patternfly-docs/generated/components/charts/colors-for-charts/-Victory.js +192 -0
  27. package/patternfly-docs/generated/components/charts/donut-chart/-Victory.js +426 -0
  28. package/patternfly-docs/generated/components/charts/donut-utilization-chart/-Victory.js +804 -0
  29. package/patternfly-docs/generated/components/charts/legends/-Victory.js +3230 -0
  30. package/patternfly-docs/generated/components/charts/line-chart/-Victory.js +1178 -0
  31. package/patternfly-docs/generated/components/charts/line-chart/ECharts.js +525 -0
  32. package/patternfly-docs/generated/components/charts/patterns/-Victory.js +3382 -0
  33. package/patternfly-docs/generated/components/charts/pie-chart/-Victory.js +377 -0
  34. package/patternfly-docs/generated/components/charts/resize-observer/-Victory.js +2475 -0
  35. package/patternfly-docs/generated/components/charts/sankey-chart/ECharts.js +538 -0
  36. package/patternfly-docs/generated/components/charts/scatter-chart/-Victory.js +1551 -0
  37. package/patternfly-docs/generated/components/charts/skeletons/-Victory.js +4115 -0
  38. package/patternfly-docs/generated/components/charts/sparkline-chart/-Victory.js +955 -0
  39. package/patternfly-docs/generated/components/charts/stack-chart/-Victory.js +1173 -0
  40. package/patternfly-docs/generated/components/charts/threshold-chart/-Victory.js +1166 -0
  41. package/patternfly-docs/generated/components/charts/tooltips/-Victory.js +413 -0
  42. package/patternfly-docs/generated/components/chip/react-deprecated.js +323 -0
  43. package/patternfly-docs/generated/components/clipboard-copy/react.js +373 -0
  44. package/patternfly-docs/generated/components/code-block/react.js +148 -0
  45. package/patternfly-docs/generated/components/code-editor/react.js +659 -0
  46. package/patternfly-docs/generated/components/compass/react-demos.js +147 -0
  47. package/patternfly-docs/generated/components/compass/react.js +440 -0
  48. package/patternfly-docs/generated/components/content/react.js +248 -0
  49. package/patternfly-docs/generated/components/data-list/react-demos.js +90 -0
  50. package/patternfly-docs/generated/components/data-list/react.js +709 -0
  51. package/patternfly-docs/generated/components/date-and-time/calendar-month/react.js +283 -0
  52. package/patternfly-docs/generated/components/date-and-time/date-and-time-picker/react-demos.js +64 -0
  53. package/patternfly-docs/generated/components/date-and-time/date-picker/react-demos.js +83 -0
  54. package/patternfly-docs/generated/components/date-and-time/date-picker/react.js +395 -0
  55. package/patternfly-docs/generated/components/date-and-time/time-picker/react.js +241 -0
  56. package/patternfly-docs/generated/components/description-list/react-demos.js +58 -0
  57. package/patternfly-docs/generated/components/description-list/react.js +743 -0
  58. package/patternfly-docs/generated/components/divider/react.js +126 -0
  59. package/patternfly-docs/generated/components/drag-and-drop/react-demos.js +351 -0
  60. package/patternfly-docs/generated/components/drag-and-drop/react-deprecated.js +184 -0
  61. package/patternfly-docs/generated/components/drag-and-drop/react.js +137 -0
  62. package/patternfly-docs/generated/components/drawer/react.js +598 -0
  63. package/patternfly-docs/generated/components/dual-list-selector/react-deprecated.js +772 -0
  64. package/patternfly-docs/generated/components/dual-list-selector/react.js +594 -0
  65. package/patternfly-docs/generated/components/empty-state/react.js +199 -0
  66. package/patternfly-docs/generated/components/expandable-section/react-demos.js +65 -0
  67. package/patternfly-docs/generated/components/expandable-section/react.js +408 -0
  68. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react-demos.js +52 -0
  69. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react.js +398 -0
  70. package/patternfly-docs/generated/components/file-upload/simple-file-upload/react.js +749 -0
  71. package/patternfly-docs/generated/components/forms/checkbox/react.js +222 -0
  72. package/patternfly-docs/generated/components/forms/form/react.js +1106 -0
  73. package/patternfly-docs/generated/components/forms/form-select/react.js +208 -0
  74. package/patternfly-docs/generated/components/forms/radio/react.js +212 -0
  75. package/patternfly-docs/generated/components/forms/text-area/react.js +160 -0
  76. package/patternfly-docs/generated/components/forms/text-input/react.js +216 -0
  77. package/patternfly-docs/generated/components/helper-text/react-demos.js +180 -0
  78. package/patternfly-docs/generated/components/helper-text/react.js +164 -0
  79. package/patternfly-docs/generated/components/hero/react.js +88 -0
  80. package/patternfly-docs/generated/components/hint/react.js +169 -0
  81. package/patternfly-docs/generated/components/icon/react.js +215 -0
  82. package/patternfly-docs/generated/components/input-group/react.js +182 -0
  83. package/patternfly-docs/generated/components/jump-links/react-demos.js +154 -0
  84. package/patternfly-docs/generated/components/jump-links/react.js +212 -0
  85. package/patternfly-docs/generated/components/label/react-demos.js +57 -0
  86. package/patternfly-docs/generated/components/label/react.js +417 -0
  87. package/patternfly-docs/generated/components/list/react.js +175 -0
  88. package/patternfly-docs/generated/components/login-page/react.js +587 -0
  89. package/patternfly-docs/generated/components/masthead/react-demos.js +79 -0
  90. package/patternfly-docs/generated/components/masthead/react.js +291 -0
  91. package/patternfly-docs/generated/components/menus/application-launcher/react-demos.js +769 -0
  92. package/patternfly-docs/generated/components/menus/context-selector/react-demos.js +665 -0
  93. package/patternfly-docs/generated/components/menus/custom-menus/react-demos.js +187 -0
  94. package/patternfly-docs/generated/components/menus/dropdown/react-templates.js +163 -0
  95. package/patternfly-docs/generated/components/menus/dropdown/react.js +998 -0
  96. package/patternfly-docs/generated/components/menus/menu/react.js +1540 -0
  97. package/patternfly-docs/generated/components/menus/menu-toggle/react.js +747 -0
  98. package/patternfly-docs/generated/components/menus/options-menu/react-demos.js +508 -0
  99. package/patternfly-docs/generated/components/menus/select/react-templates.js +257 -0
  100. package/patternfly-docs/generated/components/menus/select/react.js +998 -0
  101. package/patternfly-docs/generated/components/modal/react-deprecated.js +554 -0
  102. package/patternfly-docs/generated/components/modal/react.js +597 -0
  103. package/patternfly-docs/generated/components/navigation/react-demos.js +356 -0
  104. package/patternfly-docs/generated/components/navigation/react.js +409 -0
  105. package/patternfly-docs/generated/components/notification-badge/react.js +196 -0
  106. package/patternfly-docs/generated/components/notification-drawer/react-demos.js +107 -0
  107. package/patternfly-docs/generated/components/notification-drawer/react.js +394 -0
  108. package/patternfly-docs/generated/components/number-input/react.js +210 -0
  109. package/patternfly-docs/generated/components/overflow-menu/react.js +274 -0
  110. package/patternfly-docs/generated/components/page/react-demos.js +149 -0
  111. package/patternfly-docs/generated/components/page/react.js +1352 -0
  112. package/patternfly-docs/generated/components/pagination/react.js +492 -0
  113. package/patternfly-docs/generated/components/panel/react.js +236 -0
  114. package/patternfly-docs/generated/components/popover/react.js +390 -0
  115. package/patternfly-docs/generated/components/progress/react-demos.js +59 -0
  116. package/patternfly-docs/generated/components/progress/react.js +283 -0
  117. package/patternfly-docs/generated/components/progress-stepper/react-demos.js +45 -0
  118. package/patternfly-docs/generated/components/progress-stepper/react.js +219 -0
  119. package/patternfly-docs/generated/components/search-input/react-demos.js +113 -0
  120. package/patternfly-docs/generated/components/search-input/react.js +263 -0
  121. package/patternfly-docs/generated/components/sidebar/react.js +236 -0
  122. package/patternfly-docs/generated/components/simple-list/react.js +200 -0
  123. package/patternfly-docs/generated/components/skeleton/react-demos.js +44 -0
  124. package/patternfly-docs/generated/components/skeleton/react.js +122 -0
  125. package/patternfly-docs/generated/components/skip-to-content/react.js +73 -0
  126. package/patternfly-docs/generated/components/slider/react.js +309 -0
  127. package/patternfly-docs/generated/components/spinner/react.js +111 -0
  128. package/patternfly-docs/generated/components/switch/react.js +163 -0
  129. package/patternfly-docs/generated/components/table/react-demos.js +355 -0
  130. package/patternfly-docs/generated/components/table/react-deprecated.js +1350 -0
  131. package/patternfly-docs/generated/components/table/react.js +3241 -0
  132. package/patternfly-docs/generated/components/tabs/react-demos.js +108 -0
  133. package/patternfly-docs/generated/components/tabs/react.js +1359 -0
  134. package/patternfly-docs/generated/components/text-input-group/react-demos.js +152 -0
  135. package/patternfly-docs/generated/components/text-input-group/react.js +278 -0
  136. package/patternfly-docs/generated/components/tile/react-deprecated.js +242 -0
  137. package/patternfly-docs/generated/components/timestamp/react.js +283 -0
  138. package/patternfly-docs/generated/components/title/react.js +94 -0
  139. package/patternfly-docs/generated/components/toggle-group/react.js +299 -0
  140. package/patternfly-docs/generated/components/toolbar/react-demos.js +66 -0
  141. package/patternfly-docs/generated/components/toolbar/react.js +932 -0
  142. package/patternfly-docs/generated/components/tooltip/react.js +241 -0
  143. package/patternfly-docs/generated/components/tree-view/react.js +429 -0
  144. package/patternfly-docs/generated/components/truncate/react.js +211 -0
  145. package/patternfly-docs/generated/components/wizard/react-demos.js +87 -0
  146. package/patternfly-docs/generated/components/wizard/react-deprecated.js +788 -0
  147. package/patternfly-docs/generated/components/wizard/react.js +986 -0
  148. package/patternfly-docs/generated/developer-guides/open-ui-automation/react.js +285 -0
  149. package/patternfly-docs/generated/foundations-and-styles/layouts/bullseye/react.js +70 -0
  150. package/patternfly-docs/generated/foundations-and-styles/layouts/flex/react.js +506 -0
  151. package/patternfly-docs/generated/foundations-and-styles/layouts/gallery/react.js +94 -0
  152. package/patternfly-docs/generated/foundations-and-styles/layouts/grid/react.js +272 -0
  153. package/patternfly-docs/generated/foundations-and-styles/layouts/level/react.js +87 -0
  154. package/patternfly-docs/generated/foundations-and-styles/layouts/split/react.js +124 -0
  155. package/patternfly-docs/generated/foundations-and-styles/layouts/stack/react.js +112 -0
  156. package/patternfly-docs/generated/index.js +1769 -0
  157. package/patternfly-docs/generated/patterns/card-view/react-demos.js +78 -0
  158. package/patternfly-docs/generated/patterns/filters/react-demos.js +141 -0
  159. package/patternfly-docs/generated/patterns/password-generator/react-demos.js +51 -0
  160. package/patternfly-docs/generated/patterns/password-strength/react-demos.js +61 -0
  161. package/patternfly-docs/generated/patterns/primary-detail/react-demos.js +124 -0
  162. package/patternfly-docs/generated/patterns/right-to-left/react-demos.js +81 -0
  163. package/LICENSE +0 -21
@@ -0,0 +1,749 @@
1
+ import React from 'react';
2
+ import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
3
+ import { useState } from 'react';
4
+ import FileUploadIcon from '@patternfly/react-icons/dist/esm/icons/file-upload-icon';
5
+ const pageData = {
6
+ "id": "Simple file upload",
7
+ "section": "components",
8
+ "subsection": "file-upload",
9
+ "deprecated": false,
10
+ "template": false,
11
+ "beta": false,
12
+ "demo": false,
13
+ "newImplementationLink": false,
14
+ "source": "react",
15
+ "tabName": null,
16
+ "slug": "/components/file-upload/simple-file-upload/react",
17
+ "sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/components/FileUpload/examples/FileUpload.md",
18
+ "relPath": "packages/react-core/src/components/FileUpload/examples/FileUpload.md",
19
+ "propComponents": [
20
+ {
21
+ "name": "FileUpload",
22
+ "description": "",
23
+ "props": [
24
+ {
25
+ "name": "allowEditingUploadedText",
26
+ "type": "boolean",
27
+ "description": "Flag to allow editing of a text file's contents after it is selected from disk."
28
+ },
29
+ {
30
+ "name": "aria-label",
31
+ "type": "string",
32
+ "description": "Aria-label for the text area."
33
+ },
34
+ {
35
+ "name": "browseButtonAriaDescribedby",
36
+ "type": "string",
37
+ "description": "ID or ID's of elements that describe the browse button. Typically this should refer\nto elements such as helper text when there are file restrictions."
38
+ },
39
+ {
40
+ "name": "browseButtonText",
41
+ "type": "string",
42
+ "description": "Text for the browse button."
43
+ },
44
+ {
45
+ "name": "children",
46
+ "type": "React.ReactNode",
47
+ "description": "Additional children to render after (or instead of) the file preview.",
48
+ "defaultValue": "null"
49
+ },
50
+ {
51
+ "name": "className",
52
+ "type": "string",
53
+ "description": "Additional classes added to the file upload container element."
54
+ },
55
+ {
56
+ "name": "clearButtonText",
57
+ "type": "string",
58
+ "description": "Text for the clear button."
59
+ },
60
+ {
61
+ "name": "dropzoneProps",
62
+ "type": "Partial<DropzoneOptions>",
63
+ "description": "Optional extra props to customize react-dropzone.",
64
+ "defaultValue": "{}"
65
+ },
66
+ {
67
+ "name": "filename",
68
+ "type": "string",
69
+ "description": "Value to be shown in the read-only filename field.",
70
+ "defaultValue": "''"
71
+ },
72
+ {
73
+ "name": "filenameAriaLabel",
74
+ "type": "string",
75
+ "description": "Aria-label for the read-only filename field."
76
+ },
77
+ {
78
+ "name": "filenamePlaceholder",
79
+ "type": "string",
80
+ "description": "Placeholder string to display in the empty filename field."
81
+ },
82
+ {
83
+ "name": "hideDefaultPreview",
84
+ "type": "boolean",
85
+ "description": "Flag to hide the built-in preview of the file (where available). If true, you can use\nthe children property to render an alternate preview."
86
+ },
87
+ {
88
+ "name": "id",
89
+ "type": "string",
90
+ "description": "Unique id for the text area. Also used to generate ids for accessible labels.",
91
+ "required": true
92
+ },
93
+ {
94
+ "name": "isDisabled",
95
+ "type": "boolean",
96
+ "description": "Flag to show if the field is disabled."
97
+ },
98
+ {
99
+ "name": "isLoading",
100
+ "type": "boolean",
101
+ "description": "Flag to show if a file is being loaded."
102
+ },
103
+ {
104
+ "name": "isReadOnly",
105
+ "type": "boolean",
106
+ "description": "Flag to show if the field is read only."
107
+ },
108
+ {
109
+ "name": "isRequired",
110
+ "type": "boolean",
111
+ "description": "Flag to show if the field is required."
112
+ },
113
+ {
114
+ "name": "onClearClick",
115
+ "type": "React.MouseEventHandler<HTMLButtonElement>",
116
+ "description": "Clear button was clicked."
117
+ },
118
+ {
119
+ "name": "onClick",
120
+ "type": "(event: React.MouseEvent) => void",
121
+ "description": "Callback for clicking on the file upload field text area. By default, prevents a click\nin the text area from opening file dialog.",
122
+ "defaultValue": "(event) => event.preventDefault()"
123
+ },
124
+ {
125
+ "name": "onDataChange",
126
+ "type": "(event: DropEvent, data: string) => void",
127
+ "description": "On data changed - if type='text' or type='dataURL' and file was loaded it will call this method"
128
+ },
129
+ {
130
+ "name": "onFileInputChange",
131
+ "type": "(event: DropEvent, file: File) => void",
132
+ "description": "Change event emitted from the hidden \\<input type=\"file\" \\> field associated with the component",
133
+ "defaultValue": "null"
134
+ },
135
+ {
136
+ "name": "onReadFailed",
137
+ "type": "(event: DropEvent, error: DOMException, fileHandle: File) => void",
138
+ "description": "A callback for when the FileReader API fails.",
139
+ "defaultValue": "() => {}"
140
+ },
141
+ {
142
+ "name": "onReadFinished",
143
+ "type": "(event: DropEvent, fileHandle: File) => void",
144
+ "description": "A callback for when a selected file finishes loading.",
145
+ "defaultValue": "() => {}"
146
+ },
147
+ {
148
+ "name": "onReadStarted",
149
+ "type": "(event: DropEvent, fileHandle: File) => void",
150
+ "description": "A callback for when a selected file starts loading.",
151
+ "defaultValue": "() => {}"
152
+ },
153
+ {
154
+ "name": "onTextChange",
155
+ "type": "(event: React.ChangeEvent<HTMLTextAreaElement>, text: string) => void",
156
+ "description": "Text area text changed."
157
+ },
158
+ {
159
+ "name": "spinnerAriaValueText",
160
+ "type": "string",
161
+ "description": "Aria-valuetext for the loading spinner."
162
+ },
163
+ {
164
+ "name": "type",
165
+ "type": "'text' | 'dataURL'",
166
+ "description": "What type of file. Determines whether 'onDataChange` is called and what is\nexpected by the value property (a string for 'text' and 'dataURL', or a File object otherwise."
167
+ },
168
+ {
169
+ "name": "validated",
170
+ "type": "'success' | 'error' | 'default'",
171
+ "description": "Value to indicate if the field is modified to show that validation state.\nIf set to success, field will be modified to indicate valid state.\nIf set to error, field will be modified to indicate error state."
172
+ },
173
+ {
174
+ "name": "value",
175
+ "type": "string | File",
176
+ "description": "Value of the file's contents (string if text file, File object otherwise).",
177
+ "defaultValue": "type === fileReaderType.text || type === fileReaderType.dataURL ? '' : null"
178
+ }
179
+ ]
180
+ },
181
+ {
182
+ "name": "FileUploadField",
183
+ "description": "A more customizable file upload component for implementing custom logic. Drag and drop\nfunctionality is not built in by default.",
184
+ "props": [
185
+ {
186
+ "name": "allowEditingUploadedText",
187
+ "type": "boolean",
188
+ "description": "Flag to allow editing of a text file's contents after it is selected from disk.",
189
+ "defaultValue": "false"
190
+ },
191
+ {
192
+ "name": "aria-label",
193
+ "type": "string",
194
+ "description": "Aria-label for the text area.",
195
+ "defaultValue": "'File upload'"
196
+ },
197
+ {
198
+ "name": "browseButtonAriaDescribedby",
199
+ "type": "string",
200
+ "description": "ID or ID's of elements that describe the browse button. Typically this should refer\nto elements such as helper text when there are file restrictions."
201
+ },
202
+ {
203
+ "name": "browseButtonText",
204
+ "type": "string",
205
+ "description": "Text for the browse button.",
206
+ "defaultValue": "'Browse...'"
207
+ },
208
+ {
209
+ "name": "children",
210
+ "type": "React.ReactNode",
211
+ "description": "Additional children to render after (or instead of) the file preview.",
212
+ "defaultValue": "null"
213
+ },
214
+ {
215
+ "name": "className",
216
+ "type": "string",
217
+ "description": "Additional classes added to the file upload field container element.",
218
+ "defaultValue": "''"
219
+ },
220
+ {
221
+ "name": "clearButtonText",
222
+ "type": "string",
223
+ "description": "Text for the clear button.",
224
+ "defaultValue": "'Clear'"
225
+ },
226
+ {
227
+ "name": "containerRef",
228
+ "type": "React.Ref<HTMLDivElement>",
229
+ "description": "A reference object to attach to the file upload field container element.",
230
+ "defaultValue": "null"
231
+ },
232
+ {
233
+ "name": "filename",
234
+ "type": "string",
235
+ "description": "Value to be shown in the read-only filename field.",
236
+ "defaultValue": "''"
237
+ },
238
+ {
239
+ "name": "filenameAriaLabel",
240
+ "type": "string",
241
+ "description": "Aria-label for the read-only filename field.",
242
+ "defaultValue": "filename ? 'Read only filename' : filenamePlaceholder"
243
+ },
244
+ {
245
+ "name": "filenamePlaceholder",
246
+ "type": "string",
247
+ "description": "Placeholder string to display in the empty filename field.",
248
+ "defaultValue": "'Drag a file here or browse to upload'"
249
+ },
250
+ {
251
+ "name": "hideDefaultPreview",
252
+ "type": "boolean",
253
+ "description": "Flag to hide the built-in preview of the file (where available). If true, you can use\nthe children property to render an alternate preview.",
254
+ "defaultValue": "false"
255
+ },
256
+ {
257
+ "name": "id",
258
+ "type": "string",
259
+ "description": "Unique id for the text area. Also used to generate ids for accessible labels.",
260
+ "required": true
261
+ },
262
+ {
263
+ "name": "isBrowseButtonDisabled",
264
+ "type": "boolean",
265
+ "description": "Flag to disable the browse button.",
266
+ "defaultValue": "false"
267
+ },
268
+ {
269
+ "name": "isClearButtonDisabled",
270
+ "type": "boolean",
271
+ "description": "Flag to disable the clear button.",
272
+ "defaultValue": "!filename && !value"
273
+ },
274
+ {
275
+ "name": "isDisabled",
276
+ "type": "boolean",
277
+ "description": "Flag to show if the field is disabled.",
278
+ "defaultValue": "false"
279
+ },
280
+ {
281
+ "name": "isDragActive",
282
+ "type": "boolean",
283
+ "description": "Flag to show if a file is being dragged over the file upload field.",
284
+ "defaultValue": "false"
285
+ },
286
+ {
287
+ "name": "isLoading",
288
+ "type": "boolean",
289
+ "description": "Flag to show if a file is being loaded.",
290
+ "defaultValue": "false"
291
+ },
292
+ {
293
+ "name": "isReadOnly",
294
+ "type": "boolean",
295
+ "description": "Flag to show if the field is read only.",
296
+ "defaultValue": "false"
297
+ },
298
+ {
299
+ "name": "isRequired",
300
+ "type": "boolean",
301
+ "description": "Flag to show if the field is required.",
302
+ "defaultValue": "false"
303
+ },
304
+ {
305
+ "name": "name",
306
+ "type": "string",
307
+ "description": "Name property for the text input."
308
+ },
309
+ {
310
+ "name": "onBrowseButtonClick",
311
+ "type": "(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void",
312
+ "description": "A callback for when the browse button is clicked.",
313
+ "defaultValue": "() => {}"
314
+ },
315
+ {
316
+ "name": "onClearButtonClick",
317
+ "type": "(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void",
318
+ "description": "A callback for when the clear button is clicked.",
319
+ "defaultValue": "() => {}"
320
+ },
321
+ {
322
+ "name": "onTextAreaBlur",
323
+ "type": "(event?: any) => void",
324
+ "description": "Callback for when focus is lost on the text area field."
325
+ },
326
+ {
327
+ "name": "onTextAreaClick",
328
+ "type": "(event: React.MouseEvent<HTMLTextAreaElement, MouseEvent>) => void",
329
+ "description": "A callback for when the text area is clicked. Can also be set via the onClick property\nof the file upload component."
330
+ },
331
+ {
332
+ "name": "onTextChange",
333
+ "type": "(event: React.ChangeEvent<HTMLTextAreaElement>, text: string) => void",
334
+ "description": "Text area text changed."
335
+ },
336
+ {
337
+ "name": "spinnerAriaValueText",
338
+ "type": "string",
339
+ "description": "Aria-valuetext for the loading spinner."
340
+ },
341
+ {
342
+ "name": "textAreaPlaceholder",
343
+ "type": "string",
344
+ "description": "Placeholder string to display in the empty text area field.",
345
+ "defaultValue": "''"
346
+ },
347
+ {
348
+ "name": "type",
349
+ "type": "'text' | 'dataURL'",
350
+ "description": "What type of file. Determines what is is expected by the value property (a string for\n'text' and 'dataURL', or a File object otherwise)."
351
+ },
352
+ {
353
+ "name": "validated",
354
+ "type": "'success' | 'error' | 'default'",
355
+ "description": "Value to indicate if the field is modified to show that validation state.\nIf set to success, field will be modified to indicate valid state.\nIf set to error, field will be modified to indicate error state.",
356
+ "defaultValue": "'default'"
357
+ },
358
+ {
359
+ "name": "value",
360
+ "type": "string | File",
361
+ "description": "Value of the file's contents (string if text file, File object otherwise).",
362
+ "defaultValue": "''"
363
+ }
364
+ ]
365
+ }
366
+ ],
367
+ "cssPrefix": [
368
+ "pf-v6-c-file-upload"
369
+ ],
370
+ "examples": [
371
+ "Simple text file",
372
+ "With helper text",
373
+ "Text file with edits allowed",
374
+ "Text file with restrictions",
375
+ "Simple file of any format",
376
+ "Custom file preview",
377
+ "Custom file upload"
378
+ ]
379
+ };
380
+ pageData.liveContext = {
381
+ useState,
382
+ FileUploadIcon
383
+ };
384
+ pageData.examples = {
385
+ 'Simple text file': props =>
386
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { FileUpload, DropEvent } from '@patternfly/react-core';\n\nexport const SimpleTextFileUpload: React.FunctionComponent = () => {\n const [value, setValue] = useState('');\n const [filename, setFilename] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const handleFileInputChange = (_, file: File) => {\n setFilename(file.name);\n };\n\n const handleTextChange = (_event: React.ChangeEvent<HTMLTextAreaElement>, value: string) => {\n setValue(value);\n };\n\n const handleDataChange = (_event: DropEvent, value: string) => {\n setValue(value);\n };\n\n const handleClear = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setFilename('');\n setValue('');\n };\n\n const handleFileReadStarted = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(true);\n };\n\n const handleFileReadFinished = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(false);\n };\n\n return (\n <FileUpload\n id=\"text-file-simple\"\n type=\"text\"\n value={value}\n filename={filename}\n filenamePlaceholder=\"Drag and drop a file or upload one\"\n onFileInputChange={handleFileInputChange}\n onDataChange={handleDataChange}\n onTextChange={handleTextChange}\n onReadStarted={handleFileReadStarted}\n onReadFinished={handleFileReadFinished}\n onClearClick={handleClear}\n isLoading={isLoading}\n allowEditingUploadedText={false}\n browseButtonText=\"Upload\"\n />\n );\n};\n","title":"Simple text file","lang":"ts","className":""}}>
387
+
388
+ </Example>,
389
+ 'With helper text': props =>
390
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { FileUpload, FileUploadHelperText, HelperText, HelperTextItem, DropEvent } from '@patternfly/react-core';\n\nexport const FileUploadWithHelperText: React.FunctionComponent = () => {\n const [value, setValue] = useState('');\n const [filename, setFilename] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const handleFileInputChange = (_, file: File) => {\n setFilename(file.name);\n };\n\n const handleTextChange = (_event: React.ChangeEvent<HTMLTextAreaElement>, value: string) => {\n setValue(value);\n };\n\n const handleDataChange = (_event: DropEvent, value: string) => {\n setValue(value);\n };\n\n const handleClear = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setFilename('');\n setValue('');\n };\n\n const handleFileReadStarted = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(true);\n };\n\n const handleFileReadFinished = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(false);\n };\n\n return (\n <FileUpload\n id=\"file-upload-helper-text\"\n type=\"text\"\n value={value}\n filename={filename}\n filenamePlaceholder=\"Drag and drop a file or upload one\"\n onFileInputChange={handleFileInputChange}\n onDataChange={handleDataChange}\n onTextChange={handleTextChange}\n onReadStarted={handleFileReadStarted}\n onReadFinished={handleFileReadFinished}\n onClearClick={handleClear}\n isLoading={isLoading}\n allowEditingUploadedText={false}\n browseButtonText=\"Upload\"\n browseButtonAriaDescribedby=\"helper-text-example-helpText\"\n >\n <FileUploadHelperText>\n <HelperText>\n <HelperTextItem id=\"helper-text-example-helpText\">Upload a CSV file</HelperTextItem>\n </HelperText>\n </FileUploadHelperText>\n </FileUpload>\n );\n};\n","title":"With helper text","lang":"ts","className":""}}>
391
+
392
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
393
+ {`You can pass in the `}
394
+
395
+ <code {...{"className":"ws-code "}}>
396
+ {`<FileUploadHelperText`}
397
+ </code>
398
+ {` sub-component via the `}
399
+
400
+ <code {...{"className":"ws-code "}}>
401
+ {`children`}
402
+ </code>
403
+ {` property to `}
404
+
405
+ <code {...{"className":"ws-code "}}>
406
+ {`<FileUpload>`}
407
+ </code>
408
+ {`.`}
409
+ </p>
410
+ </Example>,
411
+ 'Text file with edits allowed': props =>
412
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { FileUpload, DropEvent } from '@patternfly/react-core';\n\nexport const TextFileWithEditsAllowed: React.FunctionComponent = () => {\n const [value, setValue] = useState('');\n const [filename, setFilename] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const handleFileInputChange = (_, file: File) => {\n setFilename(file.name);\n };\n\n const handleTextChange = (_event: React.ChangeEvent<HTMLTextAreaElement>, value: string) => {\n setValue(value);\n };\n\n const handleDataChange = (_event: DropEvent, value: string) => {\n setValue(value);\n };\n\n const handleClear = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setFilename('');\n setValue('');\n };\n\n const handleFileReadStarted = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(true);\n };\n\n const handleFileReadFinished = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(false);\n };\n\n return (\n <FileUpload\n id=\"text-file-with-edits-allowed-example\"\n type=\"text\"\n value={value}\n filename={filename}\n filenamePlaceholder=\"Drag and drop a file or upload one\"\n onFileInputChange={handleFileInputChange}\n onDataChange={handleDataChange}\n onTextChange={handleTextChange}\n onReadStarted={handleFileReadStarted}\n onReadFinished={handleFileReadFinished}\n onClearClick={handleClear}\n isLoading={isLoading}\n allowEditingUploadedText={true}\n browseButtonText=\"Upload\"\n />\n );\n};\n","title":"Text file with edits allowed","lang":"ts","className":""}}>
413
+
414
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
415
+ {`A user can always type instead of selecting a file, but by default, once a user selects a text file from their disk they are not allowed to edit it (to prevent unintended changes to a format-sensitive file). This behavior can be changed with the `}
416
+
417
+ <code {...{"className":"ws-code "}}>
418
+ {`allowEditingUploadedText`}
419
+ </code>
420
+ {` prop.
421
+ Typing/pasting text in the box will call `}
422
+
423
+ <code {...{"className":"ws-code "}}>
424
+ {`onTextChange`}
425
+ </code>
426
+ {` with a string, and a string value is expected for the `}
427
+
428
+ <code {...{"className":"ws-code "}}>
429
+ {`value`}
430
+ </code>
431
+ {` prop. :`}
432
+ </p>
433
+ </Example>,
434
+ 'Text file with restrictions': props =>
435
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport {\n FileUpload,\n DropzoneErrorCode,\n FileUploadHelperText,\n Form,\n FormGroup,\n HelperText,\n HelperTextItem,\n DropEvent\n} from '@patternfly/react-core';\n\nexport const TextFileUploadWithRestrictions: React.FunctionComponent = () => {\n const [value, setValue] = useState('');\n const [filename, setFilename] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isRejected, setIsRejected] = useState(false);\n const [message, setMessage] = useState('Must be a CSV file no larger than 1 KB');\n\n const handleFileInputChange = (_, file: File) => {\n setFilename(file.name);\n };\n\n const handleTextChange = (_event: React.ChangeEvent<HTMLTextAreaElement>, value: string) => {\n setValue(value);\n };\n\n const handleDataChange = (_event: DropEvent, value: string) => {\n setValue(value);\n };\n\n const reset = () => {\n setFilename('');\n setValue('');\n };\n\n const handleClear = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n reset();\n setIsRejected(false);\n };\n\n const handleFileRejected = () => {\n reset();\n setIsRejected(true);\n };\n\n const handleFileAccepted = () => {\n setIsRejected(false);\n };\n\n const handleFileReadStarted = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(true);\n };\n\n const handleFileReadFinished = (_event: DropEvent, _fileHandle: File) => {\n setIsLoading(false);\n };\n\n return (\n <Form>\n <FormGroup fieldId=\"text-file-with-restrictions-example\">\n <FileUpload\n id=\"text-file-with-restrictions-example\"\n type=\"text\"\n value={value}\n filename={filename}\n filenamePlaceholder=\"Drag and drop a file or upload one\"\n onFileInputChange={handleFileInputChange}\n onDataChange={handleDataChange}\n onTextChange={handleTextChange}\n onReadStarted={handleFileReadStarted}\n onReadFinished={handleFileReadFinished}\n onClearClick={handleClear}\n isLoading={isLoading}\n dropzoneProps={{\n accept: { 'text/csv': ['.csv'] },\n maxSize: 1024,\n onDropRejected: (rejections) => {\n const error = rejections[0].errors[0];\n if (error.code === DropzoneErrorCode.FileTooLarge) {\n setMessage('File is too big');\n } else if (error.code === DropzoneErrorCode.FileInvalidType) {\n setMessage('File is not a CSV file');\n }\n handleFileRejected();\n },\n onDropAccepted: handleFileAccepted\n }}\n validated={isRejected ? 'error' : 'default'}\n browseButtonText=\"Upload\"\n browseButtonAriaDescribedby=\"restricted-file-example-helpText\"\n >\n <FileUploadHelperText>\n <HelperText isLiveRegion>\n <HelperTextItem id=\"restricted-file-example-helpText\" variant={isRejected ? 'error' : 'default'}>\n {isRejected ? message : 'Upload a CSV file'}\n </HelperTextItem>\n </HelperText>\n </FileUploadHelperText>\n </FileUpload>\n </FormGroup>\n </Form>\n );\n};\n","title":"Text file with restrictions","lang":"ts","className":""}}>
436
+
437
+ </Example>,
438
+ 'Simple file of any format': props =>
439
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { FileUpload } from '@patternfly/react-core';\n\nexport const SimpleFileUpload: React.FunctionComponent = () => {\n const [value, setValue] = useState('');\n const [filename, setFilename] = useState('');\n\n const handleFileInputChange = (_, file: File) => {\n setFilename(file.name);\n };\n\n const handleClear = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setFilename('');\n setValue('');\n };\n\n return (\n <FileUpload\n id=\"simple-file\"\n value={value}\n filename={filename}\n filenamePlaceholder=\"Drag and drop a file or upload one\"\n onFileInputChange={handleFileInputChange}\n onClearClick={handleClear}\n browseButtonText=\"Upload\"\n />\n );\n};\n","title":"Simple file of any format","lang":"ts","className":""}}>
440
+
441
+ </Example>,
442
+ 'Custom file preview': props =>
443
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { FileUpload } from '@patternfly/react-core';\nimport FileUploadIcon from '@patternfly/react-icons/dist/esm/icons/file-upload-icon';\n\nexport const CustomPreviewFileUpload: React.FunctionComponent = () => {\n const [value, setValue] = useState<File>();\n const [filename, setFilename] = useState('');\n\n const handleFileInputChange = (_, file: File) => {\n setValue(file);\n setFilename(file.name);\n };\n\n const handleClear = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setFilename('');\n setValue(undefined);\n };\n\n return (\n <FileUpload\n id=\"customized-preview-file\"\n value={value}\n filename={filename}\n filenamePlaceholder=\"Drag and drop a file or upload one\"\n onFileInputChange={handleFileInputChange}\n onClearClick={handleClear}\n hideDefaultPreview\n browseButtonText=\"Upload\"\n >\n {value && (\n <div>\n <FileUploadIcon width=\"2em\" height=\"2em\" /> Custom preview here for your {value.size}-byte file named{' '}\n {value.name}\n </div>\n )}\n </FileUpload>\n );\n};\n","title":"Custom file preview","lang":"ts","className":""}}>
444
+
445
+ </Example>,
446
+ 'Custom file upload': props =>
447
+ <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { FileUploadField, FileUploadHelperText, HelperText, HelperTextItem, Checkbox } from '@patternfly/react-core';\n\nexport const CustomPreviewFileUpload: React.FunctionComponent = () => {\n const properties = [\n 'filename',\n 'isBrowseButtonDisabled',\n 'isClearButtonDisabled',\n 'isDragActive',\n 'isLoading',\n 'hideDefaultPreview',\n 'hasCustomFilePreview',\n 'hasHelperText',\n 'hasPlaceholderText'\n ];\n\n const [value, setValue] = useState('');\n const [filename, setFilename] = useState(false);\n const [isBrowseButtonDisabled, setIsBrowseButtonDisabled] = useState(true);\n const [isClearButtonDisabled, setIsClearButtonDisabled] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const [isDragActive, setIsDragActive] = useState(false);\n const [hideDefaultPreview, setHideDefaultPreview] = useState(false);\n const [hasCustomFilePreview, setHasCustomFilePreview] = useState(false);\n const [hasHelperText, setHasHelperText] = useState(false);\n const [hasPlaceholderText, setHasPlaceholderText] = useState(false);\n const [checkedState, setCheckedState] = useState([\n filename,\n isBrowseButtonDisabled,\n isClearButtonDisabled,\n isLoading,\n isDragActive,\n hideDefaultPreview,\n hasCustomFilePreview,\n hasHelperText,\n hasPlaceholderText\n ]);\n\n const handleTextAreaChange = (_event: React.ChangeEvent<HTMLTextAreaElement>, value: string) => {\n setValue(value);\n };\n\n const handleOnChange = (checked: boolean, stateKey: string, index: number) => {\n const updatedCheckedState = [...checkedState];\n switch (stateKey) {\n case 'filename':\n checked ? setFilename(true) : setFilename(false);\n break;\n\n case 'isBrowseButtonDisabled':\n checked ? setIsBrowseButtonDisabled(true) : setIsBrowseButtonDisabled(false);\n break;\n\n case 'isClearButtonDisabled':\n checked ? setIsClearButtonDisabled(true) : setIsClearButtonDisabled(false);\n break;\n\n case 'isDragActive':\n checked ? setIsDragActive(true) : setIsDragActive(false);\n break;\n\n case 'isLoading':\n checked ? setIsLoading(true) : setIsLoading(false);\n // See notes above this example\n if (checked) {\n updatedCheckedState[properties.indexOf('hideDefaultPreview')] = false;\n setHideDefaultPreview(false);\n }\n break;\n\n case 'hideDefaultPreview':\n checked ? setHideDefaultPreview(true) : setHideDefaultPreview(false);\n // See notes above this example\n if (checked) {\n updatedCheckedState[properties.indexOf('isLoading')] = false;\n setIsLoading(false);\n }\n break;\n\n case 'hasCustomFilePreview':\n checked ? setHasCustomFilePreview(true) : setHasCustomFilePreview(false);\n break;\n\n case 'hasHelperText':\n checked ? setHasHelperText(true) : setHasHelperText(false);\n break;\n\n case 'hasPlaceholderText':\n checked ? setHasPlaceholderText(true) : setHasPlaceholderText(false);\n break;\n }\n updatedCheckedState[index] = checked;\n setCheckedState(updatedCheckedState);\n };\n\n return (\n <div>\n {properties.map((stateKey, index) => (\n <Checkbox\n name={stateKey}\n key={stateKey}\n id={stateKey}\n label={stateKey}\n aria-label={stateKey}\n isChecked={checkedState[index]}\n onChange={(_event, checked) => handleOnChange(checked, stateKey, index)}\n />\n ))}\n <br />\n <FileUploadField\n id=\"custom-file-upload-example\"\n type=\"text\"\n value={value}\n filename={filename ? 'example-filename.txt' : ''}\n onTextChange={handleTextAreaChange}\n filenamePlaceholder=\"Do something custom with this!\"\n onBrowseButtonClick={() => alert('Browse button clicked!')}\n onClearButtonClick={() => alert('Clear button clicked!')}\n isBrowseButtonDisabled={isBrowseButtonDisabled}\n isClearButtonDisabled={isClearButtonDisabled}\n isLoading={isLoading}\n isDragActive={isDragActive}\n hideDefaultPreview={hideDefaultPreview}\n browseButtonText=\"Upload\"\n browseButtonAriaDescribedby={hasHelperText ? 'custom-upload-helpText' : undefined}\n textAreaPlaceholder={hasPlaceholderText ? 'File preview' : ''}\n >\n {hasCustomFilePreview && <div>(A custom preview of the uploaded file can be passed as children)</div>}\n {hasHelperText && (\n <FileUploadHelperText>\n <HelperText>\n <HelperTextItem id=\"custom-upload-helpText\">Upload a CSV file</HelperTextItem>\n </HelperText>\n </FileUploadHelperText>\n )}\n </FileUploadField>\n </div>\n );\n};\n","title":"Custom file upload","lang":"ts","className":""}}>
448
+
449
+ </Example>
450
+ };
451
+
452
+ const Component = () => (
453
+ <React.Fragment>
454
+ <AutoLinkHeader {...{"id":"examples","headingLevel":"h2","className":"ws-title ws-h2"}}>
455
+ {`Examples`}
456
+ </AutoLinkHeader>
457
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
458
+ {`The `}
459
+ <code {...{"className":"ws-code "}}>
460
+ {`FileUpload`}
461
+ </code>
462
+ {` component can accept a file via browse or drag-and-drop, and behaves like a standard form field with its `}
463
+ <code {...{"className":"ws-code "}}>
464
+ {`value`}
465
+ </code>
466
+ {` and `}
467
+ <code {...{"className":"ws-code "}}>
468
+ {`onFileInputChange`}
469
+ </code>
470
+ {` event that is similar to `}
471
+ <code {...{"className":"ws-code "}}>
472
+ {`<input onChange="...">`}
473
+ </code>
474
+ {` prop. The `}
475
+ <code {...{"className":"ws-code "}}>
476
+ {`type`}
477
+ </code>
478
+ {` prop determines how the `}
479
+ <code {...{"className":"ws-code "}}>
480
+ {`FileUpload`}
481
+ </code>
482
+ {` component behaves upon accepting a file, what type of value it passes to its `}
483
+ <code {...{"className":"ws-code "}}>
484
+ {`onDataChange`}
485
+ </code>
486
+ {` event.`}
487
+ </p>
488
+ <AutoLinkHeader {...{"id":"text-files","headingLevel":"h3","className":"ws-title ws-h3"}}>
489
+ {`Text files`}
490
+ </AutoLinkHeader>
491
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
492
+ {`If `}
493
+ <code {...{"className":"ws-code "}}>
494
+ {`type="text"`}
495
+ </code>
496
+ {` is passed (and `}
497
+ <code {...{"className":"ws-code "}}>
498
+ {`hideDefaultPreview`}
499
+ </code>
500
+ {` is not), a `}
501
+ <code {...{"className":"ws-code "}}>
502
+ {`TextArea`}
503
+ </code>
504
+ {` preview will be rendered underneath the filename bar. When a file is selected, its contents will be read into memory and passed to the `}
505
+ <code {...{"className":"ws-code "}}>
506
+ {`onDataChange`}
507
+ </code>
508
+ {` event as a string. Every filename change is passed to `}
509
+ <code {...{"className":"ws-code "}}>
510
+ {`onFileInputChange`}
511
+ </code>
512
+ {` same as it would do with the `}
513
+ <code {...{"className":"ws-code "}}>
514
+ {`<input>`}
515
+ </code>
516
+ {` element.
517
+ Pressing `}
518
+ <em {...{"className":""}}>
519
+ {`Clear`}
520
+ </em>
521
+ {` button triggers `}
522
+ <code {...{"className":"ws-code "}}>
523
+ {`onClearClick`}
524
+ </code>
525
+ {` event.`}
526
+ </p>
527
+ {React.createElement(pageData.examples["Simple text file"])}
528
+ {React.createElement(pageData.examples["With helper text"])}
529
+ {React.createElement(pageData.examples["Text file with edits allowed"])}
530
+ <AutoLinkHeader {...{"id":"restricting-file-size-and-type","headingLevel":"h3","className":"ws-title ws-h3"}}>
531
+ {`Restricting file size and type`}
532
+ </AutoLinkHeader>
533
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
534
+ {`Any `}
535
+ <PatternflyThemeLink {...{"to":"https://react-dropzone.js.org/#!/Dropzone","className":""}}>
536
+ {`props accepted by `}
537
+ <code {...{"className":"ws-code "}}>
538
+ {`react-dropzone`}
539
+ </code>
540
+ {`'s `}
541
+ <code {...{"className":"ws-code "}}>
542
+ {`Dropzone`}
543
+ </code>
544
+ {` component`}
545
+ </PatternflyThemeLink>
546
+ {` can be passed as a `}
547
+ <code {...{"className":"ws-code "}}>
548
+ {`dropzoneProps`}
549
+ </code>
550
+ {` object in order to customize the behavior of the Dropzone, such as restricting the size and type of files allowed. You can also capture and act upon native `}
551
+ <code {...{"className":"ws-code "}}>
552
+ {`react-dropzone`}
553
+ </code>
554
+ {` errors using the exposed `}
555
+ <code {...{"className":"ws-code "}}>
556
+ {`DropzoneErrorCode`}
557
+ </code>
558
+ {` enum. The following example will only accept CSV files smaller than 1 KB. Note that file type determination is not reliable across platforms (see the note on react-dropzone's docs about the `}
559
+ <code {...{"className":"ws-code "}}>
560
+ {`accept`}
561
+ </code>
562
+ {` prop), so be sure to test the behavior of your file upload restriction on all browsers and operating systems targeted by your application.`}
563
+ </p>
564
+ <AutoLinkHeader {...{"id":"important-a-note-about-security","headingLevel":"h4","className":"ws-title ws-h4"}}>
565
+ {`IMPORTANT: A note about security`}
566
+ </AutoLinkHeader>
567
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
568
+ {`Restricting file sizes and types in this way is for user convenience only, and it cannot prevent a malicious user from submitting anything to your server. As with any user input, your application should also validate, sanitize and/or reject restricted files on the server side.`}
569
+ </p>
570
+ {React.createElement(pageData.examples["Text file with restrictions"])}
571
+ <AutoLinkHeader {...{"id":"other-file-types","headingLevel":"h3","className":"ws-title ws-h3"}}>
572
+ {`Other file types`}
573
+ </AutoLinkHeader>
574
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
575
+ {`If no `}
576
+ <code {...{"className":"ws-code "}}>
577
+ {`type`}
578
+ </code>
579
+ {` prop is specified, the component will not read files directly. When a file is selected, a `}
580
+ <PatternflyThemeLink {...{"to":"https://developer.mozilla.org/en-US/docs/Web/API/File","className":""}}>
581
+ <code {...{"className":"ws-code "}}>
582
+ {`File`}
583
+ </code>
584
+ {` object`}
585
+ </PatternflyThemeLink>
586
+ {` will be passed as a second argument to `}
587
+ <code {...{"className":"ws-code "}}>
588
+ {`onFileInputChange`}
589
+ </code>
590
+ {` and your application will be responsible for reading from it (e.g. by using the `}
591
+ <PatternflyThemeLink {...{"to":"https://developer.mozilla.org/en-US/docs/Web/API/FileReader","className":""}}>
592
+ {`FileReader API`}
593
+ </PatternflyThemeLink>
594
+ {` or attaching it to a `}
595
+ <PatternflyThemeLink {...{"to":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects","className":""}}>
596
+ {`FormData object`}
597
+ </PatternflyThemeLink>
598
+ {`). A `}
599
+ <code {...{"className":"ws-code "}}>
600
+ {`File`}
601
+ </code>
602
+ {` object will also be expected for the `}
603
+ <code {...{"className":"ws-code "}}>
604
+ {`value`}
605
+ </code>
606
+ {` prop instead of a string, and no preview of the file contents will be shown by default. The `}
607
+ <code {...{"className":"ws-code "}}>
608
+ {`onReadStarted`}
609
+ </code>
610
+ {` and `}
611
+ <code {...{"className":"ws-code "}}>
612
+ {`onReadFinished`}
613
+ </code>
614
+ {` callbacks will also not be called since the component is not reading the file.`}
615
+ </p>
616
+ {React.createElement(pageData.examples["Simple file of any format"])}
617
+ <AutoLinkHeader {...{"id":"customizing-the-file-preview","headingLevel":"h3","className":"ws-title ws-h3"}}>
618
+ {`Customizing the file preview`}
619
+ </AutoLinkHeader>
620
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
621
+ {`Regardless of `}
622
+ <code {...{"className":"ws-code "}}>
623
+ {`type`}
624
+ </code>
625
+ {`, the preview area (the TextArea, or any future implementations of default previews for other types) can be removed by passing `}
626
+ <code {...{"className":"ws-code "}}>
627
+ {`hideDefaultPreview`}
628
+ </code>
629
+ {`, and a custom one can be rendered by passing `}
630
+ <code {...{"className":"ws-code "}}>
631
+ {`children`}
632
+ </code>
633
+ {`.`}
634
+ </p>
635
+ {React.createElement(pageData.examples["Custom file preview"])}
636
+ <AutoLinkHeader {...{"id":"bringing-your-own-file-browse-logic","headingLevel":"h3","className":"ws-title ws-h3"}}>
637
+ {`Bringing your own file browse logic`}
638
+ </AutoLinkHeader>
639
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
640
+ <code {...{"className":"ws-code "}}>
641
+ {`FileUpload`}
642
+ </code>
643
+ {` is a thin wrapper around the `}
644
+ <code {...{"className":"ws-code "}}>
645
+ {`FileUploadField`}
646
+ </code>
647
+ {` presentational component. If you need to implement your own logic for accepting files, you can instead render a `}
648
+ <code {...{"className":"ws-code "}}>
649
+ {`FileUploadField`}
650
+ </code>
651
+ {` directly, which does not include `}
652
+ <code {...{"className":"ws-code "}}>
653
+ {`react-dropzone`}
654
+ </code>
655
+ {` and requires additional props (e.g. `}
656
+ <code {...{"className":"ws-code "}}>
657
+ {`onBrowseButtonClick`}
658
+ </code>
659
+ {`, `}
660
+ <code {...{"className":"ws-code "}}>
661
+ {`onClearButtonClick`}
662
+ </code>
663
+ {`, `}
664
+ <code {...{"className":"ws-code "}}>
665
+ {`isDragActive`}
666
+ </code>
667
+ {`).`}
668
+ </p>
669
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
670
+ {`Note that the `}
671
+ <code {...{"className":"ws-code "}}>
672
+ {`isLoading`}
673
+ </code>
674
+ {` prop is styled to position the spinner dead center above the entire component, so it should not be used with `}
675
+ <code {...{"className":"ws-code "}}>
676
+ {`hideDefaultPreview`}
677
+ </code>
678
+ {` unless a custom empty-state preview is provided via `}
679
+ <code {...{"className":"ws-code "}}>
680
+ {`children`}
681
+ </code>
682
+ {`. The below example prevents `}
683
+ <code {...{"className":"ws-code "}}>
684
+ {`isLoading`}
685
+ </code>
686
+ {` and `}
687
+ <code {...{"className":"ws-code "}}>
688
+ {`hideDefaultPreview`}
689
+ </code>
690
+ {` from being used at the same time. You can always provide your own spinner as part of the `}
691
+ <code {...{"className":"ws-code "}}>
692
+ {`children`}
693
+ </code>
694
+ {`!`}
695
+ </p>
696
+ {React.createElement(pageData.examples["Custom file upload"])}
697
+ <AutoLinkHeader {...{"id":"types","headingLevel":"h2","className":"ws-title ws-h2"}}>
698
+ {`Types`}
699
+ </AutoLinkHeader>
700
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
701
+ {`File upload uses the `}
702
+ <code {...{"className":"ws-code "}}>
703
+ {`DropzoneOptions`}
704
+ </code>
705
+ {` type from react-dropzone. It is comprised of additional props with their own types. For more information on using `}
706
+ <code {...{"className":"ws-code "}}>
707
+ {`DropzoneOptions`}
708
+ </code>
709
+ {` visit `}
710
+ <PatternflyThemeLink {...{"to":"https://react-dropzone.js.org/#src","className":""}}>
711
+ {`react-dropzone props and methods`}
712
+ </PatternflyThemeLink>
713
+ {`.`}
714
+ </p>
715
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
716
+ {`Additionally, it calls the `}
717
+ <code {...{"className":"ws-code "}}>
718
+ {`onDataChange`}
719
+ </code>
720
+ {`, `}
721
+ <code {...{"className":"ws-code "}}>
722
+ {`onReadFailed`}
723
+ </code>
724
+ {`, `}
725
+ <code {...{"className":"ws-code "}}>
726
+ {`onReadFinished`}
727
+ </code>
728
+ {`, and `}
729
+ <code {...{"className":"ws-code "}}>
730
+ {`onReadStarted`}
731
+ </code>
732
+ {` callbacks with an event of type `}
733
+ <code {...{"className":"ws-code "}}>
734
+ {`DropEvent`}
735
+ </code>
736
+ {`. `}
737
+ <code {...{"className":"ws-code "}}>
738
+ {`DropEvent`}
739
+ </code>
740
+ {` is a union comprised of the following types:`}
741
+ </p>
742
+ <Example {...{"code":"React.DragEvent<HTMLElement>\n | React.ChangeEvent<HTMLInputElement>\n | DragEvent\n | Event","lang":"noLive","className":""}}>
743
+ </Example>
744
+ </React.Fragment>
745
+ );
746
+ Component.displayName = 'ComponentsFileUploadSimpleFileUploadReactDocs';
747
+ Component.pageData = pageData;
748
+
749
+ export default Component;