@draftbit/core 43.4.10 → 43.4.11-ca8fc3.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/lib/commonjs/components/Accordion/AccordionItem.js +21 -5
- package/lib/commonjs/components/Accordion/AccordionItem.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/FAB.js +19 -5
- package/lib/commonjs/components/FAB.js.map +1 -1
- package/lib/commonjs/components/Justification.js +3 -0
- package/lib/commonjs/components/ResizeMode.js +3 -0
- package/lib/commonjs/mappings/Icon.js +3 -1
- package/lib/commonjs/mappings/Icon.js.map +1 -1
- package/lib/commonjs/mappings/KeyboardAwareScrollView.js +48 -0
- package/lib/commonjs/mappings/KeyboardAwareScrollView.js.map +1 -0
- package/lib/commonjs/mappings/RowBodyIcon.js.map +1 -1
- package/lib/commonjs/mappings/RowHeadlineImageCaption.js.map +1 -1
- package/lib/module/components/Justification.js +1 -1
- package/lib/module/components/Picker/PickerTypes.js.map +1 -1
- package/lib/module/components/ResizeMode.js +1 -1
- package/lib/module/components/Typography.js.map +1 -1
- package/lib/module/mappings/Icon.js +3 -1
- package/lib/module/mappings/Icon.js.map +1 -1
- package/lib/module/mappings/KeyboardAwareScrollView.js +39 -0
- package/lib/module/mappings/KeyboardAwareScrollView.js.map +1 -0
- package/lib/typescript/src/mappings/Icon.d.ts +1 -1
- package/lib/typescript/src/mappings/KeyboardAwareScrollView.d.ts +82 -0
- package/package.json +2 -2
- package/src/Provider.js +9 -0
- package/src/components/Accordion/AccordionGroup.js +44 -0
- package/src/components/Accordion/AccordionItem.js +32 -0
- package/src/components/Accordion/index.js +2 -0
- package/src/components/ActionSheet/ActionSheet.js +45 -0
- package/src/components/ActionSheet/ActionSheetCancel.js +6 -0
- package/src/components/ActionSheet/ActionSheetItem.js +30 -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 +30 -0
- package/src/components/Button.js +112 -0
- package/src/components/Card.js +57 -0
- package/src/components/CardBlock.js +54 -0
- package/src/components/CardContainer.js +69 -0
- package/src/components/CardContainerRating.js +79 -0
- package/src/components/CardContainerShortImage.js +33 -0
- package/src/components/CardInline.js +36 -0
- package/src/components/Carousel.js +66 -0
- package/src/components/Checkbox/Checkbox.js +63 -0
- package/src/components/Checkbox/CheckboxGroup.js +21 -0
- package/src/components/Checkbox/CheckboxRow.js +77 -0
- package/src/components/Checkbox/context.js +14 -0
- package/src/components/Checkbox/index.js +3 -0
- package/src/components/CircleImage.js +8 -0
- package/src/components/CircularProgress.js +78 -0
- package/src/components/Config.js +63 -0
- package/src/components/Container.js +44 -0
- package/src/components/DatePicker/DatePicker.js +370 -0
- 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 +95 -0
- package/src/components/DeprecatedCardWrapper.js +18 -0
- package/src/components/DeprecatedFAB.js +115 -0
- package/src/components/Divider.js +13 -0
- package/src/components/Elevation.js +20 -0
- package/src/components/FAB.js +46 -0
- package/src/components/FieldSearchBarFull.js +53 -0
- package/src/components/FormRow.js +19 -0
- package/src/components/Header.js +44 -0
- package/src/components/HeaderLarge.js +7 -0
- package/src/components/HeaderMedium.js +7 -0
- package/src/components/HeaderOverline.js +7 -0
- package/src/components/IconButton.js +35 -0
- package/src/components/Image.js +47 -0
- package/src/components/Justification.js +1 -0
- package/src/components/Layout.js +50 -0
- package/src/components/NumberInput.js +50 -0
- package/src/components/Picker/Picker.js +56 -0
- package/src/components/Picker/PickerComponent.android.js +68 -0
- package/src/components/Picker/PickerComponent.ios.js +78 -0
- package/src/components/Picker/PickerComponent.web.js +69 -0
- 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 +118 -0
- package/src/components/ProgressCircle.js +13 -0
- package/src/components/ProgressIndicator.js +27 -0
- package/src/components/RadioButton/RadioButton.js +17 -0
- package/src/components/RadioButton/RadioButtonFieldGroup.js +17 -0
- package/src/components/RadioButton/RadioButtonGroup.js +39 -0
- package/src/components/RadioButton/RadioButtonRow.js +76 -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 +8 -0
- package/src/components/RowHeadlineImageCaption.js +12 -0
- package/src/components/RowHeadlineImageIcon.js +14 -0
- package/src/components/ScreenContainer.js +35 -0
- package/src/components/Slider.js +63 -0
- package/src/components/StarRating.js +50 -0
- package/src/components/StepIndicator.js +346 -0
- package/src/components/Stepper.js +53 -0
- package/src/components/Surface.js +23 -0
- package/src/components/Swiper/Swiper.js +18 -0
- package/src/components/Swiper/SwiperItem.js +9 -0
- package/src/components/Swiper/index.js +2 -0
- package/src/components/Switch.js +56 -0
- package/src/components/Text.js +28 -0
- package/src/components/TextField.js +419 -0
- package/src/components/ToggleButton.js +39 -0
- package/src/components/Touchable.js +12 -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 +50 -0
- package/src/interfaces/Icon.js +8 -0
- package/src/mappings/Accordion.js +37 -0
- package/src/mappings/AccordionItem.js +16 -0
- package/src/mappings/ActionSheet.js +13 -0
- package/src/mappings/ActionSheetCancel.js +19 -0
- package/src/mappings/ActionSheetItem.js +22 -0
- package/src/mappings/ActivityIndicator.js +53 -0
- package/src/mappings/AudioPlayer.js +20 -0
- package/src/mappings/AvatarEdit.js +37 -0
- package/src/mappings/BlurView.js +41 -0
- package/src/mappings/Button.js +56 -0
- package/src/mappings/Card.js +52 -0
- package/src/mappings/CardBlock.js +122 -0
- package/src/mappings/CardContainer.js +102 -0
- package/src/mappings/CardContainerRating.js +124 -0
- package/src/mappings/CardContainerShortImage.js +118 -0
- package/src/mappings/CardInline.js +51 -0
- package/src/mappings/Carousel.js +18 -0
- package/src/mappings/Checkbox.js +45 -0
- package/src/mappings/CheckboxGroup.js +25 -0
- package/src/mappings/CheckboxRow.js +37 -0
- package/src/mappings/CircleImage.js +24 -0
- package/src/mappings/Container.js +29 -0
- package/src/mappings/CustomCode.js +8 -0
- package/src/mappings/DatePicker.js +146 -0
- package/src/mappings/Divider.js +26 -0
- package/src/mappings/FAB.js +36 -0
- package/src/mappings/Fetch.js +12 -0
- package/src/mappings/FieldSearchBarFull.js +49 -0
- package/src/mappings/FlatList.js +19 -0
- package/src/mappings/HeaderLarge.js +28 -0
- package/src/mappings/HeaderMedium.js +54 -0
- package/src/mappings/HeaderOverline.js +54 -0
- package/src/mappings/Icon.js +25 -0
- package/src/mappings/Icon.ts +4 -1
- package/src/mappings/IconButton.js +30 -0
- package/src/mappings/Image.js +15 -0
- package/src/mappings/ImageBackground.js +28 -0
- package/src/mappings/KeyboardAvoidingView.js +40 -0
- package/src/mappings/KeyboardAwareScrollView.js +38 -0
- package/src/mappings/KeyboardAwareScrollView.ts +48 -0
- package/src/mappings/Layout.js +195 -0
- package/src/mappings/LinearGradient.js +77 -0
- package/src/mappings/MapCallout.js +19 -0
- package/src/mappings/MapMarker.js +46 -0
- package/src/mappings/Modal.js +41 -0
- package/src/mappings/Picker.js +137 -0
- package/src/mappings/ProgressBar.js +100 -0
- package/src/mappings/ProgressCircle.js +108 -0
- package/src/mappings/ProgressIndicator.js +180 -0
- package/src/mappings/RadioButton.js +50 -0
- package/src/mappings/RadioButtonGroup.js +16 -0
- package/src/mappings/RadioButtonRow.js +37 -0
- package/src/mappings/RowBodyIcon.js +75 -0
- package/src/mappings/RowHeadlineImageCaption.js +167 -0
- package/src/mappings/RowHeadlineImageIcon.js +99 -0
- package/src/mappings/SafeAreaView.js +33 -0
- package/src/mappings/ScrollView.js +30 -0
- package/src/mappings/Slider.js +59 -0
- package/src/mappings/StarRating.js +46 -0
- package/src/mappings/Stepper.js +28 -0
- package/src/mappings/Surface.js +13 -0
- package/src/mappings/Swiper.js +60 -0
- package/src/mappings/SwiperItem.js +8 -0
- package/src/mappings/Switch.js +75 -0
- package/src/mappings/Text.js +227 -0
- package/src/mappings/TextArea.js +52 -0
- package/src/mappings/TextField.js +158 -0
- package/src/mappings/TextInput.js +208 -0
- package/src/mappings/ToggleButton.js +50 -0
- package/src/mappings/Touchable.js +12 -0
- package/src/mappings/Video.js +74 -0
- package/src/mappings/View.js +206 -0
- package/src/mappings/WebView.js +13 -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 +54 -0
|
@@ -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,54 @@
|
|
|
1
|
+
import { StyleSheet } from "react-native";
|
|
2
|
+
import { isString, isNumber } from "lodash";
|
|
3
|
+
export function extractStyles(style) {
|
|
4
|
+
const { color, fontFamily, fontWeight, fontSize, lineHeight, letterSpacing, textTransform, textAlign, textDecorationLine, textDecorationColor, textDecorationStyle, ...viewStyles } = StyleSheet.flatten(style || {});
|
|
5
|
+
const textStyles = {
|
|
6
|
+
color,
|
|
7
|
+
fontFamily,
|
|
8
|
+
fontWeight,
|
|
9
|
+
fontSize,
|
|
10
|
+
lineHeight,
|
|
11
|
+
letterSpacing,
|
|
12
|
+
textTransform,
|
|
13
|
+
textAlign,
|
|
14
|
+
textDecorationLine,
|
|
15
|
+
textDecorationColor,
|
|
16
|
+
textDecorationStyle,
|
|
17
|
+
};
|
|
18
|
+
return { viewStyles, textStyles };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Merges a style object on top of another style object. In React Native,
|
|
22
|
+
* keys with undefined values in a style object will still override styles
|
|
23
|
+
* that appear earlier in a sequence. This avoids that problem.
|
|
24
|
+
*
|
|
25
|
+
* This lets us avoid the `...(something ? { something } : {})` pattern.
|
|
26
|
+
* There doesn't seem to be a better way to do this. These all seem to not
|
|
27
|
+
* work (i.e. they all result in `{ color: undefined }`:
|
|
28
|
+
* `const mergedStyles = [{ color: "red" }, { color: undefined }]`
|
|
29
|
+
* `const mergedStyles = StyleSheet.compose({ color: "red" }, { color: undefined })`
|
|
30
|
+
* `const mergedStyles = StyleSheet.flatten([{ color: "red" }, { color: undefined }])`
|
|
31
|
+
*/
|
|
32
|
+
export function applyStyles(baseStyles, stylesToApply) {
|
|
33
|
+
if (!stylesToApply) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const flattenedStyles = StyleSheet.flatten(baseStyles);
|
|
37
|
+
for (const [key, value] of Object.entries(stylesToApply)) {
|
|
38
|
+
if (value != null) {
|
|
39
|
+
flattenedStyles[key] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return flattenedStyles;
|
|
43
|
+
}
|
|
44
|
+
export function getValueForRadioButton(value) {
|
|
45
|
+
if (isString(value)) {
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
else if (isNumber(value)) {
|
|
49
|
+
return String(value);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error(`Invalid value: ${value}`);
|
|
53
|
+
}
|
|
54
|
+
}
|