@draftbit/core 42.1.5 → 42.1.7-71d4c6.1
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/LICENSE +21 -0
- package/lib/commonjs/components/DatePicker/DatePicker.js +6 -1
- package/lib/commonjs/components/DatePicker/DatePicker.js.map +1 -1
- package/lib/commonjs/components/DatePicker/DatePickerComponentType.js +2 -0
- package/lib/commonjs/components/Divider.js +18 -5
- package/lib/commonjs/components/Divider.js.map +1 -1
- package/lib/commonjs/components/Elevation.js +14 -3
- package/lib/commonjs/components/Elevation.js.map +1 -1
- package/lib/commonjs/components/Justification.js +3 -0
- package/lib/commonjs/components/Picker/PickerComponent.android.js +4 -1
- package/lib/commonjs/components/Picker/PickerComponent.android.js.map +1 -1
- package/lib/commonjs/components/Picker/PickerComponent.web.js +4 -1
- package/lib/commonjs/components/Picker/PickerComponent.web.js.map +1 -1
- package/lib/commonjs/components/Picker/PickerTypes.js +3 -0
- package/lib/commonjs/components/Portal/PortalHost.js.map +1 -1
- package/lib/commonjs/components/ResizeMode.js +3 -0
- package/lib/module/components/DatePicker/DatePicker.js +6 -1
- package/lib/module/components/DatePicker/DatePicker.js.map +1 -1
- package/lib/module/components/DatePicker/DatePickerComponentType.js +1 -1
- package/lib/module/components/Justification.js +1 -1
- package/lib/module/components/Picker/PickerComponent.android.js +4 -1
- package/lib/module/components/Picker/PickerComponent.android.js.map +1 -1
- package/lib/module/components/Picker/PickerComponent.web.js +4 -1
- package/lib/module/components/Picker/PickerComponent.web.js.map +1 -1
- package/lib/module/components/Picker/PickerTypes.js +1 -1
- package/lib/module/components/ResizeMode.js +1 -1
- package/package.json +3 -2
- package/src/Provider.js +9 -0
- package/src/components/Accordion/AccordionGroup.js +94 -0
- package/src/components/Accordion/AccordionItem.js +48 -0
- package/src/components/Accordion/index.js +2 -0
- package/src/components/ActionSheet/ActionSheet.js +57 -0
- package/src/components/ActionSheet/ActionSheetCancel.js +28 -0
- package/src/components/ActionSheet/ActionSheetItem.js +49 -0
- package/src/components/ActionSheet/index.js +3 -0
- package/src/components/AnimatedCircularProgress.js +43 -0
- package/src/components/AspectRatio.js +18 -0
- package/src/components/AvatarEdit.js +67 -0
- package/src/components/Button.js +187 -0
- package/src/components/Card.js +109 -0
- package/src/components/CardBlock.js +176 -0
- package/src/components/CardContainer.js +171 -0
- package/src/components/CardContainerRating.js +203 -0
- package/src/components/CardContainerShortImage.js +151 -0
- package/src/components/CardInline.js +87 -0
- package/src/components/Carousel.js +85 -0
- package/src/components/Checkbox/Checkbox.js +114 -0
- package/src/components/Checkbox/CheckboxGroup.js +46 -0
- package/src/components/Checkbox/CheckboxRow.js +109 -0
- package/src/components/Checkbox/context.js +14 -0
- package/src/components/Checkbox/index.js +3 -0
- package/src/components/CircleImage.js +32 -0
- package/src/components/CircularProgress.js +78 -0
- package/src/components/Config.js +63 -0
- package/src/components/Container.js +73 -0
- package/src/components/DatePicker/DatePicker.js +379 -0
- package/src/components/DatePicker/DatePicker.tsx +7 -1
- package/src/components/DatePicker/DatePickerComponent.js +13 -0
- package/src/components/DatePicker/DatePickerComponent.web.js +30 -0
- package/src/components/DatePicker/DatePickerComponentType.js +1 -0
- package/src/components/DeprecatedButton.js +201 -0
- package/src/components/DeprecatedCardWrapper.js +18 -0
- package/src/components/DeprecatedFAB.js +261 -0
- package/src/components/Divider.js +39 -0
- package/src/components/Elevation.js +20 -0
- package/src/components/FAB.js +82 -0
- package/src/components/FieldSearchBarFull.js +92 -0
- package/src/components/FormRow.js +19 -0
- package/src/components/Header.js +44 -0
- package/src/components/HeaderLarge.js +35 -0
- package/src/components/HeaderMedium.js +61 -0
- package/src/components/HeaderOverline.js +61 -0
- package/src/components/IconButton.js +65 -0
- package/src/components/Image.js +62 -0
- package/src/components/Justification.js +1 -0
- package/src/components/Layout.js +245 -0
- package/src/components/Picker/Picker.js +204 -0
- package/src/components/Picker/PickerComponent.android.js +68 -0
- package/src/components/Picker/PickerComponent.android.tsx +6 -1
- package/src/components/Picker/PickerComponent.ios.js +72 -0
- package/src/components/Picker/PickerComponent.web.js +68 -0
- package/src/components/Picker/PickerComponent.web.tsx +6 -1
- package/src/components/Picker/PickerTypes.js +1 -0
- package/src/components/Portal/Portal.js +35 -0
- package/src/components/Portal/PortalConsumer.js +28 -0
- package/src/components/Portal/PortalHost.js +105 -0
- package/src/components/Portal/PortalManager.js +29 -0
- package/src/components/ProgressBar.js +218 -0
- package/src/components/ProgressCircle.js +121 -0
- package/src/components/ProgressIndicator.js +207 -0
- package/src/components/RadioButton/RadioButton.js +66 -0
- package/src/components/RadioButton/RadioButtonFieldGroup.js +17 -0
- package/src/components/RadioButton/RadioButtonGroup.js +43 -0
- package/src/components/RadioButton/RadioButtonRow.js +111 -0
- package/src/components/RadioButton/context.js +14 -0
- package/src/components/RadioButton/index.js +4 -0
- package/src/components/ResizeMode.js +1 -0
- package/src/components/Row.js +48 -0
- package/src/components/RowBodyIcon.js +83 -0
- package/src/components/RowHeadlineImageCaption.js +179 -0
- package/src/components/RowHeadlineImageIcon.js +113 -0
- package/src/components/ScreenContainer.js +35 -0
- package/src/components/Slider.js +114 -0
- package/src/components/StarRating.js +80 -0
- package/src/components/StepIndicator.js +346 -0
- package/src/components/Stepper.js +69 -0
- package/src/components/Surface.js +36 -0
- package/src/components/Switch.js +59 -0
- package/src/components/Text.js +232 -0
- package/src/components/TextField.js +552 -0
- package/src/components/TextInput.js +13 -0
- package/src/components/ToggleButton.js +75 -0
- package/src/components/Touchable.js +24 -0
- package/src/components/Touchable.web.js +2 -0
- package/src/components/Typography.js +36 -0
- package/src/components/useAuthState.js +31 -0
- package/src/constants.js +10 -0
- package/src/hooks.js +12 -0
- package/src/index.js +48 -0
- package/src/interfaces/Icon.js +8 -0
- package/src/styles/DarkTheme.js +26 -0
- package/src/styles/DefaultTheme.js +111 -0
- package/src/styles/fonts.js +62 -0
- package/src/styles/overlay.js +60 -0
- package/src/styles/shadow.js +51 -0
- package/src/theming.js +3 -0
- package/src/utilities.js +42 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Text } from "react-native";
|
|
3
|
+
import { withTheme } from "../theming";
|
|
4
|
+
export const Title = withTheme(({ text, theme, style }) => {
|
|
5
|
+
return (React.createElement(Text, { style: [
|
|
6
|
+
{
|
|
7
|
+
fontSize: 20,
|
|
8
|
+
letterSpacing: 0,
|
|
9
|
+
lineHeight: 26,
|
|
10
|
+
color: theme.colors.text,
|
|
11
|
+
},
|
|
12
|
+
style,
|
|
13
|
+
] }, text));
|
|
14
|
+
});
|
|
15
|
+
export const Subtitle = withTheme(({ text, theme, style }) => {
|
|
16
|
+
return (React.createElement(Text, { style: [
|
|
17
|
+
{
|
|
18
|
+
fontSize: 14,
|
|
19
|
+
letterSpacing: 0,
|
|
20
|
+
lineHeight: 16,
|
|
21
|
+
color: theme.colors.medium,
|
|
22
|
+
},
|
|
23
|
+
style,
|
|
24
|
+
] }, text));
|
|
25
|
+
});
|
|
26
|
+
export const Caption = withTheme(({ text, theme, style }) => {
|
|
27
|
+
return (React.createElement(Text, { style: [
|
|
28
|
+
{
|
|
29
|
+
fontSize: 12,
|
|
30
|
+
letterSpacing: 0,
|
|
31
|
+
lineHeight: 14,
|
|
32
|
+
color: theme.colors.light,
|
|
33
|
+
},
|
|
34
|
+
style,
|
|
35
|
+
] }, text));
|
|
36
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export const useAuthState = (auth) => {
|
|
3
|
+
const [error, setError] = React.useState();
|
|
4
|
+
const [value, setValue] = React.useState(auth.currentUser);
|
|
5
|
+
React.useEffect(() => {
|
|
6
|
+
const list = auth.onAuthStateChanged(setValue, setError);
|
|
7
|
+
return () => {
|
|
8
|
+
list();
|
|
9
|
+
};
|
|
10
|
+
}, [auth]);
|
|
11
|
+
const signInWithEmailAndPassword = (user, password) => {
|
|
12
|
+
auth
|
|
13
|
+
.signInWithEmailAndPassword(user, password)
|
|
14
|
+
.then(setValue)
|
|
15
|
+
.catch(setError);
|
|
16
|
+
};
|
|
17
|
+
const createUserWithEmailAndPassword = (user, password) => {
|
|
18
|
+
auth
|
|
19
|
+
.signInWithEmailAndPassword(user, password)
|
|
20
|
+
.then(setValue)
|
|
21
|
+
.catch(setError);
|
|
22
|
+
};
|
|
23
|
+
const signOut = () => auth.signOut();
|
|
24
|
+
return [
|
|
25
|
+
value,
|
|
26
|
+
error,
|
|
27
|
+
signInWithEmailAndPassword,
|
|
28
|
+
signOut,
|
|
29
|
+
createUserWithEmailAndPassword,
|
|
30
|
+
];
|
|
31
|
+
};
|
package/src/constants.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Platform } from "react-native";
|
|
2
|
+
// @ts-ignore
|
|
3
|
+
const expo = global.__expo;
|
|
4
|
+
const DEFAULT_STATUSBAR_HEIGHT_EXPO = expo?.Constants
|
|
5
|
+
? expo.Constants.statusBarHeight
|
|
6
|
+
: 0;
|
|
7
|
+
export const APPROX_STATUSBAR_HEIGHT = Platform.select({
|
|
8
|
+
android: DEFAULT_STATUSBAR_HEIGHT_EXPO,
|
|
9
|
+
ios: Platform.Version < 11 ? DEFAULT_STATUSBAR_HEIGHT_EXPO : 0,
|
|
10
|
+
});
|
package/src/hooks.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export function usePrevious(value) {
|
|
3
|
+
// The ref object is a generic container whose current property is mutable
|
|
4
|
+
// and can hold any value, similar to an instance property on a class
|
|
5
|
+
const ref = React.useRef();
|
|
6
|
+
// Store current value in ref
|
|
7
|
+
React.useEffect(() => {
|
|
8
|
+
ref.current = value;
|
|
9
|
+
}, [value]);
|
|
10
|
+
// Return previous value (happens before update in useEffect above)
|
|
11
|
+
return ref.current;
|
|
12
|
+
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export { injectIcon } from "./interfaces/Icon";
|
|
2
|
+
export { withTheme, ThemeProvider } from "./theming";
|
|
3
|
+
export { default as Provider } from "./Provider";
|
|
4
|
+
export { default as DefaultTheme } from "./styles/DefaultTheme";
|
|
5
|
+
export { ButtonSolid, ButtonOutline, Link } from "./components/Button";
|
|
6
|
+
export { default as Avatar } from "./components/CircleImage";
|
|
7
|
+
export { default as AvatarEdit } from "./components/AvatarEdit";
|
|
8
|
+
export { default as Card } from "./components/Card";
|
|
9
|
+
export { default as Carousel } from "./components/Carousel";
|
|
10
|
+
export { Checkbox, CheckboxGroup, CheckboxRow } from "./components/Checkbox";
|
|
11
|
+
export { default as CircleImage } from "./components/CircleImage";
|
|
12
|
+
export { default as Container } from "./components/Container";
|
|
13
|
+
export { default as Divider } from "./components/Divider";
|
|
14
|
+
export { default as FAB } from "./components/FAB";
|
|
15
|
+
export { default as FieldSearchBarFull } from "./components/FieldSearchBarFull";
|
|
16
|
+
export { default as IconButton } from "./components/IconButton";
|
|
17
|
+
export { default as Image } from "./components/Image";
|
|
18
|
+
export { default as ScreenContainer } from "./components/ScreenContainer";
|
|
19
|
+
export { default as StarRating } from "./components/StarRating";
|
|
20
|
+
export { default as Surface } from "./components/Surface";
|
|
21
|
+
export { default as Switch, SwitchRow } from "./components/Switch";
|
|
22
|
+
export { default as TextField } from "./components/TextField";
|
|
23
|
+
export { default as TextInput } from "./components/TextInput";
|
|
24
|
+
export { default as ToggleButton } from "./components/ToggleButton";
|
|
25
|
+
export { default as Touchable } from "./components/Touchable";
|
|
26
|
+
export { AccordionGroup, AccordionItem } from "./components/Accordion";
|
|
27
|
+
export { ActionSheet, ActionSheetItem, ActionSheetCancel, } from "./components/ActionSheet";
|
|
28
|
+
export { Center, Circle, Square, Row, Stack, Spacer, } from "./components/Layout";
|
|
29
|
+
export { RadioButton, RadioButtonGroup, RadioButtonRow, RadioButtonFieldGroup, } from "./components/RadioButton/index";
|
|
30
|
+
/* Deprecated: Fix or Delete */
|
|
31
|
+
export { default as Button } from "./components/DeprecatedButton";
|
|
32
|
+
export { default as CardBlock } from "./components/CardBlock";
|
|
33
|
+
export { default as CardContainer } from "./components/CardContainer";
|
|
34
|
+
export { default as CardContainerRating } from "./components/CardContainerRating";
|
|
35
|
+
export { default as CardInline } from "./components/CardInline";
|
|
36
|
+
export { default as DatePicker } from "./components/DatePicker/DatePicker";
|
|
37
|
+
export { default as HeaderLarge } from "./components/HeaderLarge";
|
|
38
|
+
export { default as HeaderMedium } from "./components/HeaderMedium";
|
|
39
|
+
export { default as HeaderOverline } from "./components/HeaderOverline";
|
|
40
|
+
export { default as Picker } from "./components/Picker/Picker";
|
|
41
|
+
export { default as ProgressBar } from "./components/ProgressBar";
|
|
42
|
+
export { default as ProgressCircle } from "./components/ProgressCircle";
|
|
43
|
+
export { default as RowBodyIcon } from "./components/RowBodyIcon";
|
|
44
|
+
export { default as RowHeadlineImageCaption } from "./components/RowHeadlineImageCaption";
|
|
45
|
+
export { default as RowHeadlineImageIcon } from "./components/RowHeadlineImageIcon";
|
|
46
|
+
export { default as Slider } from "./components/Slider";
|
|
47
|
+
export { default as Stepper } from "./components/Stepper";
|
|
48
|
+
export { useAuthState } from "./components/useAuthState";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is an interface for a hybrid component.
|
|
3
|
+
*
|
|
4
|
+
* Its public implementation is `@draftbit/native`, and it is injected inside
|
|
5
|
+
* `@draftbit/ui`.
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
export const injectIcon = (Component, Icon) => (props) => React.createElement(Component, { ...props, Icon });
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import color from "color";
|
|
3
|
+
import DefaultTheme from "./DefaultTheme";
|
|
4
|
+
const white = "#FFF";
|
|
5
|
+
const black = "#000";
|
|
6
|
+
const pinkA100 = "#ff80ab";
|
|
7
|
+
const DarkTheme = {
|
|
8
|
+
...DefaultTheme,
|
|
9
|
+
dark: true,
|
|
10
|
+
mode: "adaptive",
|
|
11
|
+
colors: {
|
|
12
|
+
...DefaultTheme.colors,
|
|
13
|
+
primary: "#BB86FC",
|
|
14
|
+
background: "#121212",
|
|
15
|
+
surface: "#121212",
|
|
16
|
+
error: "#CF6679",
|
|
17
|
+
onBackground: "#FFFFFF",
|
|
18
|
+
onSurface: "#FFFFFF",
|
|
19
|
+
text: white,
|
|
20
|
+
disabled: color(white).alpha(0.38).rgb().string(),
|
|
21
|
+
placeholder: color(white).alpha(0.54).rgb().string(),
|
|
22
|
+
backdrop: color(black).alpha(0.5).rgb().string(),
|
|
23
|
+
notification: pinkA100,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
export default DarkTheme;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { systemWeights } from "react-native-typography";
|
|
2
|
+
import configureFonts from "./fonts";
|
|
3
|
+
const DefaultTheme = {
|
|
4
|
+
disabledOpacity: 0.5,
|
|
5
|
+
roundness: 8,
|
|
6
|
+
dark: false,
|
|
7
|
+
mode: "exact",
|
|
8
|
+
borderRadius: {
|
|
9
|
+
global: 6,
|
|
10
|
+
button: 24,
|
|
11
|
+
},
|
|
12
|
+
colors: {
|
|
13
|
+
primary: "rgba(90, 69, 255, 1)",
|
|
14
|
+
secondary: "rgba(59, 201, 234, 1)",
|
|
15
|
+
surface: "rgba(255, 255, 255, 1)",
|
|
16
|
+
background: "rgba(251, 252, 253, 1)",
|
|
17
|
+
error: "rgba(255, 69, 100, 1)",
|
|
18
|
+
divider: "rgba(200, 200, 200, 1)",
|
|
19
|
+
strong: "rgba(18, 20, 44, 1)",
|
|
20
|
+
medium: "rgba(70, 78, 88, 1)",
|
|
21
|
+
strongInverse: "rgba(255, 255, 255, 1)",
|
|
22
|
+
mediumInverse: "rgba(255, 255, 255, 0.87)",
|
|
23
|
+
lightInverse: "rgba(255, 255, 255, 0.68)",
|
|
24
|
+
light: "rgba(165, 173, 183, 1)",
|
|
25
|
+
text: "#000",
|
|
26
|
+
placeholder: "#333",
|
|
27
|
+
disabled: "rgba(0, 0, 0, 0.25)",
|
|
28
|
+
},
|
|
29
|
+
fonts: configureFonts(),
|
|
30
|
+
typography: {
|
|
31
|
+
headline1: {
|
|
32
|
+
...systemWeights.regular,
|
|
33
|
+
fontSize: 60,
|
|
34
|
+
letterSpacing: 0,
|
|
35
|
+
lineHeight: 71,
|
|
36
|
+
},
|
|
37
|
+
headline2: {
|
|
38
|
+
...systemWeights.regular,
|
|
39
|
+
fontSize: 48,
|
|
40
|
+
letterSpacing: 0,
|
|
41
|
+
lineHeight: 58,
|
|
42
|
+
},
|
|
43
|
+
headline3: {
|
|
44
|
+
...systemWeights.regular,
|
|
45
|
+
fontSize: 34,
|
|
46
|
+
letterSpacing: 0,
|
|
47
|
+
lineHeight: 40,
|
|
48
|
+
},
|
|
49
|
+
headline4: {
|
|
50
|
+
...systemWeights.regular,
|
|
51
|
+
fontSize: 24,
|
|
52
|
+
letterSpacing: 0,
|
|
53
|
+
lineHeight: 34,
|
|
54
|
+
},
|
|
55
|
+
headline5: {
|
|
56
|
+
...systemWeights.regular,
|
|
57
|
+
fontSize: 20,
|
|
58
|
+
letterSpacing: 0,
|
|
59
|
+
lineHeight: 26,
|
|
60
|
+
},
|
|
61
|
+
subtitle1: {
|
|
62
|
+
...systemWeights.regular,
|
|
63
|
+
fontSize: 16,
|
|
64
|
+
letterSpacing: 0,
|
|
65
|
+
lineHeight: 26,
|
|
66
|
+
},
|
|
67
|
+
subtitle2: {
|
|
68
|
+
...systemWeights.regular,
|
|
69
|
+
fontSize: 14,
|
|
70
|
+
letterSpacing: 0,
|
|
71
|
+
lineHeight: 22,
|
|
72
|
+
},
|
|
73
|
+
body1: {
|
|
74
|
+
...systemWeights.regular,
|
|
75
|
+
fontSize: 16,
|
|
76
|
+
letterSpacing: 0,
|
|
77
|
+
lineHeight: 26,
|
|
78
|
+
},
|
|
79
|
+
body2: {
|
|
80
|
+
...systemWeights.regular,
|
|
81
|
+
fontSize: 14,
|
|
82
|
+
letterSpacing: 0,
|
|
83
|
+
lineHeight: 22,
|
|
84
|
+
},
|
|
85
|
+
button: {
|
|
86
|
+
...systemWeights.regular,
|
|
87
|
+
fontSize: 14,
|
|
88
|
+
letterSpacing: 0,
|
|
89
|
+
lineHeight: 16,
|
|
90
|
+
},
|
|
91
|
+
caption: {
|
|
92
|
+
...systemWeights.regular,
|
|
93
|
+
fontSize: 12,
|
|
94
|
+
letterSpacing: 0,
|
|
95
|
+
lineHeight: 16,
|
|
96
|
+
},
|
|
97
|
+
overline: {
|
|
98
|
+
...systemWeights.regular,
|
|
99
|
+
fontSize: 12,
|
|
100
|
+
letterSpacing: 2,
|
|
101
|
+
lineHeight: 16,
|
|
102
|
+
},
|
|
103
|
+
headline6: {
|
|
104
|
+
...systemWeights.regular,
|
|
105
|
+
fontSize: 16,
|
|
106
|
+
letterSpacing: 0,
|
|
107
|
+
lineHeight: 24,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
export default DefaultTheme;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* https://github.com/callstack/react-native-paper/blob/main/src/styles/fonts.tsx */
|
|
2
|
+
import { Platform } from "react-native";
|
|
3
|
+
const fontConfig = {
|
|
4
|
+
web: {
|
|
5
|
+
regular: {
|
|
6
|
+
fontFamily: 'Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif',
|
|
7
|
+
fontWeight: "400",
|
|
8
|
+
},
|
|
9
|
+
medium: {
|
|
10
|
+
fontFamily: 'Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif',
|
|
11
|
+
fontWeight: "500",
|
|
12
|
+
},
|
|
13
|
+
light: {
|
|
14
|
+
fontFamily: 'Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif',
|
|
15
|
+
fontWeight: "300",
|
|
16
|
+
},
|
|
17
|
+
thin: {
|
|
18
|
+
fontFamily: 'Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif',
|
|
19
|
+
fontWeight: "100",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
ios: {
|
|
23
|
+
regular: {
|
|
24
|
+
fontFamily: "System",
|
|
25
|
+
fontWeight: "400",
|
|
26
|
+
},
|
|
27
|
+
medium: {
|
|
28
|
+
fontFamily: "System",
|
|
29
|
+
fontWeight: "500",
|
|
30
|
+
},
|
|
31
|
+
light: {
|
|
32
|
+
fontFamily: "System",
|
|
33
|
+
fontWeight: "300",
|
|
34
|
+
},
|
|
35
|
+
thin: {
|
|
36
|
+
fontFamily: "System",
|
|
37
|
+
fontWeight: "100",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
default: {
|
|
41
|
+
regular: {
|
|
42
|
+
fontFamily: "sans-serif",
|
|
43
|
+
fontWeight: "normal",
|
|
44
|
+
},
|
|
45
|
+
medium: {
|
|
46
|
+
fontFamily: "sans-serif-medium",
|
|
47
|
+
fontWeight: "normal",
|
|
48
|
+
},
|
|
49
|
+
light: {
|
|
50
|
+
fontFamily: "sans-serif-light",
|
|
51
|
+
fontWeight: "normal",
|
|
52
|
+
},
|
|
53
|
+
thin: {
|
|
54
|
+
fontFamily: "sans-serif-thin",
|
|
55
|
+
fontWeight: "normal",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
export default function configureFonts(config) {
|
|
60
|
+
const fonts = Platform.select({ ...fontConfig, ...config });
|
|
61
|
+
return fonts;
|
|
62
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* Copied from https://github.com/callstack/react-native-paper/blob/main/src/styles/overlay.tsx */
|
|
2
|
+
import color from "color";
|
|
3
|
+
import { Animated } from "react-native";
|
|
4
|
+
import DarkTheme from "./DarkTheme";
|
|
5
|
+
const isAnimatedValue = (it) => it instanceof Animated.Value;
|
|
6
|
+
export default function overlay(elevation, surfaceColor = DarkTheme.colors.surface) {
|
|
7
|
+
if (isAnimatedValue(elevation)) {
|
|
8
|
+
const inputRange = [0, 1, 2, 3, 8, 24];
|
|
9
|
+
// @ts-expect-error: TS doesn't seem to refine the type correctly
|
|
10
|
+
return elevation.interpolate({
|
|
11
|
+
inputRange,
|
|
12
|
+
outputRange: inputRange.map((e) => {
|
|
13
|
+
return calculateColor(surfaceColor, e);
|
|
14
|
+
}),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// @ts-expect-error: TS doesn't seem to refine the type correctly
|
|
18
|
+
return calculateColor(surfaceColor, elevation);
|
|
19
|
+
}
|
|
20
|
+
function calculateColor(surfaceColor, elevation = 1) {
|
|
21
|
+
let overlayTransparency;
|
|
22
|
+
if (elevation >= 1 && elevation <= 24) {
|
|
23
|
+
overlayTransparency = elevationOverlayTransparency[elevation];
|
|
24
|
+
}
|
|
25
|
+
else if (elevation > 24) {
|
|
26
|
+
overlayTransparency = elevationOverlayTransparency[24];
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
overlayTransparency = elevationOverlayTransparency[1];
|
|
30
|
+
}
|
|
31
|
+
return color(surfaceColor)
|
|
32
|
+
.mix(color("white"), overlayTransparency * 0.01)
|
|
33
|
+
.hex();
|
|
34
|
+
}
|
|
35
|
+
const elevationOverlayTransparency = {
|
|
36
|
+
1: 5,
|
|
37
|
+
2: 7,
|
|
38
|
+
3: 8,
|
|
39
|
+
4: 9,
|
|
40
|
+
5: 10,
|
|
41
|
+
6: 11,
|
|
42
|
+
7: 11.5,
|
|
43
|
+
8: 12,
|
|
44
|
+
9: 12.5,
|
|
45
|
+
10: 13,
|
|
46
|
+
11: 13.5,
|
|
47
|
+
12: 14,
|
|
48
|
+
13: 14.25,
|
|
49
|
+
14: 14.5,
|
|
50
|
+
15: 14.75,
|
|
51
|
+
16: 15,
|
|
52
|
+
17: 15.12,
|
|
53
|
+
18: 15.24,
|
|
54
|
+
19: 15.36,
|
|
55
|
+
20: 15.48,
|
|
56
|
+
21: 15.6,
|
|
57
|
+
22: 15.72,
|
|
58
|
+
23: 15.84,
|
|
59
|
+
24: 16,
|
|
60
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Animated } from "react-native";
|
|
2
|
+
const SHADOW_COLOR = "#000";
|
|
3
|
+
const SHADOW_OPACITY = 0.24;
|
|
4
|
+
export default function shadow(elevation = 0) {
|
|
5
|
+
if (elevation instanceof Animated.Value) {
|
|
6
|
+
const inputRange = [0, 1, 2, 3, 8, 24];
|
|
7
|
+
return {
|
|
8
|
+
shadowColor: SHADOW_COLOR,
|
|
9
|
+
shadowOffset: {
|
|
10
|
+
width: new Animated.Value(0),
|
|
11
|
+
height: elevation.interpolate({
|
|
12
|
+
inputRange,
|
|
13
|
+
outputRange: [0, 0.5, 0.75, 2, 7, 23],
|
|
14
|
+
}),
|
|
15
|
+
},
|
|
16
|
+
shadowOpacity: new Animated.Value(SHADOW_OPACITY),
|
|
17
|
+
shadowRadius: elevation.interpolate({
|
|
18
|
+
inputRange,
|
|
19
|
+
outputRange: [0, 0.75, 1.5, 3, 8, 24],
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (elevation === 0) {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
let height, radius;
|
|
28
|
+
switch (elevation) {
|
|
29
|
+
case 1:
|
|
30
|
+
height = 0.5;
|
|
31
|
+
radius = 0.75;
|
|
32
|
+
break;
|
|
33
|
+
case 2:
|
|
34
|
+
height = 0.75;
|
|
35
|
+
radius = 1.5;
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
height = elevation - 1;
|
|
39
|
+
radius = elevation;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
shadowColor: SHADOW_COLOR,
|
|
43
|
+
shadowOffset: {
|
|
44
|
+
width: 0,
|
|
45
|
+
height,
|
|
46
|
+
},
|
|
47
|
+
shadowOpacity: SHADOW_OPACITY,
|
|
48
|
+
shadowRadius: radius,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
package/src/theming.js
ADDED
package/src/utilities.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { StyleSheet } from "react-native";
|
|
2
|
+
export function extractStyles(style) {
|
|
3
|
+
const { color, fontFamily, fontWeight, fontSize, lineHeight, letterSpacing, textTransform, textAlign, textDecorationLine, textDecorationColor, textDecorationStyle, ...viewStyles } = StyleSheet.flatten(style || {});
|
|
4
|
+
const textStyles = {
|
|
5
|
+
color,
|
|
6
|
+
fontFamily,
|
|
7
|
+
fontWeight,
|
|
8
|
+
fontSize,
|
|
9
|
+
lineHeight,
|
|
10
|
+
letterSpacing,
|
|
11
|
+
textTransform,
|
|
12
|
+
textAlign,
|
|
13
|
+
textDecorationLine,
|
|
14
|
+
textDecorationColor,
|
|
15
|
+
textDecorationStyle,
|
|
16
|
+
};
|
|
17
|
+
return { viewStyles, textStyles };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Merges a style object on top of another style object. In React Native,
|
|
21
|
+
* keys with undefined values in a style object will still override styles
|
|
22
|
+
* that appear earlier in a sequence. This avoids that problem.
|
|
23
|
+
*
|
|
24
|
+
* This lets us avoid the `...(something ? { something } : {})` pattern.
|
|
25
|
+
* There doesn't seem to be a better way to do this. These all seem to not
|
|
26
|
+
* work (i.e. they all result in `{ color: undefined }`:
|
|
27
|
+
* `const mergedStyles = [{ color: "red" }, { color: undefined }]`
|
|
28
|
+
* `const mergedStyles = StyleSheet.compose({ color: "red" }, { color: undefined })`
|
|
29
|
+
* `const mergedStyles = StyleSheet.flatten([{ color: "red" }, { color: undefined }])`
|
|
30
|
+
*/
|
|
31
|
+
export function applyStyles(baseStyles, stylesToApply) {
|
|
32
|
+
if (!stylesToApply) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const flattenedStyles = StyleSheet.flatten(baseStyles);
|
|
36
|
+
for (const [key, value] of Object.entries(stylesToApply)) {
|
|
37
|
+
if (value != null) {
|
|
38
|
+
flattenedStyles[key] = value;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return flattenedStyles;
|
|
42
|
+
}
|