unicorn-demo-app 7.43.0-snapshot.7149 → 7.43.0-snapshot.7157
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/package.json +1 -1
- package/scripts/releaseDemo.js +8 -1
- package/src/index.js +14 -2
- package/src/screens/MenuStructure.js +8 -4
- package/src/screens/componentScreens/ActionSheetScreen.tsx +2 -0
- package/src/screens/componentScreens/DateTimePickerScreen.tsx +5 -0
- package/src/screens/componentScreens/DialogScreen.js +343 -0
- package/src/screens/componentScreens/PanDismissibleScreen.tsx +112 -0
- package/src/screens/componentScreens/PanListenerScreen.tsx +63 -0
- package/src/screens/componentScreens/PanResponderScreen.tsx +99 -0
- package/src/screens/componentScreens/PickerScreen.tsx +5 -4
- package/src/screens/componentScreens/WheelPickerScreen.tsx +3 -3
- package/src/screens/componentScreens/index.js +3 -1
- package/src/screens/{componentScreens/DialogScreen.tsx → incubatorScreens/IncubatorDialogScreen.tsx} +6 -6
- package/src/screens/incubatorScreens/IncubatorExpandableOverlayScreen.tsx +1 -0
- package/src/screens/{componentScreens → incubatorScreens}/PanViewScreen.tsx +2 -1
- package/src/screens/incubatorScreens/index.js +2 -0
package/package.json
CHANGED
package/scripts/releaseDemo.js
CHANGED
|
@@ -17,8 +17,11 @@ const VERSION_INC = 'patch';
|
|
|
17
17
|
|
|
18
18
|
function run() {
|
|
19
19
|
if (!validateEnv()) {
|
|
20
|
+
console.log('Do not release demo');
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
23
|
+
|
|
24
|
+
console.log('Release demo');
|
|
22
25
|
createNpmRc();
|
|
23
26
|
versionTagAndPublish();
|
|
24
27
|
}
|
|
@@ -27,7 +30,11 @@ function validateEnv() {
|
|
|
27
30
|
if (!process.env.CI) {
|
|
28
31
|
throw new Error('releasing is only available from CI');
|
|
29
32
|
}
|
|
30
|
-
return
|
|
33
|
+
return (
|
|
34
|
+
process.env.BUILDKITE_BRANCH === 'master' ||
|
|
35
|
+
process.env.BUILDKITE_BRANCH === 'release' ||
|
|
36
|
+
process.env.BUILDKITE_MESSAGE === 'snapshot'
|
|
37
|
+
);
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
function createNpmRc() {
|
package/src/index.js
CHANGED
|
@@ -87,6 +87,15 @@ module.exports = {
|
|
|
87
87
|
get PageControlScreen() {
|
|
88
88
|
return require('./screens/componentScreens/PageControlScreen').default;
|
|
89
89
|
},
|
|
90
|
+
get PanDismissibleScreen() {
|
|
91
|
+
return require('./screens/componentScreens/PanDismissibleScreen').default;
|
|
92
|
+
},
|
|
93
|
+
get PanListenerScreen() {
|
|
94
|
+
return require('./screens/componentScreens/PanListenerScreen').default;
|
|
95
|
+
},
|
|
96
|
+
get PanResponderScreen() {
|
|
97
|
+
return require('./screens/componentScreens/PanResponderScreen').default;
|
|
98
|
+
},
|
|
90
99
|
get PickerScreen() {
|
|
91
100
|
return require('./screens/componentScreens/PickerScreen').default;
|
|
92
101
|
},
|
|
@@ -235,13 +244,16 @@ module.exports = {
|
|
|
235
244
|
get SortableGridList() {
|
|
236
245
|
return require('./screens/componentScreens/SortableGridListScreen').default;
|
|
237
246
|
},
|
|
247
|
+
// Incubator
|
|
238
248
|
get PanViewScreen() {
|
|
239
|
-
return require('./screens/
|
|
249
|
+
return require('./screens/incubatorScreens/PanViewScreen').default;
|
|
240
250
|
},
|
|
241
|
-
// Incubator
|
|
242
251
|
get IncubatorSlider() {
|
|
243
252
|
return require('./screens/incubatorScreens/IncubatorSliderScreen').default;
|
|
244
253
|
},
|
|
254
|
+
get IncubatorDialog() {
|
|
255
|
+
return require('./screens/incubatorScreens/IncubatorDialogScreen').default;
|
|
256
|
+
},
|
|
245
257
|
get IncubatorToast() {
|
|
246
258
|
return require('./screens/incubatorScreens/IncubatorToastScreen').default;
|
|
247
259
|
},
|
|
@@ -183,14 +183,16 @@ export const navigationData = {
|
|
|
183
183
|
title: 'Animations & Gestures',
|
|
184
184
|
screens: [
|
|
185
185
|
{title: 'Animated Image', tags: 'animated image', screen: 'unicorn.components.AnimatedImageScreen'},
|
|
186
|
-
{title: 'Card Scanner', tags: 'card scanner process', screen: 'unicorn.animations.CardScannerScreen'},
|
|
187
186
|
{title: 'Haptic feedback', tags: 'haptic feedback', screen: 'unicorn.components.HapticScreen'},
|
|
188
|
-
{title: 'PanView', tags: 'pan swipe drag', screen: 'unicorn.components.PanViewScreen'},
|
|
189
187
|
{
|
|
190
188
|
title: 'ProgressiveImage',
|
|
191
189
|
tags: 'progressive image cover overlay',
|
|
192
190
|
screen: 'unicorn.components.ProgressiveImageScreen'
|
|
193
|
-
}
|
|
191
|
+
},
|
|
192
|
+
{title: 'Card Scanner', tags: 'card scanner process', screen: 'unicorn.animations.CardScannerScreen'},
|
|
193
|
+
{title: 'Pan Dismissible', tags: 'pan swipe drag dismiss', screen: 'unicorn.components.PanDismissibleScreen'},
|
|
194
|
+
{title: 'Pan Listener', tags: 'pan swipe drag listener', screen: 'unicorn.components.PanListenerScreen'},
|
|
195
|
+
{title: 'Pan Responder', tags: 'pan swipe drag responder', screen: 'unicorn.components.PanResponderScreen'}
|
|
194
196
|
]
|
|
195
197
|
},
|
|
196
198
|
Incubator: {
|
|
@@ -199,12 +201,14 @@ export const navigationData = {
|
|
|
199
201
|
{title: 'Calendar', tags: 'calendar', screen: 'unicorn.components.IncubatorCalendarScreen'},
|
|
200
202
|
{title: 'ChipsInput', tags: 'chips input', screen: 'unicorn.components.ChipsInputScreen'},
|
|
201
203
|
{title: 'Native TouchableOpacity', tags: 'touchable native', screen: 'unicorn.incubator.TouchableOpacityScreen'},
|
|
204
|
+
{title: 'Dialog (New)', tags: 'dialog modal popup alert', screen: 'unicorn.incubator.IncubatorDialogScreen'},
|
|
202
205
|
{title: 'Toast (New)', tags: 'toast', screen: 'unicorn.components.IncubatorToastScreen'},
|
|
203
206
|
{
|
|
204
207
|
title: 'ExpandableOverlay',
|
|
205
208
|
tags: 'text field expandable input picker',
|
|
206
209
|
screen: 'unicorn.components.IncubatorExpandableOverlayScreen'
|
|
207
|
-
}
|
|
210
|
+
},
|
|
211
|
+
{title: 'PanView', tags: 'pan swipe drag', screen: 'unicorn.incubator.PanViewScreen'}
|
|
208
212
|
]
|
|
209
213
|
},
|
|
210
214
|
Inspirations: {
|
|
@@ -64,6 +64,7 @@ export default class ActionSheetScreen extends Component {
|
|
|
64
64
|
cancelButtonIndex={3}
|
|
65
65
|
destructiveButtonIndex={0}
|
|
66
66
|
useNativeIOS={false}
|
|
67
|
+
migrateDialog
|
|
67
68
|
options={[
|
|
68
69
|
{label: 'option 1', onPress: () => this.pickOption('option 1')},
|
|
69
70
|
{label: 'option 2', onPress: () => this.pickOption('option 2')},
|
|
@@ -79,6 +80,7 @@ export default class ActionSheetScreen extends Component {
|
|
|
79
80
|
message={'Message of action sheet'}
|
|
80
81
|
cancelButtonIndex={3}
|
|
81
82
|
destructiveButtonIndex={0}
|
|
83
|
+
migrateDialog
|
|
82
84
|
options={[
|
|
83
85
|
{label: 'option 1', onPress: () => this.pickOption('option 1'), iconSource: collectionsIcon},
|
|
84
86
|
{label: 'option 2', onPress: () => this.pickOption('option 2'), iconSource: shareIcon},
|
|
@@ -62,6 +62,7 @@ export default class DateTimePickerScreen extends Component<{}, State> {
|
|
|
62
62
|
<View padding-page>
|
|
63
63
|
<Text text40>Date Time Picker</Text>
|
|
64
64
|
<DateTimePicker
|
|
65
|
+
migrateDialog
|
|
65
66
|
containerStyle={{marginVertical: 20}}
|
|
66
67
|
label={'Date'}
|
|
67
68
|
placeholder={'Select a date'}
|
|
@@ -71,6 +72,7 @@ export default class DateTimePickerScreen extends Component<{}, State> {
|
|
|
71
72
|
// value={new Date('October 13, 2014')}
|
|
72
73
|
/>
|
|
73
74
|
<DateTimePicker
|
|
75
|
+
migrateDialog
|
|
74
76
|
mode={'time'}
|
|
75
77
|
label={'Time'}
|
|
76
78
|
placeholder={'Select time'}
|
|
@@ -81,12 +83,14 @@ export default class DateTimePickerScreen extends Component<{}, State> {
|
|
|
81
83
|
Disabled
|
|
82
84
|
</Text>
|
|
83
85
|
<DateTimePicker
|
|
86
|
+
migrateDialog
|
|
84
87
|
containerStyle={{marginBottom: 20}}
|
|
85
88
|
editable={false}
|
|
86
89
|
label={'Date'}
|
|
87
90
|
placeholder={'Select a date'}
|
|
88
91
|
/>
|
|
89
92
|
<DateTimePicker
|
|
93
|
+
migrateDialog
|
|
90
94
|
editable={false}
|
|
91
95
|
mode={'time'}
|
|
92
96
|
label={'Time'}
|
|
@@ -107,6 +111,7 @@ export default class DateTimePickerScreen extends Component<{}, State> {
|
|
|
107
111
|
</View>
|
|
108
112
|
</View>
|
|
109
113
|
<DateTimePicker
|
|
114
|
+
migrateDialog
|
|
110
115
|
containerStyle={{marginVertical: 20}}
|
|
111
116
|
renderInput={this.renderCustomInput}
|
|
112
117
|
mode={mode}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import React, {Component} from 'react';
|
|
2
|
+
import {FlatList, ScrollView, StyleSheet, Alert} from 'react-native';
|
|
3
|
+
import {
|
|
4
|
+
Text,
|
|
5
|
+
View,
|
|
6
|
+
Button,
|
|
7
|
+
Dialog,
|
|
8
|
+
Colors,
|
|
9
|
+
PanningProvider,
|
|
10
|
+
RadioGroup,
|
|
11
|
+
RadioButton,
|
|
12
|
+
Switch,
|
|
13
|
+
Constants
|
|
14
|
+
} from 'react-native-ui-lib'; // eslint-disable-line
|
|
15
|
+
|
|
16
|
+
export default class DialogScreen extends Component {
|
|
17
|
+
constructor(props) {
|
|
18
|
+
super(props);
|
|
19
|
+
|
|
20
|
+
this.SCROLL_TYPE = {
|
|
21
|
+
NONE: 'none',
|
|
22
|
+
VERTICAL: 'vertical',
|
|
23
|
+
HORIZONTAL: 'horizontal'
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
this.pannableTitle = {title: 'This is a pannable header Dialog'};
|
|
27
|
+
this.title = 'This is a Dialog';
|
|
28
|
+
this.supportedOrientations = ['portrait', 'landscape'];
|
|
29
|
+
this.colors = [
|
|
30
|
+
{value: Colors.red10, label: 'Red10'},
|
|
31
|
+
{value: Colors.red30, label: 'Red30'},
|
|
32
|
+
{value: Colors.red50, label: 'Red50'},
|
|
33
|
+
{value: Colors.red70, label: 'Red70'},
|
|
34
|
+
{value: Colors.blue10, label: 'Blue10'},
|
|
35
|
+
{value: Colors.blue30, label: 'Blue30'},
|
|
36
|
+
{value: Colors.blue50, label: 'Blue50'},
|
|
37
|
+
{value: Colors.blue70, label: 'Blue70'},
|
|
38
|
+
{value: Colors.purple10, label: 'Purple10'},
|
|
39
|
+
{value: Colors.purple30, label: 'Purple30'},
|
|
40
|
+
{value: Colors.purple50, label: 'Purple50'},
|
|
41
|
+
{value: Colors.purple70, label: 'Purple70'},
|
|
42
|
+
{value: Colors.green10, label: 'Green10'},
|
|
43
|
+
{value: Colors.green30, label: 'Green30'},
|
|
44
|
+
{value: Colors.green50, label: 'Green50'},
|
|
45
|
+
{value: Colors.green70, label: 'Green70'},
|
|
46
|
+
{value: Colors.yellow10, label: 'Yellow10'},
|
|
47
|
+
{value: Colors.yellow30, label: 'Yellow30'},
|
|
48
|
+
{value: Colors.yellow50, label: 'Yellow50'},
|
|
49
|
+
{value: Colors.yellow70, label: 'Yellow70'}
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
this.state = {
|
|
53
|
+
panDirection: Dialog.directions.DOWN,
|
|
54
|
+
position: 'bottom',
|
|
55
|
+
scroll: this.SCROLL_TYPE.NONE,
|
|
56
|
+
showHeader: true,
|
|
57
|
+
isRounded: true,
|
|
58
|
+
showDialog: false,
|
|
59
|
+
ignoreBackgroundPress: false
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
titlePressed = ({title}) => {
|
|
64
|
+
Alert.alert('Pressed on', title);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
setPanDirection = panDirection => {
|
|
68
|
+
if (panDirection !== this.state.panDirection) {
|
|
69
|
+
this.setState({panDirection});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
setPosition = position => {
|
|
74
|
+
if (position !== this.state.position) {
|
|
75
|
+
this.setState({position});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
setScroll = scroll => {
|
|
80
|
+
if (scroll !== this.state.scroll) {
|
|
81
|
+
this.setState({scroll});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
toggleShowHeader = () => {
|
|
86
|
+
this.setState({
|
|
87
|
+
showHeader: !this.state.showHeader
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
toggleIsRounded = () => {
|
|
92
|
+
this.setState({
|
|
93
|
+
isRounded: !this.state.isRounded
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
toggleIgnoreBackgroundPress = () => {
|
|
98
|
+
this.setState({
|
|
99
|
+
ignoreBackgroundPress: !this.state.ignoreBackgroundPress
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
showDialog = () => {
|
|
104
|
+
this.setState({showDialog: true});
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
hideDialog = () => {
|
|
108
|
+
this.setState({showDialog: false});
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
getWarning = () => {
|
|
112
|
+
const {showHeader, scroll, panDirection} = this.state;
|
|
113
|
+
if (!showHeader && scroll !== this.SCROLL_TYPE.NONE) {
|
|
114
|
+
return (
|
|
115
|
+
<Text color={Colors.$textDangerLight}>It is recommended to have pannable header with scrollable content</Text>
|
|
116
|
+
);
|
|
117
|
+
} else if (showHeader && panDirection !== Dialog.directions.DOWN) {
|
|
118
|
+
return <Text color={Colors.$textDangerLight}>It is recommended to have pannable header with direction=down</Text>;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
getMessage = () => {
|
|
123
|
+
const {panDirection, position, scroll} = this.state;
|
|
124
|
+
|
|
125
|
+
return `Panning direction: ${panDirection ? panDirection : 'none'}
|
|
126
|
+
Position: ${position ? position : 'center'}
|
|
127
|
+
Scroll: ${scroll}`;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
renderPannableHeader = props => {
|
|
131
|
+
const {title} = props;
|
|
132
|
+
return (
|
|
133
|
+
<View>
|
|
134
|
+
<View margin-20>
|
|
135
|
+
<Text $textDefault>{title}</Text>
|
|
136
|
+
</View>
|
|
137
|
+
<View height={2} bg-grey70/>
|
|
138
|
+
</View>
|
|
139
|
+
);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
renderPlainContent = () => {
|
|
143
|
+
return (
|
|
144
|
+
<View margin-20 right>
|
|
145
|
+
<Button text60 label="Done" link onPress={this.hideDialog}/>
|
|
146
|
+
</View>
|
|
147
|
+
);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
keyExtractor = item => {
|
|
151
|
+
return item.value;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
renderVerticalItem = ({item: color}) => {
|
|
155
|
+
return (
|
|
156
|
+
<Text $textDefault text50 margin-20 color={color.value}>
|
|
157
|
+
{color.label}
|
|
158
|
+
</Text>
|
|
159
|
+
);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
renderVerticalScroll = () => {
|
|
163
|
+
return (
|
|
164
|
+
<FlatList
|
|
165
|
+
showsVerticalScrollIndicator={false}
|
|
166
|
+
style={styles.verticalScroll}
|
|
167
|
+
data={this.colors}
|
|
168
|
+
renderItem={this.renderVerticalItem}
|
|
169
|
+
keyExtractor={this.keyExtractor}
|
|
170
|
+
/>
|
|
171
|
+
);
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
renderHorizontalItem = ({item: color}) => {
|
|
175
|
+
return <View flex width={100} height={1000} style={{backgroundColor: color.value}}/>;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
renderHorizontalScroll = () => {
|
|
179
|
+
return (
|
|
180
|
+
<View marginT-20 pointerEvents="box-none">
|
|
181
|
+
<FlatList
|
|
182
|
+
horizontal
|
|
183
|
+
showsHorizontalScrollIndicator={false}
|
|
184
|
+
data={this.colors}
|
|
185
|
+
renderItem={this.renderHorizontalItem}
|
|
186
|
+
keyExtractor={this.keyExtractor}
|
|
187
|
+
/>
|
|
188
|
+
<View row pointerEvents="none" style={styles.horizontalTextContainer}>
|
|
189
|
+
<Text>
|
|
190
|
+
{'\u25c0'} Scroll me {'\u25b6'}
|
|
191
|
+
</Text>
|
|
192
|
+
</View>
|
|
193
|
+
</View>
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
renderContent = () => {
|
|
198
|
+
const {scroll, showHeader} = this.state;
|
|
199
|
+
|
|
200
|
+
let content;
|
|
201
|
+
switch (scroll) {
|
|
202
|
+
case this.SCROLL_TYPE.VERTICAL:
|
|
203
|
+
content = this.renderVerticalScroll();
|
|
204
|
+
break;
|
|
205
|
+
case this.SCROLL_TYPE.HORIZONTAL:
|
|
206
|
+
content = this.renderHorizontalScroll();
|
|
207
|
+
break;
|
|
208
|
+
case this.SCROLL_TYPE.NONE:
|
|
209
|
+
default:
|
|
210
|
+
content = this.renderPlainContent();
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const data = (
|
|
215
|
+
<View spread flex={scroll !== this.SCROLL_TYPE.NONE}>
|
|
216
|
+
<View marginT-20 marginH-20>
|
|
217
|
+
{!showHeader && <Text $textDefault text50>{this.title}</Text>}
|
|
218
|
+
<Text $textDefault marginT-20={!showHeader}>{this.getMessage()}</Text>
|
|
219
|
+
{this.getWarning()}
|
|
220
|
+
</View>
|
|
221
|
+
{content}
|
|
222
|
+
</View>
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
return data;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
getDialogKey = height => {
|
|
229
|
+
const {position} = this.state;
|
|
230
|
+
return `dialog-key-${position}-${height}`;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
renderDialog = () => {
|
|
234
|
+
const {showDialog, panDirection, position, scroll, showHeader, isRounded, ignoreBackgroundPress} = this.state;
|
|
235
|
+
const renderPannableHeader = showHeader ? this.renderPannableHeader : undefined;
|
|
236
|
+
const height = scroll !== this.SCROLL_TYPE.NONE ? '70%' : undefined;
|
|
237
|
+
|
|
238
|
+
return (
|
|
239
|
+
<Dialog
|
|
240
|
+
useSafeArea
|
|
241
|
+
key={this.getDialogKey(height)}
|
|
242
|
+
top={position === 'top'}
|
|
243
|
+
bottom={position === 'bottom'}
|
|
244
|
+
height={height}
|
|
245
|
+
panDirection={panDirection}
|
|
246
|
+
containerStyle={isRounded ? styles.roundedDialog : styles.dialog}
|
|
247
|
+
visible={showDialog}
|
|
248
|
+
onDismiss={this.hideDialog}
|
|
249
|
+
renderPannableHeader={renderPannableHeader}
|
|
250
|
+
pannableHeaderProps={this.pannableTitle}
|
|
251
|
+
supportedOrientations={this.supportedOrientations}
|
|
252
|
+
ignoreBackgroundPress={ignoreBackgroundPress}
|
|
253
|
+
>
|
|
254
|
+
{this.renderContent()}
|
|
255
|
+
</Dialog>
|
|
256
|
+
);
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
render() {
|
|
260
|
+
const {panDirection, position, scroll, showHeader, isRounded, ignoreBackgroundPress} = this.state;
|
|
261
|
+
|
|
262
|
+
return (
|
|
263
|
+
<ScrollView>
|
|
264
|
+
<View flex padding-12>
|
|
265
|
+
<Text $textDefault text30 marginB-20>
|
|
266
|
+
Dialog
|
|
267
|
+
</Text>
|
|
268
|
+
|
|
269
|
+
<RadioGroup marginT-20 initialValue={panDirection} onValueChange={this.setPanDirection}>
|
|
270
|
+
<Text $textDefault>Panning Direction:</Text>
|
|
271
|
+
<View row marginV-10>
|
|
272
|
+
<RadioButton value={null} label={'None'}/>
|
|
273
|
+
<RadioButton value={Dialog.directions.UP} label={'Up'} marginL-10/>
|
|
274
|
+
<RadioButton value={Dialog.directions.DOWN} label={'Down'} marginL-10/>
|
|
275
|
+
<RadioButton value={Dialog.directions.LEFT} label={'Left'} marginL-10/>
|
|
276
|
+
<RadioButton value={Dialog.directions.RIGHT} label={'Right'} marginL-10/>
|
|
277
|
+
</View>
|
|
278
|
+
</RadioGroup>
|
|
279
|
+
|
|
280
|
+
<RadioGroup marginT-20 initialValue={position} onValueChange={this.setPosition}>
|
|
281
|
+
<Text $textDefault>Position:</Text>
|
|
282
|
+
<View row marginV-10>
|
|
283
|
+
<RadioButton value={'top'} label={'Top'}/>
|
|
284
|
+
<RadioButton value={null} label={'Center'} marginL-10/>
|
|
285
|
+
<RadioButton value={'bottom'} label={'Bottom'} marginL-10/>
|
|
286
|
+
</View>
|
|
287
|
+
</RadioGroup>
|
|
288
|
+
|
|
289
|
+
<RadioGroup marginT-20 initialValue={scroll} onValueChange={this.setScroll}>
|
|
290
|
+
<Text $textDefault>Scroll:</Text>
|
|
291
|
+
<View row marginV-10>
|
|
292
|
+
<RadioButton value={this.SCROLL_TYPE.NONE} label={'None'}/>
|
|
293
|
+
<RadioButton value={this.SCROLL_TYPE.VERTICAL} label={'Vertical'} marginL-10/>
|
|
294
|
+
<RadioButton value={this.SCROLL_TYPE.HORIZONTAL} label={'Horizontal'} marginL-10/>
|
|
295
|
+
</View>
|
|
296
|
+
</RadioGroup>
|
|
297
|
+
|
|
298
|
+
<View row marginT-20 centerV>
|
|
299
|
+
<Text $textDefault>Toggle pannable header:</Text>
|
|
300
|
+
<Switch value={showHeader} onValueChange={this.toggleShowHeader} marginL-10/>
|
|
301
|
+
</View>
|
|
302
|
+
|
|
303
|
+
<View row marginT-20 centerV>
|
|
304
|
+
<Text $textDefault>Add some style:</Text>
|
|
305
|
+
<Switch value={isRounded} onValueChange={this.toggleIsRounded} marginL-10/>
|
|
306
|
+
</View>
|
|
307
|
+
|
|
308
|
+
<View row marginT-20 centerV>
|
|
309
|
+
<Text $textDefault>Ignore Background Press:</Text>
|
|
310
|
+
<Switch value={ignoreBackgroundPress} onValueChange={this.toggleIgnoreBackgroundPress} marginL-10/>
|
|
311
|
+
</View>
|
|
312
|
+
|
|
313
|
+
<Button marginT-50 label={'Show dialog'} onPress={this.showDialog}/>
|
|
314
|
+
|
|
315
|
+
{this.renderDialog()}
|
|
316
|
+
</View>
|
|
317
|
+
</ScrollView>
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
const styles = StyleSheet.create({
|
|
323
|
+
dialog: {
|
|
324
|
+
backgroundColor: Colors.$backgroundDefault
|
|
325
|
+
},
|
|
326
|
+
roundedDialog: {
|
|
327
|
+
backgroundColor: Colors.$backgroundDefault,
|
|
328
|
+
marginBottom: Constants.isIphoneX ? 0 : 20,
|
|
329
|
+
borderRadius: 12
|
|
330
|
+
},
|
|
331
|
+
button: {
|
|
332
|
+
margin: 5,
|
|
333
|
+
alignSelf: 'flex-start'
|
|
334
|
+
},
|
|
335
|
+
verticalScroll: {
|
|
336
|
+
marginTop: 20
|
|
337
|
+
},
|
|
338
|
+
horizontalTextContainer: {
|
|
339
|
+
alignSelf: 'center',
|
|
340
|
+
position: 'absolute',
|
|
341
|
+
top: 10
|
|
342
|
+
}
|
|
343
|
+
});
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import React, {Component} from 'react';
|
|
2
|
+
import {StyleSheet} from 'react-native';
|
|
3
|
+
import {
|
|
4
|
+
Button,
|
|
5
|
+
View,
|
|
6
|
+
Text,
|
|
7
|
+
Switch,
|
|
8
|
+
Colors,
|
|
9
|
+
Typography,
|
|
10
|
+
PanListenerView,
|
|
11
|
+
PanningProvider,
|
|
12
|
+
PanDismissibleView
|
|
13
|
+
} from 'react-native-ui-lib';
|
|
14
|
+
|
|
15
|
+
const PAN_LISTENER_VIEW_HEIGHT = 100;
|
|
16
|
+
|
|
17
|
+
export default class PanDismissibleScreen extends Component {
|
|
18
|
+
state = {
|
|
19
|
+
location: {left: 50, top: 50},
|
|
20
|
+
isCoupled: true,
|
|
21
|
+
key: false
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
switchExample = () => {
|
|
25
|
+
const {isCoupled, location} = this.state;
|
|
26
|
+
if (isCoupled) {
|
|
27
|
+
this.setState({
|
|
28
|
+
isCoupled: false,
|
|
29
|
+
location: {left: location.left, top: location.top - PAN_LISTENER_VIEW_HEIGHT}
|
|
30
|
+
});
|
|
31
|
+
} else {
|
|
32
|
+
this.setState({
|
|
33
|
+
isCoupled: true,
|
|
34
|
+
location: {left: location.left, top: location.top + PAN_LISTENER_VIEW_HEIGHT}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
reset = () => {
|
|
40
|
+
this.setState({key: !this.state.key});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
renderPanListener = () => {
|
|
44
|
+
return (
|
|
45
|
+
<PanListenerView style={styles.panListener}>
|
|
46
|
+
<Text style={styles.largeText}>Drag\Swipe here</Text>
|
|
47
|
+
</PanListenerView>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
render() {
|
|
52
|
+
const {isCoupled, key} = this.state;
|
|
53
|
+
const panListener = this.renderPanListener();
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<View flex bg-grey80>
|
|
57
|
+
<Text style={styles.largeText}>Pan Dismissible</Text>
|
|
58
|
+
<View style={styles.container}>
|
|
59
|
+
<Switch value={isCoupled} onValueChange={this.switchExample} style={styles.switch}/>
|
|
60
|
+
<Text style={styles.smallText}>{isCoupled ? 'Coupled' : 'Uncoupled'}</Text>
|
|
61
|
+
</View>
|
|
62
|
+
<Button label="Reset" size={Button.sizes.medium} outline style={styles.button} onPress={this.reset}/>
|
|
63
|
+
<View centerH>
|
|
64
|
+
<PanningProvider>
|
|
65
|
+
{!isCoupled && panListener}
|
|
66
|
+
<PanDismissibleView
|
|
67
|
+
key={key.toString()}
|
|
68
|
+
style={[styles.panDismissible, {marginTop: isCoupled ? PAN_LISTENER_VIEW_HEIGHT : undefined}]}
|
|
69
|
+
>
|
|
70
|
+
{isCoupled && panListener}
|
|
71
|
+
</PanDismissibleView>
|
|
72
|
+
</PanningProvider>
|
|
73
|
+
</View>
|
|
74
|
+
</View>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const styles = StyleSheet.create({
|
|
80
|
+
largeText: {
|
|
81
|
+
...Typography.text50,
|
|
82
|
+
margin: 20
|
|
83
|
+
},
|
|
84
|
+
container: {
|
|
85
|
+
flexDirection: 'row',
|
|
86
|
+
marginBottom: 20,
|
|
87
|
+
alignSelf: 'center'
|
|
88
|
+
},
|
|
89
|
+
panDismissible: {
|
|
90
|
+
width: 250,
|
|
91
|
+
height: 250,
|
|
92
|
+
backgroundColor: Colors.blue30
|
|
93
|
+
},
|
|
94
|
+
panListener: {
|
|
95
|
+
width: '100%',
|
|
96
|
+
height: PAN_LISTENER_VIEW_HEIGHT,
|
|
97
|
+
backgroundColor: Colors.blue60,
|
|
98
|
+
justifyContent: 'center'
|
|
99
|
+
},
|
|
100
|
+
smallText: {
|
|
101
|
+
...Typography.text70,
|
|
102
|
+
marginLeft: 20
|
|
103
|
+
},
|
|
104
|
+
switch: {
|
|
105
|
+
marginLeft: 20,
|
|
106
|
+
alignSelf: 'center'
|
|
107
|
+
},
|
|
108
|
+
button: {
|
|
109
|
+
alignSelf: 'center',
|
|
110
|
+
marginBottom: 20
|
|
111
|
+
}
|
|
112
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React, {Component} from 'react';
|
|
2
|
+
import {View, Text, PanListenerView, PanDirectionsProps, PanAmountsProps} from 'react-native-ui-lib';
|
|
3
|
+
|
|
4
|
+
export default class PanListenerScreen extends Component {
|
|
5
|
+
state = {
|
|
6
|
+
locationText: '',
|
|
7
|
+
endType: ''
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
onDrag = ({directions}: ({directions: PanDirectionsProps, deltas: PanAmountsProps})) => {
|
|
11
|
+
this.setState({locationText: `Dragged: ${directions.x}, ${directions.y}`});
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
onSwipe = ({directions}: ({directions: PanDirectionsProps, velocities: PanAmountsProps})) => {
|
|
15
|
+
this.setState({locationText: `Swiped: ${directions.x}, ${directions.y}`});
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
onPanStart = () => {
|
|
19
|
+
this.setState({endType: 'Panning'});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
onPanRelease = () => {
|
|
23
|
+
this.setState({endType: 'Released'});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
onPanTerminated = () => {
|
|
27
|
+
this.setState({endType: 'Terminated'});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
render() {
|
|
31
|
+
const {locationText, endType} = this.state;
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<View flex bg-grey80>
|
|
35
|
+
<Text text50 margin-40>
|
|
36
|
+
Pan Listener
|
|
37
|
+
</Text>
|
|
38
|
+
<PanListenerView
|
|
39
|
+
bg-grey70
|
|
40
|
+
centerV
|
|
41
|
+
height={300}
|
|
42
|
+
width="100%"
|
|
43
|
+
// directions={[PanningProvider.Directions.UP, PanningProvider.Directions.DOWN]}
|
|
44
|
+
onDrag={this.onDrag}
|
|
45
|
+
onSwipe={this.onSwipe}
|
|
46
|
+
onPanStart={this.onPanStart}
|
|
47
|
+
onPanRelease={this.onPanRelease}
|
|
48
|
+
onPanTerminated={this.onPanTerminated}
|
|
49
|
+
>
|
|
50
|
+
<Text text50 margin-40>
|
|
51
|
+
Drag\swipe here
|
|
52
|
+
</Text>
|
|
53
|
+
</PanListenerView>
|
|
54
|
+
<Text text50 margin-40>
|
|
55
|
+
{locationText}
|
|
56
|
+
</Text>
|
|
57
|
+
<Text text50 margin-40>
|
|
58
|
+
{endType}
|
|
59
|
+
</Text>
|
|
60
|
+
</View>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import React, {Component} from 'react';
|
|
3
|
+
import {StyleSheet} from 'react-native';
|
|
4
|
+
import {
|
|
5
|
+
View,
|
|
6
|
+
Text,
|
|
7
|
+
Switch,
|
|
8
|
+
Colors,
|
|
9
|
+
Typography,
|
|
10
|
+
PanListenerView,
|
|
11
|
+
PanningProvider,
|
|
12
|
+
PanResponderView
|
|
13
|
+
} from 'react-native-ui-lib';
|
|
14
|
+
|
|
15
|
+
const PAN_LISTENER_VIEW_HEIGHT = 100;
|
|
16
|
+
|
|
17
|
+
export default class PanResponderScreen extends Component {
|
|
18
|
+
state = {
|
|
19
|
+
location: {left: 50, top: 50},
|
|
20
|
+
isCoupled: false
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
switchExample = () => {
|
|
24
|
+
const {isCoupled, location} = this.state;
|
|
25
|
+
if (isCoupled) {
|
|
26
|
+
this.setState({
|
|
27
|
+
isCoupled: false,
|
|
28
|
+
location: {left: location.left, top: location.top - PAN_LISTENER_VIEW_HEIGHT}
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
this.setState({
|
|
32
|
+
isCoupled: true,
|
|
33
|
+
location: {left: location.left, top: location.top + PAN_LISTENER_VIEW_HEIGHT}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
renderPanListener = () => {
|
|
39
|
+
return (
|
|
40
|
+
<PanListenerView style={styles.panListener}>
|
|
41
|
+
<Text style={styles.largeText}>Drag here</Text>
|
|
42
|
+
</PanListenerView>
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
render() {
|
|
47
|
+
const {isCoupled} = this.state;
|
|
48
|
+
const panListener = this.renderPanListener();
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<View flex bg-grey80>
|
|
52
|
+
<View style={styles.container}>
|
|
53
|
+
<Text style={styles.largeText}>Pan Responder</Text>
|
|
54
|
+
<Switch value={isCoupled} onValueChange={this.switchExample} style={styles.switch} />
|
|
55
|
+
<Text style={styles.smallText}>{isCoupled ? 'Coupled' : 'Uncoupled'}</Text>
|
|
56
|
+
</View>
|
|
57
|
+
<PanningProvider>
|
|
58
|
+
{!isCoupled && panListener}
|
|
59
|
+
<PanResponderView
|
|
60
|
+
style={[styles.panResponder, {marginTop: isCoupled ? PAN_LISTENER_VIEW_HEIGHT : undefined}]}
|
|
61
|
+
>
|
|
62
|
+
{isCoupled && panListener}
|
|
63
|
+
</PanResponderView>
|
|
64
|
+
</PanningProvider>
|
|
65
|
+
</View>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const styles = StyleSheet.create({
|
|
71
|
+
container: {
|
|
72
|
+
flexDirection: 'row',
|
|
73
|
+
height: 50,
|
|
74
|
+
alignItems: 'center'
|
|
75
|
+
},
|
|
76
|
+
panResponder: {
|
|
77
|
+
width: 250,
|
|
78
|
+
height: 250,
|
|
79
|
+
backgroundColor: Colors.blue30
|
|
80
|
+
},
|
|
81
|
+
panListener: {
|
|
82
|
+
width: '100%',
|
|
83
|
+
height: PAN_LISTENER_VIEW_HEIGHT,
|
|
84
|
+
backgroundColor: Colors.blue60,
|
|
85
|
+
justifyContent: 'center'
|
|
86
|
+
},
|
|
87
|
+
largeText: {
|
|
88
|
+
...Typography.text50,
|
|
89
|
+
marginLeft: 40
|
|
90
|
+
},
|
|
91
|
+
smallText: {
|
|
92
|
+
...Typography.text70,
|
|
93
|
+
marginLeft: 20
|
|
94
|
+
},
|
|
95
|
+
switch: {
|
|
96
|
+
marginLeft: 20,
|
|
97
|
+
alignSelf: 'center'
|
|
98
|
+
}
|
|
99
|
+
});
|
|
@@ -5,13 +5,14 @@ import {
|
|
|
5
5
|
Assets,
|
|
6
6
|
Colors,
|
|
7
7
|
Typography,
|
|
8
|
-
|
|
8
|
+
Incubator,
|
|
9
9
|
View,
|
|
10
10
|
Text,
|
|
11
11
|
Button,
|
|
12
12
|
Icon,
|
|
13
13
|
Avatar,
|
|
14
14
|
Picker,
|
|
15
|
+
PanningProvider,
|
|
15
16
|
PickerProps,
|
|
16
17
|
RenderCustomModalProps,
|
|
17
18
|
PickerMethods,
|
|
@@ -129,7 +130,7 @@ export default class PickerScreen extends Component {
|
|
|
129
130
|
renderDialog: PickerProps['renderOverlay'] = (modalProps: RenderCustomModalProps) => {
|
|
130
131
|
const {visible, children, toggleModal, onDone} = modalProps;
|
|
131
132
|
return (
|
|
132
|
-
<Dialog
|
|
133
|
+
<Incubator.Dialog
|
|
133
134
|
visible={visible}
|
|
134
135
|
onDismiss={() => {
|
|
135
136
|
onDone();
|
|
@@ -140,11 +141,11 @@ export default class PickerScreen extends Component {
|
|
|
140
141
|
bottom
|
|
141
142
|
useSafeArea
|
|
142
143
|
containerStyle={{backgroundColor: Colors.$backgroundDefault}}
|
|
143
|
-
direction={
|
|
144
|
+
direction={PanningProvider.Directions.DOWN}
|
|
144
145
|
headerProps={{title: 'Custom modal'}}
|
|
145
146
|
>
|
|
146
147
|
<ScrollView>{children}</ScrollView>
|
|
147
|
-
</Dialog>
|
|
148
|
+
</Incubator.Dialog>
|
|
148
149
|
);
|
|
149
150
|
};
|
|
150
151
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import React, {useCallback, useState} from 'react';
|
|
3
|
-
import {View, Text,
|
|
3
|
+
import {View, Text, Incubator, WheelPicker, WheelPickerAlign, Colors, Typography, Button} from 'react-native-ui-lib';
|
|
4
4
|
|
|
5
5
|
const monthItems = _.map([
|
|
6
6
|
'January',
|
|
@@ -88,7 +88,7 @@ export default () => {
|
|
|
88
88
|
<View center marginT-40>
|
|
89
89
|
<Text h3 marginB-20>Days</Text>
|
|
90
90
|
<Button size={Button.sizes.small} label={'Pick Days'} onPress={onPickDaysPress}/>
|
|
91
|
-
<Dialog
|
|
91
|
+
<Incubator.Dialog
|
|
92
92
|
width={'90%'}
|
|
93
93
|
bottom
|
|
94
94
|
visible={showDialog}
|
|
@@ -96,7 +96,7 @@ export default () => {
|
|
|
96
96
|
headerProps={{showKnob: false, showDivider: false}}
|
|
97
97
|
>
|
|
98
98
|
<WheelPicker initialValue={5} label={'Days'} items={dayItems}/>
|
|
99
|
-
</Dialog>
|
|
99
|
+
</Incubator.Dialog>
|
|
100
100
|
</View>
|
|
101
101
|
</View>
|
|
102
102
|
);
|
|
@@ -32,8 +32,10 @@ export function registerScreens(registrar) {
|
|
|
32
32
|
registrar('unicorn.components.MarqueeScreen', () => require('./MarqueeScreen').default);
|
|
33
33
|
registrar('unicorn.components.NumberInputScreen', () => require('./NumberInputScreen').default);
|
|
34
34
|
registrar('unicorn.components.OverlaysScreen', () => require('./OverlaysScreen').default);
|
|
35
|
-
registrar('unicorn.components.PanViewScreen', () => require('./PanViewScreen').default);
|
|
36
35
|
registrar('unicorn.components.PageControlScreen', () => require('./PageControlScreen').default);
|
|
36
|
+
registrar('unicorn.components.PanDismissibleScreen', () => require('./PanDismissibleScreen').default);
|
|
37
|
+
registrar('unicorn.components.PanListenerScreen', () => require('./PanListenerScreen').default);
|
|
38
|
+
registrar('unicorn.components.PanResponderScreen', () => require('./PanResponderScreen').default);
|
|
37
39
|
registrar('unicorn.components.PickerScreen', () => require('./PickerScreen').default);
|
|
38
40
|
registrar('unicorn.animations.ProgressBarScreen', () => require('../componentScreens/ProgressBarScreen').default);
|
|
39
41
|
registrar('unicorn.components.ProgressiveImageScreen', () => require('./ProgressiveImageScreen').default);
|
package/src/screens/{componentScreens/DialogScreen.tsx → incubatorScreens/IncubatorDialogScreen.tsx}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, {Component} from 'react';
|
|
2
2
|
import {StyleSheet} from 'react-native';
|
|
3
3
|
import {FlatList} from 'react-native-gesture-handler';
|
|
4
|
-
import {View, Text, Card, Button,
|
|
4
|
+
import {View, Text, Card, Button, Incubator, Colors, Spacings, ModalProps} from 'react-native-ui-lib';
|
|
5
5
|
|
|
6
6
|
interface Item {
|
|
7
7
|
value: string;
|
|
@@ -31,10 +31,10 @@ const colors: Item[] = [
|
|
|
31
31
|
{value: Colors.yellow70, label: 'Yellow70'}
|
|
32
32
|
];
|
|
33
33
|
|
|
34
|
-
export default class
|
|
34
|
+
export default class IncubatorDialogScreen extends Component {
|
|
35
35
|
state = {visible: false};
|
|
36
36
|
modalProps: ModalProps = {supportedOrientations: ['portrait', 'landscape']};
|
|
37
|
-
headerProps: DialogHeaderProps = {title: 'Title (swipe here)'};
|
|
37
|
+
headerProps: Incubator.DialogHeaderProps = {title: 'Title (swipe here)'};
|
|
38
38
|
|
|
39
39
|
renderVerticalItem = ({item}: {item: Item}) => {
|
|
40
40
|
return (
|
|
@@ -67,13 +67,13 @@ export default class DialogScreen extends Component {
|
|
|
67
67
|
<View bg-$backgroundNeutralLight flex padding-20>
|
|
68
68
|
<Card height={100} center padding-20>
|
|
69
69
|
<Text $textDefault text50>
|
|
70
|
-
|
|
70
|
+
IncubatorDialogScreen
|
|
71
71
|
</Text>
|
|
72
72
|
</Card>
|
|
73
73
|
<View flex center>
|
|
74
74
|
<Button marginV-s5 label="Open Dialog" onPress={this.openDialog}/>
|
|
75
75
|
</View>
|
|
76
|
-
<Dialog
|
|
76
|
+
<Incubator.Dialog
|
|
77
77
|
useSafeArea
|
|
78
78
|
visible={visible}
|
|
79
79
|
onDismiss={this.onDismiss}
|
|
@@ -89,7 +89,7 @@ export default class DialogScreen extends Component {
|
|
|
89
89
|
renderItem={this.renderVerticalItem}
|
|
90
90
|
keyExtractor={this.keyExtractor}
|
|
91
91
|
/>
|
|
92
|
-
</Dialog>
|
|
92
|
+
</Incubator.Dialog>
|
|
93
93
|
</View>
|
|
94
94
|
);
|
|
95
95
|
}
|
|
@@ -112,6 +112,7 @@ export default class TextFieldScreen extends Component {
|
|
|
112
112
|
useDialog
|
|
113
113
|
expandableContent={this.renderPickerContent()}
|
|
114
114
|
dialogProps={{bottom: true, onDismiss: () => console.warn('Dialog is dismissed')}}
|
|
115
|
+
migrateDialog
|
|
115
116
|
>
|
|
116
117
|
{this.renderColorRow(selectedColor)}
|
|
117
118
|
</Incubator.ExpandableOverlay>
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
View,
|
|
7
7
|
Text,
|
|
8
8
|
Colors,
|
|
9
|
-
|
|
9
|
+
Incubator,
|
|
10
10
|
Card,
|
|
11
11
|
Constants,
|
|
12
12
|
Modal,
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
Icon,
|
|
15
15
|
TouchableOpacity
|
|
16
16
|
} from 'react-native-ui-lib';
|
|
17
|
+
const {PanView} = Incubator;
|
|
17
18
|
|
|
18
19
|
interface Item {
|
|
19
20
|
value: string;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export function registerScreens(registrar) {
|
|
2
2
|
registrar('unicorn.components.IncubatorCalendarScreen', () => require('./IncubatorCalendarScreen').default);
|
|
3
3
|
registrar('unicorn.incubator.TouchableOpacityScreen', () => require('./TouchableOpacityScreen').default);
|
|
4
|
+
registrar('unicorn.incubator.IncubatorDialogScreen', () => require('./IncubatorDialogScreen').default);
|
|
4
5
|
registrar('unicorn.components.IncubatorExpandableOverlayScreen', () => require('./IncubatorExpandableOverlayScreen').default);
|
|
5
6
|
registrar('unicorn.components.IncubatorToastScreen', () => require('./IncubatorToastScreen').default);
|
|
7
|
+
registrar('unicorn.incubator.PanViewScreen', () => require('./PanViewScreen').default);
|
|
6
8
|
registrar('unicorn.components.IncubatorSliderScreen', () => require('./IncubatorSliderScreen').default);
|
|
7
9
|
}
|