ferns-ui 0.9.0 → 0.10.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.
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ interface ModalProps {
3
+ onDismiss: () => void;
4
+ visible: boolean;
5
+ align?: "center" | "start";
6
+ children?: React.ReactElement;
7
+ footer?: React.ReactElement;
8
+ heading?: string;
9
+ size?: "sm" | "md" | "lg";
10
+ subHeading?: string;
11
+ primaryButtonText?: string;
12
+ primaryButtonOnClick?: (value?: any) => void;
13
+ secondaryButtonText?: string;
14
+ secondaryButtonOnClick?: (value?: any) => void;
15
+ }
16
+ export declare const Modal: ({ onDismiss, visible, align, children, footer, heading, size, subHeading, primaryButtonText, primaryButtonOnClick, secondaryButtonText, secondaryButtonOnClick, }: ModalProps) => React.ReactElement;
17
+ export {};
package/dist/Modal.js ADDED
@@ -0,0 +1,62 @@
1
+ import React from "react";
2
+ import { Dimensions, Modal as RNModal } from "react-native";
3
+ import { Box } from "./Box";
4
+ import { Button } from "./Button";
5
+ import { Heading } from "./Heading";
6
+ import { Text } from "./Text";
7
+ export const Modal = ({ onDismiss, visible, align = "center", children, footer, heading, size, subHeading, primaryButtonText, primaryButtonOnClick, secondaryButtonText, secondaryButtonOnClick, }) => {
8
+ if (subHeading && !heading) {
9
+ throw new Error("Cannot render Modal with subHeading and no heading");
10
+ }
11
+ if (!footer && !primaryButtonText && !secondaryButtonText) {
12
+ throw new Error("Cannot render Modal without footer, primaryButtonText, or secondaryButtonText");
13
+ }
14
+ function renderHeader() {
15
+ return (React.createElement(Box, { paddingY: 3, width: "100%" },
16
+ React.createElement(Box, null,
17
+ React.createElement(Heading, { align: align === "center" ? "center" : undefined, size: "sm" }, heading)),
18
+ Boolean(subHeading) && (React.createElement(Box, { paddingY: 2 },
19
+ React.createElement(Text, { align: align === "center" ? "center" : undefined }, subHeading)))));
20
+ }
21
+ function renderFooter() {
22
+ if (footer) {
23
+ return footer;
24
+ }
25
+ return (React.createElement(Box, { direction: "row", justifyContent: "end", width: "100%" },
26
+ Boolean(secondaryButtonText) && (React.createElement(Box, { marginRight: 4, minWidth: 120 },
27
+ React.createElement(Button, { color: "gray", text: secondaryButtonText !== null && secondaryButtonText !== void 0 ? secondaryButtonText : "", onClick: secondaryButtonOnClick }))),
28
+ React.createElement(Box, { minWidth: 120 },
29
+ React.createElement(Button, { color: "primary", text: primaryButtonText !== null && primaryButtonText !== void 0 ? primaryButtonText : "", onClick: primaryButtonOnClick }))));
30
+ }
31
+ let sizePx = 540;
32
+ if (size === "md") {
33
+ sizePx = 720;
34
+ }
35
+ else if (size === "lg") {
36
+ sizePx = 900;
37
+ }
38
+ // Adjust size for small screens
39
+ if (sizePx > Dimensions.get("window").width) {
40
+ sizePx = "90%";
41
+ }
42
+ return (React.createElement(Box, { alignItems: "center", flex: "grow", height: "100%", justifyContent: "center", width: "100%" },
43
+ React.createElement(RNModal, { animationType: "slide", transparent: true, visible: visible, onRequestClose: onDismiss },
44
+ React.createElement(Box, { alignItems: "center", alignSelf: "center", color: "white", dangerouslySetInlineStyle: {
45
+ __style: {
46
+ zIndex: 1,
47
+ shadowColor: "#999",
48
+ shadowOffset: {
49
+ width: 4,
50
+ height: 6,
51
+ },
52
+ shadowRadius: 4,
53
+ shadowOpacity: 1.0,
54
+ elevation: 8,
55
+ },
56
+ }, direction: "column", justifyContent: "center", marginTop: 12, maxWidth: sizePx, minWidth: 300, paddingX: 8, paddingY: 2, rounding: 6, shadow: true, width: sizePx },
57
+ React.createElement(Box, { marginBottom: 6, width: "100%" },
58
+ renderHeader(),
59
+ React.createElement(Box, { paddingY: 4 }, children),
60
+ React.createElement(Box, { paddingY: 4 }, renderFooter()))))));
61
+ };
62
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./Constants";
2
2
  export * from "./Common";
3
+ export * from "./ActionSheet";
3
4
  export * from "./Avatar";
4
5
  export * from "./Banner";
5
6
  export * from "./BlurBox";
@@ -17,13 +18,13 @@ export * from "./Form";
17
18
  export * from "./HeaderButtons";
18
19
  export * from "./Heading";
19
20
  export * from "./Icon";
20
- export * from "./ActionSheet";
21
21
  export * from "./IconButton";
22
22
  export * from "./Image";
23
23
  export * from "./ImageBackground";
24
24
  export * from "./Link";
25
25
  export * from "./Mask";
26
26
  export * from "./Meta";
27
+ export * from "./Modal";
27
28
  export * from "./Page";
28
29
  export * from "./Pill";
29
30
  export * from "./ScrollView";
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./Constants";
2
2
  export * from "./Common";
3
+ export * from "./ActionSheet";
3
4
  export * from "./Avatar";
4
5
  export * from "./Banner";
5
6
  export * from "./BlurBox";
@@ -17,7 +18,6 @@ export * from "./Form";
17
18
  export * from "./HeaderButtons";
18
19
  export * from "./Heading";
19
20
  export * from "./Icon";
20
- export * from "./ActionSheet";
21
21
  export * from "./IconButton";
22
22
  export * from "./Image";
23
23
  export * from "./ImageBackground";
@@ -26,7 +26,7 @@ export * from "./ImageBackground";
26
26
  export * from "./Link";
27
27
  export * from "./Mask";
28
28
  export * from "./Meta";
29
- // export * from "./Modal";
29
+ export * from "./Modal";
30
30
  export * from "./Page";
31
31
  export * from "./Pill";
32
32
  export * from "./ScrollView";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,4BAA4B;AAC5B,4BAA4B;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,2BAA2B;AAE3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,2BAA2B;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,4BAA4B;AAC5B,4BAA4B;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,2BAA2B;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ferns-ui",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
package/src/Modal.tsx ADDED
@@ -0,0 +1,143 @@
1
+ import React from "react";
2
+ import {Dimensions, Modal as RNModal} from "react-native";
3
+
4
+ import {Box} from "./Box";
5
+ import {Button} from "./Button";
6
+ import {Heading} from "./Heading";
7
+ import {Text} from "./Text";
8
+
9
+ interface ModalProps {
10
+ onDismiss: () => void;
11
+ visible: boolean;
12
+ // Alignment of the header. Default is "center".
13
+ align?: "center" | "start";
14
+ // Element to render in the middle part of the modal.
15
+ children?: React.ReactElement;
16
+ // Element to render in the bottom of the modal. This takes precedence over primaryButton and secondaryButton.
17
+ footer?: React.ReactElement;
18
+ heading?: string;
19
+ size?: "sm" | "md" | "lg";
20
+ subHeading?: string;
21
+ // Renders a primary colored button all the way to the right in the footer, if no footer prop is provided.
22
+ primaryButtonText?: string;
23
+ primaryButtonOnClick?: (value?: any) => void;
24
+ // Renders a primary gray button to the left of the primary button in the footer, if no footer prop is provided.
25
+ // Requires primaryButtonText to be defined, but is not required itself.
26
+ secondaryButtonText?: string;
27
+ secondaryButtonOnClick?: (value?: any) => void;
28
+ }
29
+
30
+ export const Modal = ({
31
+ onDismiss,
32
+ visible,
33
+ align = "center",
34
+ children,
35
+ footer,
36
+ heading,
37
+ size,
38
+ subHeading,
39
+ primaryButtonText,
40
+ primaryButtonOnClick,
41
+ secondaryButtonText,
42
+ secondaryButtonOnClick,
43
+ }: ModalProps): React.ReactElement => {
44
+ if (subHeading && !heading) {
45
+ throw new Error("Cannot render Modal with subHeading and no heading");
46
+ }
47
+ if (!footer && !primaryButtonText && !secondaryButtonText) {
48
+ throw new Error(
49
+ "Cannot render Modal without footer, primaryButtonText, or secondaryButtonText"
50
+ );
51
+ }
52
+
53
+ function renderHeader(): React.ReactElement {
54
+ return (
55
+ <Box paddingY={3} width="100%">
56
+ <Box>
57
+ <Heading align={align === "center" ? "center" : undefined} size="sm">
58
+ {heading}
59
+ </Heading>
60
+ </Box>
61
+ {Boolean(subHeading) && (
62
+ <Box paddingY={2}>
63
+ <Text align={align === "center" ? "center" : undefined}>{subHeading}</Text>
64
+ </Box>
65
+ )}
66
+ </Box>
67
+ );
68
+ }
69
+ function renderFooter(): React.ReactElement | null {
70
+ if (footer) {
71
+ return footer;
72
+ }
73
+ return (
74
+ <Box direction="row" justifyContent="end" width="100%">
75
+ {Boolean(secondaryButtonText) && (
76
+ <Box marginRight={4} minWidth={120}>
77
+ <Button
78
+ color="gray"
79
+ text={secondaryButtonText ?? ""}
80
+ onClick={secondaryButtonOnClick}
81
+ />
82
+ </Box>
83
+ )}
84
+ <Box minWidth={120}>
85
+ <Button color="primary" text={primaryButtonText ?? ""} onClick={primaryButtonOnClick} />
86
+ </Box>
87
+ </Box>
88
+ );
89
+ }
90
+
91
+ let sizePx: string | number = 540;
92
+ if (size === "md") {
93
+ sizePx = 720;
94
+ } else if (size === "lg") {
95
+ sizePx = 900;
96
+ }
97
+
98
+ // Adjust size for small screens
99
+ if (sizePx > Dimensions.get("window").width) {
100
+ sizePx = "90%";
101
+ }
102
+
103
+ return (
104
+ <Box alignItems="center" flex="grow" height="100%" justifyContent="center" width="100%">
105
+ <RNModal animationType="slide" transparent visible={visible} onRequestClose={onDismiss}>
106
+ <Box
107
+ alignItems="center"
108
+ alignSelf="center"
109
+ color="white"
110
+ dangerouslySetInlineStyle={{
111
+ __style: {
112
+ zIndex: 1,
113
+ shadowColor: "#999",
114
+ shadowOffset: {
115
+ width: 4,
116
+ height: 6,
117
+ },
118
+ shadowRadius: 4,
119
+ shadowOpacity: 1.0,
120
+ elevation: 8,
121
+ },
122
+ }}
123
+ direction="column"
124
+ justifyContent="center"
125
+ marginTop={12}
126
+ maxWidth={sizePx}
127
+ minWidth={300}
128
+ paddingX={8}
129
+ paddingY={2}
130
+ rounding={6}
131
+ shadow
132
+ width={sizePx}
133
+ >
134
+ <Box marginBottom={6} width="100%">
135
+ {renderHeader()}
136
+ <Box paddingY={4}>{children}</Box>
137
+ <Box paddingY={4}>{renderFooter()}</Box>
138
+ </Box>
139
+ </Box>
140
+ </RNModal>
141
+ </Box>
142
+ );
143
+ };
package/src/index.tsx CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./Constants";
2
2
  export * from "./Common";
3
+ export * from "./ActionSheet";
3
4
  export * from "./Avatar";
4
5
  export * from "./Banner";
5
6
  export * from "./BlurBox";
@@ -17,7 +18,6 @@ export * from "./Form";
17
18
  export * from "./HeaderButtons";
18
19
  export * from "./Heading";
19
20
  export * from "./Icon";
20
- export * from "./ActionSheet";
21
21
  export * from "./IconButton";
22
22
  export * from "./Image";
23
23
  export * from "./ImageBackground";
@@ -26,7 +26,7 @@ export * from "./ImageBackground";
26
26
  export * from "./Link";
27
27
  export * from "./Mask";
28
28
  export * from "./Meta";
29
- // export * from "./Modal";
29
+ export * from "./Modal";
30
30
 
31
31
  export * from "./Page";
32
32
  export * from "./Pill";