@draftbit/core 47.8.2 → 47.8.3-28183.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@draftbit/core",
3
- "version": "47.8.2",
3
+ "version": "47.8.3-028183.2+0281830",
4
4
  "description": "Core (non-native) Components",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "types": "lib/typescript/src/index.d.ts",
@@ -41,7 +41,7 @@
41
41
  "dependencies": {
42
42
  "@date-io/date-fns": "^1.3.13",
43
43
  "@draftbit/react-theme-provider": "^2.1.1",
44
- "@draftbit/types": "47.6.0",
44
+ "@draftbit/types": "^47.8.3-028183.2+0281830",
45
45
  "@expo/vector-icons": "^13.0.0",
46
46
  "@material-ui/core": "^4.11.0",
47
47
  "@material-ui/pickers": "^3.2.10",
@@ -102,5 +102,5 @@
102
102
  ],
103
103
  "testEnvironment": "node"
104
104
  },
105
- "gitHead": "e143732a0723c8dea555c646d5ee88b5dcae7b7b"
105
+ "gitHead": "02818304a5b734c6094441abb059ea3b806e9a70"
106
106
  }
@@ -1,6 +1,17 @@
1
1
  import React from "react";
2
2
  import { View } from "react-native";
3
- const ZStack = ({ reversed, children, ...rest }) => {
3
+ import { useDeepCompareEffect } from "../../utilities";
4
+ const ZStack = ({ reversed, children, style, ...rest }) => {
5
+ const [childSizes, setChildSizes] = React.useState(new Map());
6
+ const [maxChildWidth, setMaxChildWidth] = React.useState();
7
+ const [maxChildHeight, setMaxChildHeight] = React.useState();
8
+ const onChildLayout = React.useCallback((index, width, height) => {
9
+ const size = {
10
+ width: roundTo3DecimalPoints(width),
11
+ height: roundTo3DecimalPoints(height),
12
+ };
13
+ setChildSizes(new Map(childSizes.set(index, size)));
14
+ }, [childSizes, setChildSizes]);
4
15
  const absoluteChildren = React.useMemo(() => {
5
16
  let childrenArray = React.Children.toArray(children);
6
17
  if (reversed) {
@@ -10,11 +21,46 @@ const ZStack = ({ reversed, children, ...rest }) => {
10
21
  const props = child.props || {};
11
22
  return React.cloneElement(child, {
12
23
  ...props,
24
+ onLayout: (event) => {
25
+ var _a;
26
+ const layout = event.nativeEvent.layout;
27
+ const fullWidth = layout.x + layout.width;
28
+ const fullHeight = layout.y + layout.height;
29
+ onChildLayout(index, fullWidth, fullHeight);
30
+ (_a = props.onLayout) === null || _a === void 0 ? void 0 : _a.call(props, event);
31
+ },
32
+ key: index,
13
33
  style: { position: "absolute", zIndex: index + 1, ...props.style },
14
34
  }, props.children);
15
35
  });
16
- }, [children, reversed]);
17
- return React.createElement(View, { ...rest }, absoluteChildren);
36
+ }, [children, reversed, onChildLayout]);
37
+ React.useEffect(() => {
38
+ setChildSizes(new Map());
39
+ }, [absoluteChildren.length]);
40
+ const childSizeValues = Array.from(childSizes.values());
41
+ useDeepCompareEffect(() => {
42
+ let maxWidth = 0;
43
+ let maxHeight = 0;
44
+ childSizeValues.forEach(({ width, height }) => {
45
+ if (width > maxWidth) {
46
+ maxWidth = width;
47
+ }
48
+ if (height > maxHeight) {
49
+ maxHeight = height;
50
+ }
51
+ });
52
+ setMaxChildWidth(maxWidth);
53
+ setMaxChildHeight(maxHeight);
54
+ }, [childSizeValues, setMaxChildWidth, setMaxChildHeight]);
55
+ return (React.createElement(View, { style: [
56
+ maxChildWidth && maxChildHeight
57
+ ? { width: maxChildWidth, height: maxChildHeight }
58
+ : {},
59
+ style,
60
+ ], ...rest }, absoluteChildren));
18
61
  };
62
+ function roundTo3DecimalPoints(value) {
63
+ return Math.round(value * 1000) / 1000;
64
+ }
19
65
  export default ZStack;
20
66
  //# sourceMappingURL=ZStack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ZStack.js","sourceRoot":"","sources":["ZStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAM/C,MAAM,MAAM,GAA0B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IACxE,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,IAAI,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CACxC,QAAQ,CACe,CAAC;QAE1B,IAAI,QAAQ,EAAE;YACZ,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;SACzC;QAED,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,YAAY,CACvB,KAAK,EACL;gBACE,GAAG,KAAK;gBACR,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;aACnE,EACD,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzB,OAAO,oBAAC,IAAI,OAAK,IAAI,IAAG,gBAAgB,CAAQ,CAAC;AACnD,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"ZStack.js","sourceRoot":"","sources":["ZStack.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,39 @@
1
1
  import React from "react";
2
- import { View, ViewProps } from "react-native";
2
+ import { View, ViewProps, LayoutChangeEvent } from "react-native";
3
+ import { useDeepCompareEffect } from "../../utilities";
3
4
 
4
5
  interface ZStackProps extends ViewProps {
5
6
  reversed?: boolean;
6
7
  }
7
8
 
8
- const ZStack: React.FC<ZStackProps> = ({ reversed, children, ...rest }) => {
9
+ interface ChildSize {
10
+ width: number;
11
+ height: number;
12
+ }
13
+
14
+ const ZStack: React.FC<ZStackProps> = ({
15
+ reversed,
16
+ children,
17
+ style,
18
+ ...rest
19
+ }) => {
20
+ const [childSizes, setChildSizes] = React.useState<Map<number, ChildSize>>(
21
+ new Map()
22
+ );
23
+ const [maxChildWidth, setMaxChildWidth] = React.useState<number>();
24
+ const [maxChildHeight, setMaxChildHeight] = React.useState<number>();
25
+
26
+ const onChildLayout = React.useCallback(
27
+ (index: number, width: number, height: number) => {
28
+ const size: ChildSize = {
29
+ width: roundTo3DecimalPoints(width), // rounded to prevent infinte useEffect loop caused by floating point precision issues
30
+ height: roundTo3DecimalPoints(height),
31
+ };
32
+ setChildSizes(new Map(childSizes.set(index, size)));
33
+ },
34
+ [childSizes, setChildSizes]
35
+ );
36
+
9
37
  const absoluteChildren = React.useMemo(() => {
10
38
  let childrenArray = React.Children.toArray(
11
39
  children
@@ -21,14 +49,63 @@ const ZStack: React.FC<ZStackProps> = ({ reversed, children, ...rest }) => {
21
49
  child,
22
50
  {
23
51
  ...props,
52
+ onLayout: (event: LayoutChangeEvent) => {
53
+ const layout = event.nativeEvent.layout;
54
+
55
+ const fullWidth = layout.x + layout.width;
56
+ const fullHeight = layout.y + layout.height;
57
+ onChildLayout(index, fullWidth, fullHeight);
58
+
59
+ props.onLayout?.(event);
60
+ },
61
+ key: index,
24
62
  style: { position: "absolute", zIndex: index + 1, ...props.style },
25
63
  },
26
64
  props.children
27
65
  );
28
66
  });
29
- }, [children, reversed]);
67
+ }, [children, reversed, onChildLayout]);
68
+
69
+ React.useEffect(() => {
70
+ setChildSizes(new Map());
71
+ }, [absoluteChildren.length]);
72
+
73
+ const childSizeValues = Array.from(childSizes.values());
74
+
75
+ useDeepCompareEffect(() => {
76
+ let maxWidth = 0;
77
+ let maxHeight = 0;
78
+
79
+ childSizeValues.forEach(({ width, height }) => {
80
+ if (width > maxWidth) {
81
+ maxWidth = width;
82
+ }
83
+ if (height > maxHeight) {
84
+ maxHeight = height;
85
+ }
86
+ });
30
87
 
31
- return <View {...rest}>{absoluteChildren}</View>;
88
+ setMaxChildWidth(maxWidth);
89
+ setMaxChildHeight(maxHeight);
90
+ }, [childSizeValues, setMaxChildWidth, setMaxChildHeight]);
91
+
92
+ return (
93
+ <View
94
+ style={[
95
+ maxChildWidth && maxChildHeight
96
+ ? { width: maxChildWidth, height: maxChildHeight }
97
+ : {},
98
+ style,
99
+ ]}
100
+ {...rest}
101
+ >
102
+ {absoluteChildren}
103
+ </View>
104
+ );
32
105
  };
33
106
 
107
+ function roundTo3DecimalPoints(value: number) {
108
+ return Math.round(value * 1000) / 1000;
109
+ }
110
+
34
111
  export default ZStack;