@patternfly/react-core 5.2.0-prerelease.40 → 5.2.0-prerelease.41

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 (254) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/Chip/package.json +1 -1
  21. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  22. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/DragDrop/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/Text/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/Tile/package.json +1 -1
  76. package/dist/dynamic/components/TimePicker/package.json +1 -1
  77. package/dist/dynamic/components/Timestamp/package.json +1 -1
  78. package/dist/dynamic/components/Title/package.json +1 -1
  79. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  80. package/dist/dynamic/components/Toolbar/package.json +1 -1
  81. package/dist/dynamic/components/Tooltip/package.json +1 -1
  82. package/dist/dynamic/components/TreeView/package.json +1 -1
  83. package/dist/dynamic/components/Truncate/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  85. package/dist/dynamic/components/Wizard/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/Select/package.json +1 -1
  92. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  93. package/dist/dynamic/deprecated/components/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/favorites/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  110. package/dist/dynamic/helpers/util/package.json +1 -1
  111. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  112. package/dist/dynamic/layouts/Flex/package.json +1 -1
  113. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  114. package/dist/dynamic/layouts/Grid/package.json +1 -1
  115. package/dist/dynamic/layouts/Level/package.json +1 -1
  116. package/dist/dynamic/layouts/Split/package.json +1 -1
  117. package/dist/dynamic/layouts/Stack/package.json +1 -1
  118. package/dist/dynamic/next/components/Modal/package.json +1 -0
  119. package/dist/dynamic/next/components/package.json +1 -1
  120. package/dist/esm/next/components/Modal/Modal.d.ts +73 -0
  121. package/dist/esm/next/components/Modal/Modal.d.ts.map +1 -0
  122. package/dist/esm/next/components/Modal/Modal.js +114 -0
  123. package/dist/esm/next/components/Modal/Modal.js.map +1 -0
  124. package/dist/esm/next/components/Modal/ModalBody.d.ts +19 -0
  125. package/dist/esm/next/components/Modal/ModalBody.d.ts.map +1 -0
  126. package/dist/esm/next/components/Modal/ModalBody.js +11 -0
  127. package/dist/esm/next/components/Modal/ModalBody.js.map +1 -0
  128. package/dist/esm/next/components/Modal/ModalBox.d.ts +21 -0
  129. package/dist/esm/next/components/Modal/ModalBox.d.ts.map +1 -0
  130. package/dist/esm/next/components/Modal/ModalBox.js +15 -0
  131. package/dist/esm/next/components/Modal/ModalBox.js.map +1 -0
  132. package/dist/esm/next/components/Modal/ModalBoxCloseButton.d.ts +14 -0
  133. package/dist/esm/next/components/Modal/ModalBoxCloseButton.d.ts.map +1 -0
  134. package/dist/esm/next/components/Modal/ModalBoxCloseButton.js +14 -0
  135. package/dist/esm/next/components/Modal/ModalBoxCloseButton.js.map +1 -0
  136. package/dist/esm/next/components/Modal/ModalBoxDescription.d.ts +11 -0
  137. package/dist/esm/next/components/Modal/ModalBoxDescription.d.ts.map +1 -0
  138. package/dist/esm/next/components/Modal/ModalBoxDescription.js +10 -0
  139. package/dist/esm/next/components/Modal/ModalBoxDescription.js.map +1 -0
  140. package/dist/esm/next/components/Modal/ModalBoxTitle.d.ts +17 -0
  141. package/dist/esm/next/components/Modal/ModalBoxTitle.d.ts.map +1 -0
  142. package/dist/esm/next/components/Modal/ModalBoxTitle.js +38 -0
  143. package/dist/esm/next/components/Modal/ModalBoxTitle.js.map +1 -0
  144. package/dist/esm/next/components/Modal/ModalContent.d.ts +42 -0
  145. package/dist/esm/next/components/Modal/ModalContent.d.ts.map +1 -0
  146. package/dist/esm/next/components/Modal/ModalContent.js +45 -0
  147. package/dist/esm/next/components/Modal/ModalContent.js.map +1 -0
  148. package/dist/esm/next/components/Modal/ModalFooter.d.ts +10 -0
  149. package/dist/esm/next/components/Modal/ModalFooter.d.ts.map +1 -0
  150. package/dist/esm/next/components/Modal/ModalFooter.js +10 -0
  151. package/dist/esm/next/components/Modal/ModalFooter.js.map +1 -0
  152. package/dist/esm/next/components/Modal/ModalHeader.d.ts +25 -0
  153. package/dist/esm/next/components/Modal/ModalHeader.d.ts.map +1 -0
  154. package/dist/esm/next/components/Modal/ModalHeader.js +21 -0
  155. package/dist/esm/next/components/Modal/ModalHeader.js.map +1 -0
  156. package/dist/esm/next/components/Modal/index.d.ts +5 -0
  157. package/dist/esm/next/components/Modal/index.d.ts.map +1 -0
  158. package/dist/esm/next/components/Modal/index.js +5 -0
  159. package/dist/esm/next/components/Modal/index.js.map +1 -0
  160. package/dist/esm/next/components/index.d.ts +1 -1
  161. package/dist/esm/next/components/index.d.ts.map +1 -1
  162. package/dist/esm/next/components/index.js +1 -1
  163. package/dist/esm/next/components/index.js.map +1 -1
  164. package/dist/js/next/components/Modal/Modal.d.ts +73 -0
  165. package/dist/js/next/components/Modal/Modal.d.ts.map +1 -0
  166. package/dist/js/next/components/Modal/Modal.js +117 -0
  167. package/dist/js/next/components/Modal/Modal.js.map +1 -0
  168. package/dist/js/next/components/Modal/ModalBody.d.ts +19 -0
  169. package/dist/js/next/components/Modal/ModalBody.d.ts.map +1 -0
  170. package/dist/js/next/components/Modal/ModalBody.js +15 -0
  171. package/dist/js/next/components/Modal/ModalBody.js.map +1 -0
  172. package/dist/js/next/components/Modal/ModalBox.d.ts +21 -0
  173. package/dist/js/next/components/Modal/ModalBox.d.ts.map +1 -0
  174. package/dist/js/next/components/Modal/ModalBox.js +19 -0
  175. package/dist/js/next/components/Modal/ModalBox.js.map +1 -0
  176. package/dist/js/next/components/Modal/ModalBoxCloseButton.d.ts +14 -0
  177. package/dist/js/next/components/Modal/ModalBoxCloseButton.d.ts.map +1 -0
  178. package/dist/js/next/components/Modal/ModalBoxCloseButton.js +18 -0
  179. package/dist/js/next/components/Modal/ModalBoxCloseButton.js.map +1 -0
  180. package/dist/js/next/components/Modal/ModalBoxDescription.d.ts +11 -0
  181. package/dist/js/next/components/Modal/ModalBoxDescription.d.ts.map +1 -0
  182. package/dist/js/next/components/Modal/ModalBoxDescription.js +14 -0
  183. package/dist/js/next/components/Modal/ModalBoxDescription.js.map +1 -0
  184. package/dist/js/next/components/Modal/ModalBoxTitle.d.ts +17 -0
  185. package/dist/js/next/components/Modal/ModalBoxTitle.d.ts.map +1 -0
  186. package/dist/js/next/components/Modal/ModalBoxTitle.js +43 -0
  187. package/dist/js/next/components/Modal/ModalBoxTitle.js.map +1 -0
  188. package/dist/js/next/components/Modal/ModalContent.d.ts +42 -0
  189. package/dist/js/next/components/Modal/ModalContent.d.ts.map +1 -0
  190. package/dist/js/next/components/Modal/ModalContent.js +49 -0
  191. package/dist/js/next/components/Modal/ModalContent.js.map +1 -0
  192. package/dist/js/next/components/Modal/ModalFooter.d.ts +10 -0
  193. package/dist/js/next/components/Modal/ModalFooter.d.ts.map +1 -0
  194. package/dist/js/next/components/Modal/ModalFooter.js +14 -0
  195. package/dist/js/next/components/Modal/ModalFooter.js.map +1 -0
  196. package/dist/js/next/components/Modal/ModalHeader.d.ts +25 -0
  197. package/dist/js/next/components/Modal/ModalHeader.d.ts.map +1 -0
  198. package/dist/js/next/components/Modal/ModalHeader.js +25 -0
  199. package/dist/js/next/components/Modal/ModalHeader.js.map +1 -0
  200. package/dist/js/next/components/Modal/index.d.ts +5 -0
  201. package/dist/js/next/components/Modal/index.d.ts.map +1 -0
  202. package/dist/js/next/components/Modal/index.js +8 -0
  203. package/dist/js/next/components/Modal/index.js.map +1 -0
  204. package/dist/js/next/components/index.d.ts +1 -1
  205. package/dist/js/next/components/index.d.ts.map +1 -1
  206. package/dist/js/next/components/index.js +1 -1
  207. package/dist/js/next/components/index.js.map +1 -1
  208. package/helpers/package.json +1 -1
  209. package/layouts/package.json +1 -1
  210. package/next/package.json +1 -1
  211. package/package.json +2 -2
  212. package/src/next/components/Modal/Modal.tsx +202 -0
  213. package/src/next/components/Modal/ModalBody.tsx +42 -0
  214. package/src/next/components/Modal/ModalBox.tsx +63 -0
  215. package/src/next/components/Modal/ModalBoxCloseButton.tsx +38 -0
  216. package/src/next/components/Modal/ModalBoxDescription.tsx +24 -0
  217. package/src/next/components/Modal/ModalBoxTitle.tsx +75 -0
  218. package/src/next/components/Modal/ModalContent.tsx +131 -0
  219. package/src/next/components/Modal/ModalFooter.tsx +23 -0
  220. package/src/next/components/Modal/ModalHeader.tsx +71 -0
  221. package/src/next/components/Modal/__tests__/Modal.test.tsx +145 -0
  222. package/src/next/components/Modal/__tests__/ModalBody.test.tsx +60 -0
  223. package/src/next/components/Modal/__tests__/ModalBox.test.tsx +58 -0
  224. package/src/next/components/Modal/__tests__/ModalBoxCloseButton.test.tsx +18 -0
  225. package/src/next/components/Modal/__tests__/ModalBoxDescription.test.tsx +8 -0
  226. package/src/next/components/Modal/__tests__/ModalBoxHeader.test.tsx +21 -0
  227. package/src/next/components/Modal/__tests__/ModalBoxTitle.test.tsx +37 -0
  228. package/src/next/components/Modal/__tests__/ModalContent.test.tsx +46 -0
  229. package/src/next/components/Modal/__tests__/ModalFooter.test.tsx +8 -0
  230. package/src/next/components/Modal/__tests__/__snapshots__/ModalBody.test.tsx.snap +12 -0
  231. package/src/next/components/Modal/__tests__/__snapshots__/ModalBox.test.tsx.snap +86 -0
  232. package/src/next/components/Modal/__tests__/__snapshots__/ModalBoxDescription.test.tsx.snap +12 -0
  233. package/src/next/components/Modal/__tests__/__snapshots__/ModalBoxHeader.test.tsx.snap +46 -0
  234. package/src/next/components/Modal/__tests__/__snapshots__/ModalBoxTitle.test.tsx.snap +218 -0
  235. package/src/next/components/Modal/__tests__/__snapshots__/ModalContent.test.tsx.snap +128 -0
  236. package/src/next/components/Modal/__tests__/__snapshots__/ModalFooter.test.tsx.snap +11 -0
  237. package/src/next/components/Modal/examples/Modal.md +148 -0
  238. package/src/next/components/Modal/examples/ModalBasic.tsx +43 -0
  239. package/src/next/components/Modal/examples/ModalCustomFocus.tsx +43 -0
  240. package/src/next/components/Modal/examples/ModalCustomHeader.tsx +58 -0
  241. package/src/next/components/Modal/examples/ModalCustomTitleIcon.tsx +54 -0
  242. package/src/next/components/Modal/examples/ModalCustomWidth.tsx +43 -0
  243. package/src/next/components/Modal/examples/ModalNoHeaderFooter.tsx +40 -0
  244. package/src/next/components/Modal/examples/ModalSize.tsx +63 -0
  245. package/src/next/components/Modal/examples/ModalTitleIcon.tsx +48 -0
  246. package/src/next/components/Modal/examples/ModalTopAligned.tsx +43 -0
  247. package/src/next/components/Modal/examples/ModalWithDescription.tsx +80 -0
  248. package/src/next/components/Modal/examples/ModalWithDropdown.tsx +105 -0
  249. package/src/next/components/Modal/examples/ModalWithForm.tsx +211 -0
  250. package/src/next/components/Modal/examples/ModalWithHelp.tsx +63 -0
  251. package/src/next/components/Modal/examples/ModalWithOverflowingContent.tsx +75 -0
  252. package/src/next/components/Modal/examples/ModalWithWizard.tsx +59 -0
  253. package/src/next/components/Modal/index.ts +4 -0
  254. package/src/next/components/index.ts +1 -1
@@ -0,0 +1,128 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Modal Content Test description 1`] = `
4
+ <DocumentFragment>
5
+ <div
6
+ class="pf-v5-c-backdrop"
7
+ >
8
+ <div
9
+ class="pf-v5-l-bullseye"
10
+ >
11
+ <div
12
+ aria-modal="true"
13
+ class="pf-v5-c-modal-box"
14
+ data-ouia-component-type="PF5/ModalContent"
15
+ data-ouia-safe="true"
16
+ descriptorid="descriptorId"
17
+ id="boxId"
18
+ labelid="labelId"
19
+ role="dialog"
20
+ >
21
+ This is a ModalBox header
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </DocumentFragment>
26
+ `;
27
+
28
+ exports[`Modal Content Test isOpen 1`] = `
29
+ <DocumentFragment>
30
+ <div
31
+ class="pf-v5-c-backdrop"
32
+ >
33
+ <div
34
+ class="pf-v5-l-bullseye"
35
+ >
36
+ <div
37
+ aria-modal="true"
38
+ class="pf-v5-c-modal-box"
39
+ data-ouia-component-type="PF5/ModalContent"
40
+ data-ouia-safe="true"
41
+ descriptorid="descriptorId"
42
+ id="boxId"
43
+ labelid="labelId"
44
+ role="dialog"
45
+ >
46
+ This is a ModalBox header
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </DocumentFragment>
51
+ `;
52
+
53
+ exports[`Modal Content Test only body 1`] = `
54
+ <DocumentFragment>
55
+ <div
56
+ class="pf-v5-c-backdrop"
57
+ >
58
+ <div
59
+ class="pf-v5-l-bullseye"
60
+ >
61
+ <div
62
+ aria-modal="true"
63
+ class="pf-v5-c-modal-box"
64
+ data-ouia-component-type="PF5/ModalContent"
65
+ data-ouia-safe="true"
66
+ descriptorid="descriptorId"
67
+ id="boxId"
68
+ labelid="labelId"
69
+ role="dialog"
70
+ >
71
+ This is a ModalBox header
72
+ </div>
73
+ </div>
74
+ </div>
75
+ </DocumentFragment>
76
+ `;
77
+
78
+ exports[`Modal Content Test with onclose 1`] = `
79
+ <DocumentFragment>
80
+ <div
81
+ class="pf-v5-c-backdrop"
82
+ >
83
+ <div
84
+ class="pf-v5-l-bullseye"
85
+ >
86
+ <div
87
+ aria-modal="true"
88
+ class="pf-v5-c-modal-box pf-m-lg"
89
+ data-ouia-component-type="PF5/ModalContent"
90
+ data-ouia-safe="true"
91
+ descriptorid="descriptorId"
92
+ id="boxId"
93
+ labelid="labelId"
94
+ role="dialog"
95
+ >
96
+ <div
97
+ class="pf-v5-c-modal-box__close"
98
+ >
99
+ <button
100
+ aria-disabled="false"
101
+ aria-label="Close"
102
+ class="pf-v5-c-button pf-m-plain"
103
+ data-ouia-component-id="OUIA-Generated-Button-plain-1"
104
+ data-ouia-component-type="PF5/Button"
105
+ data-ouia-safe="true"
106
+ type="button"
107
+ >
108
+ <svg
109
+ aria-hidden="true"
110
+ class="pf-v5-svg"
111
+ fill="currentColor"
112
+ height="1em"
113
+ role="img"
114
+ viewBox="0 0 352 512"
115
+ width="1em"
116
+ >
117
+ <path
118
+ d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"
119
+ />
120
+ </svg>
121
+ </button>
122
+ </div>
123
+ This is a ModalBox header
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </DocumentFragment>
128
+ `;
@@ -0,0 +1,11 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ModalFooter Test 1`] = `
4
+ <DocumentFragment>
5
+ <footer
6
+ class="pf-v5-c-modal-box__footer test-box-footer-class"
7
+ >
8
+ This is a ModalBox Footer
9
+ </footer>
10
+ </DocumentFragment>
11
+ `;
@@ -0,0 +1,148 @@
1
+ ---
2
+ id: Modal
3
+ section: components
4
+ cssPrefix: pf-v5-c-modal-box
5
+ propComponents: ['Modal', 'ModalBody', 'ModalHeader', 'ModalFooter']
6
+ ouia: true
7
+ beta: true
8
+ ---
9
+
10
+ import WarningTriangleIcon from '@patternfly/react-icons/dist/esm/icons/warning-triangle-icon';
11
+ import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon';
12
+ import BullhornIcon from '@patternfly/react-icons/dist/esm/icons/bullhorn-icon';
13
+ import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
14
+ import formStyles from '@patternfly/react-styles/css/components/Form/form';
15
+
16
+ ## Examples
17
+
18
+ ### Basic modals
19
+
20
+ Basic modals give users the option to either confirm or cancel an action.
21
+
22
+ To flag an open modal, use the `isOpen` property. To execute a callback when a modal is closed, use the `onClose` property.
23
+
24
+ A modal must have a `<ModalBody>`, containing the main content of the modal. The `<ModalHeader>` and `<ModalFooter>` components are not required, but are typically used to display the modal title and any button actions, respectively.
25
+
26
+ ```ts file="./ModalBasic.tsx"
27
+
28
+ ```
29
+
30
+ ### Scrollable modals
31
+
32
+ To enable keyboard-accessible scrolling of a modal’s content, pass `tabIndex={0}` to the `<ModalBody>`.
33
+
34
+ ```ts file="ModalWithOverflowingContent.tsx"
35
+
36
+ ```
37
+
38
+ ### With a static description
39
+
40
+ To provide additional information about a modal, use the `description` property. Descriptions are static and do not scroll with other modal content.
41
+
42
+ ```ts file="./ModalWithDescription.tsx"
43
+
44
+ ```
45
+
46
+ ### Top aligned
47
+
48
+ To override a modal's default center alignment, use the `position` property. In this example, `position` is set to "top", which moves the modal to the top of the screen.
49
+
50
+ ```ts file="./ModalTopAligned.tsx"
51
+
52
+ ```
53
+
54
+ ### Modal sizes
55
+
56
+ To adjust the size of a modal, use the `variant` property. Modal variants include "small", "medium", "large", and "default".
57
+
58
+ In the following example, you can display each modal size option. To launch a modal with a specific size, first select the respective radio button, followed by the "Show modal" button.
59
+
60
+ ```ts file="./ModalSize.tsx"
61
+
62
+ ```
63
+
64
+ ### Custom width
65
+
66
+ To choose a specific width for a modal, use the `width` property. The following example has a `width` of "50%".
67
+
68
+ ```ts file="./ModalCustomWidth.tsx"
69
+
70
+ ```
71
+
72
+ ### Custom header
73
+
74
+ To add a custom header to a modal, your custom content must be passed as a child of the `<ModalHeader>` component. Do not pass the `title` property to `<ModalHeader>` when using a custom header.
75
+
76
+ ```ts file="./ModalCustomHeader.tsx"
77
+
78
+ ```
79
+
80
+ ### No header or footer
81
+
82
+ To exclusively present information in a modal, remove the header and/or footer.
83
+
84
+ When a modal has no header or footer, make sure to add an `aria-label` explicitly stating this, so that those using assistive technologies can understand this context.
85
+
86
+ ```ts file="./ModalNoHeaderFooter.tsx"
87
+
88
+ ```
89
+
90
+ ### Title icon
91
+
92
+ To add an icon before a modal’s title, use the `titleIconVariant` property, which can be set to a "success", "danger", "warning", or "info" variant. The following example uses a "warning" variant.
93
+
94
+ ```ts file="./ModalTitleIcon.tsx"
95
+
96
+ ```
97
+
98
+ ### Custom title icon
99
+
100
+ To add a custom icon before a modal’s title, set `titleIconVariant` to an imported custom icon. The following example imports and uses a bullhorn icon.
101
+
102
+ ```ts file="./ModalCustomTitleIcon.tsx"
103
+
104
+ ```
105
+
106
+ ### With wizard
107
+
108
+ To guide users through a series of steps in a modal, you can add a [wizard](/components/wizard) to a modal. To configure the `<Wizard>`, pass an array that contains a “name” and “component” value for each step into the `steps` property.
109
+
110
+ ```ts file="./ModalWithWizard.tsx"
111
+
112
+ ```
113
+
114
+ ### With dropdown
115
+
116
+ To present a menu of actions or links to a user, you can add a [dropdown](/components/menus/dropdown) to a modal.
117
+
118
+ To allow the dropdown to visually break out of the modal container, set the `menuAppendTo` property to “parent”. Handle the modal’s closing behavior by listening to the `onEscapePress` callback on the `<Modal>` component. This allows the "escape" key to collapse the dropdown without closing the entire modal.
119
+
120
+ ```ts file="./ModalWithDropdown.tsx"
121
+
122
+ ```
123
+
124
+ ### With help
125
+
126
+ To help simplify and explain complex models, add a help [popover](/components/popover). Only place a help icon at the modal level if its information applies to all content in the modal. If the help popover is specific to a particular modal section, place the help icon beside that section instead.
127
+
128
+ ```ts file="./ModalWithHelp.tsx"
129
+
130
+ ```
131
+
132
+ ### With form
133
+
134
+ To collect user input within a modal, you can add a [form](/components/forms/form).
135
+
136
+ To enable form submission from a button in the modal's footer (outside of the `<Form>`), set the button's `form` property equal to the form's id.
137
+
138
+ ```ts file="ModalWithForm.tsx"
139
+
140
+ ```
141
+
142
+ ### Custom focus
143
+
144
+ To customize which element inside the modal receives focus when initially opened, use the `elementToFocus` property`.
145
+
146
+ ```ts file="./ModalCustomFocus.tsx"
147
+
148
+ ```
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { Button } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core/next';
4
+
5
+ export const ModalBasic: React.FunctionComponent = () => {
6
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+
8
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
9
+ setIsModalOpen(!isModalOpen);
10
+ };
11
+
12
+ return (
13
+ <React.Fragment>
14
+ <Button variant="primary" onClick={handleModalToggle} ouiaId="ShowBasicModal">
15
+ Show basic modal
16
+ </Button>
17
+ <Modal
18
+ isOpen={isModalOpen}
19
+ onClose={handleModalToggle}
20
+ ouiaId="BasicModal"
21
+ aria-labelledby="basic-modal-title"
22
+ aria-describedby="modal-box-body-basic"
23
+ >
24
+ <ModalHeader title="Basic modal" labelId="basic-modal-title" />
25
+ <ModalBody id="modal-box-body-basic">
26
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
27
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
28
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
29
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
30
+ est laborum.
31
+ </ModalBody>
32
+ <ModalFooter>
33
+ <Button key="confirm" variant="primary" onClick={handleModalToggle}>
34
+ Confirm
35
+ </Button>
36
+ <Button key="cancel" variant="link" onClick={handleModalToggle}>
37
+ Cancel
38
+ </Button>
39
+ </ModalFooter>
40
+ </Modal>
41
+ </React.Fragment>
42
+ );
43
+ };
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { Button } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core/next';
4
+
5
+ export const ModalCustomFocus: React.FunctionComponent = () => {
6
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+
8
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
9
+ setIsModalOpen(!isModalOpen);
10
+ };
11
+
12
+ return (
13
+ <React.Fragment>
14
+ <Button variant="primary" onClick={handleModalToggle} ouiaId="ShowBasicModal">
15
+ Show modal with custom focus
16
+ </Button>
17
+ <Modal
18
+ elementToFocus="#modal-custom-focus-confirm-button"
19
+ isOpen={isModalOpen}
20
+ onClose={handleModalToggle}
21
+ aria-labelledby="custom-focus-modal-title"
22
+ aria-describedby="modal-box-body-custom-focus"
23
+ >
24
+ <ModalHeader title="Modal with custom focus" labelId="custom-focus-modal-title" />
25
+ <ModalBody id="modal-box-body-custom-focus">
26
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
27
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
28
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
29
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
30
+ est laborum.
31
+ <ModalFooter>
32
+ <Button id="modal-custom-focus-confirm-button" key="confirm" variant="primary" onClick={handleModalToggle}>
33
+ Confirm
34
+ </Button>
35
+ <Button key="cancel" variant="link" onClick={handleModalToggle}>
36
+ Cancel
37
+ </Button>
38
+ </ModalFooter>
39
+ </ModalBody>
40
+ </Modal>
41
+ </React.Fragment>
42
+ );
43
+ };
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import { Button, Title, TitleSizes, TextContent, Flex } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant } from '@patternfly/react-core/next';
4
+
5
+ import WarningTriangleIcon from '@patternfly/react-icons/dist/esm/icons/warning-triangle-icon';
6
+
7
+ export const ModalCustomHeaderFooter: React.FunctionComponent = () => {
8
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
9
+
10
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
11
+ setIsModalOpen(!isModalOpen);
12
+ };
13
+
14
+ return (
15
+ <React.Fragment>
16
+ <Button variant="primary" onClick={handleModalToggle}>
17
+ Show custom header/footer modal
18
+ </Button>
19
+ <Modal
20
+ variant={ModalVariant.large}
21
+ isOpen={isModalOpen}
22
+ onClose={handleModalToggle}
23
+ aria-labelledby="modal-custom-header-label"
24
+ aria-describedby="modal-custom-header-description"
25
+ >
26
+ <ModalHeader>
27
+ <TextContent>
28
+ <Title id="modal-custom-header-label" headingLevel="h1" size={TitleSizes['2xl']}>
29
+ Custom header modal
30
+ </Title>
31
+ <p>Add custom content to the header by not passing the titles prop the modal box header component.</p>
32
+ </TextContent>
33
+ </ModalHeader>
34
+ <ModalBody>
35
+ <span id="modal-custom-header-description">
36
+ When static text describing the modal is available outside of the modal header, it can be given an ID that
37
+ is then passed in as the modal's aria-describedby value.
38
+ </span>
39
+ <br />
40
+ <br />
41
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
42
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
43
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
44
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
45
+ est laborum.
46
+ </ModalBody>
47
+ <ModalFooter>
48
+ <Title headingLevel="h4" size={TitleSizes.md}>
49
+ <Flex spaceItems={{ default: 'spaceItemsSm' }}>
50
+ <WarningTriangleIcon />
51
+ <span>Custom modal footer.</span>
52
+ </Flex>
53
+ </Title>
54
+ </ModalFooter>
55
+ </Modal>
56
+ </React.Fragment>
57
+ );
58
+ };
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import { Button } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core/next';
4
+
5
+ import BullhornIcon from '@patternfly/react-icons/dist/esm/icons/bullhorn-icon';
6
+
7
+ export const ModalCustomTitleIcon: React.FunctionComponent = () => {
8
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
9
+
10
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
11
+ setIsModalOpen(!isModalOpen);
12
+ };
13
+
14
+ return (
15
+ <React.Fragment>
16
+ <Button variant="primary" onClick={handleModalToggle}>
17
+ Show custom title icon modal
18
+ </Button>
19
+ <Modal
20
+ isOpen={isModalOpen}
21
+ onClose={handleModalToggle}
22
+ aria-describedby="modal-custom-icon-description"
23
+ aria-labelledby="custom-title-icon-modal-title"
24
+ >
25
+ <ModalHeader
26
+ title="Custom title icon modal"
27
+ titleIconVariant={BullhornIcon}
28
+ labelId="custom-title-icon-modal-title"
29
+ />
30
+ <ModalBody>
31
+ <span id="modal-custom-icon-description">
32
+ When static text describing the modal is available outside of the modal header, it can be given an ID that
33
+ is then passed in as the modal's aria-describedby value.
34
+ </span>
35
+ <br />
36
+ <br />
37
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
38
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
39
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
40
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
41
+ est laborum.
42
+ </ModalBody>
43
+ <ModalFooter>
44
+ <Button key="confirm" variant="primary" onClick={handleModalToggle}>
45
+ Confirm
46
+ </Button>
47
+ <Button key="cancel" variant="link" onClick={handleModalToggle}>
48
+ Cancel
49
+ </Button>
50
+ </ModalFooter>
51
+ </Modal>
52
+ </React.Fragment>
53
+ );
54
+ };
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { Button } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core/next';
4
+
5
+ export const ModalCustomWidth: React.FunctionComponent = () => {
6
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+
8
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
9
+ setIsModalOpen(!isModalOpen);
10
+ };
11
+
12
+ return (
13
+ <React.Fragment>
14
+ <Button variant="primary" onClick={handleModalToggle}>
15
+ Show custom width modal
16
+ </Button>
17
+ <Modal
18
+ width="50%"
19
+ isOpen={isModalOpen}
20
+ onClose={handleModalToggle}
21
+ aria-labelledby="custom-width-modal-title"
22
+ aria-describedby="modal-box-body-custom-width"
23
+ >
24
+ <ModalHeader title="Custom width modal" labelId="custom-width-modal-title" />
25
+ <ModalBody id="modal-box-body-custom-width">
26
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
27
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
28
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
29
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
30
+ est laborum.
31
+ </ModalBody>
32
+ <ModalFooter>
33
+ <Button key="confirm" variant="primary" onClick={handleModalToggle}>
34
+ Confirm
35
+ </Button>
36
+ <Button key="cancel" variant="link" onClick={handleModalToggle}>
37
+ Cancel
38
+ </Button>
39
+ </ModalFooter>
40
+ </Modal>
41
+ </React.Fragment>
42
+ );
43
+ };
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { Button } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalVariant } from '@patternfly/react-core/next';
4
+
5
+ export const ModalNoHeaderFooter: React.FunctionComponent = () => {
6
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+
8
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
9
+ setIsModalOpen(!isModalOpen);
10
+ };
11
+
12
+ return (
13
+ <React.Fragment>
14
+ <Button variant="primary" onClick={handleModalToggle}>
15
+ Show no header/footer modal
16
+ </Button>
17
+ <Modal
18
+ variant={ModalVariant.large}
19
+ isOpen={isModalOpen}
20
+ aria-label="No header/footer modal"
21
+ aria-describedby="modal-no-header-description"
22
+ onClose={handleModalToggle}
23
+ >
24
+ <ModalBody>
25
+ <span id="modal-no-header-description">
26
+ When static text describing the modal is available outside of the modal header, it can be given an ID that
27
+ is then passed in as the modal's aria-describedby value.
28
+ </span>
29
+ <br />
30
+ <br />
31
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
32
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
33
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
34
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
35
+ est laborum.
36
+ </ModalBody>
37
+ </Modal>
38
+ </React.Fragment>
39
+ );
40
+ };
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import { Button, Radio } from '@patternfly/react-core';
3
+ import { Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant } from '@patternfly/react-core/next';
4
+
5
+ export const ModalSize: React.FunctionComponent = () => {
6
+ const [isModalOpen, setIsModalOpen] = React.useState(false);
7
+ const [selectedVariant, setSelectedVariant] = React.useState(ModalVariant.small);
8
+
9
+ const capitalize = (input: string) => input[0].toUpperCase() + input.substring(1);
10
+ const formatSizeVariantName = (variant: string) => capitalize(variant);
11
+
12
+ const variantOptions = [ModalVariant.small, ModalVariant.medium, ModalVariant.large];
13
+
14
+ const renderSizeOptions = variantOptions.map((variant) => (
15
+ <Radio
16
+ id={`modal-size-${variant}-selector`}
17
+ label={`${formatSizeVariantName(variant)} variant`}
18
+ isChecked={variant === selectedVariant}
19
+ onChange={() => setSelectedVariant(variant)}
20
+ key={formatSizeVariantName(variant)}
21
+ name="Variant options"
22
+ />
23
+ ));
24
+
25
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
26
+ setIsModalOpen(!isModalOpen);
27
+ };
28
+
29
+ return (
30
+ <React.Fragment>
31
+ {renderSizeOptions}
32
+ <br />
33
+ <Button variant="primary" onClick={handleModalToggle}>
34
+ Show modal
35
+ </Button>
36
+ <Modal
37
+ variant={selectedVariant}
38
+ title="Variant modal"
39
+ isOpen={isModalOpen}
40
+ onClose={handleModalToggle}
41
+ aria-labelledby="variant-modal-title"
42
+ aria-describedby="modal-box-body-variant"
43
+ >
44
+ <ModalHeader title="Small modal" labelId="variant-modal-title" />
45
+ <ModalBody id="modal-box-body-variant">
46
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
47
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
48
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
49
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
50
+ est laborum.
51
+ </ModalBody>
52
+ <ModalFooter>
53
+ <Button key="confirm" variant="primary" onClick={handleModalToggle}>
54
+ Confirm
55
+ </Button>
56
+ <Button key="cancel" variant="link" onClick={handleModalToggle}>
57
+ Cancel
58
+ </Button>
59
+ </ModalFooter>
60
+ </Modal>
61
+ </React.Fragment>
62
+ );
63
+ };