playbook_ui 14.5.0.pre.rc.12 → 14.5.0.pre.rc.13
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/_playbook.scss +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +25 -0
- data/app/pb_kits/playbook/pb_drawer/_drawer.scss +465 -0
- data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +195 -0
- data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +3 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +117 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +43 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +63 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +55 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +113 -0
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +12 -0
- data/app/pb_kits/playbook/pb_drawer/docs/index.js +5 -0
- data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +12 -0
- data/app/pb_kits/playbook/pb_drawer/drawer.rb +8 -0
- data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +77 -0
- data/dist/chunks/{_typeahead-C7ICra83.js → _typeahead-D72GNy0y.js} +1 -1
- data/dist/chunks/_weekday_stacked-BDIhh9Z6.js +45 -0
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +3 -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 +18 -3
- data/dist/chunks/_weekday_stacked-DwrIhNbf.js +0 -45
@@ -0,0 +1,117 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { Button, Drawer, Flex } from "playbook-ui";
|
3
|
+
|
4
|
+
const DrawerBorders = () => {
|
5
|
+
// Individual state variables for each drawer size
|
6
|
+
const [openedBRightDrawer, setOpenedBRightDrawer] = useState(false);
|
7
|
+
const [openedBLeftDrawer, setOpenedBLeftDrawer] = useState(false);
|
8
|
+
const [openedBFullDrawer, setOpenedBFullDrawer] = useState(false);
|
9
|
+
const [openedBDefaultDrawer, setOpenedBDefaultDrawer] = useState(false);
|
10
|
+
const [openedBRoundedDrawer, setOpenedBRoundedDrawer] = useState(false);
|
11
|
+
|
12
|
+
// Toggle functions for each drawer
|
13
|
+
const toggleBRightDrawer = () => setOpenedBRightDrawer(!openedBRightDrawer);
|
14
|
+
const toggleBLeftDrawer = () => setOpenedBLeftDrawer(!openedBLeftDrawer);
|
15
|
+
const toggleBFullDrawer = () => setOpenedBFullDrawer(!openedBFullDrawer);
|
16
|
+
const toggleBDefaultDrawer = () => setOpenedBDefaultDrawer(!openedBDefaultDrawer);
|
17
|
+
const toggleBRoundedDrawer = () => setOpenedBRoundedDrawer(!openedBRoundedDrawer);
|
18
|
+
|
19
|
+
return (
|
20
|
+
<>
|
21
|
+
<Flex padding="md"
|
22
|
+
wrap
|
23
|
+
>
|
24
|
+
<Button marginRight="md"
|
25
|
+
onClick={toggleBRightDrawer}
|
26
|
+
>
|
27
|
+
Drawer with border right
|
28
|
+
</Button>
|
29
|
+
<Button marginRight="md"
|
30
|
+
onClick={toggleBLeftDrawer}
|
31
|
+
>
|
32
|
+
Drawer with border left
|
33
|
+
</Button>
|
34
|
+
<Button marginRight="md"
|
35
|
+
onClick={toggleBFullDrawer}
|
36
|
+
>
|
37
|
+
Drawer with border full
|
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>
|
49
|
+
</Flex>
|
50
|
+
|
51
|
+
{/* Drawers for each size */}
|
52
|
+
<Drawer
|
53
|
+
behavior="float"
|
54
|
+
border="right"
|
55
|
+
fullHeight
|
56
|
+
onClose={toggleBRightDrawer}
|
57
|
+
opened={openedBRightDrawer}
|
58
|
+
overlay={false}
|
59
|
+
placement="left"
|
60
|
+
size="lg"
|
61
|
+
>
|
62
|
+
This is a Drawer with border right
|
63
|
+
</Drawer>
|
64
|
+
<Drawer
|
65
|
+
behavior="float"
|
66
|
+
border="left"
|
67
|
+
fullHeight
|
68
|
+
onClose={toggleBLeftDrawer}
|
69
|
+
opened={openedBLeftDrawer}
|
70
|
+
overlay={false}
|
71
|
+
placement="right"
|
72
|
+
size="lg"
|
73
|
+
>
|
74
|
+
This is a Drawer with border left
|
75
|
+
</Drawer>
|
76
|
+
<Drawer
|
77
|
+
behavior="float"
|
78
|
+
border="full"
|
79
|
+
fullHeight
|
80
|
+
onClose={toggleBFullDrawer}
|
81
|
+
opened={openedBFullDrawer}
|
82
|
+
overlay={false}
|
83
|
+
placement="right"
|
84
|
+
size="lg"
|
85
|
+
>
|
86
|
+
This is a Drawer with border full
|
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>
|
113
|
+
</>
|
114
|
+
);
|
115
|
+
};
|
116
|
+
|
117
|
+
export default DrawerBorders;
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { Button, Drawer, Flex } from "playbook-ui";
|
3
|
+
|
4
|
+
const useDrawer = (visible = false) => {
|
5
|
+
const [opened, setOpened] = useState(visible);
|
6
|
+
const toggle = () => setOpened(!opened);
|
7
|
+
|
8
|
+
return [opened, toggle];
|
9
|
+
};
|
10
|
+
|
11
|
+
const DrawerBreakpoints = () => {
|
12
|
+
const [smallDrawerOpened, toggleSmallDrawer] = useDrawer();
|
13
|
+
|
14
|
+
return (
|
15
|
+
<>
|
16
|
+
<Flex wrap>
|
17
|
+
<Button
|
18
|
+
id="sm"
|
19
|
+
marginRight="md"
|
20
|
+
onClick={toggleSmallDrawer}
|
21
|
+
>
|
22
|
+
{"Will open at small breakpoint"}
|
23
|
+
</Button>
|
24
|
+
</Flex>
|
25
|
+
<Flex>
|
26
|
+
<Drawer
|
27
|
+
behavior={"push"}
|
28
|
+
breakpoint="sm"
|
29
|
+
fullHeight
|
30
|
+
onClose={toggleSmallDrawer}
|
31
|
+
opened={smallDrawerOpened}
|
32
|
+
overlay={false}
|
33
|
+
placement={"right"}
|
34
|
+
size={"lg"}
|
35
|
+
>
|
36
|
+
Open because small breakpoint
|
37
|
+
</Drawer>
|
38
|
+
</Flex>
|
39
|
+
</>
|
40
|
+
);
|
41
|
+
};
|
42
|
+
|
43
|
+
export default DrawerBreakpoints;
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= pb_rails("drawer") %>
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { Button, Drawer, Flex } from "playbook-ui";
|
3
|
+
|
4
|
+
const useDrawer = (visible = false) => {
|
5
|
+
const [opened, setOpened] = useState(visible);
|
6
|
+
const toggle = () => setOpened(!opened);
|
7
|
+
|
8
|
+
return [opened, toggle];
|
9
|
+
};
|
10
|
+
|
11
|
+
const DrawerDefault = () => {
|
12
|
+
const [headerSeparatorDrawerOpened, toggleHeaderSeparatorDrawer] = useDrawer();
|
13
|
+
const [bothSeparatorsDrawerOpened, toggleBothSeparatorsDrawer] = useDrawer();
|
14
|
+
|
15
|
+
return (
|
16
|
+
<>
|
17
|
+
<Flex wrap>
|
18
|
+
<Button
|
19
|
+
id="sm"
|
20
|
+
marginRight="md"
|
21
|
+
onClick={toggleHeaderSeparatorDrawer}
|
22
|
+
>
|
23
|
+
{"Left Drawer"}
|
24
|
+
</Button>
|
25
|
+
<Button
|
26
|
+
marginRight="xl"
|
27
|
+
onClick={toggleBothSeparatorsDrawer}
|
28
|
+
>
|
29
|
+
{"Right Drawer"}
|
30
|
+
</Button>
|
31
|
+
</Flex>
|
32
|
+
<Flex>
|
33
|
+
{/* Left Drawer */}
|
34
|
+
<Drawer
|
35
|
+
behavior={"push"}
|
36
|
+
fullHeight
|
37
|
+
onClose={toggleHeaderSeparatorDrawer}
|
38
|
+
opened={headerSeparatorDrawerOpened}
|
39
|
+
overlay
|
40
|
+
placement={"left"}
|
41
|
+
size={"lg"}
|
42
|
+
>
|
43
|
+
Test me (Left Drawer)
|
44
|
+
</Drawer>
|
45
|
+
|
46
|
+
{/* Right Drawer */}
|
47
|
+
<Drawer
|
48
|
+
behavior={"push"}
|
49
|
+
fullHeight
|
50
|
+
onClose={toggleBothSeparatorsDrawer}
|
51
|
+
opened={bothSeparatorsDrawerOpened}
|
52
|
+
overlay
|
53
|
+
placement={"right"}
|
54
|
+
size={"lg"}
|
55
|
+
>
|
56
|
+
Test me (Right Drawer)
|
57
|
+
</Drawer>
|
58
|
+
</Flex>
|
59
|
+
</>
|
60
|
+
);
|
61
|
+
};
|
62
|
+
|
63
|
+
export default DrawerDefault;
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { Button, Drawer, Flex } from "playbook-ui";
|
3
|
+
|
4
|
+
const DrawerSizes = () => {
|
5
|
+
// Individual state variables for each drawer size
|
6
|
+
const [openedNoOverlayDrawer, setOpenedNoOverlayDrawer] = useState(false);
|
7
|
+
const [openedOverlayDrawer, setOpenedOverlayDrawer] = useState(false);
|
8
|
+
|
9
|
+
// Toggle functions for each drawer
|
10
|
+
const toggleNoOverlayDrawer = () => setOpenedNoOverlayDrawer(!openedNoOverlayDrawer);
|
11
|
+
const toggleOverlayDrawer = () => setOpenedOverlayDrawer(!openedOverlayDrawer);
|
12
|
+
|
13
|
+
return (
|
14
|
+
<>
|
15
|
+
<Flex wrap>
|
16
|
+
<Button marginRight="md"
|
17
|
+
onClick={toggleNoOverlayDrawer}
|
18
|
+
>
|
19
|
+
No Overlay Drawer
|
20
|
+
</Button>
|
21
|
+
<Button marginRight="md"
|
22
|
+
onClick={toggleOverlayDrawer}
|
23
|
+
>
|
24
|
+
Overlay Drawer
|
25
|
+
</Button>
|
26
|
+
</Flex>
|
27
|
+
|
28
|
+
{/* Drawers for each size */}
|
29
|
+
<Drawer
|
30
|
+
behavior="push"
|
31
|
+
fullHeight
|
32
|
+
onClose={toggleNoOverlayDrawer}
|
33
|
+
opened={openedNoOverlayDrawer}
|
34
|
+
overlay={false}
|
35
|
+
placement="right"
|
36
|
+
size="lg"
|
37
|
+
>
|
38
|
+
This is a Drawer with no overlay
|
39
|
+
</Drawer>
|
40
|
+
<Drawer
|
41
|
+
behavior="push"
|
42
|
+
fullHeight
|
43
|
+
onClose={toggleOverlayDrawer}
|
44
|
+
opened={openedOverlayDrawer}
|
45
|
+
overlay
|
46
|
+
placement="right"
|
47
|
+
size="lg"
|
48
|
+
>
|
49
|
+
This is a Drawer with an overlay
|
50
|
+
</Drawer>
|
51
|
+
</>
|
52
|
+
);
|
53
|
+
};
|
54
|
+
|
55
|
+
export default DrawerSizes;
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { Button, Drawer, Flex } from "playbook-ui";
|
3
|
+
|
4
|
+
const DrawerSizes = () => {
|
5
|
+
// Individual state variables for each drawer size
|
6
|
+
const [openedXsDrawer, setOpenedXsDrawer] = useState(false);
|
7
|
+
const [openedSmDrawer, setOpenedSmDrawer] = useState(false);
|
8
|
+
const [openedMdDrawer, setOpenedMdDrawer] = useState(false);
|
9
|
+
const [openedLgDrawer, setOpenedLgDrawer] = useState(false);
|
10
|
+
const [openedXlDrawer, setOpenedXlDrawer] = useState(false);
|
11
|
+
|
12
|
+
// Toggle functions for each drawer
|
13
|
+
const toggleXsDrawer = () => setOpenedXsDrawer(!openedXsDrawer);
|
14
|
+
const toggleSmDrawer = () => setOpenedSmDrawer(!openedSmDrawer);
|
15
|
+
const toggleMdDrawer = () => setOpenedMdDrawer(!openedMdDrawer);
|
16
|
+
const toggleLgDrawer = () => setOpenedLgDrawer(!openedLgDrawer);
|
17
|
+
const toggleXlDrawer = () => setOpenedXlDrawer(!openedXlDrawer);
|
18
|
+
|
19
|
+
return (
|
20
|
+
<>
|
21
|
+
<Flex wrap>
|
22
|
+
<Button marginRight="md"
|
23
|
+
onClick={toggleXsDrawer}
|
24
|
+
>
|
25
|
+
XS Drawer
|
26
|
+
</Button>
|
27
|
+
<Button marginRight="md"
|
28
|
+
onClick={toggleSmDrawer}
|
29
|
+
>
|
30
|
+
SM Drawer
|
31
|
+
</Button>
|
32
|
+
<Button marginRight="md"
|
33
|
+
onClick={toggleMdDrawer}
|
34
|
+
>
|
35
|
+
MD Drawer
|
36
|
+
</Button>
|
37
|
+
<Button marginRight="md"
|
38
|
+
onClick={toggleLgDrawer}
|
39
|
+
>
|
40
|
+
LG Drawer
|
41
|
+
</Button>
|
42
|
+
<Button marginRight="md"
|
43
|
+
onClick={toggleXlDrawer}
|
44
|
+
>
|
45
|
+
XL Drawer
|
46
|
+
</Button>
|
47
|
+
</Flex>
|
48
|
+
|
49
|
+
{/* Drawers for each size */}
|
50
|
+
<Drawer
|
51
|
+
behavior="push"
|
52
|
+
fullHeight
|
53
|
+
onClose={toggleXsDrawer}
|
54
|
+
opened={openedXsDrawer}
|
55
|
+
overlay
|
56
|
+
placement="right"
|
57
|
+
size="xs"
|
58
|
+
>
|
59
|
+
XS
|
60
|
+
</Drawer>
|
61
|
+
|
62
|
+
<Drawer
|
63
|
+
behavior="push"
|
64
|
+
fullHeight
|
65
|
+
onClose={toggleSmDrawer}
|
66
|
+
opened={openedSmDrawer}
|
67
|
+
overlay
|
68
|
+
placement="right"
|
69
|
+
size="sm"
|
70
|
+
>
|
71
|
+
This is an SM Drawer
|
72
|
+
</Drawer>
|
73
|
+
|
74
|
+
<Drawer
|
75
|
+
behavior="push"
|
76
|
+
fullHeight
|
77
|
+
onClose={toggleMdDrawer}
|
78
|
+
opened={openedMdDrawer}
|
79
|
+
overlay
|
80
|
+
placement="right"
|
81
|
+
size="md"
|
82
|
+
>
|
83
|
+
This is an MD Drawer
|
84
|
+
</Drawer>
|
85
|
+
|
86
|
+
<Drawer
|
87
|
+
behavior="push"
|
88
|
+
fullHeight
|
89
|
+
onClose={toggleLgDrawer}
|
90
|
+
opened={openedLgDrawer}
|
91
|
+
overlay
|
92
|
+
placement="right"
|
93
|
+
size="lg"
|
94
|
+
>
|
95
|
+
This is an LG Drawer
|
96
|
+
</Drawer>
|
97
|
+
|
98
|
+
<Drawer
|
99
|
+
behavior="push"
|
100
|
+
fullHeight
|
101
|
+
onClose={toggleXlDrawer}
|
102
|
+
opened={openedXlDrawer}
|
103
|
+
overlay
|
104
|
+
placement="right"
|
105
|
+
size="xl"
|
106
|
+
>
|
107
|
+
This is an XL Drawer
|
108
|
+
</Drawer>
|
109
|
+
</>
|
110
|
+
);
|
111
|
+
};
|
112
|
+
|
113
|
+
export default DrawerSizes;
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export { default as DrawerDefault } from './_drawer_default.jsx'
|
2
|
+
export { default as DrawerSizes } from './_drawer_sizes.jsx'
|
3
|
+
export { default as DrawerOverlay } from './_drawer_overlay.jsx'
|
4
|
+
export { default as DrawerBorders } from './_drawer_borders.jsx'
|
5
|
+
export { default as DrawerBreakpoints } from './_drawer_breakpoints.jsx'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<!-- Go to pb_content_tag definition in kit_base.rb for usage information. Commented out options are default (showing the default shape), and each can be deleted if not customizing that param. -->
|
2
|
+
<!-- If using nonstandard params please un-comment out and replace with your custom params. -->
|
3
|
+
<%= pb_content_tag(
|
4
|
+
# :div,
|
5
|
+
# aria: object.aria,
|
6
|
+
# class: object.classname,
|
7
|
+
# data: object.data,
|
8
|
+
# id: object.id,
|
9
|
+
# **combined_html_options
|
10
|
+
) do %>
|
11
|
+
<span>DRAWER CONTENT</span>
|
12
|
+
<% end %>
|
@@ -0,0 +1,77 @@
|
|
1
|
+
import React, { useState } from 'react';
|
2
|
+
import { render, cleanup, fireEvent, screen } from '../utilities/test-utils';
|
3
|
+
import { Drawer, Button } from 'playbook-ui';
|
4
|
+
|
5
|
+
const size = 'sm';
|
6
|
+
|
7
|
+
function DrawerTest({ props }) {
|
8
|
+
const [isOpen, setIsOpen] = useState(false);
|
9
|
+
const close = () => setIsOpen(false);
|
10
|
+
const open = () => setIsOpen(true);
|
11
|
+
|
12
|
+
return (
|
13
|
+
<>
|
14
|
+
<Button onClick={open}>{'Open Drawer'}</Button>
|
15
|
+
<Drawer
|
16
|
+
className="wrapper"
|
17
|
+
onClose={close}
|
18
|
+
opened={isOpen}
|
19
|
+
placement="left"
|
20
|
+
portalClassName="portal"
|
21
|
+
size={size}
|
22
|
+
{...props}
|
23
|
+
>
|
24
|
+
{props && props.children}
|
25
|
+
</Drawer>
|
26
|
+
</>
|
27
|
+
);
|
28
|
+
}
|
29
|
+
|
30
|
+
afterEach(cleanup);
|
31
|
+
|
32
|
+
test('renders with the right border class when border prop is right', async () => {
|
33
|
+
render(<DrawerTest props={{ border: 'right' }} />);
|
34
|
+
|
35
|
+
fireEvent.click(screen.getByText('Open Drawer'));
|
36
|
+
|
37
|
+
const drawer = await screen.findByRole('dialog');
|
38
|
+
expect(drawer).toHaveClass('drawer_border_right');
|
39
|
+
});
|
40
|
+
|
41
|
+
test('renders with the left border class when border prop is left', async () => {
|
42
|
+
render(<DrawerTest props={{ border: 'left' }} />);
|
43
|
+
|
44
|
+
fireEvent.click(screen.getByText('Open Drawer'));
|
45
|
+
|
46
|
+
const drawer = await screen.findByRole('dialog');
|
47
|
+
expect(drawer).toHaveClass('drawer_border_left');
|
48
|
+
});
|
49
|
+
|
50
|
+
test('renders with the full border class when border prop is full', async () => {
|
51
|
+
render(<DrawerTest props={{ border: 'full' }} />);
|
52
|
+
|
53
|
+
fireEvent.click(screen.getByText('Open Drawer'));
|
54
|
+
|
55
|
+
const drawer = await screen.findByRole('dialog');
|
56
|
+
expect(drawer).toHaveClass('drawer_border_full');
|
57
|
+
});
|
58
|
+
|
59
|
+
test('does not have a border class when border prop is none', async () => {
|
60
|
+
render(<DrawerTest props={{ border: 'none' }} />);
|
61
|
+
|
62
|
+
fireEvent.click(screen.getByText('Open Drawer'));
|
63
|
+
|
64
|
+
const drawer = await screen.findByRole('dialog');
|
65
|
+
expect(drawer).not.toHaveClass('drawer_border_right');
|
66
|
+
expect(drawer).not.toHaveClass('drawer_border_left');
|
67
|
+
expect(drawer).not.toHaveClass('drawer_border_full');
|
68
|
+
});
|
69
|
+
|
70
|
+
test('renders the correct size class for a large drawer', async () => {
|
71
|
+
render(<DrawerTest props={{ size: 'lg' }} />);
|
72
|
+
|
73
|
+
fireEvent.click(screen.getByText('Open Drawer'));
|
74
|
+
|
75
|
+
const drawer = await screen.findByRole('dialog');
|
76
|
+
expect(drawer).toHaveClass('pb_drawer pb_drawer_lg_left');
|
77
|
+
});
|