From 68c63b021c7e9abcb3e2e5442eb2414f02e6223d Mon Sep 17 00:00:00 2001 From: Nir Hadassi Date: Tue, 3 Oct 2023 12:22:03 +0300 Subject: [PATCH] Support round and TS types (#84) --- extend.d.ts | 20 +++++++++++++++++--- index.d.ts | 8 ++++---- package.json | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/extend.d.ts b/extend.d.ts index f523da7..a75a7a2 100644 --- a/extend.d.ts +++ b/extend.d.ts @@ -1,5 +1,4 @@ import * as RN from "react-native"; -import { StringifiedStyles, NamedStyles } from './index.d'; declare module "react-native-size-matters/extend" { export function scale(size: number): number; @@ -11,9 +10,24 @@ declare module "react-native-size-matters/extend" { export function ms(size: number, factor?: number): number; export function mvs(size: number, factor?: number): number; + type Scale = `${number}@s${'r' | ''}`; + type VerticalScale = `${number}@vs${'r' | ''}`; + type ModerateScale = `${number}@ms${number | ''}${'r' | ''}`; + type ModerateVerticalScale = `${number}@mvs${number | ''}${'r' | ''}`; + type Size = Scale | VerticalScale | ModerateScale | ModerateVerticalScale; + type WithSize = { [P in keyof T]: number extends T[P] ? Size | T[P] : T[P] }; + type ViewStyle = WithSize; + type TextStyle = WithSize; + type ImageStyle = WithSize; + type NamedStyles = { [P in keyof T]: ViewStyle | TextStyle | ImageStyle }; + export namespace ScaledSheet { - export function create | NamedStyles>(stylesObject: T): { - [P in keyof T]: RN.RegisteredStyle, number>> + export function create | NamedStyles>( + stylesObject: T, + ): { + [P in keyof T]: RN.RegisteredStyle<{ + [S in keyof T[P]]: T[P][S] extends Size ? number : T[P][S]; + }>; }; } } \ No newline at end of file diff --git a/index.d.ts b/index.d.ts index f991540..fcb20fc 100644 --- a/index.d.ts +++ b/index.d.ts @@ -10,10 +10,10 @@ declare module 'react-native-size-matters' { export function ms(size: number, factor?: number): number; export function mvs(size: number, factor?: number): number; - type Scale = `${number}@s`; - type VerticalScale = `${number}@vs`; - type ModerateScale = `${number}@ms${number | ''}`; - type ModerateVerticalScale = `${number}@mvs${number | ''}`; + type Scale = `${number}@s${'r' | ''}`; + type VerticalScale = `${number}@vs${'r' | ''}`; + type ModerateScale = `${number}@ms${number | ''}${'r' | ''}`; + type ModerateVerticalScale = `${number}@mvs${number | ''}${'r' | ''}`; type Size = Scale | VerticalScale | ModerateScale | ModerateVerticalScale; type WithSize = { [P in keyof T]: number extends T[P] ? Size | T[P] : T[P] }; type ViewStyle = WithSize; diff --git a/package.json b/package.json index 7d325fc..b21bce9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-size-matters", - "version": "0.4.1", + "version": "0.4.2", "description": "A React-Native utility belt for scaling the size your apps UI across different sized devices", "main": "index.js", "scripts": {