@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.
- package/CHANGELOG.md +6 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/Chip/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/DragDrop/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/Text/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
- package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
- package/dist/dynamic/deprecated/components/Select/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/favorites/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/next/components/Modal/package.json +1 -0
- package/dist/dynamic/next/components/package.json +1 -1
- package/dist/esm/next/components/Modal/Modal.d.ts +73 -0
- package/dist/esm/next/components/Modal/Modal.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/Modal.js +114 -0
- package/dist/esm/next/components/Modal/Modal.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalBody.d.ts +19 -0
- package/dist/esm/next/components/Modal/ModalBody.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalBody.js +11 -0
- package/dist/esm/next/components/Modal/ModalBody.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalBox.d.ts +21 -0
- package/dist/esm/next/components/Modal/ModalBox.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalBox.js +15 -0
- package/dist/esm/next/components/Modal/ModalBox.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalBoxCloseButton.d.ts +14 -0
- package/dist/esm/next/components/Modal/ModalBoxCloseButton.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalBoxCloseButton.js +14 -0
- package/dist/esm/next/components/Modal/ModalBoxCloseButton.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalBoxDescription.d.ts +11 -0
- package/dist/esm/next/components/Modal/ModalBoxDescription.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalBoxDescription.js +10 -0
- package/dist/esm/next/components/Modal/ModalBoxDescription.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalBoxTitle.d.ts +17 -0
- package/dist/esm/next/components/Modal/ModalBoxTitle.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalBoxTitle.js +38 -0
- package/dist/esm/next/components/Modal/ModalBoxTitle.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalContent.d.ts +42 -0
- package/dist/esm/next/components/Modal/ModalContent.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalContent.js +45 -0
- package/dist/esm/next/components/Modal/ModalContent.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalFooter.d.ts +10 -0
- package/dist/esm/next/components/Modal/ModalFooter.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalFooter.js +10 -0
- package/dist/esm/next/components/Modal/ModalFooter.js.map +1 -0
- package/dist/esm/next/components/Modal/ModalHeader.d.ts +25 -0
- package/dist/esm/next/components/Modal/ModalHeader.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/ModalHeader.js +21 -0
- package/dist/esm/next/components/Modal/ModalHeader.js.map +1 -0
- package/dist/esm/next/components/Modal/index.d.ts +5 -0
- package/dist/esm/next/components/Modal/index.d.ts.map +1 -0
- package/dist/esm/next/components/Modal/index.js +5 -0
- package/dist/esm/next/components/Modal/index.js.map +1 -0
- package/dist/esm/next/components/index.d.ts +1 -1
- package/dist/esm/next/components/index.d.ts.map +1 -1
- package/dist/esm/next/components/index.js +1 -1
- package/dist/esm/next/components/index.js.map +1 -1
- package/dist/js/next/components/Modal/Modal.d.ts +73 -0
- package/dist/js/next/components/Modal/Modal.d.ts.map +1 -0
- package/dist/js/next/components/Modal/Modal.js +117 -0
- package/dist/js/next/components/Modal/Modal.js.map +1 -0
- package/dist/js/next/components/Modal/ModalBody.d.ts +19 -0
- package/dist/js/next/components/Modal/ModalBody.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalBody.js +15 -0
- package/dist/js/next/components/Modal/ModalBody.js.map +1 -0
- package/dist/js/next/components/Modal/ModalBox.d.ts +21 -0
- package/dist/js/next/components/Modal/ModalBox.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalBox.js +19 -0
- package/dist/js/next/components/Modal/ModalBox.js.map +1 -0
- package/dist/js/next/components/Modal/ModalBoxCloseButton.d.ts +14 -0
- package/dist/js/next/components/Modal/ModalBoxCloseButton.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalBoxCloseButton.js +18 -0
- package/dist/js/next/components/Modal/ModalBoxCloseButton.js.map +1 -0
- package/dist/js/next/components/Modal/ModalBoxDescription.d.ts +11 -0
- package/dist/js/next/components/Modal/ModalBoxDescription.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalBoxDescription.js +14 -0
- package/dist/js/next/components/Modal/ModalBoxDescription.js.map +1 -0
- package/dist/js/next/components/Modal/ModalBoxTitle.d.ts +17 -0
- package/dist/js/next/components/Modal/ModalBoxTitle.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalBoxTitle.js +43 -0
- package/dist/js/next/components/Modal/ModalBoxTitle.js.map +1 -0
- package/dist/js/next/components/Modal/ModalContent.d.ts +42 -0
- package/dist/js/next/components/Modal/ModalContent.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalContent.js +49 -0
- package/dist/js/next/components/Modal/ModalContent.js.map +1 -0
- package/dist/js/next/components/Modal/ModalFooter.d.ts +10 -0
- package/dist/js/next/components/Modal/ModalFooter.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalFooter.js +14 -0
- package/dist/js/next/components/Modal/ModalFooter.js.map +1 -0
- package/dist/js/next/components/Modal/ModalHeader.d.ts +25 -0
- package/dist/js/next/components/Modal/ModalHeader.d.ts.map +1 -0
- package/dist/js/next/components/Modal/ModalHeader.js +25 -0
- package/dist/js/next/components/Modal/ModalHeader.js.map +1 -0
- package/dist/js/next/components/Modal/index.d.ts +5 -0
- package/dist/js/next/components/Modal/index.d.ts.map +1 -0
- package/dist/js/next/components/Modal/index.js +8 -0
- package/dist/js/next/components/Modal/index.js.map +1 -0
- package/dist/js/next/components/index.d.ts +1 -1
- package/dist/js/next/components/index.d.ts.map +1 -1
- package/dist/js/next/components/index.js +1 -1
- package/dist/js/next/components/index.js.map +1 -1
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +2 -2
- package/src/next/components/Modal/Modal.tsx +202 -0
- package/src/next/components/Modal/ModalBody.tsx +42 -0
- package/src/next/components/Modal/ModalBox.tsx +63 -0
- package/src/next/components/Modal/ModalBoxCloseButton.tsx +38 -0
- package/src/next/components/Modal/ModalBoxDescription.tsx +24 -0
- package/src/next/components/Modal/ModalBoxTitle.tsx +75 -0
- package/src/next/components/Modal/ModalContent.tsx +131 -0
- package/src/next/components/Modal/ModalFooter.tsx +23 -0
- package/src/next/components/Modal/ModalHeader.tsx +71 -0
- package/src/next/components/Modal/__tests__/Modal.test.tsx +145 -0
- package/src/next/components/Modal/__tests__/ModalBody.test.tsx +60 -0
- package/src/next/components/Modal/__tests__/ModalBox.test.tsx +58 -0
- package/src/next/components/Modal/__tests__/ModalBoxCloseButton.test.tsx +18 -0
- package/src/next/components/Modal/__tests__/ModalBoxDescription.test.tsx +8 -0
- package/src/next/components/Modal/__tests__/ModalBoxHeader.test.tsx +21 -0
- package/src/next/components/Modal/__tests__/ModalBoxTitle.test.tsx +37 -0
- package/src/next/components/Modal/__tests__/ModalContent.test.tsx +46 -0
- package/src/next/components/Modal/__tests__/ModalFooter.test.tsx +8 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalBody.test.tsx.snap +12 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalBox.test.tsx.snap +86 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalBoxDescription.test.tsx.snap +12 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalBoxHeader.test.tsx.snap +46 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalBoxTitle.test.tsx.snap +218 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalContent.test.tsx.snap +128 -0
- package/src/next/components/Modal/__tests__/__snapshots__/ModalFooter.test.tsx.snap +11 -0
- package/src/next/components/Modal/examples/Modal.md +148 -0
- package/src/next/components/Modal/examples/ModalBasic.tsx +43 -0
- package/src/next/components/Modal/examples/ModalCustomFocus.tsx +43 -0
- package/src/next/components/Modal/examples/ModalCustomHeader.tsx +58 -0
- package/src/next/components/Modal/examples/ModalCustomTitleIcon.tsx +54 -0
- package/src/next/components/Modal/examples/ModalCustomWidth.tsx +43 -0
- package/src/next/components/Modal/examples/ModalNoHeaderFooter.tsx +40 -0
- package/src/next/components/Modal/examples/ModalSize.tsx +63 -0
- package/src/next/components/Modal/examples/ModalTitleIcon.tsx +48 -0
- package/src/next/components/Modal/examples/ModalTopAligned.tsx +43 -0
- package/src/next/components/Modal/examples/ModalWithDescription.tsx +80 -0
- package/src/next/components/Modal/examples/ModalWithDropdown.tsx +105 -0
- package/src/next/components/Modal/examples/ModalWithForm.tsx +211 -0
- package/src/next/components/Modal/examples/ModalWithHelp.tsx +63 -0
- package/src/next/components/Modal/examples/ModalWithOverflowingContent.tsx +75 -0
- package/src/next/components/Modal/examples/ModalWithWizard.tsx +59 -0
- package/src/next/components/Modal/index.ts +4 -0
- 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,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
|
+
};
|