@draftbit/core 46.5.2-b58416.2 → 46.6.2
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 +23 -4
- package/lib/commonjs/components/AvatarEdit.js +15 -4
- package/lib/commonjs/components/Banner.js +23 -4
- package/lib/commonjs/components/Button.js +36 -13
- package/lib/commonjs/components/Carousel.js +30 -8
- package/lib/commonjs/components/Checkbox/Checkbox.js +1 -3
- package/lib/commonjs/components/Checkbox/CheckboxGroupRow.js +23 -6
- package/lib/commonjs/components/Checkbox/CheckboxRow.js +1 -2
- package/lib/commonjs/components/Container.js +15 -4
- package/lib/commonjs/components/DatePicker/DatePicker.js +26 -13
- package/lib/commonjs/components/DeprecatedButton.js +3 -27
- package/lib/commonjs/components/DeprecatedCardWrapper.js +15 -1
- package/lib/commonjs/components/DeprecatedFAB.js +1 -2
- package/lib/commonjs/components/Divider.js +14 -1
- package/lib/commonjs/components/FAB.js +18 -4
- package/lib/commonjs/components/IconButton.js +19 -4
- package/lib/commonjs/components/Picker/PickerComponent.ios.js +36 -11
- package/lib/commonjs/components/Portal/Portal.js +27 -3
- package/lib/commonjs/components/Portal/PortalConsumer.js +22 -7
- package/lib/commonjs/components/Portal/PortalManager.js +34 -8
- package/lib/commonjs/components/Pressable.js +37 -0
- package/lib/commonjs/components/RadioButton/RadioButtonFieldGroup.js +9 -1
- package/lib/commonjs/components/RadioButton/context.js +1 -1
- package/lib/commonjs/components/ScreenContainer.js +20 -4
- package/lib/commonjs/components/StarRating.js +23 -4
- package/lib/commonjs/components/Surface.js +14 -2
- package/lib/commonjs/components/Swiper/Swiper.js +2 -0
- package/lib/commonjs/components/TextField.js +76 -28
- package/lib/commonjs/components/ToggleButton.js +15 -2
- package/lib/commonjs/components/Touchable.js +8 -3
- package/lib/commonjs/constants.js +1 -1
- package/lib/commonjs/hooks.js +1 -2
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/mappings/Button.js +39 -10
- package/lib/commonjs/mappings/FlashList.js +45 -2
- package/lib/commonjs/mappings/FlatList.js +12 -0
- package/lib/commonjs/mappings/StarRating.js +6 -2
- package/lib/commonjs/mappings/Swiper.js +2 -0
- package/lib/commonjs/mappings/Touchable.js +47 -7
- package/lib/commonjs/styles/overlay.js +1 -3
- package/lib/commonjs/utilities.js +1 -2
- package/lib/module/components/AnimatedCircularProgress.js +13 -1
- package/lib/module/components/AspectRatio.js +18 -1
- package/lib/module/components/AvatarEdit.js +15 -4
- package/lib/module/components/Banner.js +25 -4
- package/lib/module/components/Button.js +36 -13
- package/lib/module/components/CardBlock.js +14 -4
- package/lib/module/components/CardContainerRating.js +14 -4
- package/lib/module/components/CardContainerShortImage.js +18 -4
- package/lib/module/components/Checkbox/Checkbox.js +2 -3
- package/lib/module/components/Checkbox/CheckboxGroup.js +16 -2
- package/lib/module/components/Checkbox/CheckboxGroupRow.js +2 -3
- package/lib/module/components/Checkbox/CheckboxRow.js +2 -3
- package/lib/module/components/Container.js +17 -4
- package/lib/module/components/DeprecatedButton.js +4 -28
- package/lib/module/components/DeprecatedFAB.js +24 -5
- package/lib/module/components/Elevation.js +14 -2
- package/lib/module/components/FormRow.js +17 -2
- package/lib/module/components/Layout.js +42 -21
- package/lib/module/components/NumberInput.js +12 -3
- package/lib/module/components/Portal/Portal.js +28 -3
- package/lib/module/components/Portal/PortalConsumer.js +22 -7
- package/lib/module/components/Portal/PortalHost.js +45 -15
- package/lib/module/components/Portal/PortalManager.js +33 -7
- package/lib/module/components/Pressable.js +30 -0
- package/lib/module/components/ProgressBar.js +39 -7
- package/lib/module/components/RadioButton/RadioButton.js +13 -1
- package/lib/module/components/RadioButton/RadioButtonGroup.js +16 -2
- package/lib/module/components/RadioButton/RadioButtonRow.js +24 -5
- package/lib/module/components/RadioButton/context.js +1 -1
- package/lib/module/components/Slider.js +21 -4
- package/lib/module/components/StepIndicator.js +58 -18
- package/lib/module/components/Surface.js +15 -1
- package/lib/module/components/Swiper/Swiper.js +2 -0
- package/lib/module/components/Switch.js +21 -10
- package/lib/module/components/TextField.js +78 -28
- package/lib/module/components/Touchable.js +8 -3
- package/lib/module/constants.js +1 -2
- package/lib/module/index.js +1 -0
- package/lib/module/mappings/Button.js +40 -11
- package/lib/module/mappings/FieldSearchBarFull.js +4 -1
- package/lib/module/mappings/FlashList.js +46 -3
- package/lib/module/mappings/FlatList.js +13 -1
- package/lib/module/mappings/Swiper.js +3 -1
- package/lib/module/mappings/Touchable.js +49 -9
- package/lib/typescript/src/components/Button.d.ts.map +1 -1
- package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +2 -2
- package/lib/typescript/src/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/lib/typescript/src/components/Checkbox/CheckboxGroupRow.d.ts.map +1 -1
- package/lib/typescript/src/components/Checkbox/CheckboxRow.d.ts.map +1 -1
- package/lib/typescript/src/components/DeprecatedButton.d.ts +2 -2
- package/lib/typescript/src/components/DeprecatedButton.d.ts.map +1 -1
- package/lib/typescript/src/components/DeprecatedFAB.d.ts +2 -2
- package/lib/typescript/src/components/DeprecatedFAB.d.ts.map +1 -1
- package/lib/typescript/src/components/Pressable.d.ts +10 -0
- package/lib/typescript/src/components/Pressable.d.ts.map +1 -0
- package/lib/typescript/src/components/Swiper/Swiper.d.ts +2 -1
- package/lib/typescript/src/components/Swiper/Swiper.d.ts.map +1 -1
- package/lib/typescript/src/components/Touchable.d.ts +5 -6
- package/lib/typescript/src/components/Touchable.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/mappings/Button.d.ts +113 -4
- package/lib/typescript/src/mappings/Button.d.ts.map +1 -1
- package/lib/typescript/src/mappings/FlashList.d.ts +112 -2
- package/lib/typescript/src/mappings/FlashList.d.ts.map +1 -1
- package/lib/typescript/src/mappings/FlatList.d.ts +42 -0
- package/lib/typescript/src/mappings/FlatList.d.ts.map +1 -1
- package/lib/typescript/src/mappings/Swiper.d.ts +11 -0
- package/lib/typescript/src/mappings/Swiper.d.ts.map +1 -1
- package/lib/typescript/src/mappings/Touchable.d.ts +59 -5
- package/lib/typescript/src/mappings/Touchable.d.ts.map +1 -1
- package/lib/typescript/src/styles/overlay.d.ts +1 -1
- package/lib/typescript/src/styles/overlay.d.ts.map +1 -1
- package/lib/typescript/src/styles/shadow.d.ts +2 -2
- package/package.json +6 -6
- package/src/components/Button.tsx +14 -4
- package/src/components/Checkbox/Checkbox.tsx +5 -7
- package/src/components/Checkbox/CheckboxGroupRow.tsx +3 -3
- package/src/components/Checkbox/CheckboxRow.tsx +3 -3
- package/src/components/DeprecatedButton.tsx +7 -31
- package/src/components/DeprecatedFAB.tsx +5 -5
- package/src/components/Pressable.tsx +44 -0
- package/src/components/Swiper/Swiper.tsx +3 -0
- package/src/components/Touchable.tsx +11 -7
- package/src/index.tsx +1 -0
- package/src/mappings/Button.ts +41 -10
- package/src/mappings/FlashList.ts +82 -30
- package/src/mappings/FlatList.ts +16 -0
- package/src/mappings/Swiper.ts +4 -0
- package/src/mappings/Touchable.ts +53 -6
- package/src/styles/overlay.tsx +2 -2
- package/src/Provider.js +0 -9
- package/src/components/Accordion/AccordionGroup.js +0 -44
- package/src/components/Accordion/AccordionItem.js +0 -32
- package/src/components/Accordion/index.js +0 -2
- package/src/components/ActionSheet/ActionSheet.js +0 -45
- package/src/components/ActionSheet/ActionSheetCancel.js +0 -6
- package/src/components/ActionSheet/ActionSheetItem.js +0 -30
- package/src/components/ActionSheet/index.js +0 -3
- package/src/components/AnimatedCircularProgress.js +0 -43
- package/src/components/AspectRatio.js +0 -18
- package/src/components/AvatarEdit.js +0 -30
- package/src/components/Banner.js +0 -109
- package/src/components/Button.js +0 -114
- package/src/components/Card.js +0 -57
- package/src/components/CardBlock.js +0 -54
- package/src/components/CardContainer.js +0 -69
- package/src/components/CardContainerRating.js +0 -79
- package/src/components/CardContainerShortImage.js +0 -33
- package/src/components/CardInline.js +0 -36
- package/src/components/Carousel.js +0 -68
- package/src/components/Checkbox/Checkbox.js +0 -63
- package/src/components/Checkbox/CheckboxGroup.js +0 -21
- package/src/components/Checkbox/CheckboxGroupRow.js +0 -77
- package/src/components/Checkbox/CheckboxRow.js +0 -78
- package/src/components/Checkbox/context.js +0 -14
- package/src/components/Checkbox/index.js +0 -3
- package/src/components/CircleImage.js +0 -8
- package/src/components/CircularProgress.js +0 -81
- package/src/components/Config.js +0 -64
- package/src/components/Container.js +0 -43
- package/src/components/DatePicker/DatePicker.js +0 -377
- package/src/components/DatePicker/DatePickerComponent.js +0 -13
- package/src/components/DatePicker/DatePickerComponent.web.js +0 -30
- package/src/components/DatePicker/DatePickerComponentType.js +0 -1
- package/src/components/DeprecatedButton.js +0 -95
- package/src/components/DeprecatedCardWrapper.js +0 -18
- package/src/components/DeprecatedFAB.js +0 -115
- package/src/components/Divider.js +0 -13
- package/src/components/Elevation.js +0 -20
- package/src/components/FAB.js +0 -46
- package/src/components/FieldSearchBarFull.js +0 -53
- package/src/components/FormRow.js +0 -19
- package/src/components/Header.js +0 -44
- package/src/components/HeaderLarge.js +0 -7
- package/src/components/HeaderMedium.js +0 -7
- package/src/components/HeaderOverline.js +0 -7
- package/src/components/IconButton.js +0 -35
- package/src/components/Image.js +0 -47
- package/src/components/Justification.js +0 -1
- package/src/components/Layout.js +0 -50
- package/src/components/NumberInput.js +0 -49
- package/src/components/Picker/Picker.js +0 -267
- package/src/components/Picker/PickerComponent.android.js +0 -69
- package/src/components/Picker/PickerComponent.ios.js +0 -79
- package/src/components/Picker/PickerComponent.web.js +0 -70
- package/src/components/Picker/PickerTypes.js +0 -1
- package/src/components/Portal/Portal.js +0 -35
- package/src/components/Portal/PortalConsumer.js +0 -27
- package/src/components/Portal/PortalHost.js +0 -107
- package/src/components/Portal/PortalManager.js +0 -32
- package/src/components/ProgressBar.js +0 -118
- package/src/components/ProgressCircle.js +0 -13
- package/src/components/ProgressIndicator.js +0 -27
- package/src/components/RadioButton/RadioButton.js +0 -17
- package/src/components/RadioButton/RadioButtonFieldGroup.js +0 -17
- package/src/components/RadioButton/RadioButtonGroup.js +0 -43
- package/src/components/RadioButton/RadioButtonRow.js +0 -76
- package/src/components/RadioButton/context.js +0 -14
- package/src/components/RadioButton/index.js +0 -4
- package/src/components/ResizeMode.js +0 -1
- package/src/components/Row.js +0 -48
- package/src/components/RowBodyIcon.js +0 -8
- package/src/components/RowHeadlineImageCaption.js +0 -12
- package/src/components/RowHeadlineImageIcon.js +0 -14
- package/src/components/SVG.js +0 -13
- package/src/components/ScreenContainer.js +0 -34
- package/src/components/Slider.js +0 -63
- package/src/components/StarRating.js +0 -50
- package/src/components/StepIndicator.js +0 -346
- package/src/components/Stepper.js +0 -41
- package/src/components/Surface.js +0 -32
- package/src/components/Swiper/Swiper.js +0 -29
- package/src/components/Swiper/SwiperItem.js +0 -9
- package/src/components/Swiper/index.js +0 -2
- package/src/components/Switch.js +0 -56
- package/src/components/Text.js +0 -33
- package/src/components/TextField.js +0 -428
- package/src/components/ToggleButton.js +0 -39
- package/src/components/Touchable.js +0 -12
- package/src/components/Touchable.web.js +0 -2
- package/src/components/Typography.js +0 -36
- package/src/components/useAuthState.js +0 -31
- package/src/constants.js +0 -10
- package/src/hooks.js +0 -12
- package/src/index.js +0 -52
- package/src/interfaces/Icon.js +0 -8
- package/src/mappings/Accordion.js +0 -41
- package/src/mappings/AccordionItem.js +0 -16
- package/src/mappings/ActionSheet.js +0 -13
- package/src/mappings/ActionSheetCancel.js +0 -19
- package/src/mappings/ActionSheetItem.js +0 -23
- package/src/mappings/ActivityIndicator.js +0 -58
- package/src/mappings/AudioPlayer.js +0 -57
- package/src/mappings/AvatarEdit.js +0 -38
- package/src/mappings/Banner.js +0 -32
- package/src/mappings/BlurView.js +0 -42
- package/src/mappings/Button.js +0 -87
- package/src/mappings/Card.js +0 -52
- package/src/mappings/CardBlock.js +0 -123
- package/src/mappings/CardContainer.js +0 -104
- package/src/mappings/CardContainerRating.js +0 -126
- package/src/mappings/CardContainerShortImage.js +0 -120
- package/src/mappings/CardInline.js +0 -52
- package/src/mappings/Carousel.js +0 -19
- package/src/mappings/Checkbox.js +0 -46
- package/src/mappings/CheckboxGroup.js +0 -26
- package/src/mappings/CheckboxRow.js +0 -61
- package/src/mappings/CircleImage.js +0 -25
- package/src/mappings/Container.js +0 -30
- package/src/mappings/CustomCode.js +0 -8
- package/src/mappings/DatePicker.js +0 -176
- package/src/mappings/Divider.js +0 -27
- package/src/mappings/FAB.js +0 -37
- package/src/mappings/Fetch.js +0 -13
- package/src/mappings/FieldSearchBarFull.js +0 -50
- package/src/mappings/FlashList.js +0 -33
- package/src/mappings/FlatList.js +0 -24
- package/src/mappings/HeaderLarge.js +0 -29
- package/src/mappings/HeaderMedium.js +0 -55
- package/src/mappings/HeaderOverline.js +0 -55
- package/src/mappings/Icon.js +0 -32
- package/src/mappings/IconButton.js +0 -35
- package/src/mappings/Image.js +0 -35
- package/src/mappings/ImageBackground.js +0 -29
- package/src/mappings/KeyboardAvoidingView.js +0 -41
- package/src/mappings/KeyboardAwareScrollView.js +0 -50
- package/src/mappings/Layout.js +0 -200
- package/src/mappings/LinearGradient.js +0 -77
- package/src/mappings/MapCallout.js +0 -21
- package/src/mappings/MapMarker.js +0 -47
- package/src/mappings/MapView.js +0 -139
- package/src/mappings/Modal.js +0 -42
- package/src/mappings/NumberInput.js +0 -254
- package/src/mappings/Picker.js +0 -148
- package/src/mappings/ProgressBar.js +0 -101
- package/src/mappings/ProgressCircle.js +0 -109
- package/src/mappings/ProgressIndicator.js +0 -181
- package/src/mappings/RadioButton.js +0 -51
- package/src/mappings/RadioButtonGroup.js +0 -17
- package/src/mappings/RadioButtonRow.js +0 -42
- package/src/mappings/RowBodyIcon.js +0 -75
- package/src/mappings/RowHeadlineImageCaption.js +0 -167
- package/src/mappings/RowHeadlineImageIcon.js +0 -99
- package/src/mappings/SVG.js +0 -20
- package/src/mappings/SafeAreaView.js +0 -33
- package/src/mappings/ScrollView.js +0 -31
- package/src/mappings/Slider.js +0 -60
- package/src/mappings/StarRating.js +0 -43
- package/src/mappings/Stepper.js +0 -32
- package/src/mappings/Surface.js +0 -14
- package/src/mappings/Swiper.js +0 -60
- package/src/mappings/SwiperItem.js +0 -8
- package/src/mappings/Switch.js +0 -81
- package/src/mappings/Text.js +0 -251
- package/src/mappings/TextArea.js +0 -274
- package/src/mappings/TextField.js +0 -391
- package/src/mappings/TextInput.js +0 -402
- package/src/mappings/ToggleButton.js +0 -50
- package/src/mappings/Touchable.js +0 -17
- package/src/mappings/Video.js +0 -81
- package/src/mappings/View.js +0 -207
- package/src/mappings/WebView.js +0 -88
- package/src/styles/DarkTheme.js +0 -26
- package/src/styles/DefaultTheme.js +0 -111
- package/src/styles/fonts.js +0 -62
- package/src/styles/overlay.js +0 -60
- package/src/styles/shadow.js +0 -51
- package/src/theming.js +0 -3
- package/src/utilities.js +0 -102
|
@@ -5,37 +5,89 @@ import {
|
|
|
5
5
|
createNumberProp,
|
|
6
6
|
CONTAINER_COMPONENT_STYLES_SECTIONS,
|
|
7
7
|
GROUPS,
|
|
8
|
+
Triggers,
|
|
9
|
+
createActionProp,
|
|
10
|
+
createStaticNumberProp,
|
|
8
11
|
} from "@draftbit/types";
|
|
9
12
|
|
|
10
|
-
export const SEED_DATA =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
export const SEED_DATA = [
|
|
14
|
+
{
|
|
15
|
+
name: "Masonry List",
|
|
16
|
+
tag: "MasonryFlashList",
|
|
17
|
+
description: "Masonry Flashlist by Shopify",
|
|
18
|
+
packageName: "@shopify/flash-list",
|
|
19
|
+
category: COMPONENT_TYPES.data,
|
|
20
|
+
stylesPanelSections: CONTAINER_COMPONENT_STYLES_SECTIONS,
|
|
21
|
+
layout: {
|
|
22
|
+
flex: 1,
|
|
23
|
+
},
|
|
24
|
+
triggers: [Triggers.OnRefresh, Triggers.OnEndReached],
|
|
25
|
+
props: {
|
|
26
|
+
onRefresh: createActionProp(),
|
|
27
|
+
onEndReached: createActionProp(),
|
|
28
|
+
numColumns: createNumColumnsType({
|
|
29
|
+
editable: true,
|
|
30
|
+
}),
|
|
31
|
+
estimatedItemSize: createNumberProp({
|
|
32
|
+
group: GROUPS.basic,
|
|
33
|
+
label: "Est. Item Size",
|
|
34
|
+
description: "Approximate size of the items before rendering.",
|
|
35
|
+
defaultValue: 50,
|
|
36
|
+
step: 1,
|
|
37
|
+
precision: 0,
|
|
38
|
+
}),
|
|
39
|
+
optimizeItemArrangement: createStaticBoolProp({
|
|
40
|
+
label: "Optimize Item Arrangement",
|
|
41
|
+
description:
|
|
42
|
+
"If enabled, MasonryFlashList will try to reduce difference in column height by modifying item order. If true, specifying overrideItemLayout is required. Default value is false.",
|
|
43
|
+
}),
|
|
44
|
+
onEndReachedThreshold: createStaticNumberProp({
|
|
45
|
+
label: "End Reached Threshold",
|
|
46
|
+
description:
|
|
47
|
+
"How far from the end (in units of visible length of the list) the bottom edge of the list must be from the end of the content to trigger the onEndReached callback. Thus a value of 0.5 will trigger onEndReached when the end of the content is within half the visible length of the list.",
|
|
48
|
+
defaultValue: 0.5,
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
19
51
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
52
|
+
{
|
|
53
|
+
name: "FlashList",
|
|
54
|
+
tag: "FlashList",
|
|
55
|
+
description: "Flashlist by Shopify",
|
|
56
|
+
packageName: "@shopify/flash-list",
|
|
57
|
+
category: COMPONENT_TYPES.data,
|
|
58
|
+
stylesPanelSections: CONTAINER_COMPONENT_STYLES_SECTIONS,
|
|
59
|
+
layout: {
|
|
60
|
+
flex: 1,
|
|
61
|
+
},
|
|
62
|
+
triggers: [Triggers.OnRefresh, Triggers.OnEndReached],
|
|
63
|
+
props: {
|
|
64
|
+
onRefresh: createActionProp(),
|
|
65
|
+
onEndReached: createActionProp(),
|
|
66
|
+
estimatedItemSize: createNumberProp({
|
|
67
|
+
group: GROUPS.basic,
|
|
68
|
+
label: "Est. Item Size",
|
|
69
|
+
description: "Approximate size of the items before rendering.",
|
|
70
|
+
defaultValue: 50,
|
|
71
|
+
step: 1,
|
|
72
|
+
precision: 0,
|
|
73
|
+
}),
|
|
74
|
+
horizontal: createStaticBoolProp({
|
|
75
|
+
label: "Horizontal",
|
|
76
|
+
description: "Render list horizontally",
|
|
77
|
+
}),
|
|
78
|
+
inverted: createStaticBoolProp({
|
|
79
|
+
label: "Inverted",
|
|
80
|
+
description: "If true, reverses the direction.",
|
|
81
|
+
}),
|
|
82
|
+
numColumns: createNumColumnsType({
|
|
83
|
+
editable: true,
|
|
84
|
+
}),
|
|
85
|
+
onEndReachedThreshold: createStaticNumberProp({
|
|
86
|
+
label: "End Reached Threshold",
|
|
87
|
+
description:
|
|
88
|
+
"How far from the end (in units of visible length of the list) the bottom edge of the list must be from the end of the content to trigger the onEndReached callback. Thus a value of 0.5 will trigger onEndReached when the end of the content is within half the visible length of the list.",
|
|
89
|
+
defaultValue: 0.5,
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
40
92
|
},
|
|
41
|
-
|
|
93
|
+
];
|
package/src/mappings/FlatList.ts
CHANGED
|
@@ -3,6 +3,9 @@ import {
|
|
|
3
3
|
createNumColumnsType,
|
|
4
4
|
createStaticBoolProp,
|
|
5
5
|
CONTAINER_COMPONENT_STYLES_SECTIONS,
|
|
6
|
+
Triggers,
|
|
7
|
+
createActionProp,
|
|
8
|
+
createStaticNumberProp,
|
|
6
9
|
} from "@draftbit/types";
|
|
7
10
|
|
|
8
11
|
export const SEED_DATA = {
|
|
@@ -14,7 +17,10 @@ export const SEED_DATA = {
|
|
|
14
17
|
layout: {
|
|
15
18
|
flex: 1,
|
|
16
19
|
},
|
|
20
|
+
triggers: [Triggers.OnRefresh, Triggers.OnEndReached],
|
|
17
21
|
props: {
|
|
22
|
+
onRefresh: createActionProp(),
|
|
23
|
+
onEndReached: createActionProp(),
|
|
18
24
|
horizontal: createStaticBoolProp({
|
|
19
25
|
label: "Horizontal",
|
|
20
26
|
description: "Render list horizontally",
|
|
@@ -26,5 +32,15 @@ export const SEED_DATA = {
|
|
|
26
32
|
numColumns: createNumColumnsType({
|
|
27
33
|
editable: true,
|
|
28
34
|
}),
|
|
35
|
+
initialNumToRender: createStaticBoolProp({
|
|
36
|
+
label: "Initial Num To Render",
|
|
37
|
+
descriprion: "How many items to render in the initial batch",
|
|
38
|
+
}),
|
|
39
|
+
onEndReachedThreshold: createStaticNumberProp({
|
|
40
|
+
label: "End Reached Threshold",
|
|
41
|
+
description:
|
|
42
|
+
"How far from the end (in units of visible length of the list) the bottom edge of the list must be from the end of the content to trigger the onEndReached callback. Thus a value of 0.5 will trigger onEndReached when the end of the content is within half the visible length of the list.",
|
|
43
|
+
defaultValue: 0.5,
|
|
44
|
+
}),
|
|
29
45
|
},
|
|
30
46
|
};
|
package/src/mappings/Swiper.ts
CHANGED
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
createTextProp,
|
|
6
6
|
createColorProp,
|
|
7
7
|
GROUPS,
|
|
8
|
+
Triggers,
|
|
9
|
+
createActionProp,
|
|
8
10
|
} from "@draftbit/types";
|
|
9
11
|
|
|
10
12
|
export const SEED_DATA = {
|
|
@@ -16,7 +18,9 @@ export const SEED_DATA = {
|
|
|
16
18
|
height: 300,
|
|
17
19
|
width: "100%",
|
|
18
20
|
},
|
|
21
|
+
triggers: [Triggers.OnIndexChanged],
|
|
19
22
|
props: {
|
|
23
|
+
onIndexChanged: createActionProp(),
|
|
20
24
|
from: createNumberProp({
|
|
21
25
|
group: GROUPS.basic,
|
|
22
26
|
label: "Initial Slide",
|
|
@@ -2,22 +2,69 @@ import {
|
|
|
2
2
|
COMPONENT_TYPES,
|
|
3
3
|
createActionProp,
|
|
4
4
|
Triggers,
|
|
5
|
+
createStaticNumberProp,
|
|
5
6
|
StylesPanelSections,
|
|
6
7
|
} from "@draftbit/types";
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
name: "Touchable",
|
|
10
|
-
tag: "Touchable",
|
|
11
|
-
description: "Simple button with no styles",
|
|
12
|
-
category: COMPONENT_TYPES.button,
|
|
9
|
+
const SEED_DATA_PROPS = {
|
|
13
10
|
stylesPanelSections: [
|
|
14
11
|
StylesPanelSections.Size,
|
|
15
12
|
StylesPanelSections.Margins,
|
|
16
13
|
StylesPanelSections.Borders,
|
|
17
14
|
],
|
|
18
15
|
layout: {},
|
|
19
|
-
triggers: [Triggers.OnPress],
|
|
16
|
+
triggers: [Triggers.OnPress, Triggers.OnLongPress],
|
|
20
17
|
props: {
|
|
21
18
|
onPress: createActionProp(),
|
|
19
|
+
onLongPress: createActionProp(),
|
|
20
|
+
activeOpacity: createStaticNumberProp({
|
|
21
|
+
label: "Active Opacity",
|
|
22
|
+
description: "The opacity when the button is pressed.",
|
|
23
|
+
defaultValue: 0.8,
|
|
24
|
+
min: 0,
|
|
25
|
+
max: 1,
|
|
26
|
+
step: 0.01,
|
|
27
|
+
precision: 2,
|
|
28
|
+
required: false,
|
|
29
|
+
}),
|
|
30
|
+
disabledOpacity: createStaticNumberProp({
|
|
31
|
+
label: "Disabled Opacity",
|
|
32
|
+
description: "The opacity when the button is disabled.",
|
|
33
|
+
defaultValue: 0.8,
|
|
34
|
+
min: 0,
|
|
35
|
+
max: 1,
|
|
36
|
+
step: 0.01,
|
|
37
|
+
precision: 2,
|
|
38
|
+
required: false,
|
|
39
|
+
}),
|
|
40
|
+
delayLongPress: createStaticNumberProp({
|
|
41
|
+
label: "Delay Long Press",
|
|
42
|
+
description:
|
|
43
|
+
"Duration (in milliseconds) from onPressIn before onLongPress is called.",
|
|
44
|
+
required: false,
|
|
45
|
+
}),
|
|
46
|
+
hitSlop: createStaticNumberProp({
|
|
47
|
+
label: "Hit Slop",
|
|
48
|
+
description:
|
|
49
|
+
"Sets additional distance outside of element in which a press can be detected.",
|
|
50
|
+
required: false,
|
|
51
|
+
}),
|
|
22
52
|
},
|
|
23
53
|
};
|
|
54
|
+
|
|
55
|
+
export const SEED_DATA = [
|
|
56
|
+
{
|
|
57
|
+
name: "Touchable",
|
|
58
|
+
tag: "Touchable",
|
|
59
|
+
description: "An interactive view with no styles",
|
|
60
|
+
category: COMPONENT_TYPES.button,
|
|
61
|
+
...SEED_DATA_PROPS,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "Pressable",
|
|
65
|
+
tag: "Pressable",
|
|
66
|
+
description: "An interactive view with no styles",
|
|
67
|
+
category: COMPONENT_TYPES.button,
|
|
68
|
+
...SEED_DATA_PROPS,
|
|
69
|
+
},
|
|
70
|
+
];
|
package/src/styles/overlay.tsx
CHANGED
|
@@ -4,13 +4,13 @@ import { Animated } from "react-native";
|
|
|
4
4
|
import DarkTheme from "./DarkTheme";
|
|
5
5
|
|
|
6
6
|
const isAnimatedValue = (
|
|
7
|
-
it: number | Animated.AnimatedInterpolation
|
|
7
|
+
it: number | Animated.AnimatedInterpolation
|
|
8
8
|
): it is Animated.Value => it instanceof Animated.Value;
|
|
9
9
|
|
|
10
10
|
export default function overlay<T extends Animated.Value | number>(
|
|
11
11
|
elevation: T,
|
|
12
12
|
surfaceColor: string = DarkTheme.colors.surface
|
|
13
|
-
): T extends number ? string : Animated.AnimatedInterpolation
|
|
13
|
+
): T extends number ? string : Animated.AnimatedInterpolation {
|
|
14
14
|
if (isAnimatedValue(elevation)) {
|
|
15
15
|
const inputRange = [0, 1, 2, 3, 8, 24];
|
|
16
16
|
|
package/src/Provider.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { ThemeProvider } from "./theming";
|
|
3
|
-
import PortalHost from "./components/Portal/PortalHost";
|
|
4
|
-
export default class Provider extends React.Component {
|
|
5
|
-
render() {
|
|
6
|
-
return (React.createElement(PortalHost, null,
|
|
7
|
-
React.createElement(ThemeProvider, { theme: this.props.theme }, this.props.children)));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { View, StyleSheet, Pressable, } from "react-native";
|
|
3
|
-
import Text from "../Text";
|
|
4
|
-
import { withTheme } from "../../theming";
|
|
5
|
-
import { extractStyles } from "../../utilities";
|
|
6
|
-
const AccordionGroup = ({ label, expanded: expandedProp = false, openColor, closedColor, caretColor: caretColorProp, caretSize = 24, icon, iconSize = 24, style, children, theme, Icon, }) => {
|
|
7
|
-
const [expanded, setExpanded] = React.useState(expandedProp);
|
|
8
|
-
const { textStyles, viewStyles } = extractStyles(style);
|
|
9
|
-
const expandedColor = openColor || theme.colors.primary;
|
|
10
|
-
const collapsedColor = closedColor || theme.colors.primary;
|
|
11
|
-
const labelColor = expanded ? expandedColor : collapsedColor;
|
|
12
|
-
const caretColor = caretColorProp || labelColor;
|
|
13
|
-
const handlePressAction = () => {
|
|
14
|
-
setExpanded(!expanded);
|
|
15
|
-
};
|
|
16
|
-
return (React.createElement(React.Fragment, null,
|
|
17
|
-
React.createElement(Pressable, { style: [styles.row, viewStyles], onPress: handlePressAction, accessibilityRole: "button" },
|
|
18
|
-
icon ? (React.createElement(Icon, { name: icon, size: iconSize, color: labelColor, style: styles.icon })) : null,
|
|
19
|
-
React.createElement(View, { style: styles.content },
|
|
20
|
-
React.createElement(Text, { selectable: false, style: [
|
|
21
|
-
textStyles,
|
|
22
|
-
{
|
|
23
|
-
color: labelColor,
|
|
24
|
-
},
|
|
25
|
-
] }, label)),
|
|
26
|
-
React.createElement(Icon, { name: expanded
|
|
27
|
-
? "MaterialIcons/keyboard-arrow-up"
|
|
28
|
-
: "MaterialIcons/keyboard-arrow-down", color: caretColor, size: caretSize })),
|
|
29
|
-
expanded ? children : null));
|
|
30
|
-
};
|
|
31
|
-
const styles = StyleSheet.create({
|
|
32
|
-
row: {
|
|
33
|
-
flexDirection: "row",
|
|
34
|
-
alignItems: "center",
|
|
35
|
-
},
|
|
36
|
-
content: {
|
|
37
|
-
flex: 1,
|
|
38
|
-
justifyContent: "center",
|
|
39
|
-
},
|
|
40
|
-
icon: {
|
|
41
|
-
marginRight: 8,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
export default withTheme(AccordionGroup);
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { Pressable, StyleSheet, View, } from "react-native";
|
|
3
|
-
import Text from "../Text";
|
|
4
|
-
import { extractStyles } from "../../utilities";
|
|
5
|
-
import { withTheme } from "../../theming";
|
|
6
|
-
const AccordionItem = ({ Icon, icon, label, style, iconColor, theme, ...rest }) => {
|
|
7
|
-
const { textStyles, viewStyles } = extractStyles(style);
|
|
8
|
-
return (React.createElement(Pressable, { style: [styles.container, viewStyles], ...rest },
|
|
9
|
-
React.createElement(View, { style: styles.row },
|
|
10
|
-
icon ? (React.createElement(Icon, { name: icon, size: 24, color: iconColor || theme.colors.primary })) : null,
|
|
11
|
-
React.createElement(View, { style: [styles.item, styles.content] },
|
|
12
|
-
React.createElement(Text, { selectable: false, style: textStyles }, label)))));
|
|
13
|
-
};
|
|
14
|
-
const styles = StyleSheet.create({
|
|
15
|
-
container: {
|
|
16
|
-
padding: 8,
|
|
17
|
-
},
|
|
18
|
-
row: {
|
|
19
|
-
flexDirection: "row",
|
|
20
|
-
alignItems: "center",
|
|
21
|
-
paddingLeft: 8,
|
|
22
|
-
},
|
|
23
|
-
item: {
|
|
24
|
-
marginVertical: 6,
|
|
25
|
-
paddingLeft: 8,
|
|
26
|
-
},
|
|
27
|
-
content: {
|
|
28
|
-
flex: 1,
|
|
29
|
-
justifyContent: "center",
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
export default withTheme(AccordionItem);
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { View, StyleSheet } from "react-native";
|
|
3
|
-
import Portal from "../Portal/Portal";
|
|
4
|
-
import Touchable from "../Touchable";
|
|
5
|
-
import ActionSheetCancel from "./ActionSheetCancel";
|
|
6
|
-
const ActionSheet = ({ visible = false, onClose, children }) => {
|
|
7
|
-
return visible ? (React.createElement(Portal, null,
|
|
8
|
-
React.createElement(Touchable, { style: styles.wrapper, onPress: onClose },
|
|
9
|
-
React.createElement(View, { style: styles.overlay }),
|
|
10
|
-
React.createElement(View, { style: styles.groupWrapper },
|
|
11
|
-
React.createElement(View, { style: styles.group }, React.Children.toArray(children).filter((child) => (child === null || child === void 0 ? void 0 : child.type) !== ActionSheetCancel)),
|
|
12
|
-
React.createElement(View, { style: styles.group }, React.Children.toArray(children).filter((child) => child.type === ActionSheetCancel)))))) : (React.createElement(React.Fragment, null));
|
|
13
|
-
};
|
|
14
|
-
const styles = StyleSheet.create({
|
|
15
|
-
wrapper: {
|
|
16
|
-
flex: 1,
|
|
17
|
-
display: "flex",
|
|
18
|
-
flexDirection: "column",
|
|
19
|
-
},
|
|
20
|
-
overlay: {
|
|
21
|
-
position: "absolute",
|
|
22
|
-
top: 0,
|
|
23
|
-
left: 0,
|
|
24
|
-
right: 0,
|
|
25
|
-
bottom: 0,
|
|
26
|
-
backgroundColor: "#000000",
|
|
27
|
-
opacity: 0.3,
|
|
28
|
-
},
|
|
29
|
-
groupWrapper: {
|
|
30
|
-
flex: 1,
|
|
31
|
-
flexDirection: "column",
|
|
32
|
-
justifyContent: "flex-end",
|
|
33
|
-
display: "flex",
|
|
34
|
-
marginBottom: 25,
|
|
35
|
-
},
|
|
36
|
-
group: {
|
|
37
|
-
display: "flex",
|
|
38
|
-
flexDirection: "column",
|
|
39
|
-
borderRadius: 10,
|
|
40
|
-
marginHorizontal: 7,
|
|
41
|
-
marginVertical: 2.5,
|
|
42
|
-
overflow: "hidden",
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
export default ActionSheet;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import ActionSheetItem from "./ActionSheetItem";
|
|
3
|
-
const ActionSheetCancel = ({ label = "Cancel", color, style, onPress, }) => {
|
|
4
|
-
return (React.createElement(ActionSheetItem, { label: label, color: color || "#FF453A", style: [style], onPress: onPress }));
|
|
5
|
-
};
|
|
6
|
-
export default ActionSheetCancel;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Text, StyleSheet, TouchableOpacity, } from "react-native";
|
|
3
|
-
import { extractStyles } from "../../utilities";
|
|
4
|
-
const ActionSheetItem = ({ label, style, color, onPress, }) => {
|
|
5
|
-
const { textStyles, viewStyles } = extractStyles(style);
|
|
6
|
-
return (React.createElement(TouchableOpacity, { activeOpacity: 0.7, style: [styles.wrapper, viewStyles], onPress: onPress },
|
|
7
|
-
React.createElement(Text, { style: [styles.label, textStyles, { color }] }, label)));
|
|
8
|
-
};
|
|
9
|
-
const styles = StyleSheet.create({
|
|
10
|
-
wrapper: {
|
|
11
|
-
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
12
|
-
borderBottomColor: "#CCCCCC",
|
|
13
|
-
backgroundColor: "#F1F1F1",
|
|
14
|
-
minHeight: 50,
|
|
15
|
-
overflow: "hidden",
|
|
16
|
-
display: "flex",
|
|
17
|
-
justifyContent: "center",
|
|
18
|
-
},
|
|
19
|
-
label: {
|
|
20
|
-
fontSize: 16,
|
|
21
|
-
textAlign: "center",
|
|
22
|
-
color: "#0A84FF",
|
|
23
|
-
fontWeight: "500",
|
|
24
|
-
overflow: "hidden",
|
|
25
|
-
paddingHorizontal: 20,
|
|
26
|
-
paddingVertical: 10,
|
|
27
|
-
alignSelf: "center",
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
export default ActionSheetItem;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { Animated, Easing, } from "react-native";
|
|
3
|
-
import CircularProgress from "./CircularProgress";
|
|
4
|
-
const AnimatedProgress = Animated.createAnimatedComponent(CircularProgress);
|
|
5
|
-
const AnimatedCircularProgress = ({ duration = 500, easing = Easing.out(Easing.ease), fill, prefill = 0, useNativeDriver = false, tintColorSecondary, onAnimationComplete, tintColor = "black", ...other }) => {
|
|
6
|
-
const [fillAnimation] = React.useState(new Animated.Value(prefill));
|
|
7
|
-
const animate = React.useCallback((toVal = -1, dur, ease) => {
|
|
8
|
-
const toValue = toVal >= 0 ? toVal : fill;
|
|
9
|
-
const dura = dur || duration;
|
|
10
|
-
const eas = ease || easing;
|
|
11
|
-
const useNative = useNativeDriver;
|
|
12
|
-
const anim = Animated.timing(fillAnimation, {
|
|
13
|
-
useNativeDriver: useNative,
|
|
14
|
-
toValue,
|
|
15
|
-
easing: eas,
|
|
16
|
-
duration: dura,
|
|
17
|
-
});
|
|
18
|
-
anim.start(onAnimationComplete);
|
|
19
|
-
return anim;
|
|
20
|
-
}, [
|
|
21
|
-
duration,
|
|
22
|
-
easing,
|
|
23
|
-
fill,
|
|
24
|
-
useNativeDriver,
|
|
25
|
-
fillAnimation,
|
|
26
|
-
onAnimationComplete,
|
|
27
|
-
]);
|
|
28
|
-
const animateColor = () => {
|
|
29
|
-
if (!tintColorSecondary) {
|
|
30
|
-
return tintColor;
|
|
31
|
-
}
|
|
32
|
-
const tintAnimation = fillAnimation.interpolate({
|
|
33
|
-
inputRange: [0, 100],
|
|
34
|
-
outputRange: [tintColor, tintColorSecondary],
|
|
35
|
-
});
|
|
36
|
-
return tintAnimation;
|
|
37
|
-
};
|
|
38
|
-
React.useEffect(() => {
|
|
39
|
-
animate();
|
|
40
|
-
}, [fill, animate]);
|
|
41
|
-
return (React.createElement(AnimatedProgress, { ...other, style: other.style, childrenContainerStyle: other.childrenContainerStyle, fill: fillAnimation, tintColor: animateColor() }));
|
|
42
|
-
};
|
|
43
|
-
export default AnimatedCircularProgress;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { View, StyleSheet, } from "react-native";
|
|
3
|
-
const AspectRatio = (props) => {
|
|
4
|
-
const [layout, setLayout] = React.useState(null);
|
|
5
|
-
const { aspectRatio = 1, ...inputStyle } = StyleSheet.flatten(props.style) || {};
|
|
6
|
-
const style = [inputStyle, { aspectRatio }];
|
|
7
|
-
if (layout) {
|
|
8
|
-
const { width = 0, height = 0 } = layout;
|
|
9
|
-
if (width === 0) {
|
|
10
|
-
style.push({ width: height * (1 / aspectRatio), height });
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
style.push({ width, height: width * (1 / aspectRatio) });
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return (React.createElement(View, { ...props, style: style, onLayout: ({ nativeEvent: { layout: l } }) => setLayout(l) }, props.children));
|
|
17
|
-
};
|
|
18
|
-
export default AspectRatio;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { View } from "react-native";
|
|
3
|
-
import Touchable from "./Touchable";
|
|
4
|
-
import CircleImage from "./CircleImage";
|
|
5
|
-
import { withTheme } from "../theming";
|
|
6
|
-
const AvatarEdit = ({ Icon, image, size = 80, onPress = () => { }, style, theme, ...rest }) => {
|
|
7
|
-
const colorStyles = {
|
|
8
|
-
editBackgroundColor: theme.colors.primary,
|
|
9
|
-
editIconColor: theme.colors.surface,
|
|
10
|
-
editBorderColor: theme.colors.surface,
|
|
11
|
-
};
|
|
12
|
-
const dimensions = {
|
|
13
|
-
width: size,
|
|
14
|
-
height: size,
|
|
15
|
-
};
|
|
16
|
-
return (React.createElement(View, { style: [style, dimensions], ...rest },
|
|
17
|
-
React.createElement(Touchable, { onPress: onPress },
|
|
18
|
-
React.createElement(CircleImage, { source: image, size: size }),
|
|
19
|
-
React.createElement(View, { style: {
|
|
20
|
-
position: "absolute",
|
|
21
|
-
top: -3,
|
|
22
|
-
right: -3,
|
|
23
|
-
borderColor: colorStyles.editBorderColor,
|
|
24
|
-
backgroundColor: colorStyles.editBackgroundColor,
|
|
25
|
-
borderRadius: size * (3 / 16),
|
|
26
|
-
padding: size * (3 / 32),
|
|
27
|
-
} },
|
|
28
|
-
React.createElement(Icon, { name: "MaterialIcons/edit", color: colorStyles.editIconColor, size: size * (3 / 16) })))));
|
|
29
|
-
};
|
|
30
|
-
export default withTheme(AvatarEdit);
|
package/src/components/Banner.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { Button, Text, View, StyleSheet, Animated, } from "react-native";
|
|
3
|
-
import Surface from "./Surface";
|
|
4
|
-
import shadow from "../styles/shadow";
|
|
5
|
-
import { withTheme } from "../theming";
|
|
6
|
-
const ELEVATION = 1;
|
|
7
|
-
const DEFAULT_MAX_WIDTH = 960;
|
|
8
|
-
const Banner = ({ initiallyVisible = true, dismissable = true, icon, buttonColor, content, contentStyle, style, theme, Icon, ...rest }) => {
|
|
9
|
-
const [visible, setVisible] = React.useState(initiallyVisible);
|
|
10
|
-
React.useEffect(() => {
|
|
11
|
-
if (initiallyVisible) {
|
|
12
|
-
setVisible(true);
|
|
13
|
-
}
|
|
14
|
-
}, [initiallyVisible]);
|
|
15
|
-
const { current: position } = React.useRef(new Animated.Value(visible ? 1 : 0));
|
|
16
|
-
const [layout, setLayout] = React.useState({
|
|
17
|
-
height: 0,
|
|
18
|
-
measured: false,
|
|
19
|
-
});
|
|
20
|
-
React.useEffect(() => {
|
|
21
|
-
if (visible) {
|
|
22
|
-
// show
|
|
23
|
-
Animated.timing(position, {
|
|
24
|
-
duration: 250,
|
|
25
|
-
toValue: 1,
|
|
26
|
-
useNativeDriver: false,
|
|
27
|
-
}).start();
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
// hide
|
|
31
|
-
Animated.timing(position, {
|
|
32
|
-
duration: 200,
|
|
33
|
-
toValue: 0,
|
|
34
|
-
useNativeDriver: false,
|
|
35
|
-
}).start();
|
|
36
|
-
}
|
|
37
|
-
}, [visible, position]);
|
|
38
|
-
const handleLayout = ({ nativeEvent }) => {
|
|
39
|
-
const { height } = nativeEvent.layout;
|
|
40
|
-
setLayout({ height, measured: true });
|
|
41
|
-
};
|
|
42
|
-
// The banner animation has 2 parts:
|
|
43
|
-
// 1. Blank spacer element which animates its height to move the content
|
|
44
|
-
// 2. Actual banner which animates its translateY
|
|
45
|
-
// In initial render, we position everything normally and measure the height of the banner
|
|
46
|
-
// Once we have the height, we apply the height to the spacer and switch the banner to position: absolute
|
|
47
|
-
// We need this because we need to move the content below as if banner's height was being animated
|
|
48
|
-
// However we can't animated banner's height directly as it'll also resize the content inside
|
|
49
|
-
const height = Animated.multiply(position, layout.height);
|
|
50
|
-
const translateY = Animated.multiply(Animated.add(position, -1), layout.height);
|
|
51
|
-
return (React.createElement(Surface, { ...rest, style: [styles.container, shadow(ELEVATION), style] },
|
|
52
|
-
React.createElement(View, { style: [styles.wrapper, contentStyle] },
|
|
53
|
-
React.createElement(Animated.View, { style: { height } }),
|
|
54
|
-
React.createElement(Animated.View, { onLayout: handleLayout, style: [
|
|
55
|
-
layout.measured || !visible
|
|
56
|
-
? // If we have measured banner's height or it's invisible,
|
|
57
|
-
// Position it absolutely, the layout will be taken care of the spacer
|
|
58
|
-
[styles.absolute, { transform: [{ translateY }] }]
|
|
59
|
-
: // Otherwise position it normally
|
|
60
|
-
null,
|
|
61
|
-
!layout.measured && !visible
|
|
62
|
-
? // If we haven't measured banner's height yet and it's invisible,
|
|
63
|
-
// hide it with opacity: 0 so user doesn't see it
|
|
64
|
-
{ opacity: 0 }
|
|
65
|
-
: null,
|
|
66
|
-
] },
|
|
67
|
-
React.createElement(View, { style: [styles.content, { marginBottom: dismissable ? 0 : 16 }] },
|
|
68
|
-
icon ? (React.createElement(View, { style: styles.icon },
|
|
69
|
-
React.createElement(Icon, { name: icon, size: 40 }))) : null,
|
|
70
|
-
React.createElement(Text, { style: [styles.message, { color: theme.colors.text }], accessibilityLiveRegion: visible ? "polite" : "none", accessibilityRole: "alert" }, content)),
|
|
71
|
-
dismissable ? (React.createElement(View, { style: styles.actions },
|
|
72
|
-
React.createElement(Button, { color: buttonColor || theme.colors.primary, title: "Close", onPress: () => setVisible(false) }))) : null))));
|
|
73
|
-
};
|
|
74
|
-
const styles = StyleSheet.create({
|
|
75
|
-
container: {
|
|
76
|
-
elevation: ELEVATION,
|
|
77
|
-
},
|
|
78
|
-
wrapper: {
|
|
79
|
-
overflow: "hidden",
|
|
80
|
-
alignSelf: "center",
|
|
81
|
-
width: "100%",
|
|
82
|
-
maxWidth: DEFAULT_MAX_WIDTH,
|
|
83
|
-
},
|
|
84
|
-
absolute: {
|
|
85
|
-
position: "absolute",
|
|
86
|
-
top: 0,
|
|
87
|
-
width: "100%",
|
|
88
|
-
},
|
|
89
|
-
content: {
|
|
90
|
-
flexDirection: "row",
|
|
91
|
-
justifyContent: "flex-start",
|
|
92
|
-
marginHorizontal: 8,
|
|
93
|
-
marginTop: 16,
|
|
94
|
-
marginBottom: 0,
|
|
95
|
-
},
|
|
96
|
-
icon: {
|
|
97
|
-
margin: 8,
|
|
98
|
-
},
|
|
99
|
-
message: {
|
|
100
|
-
flex: 1,
|
|
101
|
-
margin: 8,
|
|
102
|
-
},
|
|
103
|
-
actions: {
|
|
104
|
-
flexDirection: "row",
|
|
105
|
-
justifyContent: "flex-end",
|
|
106
|
-
margin: 8,
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
export default withTheme(Banner);
|