@bigbinary/neetoui-rn 0.0.233 → 0.0.235

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -40,7 +40,6 @@ import {
40
40
  ToastShowParams,
41
41
  ToastConfig,
42
42
  } from "react-native-toast-message";
43
- import { RippleProps } from "react-native-material-ripple";
44
43
  import { FastImageProps } from "react-native-fast-image";
45
44
 
46
45
  import { theme as themeDef } from "./src/theme";
@@ -106,8 +105,22 @@ interface TouchableOpacityProps
106
105
  ButtonStyleProps {
107
106
  children?: React.ReactNode;
108
107
  }
109
- interface TouchableProps extends RippleProps, StyleProps, ButtonStyleProps {
108
+
109
+ interface RipplePropTypes {
110
+ isCentered?: boolean;
111
+ isSequential?: boolean;
112
+ shouldFade?: boolean;
113
+ shouldOverflowContainer?: boolean;
114
+ color?: string;
115
+ opacity?: number;
116
+ duration?: number;
117
+ size?: number;
118
+ containerBorderRadius?: number;
119
+ }
120
+
121
+ interface TouchableProps extends StyleProps, ButtonStyleProps {
110
122
  children?: React.ReactNode;
123
+ rippleConfig?: RipplePropTypes;
111
124
  }
112
125
 
113
126
  interface AccordionProps extends ViewProps {
@@ -1 +1 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Button=exports.BUTTON_VARIANTS=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("@styled-system/prop-types"));var _propTypes2=_interopRequireDefault(require("prop-types"));var _reactNativeSizeMatters=require("react-native-size-matters");var _native=require("styled-components/native");var _=require("./");var _excluded=["variant","label","labelStyle","RightIcon","LeftIcon","disabled","isLoading","loadingText","fontFamily","color","fontSize"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Button.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var BUTTON_VARIANTS=Object.freeze({SOLID:"solid",SECONDARY:"secondary",TEXT:"text",DANGER:"danger",DANGER_INVERSE:"danger-inverse",DANGER_TEXT:"danger-text"});exports.BUTTON_VARIANTS=BUTTON_VARIANTS;var Button=function Button(_ref){var variant=_ref.variant,label=_ref.label,labelStyle=_ref.labelStyle,RightIcon=_ref.RightIcon,LeftIcon=_ref.LeftIcon,disabled=_ref.disabled,isLoading=_ref.isLoading,loadingText=_ref.loadingText,fontFamily=_ref.fontFamily,color=_ref.color,fontSize=_ref.fontSize,rest=(0,_objectWithoutProperties2.default)(_ref,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var width=variant==="text"||variant==="danger-text"?null:"100%";var getButtonColors=function getButtonColors(){switch(variant){case BUTTON_VARIANTS.SOLID:return{bg:theme.colors.background[disabled?"grey400":"base"],border:theme.colors.background[disabled?"grey400":"base"],color:theme.colors.background.white,ripple:"white"};case BUTTON_VARIANTS.SECONDARY:return{bg:"transparent",border:theme.colors.background.base,color:theme.colors.font.base,ripple:theme.colors.background.base};case BUTTON_VARIANTS.TEXT:return{bg:"transparent",border:"transparent",color:theme.colors.font.primary,ripple:theme.colors.background.grey800};case BUTTON_VARIANTS.DANGER:return{bg:theme.colors.background.danger,border:theme.colors.background.danger,color:theme.colors.background.white,ripple:"white"};case BUTTON_VARIANTS.DANGER_INVERSE:return{bg:theme.colors.background.white,border:theme.colors.background.danger,color:theme.colors.background.danger,ripple:theme.colors.background.grey800};case BUTTON_VARIANTS.DANGER_TEXT:return{bg:"transparent",border:"transparent",color:theme.colors.background.danger,ripple:theme.colors.background.grey800};default:return{bg:theme.colors.background[disabled?"grey400":"base"],border:theme.colors.background[disabled?"grey400":"base"],color:theme.colors.background.white,ripple:"white"};}};var renderOpacity=function renderOpacity(){if(["secondary","danger","danger-inverse","danger-text"].includes(variant)&&disabled){return 0.5;}return 1;};return _react.default.createElement(_.Touchable,(0,_extends2.default)({alignItems:"center",bg:getButtonColors().bg,borderColor:getButtonColors().border,borderRadius:(0,_reactNativeSizeMatters.moderateScale)(8),borderWidth:(0,_reactNativeSizeMatters.moderateScale)(1),disabled:disabled||isLoading,flexDirection:"row",height:(0,_reactNativeSizeMatters.moderateScale)(48),justifyContent:"center",opacity:renderOpacity(),rippleColor:getButtonColors().ripple,width:width},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:157,columnNumber:5}}),isLoading?_react.default.createElement(_.Container,{flexDirection:"row",__self:_this,__source:{fileName:_jsxFileName,lineNumber:173,columnNumber:9}},_react.default.createElement(_.Loader,{color:getButtonColors().color,__self:_this,__source:{fileName:_jsxFileName,lineNumber:174,columnNumber:11}}),!!loadingText&&_react.default.createElement(_.Typography,(0,_extends2.default)({color:color||getButtonColors().color,fontFamily:fontFamily||theme.fonts.sf500,fontSize:fontSize,mx:(0,_reactNativeSizeMatters.moderateScale)(2),textAlign:"center"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:176,columnNumber:13}}),loadingText)):_react.default.createElement(_react.default.Fragment,null,LeftIcon&&_react.default.createElement(LeftIcon,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:190,columnNumber:24}}),_react.default.createElement(_.Typography,(0,_extends2.default)({color:color||getButtonColors().color,fontFamily:fontFamily||theme.fonts.sf500,fontSize:fontSize,mx:(0,_reactNativeSizeMatters.moderateScale)(2),textAlign:"center"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:191,columnNumber:11}}),label),RightIcon&&_react.default.createElement(RightIcon,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:201,columnNumber:25}})));};exports.Button=Button;Button.defaultProps={variant:"solid",isLoading:false,loadingText:"",fontSize:"m"};Button.propTypes=(0,_extends2.default)({},_propTypes.default.buttonStyle,_propTypes.default.flexbox,_propTypes.default.space,_propTypes.default.border,_propTypes.default.layout,_propTypes.default.color,{label:_propTypes2.default.string.isRequired,variant:_propTypes2.default.oneOf(Object.values(BUTTON_VARIANTS)),disabled:_propTypes2.default.bool,labelStyle:_propTypes2.default.object,RightIcon:_propTypes2.default.elementType,LeftIcon:_propTypes2.default.elementType,isLoading:_propTypes2.default.bool,loadingText:_propTypes2.default.string,fontFamily:_propTypes2.default.string,color:_propTypes2.default.string,fontSize:_propTypes2.default.string});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Button=exports.BUTTON_VARIANTS=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("@styled-system/prop-types"));var _propTypes2=_interopRequireDefault(require("prop-types"));var _reactNativeSizeMatters=require("react-native-size-matters");var _native=require("styled-components/native");var _=require("./");var _excluded=["variant","label","labelStyle","RightIcon","LeftIcon","disabled","isLoading","loadingText","fontFamily","color","fontSize"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Button.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var BUTTON_VARIANTS=Object.freeze({SOLID:"solid",SECONDARY:"secondary",TEXT:"text",DANGER:"danger",DANGER_INVERSE:"danger-inverse",DANGER_TEXT:"danger-text"});exports.BUTTON_VARIANTS=BUTTON_VARIANTS;var Button=function Button(_ref){var variant=_ref.variant,label=_ref.label,labelStyle=_ref.labelStyle,RightIcon=_ref.RightIcon,LeftIcon=_ref.LeftIcon,disabled=_ref.disabled,isLoading=_ref.isLoading,loadingText=_ref.loadingText,fontFamily=_ref.fontFamily,color=_ref.color,fontSize=_ref.fontSize,rest=(0,_objectWithoutProperties2.default)(_ref,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var width=variant==="text"||variant==="danger-text"?null:"100%";var getButtonColors=function getButtonColors(){switch(variant){case BUTTON_VARIANTS.SOLID:return{bg:theme.colors.background[disabled?"grey400":"base"],border:theme.colors.background[disabled?"grey400":"base"],color:theme.colors.background.white,ripple:"white"};case BUTTON_VARIANTS.SECONDARY:return{bg:"transparent",border:theme.colors.background.base,color:theme.colors.font.base,ripple:theme.colors.background.base};case BUTTON_VARIANTS.TEXT:return{bg:"transparent",border:"transparent",color:theme.colors.font.primary,ripple:theme.colors.background.grey800};case BUTTON_VARIANTS.DANGER:return{bg:theme.colors.background.danger,border:theme.colors.background.danger,color:theme.colors.background.white,ripple:"white"};case BUTTON_VARIANTS.DANGER_INVERSE:return{bg:theme.colors.background.white,border:theme.colors.background.danger,color:theme.colors.background.danger,ripple:theme.colors.background.grey800};case BUTTON_VARIANTS.DANGER_TEXT:return{bg:"transparent",border:"transparent",color:theme.colors.background.danger,ripple:theme.colors.background.grey800};default:return{bg:theme.colors.background[disabled?"grey400":"base"],border:theme.colors.background[disabled?"grey400":"base"],color:theme.colors.background.white,ripple:"white"};}};var renderOpacity=function renderOpacity(){if(["secondary","danger","danger-inverse","danger-text"].includes(variant)&&disabled){return 0.5;}return 1;};return _react.default.createElement(_.Touchable,(0,_extends2.default)({alignItems:"center",bg:getButtonColors().bg,borderColor:getButtonColors().border,borderRadius:(0,_reactNativeSizeMatters.moderateScale)(8),borderWidth:(0,_reactNativeSizeMatters.moderateScale)(1),disabled:disabled||isLoading,flexDirection:"row",height:(0,_reactNativeSizeMatters.moderateScale)(48),justifyContent:"center",opacity:renderOpacity(),px:width===null?(0,_reactNativeSizeMatters.moderateScale)(8):undefined,rippleConfig:{color:getButtonColors().ripple},width:width},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:157,columnNumber:5}}),isLoading?_react.default.createElement(_.Container,{flexDirection:"row",__self:_this,__source:{fileName:_jsxFileName,lineNumber:174,columnNumber:9}},_react.default.createElement(_.Loader,{color:getButtonColors().color,__self:_this,__source:{fileName:_jsxFileName,lineNumber:175,columnNumber:11}}),!!loadingText&&_react.default.createElement(_.Typography,(0,_extends2.default)({color:color||getButtonColors().color,fontFamily:fontFamily||theme.fonts.sf500,fontSize:fontSize,ml:(0,_reactNativeSizeMatters.moderateScale)(8),textAlign:"center"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:177,columnNumber:13}}),loadingText)):_react.default.createElement(_react.default.Fragment,null,LeftIcon&&_react.default.createElement(LeftIcon,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:191,columnNumber:24}}),_react.default.createElement(_.Typography,(0,_extends2.default)({color:color||getButtonColors().color,fontFamily:fontFamily||theme.fonts.sf500,fontSize:fontSize,mx:(0,_reactNativeSizeMatters.moderateScale)(2),textAlign:"center"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:192,columnNumber:11}}),label),RightIcon&&_react.default.createElement(RightIcon,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:202,columnNumber:25}})));};exports.Button=Button;Button.defaultProps={variant:"solid",isLoading:false,loadingText:"",fontSize:"m"};Button.propTypes=(0,_extends2.default)({},_propTypes.default.buttonStyle,_propTypes.default.flexbox,_propTypes.default.space,_propTypes.default.border,_propTypes.default.layout,_propTypes.default.color,{label:_propTypes2.default.string.isRequired,variant:_propTypes2.default.oneOf(Object.values(BUTTON_VARIANTS)),disabled:_propTypes2.default.bool,labelStyle:_propTypes2.default.object,RightIcon:_propTypes2.default.elementType,LeftIcon:_propTypes2.default.elementType,isLoading:_propTypes2.default.bool,loadingText:_propTypes2.default.string,fontFamily:_propTypes2.default.string,color:_propTypes2.default.string,fontSize:_propTypes2.default.string});
@@ -0,0 +1 @@
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _assertThisInitialized2=_interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeSizeMatters=require("react-native-size-matters");var _TouchableWithoutFeedback=_interopRequireDefault(require("./TouchableWithoutFeedback"));var _excluded=["delayLongPress","delayPressIn","delayPressOut","disabled","hitSlop","pressRetentionOffset","children","rippleContainerBorderRadius","rippleOutsideContainer","testID","nativeID","accessible","accessibilityHint","accessibilityLabel"];var _jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Ripple.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=(0,_getPrototypeOf2.default)(Derived),result;if(hasNativeReflectConstruct){var NewTarget=(0,_getPrototypeOf2.default)(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return(0,_possibleConstructorReturn2.default)(this,result);};}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true;}catch(e){return false;}}var radius=(0,_reactNativeSizeMatters.moderateScale)(10);var Ripple=function(_PureComponent){(0,_inherits2.default)(Ripple,_PureComponent);var _super=_createSuper(Ripple);function Ripple(props){var _this;(0,_classCallCheck2.default)(this,Ripple);_this=_super.call(this,props);_this.onLayout=_this.onLayout.bind((0,_assertThisInitialized2.default)(_this));_this.onPress=_this.onPress.bind((0,_assertThisInitialized2.default)(_this));_this.onPressIn=_this.onPressIn.bind((0,_assertThisInitialized2.default)(_this));_this.onPressOut=_this.onPressOut.bind((0,_assertThisInitialized2.default)(_this));_this.onLongPress=_this.onLongPress.bind((0,_assertThisInitialized2.default)(_this));_this.onAnimationEnd=_this.onAnimationEnd.bind((0,_assertThisInitialized2.default)(_this));_this.renderRipple=_this.renderRipple.bind((0,_assertThisInitialized2.default)(_this));_this.unique=0;_this.mounted=false;_this.state={width:0,height:0,ripples:[]};return _this;}(0,_createClass2.default)(Ripple,[{key:"componentDidMount",value:function componentDidMount(){this.mounted=true;}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.mounted=false;}},{key:"onLayout",value:function onLayout(event){var _event$nativeEvent$la=event.nativeEvent.layout,width=_event$nativeEvent$la.width,height=_event$nativeEvent$la.height;var onLayout=this.props.onLayout;if("function"===typeof onLayout){onLayout(event);}this.setState({width:width,height:height});}},{key:"onPress",value:function onPress(event){var ripples=this.state.ripples;var _this$props=this.props,onPress=_this$props.onPress,rippleSequential=_this$props.rippleSequential;if(!rippleSequential||!ripples.length){if("function"===typeof onPress){requestAnimationFrame(function(){return onPress(event);});}this.startRipple(event);}}},{key:"onLongPress",value:function onLongPress(event){var onLongPress=this.props.onLongPress;if("function"===typeof onLongPress){requestAnimationFrame(function(){return onLongPress(event);});}this.startRipple(event);}},{key:"onPressIn",value:function onPressIn(event){var onPressIn=this.props.onPressIn;if("function"===typeof onPressIn){onPressIn(event);}}},{key:"onPressOut",value:function onPressOut(event){var onPressOut=this.props.onPressOut;if("function"===typeof onPressOut){onPressOut(event);}}},{key:"onAnimationEnd",value:function onAnimationEnd(){if(this.mounted){this.setState(function(_ref){var ripples=_ref.ripples;return{ripples:ripples.slice(1)};});}}},{key:"startRipple",value:function startRipple(event){var _this$state=this.state,width=_this$state.width,height=_this$state.height;var _this$props2=this.props,rippleDuration=_this$props2.rippleDuration,rippleCentered=_this$props2.rippleCentered,rippleSize=_this$props2.rippleSize,onRippleAnimation=_this$props2.onRippleAnimation;var w2=0.5*width;var h2=0.5*height;var _ref2=rippleCentered?{locationX:w2,locationY:h2}:event.nativeEvent,locationX=_ref2.locationX,locationY=_ref2.locationY;var offsetX=Math.abs(w2-locationX);var offsetY=Math.abs(h2-locationY);var size=rippleSize>0?0.5*rippleSize:Math.sqrt(Math.pow(w2+offsetX,2)+Math.pow(h2+offsetY,2));var ripple={unique:this.unique++,progress:new _reactNative.Animated.Value(0),locationX:locationX,locationY:locationY,size:size};var animation=_reactNative.Animated.timing(ripple.progress,{toValue:1,easing:_reactNative.Easing.out(_reactNative.Easing.ease),duration:rippleDuration,useNativeDriver:true});onRippleAnimation(animation,this.onAnimationEnd);this.setState(function(_ref3){var ripples=_ref3.ripples;return{ripples:ripples.concat(ripple)};});}},{key:"renderRipple",value:function renderRipple(_ref4){var _rippleStyle;var unique=_ref4.unique,progress=_ref4.progress,locationX=_ref4.locationX,locationY=_ref4.locationY,size=_ref4.size;var _this$props3=this.props,rippleColor=_this$props3.rippleColor,rippleOpacity=_this$props3.rippleOpacity,rippleFades=_this$props3.rippleFades;var rippleStyle=(_rippleStyle={top:locationY-radius},(0,_defineProperty2.default)(_rippleStyle,_reactNative.I18nManager.isRTL?"right":"left",locationX-radius),(0,_defineProperty2.default)(_rippleStyle,"backgroundColor",rippleColor),(0,_defineProperty2.default)(_rippleStyle,"transform",[{scale:progress.interpolate({inputRange:[0,1],outputRange:[0.5/radius,size/radius]})}]),(0,_defineProperty2.default)(_rippleStyle,"opacity",rippleFades?progress.interpolate({inputRange:[0,1],outputRange:[rippleOpacity,0]}):rippleOpacity),_rippleStyle);return _react.default.createElement(_reactNative.Animated.View,{key:unique,style:[styles.ripple,rippleStyle],__self:this,__source:{fileName:_jsxFileName,lineNumber:205,columnNumber:12}});}},{key:"render",value:function render(){var ripples=this.state.ripples;var _this$props4=this.props,delayLongPress=_this$props4.delayLongPress,delayPressIn=_this$props4.delayPressIn,delayPressOut=_this$props4.delayPressOut,disabled=_this$props4.disabled,hitSlop=_this$props4.hitSlop,pressRetentionOffset=_this$props4.pressRetentionOffset,children=_this$props4.children,rippleContainerBorderRadius=_this$props4.rippleContainerBorderRadius,rippleOutsideContainer=_this$props4.rippleOutsideContainer,testID=_this$props4.testID,nativeID=_this$props4.nativeID,accessible=_this$props4.accessible,accessibilityHint=_this$props4.accessibilityHint,accessibilityLabel=_this$props4.accessibilityLabel,props=(0,_objectWithoutProperties2.default)(_this$props4,_excluded);var touchableProps=(0,_extends2.default)({delayLongPress:delayLongPress,delayPressIn:delayPressIn,delayPressOut:delayPressOut,disabled:disabled,hitSlop:hitSlop,pressRetentionOffset:pressRetentionOffset,testID:testID,accessible:accessible,accessibilityHint:accessibilityHint,accessibilityLabel:accessibilityLabel,onLayout:this.onLayout,onPress:this.onPress,onLongPress:this.onLongPress,onPressIn:this.onPressIn,onPressOut:this.onPressOut},"web"!==_reactNative.Platform.OS?{nativeID:nativeID}:null);var containerStyle={borderRadius:rippleContainerBorderRadius};return _react.default.createElement(_TouchableWithoutFeedback.default,(0,_extends2.default)({},touchableProps,{__self:this,__source:{fileName:_jsxFileName,lineNumber:253,columnNumber:7}}),_react.default.createElement(_reactNative.Animated.View,(0,_extends2.default)({},props,{collapsable:false,pointerEvents:"box-only",__self:this,__source:{fileName:_jsxFileName,lineNumber:254,columnNumber:9}}),children,_react.default.createElement(_reactNative.View,{style:[styles.container(rippleOutsideContainer),containerStyle],__self:this,__source:{fileName:_jsxFileName,lineNumber:256,columnNumber:11}},ripples.map(this.renderRipple))));}}]);return Ripple;}(_react.PureComponent);exports.default=Ripple;Ripple.defaultProps=(0,_extends2.default)({},_TouchableWithoutFeedback.default.defaultProps,{rippleColor:"rgb(0, 0, 0)",rippleOpacity:0.3,rippleDuration:400,rippleSize:0,rippleContainerBorderRadius:0,rippleCentered:false,rippleSequential:false,rippleFades:true,rippleOutsideContainer:false,disabled:false,onRippleAnimation:function onRippleAnimation(animation,onComplete){return animation.start(onComplete);}});Ripple.propTypes=(0,_extends2.default)({},_reactNative.Animated.View.propTypes,_TouchableWithoutFeedback.default.propTypes,{rippleColor:_propTypes.default.string,rippleOpacity:_propTypes.default.number,rippleDuration:_propTypes.default.number,rippleSize:_propTypes.default.number,rippleContainerBorderRadius:_propTypes.default.number,rippleCentered:_propTypes.default.bool,rippleSequential:_propTypes.default.bool,rippleFades:_propTypes.default.bool,rippleOutsideContainer:_propTypes.default.bool,disabled:_propTypes.default.bool,onRippleAnimation:_propTypes.default.func});var styles=_reactNative.StyleSheet.create({container:function container(rippleOutsideContainer){return(0,_extends2.default)({},_reactNative.StyleSheet.absoluteFillObject,{backgroundColor:"transparent",overflow:rippleOutsideContainer?"visible":"hidden"});},ripple:{width:radius*2,height:radius*2,borderRadius:radius,overflow:"hidden",position:"absolute"}});
@@ -1 +1 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.SearchBar=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _reactNativeSizeMatters=require("react-native-size-matters");var _native=_interopRequireDefault(require("styled-components/native"));var _styledSystem=require("styled-system");var _=require("./");var _hooks=require("../hooks");var _theme=require("../theme");var _templateObject,_this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SearchBar.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var TextInput=_native.default.TextInput(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.flexbox,_styledSystem.space,_styledSystem.border,_styledSystem.buttonStyle,_styledSystem.typography,_styledSystem.color);var SearchBar=function SearchBar(_ref){var _ref$placeholder=_ref.placeholder,placeholder=_ref$placeholder===void 0?"Search":_ref$placeholder,_ref$onChangeText=_ref.onChangeText,onChangeText=_ref$onChangeText===void 0?function(){}:_ref$onChangeText,_ref$onCancel=_ref.onCancel,onCancel=_ref$onCancel===void 0?function(){}:_ref$onCancel,_ref$debounceDelay=_ref.debounceDelay,debounceDelay=_ref$debounceDelay===void 0?1000:_ref$debounceDelay,_ref$showCancelButton=_ref.showCancelButton,showCancelButton=_ref$showCancelButton===void 0?true:_ref$showCancelButton,containerProps=_ref.containerProps,searchbarProps=_ref.searchbarProps;var inputRef=(0,_react.useRef)();var _useState=(0,_react.useState)(""),_useState2=(0,_slicedToArray2.default)(_useState,2),searchText=_useState2[0],setSearchText=_useState2[1];var debouncedSearchTextValue=(0,_hooks.useDebounce)(searchText.trim(),Number(debounceDelay));var buttonWidthController=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;var buttonOpacityController=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;(0,_react.useEffect)(function(){onChangeText(debouncedSearchTextValue);},[debouncedSearchTextValue,onChangeText]);var animateSearchInput=function animateSearchInput(val){_reactNative.Animated.sequence([_reactNative.Animated.timing(buttonOpacityController,{toValue:val,duration:350,useNativeDriver:false}),_reactNative.Animated.timing(buttonWidthController,{toValue:val,duration:200,useNativeDriver:false})]).start();};var cancelButtonWidth=buttonWidthController.interpolate({inputRange:[0,1],outputRange:[0,60]});var onCancelHandle=function onCancelHandle(){animateSearchInput(0);setSearchText("");inputRef.current.blur();onCancel();};return _react.default.createElement(_.Container,{alignItems:"center",flexDirection:"row",__self:_this,__source:{fileName:_jsxFileName,lineNumber:102,columnNumber:5}},_react.default.createElement(_reactNative.TouchableWithoutFeedback,{onPress:function onPress(){var _inputRef$current;if(!(inputRef!=null&&(_inputRef$current=inputRef.current)!=null&&_inputRef$current.isFocused())){var _inputRef$current2;inputRef==null?void 0:(_inputRef$current2=inputRef.current)==null?void 0:_inputRef$current2.focus();}},__self:_this,__source:{fileName:_jsxFileName,lineNumber:103,columnNumber:7}},_react.default.createElement(_.Container,(0,_extends2.default)({alignItems:"center",borderColor:_theme.theme.colors.border.grey400,borderRadius:(0,_reactNativeSizeMatters.moderateScale)(8),borderWidth:(0,_reactNativeSizeMatters.moderateScale)(1),flex:1,flexDirection:"row",height:(0,_reactNativeSizeMatters.moderateScale)(42)},containerProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:110,columnNumber:9}}),_react.default.createElement(_.Container,{px:(0,_reactNativeSizeMatters.moderateScale)(10),__self:_this,__source:{fileName:_jsxFileName,lineNumber:120,columnNumber:11}},_react.default.createElement(_reactNativeRemixIcon.default,{color:_theme.theme.colors.font.grey600,name:"ri-search-line",size:(0,_reactNativeSizeMatters.moderateScale)(20),__self:_this,__source:{fileName:_jsxFileName,lineNumber:121,columnNumber:13}})),_react.default.createElement(TextInput,(0,_extends2.default)({autoCapitalize:"none",color:"font.primary",flex:1,fontSize:(0,_reactNativeSizeMatters.moderateScale)(16),placeholder:placeholder,placeholderTextColor:_theme.theme.colors.font.grey600,ref:inputRef,returnKeyType:"search",value:searchText,onChangeText:setSearchText,onBlur:function onBlur(){if(!searchText)animateSearchInput(0);},onFocus:function onFocus(){animateSearchInput(1);}},searchbarProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:127,columnNumber:11}})))),showCancelButton&&_react.default.createElement(_reactNative.Animated.View,{style:{opacity:buttonOpacityController,width:cancelButtonWidth,alignItems:"flex-end",justifyContent:"center"},__self:_this,__source:{fileName:_jsxFileName,lineNumber:149,columnNumber:9}},_react.default.createElement(_.Button,{height:(0,_reactNativeSizeMatters.moderateScale)(20),label:"Cancel",labelStyle:{mx:0},variant:"text",onPress:onCancelHandle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:157,columnNumber:11}})));};exports.SearchBar=SearchBar;SearchBar.propTypes={placeholder:_propTypes.default.string,onChangeText:_propTypes.default.func.isRequired,debounceDelay:_propTypes.default.oneOfType([_propTypes.default.number,_propTypes.default.string]),searchbarProps:_propTypes.default.object,onCancel:_propTypes.default.func,showCancelButton:_propTypes.default.bool,containerProps:_propTypes.default.object};
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.SearchBar=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _reactNativeRemixIcon=_interopRequireDefault(require("react-native-remix-icon"));var _reactNativeSizeMatters=require("react-native-size-matters");var _native=_interopRequireDefault(require("styled-components/native"));var _styledSystem=require("styled-system");var _=require("./");var _hooks=require("../hooks");var _theme=require("../theme");var _templateObject,_this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SearchBar.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var TextInput=_native.default.TextInput(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.flexbox,_styledSystem.space,_styledSystem.border,_styledSystem.buttonStyle,_styledSystem.typography,_styledSystem.color);var _Dimensions$get=_reactNative.Dimensions.get("window"),screenWidth=_Dimensions$get.width;var buttonSize=(0,_reactNativeSizeMatters.moderateScale)(screenWidth*0.19);var SearchBar=function SearchBar(_ref){var _ref$placeholder=_ref.placeholder,placeholder=_ref$placeholder===void 0?"Search":_ref$placeholder,_ref$onChangeText=_ref.onChangeText,onChangeText=_ref$onChangeText===void 0?function(){}:_ref$onChangeText,_ref$onCancel=_ref.onCancel,onCancel=_ref$onCancel===void 0?function(){}:_ref$onCancel,_ref$debounceDelay=_ref.debounceDelay,debounceDelay=_ref$debounceDelay===void 0?1000:_ref$debounceDelay,_ref$showCancelButton=_ref.showCancelButton,showCancelButton=_ref$showCancelButton===void 0?true:_ref$showCancelButton,containerProps=_ref.containerProps,searchbarProps=_ref.searchbarProps;var inputRef=(0,_react.useRef)();var _useState=(0,_react.useState)(""),_useState2=(0,_slicedToArray2.default)(_useState,2),searchText=_useState2[0],setSearchText=_useState2[1];var debouncedSearchTextValue=(0,_hooks.useDebounce)(searchText.trim(),Number(debounceDelay));var buttonWidth=(0,_reactNativeReanimated.useSharedValue)(0);var buttonOpacity=(0,_reactNativeReanimated.useSharedValue)(0);(0,_react.useEffect)(function(){onChangeText(debouncedSearchTextValue);},[debouncedSearchTextValue,onChangeText]);var animateSearchInput=function animateSearchInput(val){buttonWidth.value=(0,_reactNativeReanimated.withTiming)(val,{easing:_reactNativeReanimated.Easing.linear,duration:200});buttonOpacity.value=(0,_reactNativeReanimated.withTiming)(val,{easing:_reactNativeReanimated.Easing.linear,duration:100});};var cancelButtonStyle=(0,_reactNativeReanimated.useAnimatedStyle)(function(){var _f=function _f(){return{width:(0,_reactNativeReanimated.interpolate)(buttonWidth.value,[0,1],[0,buttonSize]),opacity:buttonOpacity.value};};_f._closure={interpolate:_reactNativeReanimated.interpolate,buttonWidth:buttonWidth,buttonSize:buttonSize,buttonOpacity:buttonOpacity};_f.asString="function _f(){const{interpolate,buttonWidth,buttonSize,buttonOpacity}=jsThis._closure;{return{width:interpolate(buttonWidth.value,[0,1],[0,buttonSize]),opacity:buttonOpacity.value};}}";_f.__workletHash=14021668969407;_f.__location="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SearchBar.jsx (96:45)";_f.__optimalization=3;return _f;}());var onCancelHandle=function onCancelHandle(){animateSearchInput(0);setSearchText("");inputRef.current.blur();onCancel();};return _react.default.createElement(_.Container,{alignItems:"center",flexDirection:"row",__self:_this,__source:{fileName:_jsxFileName,lineNumber:109,columnNumber:5}},_react.default.createElement(_reactNative.TouchableWithoutFeedback,{onPress:function onPress(){var _inputRef$current;if(!(inputRef!=null&&(_inputRef$current=inputRef.current)!=null&&_inputRef$current.isFocused())){var _inputRef$current2;inputRef==null?void 0:(_inputRef$current2=inputRef.current)==null?void 0:_inputRef$current2.focus();}},__self:_this,__source:{fileName:_jsxFileName,lineNumber:110,columnNumber:7}},_react.default.createElement(_.Container,(0,_extends2.default)({alignItems:"center",borderColor:_theme.theme.colors.border.grey400,borderRadius:(0,_reactNativeSizeMatters.moderateScale)(8),borderWidth:(0,_reactNativeSizeMatters.moderateScale)(1),flex:1,flexDirection:"row",height:(0,_reactNativeSizeMatters.moderateScale)(42)},containerProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:117,columnNumber:9}}),_react.default.createElement(_.Container,{px:(0,_reactNativeSizeMatters.moderateScale)(8),__self:_this,__source:{fileName:_jsxFileName,lineNumber:127,columnNumber:11}},_react.default.createElement(_reactNativeRemixIcon.default,{color:_theme.theme.colors.font.grey600,name:"ri-search-line",size:(0,_reactNativeSizeMatters.moderateScale)(20),__self:_this,__source:{fileName:_jsxFileName,lineNumber:128,columnNumber:13}})),_react.default.createElement(TextInput,(0,_extends2.default)({autoCapitalize:"none",color:"font.primary",flex:1,fontSize:(0,_reactNativeSizeMatters.moderateScale)(16),padding:0,placeholder:placeholder,placeholderTextColor:_theme.theme.colors.font.grey600,ref:inputRef,returnKeyType:"search",value:searchText,onChangeText:setSearchText,onBlur:function onBlur(){if(!searchText)animateSearchInput(0);},onFocus:function onFocus(){animateSearchInput(1);}},searchbarProps,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:134,columnNumber:11}})))),showCancelButton&&_react.default.createElement(_reactNativeReanimated.default.View,{style:[styles.cancelButtonWrapper,cancelButtonStyle],__self:_this,__source:{fileName:_jsxFileName,lineNumber:157,columnNumber:9}},_react.default.createElement(_.Touchable,{flexGrow:1,height:(0,_reactNativeSizeMatters.moderateScale)(42),justifyContent:"center",px:(0,_reactNativeSizeMatters.moderateScale)(8),onPress:onCancelHandle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:158,columnNumber:11}},_react.default.createElement(_.Typography,{fontFamily:_theme.theme.fonts.sf500,numberOfLines:1,__self:_this,__source:{fileName:_jsxFileName,lineNumber:165,columnNumber:13}},"Cancel"))));};exports.SearchBar=SearchBar;var styles=_reactNative.StyleSheet.create({cancelButtonWrapper:{alignItems:"flex-end",justifyContent:"center"}});SearchBar.propTypes={placeholder:_propTypes.default.string,onChangeText:_propTypes.default.func.isRequired,debounceDelay:_propTypes.default.oneOfType([_propTypes.default.number,_propTypes.default.string]),searchbarProps:_propTypes.default.object,onCancel:_propTypes.default.func,showCancelButton:_propTypes.default.bool,containerProps:_propTypes.default.object};
@@ -1 +1 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.SocialButton=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("@styled-system/prop-types"));var _propTypes2=_interopRequireDefault(require("prop-types"));var _reactNativeSizeMatters=require("react-native-size-matters");var _native=require("styled-components/native");var _appleLogo=_interopRequireDefault(require("../../assets/icons/apple-logo.svg"));var _googleLogo=_interopRequireDefault(require("../../assets/icons/google-logo.svg"));var _=require("./");var _excluded=["variant","disabled","labelStyle","isLoading"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SocialButton.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var SocialButton=function SocialButton(_ref){var variant=_ref.variant,disabled=_ref.disabled,labelStyle=_ref.labelStyle,isLoading=_ref.isLoading,rest=(0,_objectWithoutProperties2.default)(_ref,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var capitalize=function capitalize(str){return""+str.charAt(0).toUpperCase()+str.slice(1);};return _react.default.createElement(_.Touchable,(0,_extends2.default)({alignItems:"center",bg:"transparent",borderColor:theme.colors.border.grey800,borderRadius:(0,_reactNativeSizeMatters.moderateScale)(8),borderWidth:(0,_reactNativeSizeMatters.moderateScale)(1),disabled:disabled,height:(0,_reactNativeSizeMatters.moderateScale)(48),justifyContent:"center",rippleColor:theme.colors.background.grey800,width:"100%"},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:48,columnNumber:5}}),isLoading?_react.default.createElement(_.Loader,{color:theme.colors.background.grey800,__self:_this,__source:{fileName:_jsxFileName,lineNumber:62,columnNumber:9}}):_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_.Container,{left:(0,_reactNativeSizeMatters.moderateScale)(17),position:"absolute",__self:_this,__source:{fileName:_jsxFileName,lineNumber:65,columnNumber:11}},variant==="apple"&&_react.default.createElement(_appleLogo.default,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:66,columnNumber:37}}),variant==="google"&&_react.default.createElement(_googleLogo.default,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:67,columnNumber:38}})),_react.default.createElement(_.Typography,(0,_extends2.default)({color:theme.colors.font.primary,fontFamily:theme.fonts.sf500,fontSize:"m"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:69,columnNumber:11}}),"Continue with ",capitalize(variant))));};exports.SocialButton=SocialButton;SocialButton.propTypes=(0,_extends2.default)({},_propTypes.default.buttonStyle,_propTypes.default.flexbox,_propTypes.default.space,_propTypes.default.border,_propTypes.default.layout,_propTypes.default.color,{variant:_propTypes2.default.oneOf(["apple","google"]),disabled:_propTypes2.default.bool,labelStyle:_propTypes2.default.object,isLoading:_propTypes2.default.bool});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.SocialButton=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("@styled-system/prop-types"));var _propTypes2=_interopRequireDefault(require("prop-types"));var _reactNativeSizeMatters=require("react-native-size-matters");var _native=require("styled-components/native");var _appleLogo=_interopRequireDefault(require("../../assets/icons/apple-logo.svg"));var _googleLogo=_interopRequireDefault(require("../../assets/icons/google-logo.svg"));var _=require("./");var _excluded=["variant","disabled","labelStyle","isLoading"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/SocialButton.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var SocialButton=function SocialButton(_ref){var variant=_ref.variant,disabled=_ref.disabled,labelStyle=_ref.labelStyle,isLoading=_ref.isLoading,rest=(0,_objectWithoutProperties2.default)(_ref,_excluded);var theme=(0,_react.useContext)(_native.ThemeContext);var capitalize=function capitalize(str){return""+str.charAt(0).toUpperCase()+str.slice(1);};return _react.default.createElement(_.Touchable,(0,_extends2.default)({alignItems:"center",bg:"transparent",borderColor:theme.colors.border.grey800,borderRadius:(0,_reactNativeSizeMatters.moderateScale)(8),borderWidth:(0,_reactNativeSizeMatters.moderateScale)(1),disabled:disabled,height:(0,_reactNativeSizeMatters.moderateScale)(48),justifyContent:"center",rippleConfig:{color:theme.colors.background.grey800},width:"100%"},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:48,columnNumber:5}}),isLoading?_react.default.createElement(_.Loader,{color:theme.colors.background.grey800,__self:_this,__source:{fileName:_jsxFileName,lineNumber:62,columnNumber:9}}):_react.default.createElement(_react.default.Fragment,null,_react.default.createElement(_.Container,{left:(0,_reactNativeSizeMatters.moderateScale)(17),position:"absolute",__self:_this,__source:{fileName:_jsxFileName,lineNumber:65,columnNumber:11}},variant==="apple"&&_react.default.createElement(_appleLogo.default,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:66,columnNumber:37}}),variant==="google"&&_react.default.createElement(_googleLogo.default,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:67,columnNumber:38}})),_react.default.createElement(_.Typography,(0,_extends2.default)({color:theme.colors.font.primary,fontFamily:theme.fonts.sf500,fontSize:"m"},labelStyle,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:69,columnNumber:11}}),"Continue with ",capitalize(variant))));};exports.SocialButton=SocialButton;SocialButton.propTypes=(0,_extends2.default)({},_propTypes.default.buttonStyle,_propTypes.default.flexbox,_propTypes.default.space,_propTypes.default.border,_propTypes.default.layout,_propTypes.default.color,{variant:_propTypes2.default.oneOf(["apple","google"]),disabled:_propTypes2.default.bool,labelStyle:_propTypes2.default.object,isLoading:_propTypes2.default.bool});
@@ -1 +1 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Touchable=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var React=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("@styled-system/prop-types"));var _propTypes2=_interopRequireDefault(require("prop-types"));var _reactNativeMaterialRipple=_interopRequireDefault(require("react-native-material-ripple"));var _native=_interopRequireDefault(require("styled-components/native"));var _styledSystem=require("styled-system");var _utils=require("../utils/utils");var _excluded=["children","elevation"];var _templateObject,_this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Touchable.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var StyledRipple=(0,_native.default)(_reactNativeMaterialRipple.default)(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.buttonStyle,_styledSystem.flexbox,_styledSystem.space,_styledSystem.border,_styledSystem.layout,_styledSystem.color);var Touchable=React.forwardRef(function(props,ref){var children=props.children,elevation=props.elevation,rest=(0,_objectWithoutProperties2.default)(props,_excluded);var shadowStyles=elevation?(0,_utils.getShadowStyles)(elevation):{};return React.createElement(StyledRipple,(0,_extends2.default)({ref:ref,rippleContainerBorderRadius:rest.borderRadius?rest.borderRadius:0,rippleDuration:600,rippleOpacity:0.09,style:shadowStyles},rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:68,columnNumber:5}}),children);});exports.Touchable=Touchable;Touchable.propTypes=(0,_extends2.default)({},_propTypes.default.flexbox,_propTypes.default.space,_propTypes.default.border,_propTypes.default.layout,_propTypes.default.color,_propTypes.default.buttonStyle,{children:_propTypes2.default.node,elevation:_propTypes2.default.oneOfType([_propTypes2.default.number,_propTypes2.default.string])});Touchable.displayName="Touchable";
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Touchable=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var React=_interopRequireWildcard(require("react"));var _propTypes=_interopRequireDefault(require("@styled-system/prop-types"));var _propTypes2=_interopRequireDefault(require("prop-types"));var _native=_interopRequireDefault(require("styled-components/native"));var _styledSystem=require("styled-system");var _Ripple=_interopRequireDefault(require("./Ripple"));var _utils=require("../utils/utils");var _excluded=["children","elevation","rippleConfig"];var _templateObject,_this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/Touchable.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var StyledRipple=(0,_native.default)(_Ripple.default)(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2.default)(["\n ","\n ","\n ","\n ","\n ","\n ","\n"])),_styledSystem.buttonStyle,_styledSystem.flexbox,_styledSystem.space,_styledSystem.border,_styledSystem.layout,_styledSystem.color);var defaultRippleConfig={rippleCentered:false,rippleSequential:false,rippleFades:true,rippleOutsideContainer:false,rippleColor:"#000",rippleOpacity:0.09,rippleDuration:600,rippleSize:0,rippleContainerBorderRadius:0};var Touchable=React.forwardRef(function(props,ref){var _rippleConfig$isCente,_rippleConfig$isSeque,_rippleConfig$shouldF,_rippleConfig$shouldO,_rippleConfig$color,_rippleConfig$opacity,_rippleConfig$duratio,_rippleConfig$size;var children=props.children,elevation=props.elevation,rippleConfig=props.rippleConfig,rest=(0,_objectWithoutProperties2.default)(props,_excluded);var shadowStyles=elevation?(0,_utils.getShadowStyles)(elevation):{};var rippleProps=(0,_extends2.default)({},defaultRippleConfig,{rippleCentered:(_rippleConfig$isCente=rippleConfig.isCentered)!=null?_rippleConfig$isCente:defaultRippleConfig.rippleCentered,rippleSequential:(_rippleConfig$isSeque=rippleConfig.isSequential)!=null?_rippleConfig$isSeque:defaultRippleConfig.rippleSequential,rippleFades:(_rippleConfig$shouldF=rippleConfig.shouldFade)!=null?_rippleConfig$shouldF:defaultRippleConfig.rippleFades,rippleOutsideContainer:(_rippleConfig$shouldO=rippleConfig.shouldOverflowContainer)!=null?_rippleConfig$shouldO:defaultRippleConfig.rippleOutsideContainer,rippleColor:(_rippleConfig$color=rippleConfig.color)!=null?_rippleConfig$color:defaultRippleConfig.rippleColor,rippleOpacity:(_rippleConfig$opacity=rippleConfig.opacity)!=null?_rippleConfig$opacity:defaultRippleConfig.rippleOpacity,rippleDuration:(_rippleConfig$duratio=rippleConfig.duration)!=null?_rippleConfig$duratio:defaultRippleConfig.rippleDuration,rippleSize:(_rippleConfig$size=rippleConfig.size)!=null?_rippleConfig$size:defaultRippleConfig.rippleSize,rippleContainerBorderRadius:rest.borderRadius?rest.borderRadius:0});return React.createElement(StyledRipple,(0,_extends2.default)({ref:ref,style:shadowStyles},rippleProps,rest,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:100,columnNumber:5}}),children);});exports.Touchable=Touchable;Touchable.propTypes=(0,_extends2.default)({},_propTypes.default.flexbox,_propTypes.default.space,_propTypes.default.border,_propTypes.default.layout,_propTypes.default.color,_propTypes.default.buttonStyle,{children:_propTypes2.default.node.isRequired,elevation:_propTypes2.default.oneOfType([_propTypes2.default.number,_propTypes2.default.string]),rippleConfig:_propTypes2.default.shape({isCentered:_propTypes2.default.bool,isSequential:_propTypes2.default.bool,shouldFade:_propTypes2.default.bool,shouldOverflowContainer:_propTypes2.default.bool,color:_propTypes2.default.string,opacity:_propTypes2.default.number,duration:_propTypes2.default.number,size:_propTypes2.default.number,containerBorderRadius:_propTypes2.default.number})});Touchable.defaultProps={rippleConfig:{}};Touchable.displayName="Touchable";
@@ -0,0 +1 @@
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _excluded=["onPress","onPressIn"];var _this=this,_jsxFileName="/home/runner/work/neeto-ui-rn/neeto-ui-rn/src/components/TouchableWithoutFeedback.jsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var TouchableWithoutFeedback=function TouchableWithoutFeedback(_ref){var onPress=_ref.onPress,onPressIn=_ref.onPressIn,props=(0,_objectWithoutProperties2.default)(_ref,_excluded);var _touchActivatePositionRef=(0,_react.useRef)(null);function _onPressIn(e){var _e$nativeEvent=e.nativeEvent,pageX=_e$nativeEvent.pageX,pageY=_e$nativeEvent.pageY;_touchActivatePositionRef.current={pageX:pageX,pageY:pageY};onPressIn==null?void 0:onPressIn(e);}function _onPress(e){var _e$nativeEvent2=e.nativeEvent,pageX=_e$nativeEvent2.pageX,pageY=_e$nativeEvent2.pageY;var absX=Math.abs(_touchActivatePositionRef.current.pageX-pageX);var absY=Math.abs(_touchActivatePositionRef.current.pageY-pageY);var dragged=absX>2||absY>2;if(!dragged){onPress==null?void 0:onPress(e);}}return _react.default.createElement(_reactNative.TouchableWithoutFeedback,(0,_extends2.default)({onPress:_onPress,onPressIn:_onPressIn},props,{__self:_this,__source:{fileName:_jsxFileName,lineNumber:33,columnNumber:5}}),props.children);};TouchableWithoutFeedback.defaultProps={};TouchableWithoutFeedback.propTypes={onPress:_propTypes.default.func,onPressIn:_propTypes.default.func,children:_propTypes.default.element.isRequired};var _default=TouchableWithoutFeedback;exports.default=_default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neetoui-rn",
3
- "version": "0.0.233",
3
+ "version": "0.0.235",
4
4
  "main": "lib/index.js",
5
5
  "author": "BigBinary",
6
6
  "license": "MIT",
@@ -58,7 +58,6 @@
58
58
  "react-content-loader": "^6.2.0",
59
59
  "react-native-calendars": "^1.1285.0",
60
60
  "react-native-gesture-handler": "^2.4.0",
61
- "react-native-material-ripple": "^0.9.1",
62
61
  "react-native-modal": "^13.0.0",
63
62
  "react-native-pell-rich-editor": "^1.8.6",
64
63
  "react-native-popover-view": "^4.1.0",
@@ -165,7 +165,8 @@ export const Button = ({
165
165
  height={moderateScale(48)}
166
166
  justifyContent="center"
167
167
  opacity={renderOpacity()}
168
- rippleColor={getButtonColors().ripple}
168
+ px={width === null ? moderateScale(8) : undefined}
169
+ rippleConfig={{ color: getButtonColors().ripple }}
169
170
  width={width}
170
171
  {...rest}
171
172
  >
@@ -177,7 +178,7 @@ export const Button = ({
177
178
  color={color || getButtonColors().color}
178
179
  fontFamily={fontFamily || theme.fonts.sf500}
179
180
  fontSize={fontSize}
180
- mx={moderateScale(2)}
181
+ ml={moderateScale(8)}
181
182
  textAlign="center"
182
183
  {...labelStyle}
183
184
  >
@@ -0,0 +1,280 @@
1
+ import React, { PureComponent } from "react";
2
+ import {
3
+ View,
4
+ Animated,
5
+ Easing,
6
+ Platform,
7
+ I18nManager,
8
+ StyleSheet,
9
+ } from "react-native";
10
+
11
+ import PropTypes from "prop-types";
12
+ import { moderateScale } from "react-native-size-matters";
13
+
14
+ import TouchableWithoutFeedback from "./TouchableWithoutFeedback";
15
+
16
+ const radius = moderateScale(10);
17
+
18
+ export default class Ripple extends PureComponent {
19
+ static defaultProps = {
20
+ ...TouchableWithoutFeedback.defaultProps,
21
+
22
+ rippleColor: "rgb(0, 0, 0)",
23
+ rippleOpacity: 0.3,
24
+ rippleDuration: 400,
25
+ rippleSize: 0,
26
+ rippleContainerBorderRadius: 0,
27
+ rippleCentered: false,
28
+ rippleSequential: false,
29
+ rippleFades: true,
30
+ rippleOutsideContainer: false,
31
+ disabled: false,
32
+
33
+ onRippleAnimation: (animation, onComplete) => animation.start(onComplete),
34
+ };
35
+
36
+ static propTypes = {
37
+ ...Animated.View.propTypes,
38
+ ...TouchableWithoutFeedback.propTypes,
39
+
40
+ rippleColor: PropTypes.string,
41
+ rippleOpacity: PropTypes.number,
42
+ rippleDuration: PropTypes.number,
43
+ rippleSize: PropTypes.number,
44
+ rippleContainerBorderRadius: PropTypes.number,
45
+ rippleCentered: PropTypes.bool,
46
+ rippleSequential: PropTypes.bool,
47
+ rippleFades: PropTypes.bool,
48
+ rippleOutsideContainer: PropTypes.bool,
49
+ disabled: PropTypes.bool,
50
+
51
+ onRippleAnimation: PropTypes.func,
52
+ };
53
+
54
+ constructor(props) {
55
+ super(props);
56
+
57
+ this.onLayout = this.onLayout.bind(this);
58
+ this.onPress = this.onPress.bind(this);
59
+ this.onPressIn = this.onPressIn.bind(this);
60
+ this.onPressOut = this.onPressOut.bind(this);
61
+ this.onLongPress = this.onLongPress.bind(this);
62
+ this.onAnimationEnd = this.onAnimationEnd.bind(this);
63
+
64
+ this.renderRipple = this.renderRipple.bind(this);
65
+
66
+ this.unique = 0;
67
+ this.mounted = false;
68
+
69
+ this.state = {
70
+ width: 0,
71
+ height: 0,
72
+ ripples: [],
73
+ };
74
+ }
75
+
76
+ componentDidMount() {
77
+ this.mounted = true;
78
+ }
79
+
80
+ componentWillUnmount() {
81
+ this.mounted = false;
82
+ }
83
+
84
+ onLayout(event) {
85
+ const { width, height } = event.nativeEvent.layout;
86
+ const { onLayout } = this.props;
87
+
88
+ if ("function" === typeof onLayout) {
89
+ onLayout(event);
90
+ }
91
+
92
+ this.setState({ width, height });
93
+ }
94
+
95
+ onPress(event) {
96
+ const { ripples } = this.state;
97
+ const { onPress, rippleSequential } = this.props;
98
+
99
+ if (!rippleSequential || !ripples.length) {
100
+ if ("function" === typeof onPress) {
101
+ requestAnimationFrame(() => onPress(event));
102
+ }
103
+
104
+ this.startRipple(event);
105
+ }
106
+ }
107
+
108
+ onLongPress(event) {
109
+ const { onLongPress } = this.props;
110
+
111
+ if ("function" === typeof onLongPress) {
112
+ requestAnimationFrame(() => onLongPress(event));
113
+ }
114
+
115
+ this.startRipple(event);
116
+ }
117
+
118
+ onPressIn(event) {
119
+ const { onPressIn } = this.props;
120
+
121
+ if ("function" === typeof onPressIn) {
122
+ onPressIn(event);
123
+ }
124
+ }
125
+
126
+ onPressOut(event) {
127
+ const { onPressOut } = this.props;
128
+
129
+ if ("function" === typeof onPressOut) {
130
+ onPressOut(event);
131
+ }
132
+ }
133
+
134
+ onAnimationEnd() {
135
+ if (this.mounted) {
136
+ this.setState(({ ripples }) => ({ ripples: ripples.slice(1) }));
137
+ }
138
+ }
139
+
140
+ startRipple(event) {
141
+ const { width, height } = this.state;
142
+ const { rippleDuration, rippleCentered, rippleSize, onRippleAnimation } =
143
+ this.props;
144
+
145
+ const w2 = 0.5 * width;
146
+ const h2 = 0.5 * height;
147
+
148
+ const { locationX, locationY } = rippleCentered
149
+ ? { locationX: w2, locationY: h2 }
150
+ : event.nativeEvent;
151
+
152
+ const offsetX = Math.abs(w2 - locationX);
153
+ const offsetY = Math.abs(h2 - locationY);
154
+
155
+ const size =
156
+ rippleSize > 0
157
+ ? 0.5 * rippleSize
158
+ : Math.sqrt(Math.pow(w2 + offsetX, 2) + Math.pow(h2 + offsetY, 2));
159
+
160
+ const ripple = {
161
+ unique: this.unique++,
162
+ progress: new Animated.Value(0),
163
+ locationX,
164
+ locationY,
165
+ size,
166
+ };
167
+
168
+ const animation = Animated.timing(ripple.progress, {
169
+ toValue: 1,
170
+ easing: Easing.out(Easing.ease),
171
+ duration: rippleDuration,
172
+ useNativeDriver: true,
173
+ });
174
+
175
+ onRippleAnimation(animation, this.onAnimationEnd);
176
+
177
+ this.setState(({ ripples }) => ({ ripples: ripples.concat(ripple) }));
178
+ }
179
+
180
+ renderRipple({ unique, progress, locationX, locationY, size }) {
181
+ const { rippleColor, rippleOpacity, rippleFades } = this.props;
182
+
183
+ const rippleStyle = {
184
+ top: locationY - radius,
185
+ [I18nManager.isRTL ? "right" : "left"]: locationX - radius,
186
+ backgroundColor: rippleColor,
187
+
188
+ transform: [
189
+ {
190
+ scale: progress.interpolate({
191
+ inputRange: [0, 1],
192
+ outputRange: [0.5 / radius, size / radius],
193
+ }),
194
+ },
195
+ ],
196
+
197
+ opacity: rippleFades
198
+ ? progress.interpolate({
199
+ inputRange: [0, 1],
200
+ outputRange: [rippleOpacity, 0],
201
+ })
202
+ : rippleOpacity,
203
+ };
204
+
205
+ return <Animated.View key={unique} style={[styles.ripple, rippleStyle]} />;
206
+ }
207
+
208
+ render() {
209
+ const { ripples } = this.state;
210
+ const {
211
+ delayLongPress,
212
+ delayPressIn,
213
+ delayPressOut,
214
+ disabled,
215
+ hitSlop,
216
+ pressRetentionOffset,
217
+ children,
218
+ rippleContainerBorderRadius,
219
+ rippleOutsideContainer,
220
+ testID,
221
+ nativeID,
222
+ accessible,
223
+ accessibilityHint,
224
+ accessibilityLabel,
225
+ ...props
226
+ } = this.props;
227
+
228
+ const touchableProps = {
229
+ delayLongPress,
230
+ delayPressIn,
231
+ delayPressOut,
232
+ disabled,
233
+ hitSlop,
234
+ pressRetentionOffset,
235
+ testID,
236
+ accessible,
237
+ accessibilityHint,
238
+ accessibilityLabel,
239
+ onLayout: this.onLayout,
240
+ onPress: this.onPress,
241
+ onLongPress: this.onLongPress,
242
+ onPressIn: this.onPressIn,
243
+ onPressOut: this.onPressOut,
244
+
245
+ ...("web" !== Platform.OS ? { nativeID } : null),
246
+ };
247
+
248
+ const containerStyle = {
249
+ borderRadius: rippleContainerBorderRadius,
250
+ };
251
+
252
+ return (
253
+ <TouchableWithoutFeedback {...touchableProps}>
254
+ <Animated.View {...props} collapsable={false} pointerEvents="box-only">
255
+ {children}
256
+ <View
257
+ style={[styles.container(rippleOutsideContainer), containerStyle]}
258
+ >
259
+ {ripples.map(this.renderRipple)}
260
+ </View>
261
+ </Animated.View>
262
+ </TouchableWithoutFeedback>
263
+ );
264
+ }
265
+ }
266
+
267
+ const styles = StyleSheet.create({
268
+ container: rippleOutsideContainer => ({
269
+ ...StyleSheet.absoluteFillObject,
270
+ backgroundColor: "transparent",
271
+ overflow: rippleOutsideContainer ? "visible" : "hidden",
272
+ }),
273
+ ripple: {
274
+ width: radius * 2,
275
+ height: radius * 2,
276
+ borderRadius: radius,
277
+ overflow: "hidden",
278
+ position: "absolute",
279
+ },
280
+ });
@@ -1,7 +1,14 @@
1
1
  import React, { useEffect, useRef, useState } from "react";
2
- import { Animated, TouchableWithoutFeedback } from "react-native";
2
+ import { Dimensions, TouchableWithoutFeedback, StyleSheet } from "react-native";
3
3
 
4
4
  import PropTypes from "prop-types";
5
+ import Animated, {
6
+ Easing,
7
+ interpolate,
8
+ useAnimatedStyle,
9
+ useSharedValue,
10
+ withTiming,
11
+ } from "react-native-reanimated";
5
12
  import Icon from "react-native-remix-icon";
6
13
  import { moderateScale } from "react-native-size-matters";
7
14
  import styled from "styled-components/native";
@@ -14,7 +21,7 @@ import {
14
21
  color,
15
22
  } from "styled-system";
16
23
 
17
- import { Container, Button } from "@components";
24
+ import { Container, Touchable, Typography } from "@components";
18
25
  import { useDebounce } from "@hooks";
19
26
  import { theme } from "@theme";
20
27
 
@@ -49,6 +56,9 @@ const TextInput = styled.TextInput`
49
56
  * ```
50
57
  */
51
58
 
59
+ const { width: screenWidth } = Dimensions.get("window");
60
+ const buttonSize = moderateScale(screenWidth * 0.19);
61
+
52
62
  export const SearchBar = ({
53
63
  placeholder = "Search",
54
64
  onChangeText = () => {},
@@ -64,32 +74,29 @@ export const SearchBar = ({
64
74
  searchText.trim(),
65
75
  Number(debounceDelay)
66
76
  );
67
- const buttonWidthController = useRef(new Animated.Value(0)).current;
68
- const buttonOpacityController = useRef(new Animated.Value(0)).current;
77
+ const buttonWidth = useSharedValue(0);
78
+ const buttonOpacity = useSharedValue(0);
69
79
 
70
80
  useEffect(() => {
71
81
  onChangeText(debouncedSearchTextValue);
72
82
  }, [debouncedSearchTextValue, onChangeText]);
73
83
 
74
84
  const animateSearchInput = val => {
75
- Animated.sequence([
76
- Animated.timing(buttonOpacityController, {
77
- toValue: val,
78
- duration: 350,
79
- useNativeDriver: false,
80
- }),
81
- Animated.timing(buttonWidthController, {
82
- toValue: val,
83
- duration: 200,
84
- useNativeDriver: false,
85
- }),
86
- ]).start();
85
+ buttonWidth.value = withTiming(val, {
86
+ easing: Easing.linear,
87
+ duration: 200,
88
+ });
89
+
90
+ buttonOpacity.value = withTiming(val, {
91
+ easing: Easing.linear,
92
+ duration: 100,
93
+ });
87
94
  };
88
95
 
89
- const cancelButtonWidth = buttonWidthController.interpolate({
90
- inputRange: [0, 1],
91
- outputRange: [0, 60],
92
- });
96
+ const cancelButtonStyle = useAnimatedStyle(() => ({
97
+ width: interpolate(buttonWidth.value, [0, 1], [0, buttonSize]),
98
+ opacity: buttonOpacity.value,
99
+ }));
93
100
 
94
101
  const onCancelHandle = () => {
95
102
  animateSearchInput(0);
@@ -117,7 +124,7 @@ export const SearchBar = ({
117
124
  height={moderateScale(42)}
118
125
  {...containerProps}
119
126
  >
120
- <Container px={moderateScale(10)}>
127
+ <Container px={moderateScale(8)}>
121
128
  <Icon
122
129
  color={theme.colors.font.grey600}
123
130
  name="ri-search-line"
@@ -129,6 +136,7 @@ export const SearchBar = ({
129
136
  color="font.primary"
130
137
  flex={1}
131
138
  fontSize={moderateScale(16)}
139
+ padding={0}
132
140
  placeholder={placeholder}
133
141
  placeholderTextColor={theme.colors.font.grey600}
134
142
  ref={inputRef}
@@ -146,27 +154,31 @@ export const SearchBar = ({
146
154
  </Container>
147
155
  </TouchableWithoutFeedback>
148
156
  {showCancelButton && (
149
- <Animated.View
150
- style={{
151
- opacity: buttonOpacityController,
152
- width: cancelButtonWidth,
153
- alignItems: "flex-end",
154
- justifyContent: "center",
155
- }}
156
- >
157
- <Button
158
- height={moderateScale(20)}
159
- label="Cancel"
160
- labelStyle={{ mx: 0 }}
161
- variant="text"
157
+ <Animated.View style={[styles.cancelButtonWrapper, cancelButtonStyle]}>
158
+ <Touchable
159
+ flexGrow={1}
160
+ height={moderateScale(42)}
161
+ justifyContent="center"
162
+ px={moderateScale(8)}
162
163
  onPress={onCancelHandle}
163
- />
164
+ >
165
+ <Typography fontFamily={theme.fonts.sf500} numberOfLines={1}>
166
+ Cancel
167
+ </Typography>
168
+ </Touchable>
164
169
  </Animated.View>
165
170
  )}
166
171
  </Container>
167
172
  );
168
173
  };
169
174
 
175
+ const styles = StyleSheet.create({
176
+ cancelButtonWrapper: {
177
+ alignItems: "flex-end",
178
+ justifyContent: "center",
179
+ },
180
+ });
181
+
170
182
  SearchBar.propTypes = {
171
183
  /**
172
184
  * Set the placeholder text
@@ -54,7 +54,7 @@ export const SocialButton = ({
54
54
  disabled={disabled}
55
55
  height={moderateScale(48)}
56
56
  justifyContent="center"
57
- rippleColor={theme.colors.background.grey800}
57
+ rippleConfig={{ color: theme.colors.background.grey800 }}
58
58
  width="100%"
59
59
  {...rest}
60
60
  >
@@ -2,7 +2,6 @@ import * as React from "react";
2
2
 
3
3
  import propTypes from "@styled-system/prop-types";
4
4
  import PropTypes from "prop-types";
5
- import Ripple from "react-native-material-ripple";
6
5
  import styled from "styled-components/native";
7
6
  import {
8
7
  flexbox,
@@ -13,6 +12,8 @@ import {
13
12
  layout,
14
13
  } from "styled-system";
15
14
 
15
+ import Ripple from "./Ripple";
16
+
16
17
  import { getShadowStyles } from "../utils/utils";
17
18
 
18
19
  const StyledRipple = styled(Ripple)`
@@ -25,7 +26,7 @@ const StyledRipple = styled(Ripple)`
25
26
  `;
26
27
 
27
28
  /**
28
- * Touchable component is a wrapper over https://github.com/n4kz/react-native-material-ripple.
29
+ * Touchable component is a wrapper over Ripple.
29
30
  *
30
31
  * This component supports below props categories from [styled-system ](/styled-system).
31
32
  * <ul>
@@ -48,9 +49,11 @@ const StyledRipple = styled(Ripple)`
48
49
  * bg="background.primary"
49
50
  * width="100px"
50
51
  * height="30px"
51
- * rippleOpacity = {0.09}
52
- * rippleDuration = {600}
53
- * rippleContainerBorderRadius = {moderateScale(50)}
52
+ * rippleConfig={{
53
+ * opacity: 0.09,
54
+ * duration: 600,
55
+ * containerBorderRadius: moderateScale(50),
56
+ * }}
54
57
  * >
55
58
  * <Typography fontSize="10px">This is wrapped in Touchable component</Typography>
56
59
  * </Touchable>
@@ -60,19 +63,41 @@ const StyledRipple = styled(Ripple)`
60
63
  *
61
64
  */
62
65
 
66
+ const defaultRippleConfig = {
67
+ rippleCentered: false,
68
+ rippleSequential: false,
69
+ rippleFades: true,
70
+ rippleOutsideContainer: false,
71
+ rippleColor: "#000",
72
+ rippleOpacity: 0.09,
73
+ rippleDuration: 600,
74
+ rippleSize: 0,
75
+ rippleContainerBorderRadius: 0,
76
+ };
77
+
63
78
  export const Touchable = React.forwardRef((props, ref) => {
64
- const { children, elevation, ...rest } = props;
79
+ const { children, elevation, rippleConfig, ...rest } = props;
65
80
  const shadowStyles = elevation ? getShadowStyles(elevation) : {};
66
81
 
82
+ const rippleProps = {
83
+ ...defaultRippleConfig,
84
+ rippleCentered:
85
+ rippleConfig.isCentered ?? defaultRippleConfig.rippleCentered,
86
+ rippleSequential:
87
+ rippleConfig.isSequential ?? defaultRippleConfig.rippleSequential,
88
+ rippleFades: rippleConfig.shouldFade ?? defaultRippleConfig.rippleFades,
89
+ rippleOutsideContainer:
90
+ rippleConfig.shouldOverflowContainer ??
91
+ defaultRippleConfig.rippleOutsideContainer,
92
+ rippleColor: rippleConfig.color ?? defaultRippleConfig.rippleColor,
93
+ rippleOpacity: rippleConfig.opacity ?? defaultRippleConfig.rippleOpacity,
94
+ rippleDuration: rippleConfig.duration ?? defaultRippleConfig.rippleDuration,
95
+ rippleSize: rippleConfig.size ?? defaultRippleConfig.rippleSize,
96
+ rippleContainerBorderRadius: rest.borderRadius ? rest.borderRadius : 0,
97
+ };
98
+
67
99
  return (
68
- <StyledRipple
69
- ref={ref}
70
- rippleContainerBorderRadius={rest.borderRadius ? rest.borderRadius : 0}
71
- rippleDuration={600}
72
- rippleOpacity={0.09}
73
- style={shadowStyles}
74
- {...rest}
75
- >
100
+ <StyledRipple ref={ref} style={shadowStyles} {...rippleProps} {...rest}>
76
101
  {children}
77
102
  </StyledRipple>
78
103
  );
@@ -86,8 +111,23 @@ Touchable.propTypes = {
86
111
  ...propTypes.color,
87
112
  ...propTypes.buttonStyle,
88
113
 
89
- children: PropTypes.node,
114
+ children: PropTypes.node.isRequired,
90
115
  elevation: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
116
+ rippleConfig: PropTypes.shape({
117
+ isCentered: PropTypes.bool,
118
+ isSequential: PropTypes.bool,
119
+ shouldFade: PropTypes.bool,
120
+ shouldOverflowContainer: PropTypes.bool,
121
+ color: PropTypes.string,
122
+ opacity: PropTypes.number,
123
+ duration: PropTypes.number,
124
+ size: PropTypes.number,
125
+ containerBorderRadius: PropTypes.number,
126
+ }),
127
+ };
128
+
129
+ Touchable.defaultProps = {
130
+ rippleConfig: {},
91
131
  };
92
132
 
93
133
  Touchable.displayName = "Touchable";
@@ -0,0 +1,51 @@
1
+ import React, { useRef } from "react";
2
+ import { TouchableWithoutFeedback as RNTouchableWithoutFeedback } from "react-native";
3
+
4
+ import PropTypes from "prop-types";
5
+
6
+ const TouchableWithoutFeedback = ({ onPress, onPressIn, ...props }) => {
7
+ const _touchActivatePositionRef = useRef(null);
8
+
9
+ function _onPressIn(e) {
10
+ const { pageX, pageY } = e.nativeEvent;
11
+
12
+ _touchActivatePositionRef.current = {
13
+ pageX,
14
+ pageY,
15
+ };
16
+
17
+ onPressIn?.(e);
18
+ }
19
+
20
+ function _onPress(e) {
21
+ const { pageX, pageY } = e.nativeEvent;
22
+
23
+ const absX = Math.abs(_touchActivatePositionRef.current.pageX - pageX);
24
+ const absY = Math.abs(_touchActivatePositionRef.current.pageY - pageY);
25
+
26
+ const dragged = absX > 2 || absY > 2;
27
+ if (!dragged) {
28
+ onPress?.(e);
29
+ }
30
+ }
31
+
32
+ return (
33
+ <RNTouchableWithoutFeedback
34
+ onPress={_onPress}
35
+ onPressIn={_onPressIn}
36
+ {...props}
37
+ >
38
+ {props.children}
39
+ </RNTouchableWithoutFeedback>
40
+ );
41
+ };
42
+
43
+ TouchableWithoutFeedback.defaultProps = {};
44
+
45
+ TouchableWithoutFeedback.propTypes = {
46
+ onPress: PropTypes.func,
47
+ onPressIn: PropTypes.func,
48
+ children: PropTypes.element.isRequired,
49
+ };
50
+
51
+ export default TouchableWithoutFeedback;