๐Ÿ“ฆ retyui / react-native-stylex

๐Ÿ“„ base.ts ยท 44 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44import { ScaledSize } from "react-native";

import { getWindowDimensions } from "../dimensions";

export const createDimensionQueryHelper = <Value>(
  queryFunction: (options: { value: Value; dimensions: ScaledSize }) => boolean
) => <T>(value: Value, styles: T): null | T => {
  const isMatched = queryFunction({ value, dimensions: getWindowDimensions() });

  if (isMatched) {
    return styles;
  }

  return null;
};

export const maxHeight = createDimensionQueryHelper<number>(
  ({ value, dimensions }) => value >= dimensions.height
);

export const maxWidth = createDimensionQueryHelper<number>(
  ({ value, dimensions }) => value >= dimensions.width
);

export const minHeight = createDimensionQueryHelper<number>(
  ({ value, dimensions }) => value <= dimensions.height
);

export const minWidth = createDimensionQueryHelper<number>(
  ({ value, dimensions }) => value <= dimensions.width
);

export const minAspectRatio = createDimensionQueryHelper<number>(
  ({ value, dimensions: { width, height } }) => value <= width / height
);

export const maxAspectRatio = createDimensionQueryHelper<number>(
  ({ value, dimensions: { width, height } }) => value >= width / height
);

export const aspectRatio = createDimensionQueryHelper<number>(
  ({ value, dimensions: { width, height } }) => value === width / height
);