ferns-ui 0.3.1 → 0.4.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/dist/Avatar.d.ts +25 -0
- package/dist/Avatar.js +48 -0
- package/dist/Avatar.js.map +1 -0
- package/dist/Common.d.ts +1 -1
- package/dist/Mask.d.ts +1 -3
- package/dist/Mask.js +15 -18
- package/dist/Mask.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Avatar.tsx +98 -0
- package/src/Common.ts +1 -1
- package/src/Mask.tsx +15 -18
- package/src/index.tsx +1 -0
package/dist/Avatar.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface AvatarProps {
|
|
3
|
+
/**
|
|
4
|
+
* The name of the user. This is used for the placeholder treatment if an image is not available.
|
|
5
|
+
*/
|
|
6
|
+
name: string;
|
|
7
|
+
/**
|
|
8
|
+
* Override the generated initials from `name`.
|
|
9
|
+
*/
|
|
10
|
+
initials?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Adds a white border around Avatar so it's visible when displayed on other images.
|
|
13
|
+
*/
|
|
14
|
+
outline?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* xs: 24px, sm: 32px, md: 48px, lg: 64px, xl: 120px.
|
|
17
|
+
*/
|
|
18
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl";
|
|
19
|
+
/**
|
|
20
|
+
* The URL of the user's image.
|
|
21
|
+
*/
|
|
22
|
+
src?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const Avatar: (props: AvatarProps) => React.ReactElement;
|
|
25
|
+
export {};
|
package/dist/Avatar.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Image, Text, View } from "react-native";
|
|
3
|
+
import { Box } from "./Box";
|
|
4
|
+
import { Unifier } from "./Unifier";
|
|
5
|
+
const sizes = {
|
|
6
|
+
xs: 24,
|
|
7
|
+
sm: 32,
|
|
8
|
+
md: 48,
|
|
9
|
+
lg: 64,
|
|
10
|
+
xl: 120,
|
|
11
|
+
};
|
|
12
|
+
export const Avatar = (props) => {
|
|
13
|
+
const [isImageLoaded, setIsImageLoaded] = useState(true);
|
|
14
|
+
const { name, initials, outline, size = "md", src } = props;
|
|
15
|
+
const width = sizes[size];
|
|
16
|
+
const height = sizes[size];
|
|
17
|
+
const radius = sizes[size] / 2;
|
|
18
|
+
const fontSize = sizes[size] / 2;
|
|
19
|
+
const computedInitials = initials !== null && initials !== void 0 ? initials : name.match(/(^\S\S?|\s\S)?/g)
|
|
20
|
+
.map((v) => v.trim())
|
|
21
|
+
.join("")
|
|
22
|
+
.match(/(^\S|\S$)?/g)
|
|
23
|
+
.join("")
|
|
24
|
+
.toLocaleUpperCase();
|
|
25
|
+
const handleImageError = () => setIsImageLoaded(false);
|
|
26
|
+
return (React.createElement(Box, { border: outline ? "white" : undefined, height: height, overflow: "hidden", position: "relative", rounding: "circle", width: width }, src && isImageLoaded ? (
|
|
27
|
+
// TODO: Make our Image component rounding work so that we can use it for Avatar. Currently it creates an
|
|
28
|
+
// unrounded box around the Image.
|
|
29
|
+
React.createElement(Image, { resizeMode: "contain", source: { uri: src, cache: "force-cache" }, style: {
|
|
30
|
+
borderRadius: radius,
|
|
31
|
+
height,
|
|
32
|
+
width,
|
|
33
|
+
display: "flex",
|
|
34
|
+
alignItems: "center",
|
|
35
|
+
justifyContent: "center",
|
|
36
|
+
overflow: "hidden",
|
|
37
|
+
}, onError: handleImageError })) : (React.createElement(View, { style: {
|
|
38
|
+
height,
|
|
39
|
+
width,
|
|
40
|
+
borderRadius: radius,
|
|
41
|
+
display: "flex",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
justifyContent: "center",
|
|
44
|
+
backgroundColor: Unifier.theme.gray,
|
|
45
|
+
} },
|
|
46
|
+
React.createElement(Text, { style: { fontSize, color: Unifier.theme.darkGray } }, computedInitials)))));
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAElC,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,GAAG;CACR,CAAC;AAyBF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAkB,EAAsB,EAAE;IAC/D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAC,GAAG,KAAK,CAAC;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,gBAAgB,GACpB,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GACP,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAS;SACnC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC5B,IAAI,CAAC,EAAE,CAAC;SACR,KAAK,CAAC,aAAa,CAAC;SACpB,IAAI,CAAC,EAAE,CAAC;SACR,iBAAiB,EAAE,CAAC;IAEzB,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,CACL,oBAAC,GAAG,IACF,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAC,QAAQ,EACjB,QAAQ,EAAC,UAAU,EACnB,QAAQ,EAAC,QAAQ,EACjB,KAAK,EAAE,KAAK,IAEX,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC;IACtB,yGAAyG;IACzG,mCAAmC;IACnC,oBAAC,KAAK,IACJ,UAAU,EAAC,SAAS,EACpB,MAAM,EAAE,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAC,EACxC,KAAK,EAAE;YACL,YAAY,EAAE,MAAM;YACpB,MAAM;YACN,KAAK;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,QAAQ,EAAE,QAAQ;SACnB,EACD,OAAO,EAAE,gBAAgB,GACzB,CACH,CAAC,CAAC,CAAC,CACF,oBAAC,IAAI,IACH,KAAK,EAAE;YACL,MAAM;YACN,KAAK;YACL,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;SACpC;QAED,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAC,IAAG,gBAAgB,CAAQ,CAC5E,CACR,CACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/Common.d.ts
CHANGED
|
@@ -437,7 +437,7 @@ export interface SpinnerProps {
|
|
|
437
437
|
color?: Color;
|
|
438
438
|
}
|
|
439
439
|
export interface MaskProps {
|
|
440
|
-
children?: React.
|
|
440
|
+
children?: React.ReactElement;
|
|
441
441
|
shape?: "circle" | "rounded" | "square";
|
|
442
442
|
height?: number | string;
|
|
443
443
|
width?: number | string;
|
package/dist/Mask.d.ts
CHANGED
package/dist/Mask.js
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
// } else {
|
|
18
|
-
return this.props.children;
|
|
19
|
-
// }
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
export function Mask(props) {
|
|
4
|
+
if (props.shape === "rounded") {
|
|
5
|
+
return React.createElement(View, { style: { overflow: "hidden", borderRadius: 12 } }, props.children);
|
|
6
|
+
}
|
|
7
|
+
else if (props.shape === "circle") {
|
|
8
|
+
return React.createElement(View, { style: { overflow: "hidden", borderRadius: 1000 } }, props.children);
|
|
9
|
+
}
|
|
10
|
+
if (props.rounding) {
|
|
11
|
+
const rounding = props.rounding === "circle" ? 100 : props.rounding;
|
|
12
|
+
// Subtract 1 from rounding because of some very odd rendering.
|
|
13
|
+
return (React.createElement(View, { style: { borderRadius: (rounding - 1) * 4, overflow: "visible" } }, props.children));
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return props.children || null;
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
//# sourceMappingURL=Mask.js.map
|
package/dist/Mask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mask.js","sourceRoot":"","sources":["../src/Mask.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Mask.js","sourceRoot":"","sources":["../src/Mask.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAIlC,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;QAC7B,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAC,IAAG,KAAK,CAAC,QAAQ,CAAQ,CAAC;KACrF;SAAM,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;QACnC,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAC,IAAG,KAAK,CAAC,QAAQ,CAAQ,CAAC;KACvF;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpE,+DAA+D;QAC/D,OAAO,CACL,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,YAAY,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAC,IAAG,KAAK,CAAC,QAAQ,CAAQ,CAC9F,CAAC;KACH;SAAM;QACL,OAAO,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC;KAC/B;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,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,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"}
|
package/package.json
CHANGED
package/src/Avatar.tsx
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import React, {useState} from "react";
|
|
2
|
+
import {Image, Text, View} from "react-native";
|
|
3
|
+
|
|
4
|
+
import {Box} from "./Box";
|
|
5
|
+
import {Unifier} from "./Unifier";
|
|
6
|
+
|
|
7
|
+
const sizes = {
|
|
8
|
+
xs: 24,
|
|
9
|
+
sm: 32,
|
|
10
|
+
md: 48,
|
|
11
|
+
lg: 64,
|
|
12
|
+
xl: 120,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
interface AvatarProps {
|
|
16
|
+
/**
|
|
17
|
+
* The name of the user. This is used for the placeholder treatment if an image is not available.
|
|
18
|
+
*/
|
|
19
|
+
name: string;
|
|
20
|
+
/**
|
|
21
|
+
* Override the generated initials from `name`.
|
|
22
|
+
*/
|
|
23
|
+
initials?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Adds a white border around Avatar so it's visible when displayed on other images.
|
|
26
|
+
*/
|
|
27
|
+
outline?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* xs: 24px, sm: 32px, md: 48px, lg: 64px, xl: 120px.
|
|
30
|
+
*/
|
|
31
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl";
|
|
32
|
+
/**
|
|
33
|
+
* The URL of the user's image.
|
|
34
|
+
*/
|
|
35
|
+
src?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const Avatar = (props: AvatarProps): React.ReactElement => {
|
|
39
|
+
const [isImageLoaded, setIsImageLoaded] = useState(true);
|
|
40
|
+
const {name, initials, outline, size = "md", src} = props;
|
|
41
|
+
const width = sizes[size];
|
|
42
|
+
const height = sizes[size];
|
|
43
|
+
const radius = sizes[size] / 2;
|
|
44
|
+
const fontSize = sizes[size] / 2;
|
|
45
|
+
const computedInitials =
|
|
46
|
+
initials ??
|
|
47
|
+
(name.match(/(^\S\S?|\s\S)?/g) as any)
|
|
48
|
+
.map((v: string) => v.trim())
|
|
49
|
+
.join("")
|
|
50
|
+
.match(/(^\S|\S$)?/g)
|
|
51
|
+
.join("")
|
|
52
|
+
.toLocaleUpperCase();
|
|
53
|
+
|
|
54
|
+
const handleImageError = () => setIsImageLoaded(false);
|
|
55
|
+
return (
|
|
56
|
+
<Box
|
|
57
|
+
border={outline ? "white" : undefined}
|
|
58
|
+
height={height}
|
|
59
|
+
overflow="hidden"
|
|
60
|
+
position="relative"
|
|
61
|
+
rounding="circle"
|
|
62
|
+
width={width}
|
|
63
|
+
>
|
|
64
|
+
{src && isImageLoaded ? (
|
|
65
|
+
// TODO: Make our Image component rounding work so that we can use it for Avatar. Currently it creates an
|
|
66
|
+
// unrounded box around the Image.
|
|
67
|
+
<Image
|
|
68
|
+
resizeMode="contain"
|
|
69
|
+
source={{uri: src, cache: "force-cache"}}
|
|
70
|
+
style={{
|
|
71
|
+
borderRadius: radius,
|
|
72
|
+
height,
|
|
73
|
+
width,
|
|
74
|
+
display: "flex",
|
|
75
|
+
alignItems: "center",
|
|
76
|
+
justifyContent: "center",
|
|
77
|
+
overflow: "hidden",
|
|
78
|
+
}}
|
|
79
|
+
onError={handleImageError}
|
|
80
|
+
/>
|
|
81
|
+
) : (
|
|
82
|
+
<View
|
|
83
|
+
style={{
|
|
84
|
+
height,
|
|
85
|
+
width,
|
|
86
|
+
borderRadius: radius,
|
|
87
|
+
display: "flex",
|
|
88
|
+
alignItems: "center",
|
|
89
|
+
justifyContent: "center",
|
|
90
|
+
backgroundColor: Unifier.theme.gray,
|
|
91
|
+
}}
|
|
92
|
+
>
|
|
93
|
+
<Text style={{fontSize, color: Unifier.theme.darkGray}}>{computedInitials}</Text>
|
|
94
|
+
</View>
|
|
95
|
+
)}
|
|
96
|
+
</Box>
|
|
97
|
+
);
|
|
98
|
+
};
|
package/src/Common.ts
CHANGED
package/src/Mask.tsx
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import {View} from "react-native";
|
|
2
3
|
|
|
3
4
|
import {MaskProps} from "./Common";
|
|
4
5
|
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// );
|
|
20
|
-
// } else {
|
|
21
|
-
return this.props.children;
|
|
22
|
-
// }
|
|
6
|
+
export function Mask(props: MaskProps): React.ReactElement | null {
|
|
7
|
+
if (props.shape === "rounded") {
|
|
8
|
+
return <View style={{overflow: "hidden", borderRadius: 12}}>{props.children}</View>;
|
|
9
|
+
} else if (props.shape === "circle") {
|
|
10
|
+
return <View style={{overflow: "hidden", borderRadius: 1000}}>{props.children}</View>;
|
|
11
|
+
}
|
|
12
|
+
if (props.rounding) {
|
|
13
|
+
const rounding = props.rounding === "circle" ? 100 : props.rounding;
|
|
14
|
+
// Subtract 1 from rounding because of some very odd rendering.
|
|
15
|
+
return (
|
|
16
|
+
<View style={{borderRadius: (rounding - 1) * 4, overflow: "visible"}}>{props.children}</View>
|
|
17
|
+
);
|
|
18
|
+
} else {
|
|
19
|
+
return props.children || null;
|
|
23
20
|
}
|
|
24
21
|
}
|