Browse Source

Merge pull request #203 from henninghall/native-android-variant

Add android style variant: "Native Android"
master
Henning Hall 5 years ago
committed by GitHub
parent
commit
9403a8e537
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 563 additions and 471 deletions
  1. +10
    -5
      README.md
  2. +4
    -1
      android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
  3. +14
    -0
      android/src/main/java/com/henninghall/date_picker/DerivedData.java
  4. +31
    -24
      android/src/main/java/com/henninghall/date_picker/PickerView.java
  5. +8
    -1
      android/src/main/java/com/henninghall/date_picker/State.java
  6. +5
    -0
      android/src/main/java/com/henninghall/date_picker/models/Variant.java
  7. +184
    -0
      android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java
  8. +47
    -0
      android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java
  9. +33
    -0
      android/src/main/java/com/henninghall/date_picker/pickers/Picker.java
  10. +14
    -0
      android/src/main/java/com/henninghall/date_picker/props/VariantProp.java
  11. +2
    -0
      android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java
  12. +2
    -3
      android/src/main/java/com/henninghall/date_picker/ui/UIManager.java
  13. +2
    -3
      android/src/main/java/com/henninghall/date_picker/ui/WheelScroller.java
  14. +6
    -7
      android/src/main/java/com/henninghall/date_picker/ui/Wheels.java
  15. +3
    -2
      android/src/main/java/com/henninghall/date_picker/wheelFunctions/AddOnChangeListener.java
  16. +7
    -3
      android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java
  17. +7
    -3
      android/src/main/java/com/henninghall/date_picker/wheels/DateWheel.java
  18. +7
    -5
      android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java
  19. +7
    -3
      android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java
  20. +7
    -3
      android/src/main/java/com/henninghall/date_picker/wheels/MinutesWheel.java
  21. +8
    -5
      android/src/main/java/com/henninghall/date_picker/wheels/MonthWheel.java
  22. +5
    -3
      android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java
  23. +7
    -4
      android/src/main/java/com/henninghall/date_picker/wheels/YearWheel.java
  24. +24
    -36
      android/src/main/res/layout/ios_clone.xml
  25. +59
    -0
      android/src/main/res/layout/native_picker.xml
  26. +14
    -7
      android/src/main/res/values/styles.xml
  27. +4
    -3
      defaultProps.js
  28. BIN
      docs/react-native-date-picker-android-native.gif
  29. BIN
      docs/react-native-date-picker-android.png
  30. +3
    -0
      examples/detox/android/app/src/main/res/values/styles.xml
  31. +12
    -0
      examples/detox/src/examples/Advanced.js
  32. +1
    -9
      examples/detox/src/propPickers/DateChange.js
  33. +18
    -0
      examples/detox/src/propPickers/Variant.js
  34. +6
    -340
      examples/detox/yarn.lock
  35. +2
    -1
      propTypes.js

+ 10
- 5
README.md View File

@ -11,19 +11,24 @@ This is a React Native Date Picker with following main features:
<table>
<tr>
<td align="center"><b>iOS</b></td>
<td align="center"><b>Android</b></td>
</tr>
<tr>
<td><img src="docs/react-native-date-picker.gif" alt="React Native Date Picker" title="React Native Date Picker" height="150px" />
</td>
</tr>
<tr>
<td align="center" colspan="2"><b>Android</b></td>
</tr>
<tr>
<td><img src="docs/react-native-date-picker-android.gif" alt="React Native Date Picker Android" height="150px" style="margin-left:10px" />
</td>
</td>
<td><img src="docs/react-native-date-picker-android-native.gif" alt="React Native Datepicker" height="150px" style="margin-left:10px" />
</td>
</tr>
<tr>
<td align="center">A slightly improved DatePickerIOS.</td>
<td align="center">A custom made native component.</td>
<td align="center" colspan="2">Choose from 2 different variants</td>
</tr>
</table>
## Installation

+ 4
- 1
android/src/main/java/com/henninghall/date_picker/DatePickerManager.java View File

@ -7,6 +7,7 @@ import com.facebook.react.common.MapBuilder;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactPropGroup;
import com.henninghall.date_picker.props.VariantProp;
import com.henninghall.date_picker.props.DateProp;
import com.henninghall.date_picker.props.FadeToColorProp;
import com.henninghall.date_picker.props.LocaleProp;
@ -41,7 +42,9 @@ public class DatePickerManager extends SimpleViewManager {
}
@ReactPropGroup(names = { DateProp.name, ModeProp.name, LocaleProp.name, MaximumDateProp.name,
MinimumDateProp.name, FadeToColorProp.name, TextColorProp.name, UtcProp.name, MinuteIntervalProp.name})
MinimumDateProp.name, FadeToColorProp.name, TextColorProp.name, UtcProp.name, MinuteIntervalProp.name,
VariantProp.name
})
public void setProps(PickerView view, int index, Dynamic value) {
updateProp("setProps", view, index, value);
}

+ 14
- 0
android/src/main/java/com/henninghall/date_picker/DerivedData.java View File

@ -3,6 +3,7 @@ package com.henninghall.date_picker;
import android.util.Log;
import com.henninghall.date_picker.models.Mode;
import com.henninghall.date_picker.models.Variant;
import com.henninghall.date_picker.models.WheelType;
import java.util.ArrayList;
@ -96,4 +97,17 @@ public class DerivedData {
return oddShowCount;
}
public boolean hasNativeStyle() {
return state.getVariant() == Variant.nativeAndroid;
}
public int getRootLayout() {
switch (state.getVariant()){
case nativeAndroid: return R.layout.native_picker;
case iosClone: return R.layout.ios_clone;
default: return R.layout.ios_clone;
}
}
}

+ 31
- 24
android/src/main/java/com/henninghall/date_picker/PickerView.java View File

@ -1,9 +1,13 @@
package com.henninghall.date_picker;
import android.view.View;
import android.widget.RelativeLayout;
import com.facebook.react.bridge.Dynamic;
import com.henninghall.date_picker.props.MaximumDateProp;
import com.henninghall.date_picker.props.MinimumDateProp;
import com.henninghall.date_picker.props.MinuteIntervalProp;
import com.henninghall.date_picker.props.UtcProp;
import com.henninghall.date_picker.props.VariantProp;
import com.henninghall.date_picker.props.DateProp;
import com.henninghall.date_picker.props.FadeToColorProp;
import com.henninghall.date_picker.props.HeightProp;
@ -11,52 +15,53 @@ import com.henninghall.date_picker.props.LocaleProp;
import com.henninghall.date_picker.props.ModeProp;
import com.henninghall.date_picker.props.TextColorProp;
import com.henninghall.date_picker.ui.UIManager;
import com.henninghall.date_picker.wheels.AmPmWheel;
import java.util.ArrayList;
import java.util.Date;
public class PickerView extends RelativeLayout {
private final View rootView = inflate(getContext(), R.layout.datepicker_view, this);
private final UIManager uiManager;
private State state;
private UIManager uiManager;
private State state = new State();
private ArrayList<String> updatedProps = new ArrayList<>();
public PickerView() {
super(DatePickerManager.context);
state = new State();
uiManager = new UIManager(state, this);
}
public void update() {
if(updatedProps.contains(FadeToColorProp.name)) {
if (didUpdate(VariantProp.name)) {
this.removeAllViewsInLayout();
inflate(getContext(), state.derived.getRootLayout(), this);
uiManager = new UIManager(state, this);
}
if (didUpdate(FadeToColorProp.name)) {
uiManager.updateFadeToColor();
}
if(updatedProps.contains(TextColorProp.name)) {
if (didUpdate(TextColorProp.name)) {
uiManager.updateTextColor();
}
if(updatedProps.contains(ModeProp.name)) {
if (didUpdate(ModeProp.name, VariantProp.name)) {
uiManager.updateWheelVisibility();
}
if(updatedProps.contains(HeightProp.name)) {
if (didUpdate(HeightProp.name)) {
uiManager.updateHeight();
}
if(updatedProps.contains(ModeProp.name) || updatedProps.contains(LocaleProp.name)) {
if (didUpdate(ModeProp.name, LocaleProp.name, VariantProp.name)) {
uiManager.updateWheelOrder();
}
ArrayList<String> noDisplayValueChangeProps = new ArrayList<String>(){{
add(DateProp.name);
add(FadeToColorProp.name);
add(TextColorProp.name);
}};
updatedProps.removeAll(noDisplayValueChangeProps);
if(updatedProps.size() != 0) {
if (didUpdate(DateProp.name, HeightProp.name, LocaleProp.name,
MaximumDateProp.name, MinimumDateProp.name, MinuteIntervalProp.name, ModeProp.name,
UtcProp.name, VariantProp.name
)) {
uiManager.updateDisplayValues();
}
@ -65,6 +70,13 @@ public class PickerView extends RelativeLayout {
updatedProps = new ArrayList<>();
}
private boolean didUpdate(String... propNames) {
for (String propName : propNames) {
if (updatedProps.contains(propName)) return true;
}
return false;
}
public void updateProp(String propName, Dynamic value) {
state.setProp(propName, value);
updatedProps.add(propName);
@ -74,10 +86,6 @@ public class PickerView extends RelativeLayout {
uiManager.scroll(wheelIndex, scrollTimes);
}
public View getRootView(){
return rootView;
}
private final Runnable measureAndLayout = new Runnable() {
@Override
public void run() {
@ -95,5 +103,4 @@ public class PickerView extends RelativeLayout {
}
}

+ 8
- 1
android/src/main/java/com/henninghall/date_picker/State.java View File

@ -2,6 +2,8 @@ package com.henninghall.date_picker;
import com.facebook.react.bridge.Dynamic;
import com.henninghall.date_picker.models.Mode;
import com.henninghall.date_picker.models.Variant;
import com.henninghall.date_picker.props.VariantProp;
import com.henninghall.date_picker.props.DateProp;
import com.henninghall.date_picker.props.FadeToColorProp;
import com.henninghall.date_picker.props.HeightProp;
@ -22,7 +24,7 @@ import java.util.TimeZone;
public class State {
private final DateProp dateProp = new DateProp();
private final Prop modeProp = new ModeProp();
private final ModeProp modeProp = new ModeProp();
private final LocaleProp localeProp = new LocaleProp();
private final FadeToColorProp fadeToColorProp = new FadeToColorProp();
private final TextColorProp textColorProp = new TextColorProp();
@ -31,6 +33,7 @@ public class State {
private final MaximumDateProp maximumDateProp = new MaximumDateProp();
private final UtcProp utcProp = new UtcProp();
private final HeightProp heightProp = new HeightProp();
private final VariantProp variantProp = new VariantProp();
private final HashMap props = new HashMap<String, Prop>() {{
put(DateProp.name, dateProp);
@ -43,6 +46,7 @@ public class State {
put(MaximumDateProp.name, maximumDateProp);
put(UtcProp.name, utcProp);
put(HeightProp.name, heightProp);
put(VariantProp.name, variantProp);
}};
public DerivedData derived;
@ -106,5 +110,8 @@ public class State {
return localeProp.getLanguageTag();
}
public Variant getVariant(){
return variantProp.getValue();
}
}

+ 5
- 0
android/src/main/java/com/henninghall/date_picker/models/Variant.java View File

@ -0,0 +1,5 @@
package com.henninghall.date_picker.models;
public enum Variant {
iosClone, nativeAndroid
}

+ 184
- 0
android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java View File

@ -0,0 +1,184 @@
package com.henninghall.date_picker.pickers;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Paint;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.NumberPicker;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class AndroidNative extends NumberPicker implements Picker {
private Picker.OnValueChangeListener onValueChangedListener;
public AndroidNative(Context context) {
super(context);
}
public AndroidNative(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AndroidNative(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setTextAlign(Paint.Align align) {
}
@Override
public void smoothScrollToValue(int value, boolean needRespond) {
smoothScrollToValue(value);
}
@Override
public void setNormalTextColor(int color) {
// Not needed for this picker. It auto fades the color
}
@Override
public void setSelectedTextColor(int color) {
try {
Field selectorWheelPaintField = getClass().getSuperclass()
.getDeclaredField("mSelectorWheelPaint");
selectorWheelPaintField.setAccessible(true);
((Paint) selectorWheelPaintField.get(this)).setColor(color);
} catch (NoSuchFieldException e) {
Log.w("setSelectedTextColor", e);
} catch (IllegalAccessException e) {
Log.w("setSelectedTextColor", e);
} catch (IllegalArgumentException e) {
Log.w("setSelectedTextColor", e);
}
final int count = getChildCount();
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
if (child instanceof EditText)
((EditText) child).setTextColor(color);
}
invalidate();
}
@Override
public void setShownCount(int count) {
// always 3 date rows -> nothing needs to be done here
}
@Override
public View getView() {
return this;
}
@Override
public void smoothScrollToValue(final int value) {
final AndroidNative self = this;
new Handler().postDelayed(new Runnable() {
public void run() {
int currentValue = self.getValue();
if (value == currentValue) return;
int shortestScrollOption = getShortestScrollOption(currentValue, value);
final int moves = Math.abs(shortestScrollOption);
for (int i = 0; i < moves; i++) {
// need some delay between each scroll step to make sure it scrolls to correct value
changeValueByOne(shortestScrollOption > 0, i * 100, i == moves - 1);
}
}
// since the SCROLL_STATE_IDLE event is dispatched before the wheel actually has stopped
// an extra delay has to be added before starting to scroll to correct value
}, 500);
}
private int getShortestScrollOption(int currentValue, int value) {
final int maxValue = getMaxValue();
int option1 = value - currentValue;
int option2 = maxValue + 1 - Math.abs(option1);
if (getWrapSelectorWheel()) {
return Math.abs(option1) < Math.abs(option2) ? option1 : option2;
}
if (currentValue + option1 > maxValue) return option2;
if (currentValue + option1 < 0) return option2;
return option1;
}
private void changeValueByOne(final NumberPicker higherPicker, final boolean increment) {
boolean success = false;
try {
Method method = getClass().getSuperclass().getDeclaredMethod("changeValueByOne", boolean.class);
method.setAccessible(true);
method.invoke(higherPicker, increment);
success = true;
} catch (final NoSuchMethodException e) {
Log.w("changeValueByOne", e);
} catch (final IllegalArgumentException e) {
Log.w("changeValueByOne", e);
} catch (final IllegalAccessException e) {
Log.w("changeValueByOne", e);
} catch (final InvocationTargetException e) {
Log.w("changeValueByOne", e);
} finally {
if (!success) {
// make step without animation if failed to use reflection method
setValue((getValue() + (increment ? 1 : -1)) % getMaxValue());
}
}
}
private void changeValueByOne(final boolean increment, final int ms, final boolean isLast) {
final AndroidNative self = this;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
changeValueByOne(self, increment);
if (isLast) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
onValueChangedListener.onValueChange();
}
// the delay make sure the wheel has stopped before sending the value change event
}, 500);
}
}
}, ms);
}
@Override
public void setOnValueChangeListenerInScrolling(final OnValueChangeListenerInScrolling listener) {
final Picker self = this;
super.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker numberPicker, int from, int to) {
listener.onValueChangeInScrolling(self, from, to);
}
});
}
@Override
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) {
this.onValueChangedListener = listener;
super.setOnScrollListener(new OnScrollListener() {
int previousState = SCROLL_STATE_IDLE;
@Override
public void onScrollStateChange(NumberPicker numberPicker, int state) {
boolean stoppedScrolling = previousState != SCROLL_STATE_IDLE && state == SCROLL_STATE_IDLE;
if (stoppedScrolling) {
listener.onValueChange();
}
previousState = state;
}
});
}
}

+ 47
- 0
android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java View File

@ -0,0 +1,47 @@
package com.henninghall.date_picker.pickers;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class IosClone extends NumberPickerView implements Picker {
public IosClone(Context context) {
super(context);
}
public IosClone(Context context, AttributeSet attrs) {
super(context, attrs);
}
public IosClone(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setOnValueChangeListenerInScrolling(final Picker.OnValueChangeListenerInScrolling listener) {
final Picker self = this;
super.setOnValueChangeListenerInScrolling(new NumberPickerView.OnValueChangeListenerInScrolling() {
@Override
public void onValueChangeInScrolling(NumberPickerView picker, int oldVal, int newVal) {
listener.onValueChangeInScrolling(self, oldVal, newVal);
}
});
}
@Override
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) {
super.setOnValueChangedListener(new NumberPickerView.OnValueChangeListener() {
@Override
public void onValueChange(NumberPickerView picker, int oldVal, int newVal) {
listener.onValueChange();
}
});
}
@Override
public View getView() {
return this;
}
}

+ 33
- 0
android/src/main/java/com/henninghall/date_picker/pickers/Picker.java View File

@ -0,0 +1,33 @@
package com.henninghall.date_picker.pickers;
import android.graphics.Paint;
import android.view.View;
public interface Picker {
void setTextAlign(Paint.Align align);
void smoothScrollToValue(int value);
void smoothScrollToValue(int value, boolean needRespond);
void setMaxValue(int value);
void setMinValue(int value);
int getMaxValue();
boolean getWrapSelectorWheel();
void setDisplayedValues(String[] value);
int getValue();
void setValue(int value);
void setNormalTextColor(int value);
void setSelectedTextColor(int value);
void setOnValueChangeListenerInScrolling(Picker.OnValueChangeListenerInScrolling listener);
void setOnValueChangedListener(Picker.OnValueChangeListener onValueChangeListener);
void setShownCount(int count);
View getView();
void setVisibility(int visibility);
void setWrapSelectorWheel(boolean wrapSelectorWheel);
interface OnValueChangeListenerInScrolling {
void onValueChangeInScrolling(Picker picker, int oldVal, int newVal);
}
interface OnValueChangeListener {
void onValueChange();
}
}

+ 14
- 0
android/src/main/java/com/henninghall/date_picker/props/VariantProp.java View File

@ -0,0 +1,14 @@
package com.henninghall.date_picker.props;
import com.facebook.react.bridge.Dynamic;
import com.henninghall.date_picker.models.Variant;
public class VariantProp extends Prop<Variant> {
public static final String name = "androidVariant";
@Override
public Variant toValue(Dynamic value){
return Variant.valueOf(value.asString());
}
}

+ 2
- 0
android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java View File

@ -33,6 +33,7 @@ class EmptyWheels {
private ArrayList<NumberPickerView> getAll() {
ArrayList<NumberPickerView> wheels = new ArrayList<>();
if(state.derived.hasNativeStyle()) return wheels;
for (int id: emptyWheelIds) {
NumberPickerView view = (NumberPickerView) rootView.findViewById(id);
wheels.add(view);
@ -41,6 +42,7 @@ class EmptyWheels {
}
void add() {
if(state.derived.hasNativeStyle()) return;
int numberOfVisibleWheels = state.derived.getVisibleWheels().size();
int emptyViewsToAdd = numberOfVisibleWheels + 1;
for (int i = 0; i < emptyViewsToAdd; i++) {

+ 2
- 3
android/src/main/java/com/henninghall/date_picker/ui/UIManager.java View File

@ -25,7 +25,6 @@ public class UIManager {
this.state = state;
this.rootView = rootView;
wheels = new Wheels(state, rootView);
fadingOverlay = new FadingOverlay(state, rootView);
addOnChangeListener();
}
@ -38,6 +37,8 @@ public class UIManager {
}
public void updateFadeToColor(){
if(state.derived.hasNativeStyle()) return;
fadingOverlay = new FadingOverlay(state, rootView);
fadingOverlay.updateColor();
}
@ -78,6 +79,4 @@ public class UIManager {
WheelChangeListener onWheelChangeListener = new WheelChangeListenerImpl(wheels, state, this, rootView);
wheels.applyOnAll(new AddOnChangeListener(onWheelChangeListener));
}
}

+ 2
- 3
android/src/main/java/com/henninghall/date_picker/ui/WheelScroller.java View File

@ -1,13 +1,12 @@
package com.henninghall.date_picker.ui;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.wheels.Wheel;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class WheelScroller {
public void scroll(Wheel wheel, int scrollTimes) {
NumberPickerView picker = wheel.picker;
Picker picker = wheel.picker;
int currentIndex = picker.getValue();
int maxValue = picker.getMaxValue();
boolean isWrapping = picker.getWrapSelectorWheel();

+ 6
- 7
android/src/main/java/com/henninghall/date_picker/ui/Wheels.java View File

@ -2,6 +2,7 @@ package com.henninghall.date_picker.ui;
import android.view.View;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.R;
import com.henninghall.date_picker.State;
import com.henninghall.date_picker.Utils;
@ -24,8 +25,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class Wheels {
private final State state;
@ -60,8 +59,8 @@ public class Wheels {
changeAmPmWhenPassingMidnightOrNoon();
}
private NumberPickerView getPickerWithId(int id){
return (NumberPickerView) rootView.findViewById(id);
private Picker getPickerWithId(int id){
return (Picker) rootView.findViewById(id);
}
private Collection<Wheel> getVisible() {
@ -122,7 +121,7 @@ public class Wheels {
ArrayList<WheelType> wheels = state.derived.getOrderedVisibleWheels();
for (WheelType wheelType : wheels) {
Wheel wheel = getWheel(wheelType);
pickerWrapper.addPicker(wheel.picker);
pickerWrapper.addPicker(wheel.picker.getView());
}
}
@ -135,9 +134,9 @@ public class Wheels {
}
private void changeAmPmWhenPassingMidnightOrNoon() {
hourWheel.picker.setOnValueChangeListenerInScrolling(new NumberPickerView.OnValueChangeListenerInScrolling() {
hourWheel.picker.setOnValueChangeListenerInScrolling(new Picker.OnValueChangeListenerInScrolling() {
@Override
public void onValueChangeInScrolling(NumberPickerView picker, int oldVal, int newVal) {
public void onValueChangeInScrolling(Picker picker, int oldVal, int newVal) {
if(Utils.usesAmPm()){
String oldValue = hourWheel.getValueAtIndex(oldVal);
String newValue = hourWheel.getValueAtIndex(newVal);

+ 3
- 2
android/src/main/java/com/henninghall/date_picker/wheelFunctions/AddOnChangeListener.java View File

@ -1,5 +1,6 @@
package com.henninghall.date_picker.wheelFunctions;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.ui.WheelChangeListener;
import com.henninghall.date_picker.wheels.Wheel;
@ -15,9 +16,9 @@ public class AddOnChangeListener implements WheelFunction {
@Override
public void apply(final Wheel wheel) {
wheel.picker.setOnValueChangedListener(new NumberPickerView.OnValueChangeListener() {
wheel.picker.setOnValueChangedListener(new Picker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPickerView picker, int oldVal, int newVal) {
public void onValueChange() {
onChangeListener.onChange(wheel);
}
});

+ 7
- 3
android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java View File

@ -2,6 +2,7 @@ package com.henninghall.date_picker.wheels;
import android.graphics.Paint;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.State;
import com.henninghall.date_picker.Utils;
import com.henninghall.date_picker.models.Mode;
@ -9,12 +10,10 @@ import com.henninghall.date_picker.models.Mode;
import java.util.ArrayList;
import java.util.Calendar;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class AmPmWheel extends Wheel {
public AmPmWheel(final NumberPickerView picker, State state) {
public AmPmWheel(final Picker picker, State state) {
super(picker, state);
}
@ -36,6 +35,11 @@ public class AmPmWheel extends Wheel {
return Utils.usesAmPm() && state.getMode() != Mode.date;
}
@Override
public boolean wrapSelectorWheel() {
return false;
}
@Override
public String getFormatPattern() {
return Utils.usesAmPm() ? " a " : "";

+ 7
- 3
android/src/main/java/com/henninghall/date_picker/wheels/DateWheel.java View File

@ -5,12 +5,11 @@ import android.graphics.Paint;
import java.util.*;
import com.henninghall.date_picker.*;
import com.henninghall.date_picker.models.Mode;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
import com.henninghall.date_picker.pickers.Picker;
public class DateWheel extends Wheel
{
public DateWheel(final NumberPickerView picker, final State id) {
public DateWheel(final Picker picker, final State id) {
super(picker, id);
}
@ -35,6 +34,11 @@ public class DateWheel extends Wheel
return state.getMode() == Mode.date;
}
@Override
public boolean wrapSelectorWheel() {
return true;
}
@Override
public String getFormatPattern() {
return LocaleUtils.getPatternIncluding("d", state.getLocale());

+ 7
- 5
android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java View File

@ -1,23 +1,20 @@
package com.henninghall.date_picker.wheels;
import android.graphics.Paint;
import android.text.TextUtils;
import com.henninghall.date_picker.DayFormats;
import com.henninghall.date_picker.LocaleUtils;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.State;
import com.henninghall.date_picker.models.Mode;
import com.henninghall.date_picker.Utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class DayWheel extends Wheel {
@ -25,7 +22,7 @@ public class DayWheel extends Wheel {
private static int defaultNumberOfDays = Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_YEAR);
private HashMap<String, String> displayValues;
public DayWheel(NumberPickerView picker, State state) {
public DayWheel(Picker picker, State state) {
super(picker, state);
}
@ -113,6 +110,11 @@ public class DayWheel extends Wheel {
return state.getMode() == Mode.datetime;
}
@Override
public boolean wrapSelectorWheel() {
return false;
}
@Override
public String getFormatPattern() {

+ 7
- 3
android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java View File

@ -2,6 +2,7 @@ package com.henninghall.date_picker.wheels;
import android.graphics.Paint;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.State;
import com.henninghall.date_picker.Utils;
import com.henninghall.date_picker.models.Mode;
@ -9,11 +10,9 @@ import com.henninghall.date_picker.models.Mode;
import java.util.ArrayList;
import java.util.Calendar;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class HourWheel extends Wheel {
public HourWheel(NumberPickerView picker, State id) {
public HourWheel(Picker picker, State id) {
super(picker, id);
}
@ -35,6 +34,11 @@ public class HourWheel extends Wheel {
return state.getMode() != Mode.date;
}
@Override
public boolean wrapSelectorWheel() {
return true;
}
@Override
public String getFormatPattern() {
return Utils.usesAmPm() ? "h": "HH";

+ 7
- 3
android/src/main/java/com/henninghall/date_picker/wheels/MinutesWheel.java View File

@ -2,6 +2,7 @@ package com.henninghall.date_picker.wheels;
import android.graphics.Paint;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.State;
import com.henninghall.date_picker.Utils;
import com.henninghall.date_picker.models.Mode;
@ -9,11 +10,9 @@ import com.henninghall.date_picker.models.Mode;
import java.util.ArrayList;
import java.util.Calendar;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class MinutesWheel extends Wheel {
public MinutesWheel(NumberPickerView picker, State id) {
public MinutesWheel(Picker picker, State id) {
super(picker, id);
}
@ -36,6 +35,11 @@ public class MinutesWheel extends Wheel {
return state.getMode() != Mode.date;
}
@Override
public boolean wrapSelectorWheel() {
return true;
}
@Override
public String getFormatPattern() {
return "mm";

+ 8
- 5
android/src/main/java/com/henninghall/date_picker/wheels/MonthWheel.java View File

@ -5,16 +5,14 @@ import android.graphics.Paint;
import java.util.*;
import com.henninghall.date_picker.*;
import com.henninghall.date_picker.models.Mode;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
import com.henninghall.date_picker.pickers.Picker;
public class MonthWheel extends Wheel
{
public MonthWheel(final NumberPickerView pickerView, final State id) {
super(pickerView, id);
public MonthWheel(final Picker picker, final State id) {
super(picker, id);
}
@Override
public ArrayList<String> getValues() {
ArrayList<String> values = new ArrayList<>();
@ -33,6 +31,11 @@ public class MonthWheel extends Wheel
return state.getMode() == Mode.date;
}
@Override
public boolean wrapSelectorWheel() {
return true;
}
@Override
public String getFormatPattern() {
return "LLLL";

+ 5
- 3
android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java View File

@ -3,7 +3,7 @@ package com.henninghall.date_picker.wheels;
import android.graphics.Paint;
import android.view.View;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.State;
import java.text.SimpleDateFormat;
@ -17,6 +17,7 @@ public abstract class Wheel {
private Calendar userSetValue;
public abstract boolean visible();
public abstract boolean wrapSelectorWheel();
public abstract Paint.Align getTextAlign();
public abstract String getFormatPattern();
public abstract ArrayList<String> getValues();
@ -26,14 +27,15 @@ public abstract class Wheel {
}
private ArrayList<String> values = new ArrayList<>();
public NumberPickerView picker;
public Picker picker;
public SimpleDateFormat format;
public Wheel(NumberPickerView picker, State state) {
public Wheel(Picker picker, State state) {
this.state = state;
this.picker = picker;
this.format = new SimpleDateFormat(getFormatPattern(), state.getLocale());
picker.setTextAlign(getTextAlign());
picker.setWrapSelectorWheel(wrapSelectorWheel());
}
private int getIndexOfDate(Calendar date){

+ 7
- 4
android/src/main/java/com/henninghall/date_picker/wheels/YearWheel.java View File

@ -3,21 +3,19 @@ package com.henninghall.date_picker.wheels;
import android.graphics.Paint;
import com.henninghall.date_picker.LocaleUtils;
import com.henninghall.date_picker.pickers.Picker;
import com.henninghall.date_picker.State;
import com.henninghall.date_picker.models.Mode;
import com.henninghall.date_picker.PickerView;
import java.util.ArrayList;
import java.util.Calendar;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class YearWheel extends Wheel
{
private int defaultStartYear;
private int defaultEndYear;
public YearWheel(final NumberPickerView picker, final State id) {
public YearWheel(final Picker picker, final State id) {
super(picker, id);
this.defaultStartYear = 1900;
this.defaultEndYear = 2100;
@ -61,6 +59,11 @@ public class YearWheel extends Wheel
return state.getMode() == Mode.date;
}
@Override
public boolean wrapSelectorWheel() {
return false;
}
@Override
public Paint.Align getTextAlign() {
return Paint.Align.RIGHT;

android/src/main/res/layout/datepicker_view.xml → android/src/main/res/layout/ios_clone.xml View File

@ -12,7 +12,7 @@
android:layout_height="match_parent"
android:orientation="horizontal"
>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/emptyStart"
android:layout_width="0dp"
android:layout_weight="1"
@ -24,10 +24,9 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="0dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/year"
android:tag="year"
android:layout_width="wrap_content"
@ -36,13 +35,12 @@
custom:npv_RespondChangeOnDetached="false"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="false"
custom:npv_TextColorSelected="#000000"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_DividerColor="#cccccc"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/empty1"
android:layout_width="0dp"
android:layout_weight="1"
@ -54,10 +52,9 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="0dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/month"
android:tag="month"
android:layout_width="wrap_content"
@ -66,13 +63,12 @@
custom:npv_RespondChangeOnDetached="false"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_TextColorSelected="#000000"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_DividerColor="#cccccc"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/empty2"
android:layout_width="0dp"
android:layout_weight="1"
@ -84,10 +80,9 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="0dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/date"
android:tag="date"
android:layout_width="wrap_content"
@ -96,13 +91,12 @@
custom:npv_RespondChangeOnDetached="false"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_TextColorSelected="#000000"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_DividerColor="#cccccc"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/empty3"
android:layout_width="0dp"
android:layout_weight="1"
@ -114,41 +108,38 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="0dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
android:id="@+id/day"
android:tag="day"
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/hour"
android:tag="hour"
android:layout_height="match_parent"
android:layout_width="wrap_content"
custom:npv_ShownCount="5"
custom:npv_DividerColor="#cccccc"
custom:npv_RespondChangeOnDetached="false"
custom:npv_ShownCount="5"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="false"
custom:npv_TextColorSelected="#000000"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_DividerColor="#cccccc"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
android:id="@+id/hour"
android:tag="hour"
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/day"
android:tag="day"
android:layout_height="match_parent"
android:layout_width="wrap_content"
custom:npv_DividerColor="#cccccc"
custom:npv_RespondChangeOnDetached="false"
custom:npv_ShownCount="5"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_TextColorSelected="#000000"
custom:npv_RespondChangeOnDetached="false"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_TextColorSelected="#000000"
custom:npv_TextColorNormal="#aaaaaa"
custom:npv_DividerColor="#cccccc"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/minutes"
android:tag="minutes"
android:layout_width="wrap_content"
@ -160,11 +151,10 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/ampm"
android:tag="ampm"
android:layout_width="wrap_content"
@ -176,10 +166,9 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="3dp"
/>
<cn.carbswang.android.numberpickerview.library.NumberPickerView
<com.henninghall.date_picker.pickers.IosClone
android:id="@+id/emptyEnd"
android:layout_width="0dp"
android:layout_weight="1"
@ -191,7 +180,6 @@
custom:npv_TextColorSelected="#000000"
custom:npv_TextSizeNormal="18dp"
custom:npv_TextSizeSelected="21dp"
custom:npv_WrapSelectorWheel="true"
custom:npv_ItemPaddingHorizontal="0dp"
/>

+ 59
- 0
android/src/main/res/layout/native_picker.xml View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/pickerWrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
>
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/year"
android:theme="@style/android_native_theme"
style="@style/android_native"
android:tag="year" />
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/month"
android:theme="@style/android_native_theme"
style="@style/android_native"
android:tag="month" />
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/date"
android:theme="@style/android_native_theme"
style="@style/android_native_small"
android:tag="date" />
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/day"
android:theme="@style/android_native_theme"
style="@style/android_native"
android:tag="day" />
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/hour"
android:theme="@style/android_native_theme"
style="@style/android_native_small"
android:tag="hour" />
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/minutes"
android:theme="@style/android_native_theme"
style="@style/android_native_small"
android:tag="minutes" />
<com.henninghall.date_picker.pickers.AndroidNative
android:id="@+id/ampm"
android:theme="@style/android_native_theme"
style="@style/android_native_small"
android:tag="ampm" />
</LinearLayout>
</LinearLayout>

+ 14
- 7
android/src/main/res/values/styles.xml View File

@ -1,10 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Dialog_Full_Screen">
<item name="android:windowIsFloating">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:background">@android:color/transparent</item>
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="android_native_theme">
<item name="android:textSize" tools:ignore="SpUsage">17sp</item>
</style>
<style name="android_native">
<item name="android:layout_marginLeft">5dp</item>
<item name="android:layout_marginRight">5dp</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
<item name="android:descendantFocusability">blocksDescendants</item>
</style>
<style name="android_native_small" parent="android_native">
<item name="android:layout_width">40dp</item>
</style>
</resources>

+ 4
- 3
defaultProps.js View File

@ -1,4 +1,5 @@
export default {
mode: 'datetime',
minuteInterval: 1,
}
mode: 'datetime',
minuteInterval: 1,
androidVariant: 'iosClone',
}

BIN
docs/react-native-date-picker-android-native.gif View File

Before After
Width: 454  |  Height: 290  |  Size: 382 KiB

BIN
docs/react-native-date-picker-android.png View File

Before After
Width: 404  |  Height: 256  |  Size: 19 KiB

+ 3
- 0
examples/detox/android/app/src/main/res/values/styles.xml View File

@ -3,6 +3,9 @@
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorControlNormal">#03b6fc</item>
<!-- <item name="android:textColorPrimary">#03b6fc</item> -->
</style>
</resources>

+ 12
- 0
examples/detox/src/examples/Advanced.js View File

@ -13,6 +13,7 @@ import MinuteInterval from '../propPickers/MinuteInterval'
import Scroll from '../propPickers/Scroll'
import CustomPropValue from '../CustomPropValue'
import { readableDate } from '../utils'
import Variant from '../propPickers/Variant'
Date.prototype.addHours = function(h) {
this.setTime(this.getTime() + h * 60 * 60 * 1000)
@ -37,6 +38,7 @@ export default class Advanced extends Component {
timeZoneOffsetInMinutes: undefined,
minuteInterval: 1,
dateString: '',
androidVariant: 'iosClone',
}
render() {
@ -52,6 +54,7 @@ export default class Advanced extends Component {
date={this.state.date}
onDateChange={this.setDate}
onDateStringChange={this.setDateString}
androidVariant={this.state.androidVariant}
locale={this.state.locale}
minuteInterval={this.state.minuteInterval}
minimumDate={this.state.minimumDate}
@ -88,6 +91,15 @@ export default class Advanced extends Component {
/>
),
},
{
name: 'androidVariant',
component: (
<Variant
selected={this.state.androidVariant}
onChange={androidVariant => this.setState({ androidVariant })}
/>
),
},
{
name: 'mode',
component: (

+ 1
- 9
examples/detox/src/propPickers/DateChange.js View File

@ -1,13 +1,5 @@
import React, { Component } from 'react'
import {
Dimensions,
Button,
View,
StyleSheet,
ScrollView,
Text,
TouchableOpacity,
} from 'react-native'
import { Button, Text } from 'react-native'
export default class extends Component {
render() {

+ 18
- 0
examples/detox/src/propPickers/Variant.js View File

@ -0,0 +1,18 @@
import React, { Component } from 'react'
import PropSlider from '../PropSlider'
const data = [{ name: 'iosClone' }, { name: 'nativeAndroid' }]
export default class extends Component {
render() {
return (
<PropSlider
testID={'variant'}
selectedProp={this.props.selected}
onSelect={this.props.onChange}
data={data}
width={100}
/>
)
}
}

+ 6
- 340
examples/detox/yarn.lock View File

@ -689,11 +689,6 @@
xcode "^2.0.0"
xmldoc "^0.4.0"
"@yarnpkg/lockfile@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@ -712,13 +707,6 @@ accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
ansi-align@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
dependencies:
string-width "^2.0.0"
ansi-colors@3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
@ -1004,19 +992,6 @@ bluebird@3.5.x:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
boxen@^1.2.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
dependencies:
ansi-align "^2.0.0"
camelcase "^4.0.0"
chalk "^2.0.1"
cli-boxes "^1.0.0"
string-width "^2.0.0"
term-size "^1.2.0"
widest-line "^2.0.0"
bplist-creator@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45"
@ -1143,7 +1118,7 @@ callsites@^2.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
camelcase@^4.0.0, camelcase@^4.1.0:
camelcase@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
@ -1160,11 +1135,6 @@ capture-exit@^1.2.0:
dependencies:
rsvp "^3.3.3"
capture-stack-trace@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
chalk@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@ -1204,16 +1174,6 @@ chownr@^1.1.1:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
ci-info@^1.5.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
ci-info@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
class-utils@^0.3.5:
version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@ -1224,11 +1184,6 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
cli-boxes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@ -1358,18 +1313,6 @@ concat-stream@^1.6.0:
readable-stream "^2.2.2"
typedarray "^0.0.6"
configstore@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
dependencies:
dot-prop "^4.1.0"
graceful-fs "^4.1.2"
make-dir "^1.0.0"
unique-string "^1.0.0"
write-file-atomic "^2.0.0"
xdg-basedir "^3.0.0"
connect@^3.6.5:
version "3.7.0"
resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
@ -1427,13 +1370,6 @@ cosmiconfig@^5.0.5:
js-yaml "^3.13.1"
parse-json "^4.0.0"
create-error-class@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
dependencies:
capture-stack-trace "^1.0.0"
create-react-class@^15.6.3:
version "15.6.3"
resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
@ -1460,7 +1396,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
cross-spawn@^6.0.0, cross-spawn@^6.0.5:
cross-spawn@^6.0.0:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@ -1471,11 +1407,6 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@ -1602,13 +1533,6 @@ dom-walk@^0.1.0:
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
dot-prop@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
dependencies:
is-obj "^1.0.0"
dtrace-provider@~0.8:
version "0.8.7"
resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz#dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04"
@ -1616,11 +1540,6 @@ dtrace-provider@~0.8:
dependencies:
nan "^2.10.0"
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@ -1979,14 +1898,6 @@ find-up@^2.0.0:
dependencies:
locate-path "^2.0.0"
find-yarn-workspace-root@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==
dependencies:
fs-extra "^4.0.3"
micromatch "^3.1.4"
flat@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
@ -2027,7 +1938,7 @@ fs-extra@^1.0.0:
jsonfile "^2.1.0"
klaw "^1.0.0"
fs-extra@^4.0.2, fs-extra@^4.0.3:
fs-extra@^4.0.2:
version "4.0.3"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
@ -2184,13 +2095,6 @@ glob@^7.1.1, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
global-dirs@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
dependencies:
ini "^1.3.4"
global@^4.3.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
@ -2204,23 +2108,6 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
got@^6.7.1:
version "6.7.1"
resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
dependencies:
create-error-class "^3.0.0"
duplexer3 "^0.1.4"
get-stream "^3.0.0"
is-redirect "^1.0.0"
is-retry-allowed "^1.0.0"
is-stream "^1.0.0"
lowercase-keys "^1.0.0"
safe-buffer "^5.0.1"
timed-out "^4.0.0"
unzip-response "^2.0.1"
url-parse-lax "^1.0.0"
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
version "4.2.1"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d"
@ -2346,11 +2233,6 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
import-lazy@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@ -2445,20 +2327,6 @@ is-callable@^1.1.4:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
is-ci@^1.0.10:
version "1.2.1"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
dependencies:
ci-info "^1.5.0"
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
dependencies:
ci-info "^2.0.0"
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@ -2549,19 +2417,6 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies:
is-extglob "^1.0.0"
is-installed-globally@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
dependencies:
global-dirs "^0.1.0"
is-path-inside "^1.0.0"
is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@ -2581,18 +2436,6 @@ is-number@^4.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
is-path-inside@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
dependencies:
path-is-inside "^1.0.1"
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@ -2615,11 +2458,6 @@ is-promise@^2.1.0:
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@ -2627,12 +2465,7 @@ is-regex@^1.0.4:
dependencies:
has "^1.0.1"
is-retry-allowed@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@ -2812,13 +2645,6 @@ kind-of@^6.0.0, kind-of@^6.0.2:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
klaw-sync@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==
dependencies:
graceful-fs "^4.1.11"
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@ -2826,13 +2652,6 @@ klaw@^1.0.0:
optionalDependencies:
graceful-fs "^4.1.9"
latest-version@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
dependencies:
package-json "^4.0.0"
lcid@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@ -2912,11 +2731,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
lowercase-keys@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
@ -2932,13 +2746,6 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
make-dir@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
dependencies:
pify "^3.0.0"
make-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@ -3855,16 +3662,6 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
package-json@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
dependencies:
got "^6.7.1"
registry-auth-token "^3.0.1"
registry-url "^3.0.3"
semver "^5.1.0"
parse-glob@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
@ -3905,25 +3702,6 @@ pascalcase@^0.1.1:
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
patch-package@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.0.tgz#677de858e352b6ca4e6cb48a6efde2cec9fde566"
integrity sha512-HWlQflaBBMjLBfOWomfolF8aqsFDeNbSNro1JDUgYqnVvPM5OILJ9DQdwIRiKmGaOsmHvhkl1FYkvv1I9r2ZJw==
dependencies:
"@yarnpkg/lockfile" "^1.1.0"
chalk "^2.4.2"
cross-spawn "^6.0.5"
find-yarn-workspace-root "^1.2.1"
fs-extra "^7.0.1"
is-ci "^2.0.0"
klaw-sync "^6.0.0"
minimist "^1.2.0"
rimraf "^2.6.3"
semver "^5.6.0"
slash "^2.0.0"
tmp "^0.0.33"
update-notifier "^2.5.0"
path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@ -3934,11 +3712,6 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-is-inside@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
@ -3961,11 +3734,6 @@ pify@^2.0.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
@ -4022,11 +3790,6 @@ posix-character-classes@^0.1.0:
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
prepend-http@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
@ -4112,7 +3875,7 @@ range-parser@~1.2.1:
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
rc@^1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@ -4313,21 +4076,6 @@ regexpu-core@^4.5.4:
unicode-match-property-ecmascript "^1.0.4"
unicode-match-property-value-ecmascript "^1.1.0"
registry-auth-token@^3.0.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e"
integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==
dependencies:
rc "^1.1.6"
safe-buffer "^5.0.1"
registry-url@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
dependencies:
rc "^1.0.1"
regjsgen@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
@ -4412,13 +4160,6 @@ rimraf@^2.5.4, rimraf@^2.6.1:
dependencies:
glob "^7.1.3"
rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
dependencies:
glob "^7.1.3"
rimraf@~2.2.6:
version "2.2.8"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
@ -4460,7 +4201,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
safe-buffer@^5.1.2:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
@ -4524,13 +4265,6 @@ scheduler@^0.13.3:
loose-envify "^1.1.0"
object-assign "^4.1.1"
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
dependencies:
semver "^5.0.3"
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0:
version "5.7.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
@ -4921,13 +4655,6 @@ tempfile@^2.0.0:
temp-dir "^1.0.0"
uuid "^3.0.1"
term-size@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
dependencies:
execa "^0.7.0"
throat@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
@ -4951,11 +4678,6 @@ time-stamp@^1.0.0:
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
timed-out@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@ -5081,13 +4803,6 @@ union-value@^1.0.0:
is-extendable "^0.1.1"
set-value "^2.0.1"
unique-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
dependencies:
crypto-random-string "^1.0.0"
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@ -5106,39 +4821,11 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
unzip-response@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
update-notifier@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
dependencies:
boxen "^1.2.1"
chalk "^2.0.1"
configstore "^3.0.0"
import-lazy "^2.1.0"
is-ci "^1.0.10"
is-installed-globally "^0.1.0"
is-npm "^1.0.0"
latest-version "^3.0.0"
semver-diff "^2.0.0"
xdg-basedir "^3.0.0"
urix@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
url-parse-lax@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
dependencies:
prepend-http "^1.0.1"
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
@ -5216,13 +4903,6 @@ wide-align@1.1.3, wide-align@^1.1.0:
dependencies:
string-width "^1.0.2 || 2"
widest-line@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
dependencies:
string-width "^2.1.1"
wordwrap@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
@ -5264,15 +4944,6 @@ write-file-atomic@^1.2.0:
imurmurhash "^0.1.4"
slide "^1.1.5"
write-file-atomic@^2.0.0:
version "2.4.3"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
dependencies:
graceful-fs "^4.1.11"
imurmurhash "^0.1.4"
signal-exit "^3.0.2"
ws@^1.1.0, ws@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
@ -5298,11 +4969,6 @@ xcode@^2.0.0:
simple-plist "^1.0.0"
uuid "^3.3.2"
xdg-basedir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
xmlbuilder@^9.0.7:
version "9.0.7"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"

+ 2
- 1
propTypes.js View File

@ -3,6 +3,7 @@ import PropTypes from 'prop-types'
const androidProptypes = {
fadeToColor: PropTypes.string,
androidVariant: PropTypes.oneOf(['iosClone', 'nativeAndroid']),
}
const DateType = PropTypes.instanceOf(Date)
@ -14,7 +15,7 @@ export default {
minimumDate: DateType,
maximumDate: DateType,
mode: PropTypes.oneOf(['date', 'time', 'datetime']),
minuteInterval: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30]),
minuteInterval: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30]),
locale: PropTypes.string,
textColor: PropTypes.string,
timeZoneOffsetInMinutes: PropTypes.number,

Loading…
Cancel
Save