@dtdot/lego 0.14.0
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/build/colours/colours.d.ts +16 -0
- package/build/colours/colours.js +15 -0
- package/build/components/ActionMessage/ActionMessage.component.d.ts +9 -0
- package/build/components/ActionMessage/ActionMessage.component.js +27 -0
- package/build/components/ActionMessage/ActionMessage.stories.d.ts +6 -0
- package/build/components/ActionMessage/ActionMessage.stories.js +20 -0
- package/build/components/Alert/Alert.component.d.ts +16 -0
- package/build/components/Alert/Alert.component.js +54 -0
- package/build/components/Alert/Alert.stories.d.ts +8 -0
- package/build/components/Alert/Alert.stories.js +21 -0
- package/build/components/Badge/Badge.component.d.ts +9 -0
- package/build/components/Badge/Badge.component.js +20 -0
- package/build/components/Badge/Badge.stories.d.ts +5 -0
- package/build/components/Badge/Badge.stories.js +18 -0
- package/build/components/Button/Button.component.d.ts +11 -0
- package/build/components/Button/Button.component.js +60 -0
- package/build/components/Button/Button.context.d.ts +8 -0
- package/build/components/Button/Button.context.js +7 -0
- package/build/components/Button/Button.stories.d.ts +7 -0
- package/build/components/Button/Button.stories.js +27 -0
- package/build/components/ButtonGroup/ButtonGroup.component.d.ts +6 -0
- package/build/components/ButtonGroup/ButtonGroup.component.js +17 -0
- package/build/components/ButtonGroup/ButtonGroup.stories.d.ts +7 -0
- package/build/components/ButtonGroup/ButtonGroup.stories.js +17 -0
- package/build/components/Card/Card.component.d.ts +19 -0
- package/build/components/Card/Card.component.js +101 -0
- package/build/components/Card/Card.context.d.ts +9 -0
- package/build/components/Card/Card.context.js +7 -0
- package/build/components/Card/Card.stories.d.ts +9 -0
- package/build/components/Card/Card.stories.js +64 -0
- package/build/components/Card/CardGroup.component.d.ts +9 -0
- package/build/components/Card/CardGroup.component.js +31 -0
- package/build/components/Card/_CardActions.component.d.ts +10 -0
- package/build/components/Card/_CardActions.component.js +48 -0
- package/build/components/Card/_CardContent.component.d.ts +6 -0
- package/build/components/Card/_CardContent.component.js +24 -0
- package/build/components/Card/_CardHeader.component.d.ts +9 -0
- package/build/components/Card/_CardHeader.component.js +48 -0
- package/build/components/Card/_CardMedia.component.d.ts +6 -0
- package/build/components/Card/_CardMedia.component.js +48 -0
- package/build/components/Card/_CardSpacer.component.d.ts +3 -0
- package/build/components/Card/_CardSpacer.component.js +4 -0
- package/build/components/Card/_CardSubContent.component.d.ts +6 -0
- package/build/components/Card/_CardSubContent.component.js +24 -0
- package/build/components/ControlGroup/ControlGroup.component.d.ts +11 -0
- package/build/components/ControlGroup/ControlGroup.component.js +75 -0
- package/build/components/ControlGroup/ControlGroup.stories.d.ts +7 -0
- package/build/components/ControlGroup/ControlGroup.stories.js +24 -0
- package/build/components/ControlGroup/_ControlGroupSpacer.component.d.ts +3 -0
- package/build/components/ControlGroup/_ControlGroupSpacer.component.js +4 -0
- package/build/components/FancyCheckbox/FancyCheckbox.component.d.ts +14 -0
- package/build/components/FancyCheckbox/FancyCheckbox.component.js +53 -0
- package/build/components/FancyCheckbox/FancyCheckbox.stories.d.ts +5 -0
- package/build/components/FancyCheckbox/FancyCheckbox.stories.js +29 -0
- package/build/components/Form/Form.component.d.ts +9 -0
- package/build/components/Form/Form.component.js +24 -0
- package/build/components/Form/Form.stories.d.ts +5 -0
- package/build/components/Form/Form.stories.js +21 -0
- package/build/components/Form/FormState.context.d.ts +7 -0
- package/build/components/Form/FormState.context.js +6 -0
- package/build/components/Form/useFormNode.hook.d.ts +5 -0
- package/build/components/Form/useFormNode.hook.js +16 -0
- package/build/components/Heading/Heading.component.d.ts +6 -0
- package/build/components/Heading/Heading.component.js +13 -0
- package/build/components/Heading/Heading.stories.d.ts +5 -0
- package/build/components/Heading/Heading.stories.js +7 -0
- package/build/components/ImageUpload/ImageUpload.component.d.ts +11 -0
- package/build/components/ImageUpload/ImageUpload.component.js +92 -0
- package/build/components/ImageUpload/ImageUpload.stories.d.ts +8 -0
- package/build/components/ImageUpload/ImageUpload.stories.js +49 -0
- package/build/components/InlineCard/InlineCard.component.d.ts +10 -0
- package/build/components/InlineCard/InlineCard.component.js +20 -0
- package/build/components/InlineCard/InlineCard.stories.d.ts +5 -0
- package/build/components/InlineCard/InlineCard.stories.js +17 -0
- package/build/components/InlineCard/InlineCardGroup.component.d.ts +6 -0
- package/build/components/InlineCard/InlineCardGroup.component.js +17 -0
- package/build/components/InlineCard/_InlineCardContent.component.d.ts +6 -0
- package/build/components/InlineCard/_InlineCardContent.component.js +15 -0
- package/build/components/InlineCard/_InlineCardMedia.component.d.ts +6 -0
- package/build/components/InlineCard/_InlineCardMedia.component.js +17 -0
- package/build/components/Input/Input.component.d.ts +11 -0
- package/build/components/Input/Input.component.js +57 -0
- package/build/components/Input/Input.stories.d.ts +6 -0
- package/build/components/Input/Input.stories.js +12 -0
- package/build/components/LiveInput/LiveInput.component.d.ts +10 -0
- package/build/components/LiveInput/LiveInput.component.js +22 -0
- package/build/components/LiveInput/LiveInput.stories.d.ts +6 -0
- package/build/components/LiveInput/LiveInput.stories.js +12 -0
- package/build/components/Loader/Loader.component.d.ts +3 -0
- package/build/components/Loader/Loader.component.js +48 -0
- package/build/components/Loader/Loader.stories.d.ts +5 -0
- package/build/components/Loader/Loader.stories.js +9 -0
- package/build/components/Menu/Menu.component.d.ts +13 -0
- package/build/components/Menu/Menu.component.js +26 -0
- package/build/components/Menu/Menu.stories.d.ts +7 -0
- package/build/components/Menu/Menu.stories.js +98 -0
- package/build/components/Menu/_MenuContent.component.d.ts +10 -0
- package/build/components/Menu/_MenuContent.component.js +31 -0
- package/build/components/Menu/_MenuContent.context.d.ts +7 -0
- package/build/components/Menu/_MenuContent.context.js +6 -0
- package/build/components/Menu/_MenuHeading.component.d.ts +6 -0
- package/build/components/Menu/_MenuHeading.component.js +27 -0
- package/build/components/Menu/_MenuItem.component.d.ts +10 -0
- package/build/components/Menu/_MenuItem.component.js +50 -0
- package/build/components/Menu/_MenuPage.component.d.ts +6 -0
- package/build/components/Menu/_MenuPage.component.js +39 -0
- package/build/components/Menu/_MenuPanel.component.d.ts +6 -0
- package/build/components/Menu/_MenuPanel.component.js +62 -0
- package/build/components/Menu/menu.helpers.d.ts +4 -0
- package/build/components/Menu/menu.helpers.js +10 -0
- package/build/components/Modal/Modal.component.d.ts +14 -0
- package/build/components/Modal/Modal.component.js +100 -0
- package/build/components/Modal/Modal.stories.d.ts +6 -0
- package/build/components/Modal/Modal.stories.js +55 -0
- package/build/components/Modal/_Modal.context.d.ts +6 -0
- package/build/components/Modal/_Modal.context.js +6 -0
- package/build/components/Modal/_ModalBody.component.d.ts +2 -0
- package/build/components/Modal/_ModalBody.component.js +5 -0
- package/build/components/Modal/_ModalHeader.component.d.ts +7 -0
- package/build/components/Modal/_ModalHeader.component.js +54 -0
- package/build/components/Notification/Notification.component.d.ts +6 -0
- package/build/components/Notification/Notification.component.js +15 -0
- package/build/components/Notification/Notification.stories.d.ts +8 -0
- package/build/components/Notification/Notification.stories.js +28 -0
- package/build/components/Notifications/Notifications.component.d.ts +15 -0
- package/build/components/Notifications/Notifications.component.js +37 -0
- package/build/components/Notifications/Notifications.stories.d.ts +7 -0
- package/build/components/Notifications/Notifications.stories.js +99 -0
- package/build/components/ProfileImage/ProfileImage.component.d.ts +7 -0
- package/build/components/ProfileImage/ProfileImage.component.js +53 -0
- package/build/components/ProfileImage/ProfileImage.stories.d.ts +6 -0
- package/build/components/ProfileImage/ProfileImage.stories.js +8 -0
- package/build/components/QrCode/QrCode.component.d.ts +6 -0
- package/build/components/QrCode/QrCode.component.js +71 -0
- package/build/components/QrCode/QrCode.stories.d.ts +5 -0
- package/build/components/QrCode/QrCode.stories.js +8 -0
- package/build/components/Spacer/Spacer.component.d.ts +7 -0
- package/build/components/Spacer/Spacer.component.js +25 -0
- package/build/components/SquareButton/SquareButton.component.d.ts +9 -0
- package/build/components/SquareButton/SquareButton.component.js +31 -0
- package/build/components/SquareButton/SquareButton.stories.d.ts +5 -0
- package/build/components/SquareButton/SquareButton.stories.js +14 -0
- package/build/components/SubHeading/SubHeading.component.d.ts +2 -0
- package/build/components/SubHeading/SubHeading.component.js +11 -0
- package/build/components/SubHeading/SubHeading.stories.d.ts +5 -0
- package/build/components/SubHeading/SubHeading.stories.js +7 -0
- package/build/components/Table/Table.component.d.ts +16 -0
- package/build/components/Table/Table.component.js +24 -0
- package/build/components/Table/Table.stories.d.ts +7 -0
- package/build/components/Table/Table.stories.js +39 -0
- package/build/components/Table/_Table.context.d.ts +7 -0
- package/build/components/Table/_Table.context.js +5 -0
- package/build/components/Table/_TableRow.component.d.ts +6 -0
- package/build/components/Table/_TableRow.component.js +17 -0
- package/build/components/Text/Text.component.d.ts +8 -0
- package/build/components/Text/Text.component.js +26 -0
- package/build/components/Text/Text.stories.d.ts +6 -0
- package/build/components/Text/Text.stories.js +11 -0
- package/build/constants/zIndex.constants.d.ts +6 -0
- package/build/constants/zIndex.constants.js +5 -0
- package/build/contexts/File.context.d.ts +7 -0
- package/build/contexts/File.context.js +8 -0
- package/build/examples/Modal.stories.d.ts +5 -0
- package/build/examples/Modal.stories.js +37 -0
- package/build/global/BodyStyle.component.d.ts +2 -0
- package/build/global/BodyStyle.component.js +16 -0
- package/build/hooks/useForm.d.ts +7 -0
- package/build/hooks/useForm.js +20 -0
- package/build/index.d.ts +47 -0
- package/build/index.js +43 -0
- package/build/layouts/Action/Action.layout.d.ts +17 -0
- package/build/layouts/Action/Action.layout.js +45 -0
- package/build/layouts/Action/Action.stories.d.ts +6 -0
- package/build/layouts/Action/Action.stories.js +14 -0
- package/build/layouts/Centered/Centered.layout.d.ts +2 -0
- package/build/layouts/Centered/Centered.layout.js +6 -0
- package/build/layouts/Centered/Centered.stories.d.ts +5 -0
- package/build/layouts/Centered/Centered.stories.js +8 -0
- package/build/layouts/Column/Column.layout.d.ts +6 -0
- package/build/layouts/Column/Column.layout.js +5 -0
- package/build/layouts/Column/Column.stories.d.ts +5 -0
- package/build/layouts/Column/Column.stories.js +8 -0
- package/build/layouts/Content/Content.layout.d.ts +10 -0
- package/build/layouts/Content/Content.layout.js +11 -0
- package/build/layouts/Content/Content.stories.d.ts +9 -0
- package/build/layouts/Content/Content.stories.js +37 -0
- package/build/layouts/Content/_ContentContent.component.d.ts +8 -0
- package/build/layouts/Content/_ContentContent.component.js +29 -0
- package/build/layouts/Content/_ContentHeader.component.d.ts +7 -0
- package/build/layouts/Content/_ContentHeader.component.js +17 -0
- package/build/layouts/Emphasis/Emphasis.layout.d.ts +6 -0
- package/build/layouts/Emphasis/Emphasis.layout.js +39 -0
- package/build/layouts/Focus/Focus.layout.d.ts +6 -0
- package/build/layouts/Focus/Focus.layout.js +28 -0
- package/build/layouts/Focus/Focus.stories.d.ts +5 -0
- package/build/layouts/Focus/Focus.stories.js +16 -0
- package/build/layouts/Padded/Padded.layout.d.ts +9 -0
- package/build/layouts/Padded/Padded.layout.js +11 -0
- package/build/layouts/Padded/Padded.stories.d.ts +6 -0
- package/build/layouts/Padded/Padded.stories.js +10 -0
- package/build/responsive/responsive.d.ts +13 -0
- package/build/responsive/responsive.js +63 -0
- package/build/screens/Login/Login.screen.d.ts +13 -0
- package/build/screens/Login/Login.screen.js +60 -0
- package/build/screens/Register/Register.screen.d.ts +12 -0
- package/build/screens/Register/Register.screen.js +32 -0
- package/build/screens/Verification/Verification.screen.d.ts +12 -0
- package/build/screens/Verification/Verification.screen.js +39 -0
- package/build/theme/dark.theme.d.ts +3 -0
- package/build/theme/dark.theme.js +73 -0
- package/build/theme/default.theme.d.ts +3 -0
- package/build/theme/default.theme.js +74 -0
- package/build/theme/helpers/getThemeControlColours.d.ts +10 -0
- package/build/theme/helpers/getThemeControlColours.js +10 -0
- package/build/theme/helpers/getThemeStatusColour.d.ts +4 -0
- package/build/theme/helpers/getThemeStatusColour.js +14 -0
- package/build/theme/helpers/getThemeVariantColours.d.ts +8 -0
- package/build/theme/helpers/getThemeVariantColours.js +23 -0
- package/build/theme/theme.types.d.ts +2 -0
- package/build/theme/theme.types.js +1 -0
- package/build/theme/themes.d.ts +5 -0
- package/build/theme/themes.js +7 -0
- package/package.json +65 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import MenuContent from './_MenuContent.component';
|
|
4
|
+
import MenuHeading from './_MenuHeading.component';
|
|
5
|
+
import MenuItem from './_MenuItem.component';
|
|
6
|
+
import MenuPage from './_MenuPage.component';
|
|
7
|
+
import MenuPanel from './_MenuPanel.component';
|
|
8
|
+
const MenuOuter = styled.div `
|
|
9
|
+
position: fixed;
|
|
10
|
+
top: 0;
|
|
11
|
+
left: 0;
|
|
12
|
+
|
|
13
|
+
height: 100vh;
|
|
14
|
+
width: 250px;
|
|
15
|
+
background-color: ${(props) => props.theme.colours.cardBackground};
|
|
16
|
+
padding: 8px 0;
|
|
17
|
+
`;
|
|
18
|
+
const Menu = ({ children }) => {
|
|
19
|
+
return React.createElement(MenuOuter, null, children);
|
|
20
|
+
};
|
|
21
|
+
Menu.Page = MenuPage;
|
|
22
|
+
Menu.Heading = MenuHeading;
|
|
23
|
+
Menu.Item = MenuItem;
|
|
24
|
+
Menu.Content = MenuContent;
|
|
25
|
+
Menu.Panel = MenuPanel;
|
|
26
|
+
export default Menu;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Meta } from '@storybook/react/types-6-0';
|
|
3
|
+
export declare const Standard: () => JSX.Element;
|
|
4
|
+
export declare const WithPanel: () => JSX.Element;
|
|
5
|
+
export declare const IndependentScrolling: () => JSX.Element;
|
|
6
|
+
declare const _default: Meta<import("@storybook/react/types-6-0").Args>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { ControlGroup, Heading, Menu, Spacer, Text, FocusLayout, PaddedLayout, Input, Button, menuHelpers, ContentLayout, SubHeading, } from '../..';
|
|
3
|
+
import { faCalendarAlt, faCogs, faHamburger } from '@fortawesome/free-solid-svg-icons';
|
|
4
|
+
export const Standard = () => {
|
|
5
|
+
const [route, setRoute] = useState('/eat');
|
|
6
|
+
return (React.createElement(React.Fragment, null,
|
|
7
|
+
React.createElement(Menu, null,
|
|
8
|
+
React.createElement(Menu.Heading, null, "Something Tasty"),
|
|
9
|
+
React.createElement(Menu.Item, { icon: faHamburger, active: menuHelpers.isActiveItem([/\/eat/g], route), onClick: () => setRoute('/eat') }, "Eat"),
|
|
10
|
+
React.createElement(Menu.Item, { icon: faCalendarAlt, active: menuHelpers.isActiveItem([/\/plan/g], route), onClick: () => setRoute('/plan') }, "Plan"),
|
|
11
|
+
React.createElement(Menu.Item, { icon: faCogs, active: menuHelpers.isActiveItem([/\/manage/g], route), onClick: () => setRoute('/manage') }, "Manage")),
|
|
12
|
+
React.createElement(Menu.Content, null,
|
|
13
|
+
React.createElement(Menu.Page, null,
|
|
14
|
+
React.createElement(FocusLayout, null,
|
|
15
|
+
React.createElement(Heading, null, "Configuration"),
|
|
16
|
+
React.createElement(Spacer, { size: '4x' }),
|
|
17
|
+
React.createElement(ControlGroup, { variation: 'submission' },
|
|
18
|
+
React.createElement(Text, null, "Enter your name here. This will be used to identify you when connecting with friends."),
|
|
19
|
+
React.createElement(ControlGroup.Spacer, null),
|
|
20
|
+
React.createElement(Input, { name: 'name', placeholder: 'name' }),
|
|
21
|
+
React.createElement(ControlGroup.Spacer, null),
|
|
22
|
+
React.createElement(Button, null, "Next")))))));
|
|
23
|
+
};
|
|
24
|
+
export const WithPanel = () => {
|
|
25
|
+
const [route, setRoute] = useState('/eat');
|
|
26
|
+
return (React.createElement(React.Fragment, null,
|
|
27
|
+
React.createElement(Menu, null,
|
|
28
|
+
React.createElement(Menu.Heading, null, "Something Tasty"),
|
|
29
|
+
React.createElement(Menu.Item, { icon: faHamburger, active: menuHelpers.isActiveItem([/\/eat/g], route), onClick: () => setRoute('/eat') }, "Eat"),
|
|
30
|
+
React.createElement(Menu.Item, { icon: faCalendarAlt, active: menuHelpers.isActiveItem([/\/plan/g], route), onClick: () => setRoute('/plan') }, "Plan"),
|
|
31
|
+
React.createElement(Menu.Item, { icon: faCogs, active: menuHelpers.isActiveItem([/\/manage/g], route), onClick: () => setRoute('/manage') }, "Manage")),
|
|
32
|
+
React.createElement(Menu.Content, { panelSize: 'md' },
|
|
33
|
+
React.createElement(Menu.Panel, null,
|
|
34
|
+
React.createElement(PaddedLayout, null,
|
|
35
|
+
React.createElement(ControlGroup, { variation: 'comfortable' },
|
|
36
|
+
React.createElement(SubHeading, null, "You"),
|
|
37
|
+
React.createElement(Input, { label: 'Income', name: 'name', placeholder: '30,000' }),
|
|
38
|
+
React.createElement(SubHeading, null, "Loan"),
|
|
39
|
+
React.createElement(Input, { label: 'Deposit', name: 'name', placeholder: '10,000' }),
|
|
40
|
+
React.createElement(Input, { label: 'Interest Rate', name: 'name', placeholder: '4%' })))),
|
|
41
|
+
React.createElement(Menu.Page, null,
|
|
42
|
+
React.createElement(FocusLayout, null,
|
|
43
|
+
React.createElement(Heading, null, "Configuration"),
|
|
44
|
+
React.createElement(Spacer, { size: '4x' }),
|
|
45
|
+
React.createElement(ControlGroup, { variation: 'submission' },
|
|
46
|
+
React.createElement(Text, null, "Enter your name here. This will be used to identify you when connecting with friends."),
|
|
47
|
+
React.createElement(ControlGroup.Spacer, null),
|
|
48
|
+
React.createElement(Input, { name: 'name', placeholder: 'name' }),
|
|
49
|
+
React.createElement(ControlGroup.Spacer, null),
|
|
50
|
+
React.createElement(Button, null, "Next")))))));
|
|
51
|
+
};
|
|
52
|
+
export const IndependentScrolling = () => {
|
|
53
|
+
const [route, setRoute] = useState('/eat');
|
|
54
|
+
return (React.createElement(React.Fragment, null,
|
|
55
|
+
React.createElement(Menu, null,
|
|
56
|
+
React.createElement(Menu.Heading, null, "Something Tasty"),
|
|
57
|
+
React.createElement(Menu.Item, { icon: faHamburger, active: menuHelpers.isActiveItem([/\/eat/g], route), onClick: () => setRoute('/eat') }, "Eat"),
|
|
58
|
+
React.createElement(Menu.Item, { icon: faCalendarAlt, active: menuHelpers.isActiveItem([/\/plan/g], route), onClick: () => setRoute('/plan') }, "Plan"),
|
|
59
|
+
React.createElement(Menu.Item, { icon: faCogs, active: menuHelpers.isActiveItem([/\/manage/g], route), onClick: () => setRoute('/manage') }, "Manage")),
|
|
60
|
+
React.createElement(Menu.Content, { panelSize: 'sm', independentScroll: true },
|
|
61
|
+
React.createElement(Menu.Panel, null,
|
|
62
|
+
React.createElement(PaddedLayout, null,
|
|
63
|
+
React.createElement(Text, null,
|
|
64
|
+
"Suspendisse sit amet pellentesque nisi. Quisque eget velit sit amet mauris tincidunt dictum id et ex. Integer pulvinar tellus id viverra finibus. Cras dapibus diam a ante eleifend, ac ultrices ligula vestibulum. Nulla gravida ante nec mi tristique, vel elementum arcu volutpat. Nunc in lorem id ligula sodales tincidunt non ut ipsum. Fusce risus eros, dapibus sed lacus et, faucibus auctor purus. Nulla sed rhoncus ligula, at porttitor tellus. Aliquam vitae gravida quam. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque quis tempus risus.",
|
|
65
|
+
React.createElement("br", null),
|
|
66
|
+
React.createElement("br", null),
|
|
67
|
+
"Nullam tincidunt mauris ut lectus auctor aliquam. Aenean ornare mi et sollicitudin suscipit. Integer eu nulla at turpis molestie malesuada. Maecenas non consectetur massa. Nunc dui magna, imperdiet placerat bibendum ac, accumsan non lorem. Proin vulputate magna nisl, vel convallis elit iaculis quis. Proin maximus ante non ante vehicula sodales. Aliquam dui nisi, posuere vitae urna in, porta aliquet tellus. Curabitur commodo diam nec erat luctus, quis pharetra diam ultricies. Fusce sagittis libero lorem, convallis tristique mi egestas fermentum. Sed eu erat ut eros porttitor sollicitudin. Vivamus facilisis felis odio, ac tristique enim blandit a. Aliquam tincidunt iaculis sapien, sed vulputate mauris luctus ac. Donec aliquet ullamcorper orci quis tempor. Curabitur ac felis nulla.",
|
|
68
|
+
React.createElement("br", null),
|
|
69
|
+
React.createElement("br", null),
|
|
70
|
+
"Aenean vestibulum aliquam purus ut fringilla. Maecenas aliquet a nunc eget scelerisque. Mauris varius dignissim velit, vitae faucibus massa posuere sit amet. Nulla rutrum enim tellus, eget interdum massa ultricies sed. Proin pulvinar odio non lectus scelerisque, et varius nisl blandit. Donec nisl ante, ultricies eu volutpat ut, dapibus sed ex. Aliquam risus ex, porttitor vel commodo in, convallis laoreet dolor. Proin pretium neque pretium, laoreet dolor ultrices, vulputate sapien. Aenean rutrum lorem non mauris egestas accumsan."))),
|
|
71
|
+
React.createElement(Menu.Page, null,
|
|
72
|
+
React.createElement(ContentLayout, null,
|
|
73
|
+
React.createElement(ContentLayout.Content, { size: 'sm' },
|
|
74
|
+
React.createElement(Text, null,
|
|
75
|
+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nibh lorem, mattis sed dolor ac, malesuada maximus lorem. Proin hendrerit maximus ipsum, eu laoreet erat congue a. Duis pellentesque leo sed nisi mattis, a sollicitudin sapien ornare. Mauris efficitur nulla metus. Etiam felis velit, mollis eget fringilla nec, venenatis non libero. Suspendisse at arcu rhoncus, tristique ex nec, blandit enim. Vivamus rutrum, felis faucibus vulputate vulputate, lacus quam sollicitudin eros, non consequat velit neque in lorem. Ut hendrerit lectus vel quam placerat tincidunt. Ut auctor tortor elit, ac aliquam orci pellentesque efficitur. Morbi eget sollicitudin est. Donec ullamcorper velit ipsum, non dapibus nisi vulputate ac. Proin dapibus, mi ac scelerisque sollicitudin, turpis augue hendrerit metus, eget dignissim justo lectus id urna. Vivamus massa ipsum, posuere eu risus non, ultrices convallis tellus. Mauris et egestas erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec sagittis porttitor nisi a gravida.",
|
|
76
|
+
React.createElement("br", null),
|
|
77
|
+
React.createElement("br", null),
|
|
78
|
+
"Donec mollis nisl quis scelerisque suscipit. Suspendisse eget risus ornare lorem convallis gravida sit amet id nisi. Duis venenatis tortor vitae facilisis auctor. Nulla in pretium odio, et aliquet dui. Sed non venenatis ex. Praesent felis sem, tincidunt et ligula sit amet, vulputate tincidunt tellus. Nam quis eros quis justo aliquet tempus. Nulla imperdiet bibendum velit, eu elementum felis cursus ut. Curabitur eget dui et urna vehicula porttitor sit amet vitae risus. Nulla vitae lacus id quam gravida volutpat at eu elit. Quisque efficitur hendrerit purus, sed viverra elit cursus non. Nunc at scelerisque eros, ut posuere erat. Suspendisse egestas volutpat orci, id ornare nisi aliquet vel.",
|
|
79
|
+
React.createElement("br", null),
|
|
80
|
+
React.createElement("br", null),
|
|
81
|
+
"Donec ultrices lectus lectus, eget mollis nisi venenatis vitae. Morbi cursus quis sapien ut ultrices. Quisque placerat, massa ut accumsan tempor, purus leo sollicitudin leo, eu auctor mauris quam nec nisl. Donec eu dignissim erat. Aenean bibendum blandit leo, sed posuere risus euismod eu. Ut dignissim nisl ex, eget condimentum turpis auctor in. Fusce tristique neque accumsan diam suscipit, vel blandit lorem sodales. Etiam ut tincidunt nisi, ut aliquet felis. Suspendisse vestibulum, velit imperdiet tempor varius, lectus massa consectetur lacus, sagittis scelerisque ante enim non metus. Donec nunc nisl, fermentum scelerisque ornare nec, congue id velit. Praesent vehicula dolor nisl, vel sollicitudin nisl ullamcorper sit amet. Maecenas nec ante eu dui interdum mollis. Maecenas urna enim, maximus et ligula at, aliquet varius arcu. Ut justo arcu, commodo iaculis est ut, ornare posuere arcu.",
|
|
82
|
+
React.createElement("br", null),
|
|
83
|
+
React.createElement("br", null),
|
|
84
|
+
"Curabitur at nunc et erat placerat laoreet aliquet in eros. Proin sagittis dolor libero, ut ultrices elit euismod vitae. Phasellus non tellus tellus. Morbi sit amet auctor lacus. Maecenas commodo sagittis ex nec eleifend. Mauris sit amet augue a sapien vulputate rhoncus. Donec dignissim finibus erat, sit amet suscipit arcu blandit non. Sed pulvinar tincidunt volutpat. Proin pretium leo non enim pretium, vitae porttitor felis pellentesque. Nam tincidunt euismod arcu quis aliquam. Maecenas in lorem et tortor sagittis efficitur. Vestibulum est odio, tristique eget massa vitae, porta tincidunt magna. Curabitur tempus velit ut auctor auctor. Integer ultricies lorem vitae nibh convallis, ac placerat tellus rutrum.",
|
|
85
|
+
React.createElement("br", null),
|
|
86
|
+
React.createElement("br", null),
|
|
87
|
+
"Curabitur ac lorem vitae lorem convallis tincidunt. Aenean luctus, dolor et blandit consectetur, odio risus lacinia ante, non auctor libero turpis accumsan metus. Donec accumsan vitae lacus a varius. Aliquam ac ultricies massa. Praesent vel lacus tempus, interdum nisi eget, varius justo. Pellentesque nec mauris ac dolor fringilla pulvinar. Sed sollicitudin nec lectus nec condimentum. Maecenas molestie blandit ipsum ut finibus. Cras eu nibh congue, porta metus vel, pellentesque tellus.",
|
|
88
|
+
React.createElement("br", null),
|
|
89
|
+
React.createElement("br", null),
|
|
90
|
+
"Morbi feugiat, arcu vel ultricies ultrices, justo odio faucibus purus, vel pharetra augue metus nec purus. Suspendisse sit amet leo ipsum. Vivamus ut velit ut ante consectetur vehicula ut at mi. Nam et ex at nisl ullamcorper maximus nec vel est. Fusce ut est neque. Vivamus dictum, ipsum porta varius tempus, arcu diam sollicitudin risus, in vulputate est orci sit amet ligula. Donec a est vel lacus consectetur dictum.")))))));
|
|
91
|
+
};
|
|
92
|
+
export default {
|
|
93
|
+
title: 'Components/Menu',
|
|
94
|
+
component: Menu,
|
|
95
|
+
parameters: {
|
|
96
|
+
layout: 'fullscreen',
|
|
97
|
+
},
|
|
98
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare type PanelSize = 'sm' | 'md';
|
|
3
|
+
export declare const getMaxSize: (size: PanelSize) => "tablet" | "desktop";
|
|
4
|
+
export interface MenuContentProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
panelSize?: PanelSize;
|
|
7
|
+
independentScroll?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const MenuContent: ({ panelSize, independentScroll, children }: MenuContentProps) => JSX.Element;
|
|
10
|
+
export default MenuContent;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import responsive from '../../responsive/responsive';
|
|
4
|
+
import MenuContentContext from './_MenuContent.context';
|
|
5
|
+
export const getMaxSize = (size) => {
|
|
6
|
+
switch (size) {
|
|
7
|
+
case 'sm':
|
|
8
|
+
return 'tablet';
|
|
9
|
+
case 'md':
|
|
10
|
+
default:
|
|
11
|
+
return 'desktop';
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const MenuContentOuter = styled.div `
|
|
15
|
+
display: flex;
|
|
16
|
+
|
|
17
|
+
background-color: ${(props) => props.theme.colours.cardBackground};
|
|
18
|
+
margin-left: 250px;
|
|
19
|
+
|
|
20
|
+
min-height: 100vh;
|
|
21
|
+
padding: 8px;
|
|
22
|
+
|
|
23
|
+
${(props) => responsive.useStylesFor(getMaxSize(props.panelSize)).andSmaller(`
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
`)}
|
|
26
|
+
`;
|
|
27
|
+
const MenuContent = ({ panelSize = 'md', independentScroll = false, children }) => {
|
|
28
|
+
return (React.createElement(MenuContentContext.Provider, { value: { panelSize, independentScroll } },
|
|
29
|
+
React.createElement(MenuContentOuter, { panelSize: panelSize }, children)));
|
|
30
|
+
};
|
|
31
|
+
export default MenuContent;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
const MenuHeadingDiv = styled.div `
|
|
4
|
+
padding-right: 32px;
|
|
5
|
+
margin-bottom: 16px;
|
|
6
|
+
|
|
7
|
+
width: 100%;
|
|
8
|
+
text-align: center;
|
|
9
|
+
`;
|
|
10
|
+
const MenuHeadingInner = styled.div `
|
|
11
|
+
background-color: ${(props) => props.theme.colours.primary.main};
|
|
12
|
+
box-shadow: ${(props) => props.theme.shadows.medium};
|
|
13
|
+
border-radius: 0 2px 2px 0;
|
|
14
|
+
height: 40px;
|
|
15
|
+
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
padding-left: 8px;
|
|
19
|
+
|
|
20
|
+
font-family: ${(props) => props.theme.fonts.heading.family};
|
|
21
|
+
font-weight: ${(props) => props.theme.fonts.heading.weight};
|
|
22
|
+
color: ${(props) => props.theme.colours.primary.contrastText};
|
|
23
|
+
font-size: 20px;
|
|
24
|
+
`;
|
|
25
|
+
const MenuHeading = ({ children }) => (React.createElement(MenuHeadingDiv, null,
|
|
26
|
+
React.createElement(MenuHeadingInner, null, children)));
|
|
27
|
+
export default MenuHeading;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IconProp } from '@fortawesome/fontawesome-svg-core';
|
|
3
|
+
export interface MenuItemProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
icon?: IconProp;
|
|
6
|
+
active?: boolean;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const MenuItem: ({ children, icon, active, onClick }: MenuItemProps) => JSX.Element;
|
|
10
|
+
export default MenuItem;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
const MenuItemOuter = styled.div `
|
|
5
|
+
display: flex;
|
|
6
|
+
`;
|
|
7
|
+
const MenuItemDiv = styled.div `
|
|
8
|
+
margin: 2px;
|
|
9
|
+
padding: 8px 8px 8px 16px;
|
|
10
|
+
flex-grow: 1;
|
|
11
|
+
|
|
12
|
+
font-family: ${(props) => props.theme.fonts.default.family};
|
|
13
|
+
font-weight: ${(props) => props.theme.fonts.default.weight};
|
|
14
|
+
font-size: ${(props) => props.theme.fonts.default.size};
|
|
15
|
+
color: ${(props) => props.theme.colours.secondaryFont};
|
|
16
|
+
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
border-radius: 0 2px 2px 0;
|
|
19
|
+
|
|
20
|
+
&:hover {
|
|
21
|
+
background-color: ${(props) => props.theme.colours.background};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
${(props) => props.active &&
|
|
25
|
+
`
|
|
26
|
+
color: ${props.theme.colours.defaultFont};
|
|
27
|
+
`}
|
|
28
|
+
`;
|
|
29
|
+
const MenuIconContainer = styled.div `
|
|
30
|
+
display: inline-block;
|
|
31
|
+
margin-right: 16px;
|
|
32
|
+
width: 24px;
|
|
33
|
+
text-align: center;
|
|
34
|
+
`;
|
|
35
|
+
const MenuActiveBar = styled.div `
|
|
36
|
+
height: 38px;
|
|
37
|
+
width: 4px;
|
|
38
|
+
background-color: ${(props) => props.theme.colours.defaultFont};
|
|
39
|
+
`;
|
|
40
|
+
const MenuActivePlaceholder = styled.div `
|
|
41
|
+
height: 100%;
|
|
42
|
+
width: 4px;
|
|
43
|
+
`;
|
|
44
|
+
const MenuItem = ({ children, icon, active, onClick }) => (React.createElement(MenuItemOuter, { onClick: onClick },
|
|
45
|
+
active ? React.createElement(MenuActiveBar, null) : React.createElement(MenuActivePlaceholder, null),
|
|
46
|
+
React.createElement(MenuItemDiv, { active: active },
|
|
47
|
+
icon && (React.createElement(MenuIconContainer, null,
|
|
48
|
+
React.createElement(FontAwesomeIcon, { icon: icon }))),
|
|
49
|
+
children)));
|
|
50
|
+
export default MenuItem;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import responsive from '../../responsive/responsive';
|
|
4
|
+
import { getMaxSize } from './_MenuContent.component';
|
|
5
|
+
import MenuContentContext from './_MenuContent.context';
|
|
6
|
+
const MenuPageInner = styled.div `
|
|
7
|
+
background-color: ${(props) => props.theme.colours.background};
|
|
8
|
+
border-radius: 2px;
|
|
9
|
+
min-height: calc(100vh - 16px);
|
|
10
|
+
flex-grow: 1;
|
|
11
|
+
|
|
12
|
+
${(props) => responsive.useStylesFor(getMaxSize(props.panelSize)).andSmaller(`
|
|
13
|
+
min-height: unset;
|
|
14
|
+
`)}
|
|
15
|
+
|
|
16
|
+
${(props) => props.independentScroll &&
|
|
17
|
+
`
|
|
18
|
+
max-height: calc(100vh - 16px);
|
|
19
|
+
overflow-y: auto;
|
|
20
|
+
|
|
21
|
+
&::-webkit-scrollbar {
|
|
22
|
+
width: 6px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&::-webkit-scrollbar-thumb {
|
|
26
|
+
background-color: ${props.theme.colours.secondaryFont};
|
|
27
|
+
outline: 1px solid slategrey;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&::-webkit-scrollbar-track {
|
|
31
|
+
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
|
32
|
+
}
|
|
33
|
+
`}
|
|
34
|
+
`;
|
|
35
|
+
const MenuPage = ({ children }) => {
|
|
36
|
+
const { panelSize, independentScroll } = useContext(MenuContentContext);
|
|
37
|
+
return (React.createElement(MenuPageInner, { panelSize: panelSize, independentScroll: independentScroll }, children));
|
|
38
|
+
};
|
|
39
|
+
export default MenuPage;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import responsive from '../../responsive/responsive';
|
|
4
|
+
import { getMaxSize } from './_MenuContent.component';
|
|
5
|
+
import MenuContentContext from './_MenuContent.context';
|
|
6
|
+
const MenuPanelDiv = styled.div `
|
|
7
|
+
background-color: ${(props) => props.theme.colours.background};
|
|
8
|
+
border-radius: 2px;
|
|
9
|
+
min-height: calc(100vh - 16px);
|
|
10
|
+
margin-right: 8px;
|
|
11
|
+
|
|
12
|
+
${(props) => {
|
|
13
|
+
switch (props.panelSize) {
|
|
14
|
+
case 'sm':
|
|
15
|
+
return `
|
|
16
|
+
// max-width: 550px;
|
|
17
|
+
// min-width: 240px;
|
|
18
|
+
width: 380px;
|
|
19
|
+
`;
|
|
20
|
+
case 'md':
|
|
21
|
+
default:
|
|
22
|
+
return `
|
|
23
|
+
// max-width: 700px;
|
|
24
|
+
// min-width: 450px;
|
|
25
|
+
width: 560px;
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
}}
|
|
29
|
+
|
|
30
|
+
${(props) => responsive.useStylesFor(getMaxSize(props.panelSize)).andSmaller(`
|
|
31
|
+
max-width: unset;
|
|
32
|
+
min-width: unset;
|
|
33
|
+
min-height: unset;
|
|
34
|
+
width: 100%;
|
|
35
|
+
margin-right: 0;
|
|
36
|
+
margin-bottom: 8px;
|
|
37
|
+
`)}
|
|
38
|
+
|
|
39
|
+
${(props) => props.independentScroll &&
|
|
40
|
+
`
|
|
41
|
+
max-height: calc(100vh - 16px);
|
|
42
|
+
overflow-y: auto;
|
|
43
|
+
|
|
44
|
+
&::-webkit-scrollbar {
|
|
45
|
+
width: 6px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&::-webkit-scrollbar-thumb {
|
|
49
|
+
background-color: ${props.theme.colours.secondaryFont};
|
|
50
|
+
outline: 1px solid slategrey;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&::-webkit-scrollbar-track {
|
|
54
|
+
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
|
55
|
+
}
|
|
56
|
+
`}
|
|
57
|
+
`;
|
|
58
|
+
const MenuPanel = ({ children }) => {
|
|
59
|
+
const { panelSize, independentScroll } = useContext(MenuContentContext);
|
|
60
|
+
return (React.createElement(MenuPanelDiv, { panelSize: panelSize, independentScroll: independentScroll }, children));
|
|
61
|
+
};
|
|
62
|
+
export default MenuPanel;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare type ModalSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
export interface ModalProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
size?: ModalSize;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const Modal: {
|
|
10
|
+
({ children, size, loading, onClose }: ModalProps): React.ReactPortal;
|
|
11
|
+
Body: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
12
|
+
Header: ({ header, subHeader }: import("./_ModalHeader.component").ModalHeaderProps) => JSX.Element;
|
|
13
|
+
};
|
|
14
|
+
export default Modal;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
import { motion, AnimatePresence } from 'framer-motion';
|
|
5
|
+
import { Loader } from '../..';
|
|
6
|
+
import responsive from '../../responsive/responsive';
|
|
7
|
+
import ModalContext from './_Modal.context';
|
|
8
|
+
import ModalBody from './_ModalBody.component';
|
|
9
|
+
import ModalHeader from './_ModalHeader.component';
|
|
10
|
+
import zIndexConstants from '../../constants/zIndex.constants';
|
|
11
|
+
const getResponsiveSize = (size) => {
|
|
12
|
+
switch (size) {
|
|
13
|
+
case 'sm':
|
|
14
|
+
return 'mobile';
|
|
15
|
+
case 'lg':
|
|
16
|
+
return 'desktop';
|
|
17
|
+
case 'md':
|
|
18
|
+
default:
|
|
19
|
+
return 'tablet';
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const animationDistance = 30;
|
|
23
|
+
const bottomPadding = 50;
|
|
24
|
+
const loadingHeight = 64;
|
|
25
|
+
const Overlay = styled(motion.div) `
|
|
26
|
+
position: fixed;
|
|
27
|
+
top: -${animationDistance}px;
|
|
28
|
+
left: 0;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: calc(100% + ${animationDistance}px + ${bottomPadding}px);
|
|
31
|
+
|
|
32
|
+
padding-top: ${animationDistance}px;
|
|
33
|
+
padding-bottom: ${bottomPadding}px;
|
|
34
|
+
|
|
35
|
+
background-color: #00000050;
|
|
36
|
+
z-index: ${zIndexConstants.modalOverlay};
|
|
37
|
+
`;
|
|
38
|
+
const ScrollContainer = styled.div `
|
|
39
|
+
overflow: auto;
|
|
40
|
+
height: 100%;
|
|
41
|
+
`;
|
|
42
|
+
const ModalWrapper = styled.div `
|
|
43
|
+
display: flex;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
|
|
46
|
+
z-index: ${zIndexConstants.modalContent};
|
|
47
|
+
|
|
48
|
+
${(props) => responsive.useStylesFor(getResponsiveSize(props.size)).andSmaller(`
|
|
49
|
+
align-items: flex-end;
|
|
50
|
+
min-height: 100%;
|
|
51
|
+
`)}
|
|
52
|
+
`;
|
|
53
|
+
const ModalOuter = styled(motion.div) `
|
|
54
|
+
background-color: ${(props) => props.theme.colours.cardBackground};
|
|
55
|
+
border-radius: 4px;
|
|
56
|
+
margin: 16px 0 128px 0;
|
|
57
|
+
|
|
58
|
+
color: ${(props) => props.theme.colours.defaultFont};
|
|
59
|
+
|
|
60
|
+
font-family: ${(props) => props.theme.fonts.default.family};
|
|
61
|
+
font-size: ${(props) => props.theme.fonts.default.size};
|
|
62
|
+
font-weight: ${(props) => props.theme.fonts.default.weight};
|
|
63
|
+
|
|
64
|
+
width: ${(props) => responsive.getWidthFor(getResponsiveSize(props.size))};
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
|
|
67
|
+
${(props) => responsive.useStylesFor(getResponsiveSize(props.size)).andSmaller(`
|
|
68
|
+
width: 100%;
|
|
69
|
+
margin-bottom: 0;
|
|
70
|
+
`)}
|
|
71
|
+
`;
|
|
72
|
+
const SpinnerContainer = styled.div `
|
|
73
|
+
display: flex;
|
|
74
|
+
height: ${loadingHeight}px;
|
|
75
|
+
width: 100%;
|
|
76
|
+
justify-content: center;
|
|
77
|
+
align-items: center;
|
|
78
|
+
`;
|
|
79
|
+
const Modal = ({ children, size, loading, onClose }) => {
|
|
80
|
+
const handleModalClick = (event) => {
|
|
81
|
+
event.modalClicked = true;
|
|
82
|
+
};
|
|
83
|
+
const handleOverlayClick = (event) => {
|
|
84
|
+
if (!event.modalClicked) {
|
|
85
|
+
onClose();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
return ReactDOM.createPortal(React.createElement(AnimatePresence, null,
|
|
89
|
+
React.createElement(Overlay, { key: 'modal', initial: { opacity: 0, y: animationDistance }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: animationDistance }, transition: { type: 'spring', bounce: 0, duration: 0.6 }, onClick: handleOverlayClick },
|
|
90
|
+
React.createElement(ScrollContainer, null,
|
|
91
|
+
React.createElement(ModalContext.Provider, { value: { onClose } },
|
|
92
|
+
React.createElement(ModalWrapper, { size: size || 'md' },
|
|
93
|
+
React.createElement(ModalOuter, { transition: { type: 'spring', bounce: 0, duration: 0.6 }, initial: { height: loading ? loadingHeight : 'auto' }, animate: { height: loading ? loadingHeight : 'auto' }, size: size || 'md', onClick: handleModalClick },
|
|
94
|
+
!loading && children,
|
|
95
|
+
loading && (React.createElement(SpinnerContainer, null,
|
|
96
|
+
React.createElement(Loader, null))))))))), document.body);
|
|
97
|
+
};
|
|
98
|
+
Modal.Body = ModalBody;
|
|
99
|
+
Modal.Header = ModalHeader;
|
|
100
|
+
export default Modal;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Meta } from '@storybook/react/types-6-0';
|
|
3
|
+
export declare const Standard: () => JSX.Element;
|
|
4
|
+
export declare const LotsOfContent: () => JSX.Element;
|
|
5
|
+
declare const _default: Meta<import("@storybook/react/types-6-0").Args>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Modal, Button } from '../..';
|
|
3
|
+
export const Standard = () => {
|
|
4
|
+
const [open, setOpen] = useState(true);
|
|
5
|
+
const [loading, setLoading] = useState(false);
|
|
6
|
+
const handleOpen = () => {
|
|
7
|
+
setOpen(true);
|
|
8
|
+
setLoading(true);
|
|
9
|
+
setTimeout(() => setLoading(false), 2000);
|
|
10
|
+
};
|
|
11
|
+
const handleClose = () => {
|
|
12
|
+
setOpen(false);
|
|
13
|
+
setLoading(false);
|
|
14
|
+
};
|
|
15
|
+
return (React.createElement(React.Fragment, null,
|
|
16
|
+
React.createElement(Button, { onClick: handleOpen }, "Open"),
|
|
17
|
+
open && (React.createElement(Modal, { size: 'sm', onClose: handleClose, loading: loading },
|
|
18
|
+
React.createElement(Modal.Header, { header: 'Small modal', subHeader: "This one shouldn't scroll" }),
|
|
19
|
+
React.createElement(Modal.Body, null,
|
|
20
|
+
React.createElement("p", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget efficitur libero. In eu gravida turpis. Nunc dictum pretium felis a vulputate. Aliquam bibendum ex sed sapien rutrum accumsan. Curabitur sed mi arcu."),
|
|
21
|
+
React.createElement("br", null))))));
|
|
22
|
+
};
|
|
23
|
+
export const LotsOfContent = () => {
|
|
24
|
+
const [open, setOpen] = useState(true);
|
|
25
|
+
return (React.createElement(React.Fragment, null,
|
|
26
|
+
React.createElement(Button, { onClick: () => setOpen(true) }, "Open"),
|
|
27
|
+
open && (React.createElement(Modal, { onClose: () => setOpen(false) },
|
|
28
|
+
React.createElement(Modal.Header, { header: 'Larger modal', subHeader: 'This one should scroll' }),
|
|
29
|
+
React.createElement(Modal.Body, null,
|
|
30
|
+
React.createElement("p", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget efficitur libero. In eu gravida turpis. Nunc dictum pretium felis a vulputate. Aliquam bibendum ex sed sapien rutrum accumsan. Curabitur sed mi arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ut cursus urna. Morbi vestibulum tortor porta tortor efficitur, et semper tortor viverra. Suspendisse ac cursus lacus. Vivamus blandit, elit eu pretium rutrum, tellus orci tristique ante, vel condimentum quam nisl eget quam. Donec convallis aliquet dictum. Aliquam in sapien quis quam consequat interdum sed quis est. Phasellus dictum posuere mauris in tempor. Nulla scelerisque, risus ut dignissim gravida, ex urna vestibulum turpis, vel interdum velit nibh nec quam. Nulla non commodo odio. Proin eu justo risus."),
|
|
31
|
+
React.createElement("br", null),
|
|
32
|
+
React.createElement("p", null, "In volutpat nulla eros, sed vulputate urna suscipit vestibulum. Suspendisse posuere, mauris ut pellentesque aliquam, sapien leo molestie arcu, eu dapibus felis eros varius lacus. Quisque nec convallis neque. Mauris dignissim ultricies nunc, vel interdum ante elementum nec. Integer faucibus laoreet nisi. Etiam tincidunt eleifend velit, nec tempor tortor rhoncus vel. Aliquam interdum, eros euismod tincidunt tristique, lacus tellus sagittis mi, a ultricies ligula tortor quis est. Nam volutpat nisl vitae vulputate tristique. Proin consequat lacus facilisis, pretium turpis quis, faucibus nisl. Vivamus eu mauris pellentesque, pretium eros nec, blandit mauris. Nulla maximus risus a velit dapibus, quis laoreet nisl dapibus. Nullam a varius nulla."),
|
|
33
|
+
React.createElement("br", null),
|
|
34
|
+
React.createElement("p", null, "Aliquam vitae sollicitudin sapien, at commodo est. In hac habitasse platea dictumst. Etiam erat metus, gravida ut posuere ac, mollis quis nisi. Curabitur arcu lorem, convallis nec facilisis non, ultricies vel lectus. Suspendisse accumsan metus eu lorem dictum vestibulum sed sed lorem. Sed facilisis ultricies enim consectetur sagittis. Phasellus blandit urna vitae varius tempus. Ut molestie porta nisl id egestas. Ut bibendum ante vitae quam viverra, ut dapibus felis convallis. Fusce quam nisl, pellentesque ac turpis sed, scelerisque congue velit. Morbi vehicula ac neque et rutrum. Vivamus leo velit, accumsan at tristique a, ultricies vitae tortor. Pellentesque gravida pharetra urna. Maecenas aliquet elementum justo, id tincidunt velit."),
|
|
35
|
+
React.createElement("br", null),
|
|
36
|
+
React.createElement("p", null, "Proin vitae nulla porta, ullamcorper nisi at, convallis ante. Maecenas facilisis augue vel ultricies laoreet. Vivamus blandit enim ac felis consectetur, quis malesuada sem laoreet. Praesent vehicula felis tellus, at luctus ipsum suscipit at. Sed lorem felis, euismod sit amet cursus et, porttitor et mauris. Proin cursus arcu lacus, non condimentum mi consectetur eu. Suspendisse quis venenatis felis, eu facilisis dolor. Morbi laoreet egestas arcu, vel tempor nisi vehicula at. Nullam ut ligula posuere, vestibulum mi at, mollis felis. Nunc ut massa elit. Suspendisse id nunc at ipsum eleifend finibus imperdiet et lectus. Curabitur elementum, nulla sit amet interdum mollis, metus elit vulputate neque, mattis lacinia lorem purus ut odio. Morbi interdum neque sed libero molestie consequat. Sed condimentum orci facilisis tortor mollis ultrices."),
|
|
37
|
+
React.createElement("br", null),
|
|
38
|
+
React.createElement("p", null, "Nulla diam lorem, placerat non dui et, viverra ultrices augue. Phasellus tristique porta odio at scelerisque. Proin facilisis elit ut est faucibus rhoncus. Nunc ac auctor ante. Suspendisse consequat nulla sit amet interdum luctus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam vel dapibus sem. Quisque feugiat libero id maximus blandit. Duis nec urna aliquet, dapibus nibh at, scelerisque enim. Donec venenatis est dui, sit amet sollicitudin mi tempus ac. Aenean quis nunc a risus congue malesuada at vulputate metus. Integer sed efficitur libero. Aenean sit amet consequat arcu. Aliquam rhoncus porttitor vestibulum."),
|
|
39
|
+
React.createElement("br", null),
|
|
40
|
+
React.createElement("p", null, "Aliquam vitae sollicitudin sapien, at commodo est. In hac habitasse platea dictumst. Etiam erat metus, gravida ut posuere ac, mollis quis nisi. Curabitur arcu lorem, convallis nec facilisis non, ultricies vel lectus. Suspendisse accumsan metus eu lorem dictum vestibulum sed sed lorem. Sed facilisis ultricies enim consectetur sagittis. Phasellus blandit urna vitae varius tempus. Ut molestie porta nisl id egestas. Ut bibendum ante vitae quam viverra, ut dapibus felis convallis. Fusce quam nisl, pellentesque ac turpis sed, scelerisque congue velit. Morbi vehicula ac neque et rutrum. Vivamus leo velit, accumsan at tristique a, ultricies vitae tortor. Pellentesque gravida pharetra urna. Maecenas aliquet elementum justo, id tincidunt velit."),
|
|
41
|
+
React.createElement("br", null),
|
|
42
|
+
React.createElement("p", null, "Proin vitae nulla porta, ullamcorper nisi at, convallis ante. Maecenas facilisis augue vel ultricies laoreet. Vivamus blandit enim ac felis consectetur, quis malesuada sem laoreet. Praesent vehicula felis tellus, at luctus ipsum suscipit at. Sed lorem felis, euismod sit amet cursus et, porttitor et mauris. Proin cursus arcu lacus, non condimentum mi consectetur eu. Suspendisse quis venenatis felis, eu facilisis dolor. Morbi laoreet egestas arcu, vel tempor nisi vehicula at. Nullam ut ligula posuere, vestibulum mi at, mollis felis. Nunc ut massa elit. Suspendisse id nunc at ipsum eleifend finibus imperdiet et lectus. Curabitur elementum, nulla sit amet interdum mollis, metus elit vulputate neque, mattis lacinia lorem purus ut odio. Morbi interdum neque sed libero molestie consequat. Sed condimentum orci facilisis tortor mollis ultrices."),
|
|
43
|
+
React.createElement("br", null),
|
|
44
|
+
React.createElement("p", null, "Nulla diam lorem, placerat non dui et, viverra ultrices augue. Phasellus tristique porta odio at scelerisque. Proin facilisis elit ut est faucibus rhoncus. Nunc ac auctor ante. Suspendisse consequat nulla sit amet interdum luctus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam vel dapibus sem. Quisque feugiat libero id maximus blandit. Duis nec urna aliquet, dapibus nibh at, scelerisque enim. Donec venenatis est dui, sit amet sollicitudin mi tempus ac. Aenean quis nunc a risus congue malesuada at vulputate metus. Integer sed efficitur libero. Aenean sit amet consequat arcu. Aliquam rhoncus porttitor vestibulum."),
|
|
45
|
+
React.createElement("br", null),
|
|
46
|
+
React.createElement("p", null, "Aliquam vitae sollicitudin sapien, at commodo est. In hac habitasse platea dictumst. Etiam erat metus, gravida ut posuere ac, mollis quis nisi. Curabitur arcu lorem, convallis nec facilisis non, ultricies vel lectus. Suspendisse accumsan metus eu lorem dictum vestibulum sed sed lorem. Sed facilisis ultricies enim consectetur sagittis. Phasellus blandit urna vitae varius tempus. Ut molestie porta nisl id egestas. Ut bibendum ante vitae quam viverra, ut dapibus felis convallis. Fusce quam nisl, pellentesque ac turpis sed, scelerisque congue velit. Morbi vehicula ac neque et rutrum. Vivamus leo velit, accumsan at tristique a, ultricies vitae tortor. Pellentesque gravida pharetra urna. Maecenas aliquet elementum justo, id tincidunt velit."),
|
|
47
|
+
React.createElement("br", null),
|
|
48
|
+
React.createElement("p", null, "Proin vitae nulla porta, ullamcorper nisi at, convallis ante. Maecenas facilisis augue vel ultricies laoreet. Vivamus blandit enim ac felis consectetur, quis malesuada sem laoreet. Praesent vehicula felis tellus, at luctus ipsum suscipit at. Sed lorem felis, euismod sit amet cursus et, porttitor et mauris. Proin cursus arcu lacus, non condimentum mi consectetur eu. Suspendisse quis venenatis felis, eu facilisis dolor. Morbi laoreet egestas arcu, vel tempor nisi vehicula at. Nullam ut ligula posuere, vestibulum mi at, mollis felis. Nunc ut massa elit. Suspendisse id nunc at ipsum eleifend finibus imperdiet et lectus. Curabitur elementum, nulla sit amet interdum mollis, metus elit vulputate neque, mattis lacinia lorem purus ut odio. Morbi interdum neque sed libero molestie consequat. Sed condimentum orci facilisis tortor mollis ultrices."),
|
|
49
|
+
React.createElement("br", null),
|
|
50
|
+
React.createElement("p", null, "Nulla diam lorem, placerat non dui et, viverra ultrices augue. Phasellus tristique porta odio at scelerisque. Proin facilisis elit ut est faucibus rhoncus. Nunc ac auctor ante. Suspendisse consequat nulla sit amet interdum luctus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam vel dapibus sem. Quisque feugiat libero id maximus blandit. Duis nec urna aliquet, dapibus nibh at, scelerisque enim. Donec venenatis est dui, sit amet sollicitudin mi tempus ac. Aenean quis nunc a risus congue malesuada at vulputate metus. Integer sed efficitur libero. Aenean sit amet consequat arcu. Aliquam rhoncus porttitor vestibulum."))))));
|
|
51
|
+
};
|
|
52
|
+
export default {
|
|
53
|
+
title: 'Components/Modal',
|
|
54
|
+
component: Modal,
|
|
55
|
+
};
|