playbook_ui 14.11.1.pre.alpha.PLAY17445539 → 14.11.1.pre.alpha.hfhbrakemanplaybook5370
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.md +2 -2
- data/app/pb_kits/playbook/pb_button/button.html.erb +3 -2
- data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +6 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +6 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.md +1 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.html.erb +9 -3
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_drawer/_drawer.scss +177 -154
- data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +264 -162
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +45 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +16 -9
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +19 -44
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +3 -21
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +21 -16
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +19 -2
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +1 -2
- data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +5 -5
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_subtle_variant.md +1 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +12 -7
- data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +14 -9
- data/app/pb_kits/playbook/pb_dropdown/dropdown_option.html.erb +11 -6
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +14 -8
- data/app/pb_kits/playbook/pb_list/item.html.erb +8 -30
- data/app/pb_kits/playbook/pb_list/item.rb +0 -7
- data/app/pb_kits/playbook/pb_list/list.html.erb +11 -31
- data/app/pb_kits/playbook/pb_list/list.rb +0 -4
- data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +1 -6
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +12 -30
- data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +1 -3
- data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +0 -3
- data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.test.js +1 -20
- data/app/pb_kits/playbook/pb_radio/_radio.scss +8 -12
- data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_children.jsx +3 -8
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list.html.erb +3 -17
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list.rb +0 -3
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +4 -11
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.rb +0 -3
- data/app/pb_kits/playbook/pb_table/_table.tsx +3 -2
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_rails.md +2 -2
- data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_table/index.ts +34 -93
- data/app/pb_kits/playbook/pb_table/styles/_scroll.scss +5 -6
- data/app/pb_kits/playbook/pb_table/table.html.erb +1 -1
- data/app/pb_kits/playbook/pb_table/table.rb +2 -17
- data/app/pb_kits/playbook/pb_timeline/_timeline.scss +30 -30
- data/dist/chunks/{_typeahead-vFuUQM5F.js → _typeahead-BNULwihE.js} +2 -2
- data/dist/chunks/_weekday_stacked-BKWemDAe.js +45 -0
- data/dist/chunks/{lib-OFT985dg.js → lib-B7sgJtGS.js} +2 -2
- data/dist/chunks/{pb_form_validation-CrsXd1-Y.js → pb_form_validation-C5Cc0-1v.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +6 -21
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.md +0 -5
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.html.erb +0 -38
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.md +0 -3
- data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -38
- data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -73
- data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_format.html.erb +0 -15
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_format.jsx +0 -24
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_format.md +0 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.html.erb +0 -74
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_rails.md +0 -3
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.html.erb +0 -74
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_rails.md +0 -3
- data/app/pb_kits/playbook/pb_table/utilities/addDataTitle.ts +0 -22
- data/dist/chunks/_weekday_stacked-DG3A22sS.js +0 -45
@@ -1,83 +1,230 @@
|
|
1
|
-
import React, { useState, useEffect
|
2
|
-
import classnames from "classnames"
|
1
|
+
import React, { useState, useEffect } from "react";
|
2
|
+
import classnames from "classnames";
|
3
3
|
|
4
4
|
import {
|
5
5
|
buildAriaProps,
|
6
6
|
buildCss,
|
7
7
|
buildDataProps,
|
8
8
|
buildHtmlProps,
|
9
|
-
} from "../utilities/props"
|
10
|
-
import { globalProps, globalInlineProps } from "../utilities/globalProps"
|
11
|
-
|
12
|
-
import {
|
9
|
+
} from "../utilities/props";
|
10
|
+
import { globalProps, globalInlineProps } from "../utilities/globalProps";
|
11
|
+
|
12
|
+
import { DialogContext } from "../pb_dialog/_dialog_context";
|
13
13
|
|
14
14
|
type DrawerProps = {
|
15
|
-
aria?: { [key: string]: string }
|
16
|
-
behavior?: "floating" | "push"
|
17
|
-
border?: "full" | "none" | "right" | "left"
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
15
|
+
aria?: { [key: string]: string };
|
16
|
+
behavior?: "floating" | "push";
|
17
|
+
border?: "full" | "none" | "right" | "left";
|
18
|
+
openBreakpoint?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
19
|
+
closeBreakpoint?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
20
|
+
children: React.ReactNode | React.ReactNode[] | string;
|
21
|
+
className?: string;
|
22
|
+
data?: { [key: string]: string };
|
23
|
+
htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
|
24
|
+
id?: string;
|
25
|
+
fullHeight?: boolean;
|
26
|
+
menuButtonID?: string;
|
27
|
+
onClose?: () => void;
|
28
|
+
opened: boolean;
|
29
|
+
overlay: boolean;
|
30
|
+
placement?: "left" | "right";
|
31
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl";
|
32
|
+
text?: string;
|
33
|
+
withinElement?: boolean;
|
34
|
+
};
|
35
|
+
|
36
|
+
const Drawer = (props: DrawerProps): React.ReactElement => {
|
35
37
|
const {
|
36
38
|
aria = {},
|
37
39
|
behavior = "floating",
|
38
40
|
border = "none",
|
39
|
-
|
41
|
+
openBreakpoint = "none",
|
42
|
+
closeBreakpoint = "none",
|
40
43
|
className,
|
41
44
|
data = {},
|
42
45
|
htmlOptions = {},
|
43
46
|
id,
|
44
47
|
size = "md",
|
45
48
|
children,
|
46
|
-
|
49
|
+
fullHeight = true,
|
50
|
+
menuButtonID,
|
47
51
|
opened,
|
48
52
|
onClose,
|
49
53
|
overlay = true,
|
50
54
|
placement = "left",
|
51
55
|
withinElement = false,
|
52
|
-
} = props
|
53
|
-
|
54
|
-
const
|
55
|
-
const
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
56
|
+
} = props;
|
57
|
+
const ariaProps = buildAriaProps(aria);
|
58
|
+
const dataProps = buildDataProps(data);
|
59
|
+
const htmlProps = buildHtmlProps(htmlOptions);
|
60
|
+
|
61
|
+
let globalPropsString: string = globalProps(props);
|
62
|
+
|
63
|
+
// Check if the string contains any of the prefixes
|
64
|
+
const containsPrefix = [
|
65
|
+
"p_",
|
66
|
+
"pb_",
|
67
|
+
"pt_",
|
68
|
+
"pl_",
|
69
|
+
"pr_",
|
70
|
+
"px_",
|
71
|
+
"py_",
|
72
|
+
].some((prefix) => globalPropsString.includes(prefix));
|
73
|
+
|
74
|
+
// If none of the prefixes are found, append 'p_sm' to the string
|
75
|
+
if (!containsPrefix) {
|
76
|
+
globalPropsString += " p_sm";
|
77
|
+
}
|
78
|
+
|
79
|
+
const drawerClassNames = {
|
80
|
+
base: `${classnames(
|
81
|
+
"pb_drawer",
|
82
|
+
buildCss("pb_drawer", size, placement),
|
83
|
+
{
|
84
|
+
drawer_border_full: border === "full",
|
85
|
+
drawer_border_right: border === "right",
|
86
|
+
drawer_border_left: border === "left",
|
87
|
+
pb_drawer_within_element: withinElement,
|
88
|
+
}
|
89
|
+
)} ${globalPropsString}`,
|
90
|
+
afterOpen: "pb_drawer_after_open",
|
91
|
+
beforeClose: "pb_drawer_before_close",
|
92
|
+
};
|
93
|
+
|
94
|
+
const fullHeightClassNames = () => {
|
95
|
+
if (!fullHeight) return null;
|
96
|
+
return `full_height_${placement}`;
|
97
|
+
};
|
98
|
+
|
99
|
+
const overlayClassNames = {
|
100
|
+
base: `pb_drawer${overlay ? "_overlay" : "_no_overlay"} ${
|
101
|
+
fullHeight !== null && fullHeightClassNames()
|
102
|
+
} ${!overlay ? "no-background" : ""}`,
|
103
|
+
afterOpen: "pb_drawer_overlay_after_open",
|
104
|
+
beforeClose: "pb_drawer_overlay_before_close",
|
105
|
+
};
|
106
|
+
|
107
|
+
const classes = classnames(buildCss("pb_drawer_wrapper"), className);
|
108
|
+
const dynamicInlineProps = globalInlineProps(props)
|
109
|
+
const [menuButtonOpened, setMenuButtonOpened] = useState(false);
|
110
|
+
const [triggerOpened, setTriggerOpened] = useState(false);
|
111
|
+
|
112
|
+
const breakpointWidths: Record<DrawerProps["openBreakpoint"], number> = {
|
113
|
+
none: 0,
|
114
|
+
xs: 575,
|
115
|
+
sm: 768,
|
116
|
+
md: 992,
|
117
|
+
lg: 1200,
|
118
|
+
xl: 1400,
|
119
|
+
};
|
120
|
+
|
121
|
+
const breakpointValues = {
|
122
|
+
none: 0,
|
123
|
+
xs: 575,
|
124
|
+
sm: 768,
|
125
|
+
md: 992,
|
126
|
+
lg: 1200,
|
127
|
+
xl: 1400,
|
128
|
+
}
|
129
|
+
|
130
|
+
const [isOpenBreakpointOpen, setIsOpenBreakpointOpen] = useState(false);
|
131
|
+
const [isUserClosed, setIsUserClosed] = useState(false);
|
132
|
+
|
133
|
+
useEffect(() => {
|
134
|
+
if (openBreakpoint === "none") return;
|
135
|
+
|
136
|
+
const handleResize = () => {
|
137
|
+
const width = window.innerWidth;
|
138
|
+
const openBreakpointWidth = breakpointWidths[openBreakpoint];
|
139
|
+
|
140
|
+
if (width <= openBreakpointWidth) {
|
141
|
+
setIsOpenBreakpointOpen(true);
|
142
|
+
} else {
|
143
|
+
setIsOpenBreakpointOpen(false);
|
144
|
+
setIsUserClosed(false); // Reset when the breakpoint condition changes
|
145
|
+
}
|
146
|
+
};
|
147
|
+
|
148
|
+
window.addEventListener("resize", handleResize);
|
149
|
+
|
150
|
+
// Call handler once on mount to set initial state
|
151
|
+
handleResize();
|
152
|
+
|
153
|
+
return () => {
|
154
|
+
window.removeEventListener("resize", handleResize);
|
155
|
+
};
|
156
|
+
}, [openBreakpoint]);
|
157
|
+
|
158
|
+
useEffect(() => {
|
159
|
+
if (closeBreakpoint === "none") return;
|
160
|
+
|
161
|
+
const handleResize = () => {
|
162
|
+
const width = window.innerWidth;
|
163
|
+
if (width >= breakpointValues[closeBreakpoint]) {
|
164
|
+
setIsOpenBreakpointOpen(true);
|
165
|
+
} else {
|
166
|
+
setIsOpenBreakpointOpen(false);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
window.addEventListener("resize", handleResize);
|
171
|
+
|
172
|
+
handleResize();
|
173
|
+
|
174
|
+
return () => {
|
175
|
+
window.removeEventListener("resize", handleResize);
|
176
|
+
};
|
177
|
+
|
178
|
+
}, [closeBreakpoint]);
|
179
|
+
|
180
|
+
//hide menu button if breakpoint opens the drawer
|
181
|
+
useEffect(() => {
|
182
|
+
if (menuButtonID) {
|
183
|
+
const menuButton = document.getElementById(menuButtonID);
|
184
|
+
if (menuButton) {
|
185
|
+
if (isOpenBreakpointOpen) {
|
186
|
+
menuButton.style.display = 'none';
|
187
|
+
} else {
|
188
|
+
menuButton.style.display = '';
|
189
|
+
}
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}, [menuButtonID, isOpenBreakpointOpen]);
|
193
|
+
|
194
|
+
// Reset isUserClosed when isBreakpointOpen changes
|
195
|
+
useEffect(() => {
|
196
|
+
if (isOpenBreakpointOpen) {
|
197
|
+
setIsUserClosed(false);
|
64
198
|
}
|
65
|
-
)
|
199
|
+
}, [isOpenBreakpointOpen]);
|
66
200
|
|
67
201
|
const modalIsOpened =
|
68
|
-
(isOpenBreakpointOpen && !isUserClosed) || menuButtonOpened || opened
|
202
|
+
(isOpenBreakpointOpen && !isUserClosed) || menuButtonOpened || opened;
|
69
203
|
|
204
|
+
const [animationState, setAnimationState] = useState("");
|
205
|
+
|
206
|
+
useEffect(() => {
|
207
|
+
if (modalIsOpened) {
|
208
|
+
setAnimationState("afterOpen");
|
209
|
+
} else if (!modalIsOpened && animationState === "afterOpen") {
|
210
|
+
setAnimationState("beforeClose");
|
211
|
+
setTimeout(() => {
|
212
|
+
setAnimationState("");
|
213
|
+
}, 200);
|
214
|
+
}
|
215
|
+
}, [modalIsOpened]);
|
216
|
+
|
217
|
+
const isModalVisible = modalIsOpened || animationState === "beforeClose";
|
70
218
|
|
71
219
|
useEffect(() => {
|
72
220
|
if (withinElement) return;
|
73
221
|
|
74
|
-
const sizeMap:
|
222
|
+
const sizeMap: Record<DrawerProps["size"], string> = {
|
75
223
|
xl: "365px",
|
76
224
|
lg: "300px",
|
77
225
|
md: "250px",
|
78
226
|
sm: "200px",
|
79
227
|
xs: "64px",
|
80
|
-
full: "100%",
|
81
228
|
};
|
82
229
|
const body = document.querySelector("body");
|
83
230
|
if (modalIsOpened && behavior === "push" && body) {
|
@@ -97,143 +244,98 @@ const Drawer = (props: DrawerProps): React.ReactElement | null => {
|
|
97
244
|
}
|
98
245
|
}, [modalIsOpened, behavior, placement, size, withinElement]);
|
99
246
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
}
|
112
|
-
setIsAnimating(true)
|
113
|
-
}, 10)
|
114
|
-
return () => clearTimeout(timer)
|
115
|
-
} else {
|
116
|
-
// Step 3: Start closing animation
|
117
|
-
setIsAnimating(false)
|
118
|
-
|
119
|
-
// Step 4: Unmount after animation completes
|
120
|
-
const timer = setTimeout(() => {
|
121
|
-
setShouldRender(false)
|
122
|
-
}, 250) // Match animation duration
|
123
|
-
return () => clearTimeout(timer)
|
124
|
-
}
|
125
|
-
}, [modalIsOpened])
|
126
|
-
|
127
|
-
// Remove the showElement/hideElement effect since we're handling visibility with CSS
|
128
|
-
useEffect(() => {
|
129
|
-
if (drawerRef.current && modalIsOpened) {
|
130
|
-
const height = drawerRef.current.scrollHeight;
|
131
|
-
drawerRef.current.style.setProperty('--drawer-height', `${height}px`);
|
132
|
-
}
|
133
|
-
}, [modalIsOpened])
|
247
|
+
const api = {
|
248
|
+
onClose: () => {
|
249
|
+
if (menuButtonID) {
|
250
|
+
setMenuButtonOpened(false);
|
251
|
+
}
|
252
|
+
setIsUserClosed(true);
|
253
|
+
if (onClose) {
|
254
|
+
onClose();
|
255
|
+
}
|
256
|
+
},
|
257
|
+
};
|
134
258
|
|
135
|
-
// Handle menu button click
|
136
259
|
useEffect(() => {
|
137
|
-
if (
|
138
|
-
const menuButton = document.getElementById(
|
260
|
+
if (menuButtonID) {
|
261
|
+
const menuButton = document.getElementById(menuButtonID);
|
139
262
|
if (menuButton) {
|
140
263
|
const handleMenuButtonClick = () => {
|
141
264
|
if (modalIsOpened) {
|
142
|
-
|
143
|
-
|
265
|
+
// Drawer is open, close it
|
266
|
+
setMenuButtonOpened(false);
|
267
|
+
setIsUserClosed(true);
|
144
268
|
} else {
|
145
|
-
|
146
|
-
|
269
|
+
// Drawer is closed, open it
|
270
|
+
setMenuButtonOpened(true);
|
271
|
+
setIsUserClosed(false);
|
147
272
|
}
|
148
|
-
}
|
149
|
-
menuButton.addEventListener("click", handleMenuButtonClick)
|
273
|
+
};
|
274
|
+
menuButton.addEventListener("click", handleMenuButtonClick);
|
150
275
|
return () => {
|
151
|
-
menuButton.removeEventListener("click", handleMenuButtonClick)
|
152
|
-
}
|
276
|
+
menuButton.removeEventListener("click", handleMenuButtonClick);
|
277
|
+
};
|
153
278
|
}
|
154
279
|
}
|
155
|
-
}, [
|
156
|
-
|
157
|
-
const ariaProps = buildAriaProps(aria)
|
158
|
-
const dataProps = buildDataProps(data)
|
159
|
-
const htmlProps = buildHtmlProps(htmlOptions)
|
160
|
-
const dynamicInlineProps = globalInlineProps(props)
|
161
|
-
|
162
|
-
const drawerClasses = classnames(
|
163
|
-
"pb_drawer",
|
164
|
-
buildCss("pb_drawer", size as string, placement as string),
|
165
|
-
{
|
166
|
-
"drawer_border-full": border === "full",
|
167
|
-
"drawer_border-right": border === "right",
|
168
|
-
"drawer_border-left": border === "left",
|
169
|
-
pb_drawer_within_element: withinElement,
|
170
|
-
pb_drawer_collapsing: shouldRender && !isAnimating,
|
171
|
-
pb_drawer_after_open: isAnimating,
|
172
|
-
pb_drawer_before_close: !isAnimating && shouldRender,
|
173
|
-
},
|
174
|
-
withinElement ? "shadow_none" : "shadow_deepest",
|
175
|
-
globalProps(props),
|
176
|
-
className
|
177
|
-
)
|
178
|
-
|
179
|
-
const overlayClasses = classnames(
|
180
|
-
`pb_drawer${overlay ? "_overlay" : "_no_overlay"}`,
|
181
|
-
`drawer_content_${placement}`,
|
182
|
-
!overlay && "no-background",
|
183
|
-
{
|
184
|
-
pb_drawer_overlay_after_open: isAnimating,
|
185
|
-
pb_drawer_overlay_before_close: !isAnimating && shouldRender,
|
186
|
-
}
|
187
|
-
)
|
188
|
-
|
189
|
-
const api = {
|
190
|
-
onClose: () => {
|
191
|
-
if (triggerId) {
|
192
|
-
setMenuButtonOpened(false)
|
193
|
-
}
|
194
|
-
setIsUserClosed(true)
|
195
|
-
if (onClose) {
|
196
|
-
onClose()
|
197
|
-
}
|
198
|
-
},
|
199
|
-
}
|
200
|
-
|
201
|
-
const drawerContent = (
|
202
|
-
<div
|
203
|
-
className={drawerClasses}
|
204
|
-
onClick={(e) => e.stopPropagation()}
|
205
|
-
ref={drawerRef}
|
206
|
-
>
|
207
|
-
{children}
|
208
|
-
</div>
|
209
|
-
)
|
210
|
-
|
211
|
-
// Step 5: Only render when shouldRender is true
|
212
|
-
if (!shouldRender) return null
|
280
|
+
}, [menuButtonID, modalIsOpened]);
|
213
281
|
|
214
282
|
return (
|
215
|
-
<
|
283
|
+
<DialogContext.Provider value={api}>
|
216
284
|
{withinElement ? (
|
217
|
-
|
285
|
+
isModalVisible && (
|
286
|
+
<div
|
287
|
+
{...ariaProps}
|
288
|
+
{...dataProps}
|
289
|
+
{...htmlProps}
|
290
|
+
className={classnames(drawerClassNames.base, {
|
291
|
+
[drawerClassNames.afterOpen]:
|
292
|
+
animationState === "afterOpen",
|
293
|
+
[drawerClassNames.beforeClose]:
|
294
|
+
animationState === "beforeClose",
|
295
|
+
})}
|
296
|
+
id={id}
|
297
|
+
onClick={(e) => e.stopPropagation()}
|
298
|
+
style={dynamicInlineProps}
|
299
|
+
>
|
300
|
+
{children}
|
301
|
+
</div>
|
302
|
+
)
|
218
303
|
) : (
|
219
304
|
<div
|
220
305
|
{...ariaProps}
|
221
306
|
{...dataProps}
|
222
307
|
{...htmlProps}
|
223
|
-
className={
|
224
|
-
style={dynamicInlineProps}
|
308
|
+
className={classes}
|
225
309
|
>
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
310
|
+
{isModalVisible && (
|
311
|
+
<div
|
312
|
+
className={classnames(overlayClassNames.base, {
|
313
|
+
[overlayClassNames.afterOpen]:
|
314
|
+
animationState === "afterOpen",
|
315
|
+
[overlayClassNames.beforeClose]:
|
316
|
+
animationState === "beforeClose",
|
317
|
+
})}
|
318
|
+
id={id}
|
319
|
+
onClick={overlay ? api.onClose : undefined}
|
320
|
+
>
|
321
|
+
<div
|
322
|
+
className={classnames(drawerClassNames.base, {
|
323
|
+
[drawerClassNames.afterOpen]:
|
324
|
+
animationState === "afterOpen",
|
325
|
+
[drawerClassNames.beforeClose]:
|
326
|
+
animationState === "beforeClose",
|
327
|
+
})}
|
328
|
+
onClick={(e) => e.stopPropagation()}
|
329
|
+
style={dynamicInlineProps}
|
330
|
+
>
|
331
|
+
{children}
|
332
|
+
</div>
|
333
|
+
</div>
|
334
|
+
)}
|
233
335
|
</div>
|
234
336
|
)}
|
235
|
-
</
|
236
|
-
)
|
237
|
-
}
|
337
|
+
</DialogContext.Provider>
|
338
|
+
);
|
339
|
+
};
|
238
340
|
|
239
|
-
export default Drawer
|
341
|
+
export default Drawer;
|
@@ -6,15 +6,19 @@ const DrawerBorders = () => {
|
|
6
6
|
const [openedBRightDrawer, setOpenedBRightDrawer] = useState(false);
|
7
7
|
const [openedBLeftDrawer, setOpenedBLeftDrawer] = useState(false);
|
8
8
|
const [openedBFullDrawer, setOpenedBFullDrawer] = useState(false);
|
9
|
+
const [openedBDefaultDrawer, setOpenedBDefaultDrawer] = useState(false);
|
10
|
+
const [openedBRoundedDrawer, setOpenedBRoundedDrawer] = useState(false);
|
9
11
|
|
10
12
|
// Toggle functions for each drawer
|
11
13
|
const toggleBRightDrawer = () => setOpenedBRightDrawer(!openedBRightDrawer);
|
12
14
|
const toggleBLeftDrawer = () => setOpenedBLeftDrawer(!openedBLeftDrawer);
|
13
15
|
const toggleBFullDrawer = () => setOpenedBFullDrawer(!openedBFullDrawer);
|
16
|
+
const toggleBDefaultDrawer = () => setOpenedBDefaultDrawer(!openedBDefaultDrawer);
|
17
|
+
const toggleBRoundedDrawer = () => setOpenedBRoundedDrawer(!openedBRoundedDrawer);
|
14
18
|
|
15
19
|
return (
|
16
20
|
<>
|
17
|
-
<Flex
|
21
|
+
<Flex padding="md"
|
18
22
|
wrap
|
19
23
|
>
|
20
24
|
<Button marginRight="md"
|
@@ -32,12 +36,23 @@ const DrawerBorders = () => {
|
|
32
36
|
>
|
33
37
|
Drawer with border full
|
34
38
|
</Button>
|
39
|
+
<Button marginRight="md"
|
40
|
+
onClick={toggleBDefaultDrawer}
|
41
|
+
>
|
42
|
+
Default Drawer
|
43
|
+
</Button>
|
44
|
+
<Button marginRight="md"
|
45
|
+
onClick={toggleBRoundedDrawer}
|
46
|
+
>
|
47
|
+
Rounded Drawer
|
48
|
+
</Button>
|
35
49
|
</Flex>
|
36
50
|
|
37
51
|
{/* Drawers for each size */}
|
38
52
|
<Drawer
|
39
53
|
behavior="float"
|
40
54
|
border="right"
|
55
|
+
fullHeight
|
41
56
|
onClose={toggleBRightDrawer}
|
42
57
|
opened={openedBRightDrawer}
|
43
58
|
overlay={false}
|
@@ -49,10 +64,11 @@ const DrawerBorders = () => {
|
|
49
64
|
<Drawer
|
50
65
|
behavior="float"
|
51
66
|
border="left"
|
67
|
+
fullHeight
|
52
68
|
onClose={toggleBLeftDrawer}
|
53
69
|
opened={openedBLeftDrawer}
|
54
70
|
overlay={false}
|
55
|
-
placement="
|
71
|
+
placement="right"
|
56
72
|
size="lg"
|
57
73
|
>
|
58
74
|
This is a Drawer with border left
|
@@ -60,14 +76,40 @@ const DrawerBorders = () => {
|
|
60
76
|
<Drawer
|
61
77
|
behavior="float"
|
62
78
|
border="full"
|
79
|
+
fullHeight
|
63
80
|
onClose={toggleBFullDrawer}
|
64
81
|
opened={openedBFullDrawer}
|
65
82
|
overlay={false}
|
66
|
-
placement="
|
83
|
+
placement="right"
|
67
84
|
size="lg"
|
68
85
|
>
|
69
86
|
This is a Drawer with border full
|
70
87
|
</Drawer>
|
88
|
+
<Drawer
|
89
|
+
behavior="float"
|
90
|
+
fullHeight
|
91
|
+
onClose={toggleBDefaultDrawer}
|
92
|
+
opened={openedBDefaultDrawer}
|
93
|
+
overlay={false}
|
94
|
+
placement="right"
|
95
|
+
size="lg"
|
96
|
+
>
|
97
|
+
This is a Default Drawer
|
98
|
+
</Drawer>
|
99
|
+
<Drawer
|
100
|
+
behavior="float"
|
101
|
+
borderRadius="rounded"
|
102
|
+
fullHeight
|
103
|
+
onClose={toggleBRoundedDrawer}
|
104
|
+
opened={openedBRoundedDrawer}
|
105
|
+
overlay={false}
|
106
|
+
placement="right"
|
107
|
+
size="lg"
|
108
|
+
>
|
109
|
+
<div style={{ paddingTop: '100px', paddingLeft: '12px' }}>
|
110
|
+
This is a Rounded Drawer
|
111
|
+
</div>
|
112
|
+
</Drawer>
|
71
113
|
</>
|
72
114
|
);
|
73
115
|
};
|
@@ -9,8 +9,8 @@ const useDrawer = (visible = false) => {
|
|
9
9
|
};
|
10
10
|
|
11
11
|
const DrawerDefault = () => {
|
12
|
-
const [
|
13
|
-
const [
|
12
|
+
const [headerSeparatorDrawerOpened, toggleHeaderSeparatorDrawer] = useDrawer();
|
13
|
+
const [bothSeparatorsDrawerOpened, toggleBothSeparatorsDrawer] = useDrawer();
|
14
14
|
|
15
15
|
return (
|
16
16
|
<>
|
@@ -18,13 +18,13 @@ const DrawerDefault = () => {
|
|
18
18
|
<Button
|
19
19
|
id="sm"
|
20
20
|
marginRight="md"
|
21
|
-
onClick={
|
21
|
+
onClick={toggleHeaderSeparatorDrawer}
|
22
22
|
>
|
23
23
|
{"Left Drawer"}
|
24
24
|
</Button>
|
25
25
|
<Button
|
26
26
|
marginRight="xl"
|
27
|
-
onClick={
|
27
|
+
onClick={toggleBothSeparatorsDrawer}
|
28
28
|
>
|
29
29
|
{"Right Drawer"}
|
30
30
|
</Button>
|
@@ -32,8 +32,12 @@ const DrawerDefault = () => {
|
|
32
32
|
<Flex>
|
33
33
|
{/* Left Drawer */}
|
34
34
|
<Drawer
|
35
|
-
|
36
|
-
|
35
|
+
behavior={"push"}
|
36
|
+
fullHeight
|
37
|
+
onClose={toggleHeaderSeparatorDrawer}
|
38
|
+
opened={headerSeparatorDrawerOpened}
|
39
|
+
overlay
|
40
|
+
placement={"left"}
|
37
41
|
size={"lg"}
|
38
42
|
>
|
39
43
|
Test me (Left Drawer)
|
@@ -41,8 +45,11 @@ const DrawerDefault = () => {
|
|
41
45
|
|
42
46
|
{/* Right Drawer */}
|
43
47
|
<Drawer
|
44
|
-
|
45
|
-
|
48
|
+
behavior={"push"}
|
49
|
+
fullHeight
|
50
|
+
onClose={toggleBothSeparatorsDrawer}
|
51
|
+
opened={bothSeparatorsDrawerOpened}
|
52
|
+
overlay
|
46
53
|
placement={"right"}
|
47
54
|
size={"lg"}
|
48
55
|
>
|
@@ -53,4 +60,4 @@ const DrawerDefault = () => {
|
|
53
60
|
);
|
54
61
|
};
|
55
62
|
|
56
|
-
export default DrawerDefault;
|
63
|
+
export default DrawerDefault;
|