UNPKG

@shayrn/react-native-scaler

Version:

Responsive scaling utilities for React Native CLI and Expo apps

3 lines (2 loc) 2.61 kB
import{Dimensions as i,PixelRatio as t}from"react-native";let e=402,n=874;const{width:a,height:o}=i.get("window"),r=a,m=o,h=t.get(),d=t.getFontScale();let l=a/e,s=o/n,x=Math.min(l,s);const c=i=>{var t,r;e=null!==(t=i.referenceWidth)&&void 0!==t?t:402,n=null!==(r=i.referenceHeight)&&void 0!==r?r:874,l=a/e,s=o/n,x=Math.min(l,s)},g=(i,e)=>{const{min:n,max:a,useUniform:o=!0}=e||{};let r=i*(o?x:l);return void 0!==n&&(r=Math.max(r,n)),void 0!==a&&(r=Math.min(r,a)),Math.round(t.roundToNearestPixel(r))},u=(i,e)=>{const{min:n=10,max:a=100,respectAccessibility:o=!0}=e||{};let r;return r=o?i*x:i*x/d,r=Math.max(r,n),r=Math.min(r,a),Math.round(t.roundToNearestPixel(r))},M=(i,e)=>{const{min:n,max:a,respectAccessibility:o=!0}=e||{};let r;return r=o?i*x:i*x/d,void 0!==n&&(r=Math.max(r,n)),void 0!==a&&(r=Math.min(r,a)),Math.round(t.roundToNearestPixel(r))},v=(i,e)=>{const{min:n,max:a}=e||{};let o=i*x;return void 0!==n&&(o=Math.max(o,n)),void 0!==a&&(o=Math.min(o,a)),Math.round(t.roundToNearestPixel(o))},p=(i,e)=>{const{min:n,max:a}=e||{};let o=i*l;return void 0!==n&&(o=Math.max(o,n)),void 0!==a&&(o=Math.min(o,a)),Math.round(t.roundToNearestPixel(o))},f=(i,e)=>{const{min:n,max:a}=e||{};let o=i*s;return void 0!==n&&(o=Math.max(o,n)),void 0!==a&&(o=Math.min(o,a)),Math.round(t.roundToNearestPixel(o))},S=i=>t.getPixelSizeForLayoutSize(i),T={pixelRatio:h,fontScale:d,isHighDensity:h>=2,isTablet:Math.min(a,o)>=768,isSmallDevice:Math.min(a,o)<350,aspectRatio:a/o},w={width:(i,t)=>p(i,t),height:(i,t)=>f(i,t),font:(i,t)=>u(i,t),lineHeight:(i,t)=>M(i,t),radius:(i,t)=>v(i,t),spacing:(i,t)=>g(i,t),adaptiveSpacing:i=>g(T.isTablet?1.2*i:T.isSmallDevice?.8*i:i),pixelPerfect:i=>S(i)},H={container:{padding:w.adaptiveSpacing(16),margin:w.adaptiveSpacing(20),borderRadius:w.radius(8,{min:4,max:16}),gap:w.spacing(10)},text:{fontSize:w.font(14,{min:12,max:18}),lineHeight:w.lineHeight(20,{min:14,max:24})},adaptiveText:{fontSize:T.isTablet?w.font(16,{min:14,max:20}):w.font(14,{min:12,max:18}),lineHeight:T.isTablet?w.lineHeight(24,{min:18,max:28}):w.lineHeight(20,{min:14,max:24})}},P=t=>i.addEventListener("change",()=>{const{width:a,height:o}=i.get("window");l=a/e,s=o/n,x=Math.min(l,s),t()}),b=()=>({width:l,height:s,uniform:x,pixel:h,font:d}),N={width:l,height:s,uniform:x,pixel:h,font:d};export{c as configureScaler,T as deviceInfo,S as getPixelSize,b as getScales,P as onOrientationChange,w as responsive,H as responsiveStyles,g as scale,u as scaleFont,f as scaleHeight,M as scaleLineHeight,v as scaleRadius,p as scaleWidth,N as scales,m as screenHeight,r as screenWidth}; //# sourceMappingURL=index.esm.js.map