Skip to content

Commit bb6e9b5

Browse files
committed
Merge branch 'master' into release
2 parents 520c2e8 + 191cb26 commit bb6e9b5

File tree

163 files changed

+3740
-691
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+3740
-691
lines changed

.buildkite/pipeline.yml

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
steps:
2+
- block: ":rocket: Release!"
3+
prompt: "Fill out the details for release"
4+
if: 'build.message =~ /^release\$/i'
5+
fields:
6+
- text: "VERSION"
7+
key: "version"
8+
9+
- label: ":hammer_and_pick: Build"
10+
command:
11+
- "nvm install"
12+
- "npm install"
13+
- "npm run test"
14+
- "npm run build"
15+
- "[[ $BUILDKITE_PULL_REQUEST == 'false' ]] && npm run bkRelease && npm run demo || true"

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,4 @@ class MyScreen extends Component {
118118
}
119119
}
120120
```
121+

demo/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
},
1414
"scripts": {
1515
"release": "node ./scripts/release.js",
16-
"jenkinsRelease": "node ./scripts/jenkinsRelease.js"
16+
"demoRelease": "node ./scripts/demoRelease.js"
1717
},
1818
"devDependencies": {
1919
"react-native-ui-lib": "*",

demo/scripts/jenkinsRelease.js renamed to demo/scripts/demoRelease.js

+9-26
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,34 @@ const exec = require('shell-utils').exec;
22
const semver = require('semver');
33
const _ = require('lodash');
44
const p = require('path');
5+
const cp = require('child_process');
56

67
// Workaround JS
7-
const isRelease = process.env.RELEASE_BUILD === 'true';
8-
const branch = process.env.BRANCH;
98

10-
const ONLY_ON_BRANCH = `origin/${branch || 'master'}`;
9+
const isRelease = process.env.BUILDKITE_MESSAGE.match(/^release$/i);
10+
let VERSION;
11+
if (isRelease) {
12+
VERSION = cp.execSync(`buildkite-agent meta-data get version`).toString();
13+
}
14+
1115
const VERSION_TAG = isRelease ? 'latest' : 'snapshot';
1216
const VERSION_INC = 'patch';
1317

1418
function run() {
1519
if (!validateEnv()) {
1620
return;
1721
}
18-
setupGit();
1922
createNpmRc();
2023
versionTagAndPublish();
2124
}
2225

2326
function validateEnv() {
24-
if (!process.env.JENKINS_CI) {
27+
if (!process.env.CI) {
2528
throw new Error('releasing is only available from CI');
2629
}
27-
28-
if (!process.env.JENKINS_MASTER) {
29-
console.log('not publishing on a different build');
30-
return false;
31-
}
32-
33-
if (process.env.GIT_BRANCH !== ONLY_ON_BRANCH) {
34-
console.log(`not publishing on branch ${process.env.GIT_BRANCH}`);
35-
return false;
36-
}
37-
3830
return true;
3931
}
4032

41-
function setupGit() {
42-
exec.execSyncSilent('git config --global push.default simple');
43-
exec.execSyncSilent(`git config --global user.email "${process.env.GIT_EMAIL}"`);
44-
exec.execSyncSilent(`git config --global user.name "${process.env.GIT_USER}"`);
45-
const remoteUrl = new RegExp('https?://(\\S+)').exec(exec.execSyncRead('git remote -v'))[1];
46-
exec.execSyncSilent(`git remote add deploy "https://${process.env.GIT_USER}:${process.env.GIT_TOKEN}@${remoteUrl}"`);
47-
// exec.execSync(`git checkout ${ONLY_ON_BRANCH}`);
48-
}
49-
5033
function createNpmRc() {
5134
exec.execSync('rm -f package-lock.json');
5235
const npmrcPath = p.resolve(`${__dirname}/.npmrc`);
@@ -57,7 +40,7 @@ function versionTagAndPublish() {
5740
const currentPublished = findCurrentPublishedVersion();
5841
console.log(`current published version: ${currentPublished}`);
5942

60-
const version = isRelease ? process.env.VERSION : `${currentPublished}-snapshot.${process.env.BUILD_ID}`;
43+
const version = isRelease ? VERSION : `${currentPublished}-snapshot.${process.env.BUILDKITE_BUILD_NUMBER}`;
6144
console.log(`Publishing version: ${version}`);
6245

6346
tryPublishAndTag(version);
Loading
4.97 KB
Loading
6.34 KB
Loading
10.4 KB
Loading
16.3 KB
Loading

demo/src/screens/MenuStructure.js

+1
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ export const navigationData = {
154154
title: 'Incubator (Experimental)',
155155
screens: [
156156
{title: 'Native TouchableOpacity', tags: 'touchable native', screen: 'unicorn.incubator.TouchableOpacityScreen'},
157+
{title: '(New) Dialog', tags: 'dialog modal popup alert', screen: 'unicorn.incubator.IncubatorDialogScreen'},
157158
{title: '(New) TextField', tags: 'text field input', screen: 'unicorn.components.IncubatorTextFieldScreen'},
158159
{title: 'ExpandableOverlay', tags: 'text field expandable input picker', screen: 'unicorn.components.IncubatorExpandableOverlayScreen'},
159160
{title: 'WheelPicker (Incubator)', tags: 'wheel picker spinner experimental', screen: 'unicorn.incubator.WheelPickerScreen'},

demo/src/screens/componentScreens/ButtonsScreen.tsx

+6
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,12 @@ export default class ButtonsScreen extends Component {
383383
style={{marginBottom: ButtonSpace}}
384384
/>
385385

386+
<Button
387+
label="hyperlink button"
388+
hyperlink
389+
style={{marginBottom: ButtonSpace}}
390+
/>
391+
386392
<Button label="Icon on right" iconSource={plusIcon} iconOnRight />
387393
</View>
388394

demo/src/screens/componentScreens/PickerScreen.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export default class PickerScreen extends Component {
171171
onChange={filter => this.setState({filter})}
172172
renderPicker={({label}) => {
173173
return (
174-
<View row center>
174+
<View row>
175175
<Image style={{marginRight: 1, height: 16, resizeMode: 'contain'}} source={tagIcon}/>
176176
<Text grey10 text80>
177177
{label} Posts
@@ -194,7 +194,7 @@ export default class PickerScreen extends Component {
194194
getItemValue={contact => contact.name}
195195
renderPicker={contact => {
196196
return (
197-
<View row center>
197+
<View row>
198198
<Avatar size={30} source={{uri: contact.thumbnail}}/>
199199
<Text text70 marginL-10>
200200
{contact.name}

demo/src/screens/componentScreens/TextScreen.js renamed to demo/src/screens/componentScreens/TextScreen.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import {Animated, ScrollView} from 'react-native';
33
import {View, Text, Colors} from 'react-native-ui-lib';
44

55
class TextScreen extends Component {
6-
state = {};
7-
toggle = false;
8-
animatedValue = new Animated.Value(0);
6+
private toggle = false;
7+
private animatedValue = new Animated.Value(0);
98

109
animate = () => {
1110
this.toggle = !this.toggle;
@@ -64,6 +63,9 @@ class TextScreen extends Component {
6463
<Text uppercase text70>
6564
uppercase
6665
</Text>
66+
<Text underline text70>
67+
underline
68+
</Text>
6769
</View>
6870
{this.renderDivider()}
6971

@@ -89,6 +91,7 @@ class TextScreen extends Component {
8991
<Text
9092
text70
9193
animated
94+
// @ts-expect-error
9295
style={{transform: [{scale: this.animatedValue.interpolate({inputRange: [0, 1], outputRange: [1, 2]})}]}}
9396
onPress={this.animate}
9497
>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import React, {Component} from 'react';
2+
import {StyleSheet} from 'react-native';
3+
import {FlatList} from 'react-native-gesture-handler';
4+
import {View, Text, Card, Button, Incubator, Colors, BorderRadiuses} from 'react-native-ui-lib'; //eslint-disable-line
5+
6+
interface Item {
7+
value: string;
8+
label: string;
9+
}
10+
11+
const colors: Item[] = [
12+
{value: Colors.red10, label: 'Red10'},
13+
{value: Colors.red30, label: 'Red30'},
14+
{value: Colors.red50, label: 'Red50'},
15+
{value: Colors.red70, label: 'Red70'},
16+
{value: Colors.blue10, label: 'Blue10'},
17+
{value: Colors.blue30, label: 'Blue30'},
18+
{value: Colors.blue50, label: 'Blue50'},
19+
{value: Colors.blue70, label: 'Blue70'},
20+
{value: Colors.purple10, label: 'Purple10'},
21+
{value: Colors.purple30, label: 'Purple30'},
22+
{value: Colors.purple50, label: 'Purple50'},
23+
{value: Colors.purple70, label: 'Purple70'},
24+
{value: Colors.green10, label: 'Green10'},
25+
{value: Colors.green30, label: 'Green30'},
26+
{value: Colors.green50, label: 'Green50'},
27+
{value: Colors.green70, label: 'Green70'},
28+
{value: Colors.yellow10, label: 'Yellow10'},
29+
{value: Colors.yellow30, label: 'Yellow30'},
30+
{value: Colors.yellow50, label: 'Yellow50'},
31+
{value: Colors.yellow70, label: 'Yellow70'}
32+
];
33+
34+
export default class IncubatorDialogScreen extends Component {
35+
state = {visible: false};
36+
37+
renderVerticalItem = ({item}: {item: Item}) => {
38+
return (
39+
<Text text50 margin-20 color={item.value}>
40+
{item.label}
41+
</Text>
42+
);
43+
};
44+
45+
keyExtractor = (item: Item) => {
46+
return item.value;
47+
};
48+
49+
openDialog = () => {
50+
this.setState({visible: true});
51+
};
52+
53+
closeDialog = () => {
54+
this.setState({visible: false});
55+
};
56+
57+
render() {
58+
const {visible} = this.state;
59+
60+
return (
61+
<View bg-dark80 flex padding-20>
62+
<Card height={100} center padding-20>
63+
<Text text50>IncubatorDialogScreen</Text>
64+
</Card>
65+
<View flex center>
66+
<Button marginV-20 label="Open Dialog" onPress={this.openDialog}/>
67+
</View>
68+
<Incubator.Dialog visible={visible} onDismiss={this.closeDialog} bottom containerStyle={styles.dialogContainer}>
69+
<View style={styles.dialog}>
70+
<Text text60 margin-s2>
71+
Title (swipe here)
72+
</Text>
73+
<View height={1} bg-grey40/>
74+
<FlatList
75+
showsVerticalScrollIndicator={false}
76+
style={styles.verticalScroll}
77+
data={colors}
78+
renderItem={this.renderVerticalItem}
79+
keyExtractor={this.keyExtractor}
80+
/>
81+
</View>
82+
</Incubator.Dialog>
83+
</View>
84+
);
85+
}
86+
}
87+
88+
const styles = StyleSheet.create({
89+
dialogContainer: {
90+
bottom: 20,
91+
alignSelf: 'center'
92+
},
93+
dialog: {
94+
backgroundColor: Colors.white,
95+
width: 200,
96+
height: 300,
97+
borderRadius: BorderRadiuses.br20
98+
},
99+
verticalScroll: {
100+
marginTop: 20
101+
}
102+
});

demo/src/screens/incubatorScreens/IncubatorExpandableOverlayScreen.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,10 @@ export default class TextFieldScreen extends Component {
8989
</Text>
9090
<Incubator.ExpandableOverlay
9191
ref={this.expandableInputRef}
92-
modalProps={{animationType: 'slide'}}
92+
modalProps={{animationType: 'slide', onDismiss: () => console.warn('Modal is dismissed')}}
9393
expandableContent={this.renderInputModal()}
9494
showTopBar
9595
topBarProps={{title: 'Edit Input', doneLabel: 'Done', onCancel: this.onCancel, onDone: this.onDone}}
96-
dialogProps={{bottom: true}}
9796
>
9897
<Incubator.TextField placeholder="Expandable input" value={textFieldValue}/>
9998
</Incubator.ExpandableOverlay>
@@ -112,7 +111,7 @@ export default class TextFieldScreen extends Component {
112111
ref={this.expandablePickerRef}
113112
useDialog
114113
expandableContent={this.renderPickerContent()}
115-
dialogProps={{bottom: true}}
114+
dialogProps={{bottom: true, onDismiss: () => console.warn('Dialog is dismissed')}}
116115
>
117116
{this.renderColorRow(selectedColor)}
118117
</Incubator.ExpandableOverlay>

demo/src/screens/incubatorScreens/TransitionViewScreen.tsx

+10-15
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ const {TransitionView} = Incubator;
55
import {renderRadioGroup} from '../ExampleScreenPresenter';
66

77
interface State {
8-
enterDirection: Incubator.Direction;
9-
exitDirection: Incubator.Direction;
8+
enterDirection: Incubator.TransitionViewDirection;
9+
exitDirection: Incubator.TransitionViewDirection;
1010
key: number;
1111
}
1212

1313
export default class TransitionViewScreen extends Component<{}, State> {
1414
private ref = React.createRef<typeof TransitionView>();
1515
state = {
16-
enterDirection: 'left' as Incubator.Direction,
17-
exitDirection: 'bottom' as Incubator.Direction,
16+
enterDirection: Incubator.TransitionViewDirectionEnum.LEFT,
17+
exitDirection: Incubator.TransitionViewDirectionEnum.DOWN,
1818
key: 1
1919
};
2020

@@ -30,21 +30,16 @@ export default class TransitionViewScreen extends Component<{}, State> {
3030
const {key, enterDirection, exitDirection} = this.state;
3131
return (
3232
<View padding-20 bg-grey80 flex>
33-
{renderRadioGroup.call(this,
34-
'Enter direction',
35-
'enterDirection',
36-
{top: 'top', bottom: 'bottom', left: 'left', right: 'right'},
37-
{isRow: true})}
38-
{renderRadioGroup.call(this,
39-
'Exit direction',
40-
'exitDirection',
41-
{top: 'top', bottom: 'bottom', left: 'left', right: 'right'},
42-
{isRow: true})}
33+
{renderRadioGroup.call(this, 'Enter direction', 'enterDirection', Incubator.TransitionViewDirectionEnum, {
34+
isRow: true
35+
})}
36+
{renderRadioGroup.call(this, 'Exit direction', 'exitDirection', Incubator.TransitionViewDirectionEnum, {
37+
isRow: true
38+
})}
4339
<Button label="Refresh" onPress={() => this.setState({key: key + 1})}/>
4440
<View flex center>
4541
<TransitionView
4642
key={`${key}`}
47-
// @ts-expect-error
4843
ref={this.ref}
4944
enterFrom={enterDirection}
5045
exitTo={exitDirection}

demo/src/screens/incubatorScreens/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
33
export function registerScreens(registrar) {
44
registrar('unicorn.incubator.TouchableOpacityScreen', () =>
55
gestureHandlerRootHOC(require('./TouchableOpacityScreen').default));
6+
registrar('unicorn.incubator.IncubatorDialogScreen', () => require('./IncubatorDialogScreen').default);
67
registrar('unicorn.components.IncubatorExpandableOverlayScreen', () => require('./IncubatorExpandableOverlayScreen').default);
78
registrar('unicorn.components.IncubatorTextFieldScreen', () => require('./IncubatorTextFieldScreen').default);
89
registrar('unicorn.incubator.PanViewScreen', () => require('./PanViewScreen').default);

docs/foundation/assets.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
---
2-
index: 6
3-
path: "/foundation/assets"
2+
sidebar_position: 3
3+
sidebar_label: Assets
44
title: "Assets"
55
---
6+
67
Assets are a big part of the whole UI system, whether it's an icon, placeholder or an illustration, we use them everywhere.
78
Load groups of assets and easily render them with the _Image_ component.
89

0 commit comments

Comments
 (0)