diff --git a/Android/chatinput/build.gradle b/Android/chatinput/build.gradle index 3988f034..6d735e88 100644 --- a/Android/chatinput/build.gradle +++ b/Android/chatinput/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.library' ext { PUBLISH_GROUP_ID = 'cn.jiguang.imui' PUBLISH_ARTIFACT_ID = 'chatinput' - PUBLISH_VERSION = '0.6.3' + PUBLISH_VERSION = '0.6.4' } android { diff --git a/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputStyle.java b/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputStyle.java index 7f8261ff..1588edb0 100644 --- a/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputStyle.java +++ b/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputStyle.java @@ -25,10 +25,10 @@ public class ChatInputStyle extends Style { private String inputHint; private int inputHintColor; - private int inputDefaultPaddingLeft; - private int inputDefaultPaddingRight; - private int inputDefaultPaddingTop; - private int inputDefaultPaddingBottom; + private int inputPaddingLeft; + private int inputPaddingRight; + private int inputPaddingTop; + private int inputPaddingBottom; private int inputCursorDrawable; @@ -80,13 +80,15 @@ public static ChatInputStyle parse(Context context, AttributeSet attrs) { style.sendBtnPressedIcon = typedArray.getResourceId(R.styleable.ChatInputView_sendBtnPressedIcon, R.drawable.aurora_menuitem_send_pres); style.sendCountBg = typedArray.getDrawable(R.styleable.ChatInputView_sendCountBg); style.showSelectAlbumBtn = typedArray.getBoolean(R.styleable.ChatInputView_showSelectAlbum, true); + style.inputPaddingLeft = typedArray.getDimensionPixelSize(R.styleable.ChatInputView_inputPaddingLeft, + style.getDimension(R.dimen.aurora_padding_input_left)); + style.inputPaddingTop = typedArray.getDimensionPixelSize(R.styleable.ChatInputView_inputPaddingTop, + style.getDimension(R.dimen.aurora_padding_input_top)); + style.inputPaddingRight = typedArray.getDimensionPixelSize(R.styleable.ChatInputView_inputPaddingRight, + style.getDimension(R.dimen.aurora_padding_input_right)); + style.inputPaddingBottom = typedArray.getDimensionPixelSize(R.styleable.ChatInputView_inputPaddingBottom, + style.getDimension(R.dimen.aurora_padding_input_bottom)); typedArray.recycle(); - - style.inputDefaultPaddingLeft = style.getDimension(R.dimen.aurora_padding_input_left); - style.inputDefaultPaddingRight = style.getDimension(R.dimen.aurora_padding_input_right); - style.inputDefaultPaddingTop = style.getDimension(R.dimen.aurora_padding_input_top); - style.inputDefaultPaddingBottom = style.getDimension(R.dimen.aurora_padding_input_bottom); - return style; } @@ -181,20 +183,20 @@ public Drawable getSendCountBg() { return this.sendCountBg; } - public int getInputDefaultPaddingLeft() { - return inputDefaultPaddingLeft; + public int getInputPaddingLeft() { + return inputPaddingLeft; } - public int getInputDefaultPaddingRight() { - return inputDefaultPaddingRight; + public int getInputPaddingRight() { + return inputPaddingRight; } - public int getInputDefaultPaddingTop() { - return inputDefaultPaddingTop; + public int getInputPaddingTop() { + return inputPaddingTop; } - public int getInputDefaultPaddingBottom() { - return inputDefaultPaddingBottom; + public int getInputPaddingBottom() { + return inputPaddingBottom; } public boolean getShowSelectAlbum() { diff --git a/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputView.java b/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputView.java index 2a9e3140..1cf9a900 100644 --- a/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputView.java +++ b/Android/chatinput/src/main/java/cn/jiguang/imui/chatinput/ChatInputView.java @@ -324,6 +324,8 @@ private void init(Context context, AttributeSet attrs) { mChatInput.setTextColor(mStyle.getInputTextColor()); mChatInput.setHintTextColor(mStyle.getInputHintColor()); mChatInput.setBackgroundResource(mStyle.getInputEditTextBg()); + mChatInput.setPadding(mStyle.getInputPaddingLeft(), mStyle.getInputPaddingTop(), + mStyle.getInputPaddingRight(), mStyle.getInputPaddingBottom()); mInputMarginLeft.getLayoutParams().width = mStyle.getInputMarginLeft(); mInputMarginRight.getLayoutParams().width = mStyle.getInputMarginRight(); mVoiceBtn.setImageResource(mStyle.getVoiceBtnIcon()); diff --git a/Android/chatinput/src/main/res/values/attrs.xml b/Android/chatinput/src/main/res/values/attrs.xml index c365d301..ef68dcb0 100644 --- a/Android/chatinput/src/main/res/values/attrs.xml +++ b/Android/chatinput/src/main/res/values/attrs.xml @@ -6,6 +6,10 @@ + + + + diff --git a/Android/chatinput/src/main/res/values/dimens.xml b/Android/chatinput/src/main/res/values/dimens.xml index d78ba950..36272c36 100644 --- a/Android/chatinput/src/main/res/values/dimens.xml +++ b/Android/chatinput/src/main/res/values/dimens.xml @@ -11,8 +11,8 @@ 17sp - 16sp - 16sp + 5dp + 5dp 0dp 0dp diff --git a/Android/messagelist/build.gradle b/Android/messagelist/build.gradle index 75e69978..053ec9a8 100644 --- a/Android/messagelist/build.gradle +++ b/Android/messagelist/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.library' ext { PUBLISH_GROUP_ID = 'cn.jiguang.imui' PUBLISH_ARTIFACT_ID = 'messagelist' - PUBLISH_VERSION = '0.5.8' + PUBLISH_VERSION = '0.6.1' } android { diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/EventViewHolder.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/EventViewHolder.java index 7da65d61..c9c87054 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/EventViewHolder.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/EventViewHolder.java @@ -1,21 +1,21 @@ package cn.jiguang.imui.messages; import android.view.View; -import android.widget.TextView; import cn.jiguang.imui.R; import cn.jiguang.imui.commons.models.IMessage; +import cn.jiguang.imui.view.RoundTextView; public class EventViewHolder extends BaseMessageViewHolder implements MsgListAdapter.DefaultMessageViewHolder { - private TextView mEvent; + private RoundTextView mEvent; public EventViewHolder(View itemView, boolean isSender) { super(itemView); - mEvent = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_event); + mEvent = (RoundTextView) itemView.findViewById(R.id.aurora_tv_msgitem_event); } @Override @@ -26,7 +26,11 @@ public void onBind(MESSAGE message) { @Override public void applyStyle(MessageListStyle style) { mEvent.setTextColor(style.getEventTextColor()); + mEvent.setLineSpacing(style.getEventLineSpacingExtra(), 1.0f); + mEvent.setBgColor(style.getEventBgColor()); + mEvent.setBgCornerRadius(style.getEventBgCornerRadius()); mEvent.setTextSize(style.getEventTextSize()); - mEvent.setPadding(style.getEventPadding(), style.getEventPadding(), style.getEventPadding(), style.getEventPadding()); + mEvent.setPadding(style.getEventPaddingLeft(), style.getEventPaddingTop(), + style.getEventPaddingRight(), style.getEventPaddingBottom()); } } diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageList.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageList.java index 9c30e8af..9259249b 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageList.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageList.java @@ -150,8 +150,16 @@ public void setDateTextColor(int color) { mMsgListStyle.setDateTextColor(color); } - public void setDatePadding(int padding) { - mMsgListStyle.setDatePadding(padding); + public void setDatePadding(int left, int top, int right, int bottom) { + mMsgListStyle.setDatePadding(left, top, right, bottom); + } + + public void setDateBgCornerRadius(int radius) { + mMsgListStyle.setDateBgCornerRadius(radius); + } + + public void setDateBgColor(int color) { + mMsgListStyle.setDateBgColor(color); } public void setEventTextColor(int color) { @@ -162,10 +170,6 @@ public void setEventTextSize(float size) { mMsgListStyle.setEventTextSize(size); } - public void setEventTextPadding(int padding) { - mMsgListStyle.setEventTextPadding(padding); - } - public void setAvatarWidth(int width) { mMsgListStyle.setAvatarWidth(width); } @@ -186,6 +190,18 @@ public void setShowReceiverDisplayName(boolean showDisplayName) { mMsgListStyle.setShowReceiverDisplayName(showDisplayName); } + public void setDisplayNameTextSize(float size) { + mMsgListStyle.setDisplayNameTextSize(size); + } + + public void setDisplayNameTextColor(int color) { + mMsgListStyle.setDisplayNameTextColor(color); + } + + public void setDisplayNamePadding(int left, int top, int right, int bottom) { + mMsgListStyle.setDisplayNamePadding(left, top, right, bottom); + } + public void setSendVoiceDrawable(int resId) { mMsgListStyle.setSendVoiceDrawable(resId); } @@ -224,6 +240,38 @@ public void setLineSpacingMultiplier(float mult) { mMsgListStyle.setLineSpacingMultiplier(mult); } + public void setEventBgColor(int color) { + mMsgListStyle.setEventBgColor(color); + } + + public void setEventPadding(int left, int top, int right, int bottom) { + mMsgListStyle.setEventTextPadding(left, top, right, bottom); + } + + public void setEventLineSpacingExtra(int spacingExtra) { + mMsgListStyle.setEventLineSpacingExtra(spacingExtra); + } + + public void setEventBgCornerRadius(int radius) { + mMsgListStyle.setEventBgCornerRadius(radius); + } + + public void setVideoDurationTextColor(int color) { + mMsgListStyle.setVideoDurationTextColor(color); + } + + public void setVideoDurationTextSize(float size) { + mMsgListStyle.setVideoDurationTextSize(size); + } + + public void setVideoMessageRadius(int radius) { + mMsgListStyle.setVideoMessageRadius(radius); + } + + public void setPhotoMessageRadius(int radius) { + mMsgListStyle.setPhotoMessageRadius(radius); + } + @Override public boolean onDown(MotionEvent e) { return false; diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageListStyle.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageListStyle.java index 13c49efb..36ae42e9 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageListStyle.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageListStyle.java @@ -19,10 +19,21 @@ public class MessageListStyle extends Style { private float dateTextSize; private int dateTextColor; - private int datePadding; - private int eventPadding; + private int datePaddingLeft; + private int datePaddingTop; + private int datePaddingRight; + private int datePaddingBottom; + private int dateBgCornerRadius; + private int dateBgColor; + private int eventPaddingLeft; + private int eventPaddingTop; + private int eventPaddingRight; + private int eventPaddingBottom; private float eventTextSize; private int eventTextColor; + private int eventBgColor; + private int eventLineSpacingExtra; + private int eventBgCornerRadius; private String dateFormat; private int avatarWidth; @@ -30,6 +41,12 @@ public class MessageListStyle extends Style { private int avatarRadius; private boolean showSenderDisplayName; private boolean showReceiverDisplayName; + private float displayNameTextSize; + private int displayNameTextColor; + private int displayNamePaddingLeft; + private int displayNamePaddingTop; + private int displayNamePaddingRight; + private int displayNamePaddingBottom; private int receiveBubbleDrawable; private int receiveBubbleColor; private int receiveBubblePressedColor; @@ -57,6 +74,11 @@ public class MessageListStyle extends Style { private int playSendVoiceAnim; private int playReceiveVoiceAnim; + private int videoDurationTextColor; + private float videoDurationTextSize; + private int videoMessageRadius; + private int photoMessageRadius; + // Set bubble's max width, value from 0 to 1. 1 means max width equals with screen width. // Default value is 0.8. private float bubbleMaxWidth; @@ -77,15 +99,35 @@ public static MessageListStyle parse(Context context, AttributeSet attrs) { style.dateTextSize = getSPTextSize(context, dateTextSizePixel); style.dateTextColor = typedArray.getColor(R.styleable.MessageList_dateTextColor, ContextCompat.getColor(context, R.color.aurora_msg_date_text_color)); - style.datePadding = typedArray.getDimensionPixelSize(R.styleable.MessageList_datePadding, - context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_date_text)); + style.datePaddingLeft = typedArray.getDimensionPixelSize(R.styleable.MessageList_datePaddingLeft, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_left_date_text)); + style.datePaddingTop = typedArray.getDimensionPixelSize(R.styleable.MessageList_datePaddingTop, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_top_date_text)); + style.datePaddingRight = typedArray.getDimensionPixelSize(R.styleable.MessageList_datePaddingRight, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_right_date_text)); + style.datePaddingBottom = typedArray.getDimensionPixelSize(R.styleable.MessageList_datePaddingBottom, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_bottom_date_text)); + style.dateBgColor = typedArray.getColor(R.styleable.MessageList_dateBgColor, + ContextCompat.getColor(context, R.color.aurora_msg_date_bg_color)); + style.dateBgCornerRadius = typedArray.getDimensionPixelSize(R.styleable.MessageList_dateCornerRadius, + context.getResources().getDimensionPixelSize(R.dimen.aurora_size_date_bg_radius)); int eventTextSizePixel = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventTextSize, context.getResources().getDimensionPixelSize(R.dimen.aurora_size_event_text)); style.eventTextSize = getSPTextSize(context, eventTextSizePixel); - style.eventPadding = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventPadding, + style.eventPaddingLeft = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventPaddingLeft, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_event_text)); + style.eventPaddingTop = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventPaddingTop, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_event_text)); + style.eventPaddingRight = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventPaddingRight, + context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_event_text)); + style.eventPaddingBottom = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventPaddingBottom, context.getResources().getDimensionPixelSize(R.dimen.aurora_padding_event_text)); style.eventTextColor = typedArray.getColor(R.styleable.MessageList_eventTextColor, ContextCompat.getColor(context, R.color.aurora_msg_event_text_color)); + style.eventBgCornerRadius = typedArray.getDimensionPixelSize(R.styleable.MessageList_eventCornerRadius, + context.getResources().getDimensionPixelSize(R.dimen.aurora_event_bg_corner_radius)); + style.eventBgColor = typedArray.getColor(R.styleable.MessageList_eventBackgroundColor, + ContextCompat.getColor(context, R.color.aurora_event_msg_bg_color)); style.dateFormat = typedArray.getString(R.styleable.MessageList_dateFormat); style.avatarWidth = typedArray.getDimensionPixelSize(R.styleable.MessageList_avatarWidth, @@ -96,6 +138,11 @@ public static MessageListStyle parse(Context context, AttributeSet attrs) { context.getResources().getDimensionPixelSize(R.dimen.aurora_radius_avatar_default)); style.showSenderDisplayName = typedArray.getBoolean(R.styleable.MessageList_showSenderDisplayName, false); style.showReceiverDisplayName = typedArray.getBoolean(R.styleable.MessageList_showReceiverDisplayName, false); + int displayNameTextSize = typedArray.getDimensionPixelSize(R.styleable.MessageList_displayNameTextSize, + context.getResources().getDimensionPixelSize(R.dimen.aurora_size_display_name_text)); + style.displayNameTextSize = getSPTextSize(context, displayNameTextSize); + style.displayNameTextColor = typedArray.getColor(R.styleable.MessageList_displayNameTextColor, + ContextCompat.getColor(context, R.color.aurora_display_name_text_color)); style.receiveBubbleDrawable = typedArray.getResourceId(R.styleable.MessageList_receiveBubbleDrawable, -1); style.receiveBubbleColor = typedArray.getColor(R.styleable.MessageList_receiveBubbleColor, ContextCompat.getColor(context, R.color.aurora_msg_receive_bubble_default_color)); @@ -155,6 +202,15 @@ public static MessageListStyle parse(Context context, AttributeSet attrs) { style.sendPhotoMsgBg = typedArray.getDrawable(R.styleable.MessageList_sendPhotoMsgBg); style.receivePhotoMsgBg = typedArray.getDrawable(R.styleable.MessageList_receivePhotoMsgBg); + style.videoDurationTextColor = typedArray.getColor(R.styleable.MessageList_videoDurationTextColor, + ContextCompat.getColor(context, R.color.aurora_video_message_duration_text_color)); + int videoDurationTextSize = typedArray.getDimensionPixelSize(R.styleable.MessageList_videoDurationTextSize, + context.getResources().getDimensionPixelSize(R.dimen.aurora_size_video_message_duration_text)); + style.videoDurationTextSize = getSPTextSize(context, videoDurationTextSize); + style.photoMessageRadius = typedArray.getDimensionPixelSize(R.styleable.MessageList_photoMessageRadius, + context.getResources().getDimensionPixelSize(R.dimen.aurora_radius_photo_message)); + style.videoMessageRadius = typedArray.getDimensionPixelSize(R.styleable.MessageList_videoMessageRadius, + context.getResources().getDimensionPixelSize(R.dimen.aurora_radius_video_message)); style.sendingProgressDrawable = typedArray.getDrawable(R.styleable.MessageList_sendingProgressDrawable); style.sendingIndeterminateDrawable = typedArray.getDrawable(R.styleable.MessageList_sendingIndeterminateDrawable); typedArray.recycle(); @@ -188,10 +244,6 @@ public int getDateTextColor() { return dateTextColor; } - public int getDatePadding() { - return datePadding; - } - public String getDateFormat() { return dateFormat; } @@ -256,18 +308,6 @@ public void setDateTextColor(int dateTextColor) { this.dateTextColor = dateTextColor; } - public void setDatePadding(int datePadding) { - this.datePadding = datePadding; - } - - public void setEventTextPadding(int padding) { - this.eventPadding = padding; - } - - public int getEventPadding() { - return this.eventPadding; - } - public void setEventTextColor(int eventTextColor) { this.eventTextColor = eventTextColor; } @@ -304,6 +344,45 @@ public void setShowReceiverDisplayName(boolean showReceiverDisplayName) { this.showReceiverDisplayName = showReceiverDisplayName; } + public void setDisplayNameTextSize(float displayNameTextSize) { + this.displayNameTextSize = displayNameTextSize; + } + + public float getDisplayNameTextSize() { + return this.displayNameTextSize; + } + + public void setDisplayNameTextColor(int color) { + this.displayNameTextColor = color; + } + + public int getDisplayNameTextColor() { + return this.displayNameTextColor; + } + + public void setDisplayNamePadding(int left, int top, int right, int bottom) { + this.displayNamePaddingLeft = left; + this.displayNamePaddingTop = top; + this.displayNamePaddingRight = right; + this.displayNamePaddingBottom = bottom; + } + + public int getDisplayNamePaddingLeft() { + return this.displayNamePaddingLeft; + } + + public int getDisplayNamePaddingTop() { + return this.displayNamePaddingTop; + } + + public int getDisplayNamePaddingRight() { + return this.displayNamePaddingRight; + } + + public int getDisplayNamePaddingBottom() { + return this.displayNamePaddingBottom; + } + public void setReceiveBubbleColor(int receiveBubbleColor) { this.receiveBubbleColor = receiveBubbleColor; } @@ -541,4 +620,122 @@ public void setLineSpacingMultiplier(float mult) { public float getLineSpacingMultiplier() { return this.lineSpacingMultiplier; } + + public int getEventBgColor() { + return eventBgColor; + } + + public void setEventBgColor(int color) { + this.eventBgColor = color; + } + + public int getEventLineSpacingExtra() { + return this.eventLineSpacingExtra; + } + + public void setEventLineSpacingExtra(int extra) { + this.eventLineSpacingExtra = extra; + } + + public void setEventBgCornerRadius(int radius) { + this.eventBgCornerRadius = radius; + } + + public int getEventBgCornerRadius() { + return this.eventBgCornerRadius; + } + + public int getDatePaddingLeft() { + return datePaddingLeft; + } + + public void setDatePadding(int left, int top, int right, int bottom) { + this.datePaddingLeft = left; + this.datePaddingTop = top; + this.datePaddingRight = right; + this.datePaddingBottom = bottom; + } + + public int getDatePaddingTop() { + return datePaddingTop; + } + + public int getDatePaddingRight() { + return datePaddingRight; + } + + public int getDatePaddingBottom() { + return datePaddingBottom; + } + + public int getDateBgCornerRadius() { + return dateBgCornerRadius; + } + + public void setDateBgCornerRadius(int radius) { + this.dateBgCornerRadius = radius; + } + + public int getDateBgColor() { + return dateBgColor; + } + + public void setDateBgColor(int color) { + this.dateBgColor = color; + } + + public void setEventTextPadding(int left, int top, int right, int bottom) { + this.eventPaddingLeft = left; + this.eventPaddingTop = top; + this.eventPaddingRight = right; + this.eventPaddingBottom = bottom; + } + + public int getEventPaddingLeft() { + return this.eventPaddingLeft; + } + + public int getEventPaddingTop() { + return this.eventPaddingTop; + } + + public int getEventPaddingRight() { + return this.eventPaddingRight; + } + + public int getEventPaddingBottom() { + return this.eventPaddingBottom; + } + + public void setVideoDurationTextColor(int color) { + this.videoDurationTextColor = color; + } + + public int getVideoDurationTextColor() { + return this.videoDurationTextColor; + } + + public void setVideoDurationTextSize(float size) { + this.videoDurationTextSize = size; + } + + public float getVideoDurationTextSize() { + return this.videoDurationTextSize; + } + + public void setVideoMessageRadius(int radius) { + this.videoMessageRadius = radius; + } + + public int getVideoMessageRadius() { + return this.videoMessageRadius; + } + + public void setPhotoMessageRadius(int radius) { + this.photoMessageRadius = radius; + } + + public int getPhotoMessageRadius() { + return this.photoMessageRadius; + } } diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/PhotoViewHolder.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/PhotoViewHolder.java index 2e890647..5dd3610d 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/PhotoViewHolder.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/PhotoViewHolder.java @@ -12,14 +12,16 @@ import cn.jiguang.imui.R; import cn.jiguang.imui.commons.models.IMessage; import cn.jiguang.imui.view.RoundImageView; +import cn.jiguang.imui.view.RoundTextView; +import cn.jiguang.imui.view.ShapeImageView; public class PhotoViewHolder extends BaseMessageViewHolder implements MsgListAdapter.DefaultMessageViewHolder { private boolean mIsSender; - private TextView mDateTv; + private RoundTextView mDateTv; private TextView mDisplayNameTv; - private ImageView mPhotoIv; + private ShapeImageView mPhotoIv; private RoundImageView mAvatarIv; private ProgressBar mSendingPb; private ImageButton mResendIb; @@ -29,8 +31,8 @@ public class PhotoViewHolder extends BaseMessageViewHo public PhotoViewHolder(View itemView, boolean isSender) { super(itemView); this.mIsSender = isSender; - mDateTv = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); - mPhotoIv = (ImageView) itemView.findViewById(R.id.aurora_iv_msgitem_photo); + mDateTv = (RoundTextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); + mPhotoIv = (ShapeImageView) itemView.findViewById(R.id.aurora_iv_msgitem_photo); mAvatarIv = (RoundImageView) itemView.findViewById(R.id.aurora_iv_msgitem_avatar); if (mIsSender) { mSendingPb = (ProgressBar) itemView.findViewById(R.id.aurora_pb_msgitem_sending); @@ -126,6 +128,10 @@ public void onClick(View v) { public void applyStyle(MessageListStyle style) { mDateTv.setTextSize(style.getDateTextSize()); mDateTv.setTextColor(style.getDateTextColor()); + mDateTv.setPadding(style.getDatePaddingLeft(), style.getDatePaddingTop(), + style.getDatePaddingRight(), style.getDatePaddingBottom()); + mDateTv.setBgCornerRadius(style.getDateBgCornerRadius()); + mDateTv.setBgColor(style.getDateBgColor()); if (mIsSender) { mPhotoIv.setBackground(style.getSendPhotoMsgBg()); if (style.getSendingProgressDrawable() != null) { @@ -147,6 +153,11 @@ public void applyStyle(MessageListStyle style) { } mPhotoIv.setBackground(style.getReceivePhotoMsgBg()); } + mPhotoIv.setBorderRadius(style.getPhotoMessageRadius()); + mDisplayNameTv.setTextSize(style.getDisplayNameTextSize()); + mDisplayNameTv.setTextColor(style.getDisplayNameTextColor()); + mDisplayNameTv.setPadding(style.getDisplayNamePaddingLeft(), style.getDisplayNamePaddingTop(), + style.getDisplayNamePaddingRight(), style.getDisplayNamePaddingBottom()); android.view.ViewGroup.LayoutParams layoutParams = mAvatarIv.getLayoutParams(); layoutParams.width = style.getAvatarWidth(); layoutParams.height = style.getAvatarHeight(); diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/TxtViewHolder.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/TxtViewHolder.java index 82c3c02d..b6048750 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/TxtViewHolder.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/TxtViewHolder.java @@ -11,13 +11,14 @@ import cn.jiguang.imui.R; import cn.jiguang.imui.commons.models.IMessage; import cn.jiguang.imui.view.RoundImageView; +import cn.jiguang.imui.view.RoundTextView; public class TxtViewHolder extends BaseMessageViewHolder implements MsgListAdapter.DefaultMessageViewHolder { private TextView mMsgTv; - private TextView mDateTv; + private RoundTextView mDateTv; private TextView mDisplayNameTv; private RoundImageView mAvatarIv; private ImageButton mResendIb; @@ -28,7 +29,7 @@ public TxtViewHolder(View itemView, boolean isSender) { super(itemView); this.mIsSender = isSender; mMsgTv = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_message); - mDateTv = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); + mDateTv = (RoundTextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); mAvatarIv = (RoundImageView) itemView.findViewById(R.id.aurora_iv_msgitem_avatar); if (isSender) { mDisplayNameTv = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_sender_display_name); @@ -153,8 +154,16 @@ public void applyStyle(MessageListStyle style) { mDisplayNameTv.setVisibility(View.GONE); } } + mDisplayNameTv.setTextSize(style.getDisplayNameTextSize()); + mDisplayNameTv.setTextColor(style.getDisplayNameTextColor()); + mDisplayNameTv.setPadding(style.getDisplayNamePaddingLeft(), style.getDisplayNamePaddingTop(), + style.getDisplayNamePaddingRight(), style.getDisplayNamePaddingBottom()); mDateTv.setTextSize(style.getDateTextSize()); mDateTv.setTextColor(style.getDateTextColor()); + mDateTv.setPadding(style.getDatePaddingLeft(), style.getDatePaddingTop(), + style.getDatePaddingRight(), style.getDatePaddingBottom()); + mDateTv.setBgCornerRadius(style.getDateBgCornerRadius()); + mDateTv.setBgColor(style.getDateBgColor()); android.view.ViewGroup.LayoutParams layoutParams = mAvatarIv.getLayoutParams(); layoutParams.width = style.getAvatarWidth(); diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VideoViewHolder.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VideoViewHolder.java index fda5cb7c..32c2e5d7 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VideoViewHolder.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VideoViewHolder.java @@ -16,12 +16,13 @@ import cn.jiguang.imui.commons.models.IMessage; import cn.jiguang.imui.utils.BitmapCache; import cn.jiguang.imui.view.RoundImageView; +import cn.jiguang.imui.view.RoundTextView; public class VideoViewHolder extends BaseMessageViewHolder implements MsgListAdapter.DefaultMessageViewHolder { - private final TextView mTextDate; + private final RoundTextView mTextDate; private final RoundImageView mImageAvatar; private TextView mDisplayNameTv; private final ImageView mImageCover; @@ -34,7 +35,7 @@ public class VideoViewHolder extends BaseMessageViewHo public VideoViewHolder(View itemView, boolean isSender) { super(itemView); this.mIsSender = isSender; - mTextDate = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); + mTextDate = (RoundTextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); mImageAvatar = (RoundImageView) itemView.findViewById(R.id.aurora_iv_msgitem_avatar); mImageCover = (ImageView) itemView.findViewById(R.id.aurora_iv_msgitem_cover); mImagePlay = (ImageView) itemView.findViewById(R.id.aurora_iv_msgitem_play); @@ -129,6 +130,10 @@ public void onClick(View view) { public void applyStyle(MessageListStyle style) { mTextDate.setTextSize(style.getDateTextSize()); mTextDate.setTextColor(style.getDateTextColor()); + mTextDate.setPadding(style.getDatePaddingLeft(), style.getDatePaddingTop(), + style.getDatePaddingRight(), style.getDatePaddingBottom()); + mTextDate.setBgCornerRadius(style.getDateBgCornerRadius()); + mTextDate.setBgColor(style.getDateBgColor()); if (mIsSender) { if (style.getSendingProgressDrawable() != null) { mSendingPb.setProgressDrawable(style.getSendingProgressDrawable()); @@ -148,6 +153,12 @@ public void applyStyle(MessageListStyle style) { mDisplayNameTv.setVisibility(View.GONE); } } + mTvDuration.setTextColor(style.getVideoDurationTextColor()); + mTvDuration.setTextSize(style.getVideoDurationTextSize()); + mDisplayNameTv.setTextSize(style.getDisplayNameTextSize()); + mDisplayNameTv.setTextColor(style.getDisplayNameTextColor()); + mDisplayNameTv.setPadding(style.getDisplayNamePaddingLeft(), style.getDisplayNamePaddingTop(), + style.getDisplayNamePaddingRight(), style.getDisplayNamePaddingBottom()); android.view.ViewGroup.LayoutParams layoutParams = mImageAvatar.getLayoutParams(); layoutParams.width = style.getAvatarWidth(); diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VoiceViewHolder.java b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VoiceViewHolder.java index a71dddb5..edcfee7e 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VoiceViewHolder.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/messages/VoiceViewHolder.java @@ -17,13 +17,14 @@ import cn.jiguang.imui.R; import cn.jiguang.imui.commons.models.IMessage; import cn.jiguang.imui.view.RoundImageView; +import cn.jiguang.imui.view.RoundTextView; public class VoiceViewHolder extends BaseMessageViewHolder implements MsgListAdapter.DefaultMessageViewHolder, ViewHolderController.ReplayVoiceListener { private boolean mIsSender; private TextView mMsgTv; - private TextView mDateTv; + private RoundTextView mDateTv; private TextView mDisplayNameTv; private RoundImageView mAvatarIv; private ImageView mVoiceIv; @@ -44,7 +45,7 @@ public VoiceViewHolder(View itemView, boolean isSender) { super(itemView); this.mIsSender = isSender; mMsgTv = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_message); - mDateTv = (TextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); + mDateTv = (RoundTextView) itemView.findViewById(R.id.aurora_tv_msgitem_date); mAvatarIv = (RoundImageView) itemView.findViewById(R.id.aurora_iv_msgitem_avatar); mVoiceIv = (ImageView) itemView.findViewById(R.id.aurora_iv_msgitem_voice_anim); mLengthTv = (TextView) itemView.findViewById(R.id.aurora_tv_voice_length); @@ -247,6 +248,10 @@ private void pauseVoice() { public void applyStyle(MessageListStyle style) { mDateTv.setTextSize(style.getDateTextSize()); mDateTv.setTextColor(style.getDateTextColor()); + mDateTv.setPadding(style.getDatePaddingLeft(), style.getDatePaddingTop(), + style.getDatePaddingRight(), style.getDatePaddingBottom()); + mDateTv.setBgCornerRadius(style.getDateBgCornerRadius()); + mDateTv.setBgColor(style.getDateBgColor()); mSendDrawable = style.getSendVoiceDrawable(); mReceiveDrawable = style.getReceiveVoiceDrawable(); mController.setDrawable(mSendDrawable, mReceiveDrawable); @@ -275,6 +280,10 @@ public void applyStyle(MessageListStyle style) { mDisplayNameTv.setVisibility(View.GONE); } } + mDisplayNameTv.setTextSize(style.getDisplayNameTextSize()); + mDisplayNameTv.setTextColor(style.getDisplayNameTextColor()); + mDisplayNameTv.setPadding(style.getDisplayNamePaddingLeft(), style.getDisplayNamePaddingTop(), + style.getDisplayNamePaddingRight(), style.getDisplayNamePaddingBottom()); android.view.ViewGroup.LayoutParams layoutParams = mAvatarIv.getLayoutParams(); layoutParams.width = style.getAvatarWidth(); diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/view/RoundTextView.java b/Android/messagelist/src/main/java/cn/jiguang/imui/view/RoundTextView.java new file mode 100644 index 00000000..628946d4 --- /dev/null +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/view/RoundTextView.java @@ -0,0 +1,71 @@ +package cn.jiguang.imui.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.support.annotation.Nullable; +import android.support.v7.widget.AppCompatTextView; +import android.util.AttributeSet; + +import cn.jiguang.imui.R; + + +public class RoundTextView extends AppCompatTextView { + + private int mBgColor; + private int mCornerRadius; + private Paint mPaint; + + public RoundTextView(Context context) { + super(context); + init(context, null); + } + + public RoundTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public RoundTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attributeSet) { + try { + TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.RoundTextView); + mBgColor = typedArray.getColor(R.styleable.RoundTextView_backgroundColor, + getResources().getColor(R.color.aurora_event_msg_bg_color)); + mCornerRadius = typedArray.getDimensionPixelSize(R.styleable.RoundTextView_cornerRadius, + getResources().getDimensionPixelSize(R.dimen.aurora_event_bg_corner_radius)); + mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onDraw(Canvas canvas) { + if (this.getMeasuredWidth() <= 0 || this.getMeasuredHeight() <= 0) { + return; + } + mPaint.setAntiAlias(true); + mPaint.setColor(mBgColor); + + RectF rectF = new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()); + canvas.drawRoundRect(rectF, mCornerRadius, mCornerRadius, mPaint); + super.onDraw(canvas); + } + + public void setBgCornerRadius(int radius) { + mCornerRadius = radius; + invalidate(); + } + + public void setBgColor(int color) { + mBgColor = color; + invalidate(); + } +} diff --git a/Android/messagelist/src/main/java/cn/jiguang/imui/view/ShapeImageView.java b/Android/messagelist/src/main/java/cn/jiguang/imui/view/ShapeImageView.java index 42cddf92..7c5a4186 100644 --- a/Android/messagelist/src/main/java/cn/jiguang/imui/view/ShapeImageView.java +++ b/Android/messagelist/src/main/java/cn/jiguang/imui/view/ShapeImageView.java @@ -42,7 +42,7 @@ private void init(AttributeSet attrs) { setLayerType(LAYER_TYPE_HARDWARE, null); if (attrs != null) { TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MessageList); - mRadius = a.getDimension(R.styleable.MessageList_videomessage_radius, 0); + mRadius = a.getDimension(R.styleable.MessageList_photoMessageRadius, 0); a.recycle(); } mPaint = new Paint(); @@ -73,4 +73,9 @@ protected void onDraw(Canvas canvas) { } canvas.restoreToCount(saveCount); } + + public void setBorderRadius(int radius) { + this.mRadius = radius; + invalidate(); + } } diff --git a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_1.png b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_1.png index 244527f2..41631fa2 100644 Binary files a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_1.png and b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_1.png differ diff --git a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_2.png b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_2.png index a539b117..b57205ea 100644 Binary files a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_2.png and b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_2.png differ diff --git a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_3.png b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_3.png index 49e9af31..ab462a9b 100644 Binary files a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_3.png and b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_receivevoice_receive_3.png differ diff --git a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_1.png b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_1.png index 2afd3c0a..6046acaf 100644 Binary files a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_1.png and b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_1.png differ diff --git a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_2.png b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_2.png index a16a52b3..3a88fac8 100644 Binary files a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_2.png and b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_2.png differ diff --git a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_3.png b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_3.png index 1f286f19..38190b83 100644 Binary files a/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_3.png and b/Android/messagelist/src/main/res/drawable-xhdpi/aurora_sendvoice_send_3.png differ diff --git a/Android/messagelist/src/main/res/drawable/aurora_bg_imagemsg_default.xml b/Android/messagelist/src/main/res/drawable/aurora_bg_imagemsg_default.xml deleted file mode 100644 index 6a696a5e..00000000 --- a/Android/messagelist/src/main/res/drawable/aurora_bg_imagemsg_default.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/messagelist/src/main/res/layout/item_event_message.xml b/Android/messagelist/src/main/res/layout/item_event_message.xml index 8beb2cd1..5e2215f3 100644 --- a/Android/messagelist/src/main/res/layout/item_event_message.xml +++ b/Android/messagelist/src/main/res/layout/item_event_message.xml @@ -2,15 +2,17 @@ - - @@ -34,9 +34,8 @@ android:layout_below="@id/aurora_tv_msgitem_receiver_display_name" android:layout_centerVertical="true" android:layout_toRightOf="@id/aurora_iv_msgitem_avatar" - android:background="@drawable/aurora_bg_imagemsg_default" android:src="@drawable/aurora_picture_not_found" - app:videomessage_radius="8dp" + app:photoMessageRadius="8dp" /> - diff --git a/Android/messagelist/src/main/res/layout/item_receive_video.xml b/Android/messagelist/src/main/res/layout/item_receive_video.xml index 02f7645f..1d6a8409 100644 --- a/Android/messagelist/src/main/res/layout/item_receive_video.xml +++ b/Android/messagelist/src/main/res/layout/item_receive_video.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" style="@style/aurora_msgitem_send_style"> - @@ -32,13 +32,13 @@ android:layout_toEndOf="@id/aurora_iv_msgitem_avatar" android:layout_toRightOf="@id/aurora_iv_msgitem_avatar"> - + app:videoMessageRadius="8dp" /> + android:textColor="@color/aurora_video_message_duration_text_color" + android:textSize="@dimen/aurora_size_video_message_duration_text" /> - diff --git a/Android/messagelist/src/main/res/layout/item_send_photo.xml b/Android/messagelist/src/main/res/layout/item_send_photo.xml index a002ceb3..d866f804 100644 --- a/Android/messagelist/src/main/res/layout/item_send_photo.xml +++ b/Android/messagelist/src/main/res/layout/item_send_photo.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" style="@style/aurora_msgitem_send_style"> - @@ -53,11 +53,10 @@ android:layout_below="@+id/aurora_tv_msgitem_sender_display_name" android:layout_toLeftOf="@+id/aurora_iv_msgitem_avatar" android:layout_marginRight="8dp" - android:background="@drawable/aurora_bg_imagemsg_default" android:maxHeight="200dp" android:maxWidth="200dp" android:src="@drawable/aurora_picture_not_found" - app:videomessage_radius="8dp" + app:photoMessageRadius="8dp" /> - diff --git a/Android/messagelist/src/main/res/layout/item_send_video.xml b/Android/messagelist/src/main/res/layout/item_send_video.xml index 7fd8a811..2087d743 100644 --- a/Android/messagelist/src/main/res/layout/item_send_video.xml +++ b/Android/messagelist/src/main/res/layout/item_send_video.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" style="@style/aurora_msgitem_send_style"> - @@ -38,13 +38,13 @@ android:layout_toStartOf="@+id/aurora_iv_msgitem_avatar" android:background="@drawable/aurora_bg_video"> - + app:videoMessageRadius="8dp" /> diff --git a/Android/messagelist/src/main/res/layout/item_send_voice.xml b/Android/messagelist/src/main/res/layout/item_send_voice.xml index 19c7903e..f9497236 100644 --- a/Android/messagelist/src/main/res/layout/item_send_voice.xml +++ b/Android/messagelist/src/main/res/layout/item_send_voice.xml @@ -2,7 +2,7 @@ - diff --git a/Android/messagelist/src/main/res/values/attrs.xml b/Android/messagelist/src/main/res/values/attrs.xml index 5ab5e773..35daf335 100644 --- a/Android/messagelist/src/main/res/values/attrs.xml +++ b/Android/messagelist/src/main/res/values/attrs.xml @@ -7,16 +7,29 @@ - + + + + + + - + + + + + + + + + @@ -52,8 +65,11 @@ + - + + + @@ -64,4 +80,9 @@ + + + + + \ No newline at end of file diff --git a/Android/messagelist/src/main/res/values/colors.xml b/Android/messagelist/src/main/res/values/colors.xml index bf01429a..a9ae7c09 100644 --- a/Android/messagelist/src/main/res/values/colors.xml +++ b/Android/messagelist/src/main/res/values/colors.xml @@ -6,8 +6,10 @@ #ebebeb Message List<--> - #4e4e4e + #ffffff + #cecece #ffffff + #545454 #2977fa #005af2 #0e63f0 @@ -16,5 +18,7 @@ #c9d3dd #d3d9df #7587a8 + #cecece + #545454 diff --git a/Android/messagelist/src/main/res/values/dimens.xml b/Android/messagelist/src/main/res/values/dimens.xml index f09a71e4..1939df1a 100644 --- a/Android/messagelist/src/main/res/values/dimens.xml +++ b/Android/messagelist/src/main/res/values/dimens.xml @@ -6,12 +6,17 @@ 50dp Message List<--> + 5dp 16sp 12sp - 5dp + 5dp + 5dp + 5dp + 5dp 5dp 50dp 50dp + 12sp 5dp 18sp 15dp @@ -23,8 +28,10 @@ 5dp 15dp 5dp - 5dp 5dp - + 5dp + 8dp + 8dp + 12sp \ No newline at end of file diff --git a/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/BrowserImageActivity.java b/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/BrowserImageActivity.java index fa5580c3..56158043 100644 --- a/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/BrowserImageActivity.java +++ b/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/BrowserImageActivity.java @@ -119,6 +119,22 @@ public Object instantiateItem(ViewGroup container, int position) { container.addView(photoView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); return photoView; } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); + } + + @Override + public int getItemPosition(Object object) { + View view = (View) object; + int currentPage = mViewPager.getCurrentItem(); + if (currentPage == (Integer) view.getTag()) { + return POSITION_NONE; + } else { + return POSITION_UNCHANGED; + } + } }; diff --git a/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/MessageListActivity.java b/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/MessageListActivity.java index 0de13cdb..98ccf558 100644 --- a/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/MessageListActivity.java +++ b/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/messages/MessageListActivity.java @@ -505,6 +505,14 @@ public void onStatusViewClick(MyMessage message) { MyMessage message = new MyMessage("Hello World", IMessage.MessageType.RECEIVE_TEXT.ordinal()); message.setUserInfo(new DefaultUser("0", "Deadpool", "R.drawable.deadpool")); mAdapter.addToStart(message, true); + MyMessage voiceMessage = new MyMessage("", IMessage.MessageType.RECEIVE_VOICE.ordinal()); + voiceMessage.setUserInfo(new DefaultUser("0", "Deadpool", "R.drawable.deadpool")); + voiceMessage.setMediaFilePath(Environment.getExternalStorageDirectory().getAbsolutePath() + "/voice/2018-02-28-105103.m4a"); + mAdapter.addToStart(voiceMessage, true); + MyMessage sendVoiceMsg = new MyMessage("", IMessage.MessageType.SEND_VOICE.ordinal()); + sendVoiceMsg.setUserInfo(new DefaultUser("1", "Ironman", "R.drawable.ironman")); + sendVoiceMsg.setMediaFilePath(Environment.getExternalStorageDirectory().getAbsolutePath() + "/voice/2018-02-28-105103.m4a"); + mAdapter.addToStart(sendVoiceMsg, true); MyMessage eventMsg = new MyMessage("haha", IMessage.MessageType.EVENT.ordinal()); mAdapter.addToStart(eventMsg, true); mAdapter.addToEnd(mData); @@ -564,7 +572,6 @@ public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: ChatInputView chatInputView = mChatView.getChatInputView(); - if (view.getId() == chatInputView.getInputView().getId()) { scrollToBottom(); if (chatInputView.getMenuState() == View.VISIBLE diff --git a/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/views/ChatView.java b/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/views/ChatView.java index 26d41c75..aa8d0ec2 100644 --- a/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/views/ChatView.java +++ b/Android/sample/exampleui/src/main/java/imui/jiguang/cn/imuisample/views/ChatView.java @@ -1,6 +1,7 @@ package imui.jiguang.cn.imuisample.views; import android.content.Context; +import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.widget.ImageButton; @@ -57,7 +58,11 @@ public void initModule() { header.setPadding(0, DisplayUtil.dp2px(getContext(),15), 0, DisplayUtil.dp2px(getContext(),10)); header.setPtrFrameLayout(mPtrLayout); - mMsgList = (MessageList) findViewById(R.id.msg_list); +// mMsgList.setDateBgColor(Color.parseColor("#FF4081")); +// mMsgList.setDatePadding(5, 10, 10, 5); +// mMsgList.setEventTextPadding(5); +// mMsgList.setEventBgColor(Color.parseColor("#34A350")); +// mMsgList.setDateBgCornerRadius(15); mMsgList.setHasFixedSize(true); mPtrLayout.setLoadingMinTime(1000); mPtrLayout.setDurationToCloseHeader(1500); diff --git a/ReactNative/android/build.gradle b/ReactNative/android/build.gradle index 4ce2b15d..05d223fe 100644 --- a/ReactNative/android/build.gradle +++ b/ReactNative/android/build.gradle @@ -27,8 +27,8 @@ dependencies { androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'cn.jiguang.imui:messagelist:0.5.8' - compile 'cn.jiguang.imui:chatinput:0.6.2' + compile 'cn.jiguang.imui:messagelist:0.6.1' + compile 'cn.jiguang.imui:chatinput:0.6.3' compile 'org.greenrobot:eventbus:3.0.0' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.facebook.react:react-native:+' diff --git a/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactChatInputManager.java b/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactChatInputManager.java index 5188074c..cf4a81ef 100644 --- a/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactChatInputManager.java +++ b/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactChatInputManager.java @@ -22,6 +22,7 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeArray; @@ -54,6 +55,7 @@ import cn.jiguang.imui.messagelist.event.OnTouchMsgListEvent; import cn.jiguang.imui.messagelist.event.ScrollEvent; import cn.jiguang.imui.messagelist.event.StopPlayVoiceEvent; +import cn.jiguang.imui.utils.DisplayUtil; /** * Created by caiyaoguan on 2017/5/22. @@ -159,7 +161,7 @@ public void afterTextChanged(Editable s) { double layoutHeight = calculateMenuHeight(); mInitState = false; event.putDouble("height", layoutHeight); - editText.setLayoutParams(new LinearLayout.LayoutParams(mWidth, (int)(mCurrentInputHeight))); + editText.setLayoutParams(new LinearLayout.LayoutParams(editText.getWidth(), (int)(mCurrentInputHeight))); reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(mChatInput.getId(), ON_INPUT_SIZE_CHANGED_EVENT, event); } }); @@ -436,6 +438,37 @@ public void showSelectAlbumBtn(ChatInputView chatInputView, boolean flag) { chatInputView.getSelectAlbumBtn().setVisibility(flag? View.VISIBLE: View.GONE); } + @ReactProp(name = "inputPadding") + public void setEditTextPadding(ChatInputView chatInputView, ReadableMap map) { + try { + int left = map.getInt("left"); + int top = map.getInt("top"); + int right = map.getInt("right"); + int bottom = map.getInt("bottom"); + chatInputView.getInputView().setPadding(DisplayUtil.dp2px(mContext, left), + DisplayUtil.dp2px(mContext, top), DisplayUtil.dp2px(mContext, right), + DisplayUtil.dp2px(mContext, bottom)); + } catch (Exception e) { + Log.e(REACT_CHAT_INPUT, "Input padding key error"); + } + } + + @ReactProp(name = "inputTextColor") + public void setEditTextTextColor(ChatInputView chatInputView, String color) { + int colorRes = Color.parseColor(color); + chatInputView.getInputView().setTextColor(colorRes); + } + + @ReactProp(name = "inputTextSize") + public void setEditTextTextSize(ChatInputView chatInputView, int size) { + chatInputView.getInputView().setTextSize(size); + } + + @ReactProp(name = "inputTextLineHeight") + public void setEditTextLineSpacing(ChatInputView chatInputView, int spacing) { + chatInputView.getInputView().setLineSpacing(spacing, 1.0f); + } + @Override public Map getExportedCustomDirectEventTypeConstants() { return MapBuilder.builder() diff --git a/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactMsgListManager.java b/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactMsgListManager.java index ed56ab70..bccbf3b9 100644 --- a/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactMsgListManager.java +++ b/ReactNative/android/src/main/java/cn/jiguang/imui/messagelist/ReactMsgListManager.java @@ -27,6 +27,7 @@ import com.bumptech.glide.request.target.Target; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; @@ -350,10 +351,10 @@ private int dip2px(float dpValue) { return (int) (dpValue * scale + 0.5f); } - private int dip2sp(int dip) { + private float dip2sp(int dip) { int px = dip2px(dip); float scale = mContext.getResources().getDisplayMetrics().scaledDensity; - return (int) (px / scale); + return px / scale; } @ReactProp(name = "receiveBubblePadding") @@ -376,8 +377,22 @@ public void setDateTextColor(PullToRefreshLayout root, String color) { } @ReactProp(name = "datePadding") - public void setDatePadding(PullToRefreshLayout root, int padding) { - mMessageList.setDatePadding(dip2px(padding)); + public void setDatePadding(PullToRefreshLayout root, ReadableMap map) { + int left = map.getInt("left"); + int top = map.getInt("top"); + int right = map.getInt("right"); + int bottom = map.getInt("bottom"); + mMessageList.setDatePadding(dip2px(left), dip2px(top), dip2px(right), dip2px(bottom)); + } + + @ReactProp(name = "dateBackgroundColor") + public void setDateBgColor(PullToRefreshLayout root, String color) { + mMessageList.setDateBgColor(Color.parseColor(color)); + } + + @ReactProp(name = "dateCornerRadius") + public void setDateBgCornerRadius(PullToRefreshLayout root, int radius) { + mMessageList.setDateBgCornerRadius(dip2px(radius)); } @ReactProp(name = "avatarSize") @@ -386,6 +401,11 @@ public void setAvatarWidth(PullToRefreshLayout root, ReadableMap map) { mMessageList.setAvatarHeight(dip2px(map.getInt("height"))); } + @ReactProp(name = "avatarCornerRadius") + public void setAvatarCornerRadius(PullToRefreshLayout root, int radius) { + mMessageList.setAvatarRadius(radius); + } + /** * if showDisplayName equals 1, then show display name. * @@ -408,27 +428,66 @@ public void setShowSenderDisplayName(PullToRefreshLayout root, boolean isShowDis mMessageList.setShowSenderDisplayName(isShowDisplayName); } + @ReactProp(name = "displayNameTextSize") + public void setDisplayNameTextSize(PullToRefreshLayout root, int size) { + mMessageList.setDisplayNameTextSize(dip2sp(size)); + } + + @ReactProp(name = "displayNameTextColor") + public void setDisplayNameTextColor(PullToRefreshLayout root, String color) { + mMessageList.setDisplayNameTextColor(Color.parseColor(color)); + } + + @ReactProp(name = "displayNamePadding") + public void setDisplayNamePadding(PullToRefreshLayout root, ReadableMap map) { + int left = map.getInt("left"); + int top = map.getInt("top"); + int right = map.getInt("right"); + int bottom = map.getInt("bottom"); + mMessageList.setDatePadding(dip2px(left), dip2px(top), dip2px(right), dip2px(bottom)); + } + @ReactProp(name = "isAllowPullToRefresh") public void isAllowPullToRefresh(PullToRefreshLayout root, boolean flag) { mMessageList.forbidScrollToRefresh(!flag); + root.setEnabledNextPtrAtOnce(false); } - @ReactProp(name = "eventMsgTxtColor") + @ReactProp(name = "eventTextColor") public void setEventTextColor(PullToRefreshLayout root, String color) { int colorRes = Color.parseColor(color); mMessageList.setEventTextColor(colorRes); } - @ReactProp(name = "eventMsgTxtPadding") - public void setEventTextPadding(PullToRefreshLayout root, int padding) { - mMessageList.setEventTextPadding(dip2px(padding)); + @ReactProp(name = "eventTextPadding") + public void setEventTextPadding(PullToRefreshLayout root, ReadableMap map) { + int left = map.getInt("left"); + int top = map.getInt("top"); + int right = map.getInt("right"); + int bottom = map.getInt("bottom"); + mMessageList.setEventPadding(dip2px(left), dip2px(top), dip2px(right), dip2px(bottom)); + } + + @ReactProp(name = "eventBackgroundColor") + public void setEventBgColor(PullToRefreshLayout root, String color) { + mMessageList.setEventBgColor(Color.parseColor(color)); } - @ReactProp(name = "eventMsgTxtSize") + @ReactProp(name = "eventCornerRadius") + public void setEventBgCornerRadius(PullToRefreshLayout root, int radius) { + mMessageList.setEventBgCornerRadius(dip2px(radius)); + } + + @ReactProp(name = "eventTextSize") public void setEventTextSize(PullToRefreshLayout root, int size) { mMessageList.setEventTextSize(dip2sp(size)); } + @ReactProp(name = "eventTextLineHeight") + public void setEventTextLineSpacing(PullToRefreshLayout root, int spacing) { + mMessageList.setEventLineSpacingExtra(dip2px(spacing)); + } + @ReactProp(name = "maxBubbleWidth") public void setBubbleMaxWidth(PullToRefreshLayout root, float maxSize) { mMessageList.setBubbleMaxWidth(maxSize); @@ -440,6 +499,31 @@ public void setBackgroundColor(PullToRefreshLayout layout, String color) { layout.setBackgroundColor(colorRes); } + @ReactProp(name = "messageTextLineHeight") + public void setMessageTextLineSpacing(PullToRefreshLayout root, int spacing) { + mMessageList.setLineSpacingExtra(dip2px(spacing)); + } + + @ReactProp(name = "videoMessageRadius") + public void setVideoMessageRadius(int radius) { + mMessageList.setVideoMessageRadius(dip2px(radius)); + } + + @ReactProp(name = "videoDurationTextColor") + public void setVideoDurationTextColor(String color) { + mMessageList.setVideoDurationTextColor(Color.parseColor(color)); + } + + @ReactProp(name = "videoDurationTextSize") + public void setVideoDurationTextSize(int size) { + mMessageList.setVideoDurationTextSize(dip2sp(size)); + } + + @ReactProp(name = "photoMessageRadius") + public void setPhotoMessageRadius(int radius) { + mMessageList.setPhotoMessageRadius(dip2px(radius)); + } + @SuppressWarnings("unchecked") private BroadcastReceiver RCTMsgListReceiver = new BroadcastReceiver() { @Override diff --git a/ReactNative/chatinput.android.js b/ReactNative/chatinput.android.js index efd77f58..41b69145 100644 --- a/ReactNative/chatinput.android.js +++ b/ReactNative/chatinput.android.js @@ -3,6 +3,7 @@ import React from 'react'; import ReactNative from 'react-native'; import PropTypes from 'prop-types'; +import {ViewPropTypes} from 'react-native'; var { Component, @@ -233,7 +234,11 @@ ChatInput.propTypes = { inputViewHeight: PropTypes.number, onClickSelectAlbum: PropTypes.func, showSelectAlbumBtn: PropTypes.bool, - ...View.propTypes + inputPadding: PropTypes.object, + inputTextColor: PropTypes.string, + inputTextSize: PropTypes.number, + inputTextLineHeight: PropTypes.number, + ...ViewPropTypes }; var RCTChatInput = requireNativeComponent('RCTChatInput', ChatInput); \ No newline at end of file diff --git a/ReactNative/chatinput.ios.js b/ReactNative/chatinput.ios.js index d9a929cd..4a94b58c 100644 --- a/ReactNative/chatinput.ios.js +++ b/ReactNative/chatinput.ios.js @@ -3,6 +3,7 @@ import React from 'react'; import ReactNative from 'react-native'; import PropTypes from 'prop-types'; +import {ViewPropTypes} from 'react-native'; var { Component, @@ -10,7 +11,6 @@ var { var { StyleSheet, - ViewPropTypes, requireNativeComponent, } = ReactNative; @@ -177,6 +177,10 @@ ChatInput.propTypes = { onShowKeyboard: PropTypes.func, onSizeChange: PropTypes.func, galleryScale: PropTypes.number, + inputPadding: PropTypes.object, + inputTextColor: PropTypes.string, + inputTextSize: PropTypes.number, + inputTextLineHeight: PropTypes.number, ...ViewPropTypes }; diff --git a/ReactNative/docs/APIs.md b/ReactNative/docs/APIs.md index 0e052667..93f1a250 100644 --- a/ReactNative/docs/APIs.md +++ b/ReactNative/docs/APIs.md @@ -55,15 +55,34 @@ Refer to iOS,Android example - [dateTextSize](#datetextsize) - [dateTextColor](#datetextcolor) - [datePadding](#datepadding) + - [dateBackgroundColor](#dateBackgroundColor) + - [dateCornerRadius](#dateCornerRadius) - [avatarSize](#avatarsize) - [avatarCornerRadius](#avatarcornerradius) - [isShowDisplayName](#isShowdisplayname) + - [isShowIncomingDisplayName](#isShowIncomingDisplayName) + - [isShowOutgoingDisplayName](#isShowOutgoingDisplayName) + - [displayNameTextSize](#displayNameTextSize) + - [displayNameTextColor](#displayNameTextColor) + - [displayNamePadding](#displayNamePadding) + - [eventTextColor](#eventTextColor) + - [eventTextSize](#eventTextSize) + - [eventTextPadding](#eventTextPadding) + - [eventBackgroundColor](#eventBackgroundColor) + - [eventCornerRadius](#eventCornerRadius) + - [eventTextLineHeight](#eventTextLineHeight) - [messageListBackgroundColor](#messagelistbackgroundcolor) + - [maxBubbleWidth](#maxBubbleWidth) + - [messageTextLineHeight](#messageTextLineHeight) - [isAllowPullToRefresh](#isallowpulltorefresh) - [ChatInput](#chatinput) - [Props customizable style]() - [chatInputBackgroupColor](#chatInputbackgroupcolor) - [showSelectAlbumBtn](#showSelectAlbumBtn) + - [inputPadding](#inputPadding) + - [inputTextColor](#inputTextColor) + - [inputTextSize](#inputTextSize) + - [inputTextLineHeight](#inputTextLineHeight) - [Props Event]() - [onSendText](#onsendtext) - [onSendGalleryFile](#onsendgalleryfile) @@ -386,9 +405,31 @@ Set date text color of message, ```dateTextColor="#000000"```。 #### datePadding -**PropTypes.number:** +**PropTypes.object:** `{ left: number, top: number, right: number, bottom: number}` + +Set date padding. + +Example: `datePadding={left: 5, top: 10, right: 5, bottom: 10}` + +------ + +#### dateBackgroundColor + +**PropTypes.string** + +Set the background color of date. + +Example: `dateBackgroundColor={"#cecece"}` + +------ + +#### dateCornerRadius + +**PropTypes.number** + +Set the background corner radius of date. -Set date padding, note this padding type is not an object, means left, top, right and bottom padding is same. +Example: `dateCornerRadius={5}` ------ @@ -416,28 +457,91 @@ Example: ```avatarCornerRadius = {6}```。 **PropTypes.bool:** -Show sender's display name or not. +Show display name or not. Example: ```isShowDisplayName={ture}```。 ------ +#### isShowIncomingDisplayName + +**PropTypes.bool:** + +Set Show receiver's display name or not. + +Example: `isShowIncomingDisplayName={true}` + +------ + +#### isShowOutgoingDisplayName + +**PropTypes.bool:** + +Set show sender's display name or not. + +Example: `isShowOutgoingDisplayName={false}` + +------ + +#### displayNameTextSize + +**PropTypes.number** + +Set the text size of display name. + +Example: `displayNameTextSize={14}` + + + +------ + +#### displayNameTextColor + +**PropTypes.string** + +Set the color of display name. + +Example: `displayNameTextColor={"#cecece"}` + +------ + +#### displayNamePadding + +**PropTypes.object** = {left: number, top: number, right: number, bottom: number} + +Set padding of display name. + +Example: `displayNamePadding={left: 5, top: 0, right: 0, bottom: 5}` + +------ + #### messageListBackgroundColor **PropTypes.string:** -Set messageList' background color. **In Android, you should add this property in `AndroidPtrlayout`.** +Set messageList' background color. -``` - -``` +Example: `messageListBackgroundColor={"#f3f3f3"}` + +------ + +#### maxBubbleWidth +**PropTypes.number** +Set the max width of message bubble, the value is the percentage of mobile's width. -Example: ```messageListBackgroundColor="#000000"``` +Example: `maxBubbleWidth={0.7}` means set the max bubble width to 70% of mobile width. + +------ + +#### messageTextLineHeight + +**PropTypes.number** + +Set text message's line spacing. + +Example: `messageTextLineHeight={5}` ------ @@ -472,6 +576,45 @@ Set the visibility of the select album button. Example: ```showSelectAlbumBtn={true}``` +------ +### inputPadding + +**PropTypes.object:** {left: number, top: number, right: number, bottom: number} + +Set the padding of TextInput. + +Example: `inputPadding={left:5, top:0, right:5, bottom:0}` + +*** + +### inputTextColor + +**PropTypes.string:** {"#xxxxxx"} + +Set the text color of TextInput. + +Example: `inputTextColor={"#808080"}` + +*** + +### inputTextSize + +**PropTypes.numbser:** {numbser} + +Set the text size of TextInput. + +Example: `inputTextSize={14}` + +*** + +### inputTextLineHeight + +**PropTypes.number:**{numbser} + +Set the text line spacing of TextInput. + +Example: `inputTextLineHeight={2}` + ------ ### ChatInput Event Callback diff --git a/ReactNative/docs/APIs_zh.md b/ReactNative/docs/APIs_zh.md index fcde8bb2..e5447fc5 100644 --- a/ReactNative/docs/APIs_zh.md +++ b/ReactNative/docs/APIs_zh.md @@ -54,15 +54,34 @@ const AuroraIMUIController = IMUI.AuroraIMUIController; // the IMUI controller, - [dateTextSize](#datetextsize) - [dateTextColor](#datetextcolor) - [datePadding](#datepadding) + - [dateBackgroundColor](#dateBackgroundColor) + - [dateCornerRadius](#dateCornerRadius) - [avatarSize](#avatarsize) - [avatarCornerRadius](#avatarcornerradius) - [isShowDisplayName](#isShowdisplayname) + - [isShowIncomingDisplayName](#isShowIncomingDisplayName) + - [isShowOutgoingDisplayName](#isShowOutgoingDisplayName) + - [displayNameTextSize](#displayNameTextSize) + - [displayNameTextColor](#displayNameTextColor) + - [displayNamePadding](#displayNamePadding) + - [eventTextColor](#eventTextColor) + - [eventTextSize](#eventTextSize) + - [eventTextPadding](#eventTextPadding) + - [eventBackgroundColor](#eventBackgroundColor) + - [eventCornerRadius](#eventCornerRadius) + - [eventTextLineHeight](#eventTextLineHeight) - [messageListBackgroundColor](#messagelistbackgroundcolor) + - [maxBubbleWidth](#maxBubbleWidth) + - [messageTextLineHeight](#messageTextLineHeight) - [isAllowPullToRefresh](#isallowpulltorefresh) - [ChatInput](#chatinput) - [Props customizable style]() - [chatInputBackgroupColor](#chatInputbackgroupcolor) - [showSelectAlbumBtn](#showSelectAlbumBtn) + - [inputPadding](#inputPadding) + - [inputTextColor](#inputTextColor) + - [inputTextSize](#inputTextSize) + - [inputTextLineHeight](#inputTextLineHeight) - [Props 事件]() - [onSendText](#onsendtext) - [onSendGalleryFile](#onsendgalleryfile) @@ -314,12 +333,16 @@ message 参数为:{ "message": [message](./Models_zh.md#message) }。 **PropTypes.object:**```{ imageName: string, padding: { left: number,top: number,right: number,bottom: number}``` +设置发送方的气泡样式。 + *** #### receiveBubble **PropTypes.object:**```{ imageName: string, padding: { left: number,top: number,right: number,bottom: number}``` +设置接收方的气泡样式。 + *** #### sendBubbleTextColor @@ -388,12 +411,34 @@ message 参数为:{ "message": [message](./Models_zh.md#message) }。 #### datePadding -**PropTypes.number:** +**PropTypes.object:** = `{ left: number, top: number, right: number, bottom: number}` -与上面的不同,这个属性内边距是一样的。 +设置时间的内边距。 + +Example: `datePadding={left: 5, top: 10, right: 5, bottom: 10}` *** +#### dateBackgroundColor + +**PropTypes.string** + +设置时间的背景颜色。 + +Example: `dateBackgroundColor={"#cecece"}` + +------ + +#### dateCornerRadius + +**PropTypes.number** + +设置时间的背景圆角大小。 + +Example: `dateCornerRadius={5}` + +------ + #### avatarSize **PropTypes.object:** ```{ width: number, height: number }``` @@ -406,7 +451,9 @@ message 参数为:{ "message": [message](./Models_zh.md#message) }。 **PropTypes.number:** -设置头像圆角半径, Example: ```avatarCornerRadius = {6}```。 +设置头像圆角半径。 + + Example: ```avatarCornerRadius = {6}```。 *** @@ -414,26 +461,87 @@ message 参数为:{ "message": [message](./Models_zh.md#message) }。 **PropTypes.bool:** -是否显示消息的发送方的名字,Example: ```isShowDisplayName={ture}```。 +是否显示昵称(包括接收方和发送方),Example: ```isShowDisplayName={ture}```。 -*** +------ + +#### isShowIncomingDisplayName + +**PropTypes.bool:** + +设置是否显示接收方昵称。 + +Example: `isShowIncomingDisplayName={true}` + +------ + +#### isShowOutgoingDisplayName + +**PropTypes.bool:** + +设置是否显示发送方昵称。 + +Example: `isShowOutgoingDisplayName={false}` + +------ + +#### displayNameTextSize + +**PropTypes.number** + +设置昵称文字大小。 + +Example: `displayNameTextSize={14}` + +------ + +#### displayNameTextColor + +**PropTypes.string** + +设置昵称的文字颜色。 + +Example: `displayNameTextColor={"#cecece"}` + +------ + +#### displayNamePadding + +**PropTypes.object** = {left: number, top: number, right: number, bottom: number} + +设置昵称内边距。 + +Example: `displayNamePadding={left: 5, top: 0, right: 0, bottom: 5}` + +------ #### messageListBackgroundColor **PropTypes.string:** -设置消息列表的背景颜色。**在 Android 中,需要将此属性添加到 `AndroidPtrlayout`** +设置消息列表背景颜色。 -``` - -``` +Example: `messageListBackgroundColor={"#f3f3f3"}` +------ +#### maxBubbleWidth -Example: ```messageListBackgroundColor="#000000"``` +**PropTypes.number** + +设置气泡的最大宽度。值为屏幕宽度的百分比。 + +Example: `maxBubbleWidth={0.7}` 表示设置气泡的最大宽度为屏幕宽度的 70%。 + +------ + +#### messageTextLineHeight + +**PropTypes.number** + +设置文字消息的行间距。 + +Example: `messageTextLineHeight={5}` ------ @@ -472,6 +580,46 @@ Example: ```showSelectAlbumBtn={true}``` ------ +### inputPadding + +**PropTypes.object:** {left: number, top: number, right: number, bottom: number} + +设置输入框内边距。 + +Example: `inputPadding={left:5, top:0, right:5, bottom:0}` + +------ + +### inputTextColor + +**PropTypes.string:** {"#xxxxxx"} + +设置输入框文字颜色。 + +Example: `inputTextColor={"#808080"}` + +------ + +### inputTextSize + +**PropTypes.numbser:** {numbser} + +设置输入框文字大小。 + +Example: `inputTextSize={14}` + +------ + +### inputTextLineHeight + +**PropTypes.number:**{numbser} + +设置输入框行间距。 + +Example: `inputTextLineHeight={2}` + +------ + #### ChatInput 事件回调 *** diff --git a/ReactNative/ios/RCTAuroraIMUI/MessageEventCollectionViewCell.swift b/ReactNative/ios/RCTAuroraIMUI/MessageEventCollectionViewCell.swift index 4fa2f0e8..0e7b2a04 100644 --- a/ReactNative/ios/RCTAuroraIMUI/MessageEventCollectionViewCell.swift +++ b/ReactNative/ios/RCTAuroraIMUI/MessageEventCollectionViewCell.swift @@ -10,11 +10,15 @@ import UIKit @objc open class MessageEventCollectionViewCell: UICollectionViewCell { static var paddingGap:CGFloat = 5.0 - static var eventFont = UIFont.systemFont(ofSize: 12) - static var eventTextColor = UIColor.white - static var eventBackgroundColor = UIColor(netHex: 0xCECECE) + static var eventFont: UIFont = UIFont.systemFont(ofSize: 12) + static var eventTextColor: UIColor = UIColor.white + @objc public static var eventBackgroundColor: UIColor = UIColor(netHex: 0xCECECE) + @objc public static var eventCornerRadius: CGFloat = 3.0// + @objc public static var eventTextLineHeight: CGFloat = 2.0// TODO: + + static var maxWidth: CGFloat = 200.0 - static var contentInset: UIEdgeInsets = UIEdgeInsets(top: 6, left: 8, bottom: 6, right: 8) + @objc public static var contentInset: UIEdgeInsets = UIEdgeInsets(top: 6, left: 8, bottom: 6, right: 8)// var eventLabel = IMUITextView() @@ -26,7 +30,7 @@ import UIKit eventLabel.frame = CGRect(x: 0, y: 0, width: 300, height: 20) eventLabel.font = MessageEventCollectionViewCell.eventFont eventLabel.numberOfLines = 0 - eventLabel.layer.cornerRadius = 3.0 + eventLabel.layer.cornerRadius = MessageEventCollectionViewCell.eventCornerRadius eventLabel.layer.masksToBounds = true eventLabel.contentInset = MessageEventCollectionViewCell.contentInset eventLabel.textColor = MessageEventCollectionViewCell.eventTextColor @@ -35,13 +39,16 @@ import UIKit } @objc open func presentCell(event: MessageEventModel) { - eventLabel.text = event.eventText - - eventLabel.frame = CGRect(x: 0, y: 0, - width: Int(event.evenSize.width + 1), - height: Int(event.evenSize.height + 1)) - eventLabel.center = self.contentView.center - eventLabel.frame.origin.y = MessageEventCollectionViewCell.paddingGap * 2 + eventLabel.text = event.eventText + let eventX = (IMUIMessageCellLayout.cellWidth - event.eventSize.width)/2 + let eventY = MessageEventCollectionViewCell.paddingGap + + eventLabel.frame = CGRect(x: Int(eventX), + y: Int(eventY), + width: Int(event.eventSize.width + 1), + height: Int(event.eventSize.height + 1)) +// eventLabel.center = self.contentView.center +// eventLabel.frame.origin.y = MessageEventCollectionViewCell.paddingGap } required public init?(coder aDecoder: NSCoder) { diff --git a/ReactNative/ios/RCTAuroraIMUI/MessageEventModel.swift b/ReactNative/ios/RCTAuroraIMUI/MessageEventModel.swift index ee468a60..f38baba6 100644 --- a/ReactNative/ios/RCTAuroraIMUI/MessageEventModel.swift +++ b/ReactNative/ios/RCTAuroraIMUI/MessageEventModel.swift @@ -13,7 +13,7 @@ import Foundation public var msgId: String = "" public var eventText: String = "" - var evenSize: CGSize = CGSize.zero + var eventSize: CGSize = CGSize.zero public init(msgId: String, eventText: String) { super.init() @@ -26,7 +26,7 @@ import Foundation let eventText = messageDic["text"] self.init(msgId: msgId as! String, eventText: eventText as! String) - self.evenSize = MessageEventModel.calculateTextContentSize(text: eventText as! String) + self.eventSize = MessageEventModel.calculateTextContentSize(text: eventText as! String) } static func calculateTextContentSize(text: String) -> CGSize { @@ -40,6 +40,6 @@ import Foundation } @objc public func cellHeight() -> CGFloat { - return self.evenSize.height + MessageEventCollectionViewCell.paddingGap * 2.0; + return self.eventSize.height + MessageEventCollectionViewCell.paddingGap * 2.0; } } diff --git a/ReactNative/ios/RCTAuroraIMUI/MyMessageModel.swift b/ReactNative/ios/RCTAuroraIMUI/MyMessageModel.swift index 790e7f49..99a8e87a 100644 --- a/ReactNative/ios/RCTAuroraIMUI/MyMessageModel.swift +++ b/ReactNative/ios/RCTAuroraIMUI/MyMessageModel.swift @@ -93,15 +93,17 @@ open class RCTMessageModel: IMUIMessageModel { let durationTime = CGFloat(duration?.floatValue ?? 0.0) var needShowTime = false + var timeContentSize: CGSize = CGSize.zero if let timeString = timeString { if timeString != "" { needShowTime = true + timeContentSize = RCTMessageModel.calculateNameContentSize(text: timeString) } } else { timeString = "" } - var extras = messageDic.object(forKey: RCTMessageModel.kMsgKeyExtras) as? NSDictionary + let extras = messageDic.object(forKey: RCTMessageModel.kMsgKeyExtras) as? NSDictionary if let _ = extras { } @@ -131,8 +133,12 @@ open class RCTMessageModel: IMUIMessageModel { if typeString == RCTMessageModel.kMsgTypeText { messageLayout = MyMessageCellLayout(isOutGoingMessage: isOutgoing ?? true, - isNeedShowTime: needShowTime, - bubbleContentSize: RCTMessageModel.calculateTextContentSize(text: text!, isOutGoing: isOutgoing!), bubbleContentInsets: UIEdgeInsets.zero, type: RCTMessageModel.kMsgTypeText) + isNeedShowTime: needShowTime, + bubbleContentSize: RCTMessageModel.calculateTextContentSize(text: text!, + isOutGoing: isOutgoing!), + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeContentSize, + type: RCTMessageModel.kMsgTypeText) } if typeString == RCTMessageModel.kMsgTypeImage { @@ -142,21 +148,30 @@ open class RCTMessageModel: IMUIMessageModel { } messageLayout = MyMessageCellLayout(isOutGoingMessage: isOutgoing ?? true, - isNeedShowTime: needShowTime, - bubbleContentSize: imgSize, bubbleContentInsets: UIEdgeInsets.zero, type: RCTMessageModel.kMsgTypeImage) + isNeedShowTime: needShowTime, + bubbleContentSize: imgSize, + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeContentSize, + type: RCTMessageModel.kMsgTypeImage) } if typeString == RCTMessageModel.kMsgTypeVoice { messageLayout = MyMessageCellLayout(isOutGoingMessage: isOutgoing ?? true, - isNeedShowTime: needShowTime, - bubbleContentSize: CGSize(width: 80, height: 37), bubbleContentInsets: UIEdgeInsets.zero, type: RCTMessageModel.kMsgTypeVoice) + isNeedShowTime: needShowTime, + bubbleContentSize: CGSize(width: 80, height: 37), + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeContentSize, + type: RCTMessageModel.kMsgTypeVoice) } if typeString == RCTMessageModel.kMsgTypeVideo { messageLayout = MyMessageCellLayout(isOutGoingMessage: isOutgoing ?? true, - isNeedShowTime: needShowTime, - bubbleContentSize: CGSize(width: 120, height: 160), bubbleContentInsets: UIEdgeInsets.zero, type: RCTMessageModel.kMsgTypeVideo) + isNeedShowTime: needShowTime, + bubbleContentSize: CGSize(width: 120, height: 160), + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeContentSize, + type: RCTMessageModel.kMsgTypeVideo) } if typeString == RCTMessageModel.kMsgTypeCustom { @@ -175,6 +190,7 @@ open class RCTMessageModel: IMUIMessageModel { isNeedShowTime: needShowTime, bubbleContentSize: bubbleContentSize, bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeContentSize, type: RCTMessageModel.kMsgTypeCustom) } } @@ -220,6 +236,11 @@ open class RCTMessageModel: IMUIMessageModel { } } + static func calculateNameContentSize(text: String) -> CGSize { + return text.sizeWithConstrainedWidth(with: MessageEventCollectionViewCell.maxWidth, + font: IMUIMessageCellLayout.timeStringFont) + } + static func converImageSize(with size: CGSize) -> CGSize { let maxSide = 160.0 @@ -237,7 +258,7 @@ open class RCTMessageModel: IMUIMessageModel { @objc public var messageDictionary: NSDictionary { get { - var messageDic = NSMutableDictionary() + let messageDic = NSMutableDictionary() messageDic.setValue(self.msgId, forKey: RCTMessageModel.kMsgKeyMsgId) messageDic.setValue(self.isOutGoing, forKey: RCTMessageModel.kMsgKeyisOutgoing) @@ -318,9 +339,18 @@ public class MyMessageCellLayout: IMUIMessageCellLayout { var type: String - init(isOutGoingMessage: Bool, isNeedShowTime: Bool, bubbleContentSize: CGSize, bubbleContentInsets: UIEdgeInsets, type: String) { + init(isOutGoingMessage: Bool, + isNeedShowTime: Bool, + bubbleContentSize: CGSize, + bubbleContentInsets: UIEdgeInsets, + timeLabelContentSize: CGSize, + type: String) { self.type = type - super.init(isOutGoingMessage: isOutGoingMessage, isNeedShowTime: isNeedShowTime, bubbleContentSize: bubbleContentSize, bubbleContentInsets: UIEdgeInsets.zero) + super.init(isOutGoingMessage: isOutGoingMessage, + isNeedShowTime: isNeedShowTime, + bubbleContentSize: bubbleContentSize, + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeLabelContentSize) } open override var bubbleContentInset: UIEdgeInsets { diff --git a/ReactNative/ios/RCTAuroraIMUI/RCTInputView.h b/ReactNative/ios/RCTAuroraIMUI/RCTInputView.h index fa37913b..ab0c0dcf 100644 --- a/ReactNative/ios/RCTAuroraIMUI/RCTInputView.h +++ b/ReactNative/ios/RCTAuroraIMUI/RCTInputView.h @@ -40,4 +40,9 @@ @property (nonatomic, copy) RCTBubblingEventBlock onSwitchToEmojiMode; @property (nonatomic, copy) RCTBubblingEventBlock onShowKeyboard; + +@property(strong, nonatomic) NSDictionary *inputPadding; +@property(strong, nonatomic) NSString *inputTextColor; +@property(strong, nonatomic) NSNumber *inputTextSize; +@property(strong, nonatomic) NSNumber *inputTextLineHeight; @end diff --git a/ReactNative/ios/RCTAuroraIMUI/RCTInputView.m b/ReactNative/ios/RCTAuroraIMUI/RCTInputView.m index 5328d77a..2307b5eb 100644 --- a/ReactNative/ios/RCTAuroraIMUI/RCTInputView.m +++ b/ReactNative/ios/RCTAuroraIMUI/RCTInputView.m @@ -22,6 +22,10 @@ - (instancetype)initWithFrame:(CGRect)frame { return self; } +- (void)setFrame:(CGRect)frame { + // override setFrame and do not thing to disable this function, react-native use setBounds to layout. +} + - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; self.keyBoardHeight = 0.0; diff --git a/ReactNative/ios/RCTAuroraIMUI/RCTInputViewManager.m b/ReactNative/ios/RCTAuroraIMUI/RCTInputViewManager.m index d7a5b7f6..c8ffb027 100644 --- a/ReactNative/ios/RCTAuroraIMUI/RCTInputViewManager.m +++ b/ReactNative/ios/RCTAuroraIMUI/RCTInputViewManager.m @@ -60,6 +60,37 @@ - (UIView *)view _rctInputView.imuiIntputView.featureSelectorView.featureListCollectionView.backgroundColor = color; } +RCT_CUSTOM_VIEW_PROPERTY(inputPadding, NSDictionary, RCTInputView) { + NSDictionary *padding = [RCTConvert NSDictionary: json]; + NSNumber *left = padding[@"left"]; + NSNumber *top = padding[@"top"]; + NSNumber *right = padding[@"right"]; + NSNumber *bottom = padding[@"bottom"]; + _rctInputView.imuiIntputView.inputTextView.textContainerInset = UIEdgeInsetsMake([top floatValue], + [left floatValue], + [bottom floatValue], + [right floatValue]); +} + +RCT_CUSTOM_VIEW_PROPERTY(inputTextColor, NSString, RCTInputView) { + NSString *colorString = [RCTConvert NSString: json]; + UIColor *color = [UIColor hexStringToUIColorWithHex:colorString]; + if (color != nil) { + _rctInputView.imuiIntputView.inputTextViewTextColor = color; + _rctInputView.imuiIntputView.inputTextView.textColor = color; + } +} + +RCT_CUSTOM_VIEW_PROPERTY(inputTextSize, NSNumber, RCTInputView) { + NSNumber *size = [RCTConvert NSNumber: json]; + [_rctInputView.imuiIntputView.inputTextView setFont:[UIFont systemFontOfSize:size.floatValue]]; +} + +RCT_CUSTOM_VIEW_PROPERTY(inputTextLineHeight, NSNumber, RCTInputView) { + NSNumber *height = [RCTConvert NSNumber: json]; + _rctInputView.imuiIntputView.inputTextViewLineHeight = height.floatValue; +} + RCT_CUSTOM_VIEW_PROPERTY(galleryScale, NSString, RCTInputView) { NSNumber *galleryScale = [RCTConvert NSNumber: json]; _rctInputView.galleryScale = galleryScale; @@ -144,7 +175,7 @@ - (void)didSeletedGalleryWithAssetArr:(NSArray * _Nonnull)AssetArr { targetSize: CGSizeMake(asset.pixelWidth * scale, asset.pixelHeight * scale) contentMode: PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { - NSData *imageData = UIImagePNGRepresentation(result); + NSData *imageData = UIImageJPEGRepresentation(result, scale); NSString *filePath = [self getPath]; if ([imageData writeToFile: filePath atomically: true]) { [imagePathArr addObject: @{@"mediaPath": filePath, @"mediaType": @"image"}]; diff --git a/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.h b/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.h index 0f0971e1..4d7652dc 100644 --- a/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.h +++ b/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.h @@ -31,15 +31,15 @@ @property (nonatomic, copy) RCTBubblingEventBlock onPullToRefresh; // custom layout -@property(strong, nonatomic) NSString *messageListBackgroundColor; +@property(copy, nonatomic) NSString *messageListBackgroundColor; @property(strong, nonatomic) NSDictionary *sendBubble; @property(strong, nonatomic) NSDictionary *receiveBubble; -@property(strong, nonatomic) NSString *sendBubbleTextColor; +@property(copy, nonatomic) NSString *sendBubbleTextColor; -@property(strong, nonatomic) NSString *receiveBubbleTextColor; +@property(copy, nonatomic) NSString *receiveBubbleTextColor; @property(assign, nonatomic) NSNumber *sendBubbleTextSize; @@ -47,7 +47,7 @@ @property(assign, nonatomic) NSNumber *dateTextSize; -@property(strong, nonatomic) NSString *dateTextColor; +@property(copy, nonatomic) NSString *dateTextColor; @property(strong, nonatomic) NSDictionary *avatarSize; @@ -63,4 +63,23 @@ @property(strong, nonatomic) NSDictionary *receiveBubblePadding; + + + +// TODO: +@property(strong, nonatomic) NSDictionary *datePadding; +@property(copy, nonatomic) NSString *dateBackgroundColor; +@property(assign, nonatomic) NSNumber *dateCornerRadius; + +@property(strong, nonatomic) NSDictionary *eventTextPadding; +@property(copy, nonatomic) NSString *eventBackgroundColor; +@property(assign, nonatomic) NSNumber *eventCornerRadius; +@property(assign, nonatomic) NSNumber *eventTextLineHeight; // TODO: + +@property(assign, nonatomic) NSNumber *displayNameTextSize; +@property(copy, nonatomic) NSString *displayNameTextColor; +@property(strong, nonatomic) NSDictionary *displayNamePadding; + +@property(assign, nonatomic) NSNumber *messageTextLineHeight;// TODO: + @end diff --git a/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.m b/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.m index b9dcadd9..963f1c7a 100644 --- a/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.m +++ b/ReactNative/ios/RCTAuroraIMUI/RCTMessageListView.m @@ -29,6 +29,10 @@ - (instancetype)initWithFrame:(CGRect)frame { return self; } +- (void)setFrame:(CGRect)frame { + // override setFrame and do not thing to disable this function, react-native use setBounds to layout. +} + - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { diff --git a/ReactNative/ios/RCTAuroraIMUI/RCTMessageListViewManager.m b/ReactNative/ios/RCTAuroraIMUI/RCTMessageListViewManager.m index 08a23280..15a64330 100644 --- a/ReactNative/ios/RCTAuroraIMUI/RCTMessageListViewManager.m +++ b/ReactNative/ios/RCTAuroraIMUI/RCTMessageListViewManager.m @@ -48,8 +48,6 @@ @implementation RCTMessageListViewManager RCT_EXPORT_MODULE() - (UIView *)view { -// let bundle = Bundle.imuiBundle() -// view = bundle.loadNibNamed("IMUIMessageCollectionView", owner: self, options: nil)?.first as! UIView NSBundle *bundle = [NSBundle bundleForClass: [RCTMessageListView class]]; _messageList = [[bundle loadNibNamed:@"RCTMessageListView" owner:self options: nil] objectAtIndex:0]; @@ -67,14 +65,11 @@ - (UIView *)view if (bubbleName == nil) { return; } if (bubbleDic[@"padding"] == nil) { return; } - - NSNumber *top = bubbleDic[@"padding"][@"top"]; - NSNumber *right = bubbleDic[@"padding"][@"right"]; - NSNumber *left = bubbleDic[@"padding"][@"left"]; - NSNumber *bottom = bubbleDic[@"padding"][@"bottom"]; + UIEdgeInsets padding = [self edgeInsetsWith:bubbleDic]; UIImage *bubbleImg = [UIImage imageNamed:bubbleName]; - bubbleImg = [bubbleImg resizableImageWithCapInsets: UIEdgeInsetsMake([top floatValue], [left floatValue], [bottom floatValue], [right floatValue]) resizingMode: UIImageResizingModeTile]; + bubbleImg = [bubbleImg resizableImageWithCapInsets: padding + resizingMode: UIImageResizingModeTile]; RCTMessageModel.outgoingBubbleImage = bubbleImg; } @@ -85,13 +80,10 @@ - (UIView *)view if (bubbleName == nil) { return; } if (bubbleDic[@"padding"] == nil) { return; } - NSNumber *top = bubbleDic[@"padding"][@"top"]; - NSNumber *right = bubbleDic[@"padding"][@"right"]; - NSNumber *left = bubbleDic[@"padding"][@"left"]; - NSNumber *bottom = bubbleDic[@"padding"][@"bottom"]; - + UIEdgeInsets padding = [self edgeInsetsWith:bubbleDic]; UIImage *bubbleImg = [UIImage imageNamed:bubbleName]; - bubbleImg = [bubbleImg resizableImageWithCapInsets: UIEdgeInsetsMake([top floatValue], [left floatValue], [bottom floatValue], [right floatValue]) resizingMode: UIImageResizingModeTile]; + bubbleImg = [bubbleImg resizableImageWithCapInsets: padding + resizingMode: UIImageResizingModeTile]; RCTMessageModel.incommingBubbleImage = bubbleImg; } @@ -111,7 +103,6 @@ - (UIView *)view if (color != nil) { IMUITextMessageContentView.outGoingTextColor = color; } - } RCT_CUSTOM_VIEW_PROPERTY(receiveBubbleTextColor, NSString, RCTMessageListView) { @@ -140,7 +131,7 @@ - (UIView *)view RCT_CUSTOM_VIEW_PROPERTY(dateTextColor, NSString, RCTMessageListView) { NSString *colorString = [RCTConvert NSString: json]; - UIColor *color = [UIColor hexStringToUIColorWithHex:@"colorString"]; + UIColor *color = [UIColor hexStringToUIColorWithHex:colorString]; if (color != nil) { IMUIMessageCellLayout.timeStringColor = color; } @@ -175,12 +166,9 @@ - (UIView *)view } RCT_CUSTOM_VIEW_PROPERTY(sendBubblePadding, NSDictionary, RCTMessageListView) { - NSDictionary *bubblePadding = [RCTConvert NSDictionary: json]; - NSNumber *left = bubblePadding[@"left"]; - NSNumber *top = bubblePadding[@"top"]; - NSNumber *right = bubblePadding[@"right"]; - NSNumber *bottom = bubblePadding[@"bottom"]; - MyMessageCellLayout.outgoingPadding = UIEdgeInsetsMake([top floatValue], [left floatValue], [bottom floatValue], [right floatValue]); + NSDictionary *paddingDic = [RCTConvert NSDictionary: json]; + UIEdgeInsets padding = [self edgeInsetsWith:paddingDic]; + MyMessageCellLayout.outgoingPadding = padding; } RCT_CUSTOM_VIEW_PROPERTY(avatarCornerRadius, NSDictionary, RCTMessageListView) { @@ -190,18 +178,98 @@ - (UIView *)view } RCT_CUSTOM_VIEW_PROPERTY(receiveBubblePadding, NSDictionary, RCTMessageListView) { - NSDictionary *bubblePadding = [RCTConvert NSDictionary: json]; - NSNumber *left = bubblePadding[@"left"]; - NSNumber *top = bubblePadding[@"top"]; - NSNumber *right = bubblePadding[@"right"]; - NSNumber *bottom = bubblePadding[@"bottom"]; - MyMessageCellLayout.incommingPadding = UIEdgeInsetsMake([top floatValue], [left floatValue], [bottom floatValue], [right floatValue]); + NSDictionary *paddingDic = [RCTConvert NSDictionary: json]; + UIEdgeInsets padding = [self edgeInsetsWith:paddingDic]; + MyMessageCellLayout.incommingPadding = padding; +} +// TODO: +///////////////////============= + +RCT_CUSTOM_VIEW_PROPERTY(eventTextPadding, NSDictionary, RCTMessageListView) { + NSDictionary *paddingDic = [RCTConvert NSDictionary: json]; + UIEdgeInsets padding = [self edgeInsetsWith:paddingDic]; + MessageEventCollectionViewCell.contentInset = padding; +} + +RCT_CUSTOM_VIEW_PROPERTY(displayNamePadding, NSDictionary, RCTMessageListView) { + NSDictionary *paddingDic = [RCTConvert NSDictionary: json]; + UIEdgeInsets padding = [self edgeInsetsWith:paddingDic]; + IMUIMessageCellLayout.nameLabelPadding = padding; +} + + +RCT_CUSTOM_VIEW_PROPERTY(dateBackgroundColor, NSString, RCTMessageListView) { + NSString *colorString = [RCTConvert NSString: json]; + UIColor *color = [UIColor hexStringToUIColorWithHex:colorString]; + if (color != nil) { + IMUIMessageCellLayout.timeStringBackgroundColor = color; + } +} + +RCT_CUSTOM_VIEW_PROPERTY(eventBackgroundColor, NSString, RCTMessageListView) { + NSString *colorString = [RCTConvert NSString: json]; + UIColor *color = [UIColor hexStringToUIColorWithHex:colorString]; + if (color != nil) { + MessageEventCollectionViewCell.eventBackgroundColor = color; + } +} + +RCT_CUSTOM_VIEW_PROPERTY(displayNameTextColor, NSString, RCTMessageListView) { + NSString *colorString = [RCTConvert NSString: json]; + UIColor *color = [UIColor hexStringToUIColorWithHex:colorString]; + if (color != nil) { + IMUIMessageCellLayout.nameLabelTextColor = color; + } +} + +RCT_CUSTOM_VIEW_PROPERTY(dateCornerRadius, NSNumber, RCTMessageListView) { + NSNumber *cornerRadius = [RCTConvert NSNumber: json]; + IMUIMessageCellLayout.timeStringCornerRadius = cornerRadius.floatValue; +} + +RCT_CUSTOM_VIEW_PROPERTY(eventCornerRadius, NSNumber, RCTMessageListView) { + NSNumber *cornerRadius = [RCTConvert NSNumber: json]; + MessageEventCollectionViewCell.eventCornerRadius = cornerRadius.floatValue; } +RCT_CUSTOM_VIEW_PROPERTY(displayNameTextSize, NSNumber, RCTMessageListView) { + NSNumber *textSize = [RCTConvert NSNumber: json]; + IMUIMessageCellLayout.nameLabelTextFont = [UIFont systemFontOfSize:[textSize floatValue]]; + IMUIMessageCellLayout.nameLabelSize = CGSizeMake(IMUIMessageCellLayout.nameLabelSize.width, textSize.floatValue); +} + +RCT_CUSTOM_VIEW_PROPERTY(datePadding, NSDictionary, RCTMessageListView) { + NSDictionary *paddingDic = [RCTConvert NSDictionary: json]; + UIEdgeInsets padding = [self edgeInsetsWith:paddingDic]; + IMUIMessageCellLayout.timeLabelPadding = padding; + // TODO: +} + +RCT_CUSTOM_VIEW_PROPERTY(eventTextLineHeight, NSNumber, RCTMessageListView) { + NSNumber *lineHeight = [RCTConvert NSNumber: json]; + // TODO: +} + +RCT_CUSTOM_VIEW_PROPERTY(messageTextLineHeight, NSNumber, RCTMessageListView) { + NSNumber *lineHeight = [RCTConvert NSNumber: json]; + // TODO: +} + +///////////////////============= + - (RCTMessageModel *)convertMessageDicToModel:(NSDictionary *)message { return [[RCTMessageModel alloc] initWithMessageDic: message]; } +- (UIEdgeInsets)edgeInsetsWith:(NSDictionary *)dic { + NSNumber *left = dic[@"left"]; + NSNumber *top = dic[@"top"]; + NSNumber *right = dic[@"right"]; + NSNumber *bottom = dic[@"bottom"]; + return UIEdgeInsetsMake([top floatValue], [left floatValue], [bottom floatValue], [right floatValue]); +} + + // - MARK: IMUIMessageCollectionViewDelegate //- (void)sendEventWithType:(NSString *)type model:(id)model { diff --git a/ReactNative/messagelist.android.js b/ReactNative/messagelist.android.js index 3ea68590..89c6fa69 100644 --- a/ReactNative/messagelist.android.js +++ b/ReactNative/messagelist.android.js @@ -2,6 +2,7 @@ import React from 'react'; import ReactNative from 'react-native'; +import {ViewPropTypes} from 'react-native'; import PropTypes from 'prop-types'; var { @@ -10,7 +11,6 @@ var { var { StyleSheet, - ViewPropTypes, UIManager, findNodeHandle, requireNativeComponent, @@ -110,17 +110,26 @@ MessageList.propTypes = { receiveBubblePadding: PropTypes.object, dateTextSize: PropTypes.number, dateTextColor: PropTypes.string, - datePadding: PropTypes.number, + datePadding: PropTypes.object, + dateBackgroundColor: PropTypes.string, + dateCornerRadius: PropTypes.number, avatarSize: PropTypes.object, isShowDisplayName: PropTypes.bool, - eventMsgTxtColor: PropTypes.string, - eventMsgTxtPadding: PropTypes.number, - eventMsgTxtSize: PropTypes.number, + eventTextColor: PropTypes.string, + eventTextPadding: PropTypes.object, + eventBackgroundColor: PropTypes.string, + eventCornerRadius: PropTypes.number, + eventTextLineHeight: PropTypes.number, + eventTextSize: PropTypes.number, avatarCornerRadius: PropTypes.number, isShowIncomingDisplayName: PropTypes.bool, isShowOutgoingDisplayName: PropTypes.bool, + displayNameTextSize: PropTypes.number, + displayNameTextColor: PropTypes.string, + displayNamePadding: PropTypes.object, isAllowPullToRefresh: PropTypes.bool, maxBubbleWidth: PropTypes.number, + messageTextLineHeight: PropTypes.number, ...ViewPropTypes }; diff --git a/ReactNative/messagelist.ios.js b/ReactNative/messagelist.ios.js index c159a8b1..63598419 100644 --- a/ReactNative/messagelist.ios.js +++ b/ReactNative/messagelist.ios.js @@ -3,6 +3,7 @@ import React from 'react'; import ReactNative from 'react-native'; import PropTypes from 'prop-types'; +import {ViewPropTypes} from 'react-native'; var { Component, @@ -10,7 +11,6 @@ var { var { StyleSheet, - ViewPropTypes, requireNativeComponent, } = ReactNative; @@ -98,14 +98,25 @@ MessageList.propTypes = { receiveBubbleTextSize: PropTypes.number, sendBubblePadding: PropTypes.object, receiveBubblePadding: PropTypes.object, - dateTextSize: PropTypes.number, - dateTextColor: PropTypes.string, avatarSize: PropTypes.object, avatarCornerRadius: PropTypes.number, isShowDisplayName: PropTypes.bool, isShowIncomingDisplayName: PropTypes.bool, isShowOutgoingDisplayName: PropTypes.bool, isAllowPullToRefresh: PropTypes.bool, + dateTextSize: PropTypes.number, + dateTextColor: PropTypes.string, + datePadding: PropTypes.object, + dateBackgroundColor: PropTypes.string, + dateCornerRadius: PropTypes.number, + eventTextPadding: PropTypes.object, + eventBackgroundColor: PropTypes.string, + eventCornerRadius: PropTypes.number, + // eventTextLineHeight: PropTypes.number, TODO: + displayNameTextSize: PropTypes.number, + displayNameTextColor: PropTypes.string, + displayNamePadding: PropTypes.object, + // messageTextLineHeight: PropTypes.number, TODO: ...ViewPropTypes }; diff --git a/ReactNative/sample/.flowconfig b/ReactNative/sample/.flowconfig index 55b40889..0b611f07 100644 --- a/ReactNative/sample/.flowconfig +++ b/ReactNative/sample/.flowconfig @@ -12,14 +12,19 @@ ; For RN Apps installed via npm, "Libraries" folder is inside ; "node_modules/react-native" but in the source repo it is in the root .*/Libraries/react-native/React.js -.*/Libraries/react-native/ReactNative.js + +; Ignore polyfills +.*/Libraries/polyfills/.* + +; Ignore metro +.*/node_modules/metro/.* [include] [libs] node_modules/react-native/Libraries/react-native/react-native-interface.js -node_modules/react-native/flow -flow/ +node_modules/react-native/flow/ +node_modules/react-native/flow-github/ [options] emoji=true @@ -30,25 +35,20 @@ munge_underscores=true module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' +module.file_ext=.js +module.file_ext=.jsx +module.file_ext=.json +module.file_ext=.native.js + suppress_type=$FlowIssue suppress_type=$FlowFixMe -suppress_type=$FixMe - -<<<<<<< ours -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-9]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-9]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ -======= -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ ->>>>>>> theirs +suppress_type=$FlowFixMeProps +suppress_type=$FlowFixMeState + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError -unsafe.enable_getters_and_setters=true - [version] -<<<<<<< ours -^0.49.1 -======= -^0.56.0 ->>>>>>> theirs +^0.63.0 diff --git a/ReactNative/sample/.gitignore b/ReactNative/sample/.gitignore index 10be1975..0826423b 100644 --- a/ReactNative/sample/.gitignore +++ b/ReactNative/sample/.gitignore @@ -46,8 +46,8 @@ buck-out/ # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: -# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md +# https://docs.fastlane.tools/best-practices/source-control/ -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots diff --git a/ReactNative/sample/app/app.js b/ReactNative/sample/App.js similarity index 96% rename from ReactNative/sample/app/app.js rename to ReactNative/sample/App.js index 95f16327..c8bc6f60 100644 --- a/ReactNative/sample/app/app.js +++ b/ReactNative/sample/App.js @@ -41,9 +41,9 @@ function constructNormalMessage() { var user = { userId: "", displayName: "replace your nickname", - avatarPath: "ironman" + avatarPath: "images" } - user.avatarPath = RNFS.MainBundlePath + '/default_header.png' + // user.avatarPath = RNFS.MainBundlePath + '/default_header.png' message.fromUser = user return message @@ -124,11 +124,11 @@ export default class TestRNIMUI extends Component { } onInputViewSizeChange = (size) => { - console.log("height: " + size.height) + console.log("height: " + size.height + " width: " + size.width) if (this.state.inputLayoutHeight != size.height) { this.setState({ inputLayoutHeight: size.height, - inputViewLayout: { width: size.width, height: size.height }, + inputViewLayout: { width: window.width, height: size.height }, messageListLayout: { flex:1, width: window.width, margin: 0 } }) } @@ -397,10 +397,14 @@ export default class TestRNIMUI extends Component { onTapMessageCell={this.onTapMessageCell} onBeginDragMessageList={this.onBeginDragMessageList} onPullToRefresh={this.onPullToRefresh} - avatarSize={{ width: 40, height: 40 }} + avatarSize={{ width: 50, height: 50 }} + avatarCornerRadius={60} + messageListBackgroundColor={"#f3f3f3"} sendBubbleTextSize={18} sendBubbleTextColor={"#000000"} sendBubblePadding={{ left: 10, top: 10, right: 15, bottom: 10 }} + datePadding={{ left: 5, top: 5, right: 5, bottom: 5 }} + dateBackgroundColor={"#39ef23"} /> { + const tree = renderer.create( + + ); +}); diff --git a/ReactNative/sample/android/app/build.gradle b/ReactNative/sample/android/app/build.gradle index 8ca6e240..5ce595e0 100644 --- a/ReactNative/sample/android/app/build.gradle +++ b/ReactNative/sample/android/app/build.gradle @@ -65,6 +65,9 @@ import com.android.build.OutputFile * extraPackagerArgs: [] * ] */ +project.ext.react = [ + entryFile: "index.js" +] apply from: "../../node_modules/react-native/react.gradle" diff --git a/ReactNative/sample/android/app/src/main/java/com/testrnimuiexample/MainApplication.java b/ReactNative/sample/android/app/src/main/java/com/testrnimuiexample/MainApplication.java index 41fcac3f..b0211c9e 100644 --- a/ReactNative/sample/android/app/src/main/java/com/testrnimuiexample/MainApplication.java +++ b/ReactNative/sample/android/app/src/main/java/com/testrnimuiexample/MainApplication.java @@ -22,6 +22,11 @@ public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } + @Override + protected String getJSMainModuleName() { + return "index"; + } + @Override protected List getPackages() { return Arrays.asList( diff --git a/ReactNative/sample/android/app/src/main/res/drawable-xhdpi/images.jpg b/ReactNative/sample/android/app/src/main/res/drawable-xhdpi/images.jpg new file mode 100644 index 00000000..4c6090d9 Binary files /dev/null and b/ReactNative/sample/android/app/src/main/res/drawable-xhdpi/images.jpg differ diff --git a/ReactNative/sample/android/settings.gradle b/ReactNative/sample/android/settings.gradle index 3d73d3fb..28ffbae6 100644 --- a/ReactNative/sample/android/settings.gradle +++ b/ReactNative/sample/android/settings.gradle @@ -1,6 +1,6 @@ rootProject.name = 'TestRNIMUIExample' include ':app', ':aurora-imui-react-native' -project(':aurora-imui-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/aurora-imui-react-native/ReactNative/android') +project(':aurora-imui-react-native').projectDir = new File(rootProject.projectDir, '../../android') include ':react-native-fs' project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') \ No newline at end of file diff --git a/ReactNative/sample/index.android.js b/ReactNative/sample/index.android.js deleted file mode 100644 index ee8b6f31..00000000 --- a/ReactNative/sample/index.android.js +++ /dev/null @@ -1,15 +0,0 @@ -// /** -// * Sample React Native App -// * https://github.com/facebook/react-native -// * @flow -// */ - -import React, { Component } from 'react'; - -import { - AppRegistry, -} from 'react-native'; - -import TestRNIMUI from './app/app.js' - -AppRegistry.registerComponent('TestRNIMUI', () => TestRNIMUI); diff --git a/ReactNative/sample/index.ios.js b/ReactNative/sample/index.ios.js deleted file mode 100644 index ee8b6f31..00000000 --- a/ReactNative/sample/index.ios.js +++ /dev/null @@ -1,15 +0,0 @@ -// /** -// * Sample React Native App -// * https://github.com/facebook/react-native -// * @flow -// */ - -import React, { Component } from 'react'; - -import { - AppRegistry, -} from 'react-native'; - -import TestRNIMUI from './app/app.js' - -AppRegistry.registerComponent('TestRNIMUI', () => TestRNIMUI); diff --git a/ReactNative/sample/index.js b/ReactNative/sample/index.js new file mode 100644 index 00000000..b47eebef --- /dev/null +++ b/ReactNative/sample/index.js @@ -0,0 +1,4 @@ +import { AppRegistry } from 'react-native'; +import App from './App'; + +AppRegistry.registerComponent('TestRNIMUI', () => App); diff --git a/ReactNative/sample/ios/TestRNIMUI/AppDelegate.m b/ReactNative/sample/ios/TestRNIMUI/AppDelegate.m index b0cbe07c..df7755cb 100644 --- a/ReactNative/sample/ios/TestRNIMUI/AppDelegate.m +++ b/ReactNative/sample/ios/TestRNIMUI/AppDelegate.m @@ -18,7 +18,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( { NSURL *jsCodeLocation; - jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"TestRNIMUI" diff --git a/ReactNative/sample/package.json b/ReactNative/sample/package.json index acd0e448..05190a87 100644 --- a/ReactNative/sample/package.json +++ b/ReactNative/sample/package.json @@ -8,9 +8,9 @@ "test": "jest" }, "dependencies": { - "aurora-imui-react-native": "file:..", + "aurora-imui-react-native": "^0.8.4", "react": "^16.0.0", - "react-native": "^0.50.3", + "react-native": "^0.53.3", "react-native-fs": "^2.8.5", "react-native-material-ui": "^1.12.0", "react-native-popup-dialog": "^0.7.29", diff --git a/ReactNative/sample/yarn.lock b/ReactNative/sample/yarn.lock new file mode 100644 index 00000000..dcae76d9 --- /dev/null +++ b/ReactNative/sample/yarn.lock @@ -0,0 +1,4751 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6" + dependencies: + "@babel/highlight" "7.0.0-beta.40" + +"@babel/highlight@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +abab@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +absolute-path@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + +accepts@~1.2.12, accepts@~1.2.13: + version "1.2.13" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" + dependencies: + mime-types "~2.1.6" + negotiator "0.5.3" + +accepts@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + +acorn@^5.0.0, acorn@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + +ansi@^0.3.0, ansi@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +arch@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.0.tgz#3613aa46149064b3c1f0607919bf1d4786e82889" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +art@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/art/-/art-0.10.1.tgz#38541883e399225c5e193ff246e8f157cf7b2146" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4, async@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.7.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.16.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@22.4.1, babel-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.4.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.18.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.5" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63" + +babel-plugin-react-transform@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" + dependencies: + lodash "^4.6.1" + +babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.8.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@6.x, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.8.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@6.x, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-commonjs@6.x, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-object-super@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@6.x, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@6.x, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@6.x, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@6.x: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@6.x: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-es3-member-expression-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es3-property-literals@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-exponentiation-operator@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-assign@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.20.2, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.5.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-es2015-node@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" + dependencies: + babel-plugin-transform-es2015-destructuring "6.x" + babel-plugin-transform-es2015-function-name "6.x" + babel-plugin-transform-es2015-modules-commonjs "6.x" + babel-plugin-transform-es2015-parameters "6.x" + babel-plugin-transform-es2015-shorthand-properties "6.x" + babel-plugin-transform-es2015-spread "6.x" + babel-plugin-transform-es2015-sticky-regex "6.x" + babel-plugin-transform-es2015-unicode-regex "6.x" + semver "5.x" + +babel-preset-fbjs@^2.1.2, babel-preset-fbjs@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af" + dependencies: + babel-plugin-check-es2015-constants "^6.8.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-plugin-syntax-flow "^6.8.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-plugin-syntax-trailing-function-commas "^6.8.0" + babel-plugin-transform-class-properties "^6.8.0" + babel-plugin-transform-es2015-arrow-functions "^6.8.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.8.0" + babel-plugin-transform-es2015-block-scoping "^6.8.0" + babel-plugin-transform-es2015-classes "^6.8.0" + babel-plugin-transform-es2015-computed-properties "^6.8.0" + babel-plugin-transform-es2015-destructuring "^6.8.0" + babel-plugin-transform-es2015-for-of "^6.8.0" + babel-plugin-transform-es2015-function-name "^6.8.0" + babel-plugin-transform-es2015-literals "^6.8.0" + babel-plugin-transform-es2015-modules-commonjs "^6.8.0" + babel-plugin-transform-es2015-object-super "^6.8.0" + babel-plugin-transform-es2015-parameters "^6.8.0" + babel-plugin-transform-es2015-shorthand-properties "^6.8.0" + babel-plugin-transform-es2015-spread "^6.8.0" + babel-plugin-transform-es2015-template-literals "^6.8.0" + babel-plugin-transform-es3-member-expression-literals "^6.8.0" + babel-plugin-transform-es3-property-literals "^6.8.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-plugin-transform-object-rest-spread "^6.8.0" + babel-plugin-transform-react-display-name "^6.8.0" + babel-plugin-transform-react-jsx "^6.8.0" + +babel-preset-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a" + dependencies: + babel-plugin-jest-hoist "^22.4.1" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-preset-react-native@4.0.0, babel-preset-react-native@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959" + dependencies: + babel-plugin-check-es2015-constants "^6.5.0" + babel-plugin-react-transform "^3.0.0" + babel-plugin-syntax-async-functions "^6.5.0" + babel-plugin-syntax-class-properties "^6.5.0" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-syntax-flow "^6.5.0" + babel-plugin-syntax-jsx "^6.5.0" + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-class-properties "^6.5.0" + babel-plugin-transform-es2015-arrow-functions "^6.5.0" + babel-plugin-transform-es2015-block-scoping "^6.5.0" + babel-plugin-transform-es2015-classes "^6.5.0" + babel-plugin-transform-es2015-computed-properties "^6.5.0" + babel-plugin-transform-es2015-destructuring "^6.5.0" + babel-plugin-transform-es2015-for-of "^6.5.0" + babel-plugin-transform-es2015-function-name "^6.5.0" + babel-plugin-transform-es2015-literals "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.5.0" + babel-plugin-transform-es2015-parameters "^6.5.0" + babel-plugin-transform-es2015-shorthand-properties "^6.5.0" + babel-plugin-transform-es2015-spread "^6.5.0" + babel-plugin-transform-es2015-template-literals "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.5.0" + babel-plugin-transform-object-assign "^6.5.0" + babel-plugin-transform-object-rest-spread "^6.5.0" + babel-plugin-transform-react-display-name "^6.5.0" + babel-plugin-transform-react-jsx "^6.5.0" + babel-plugin-transform-react-jsx-source "^6.5.0" + babel-plugin-transform-regenerator "^6.5.0" + babel-template "^6.24.1" + react-transform-hmr "^1.0.4" + +babel-register@^6.24.1, babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + +base64-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + +base64-js@^1.1.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + +base64-url@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" + +basic-auth-connect@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" + +basic-auth@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +big-integer@^1.6.7: + version "1.6.26" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.26.tgz#3af1672fa62daf2d5ecafacf6e5aa0d25e02c1c8" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +body-parser@~1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" + dependencies: + bytes "2.1.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.0.1" + http-errors "~1.3.1" + iconv-lite "0.4.11" + on-finished "~2.3.0" + qs "4.0.0" + raw-body "~2.1.2" + type-is "~1.6.6" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + dependencies: + stream-buffers "~2.2.0" + +bplist-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + dependencies: + big-integer "^1.6.7" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +bytes@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796" + dependencies: + ansi-styles "^3.2.0" + escape-string-regexp "^1.0.5" + supports-color "^5.2.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +ci-info@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +clipboardy@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" + dependencies: + arch "^2.1.0" + execa "^0.8.0" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0, commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + +compressible@~2.0.5: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" + dependencies: + mime-db ">= 1.33.0 < 2" + +compression@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" + dependencies: + accepts "~1.2.12" + bytes "2.1.0" + compressible "~2.0.5" + debug "~2.2.0" + on-headers "~1.0.0" + vary "~1.0.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-timeout@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" + dependencies: + debug "~2.2.0" + http-errors "~1.3.1" + ms "0.7.1" + on-headers "~1.0.0" + +connect@^2.8.3: + version "2.30.2" + resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" + dependencies: + basic-auth-connect "1.0.0" + body-parser "~1.13.3" + bytes "2.1.0" + compression "~1.5.2" + connect-timeout "~1.6.2" + content-type "~1.0.1" + cookie "0.1.3" + cookie-parser "~1.3.5" + cookie-signature "1.0.6" + csurf "~1.8.3" + debug "~2.2.0" + depd "~1.0.1" + errorhandler "~1.4.2" + express-session "~1.11.3" + finalhandler "0.4.0" + fresh "0.3.0" + http-errors "~1.3.1" + method-override "~2.3.5" + morgan "~1.6.1" + multiparty "3.3.2" + on-headers "~1.0.0" + parseurl "~1.3.0" + pause "0.1.0" + qs "4.0.0" + response-time "~2.3.1" + serve-favicon "~2.3.0" + serve-index "~1.7.2" + serve-static "~1.10.0" + type-is "~1.6.6" + utils-merge "1.0.0" + vhost "~3.0.1" + +connect@^3.6.5: + version "3.6.6" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +content-type-parser@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + +content-type@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.4.0, convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +cookie-parser@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +crc@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" + +create-react-class@^15.5.2: + version "15.6.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +csrf@~3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" + dependencies: + rndm "1.2.0" + tsscmp "1.0.5" + uid-safe "2.1.4" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +csurf@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + csrf "~3.0.0" + http-errors "~1.3.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + +debug@2.6.9, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + +depd@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" + +depd@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +diff@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + +domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +envinfo@^3.0.0: + version "3.11.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-3.11.1.tgz#45968faf5079aa797b7dcdc3b123f340d4529e1c" + dependencies: + clipboardy "^1.2.2" + glob "^7.1.2" + minimist "^1.2.0" + os-name "^2.0.1" + which "^1.2.14" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +errorhandler@~1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" + dependencies: + accepts "~1.3.0" + escape-html "~1.0.3" + +es-abstract@^1.5.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +escape-html@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +event-target-shim@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" + +eventemitter3@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.0.1.tgz#4ce66c3fc5b5a6b9f2245e359e1938f1ab10f960" + +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expect@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + +express-session@~1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + crc "3.3.0" + debug "~2.2.0" + depd "~1.0.1" + on-headers "~1.0.0" + parseurl "~1.3.0" + uid-safe "~2.0.0" + utils-merge "1.0.0" + +extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +external-editor@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fancy-log@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + time-stamp "^1.0.0" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs-scripts@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.1.tgz#c1c6efbecb7f008478468976b783880c2f669765" + dependencies: + babel-core "^6.7.2" + babel-preset-fbjs "^2.1.2" + core-js "^2.4.1" + cross-spawn "^5.1.0" + gulp-util "^3.0.4" + object-assign "^4.0.1" + semver "^5.1.0" + through2 "^2.0.0" + +fbjs@^0.8.14, fbjs@^0.8.16, fbjs@^0.8.9: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" + dependencies: + debug "~2.2.0" + escape-html "1.0.2" + on-finished "~2.3.0" + unpipe "~1.0.0" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + dependencies: + ansi "^0.3.0" + has-unicode "^2.0.0" + lodash.pad "^4.1.0" + lodash.padend "^4.1.0" + lodash.padstart "^4.1.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +glogg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" + dependencies: + sparkles "^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.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +gulp-util@^3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +http-errors@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" + dependencies: + inherits "~2.0.1" + statuses "1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.11: + version "0.4.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +image-size@^0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.2.tgz#8ee316d4298b028b965091b673d5f1537adee5b4" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +invariant@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-ci@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^1.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +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" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.14: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.2.tgz#e17cd519dd5ec4141197f246fdf380b75487f3b1" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.2" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.2" + istanbul-lib-report "^1.1.3" + istanbul-lib-source-maps "^1.2.3" + istanbul-reports "^1.1.4" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" + +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.2" + semver "^5.3.0" + +istanbul-lib-report@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259" + dependencies: + istanbul-lib-coverage "^1.1.2" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.1.2" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e" + dependencies: + throat "^4.0.0" + +jest-cli@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.2.0" + jest-config "^22.4.2" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.2" + jest-runtime "^22.4.2" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.2" + jest-worker "^22.2.2" + micromatch "^2.3.11" + node-notifier "^5.2.1" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + +jest-config@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + pretty-format "^22.4.0" + +jest-diff@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.0.tgz#384c2b78519ca44ca126382df53f134289232525" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + +jest-docblock@22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.1.0.tgz#3fe5986d5444cbcb149746eb4b07c57c5a464dfd" + dependencies: + detect-newline "^2.1.0" + +jest-docblock@^22.1.0, jest-docblock@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8" + dependencies: + detect-newline "^2.1.0" + +jest-environment-jsdom@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + jsdom "^11.5.1" + +jest-environment-node@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + +jest-get-type@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + +jest-haste-map@22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.1.0.tgz#1174c6ff393f9818ebf1163710d8868b5370da2a" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.1.0" + jest-worker "^22.1.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-haste-map@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.4.0" + jest-serializer "^22.4.0" + jest-worker "^22.2.2" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + source-map-support "^0.5.0" + +jest-leak-detector@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.0.tgz#64da77f05b001c96d2062226e079f89989c4aa2f" + dependencies: + pretty-format "^22.4.0" + +jest-matcher-utils@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + +jest-message-util@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" + +jest-regex-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" + +jest-resolve-dependencies@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" + dependencies: + jest-regex-util "^22.1.0" + +jest-resolve@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + +jest-runner@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87" + dependencies: + exit "^0.1.2" + jest-config "^22.4.2" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.2" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.2" + jest-util "^22.4.1" + jest-worker "^22.2.2" + throat "^4.0.0" + +jest-runtime@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.4.1" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.4.2" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-serializer@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.0.tgz#b5d145b98c4b0d2c20ab686609adbb81fe23b566" + +jest-snapshot@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.0" + +jest-util@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.0" + mkdirp "^0.5.1" + source-map "^0.6.0" + +jest-validate@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.2" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.4.0" + +jest-worker@22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.1.0.tgz#0987832fe58fbdc205357f4c19b992446368cafb" + dependencies: + merge-stream "^1.0.1" + +jest-worker@^22.1.0, jest-worker@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" + dependencies: + merge-stream "^1.0.1" + +jest@22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20" + dependencies: + import-local "^1.0.0" + jest-cli "^22.4.2" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^11.5.1: + version "11.6.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + dependencies: + abab "^1.0.4" + acorn "^5.3.0" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.2" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +left-pad@^1.1.3, left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.pad@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + +lodash.padend@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + +lodash.padstart@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + +lodash@^3.5.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.16.6, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.6.1: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +macos-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +method-override@~2.3.5: + version "2.3.10" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" + dependencies: + debug "2.6.9" + methods "~1.1.2" + parseurl "~1.3.2" + vary "~1.1.2" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +metro-core@0.24.7, metro-core@^0.24.3: + version "0.24.7" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.24.7.tgz#89e4fbea5bad574eb971459ebfa74c028f52d278" + dependencies: + lodash.throttle "^4.1.1" + +metro-source-map@0.24.7: + version "0.24.7" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.24.7.tgz#b13d0ae6417c2a2cd3d521ae6cd898196748ec0b" + dependencies: + source-map "^0.5.6" + +metro@^0.24.3: + version "0.24.7" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.24.7.tgz#42cecdb236b702d16243812294f7d3b97c43378d" + dependencies: + absolute-path "^0.0.0" + async "^2.4.0" + babel-core "^6.24.1" + babel-generator "^6.26.0" + babel-plugin-external-helpers "^6.18.0" + babel-preset-es2015-node "^6.1.1" + babel-preset-fbjs "^2.1.4" + babel-preset-react-native "^4.0.0" + babel-register "^6.24.1" + babylon "^6.18.0" + chalk "^1.1.1" + concat-stream "^1.6.0" + connect "^3.6.5" + core-js "^2.2.2" + debug "^2.2.0" + denodeify "^1.2.1" + eventemitter3 "^3.0.0" + fbjs "^0.8.14" + fs-extra "^1.0.0" + graceful-fs "^4.1.3" + image-size "^0.6.0" + jest-docblock "22.1.0" + jest-haste-map "22.1.0" + jest-worker "22.1.0" + json-stable-stringify "^1.0.1" + json5 "^0.4.0" + left-pad "^1.1.3" + lodash.throttle "^4.1.1" + merge-stream "^1.0.1" + metro-core "0.24.7" + metro-source-map "0.24.7" + mime-types "2.1.11" + mkdirp "^0.5.1" + request "^2.79.0" + rimraf "^2.5.4" + serialize-error "^2.1.0" + source-map "^0.5.6" + temp "0.8.3" + throat "^4.1.0" + uglify-es "^3.1.9" + wordwrap "^1.0.0" + write-file-atomic "^1.2.0" + ws "^1.1.0" + xpipe "^1.0.5" + yargs "^9.0.0" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-db@~1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + +mime-types@2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + dependencies: + mime-db "~1.23.0" + +mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +"mkdirp@>=0.5 0", mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +morgan@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" + dependencies: + basic-auth "~1.0.3" + debug "~2.2.0" + depd "~1.0.1" + on-finished "~2.3.0" + on-headers "~1.0.0" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multiparty@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" + dependencies: + readable-stream "~1.1.9" + stream-counter "~0.2.0" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +nan@^2.3.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-fetch@^1.0.1, node-fetch@^1.3.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.1.2, node-notifier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +nwmatcher@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.0, on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +opn@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" + dependencies: + object-assign "^4.0.1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e" + dependencies: + macos-release "^1.0.0" + win-release "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + +parseurl@~1.3.0, parseurl@~1.3.1, parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +pause@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" + +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +plist@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + dependencies: + base64-js "1.1.2" + xmlbuilder "8.2.2" + xmldom "0.1.x" + +plist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" + dependencies: + base64-js "0.0.8" + util-deprecate "1.0.2" + xmlbuilder "4.0.0" + xmldom "0.1.x" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.0.tgz#237b1f7e1c50ed03bc65c03ccc29d7c8bb7beb94" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pretty-format@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" + +private@^0.1.6, private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.8, prop-types@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + +qs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +range-parser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" + +raw-body@~2.1.2: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +rc@^1.1.7: + version "1.2.5" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-clone-referenced-element@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.0.1.tgz#2bba8c69404c5e4a944398600bcc4c941f860682" + +react-deep-force-update@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c" + +react-devtools-core@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.0.0.tgz#f683e19f0311108f97dbb5b29d948323a1bf7c03" + dependencies: + shell-quote "^1.6.1" + ws "^2.0.3" + +react-native@0.53.3: + version "0.53.3" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.53.3.tgz#930d1de5d68866f32a4b55112fc0228e29784e8f" + dependencies: + absolute-path "^0.0.0" + art "^0.10.0" + babel-core "^6.24.1" + babel-plugin-syntax-trailing-function-commas "^6.20.0" + babel-plugin-transform-async-to-generator "6.16.0" + babel-plugin-transform-class-properties "^6.18.0" + babel-plugin-transform-exponentiation-operator "^6.5.0" + babel-plugin-transform-flow-strip-types "^6.21.0" + babel-plugin-transform-object-rest-spread "^6.20.2" + babel-register "^6.24.1" + babel-runtime "^6.23.0" + base64-js "^1.1.2" + chalk "^1.1.1" + commander "^2.9.0" + connect "^2.8.3" + create-react-class "^15.5.2" + debug "^2.2.0" + denodeify "^1.2.1" + envinfo "^3.0.0" + event-target-shim "^1.0.5" + fbjs "^0.8.14" + fbjs-scripts "^0.8.1" + fs-extra "^1.0.0" + glob "^7.1.1" + graceful-fs "^4.1.3" + inquirer "^3.0.6" + lodash "^4.16.6" + metro "^0.24.3" + metro-core "^0.24.3" + mime "^1.3.4" + minimist "^1.2.0" + mkdirp "^0.5.1" + node-fetch "^1.3.3" + node-notifier "^5.1.2" + npmlog "^2.0.4" + opn "^3.0.2" + optimist "^0.6.1" + plist "^1.2.0" + pretty-format "^4.2.1" + promise "^7.1.1" + prop-types "^15.5.8" + react-clone-referenced-element "^1.0.1" + react-devtools-core "3.0.0" + react-timer-mixin "^0.13.2" + regenerator-runtime "^0.11.0" + rimraf "^2.5.4" + semver "^5.0.3" + shell-quote "1.6.1" + stacktrace-parser "^0.1.3" + whatwg-fetch "^1.0.0" + ws "^1.1.0" + xcode "^0.9.1" + xmldoc "^0.4.0" + yargs "^9.0.0" + +react-proxy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + dependencies: + lodash "^4.6.1" + react-deep-force-update "^1.0.0" + +react-test-renderer@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" + dependencies: + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react-timer-mixin@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" + +react-transform-hmr@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + dependencies: + global "^4.3.0" + react-proxy "^1.1.7" + +react@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.4" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readable-stream@~1.1.8, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + dependencies: + util.promisify "^1.0.0" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@^2.79.0, request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +response-time@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" + dependencies: + depd "~1.1.0" + on-headers "~1.0.1" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +rndm@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-buffer@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sane@^2.0.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.4.1.tgz#29f991208cf28636720efdc584293e7fd66663a5" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.1.1" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +sax@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + +"semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +send@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.3.1" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.0.3" + statuses "~1.2.1" + +serialize-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + +serve-favicon@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" + dependencies: + etag "~1.7.0" + fresh "0.3.0" + ms "0.7.2" + parseurl "~1.3.1" + +serve-index@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" + dependencies: + accepts "~1.2.13" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.3.1" + mime-types "~2.1.9" + parseurl "~1.3.1" + +serve-static@~1.10.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" + dependencies: + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.13.2" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shell-quote@1.6.1, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +simple-plist@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" + dependencies: + bplist-creator "0.0.7" + bplist-parser "0.1.1" + plist "2.0.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" + dependencies: + source-map "^0.6.0" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + +stacktrace-parser@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" + +statuses@1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +statuses@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + +stream-counter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" + dependencies: + readable-stream "~1.1.8" + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" + dependencies: + has-flag "^3.0.0" + +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +temp@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +test-exclude@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^4.0.0, throat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tsscmp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.6: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +ua-parser-js@^0.7.9: + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + +uglify-es@^3.1.9: + version "3.3.10" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5" + dependencies: + commander "~2.14.1" + source-map "~0.6.1" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uid-safe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" + dependencies: + random-bytes "~1.0.0" + +uid-safe@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" + dependencies: + base64-url "1.2.1" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +util-deprecate@1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vhost@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-fetch@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" + +whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + dependencies: + semver "^5.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" + dependencies: + safe-buffer "~5.0.1" + ultron "~1.1.0" + +ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + +xcode@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" + dependencies: + pegjs "^0.10.0" + simple-plist "^0.2.1" + uuid "3.0.1" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + +xmlbuilder@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" + dependencies: + lodash "^3.5.0" + +xmlbuilder@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + +xmldoc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" + dependencies: + sax "~1.1.1" + +xmldom@0.1.x: + version "0.1.27" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + +xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + +yargs@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git a/docs/Android/message_list_usage.md b/docs/Android/message_list_usage.md index e82c7262..5aefdbcf 100644 --- a/docs/Android/message_list_usage.md +++ b/docs/Android/message_list_usage.md @@ -10,7 +10,7 @@ We have support several ways to add dependency. You can choose one of them. - Gradle: ```groovy -compile 'cn.jiguang.imui:messagelist:0.5.8' +compile 'cn.jiguang.imui:messagelist:0.6.1' ``` - Maven: @@ -18,7 +18,7 @@ compile 'cn.jiguang.imui:messagelist:0.5.8' cn.jiguang.imui messagelist - 0.5.8 + 0.6.1 pom ``` @@ -35,7 +35,7 @@ allprojects { // Add in module's build.gradle dependencies { - compile 'com.github.jpush:imui:0.6.6' + compile 'com.github.jpush:imui:0.7.0' } ``` diff --git a/docs/Android/message_list_usage_zh.md b/docs/Android/message_list_usage_zh.md index 73ec79a8..856255a4 100644 --- a/docs/Android/message_list_usage_zh.md +++ b/docs/Android/message_list_usage_zh.md @@ -9,7 +9,7 @@ - Gradle ```groovy -compile 'cn.jiguang.imui:messagelist:0.5.8' +compile 'cn.jiguang.imui:messagelist:0.6.1' ``` - Maven @@ -17,7 +17,7 @@ compile 'cn.jiguang.imui:messagelist:0.5.8' cn.jiguang.imui messagelist - 0.5.8 + 0.6.1 pom ``` @@ -34,7 +34,7 @@ allprojects { // module/build.gradle dependencies { - compile 'com.github.jpush:imui:0.6.6' + compile 'com.github.jpush:imui:0.7.0' } ``` @@ -136,7 +136,7 @@ ptrLayout.setPtrHandler(new PtrHandler() { #### 设置 MessageList 自定义属性 -基本上所有的属性都支持在 xml 或在代码中设置,用户可自行选择。下面展示一下如何设置是否显示昵称。 +基本上所有的属性都支持在 xml 或在代码中设置,用户可自行选择。所有可以设置的自定义属性可以参考 [attrs.xml](/../../Android/messagelist/src/main/res/values/attrs.xml). 下面展示一下如何设置是否显示昵称。 ```Java MessageList messageList = (MessageList) findViewById(R.id.msg_list); diff --git a/iOS/IMUIInputView/Controllers/IMUIInputView.swift b/iOS/IMUIInputView/Controllers/IMUIInputView.swift index 54109487..0ecc605d 100644 --- a/iOS/IMUIInputView/Controllers/IMUIInputView.swift +++ b/iOS/IMUIInputView/Controllers/IMUIInputView.swift @@ -23,7 +23,8 @@ fileprivate var IMUIFeatureSelectorHeight:CGFloat = 46 fileprivate var IMUIShowFeatureViewAnimationDuration = 0.25 open class IMUIInputView: UIView { - + @objc open var inputTextViewLineHeight: Float = 5.0 + @objc open var inputTextViewTextColor: UIColor = UIColor(netHex: 0x555555) var inputViewStatus: IMUIInputStatus = .none @objc open weak var inputViewDelegate: IMUIInputViewDelegate? { didSet { @@ -141,9 +142,28 @@ extension IMUIInputView: UITextViewDelegate { public func textViewDidChange(_ textView: UITextView) { self.fitTextViewSize(textView) self.updateSendBtnToPhotoSendStatus() + if textView.markedTextRange == nil { + self.updateTextView(textView, lineSpacing: self.inputTextViewLineHeight) + } self.inputViewDelegate?.textDidChange?(text: textView.text) } + // config line space + func updateTextView(_ textView: UITextView, lineSpacing: Float) { + print("\(textView.text!)") + let attributedString = NSMutableAttributedString(string: textView.text!) + let mutableParagraphStyle = NSMutableParagraphStyle() + mutableParagraphStyle.lineSpacing = CGFloat(lineSpacing) + + attributedString.addAttributes([ + NSAttributedStringKey.font:textView.font, + NSAttributedStringKey.paragraphStyle: mutableParagraphStyle, + NSAttributedStringKey.foregroundColor: inputTextViewTextColor + ], range: NSMakeRange(0, textView.text.count)) + textView.attributedText = attributedString + + } + public func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { inputViewStatus = .text return true diff --git a/iOS/IMUIMessageCollectionView/Layout/IMUIMessageCellLayout.swift b/iOS/IMUIMessageCollectionView/Layout/IMUIMessageCellLayout.swift index ab899688..7f931a48 100644 --- a/iOS/IMUIMessageCollectionView/Layout/IMUIMessageCellLayout.swift +++ b/iOS/IMUIMessageCollectionView/Layout/IMUIMessageCellLayout.swift @@ -17,14 +17,16 @@ import UIKit @objc open class IMUIMessageCellLayout: NSObject, IMUIMessageCellLayoutProtocol { @objc public static var avatarSize: CGSize = CGSize(width: 40, height: 40) - @objc public static var avatarOffsetToCell: UIOffset = UIOffset(horizontal: 16, vertical: 16) + + @objc public static var avatarPadding: UIEdgeInsets = UIEdgeInsets(top: 16, left: 16, bottom: 0, right: 16) - @objc public static var timeLabelFrame: CGRect = CGRect.zero + @objc public static var timeLabelPadding: UIEdgeInsets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4) @objc public static var nameLabelSize: CGSize = CGSize(width: 200, height: 18) - @objc public static var nameLabelOffsetToAvatar: UIOffset = UIOffset(horizontal: 8 , vertical: 0) - - @objc public static var bubbleOffsetToAvatar: UIOffset = UIOffset(horizontal: 8 , vertical: 4) + + @objc public static var nameLabelPadding: UIEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8) + + @objc public static var bubblePadding: UIEdgeInsets = UIEdgeInsets(top: 4, left: 8, bottom: 0, right: 8) @objc public static var cellWidth: CGFloat = 0 @objc public static var cellContentInset: UIEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 0) @@ -41,25 +43,33 @@ import UIKit @objc public static var nameLabelTextColor: UIColor = UIColor(netHex: 0x7587A8) @objc public static var nameLabelTextFont: UIFont = UIFont.systemFont(ofSize: 12) + @objc public static var nameLablePadding: UIEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)// + @objc public static var timeStringColor: UIColor = UIColor(netHex: 0x90A6C4) @objc public static var timeStringFont: UIFont = UIFont.systemFont(ofSize: 12) + @objc public static var timeStringBackgroundColor: UIColor = UIColor.clear// +// @objc public static var timeStringPadding: UIEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)// + @objc public static var timeStringCornerRadius: CGFloat = 0.0// + @objc public init(isOutGoingMessage: Bool, - isNeedShowTime: Bool, - bubbleContentSize: CGSize, - bubbleContentInsets: UIEdgeInsets) { + isNeedShowTime: Bool, + bubbleContentSize: CGSize, + bubbleContentInsets: UIEdgeInsets, + timeLabelContentSize: CGSize) { self.isOutGoingMessage = isOutGoingMessage self.isNeedShowTime = isNeedShowTime self.bubbleContentSize = bubbleContentSize self.bubbleContentInsets = bubbleContentInsets - + self.timeLabelContentSize = timeLabelContentSize } open var isOutGoingMessage: Bool open var isNeedShowTime: Bool + open var timeLabelContentSize: CGSize open var bubbleContentSize: CGSize open var bubbleContentInsets: UIEdgeInsets @@ -80,45 +90,6 @@ import UIKit y: bubbleContentInset.top) return CGRect(origin: bubbleContentPostion, size: self.bubbleContentSize) } - - public var relativeAvatarOffsetToCell: UIOffset { - - if self.isOutGoingMessage { - if IMUIMessageCellLayout.isNeedShowOutGoingAvatar { - return UIOffset(horizontal: -IMUIMessageCellLayout.avatarOffsetToCell.horizontal, vertical: IMUIMessageCellLayout.avatarOffsetToCell.vertical) - } else { - return UIOffset.zero - } - - } else { - if IMUIMessageCellLayout.isNeedShowInComingAvatar { - return IMUIMessageCellLayout.avatarOffsetToCell - } else { - return UIOffset.zero - } - } - } - - public var relativeNameLabelOffsetToAvatar: UIOffset { - if self.isOutGoingMessage { - if IMUIMessageCellLayout.isNeedShowOutGoingName { - return UIOffset(horizontal: -IMUIMessageCellLayout.nameLabelOffsetToAvatar.horizontal, vertical: IMUIMessageCellLayout.nameLabelOffsetToAvatar.vertical) - } else { - return UIOffset.zero - } - - } else { - if IMUIMessageCellLayout.isNeedShowInComingName { - return IMUIMessageCellLayout.nameLabelOffsetToAvatar - } else { - return UIOffset.zero - } - } - } - - public var relativeBubbleOffsetToAvatar: UIOffset { - return IMUIMessageCellLayout.bubbleOffsetToAvatar - } public var relativeStatusViewOffsetToBubble: UIOffset { if self.isOutGoingMessage { @@ -135,15 +106,15 @@ import UIKit open var nameLabelFrame: CGRect { var nameLabelX: CGFloat - var nameLabelY = avatarFrame.top + IMUIMessageCellLayout.nameLabelOffsetToAvatar.vertical + let nameLabelY = avatarFrame.top + + IMUIMessageCellLayout.nameLabelPadding.top if isOutGoingMessage { - nameLabelX = IMUIMessageCellLayout.cellWidth - - IMUIMessageCellLayout.nameLabelSize.width + - relativeBubbleOffsetToAvatar.horizontal + - relativeAvatarOffsetToCell.horizontal - - avatarFrame.width + - relativeNameLabelOffsetToAvatar.horizontal + nameLabelX = avatarFrame.left - + IMUIMessageCellLayout.avatarPadding.left - + IMUIMessageCellLayout.nameLabelPadding.right - + IMUIMessageCellLayout.nameLabelSize.width + if !IMUIMessageCellLayout.isNeedShowOutGoingName { return CGRect(x: nameLabelX, y: nameLabelY, @@ -153,13 +124,10 @@ import UIKit } else { nameLabelX = avatarFrame.right + - relativeBubbleOffsetToAvatar.horizontal + - relativeNameLabelOffsetToAvatar.horizontal + IMUIMessageCellLayout.avatarPadding.right + + IMUIMessageCellLayout.nameLabelPadding.left if !IMUIMessageCellLayout.isNeedShowInComingName { - nameLabelX = avatarFrame.right + - relativeBubbleOffsetToAvatar.horizontal + - relativeNameLabelOffsetToAvatar.horizontal return CGRect(x: nameLabelX, y: nameLabelY, width: 0, @@ -178,21 +146,20 @@ import UIKit var avatarX: CGFloat if self.isOutGoingMessage { - avatarX = IMUIMessageCellLayout.cellWidth + - relativeAvatarOffsetToCell.horizontal - + avatarX = IMUIMessageCellLayout.cellWidth - + IMUIMessageCellLayout.avatarPadding.right - IMUIMessageCellLayout.avatarSize.width - cellContentInset.right } else { - avatarX = relativeAvatarOffsetToCell.horizontal + + avatarX = IMUIMessageCellLayout.avatarPadding.left + cellContentInset.left } - let avatarY = relativeAvatarOffsetToCell.vertical + - self.timeLabelFrame.size.height + + let avatarY = IMUIMessageCellLayout.avatarPadding.top + + self.timeLabelFrame.bottom + cellContentInset.top - if isOutGoingMessage { if !IMUIMessageCellLayout.isNeedShowOutGoingAvatar { return CGRect(x: avatarX, y: avatarY, width: 0, height: 0) @@ -211,35 +178,30 @@ import UIKit open var timeLabelFrame: CGRect { if self.isNeedShowTime { - let timeWidth = IMUIMessageCellLayout.cellWidth - - cellContentInset.left - - cellContentInset.right + let timeWidth = IMUIMessageCellLayout.timeLabelPadding.left + + timeLabelContentSize.width + + IMUIMessageCellLayout.timeLabelPadding.right + + let timeHeight = IMUIMessageCellLayout.timeLabelPadding.top + + timeLabelContentSize.height + + IMUIMessageCellLayout.timeLabelPadding.bottom - return CGRect(x: cellContentInset.left, + let timeX = (IMUIMessageCellLayout.cellWidth - timeWidth)/2 + + return CGRect(x: timeX, y: cellContentInset.top + 8, width: timeWidth, - height: 20) + height: timeHeight) } else { return CGRect.zero } } open var cellHeight: CGFloat { - var cellHeight = IMUIMessageCellLayout.bubbleOffsetToAvatar.vertical + - IMUIMessageCellLayout.timeLabelFrame.size.height + - self.avatarFrame.origin.y + - self.bubbleSize.height + - cellContentInset.top + + let cellHeight = self.bubbleFrame.bottom + + IMUIMessageCellLayout.bubblePadding.bottom + cellContentInset.bottom - if self.isOutGoingMessage { - if IMUIMessageCellLayout.isNeedShowOutGoingName { - cellHeight += IMUIMessageCellLayout.nameLabelSize.height + IMUIMessageCellLayout.nameLabelOffsetToAvatar.vertical - } - } else { - if IMUIMessageCellLayout.isNeedShowInComingName { - cellHeight += IMUIMessageCellLayout.nameLabelSize.height + IMUIMessageCellLayout.nameLabelOffsetToAvatar.vertical - } - } + return cellHeight } @@ -247,31 +209,22 @@ import UIKit var bubbleX:CGFloat if self.isOutGoingMessage { - bubbleX = IMUIMessageCellLayout.cellWidth + - relativeAvatarOffsetToCell.horizontal - + bubbleX = IMUIMessageCellLayout.cellWidth - + IMUIMessageCellLayout.avatarPadding.right - avatarFrame.width - - relativeBubbleOffsetToAvatar.horizontal - + IMUIMessageCellLayout.bubblePadding.right - cellContentInset.right - self.bubbleSize.width } else { - bubbleX = relativeAvatarOffsetToCell.horizontal + + bubbleX = IMUIMessageCellLayout.avatarPadding.left + avatarFrame.width + - relativeBubbleOffsetToAvatar.horizontal + + IMUIMessageCellLayout.bubblePadding.left + cellContentInset.left } - var bubbleY = relativeBubbleOffsetToAvatar.vertical + - self.avatarFrame.top + - IMUIMessageCellLayout.timeLabelFrame.size.height + let bubbleY = self.nameLabelFrame.bottom + + IMUIMessageCellLayout.nameLabelPadding.bottom + + IMUIMessageCellLayout.bubblePadding.top - if isOutGoingMessage { - if IMUIMessageCellLayout.isNeedShowOutGoingName { - bubbleY += IMUIMessageCellLayout.nameLabelSize.height + IMUIMessageCellLayout.nameLabelOffsetToAvatar.vertical - } - } else { - if IMUIMessageCellLayout.isNeedShowInComingName { - bubbleY += IMUIMessageCellLayout.nameLabelSize.height + IMUIMessageCellLayout.nameLabelOffsetToAvatar.vertical - } - } return CGRect(x: bubbleX, y: bubbleY, diff --git a/iOS/IMUIMessageCollectionView/Views/IMUIBaseMessageCell.swift b/iOS/IMUIMessageCollectionView/Views/IMUIBaseMessageCell.swift index 7baaf890..b7c2d670 100644 --- a/iOS/IMUIMessageCollectionView/Views/IMUIBaseMessageCell.swift +++ b/iOS/IMUIMessageCollectionView/Views/IMUIBaseMessageCell.swift @@ -15,12 +15,13 @@ enum IMUIMessageCellType { } open class IMUIBaseMessageCell: UICollectionViewCell, IMUIMessageCellProtocol { - @objc open static var avatarCornerRadius:CGFloat = 0 + @objc open static var avatarCornerRadius: CGFloat = 0 @objc open static var backgroundColor: UIColor = UIColor.init(netHex: 0xE7EBEF) + var bubbleView: IMUIMessageBubbleView lazy var avatarImage = UIImageView() - lazy var timeLabel = UILabel() + lazy var timeLabel = IMUITextView() lazy var nameLabel = UILabel() weak var statusView: UIView? @@ -63,6 +64,11 @@ open class IMUIBaseMessageCell: UICollectionViewCell, IMUIMessageCellProtocol { timeLabel.textAlignment = .center timeLabel.textColor = IMUIMessageCellLayout.timeStringColor timeLabel.font = IMUIMessageCellLayout.timeStringFont + timeLabel.backgroundColor = IMUIMessageCellLayout.timeStringBackgroundColor + timeLabel.contentInset = IMUIMessageCellLayout.timeLabelPadding + timeLabel.layer.cornerRadius = IMUIMessageCellLayout.timeStringCornerRadius + timeLabel.layer.masksToBounds = true; + } required public init?(coder aDecoder: NSCoder) { diff --git a/iOS/sample/sample/MyMessageModel.swift b/iOS/sample/sample/MyMessageModel.swift index 5a92ded3..587e9197 100644 --- a/iOS/sample/sample/MyMessageModel.swift +++ b/iOS/sample/sample/MyMessageModel.swift @@ -35,16 +35,22 @@ class MyMessageModel: IMUIMessageModel { convenience init(text: String, isOutGoing: Bool) { let myLayout = MyMessageCellLayout(isOutGoingMessage: isOutGoing, - isNeedShowTime: false, - bubbleContentSize: MyMessageModel.calculateTextContentSize(text: text), bubbleContentInsets: UIEdgeInsets.zero, type: "text") + isNeedShowTime: false, + bubbleContentSize: MyMessageModel.calculateTextContentSize(text: text), + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: CGSize.zero, + type: "text") let msgId = "\(NSDate().timeIntervalSince1970 * 1000)" self.init(msgId: msgId, messageStatus: .failed, fromUser: MyUser(), isOutGoing: isOutGoing, date: Date(), type: "text", text: text, mediaPath: "", layout: myLayout, duration: nil) } convenience init(voicePath: String, duration: CGFloat, isOutGoing: Bool) { let myLayout = MyMessageCellLayout(isOutGoingMessage: isOutGoing, - isNeedShowTime: false, - bubbleContentSize: CGSize(width: 80, height: 37), bubbleContentInsets: UIEdgeInsets.zero, type: "voice") + isNeedShowTime: false, + bubbleContentSize: CGSize(width: 80, height: 37), + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: CGSize.zero, + type: "voice") let msgId = "\(NSDate().timeIntervalSince1970 * 1000)" self.init(msgId: msgId, messageStatus: .sending, fromUser: MyUser(), isOutGoing: isOutGoing, date: Date(), type: "voice", text: "", mediaPath: voicePath, layout: myLayout, duration: duration) } @@ -58,15 +64,21 @@ class MyMessageModel: IMUIMessageModel { } let myLayout = MyMessageCellLayout(isOutGoingMessage: isOutGoing, - isNeedShowTime: false, - bubbleContentSize: imgSize, bubbleContentInsets: UIEdgeInsets.zero, type: "image") + isNeedShowTime: false, + bubbleContentSize: imgSize, + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: CGSize.zero, + type: "image") self.init(msgId: msgId, messageStatus: .sending, fromUser: MyUser(), isOutGoing: isOutGoing, date: Date(), type: "image", text: "", mediaPath: imagePath, layout: myLayout, duration: nil) } convenience init(videoPath: String, isOutGoing: Bool) { let myLayout = MyMessageCellLayout(isOutGoingMessage: isOutGoing, - isNeedShowTime: false, - bubbleContentSize: CGSize(width: 120, height: 160), bubbleContentInsets: UIEdgeInsets.zero, type: "video") + isNeedShowTime: false, + bubbleContentSize: CGSize(width: 120, height: 160), + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: CGSize.zero, + type: "video") let msgId = "\(NSDate().timeIntervalSince1970 * 1000)" self.init(msgId: msgId, messageStatus: .sending, fromUser: MyUser(), isOutGoing: isOutGoing, date: Date(), type: "video", text: "", mediaPath: videoPath, layout: myLayout, duration: nil) } @@ -81,6 +93,11 @@ class MyMessageModel: IMUIMessageModel { return textSize } + static func calculateNameContentSize(text: String) -> CGSize { + return text.sizeWithConstrainedWidth(with: 200, + font: IMUIMessageCellLayout.timeStringFont) + } + static func converImageSize(with size: CGSize) -> CGSize { let maxSide = 160.0 @@ -102,9 +119,13 @@ class MyMessageCellLayout: IMUIMessageCellLayout { var type: String - init(isOutGoingMessage: Bool, isNeedShowTime: Bool, bubbleContentSize: CGSize, bubbleContentInsets: UIEdgeInsets, type: String) { + init(isOutGoingMessage: Bool, isNeedShowTime: Bool, bubbleContentSize: CGSize, bubbleContentInsets: UIEdgeInsets, timeLabelContentSize: CGSize,type: String) { self.type = type - super.init(isOutGoingMessage: isOutGoingMessage, isNeedShowTime: isNeedShowTime, bubbleContentSize: bubbleContentSize, bubbleContentInsets: UIEdgeInsets.zero) + super.init(isOutGoingMessage: isOutGoingMessage, + isNeedShowTime: isNeedShowTime, + bubbleContentSize: bubbleContentSize, + bubbleContentInsets: UIEdgeInsets.zero, + timeLabelContentSize: timeLabelContentSize) } override var bubbleContentInset: UIEdgeInsets { diff --git a/iOS/sampleObjectC/sampleObjectC/MessageLayout.h b/iOS/sampleObjectC/sampleObjectC/MessageLayout.h index 65b09ea1..fa2ae80d 100644 --- a/iOS/sampleObjectC/sampleObjectC/MessageLayout.h +++ b/iOS/sampleObjectC/sampleObjectC/MessageLayout.h @@ -36,9 +36,10 @@ @property (nonatomic, copy) NSString * _Nonnull bubbleContentType; -- (instancetype)initWithIsOutGoingMessage:(BOOL)isOutgoing - isNeedShowTime:(BOOL)isNeedShowTime - bubbleContentSize:(CGSize)bubbleContentSize - bubbleContentInsets:(UIEdgeInsets)contentInset - contentType:(NSString *)contentType; +- (instancetype _Nullable )initWithIsOutGoingMessage:(BOOL) isOutgoing + isNeedShowTime:(BOOL) isNeedShowTime + bubbleContentSize:(CGSize) bubbleContentSize + bubbleContentInsets:(UIEdgeInsets) contentInset + timeLabelContentSize:(CGSize) timeLabelContentSize + contentType:(NSString *_Nonnull) contentType; @end diff --git a/iOS/sampleObjectC/sampleObjectC/MessageLayout.m b/iOS/sampleObjectC/sampleObjectC/MessageLayout.m index f8c0e27b..ef27e314 100644 --- a/iOS/sampleObjectC/sampleObjectC/MessageLayout.m +++ b/iOS/sampleObjectC/sampleObjectC/MessageLayout.m @@ -27,11 +27,15 @@ - (instancetype)init return self; } -- (instancetype)initWithIsOutGoingMessage:(BOOL)isOutgoing isNeedShowTime:(BOOL)isNeedShowTime bubbleContentSize:(CGSize)bubbleContentSize bubbleContentInsets:(UIEdgeInsets)contentInset contentType:(NSString *)contentType { +- (instancetype)initWithIsOutGoingMessage:(BOOL)isOutgoing isNeedShowTime:(BOOL)isNeedShowTime bubbleContentSize:(CGSize)bubbleContentSize bubbleContentInsets:(UIEdgeInsets)contentInset timeLabelContentSize:(CGSize)timeLabelContentSize contentType:(NSString *)contentType { self = [super init]; if (self) { - _layout = [[IMUIMessageCellLayout alloc] initWithIsOutGoingMessage: isOutgoing isNeedShowTime: isNeedShowTime bubbleContentSize: bubbleContentSize bubbleContentInsets: contentInset]; + _layout = [[IMUIMessageCellLayout alloc] initWithIsOutGoingMessage: isOutgoing + isNeedShowTime: isNeedShowTime + bubbleContentSize: bubbleContentSize + bubbleContentInsets: contentInset + timeLabelContentSize: timeLabelContentSize]; _isOutgoing = isOutgoing; _bubbleContentType = contentType; } diff --git a/iOS/sampleObjectC/sampleObjectC/MessageModel.m b/iOS/sampleObjectC/sampleObjectC/MessageModel.m index 526167ae..cd6cec53 100644 --- a/iOS/sampleObjectC/sampleObjectC/MessageModel.m +++ b/iOS/sampleObjectC/sampleObjectC/MessageModel.m @@ -44,10 +44,11 @@ - (void)setupTextMessage:(NSString *)msgId } else { contentInset = UIEdgeInsetsMake(10, 15, 10, 10); } - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false - bubbleContentSize:[MessageModel calculateTextContentSizeWithText: text] - bubbleContentInsets:contentInset + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false + bubbleContentSize: [MessageModel calculateTextContentSizeWithText: text] + bubbleContentInsets: contentInset + timeLabelContentSize: CGSizeZero contentType: @"Text"]; _type = @"Text"; } @@ -97,6 +98,7 @@ - (void)setupVoiceMessage:(NSString *)msgId isNeedShowTime:false bubbleContentSize: CGSizeMake(80, 37) bubbleContentInsets: UIEdgeInsetsZero + timeLabelContentSize: CGSizeZero contentType: @"Voice"]; _type = @"Voice"; } @@ -113,10 +115,11 @@ - (void)setupImageMessage:(NSString *)msgId _messagemediaPath = mediaPath; _isOutGoing = isOutGoing; _messageStatus = messageStatus; - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false bubbleContentSize: CGSizeMake(120, 160) bubbleContentInsets: UIEdgeInsetsZero + timeLabelContentSize: CGSizeZero contentType: @"Image"]; _type = @"Image"; @@ -134,10 +137,11 @@ - (void)setupVideoMessage:(NSString *)msgId _messagemediaPath = mediaPath; _isOutGoing = isOutGoing; _messageStatus = messageStatus; - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false bubbleContentSize: CGSizeMake(120, 160) bubbleContentInsets: UIEdgeInsetsZero + timeLabelContentSize: CGSizeZero contentType: @"Video"]; _type = @"Video"; } @@ -164,10 +168,11 @@ - (instancetype)initWithText:(NSString *)text } else { contentInset = UIEdgeInsetsMake(10, 15, 10, 10); } - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false - bubbleContentSize:[MessageModel calculateTextContentSizeWithText: text] - bubbleContentInsets:contentInset + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false + bubbleContentSize: [MessageModel calculateTextContentSizeWithText: text] + bubbleContentInsets: contentInset + timeLabelContentSize: CGSizeZero contentType: @"Text"]; _type = @"Text"; } @@ -189,10 +194,11 @@ - (instancetype)initWithImagePath:(NSString *) mediaPath _messagemediaPath = mediaPath; _isOutGoing = isOutGoing; _messageStatus = messageStatus; - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false bubbleContentSize: CGSizeMake(120, 160) bubbleContentInsets: UIEdgeInsetsZero + timeLabelContentSize: CGSizeZero contentType: @"Image"]; _type = @"Image"; @@ -217,10 +223,11 @@ - (instancetype)initWithVoicePath:(NSString *) mediaPath _isOutGoing = isOutGoing; _messageStatus = messageStatus; _duration = duration; - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false bubbleContentSize: CGSizeMake(80, 37) bubbleContentInsets: UIEdgeInsetsZero + timeLabelContentSize: CGSizeZero contentType: @"Voice"]; _type = @"Voice"; } @@ -242,10 +249,11 @@ - (instancetype)initWithVideoPath:(NSString *) mediaPath _messagemediaPath = mediaPath; _isOutGoing = isOutGoing; _messageStatus = messageStatus; - _layout = [[MessageLayout alloc] initWithIsOutGoingMessage:isOutGoing - isNeedShowTime:false + _layout = [[MessageLayout alloc] initWithIsOutGoingMessage: isOutGoing + isNeedShowTime: false bubbleContentSize: CGSizeMake(120, 160) bubbleContentInsets: UIEdgeInsetsZero + timeLabelContentSize: CGSizeZero contentType: @"Video"]; _type = @"Video"; } diff --git a/package.json b/package.json index fa4ed4a1..182c5ecf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aurora-imui-react-native", - "version": "0.8.2", + "version": "0.9.0", "description": "aurora imui plugin for react native application", "main": "index.js",