@lichens-innovation/react-native-common 3.0.0 → 3.1.0

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/README.md CHANGED
@@ -73,8 +73,8 @@ Depending on your Expo SDK version, here are the compatibility table for `react-
73
73
  | Version Family | Expo SDK Version | Description |
74
74
  |----------------|------------------|-------------------------------------------------------|
75
75
  | 1.x.y | SDK 52, SDK 53 | Compatible with applications using Expo SDK 52 and 53 |
76
- | 2.x.y | SDK 54 | Compatible with applications using Expo SDK 54 |
77
- | 3.x.y | SDK 55 | Compatible with applications using Expo SDK 55 |
76
+ | 2.x.y, 3.x.y | SDK 54 | Compatible with applications using Expo SDK 54 |
77
+ | 4.x.y | SDK 55 | Compatible with applications using Expo SDK 55 |
78
78
 
79
79
  ### Adding the dependency to an existing mobile application
80
80
 
@@ -1,4 +1,4 @@
1
- export * from './vertical-resizable-overlay-view';
1
+ export * from './resizable-overlay-view';
2
2
  export * from './vertical-resizable-overlay-view.types';
3
3
  export * from './vertical-resizable-split-view';
4
4
  export * from './vertical-resizable-split-view.types';
@@ -1,4 +1,4 @@
1
- export * from './vertical-resizable-overlay-view';
1
+ export * from './resizable-overlay-view';
2
2
  export * from './vertical-resizable-overlay-view.types';
3
3
  export * from './vertical-resizable-split-view';
4
4
  export * from './vertical-resizable-split-view.types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/layout/resizable/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/layout/resizable/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { type FunctionComponent } from 'react';
2
2
  import { VerticalResizableOverlayViewProps } from './vertical-resizable-overlay-view.types';
3
- export declare const VerticalResizableOverlayView: FunctionComponent<VerticalResizableOverlayViewProps>;
3
+ export declare const ResizableOverlayView: FunctionComponent<VerticalResizableOverlayViewProps>;
@@ -1,52 +1,58 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useState } from 'react';
3
2
  import { StyleSheet, View } from 'react-native';
4
3
  import { Gesture, GestureDetector } from 'react-native-gesture-handler';
5
4
  import Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
6
5
  import { isDevelopment } from '../../../utils';
6
+ import { computeResizableOverlayLayoutValues } from './resizable-overlay-view.utils';
7
7
  import { validateResizableOverlayProps } from './vertical-resizable-overlay-view.utils';
8
8
  const DRAG_HANDLE_HEIGHT = 20;
9
9
  const DEFAULT_ANIMATION_CONFIG = { damping: 25, stiffness: 300, mass: 0.8 };
10
- export const VerticalResizableOverlayView = (props) => {
10
+ const OVERLAY_ANCHOR_STYLES = {
11
+ topLeft: { top: 0, left: 0 },
12
+ topRight: { top: 0, right: 0 },
13
+ bottomLeft: { bottom: 0, left: 0 },
14
+ bottomRight: { bottom: 0, right: 0 },
15
+ };
16
+ export const ResizableOverlayView = (props) => {
11
17
  if (isDevelopment())
12
18
  validateResizableOverlayProps(props);
13
- const { foregroundContent, backgroundContent, initialForegroundRatio = 0.5, minForegroundRatio = 0.15, maxForegroundRatio = 0.85, foregroundContentAspectRatio, handleContainerStyle, handleStyle, hideHandle = false, } = props;
14
- // Track measured container height
15
- const [isReady, setIsReady] = useState(false);
19
+ const { foregroundContent, backgroundContent, initialForegroundRatio = 0.5, minForegroundRatio = 0.15, maxForegroundRatio = 0.85, foregroundContentAspectRatio, handleContainerStyle, handleStyle, hideHandle = false, anchorType = 'topRight', } = props;
20
+ // Anchor styles
21
+ const overlayAnchorStyle = OVERLAY_ANCHOR_STYLES[anchorType];
22
+ const isBottomAnchored = ['bottomLeft', 'bottomRight'].includes(anchorType);
23
+ const isLeftAnchored = ['topLeft', 'bottomLeft'].includes(anchorType);
16
24
  // Shared values for animation
17
25
  const overlayHeight = useSharedValue(0);
26
+ const containerHeight = useSharedValue(0);
18
27
  const containerWidth = useSharedValue(0);
19
28
  const minHeight = useSharedValue(0);
20
29
  const maxHeight = useSharedValue(0);
21
30
  const startY = useSharedValue(0);
22
31
  const isDragging = useSharedValue(false);
23
32
  // Handle container layout measurement
24
- const handleLayout = useCallback((event) => {
25
- const { height, width } = event.nativeEvent.layout;
26
- if (height > 0 && !isReady) {
27
- minHeight.value = height * minForegroundRatio;
28
- maxHeight.value = height * maxForegroundRatio;
29
- overlayHeight.value = height * initialForegroundRatio;
30
- containerWidth.value = width;
31
- setIsReady(true);
32
- }
33
- }, [
34
- minForegroundRatio,
35
- maxForegroundRatio,
36
- initialForegroundRatio,
37
- minHeight,
38
- maxHeight,
39
- overlayHeight,
40
- containerWidth,
41
- isReady,
42
- ]);
33
+ const handleLayout = (event) => {
34
+ const computedValues = computeResizableOverlayLayoutValues({
35
+ event,
36
+ initialForegroundRatio,
37
+ minForegroundRatio,
38
+ maxForegroundRatio,
39
+ foregroundContentAspectRatio,
40
+ });
41
+ containerHeight.value = computedValues.containerHeight;
42
+ containerWidth.value = computedValues.containerWidth;
43
+ minHeight.value = computedValues.minHeight;
44
+ maxHeight.value = computedValues.maxHeight;
45
+ overlayHeight.value = computedValues.overlayHeight;
46
+ };
43
47
  const panGesture = Gesture.Pan()
44
48
  .onStart(() => {
45
49
  startY.value = overlayHeight.value;
46
50
  isDragging.value = true;
47
51
  })
48
52
  .onUpdate((event) => {
49
- const newHeight = startY.value + event.translationY;
53
+ // If the overlay is anchored to the bottom, dragging up should INCREASE its height.
54
+ const direction = isBottomAnchored ? -1 : 1;
55
+ const newHeight = startY.value + direction * event.translationY;
50
56
  overlayHeight.value = Math.max(minHeight.value, Math.min(newHeight, maxHeight.value));
51
57
  })
52
58
  .onEnd(() => {
@@ -81,16 +87,23 @@ export const VerticalResizableOverlayView = (props) => {
81
87
  effectiveWidth = calculatedWidth;
82
88
  }
83
89
  }
90
+ // Always compute an explicit `left` to avoid stale left/right values when `anchorType` changes.
91
+ const left = isLeftAnchored ? 0 : Math.max(0, containerWidth.value - effectiveWidth);
92
+ // If anchored at bottom, the handle must attach to the TOP edge of the overlay.
93
+ // Otherwise (top anchor), it attaches to the BOTTOM edge.
94
+ const top = isBottomAnchored
95
+ ? containerHeight.value - effectiveHeight - DRAG_HANDLE_HEIGHT / 2
96
+ : effectiveHeight - DRAG_HANDLE_HEIGHT / 2;
84
97
  return {
85
- top: effectiveHeight - DRAG_HANDLE_HEIGHT / 2,
86
- right: 0,
98
+ top,
87
99
  width: effectiveWidth,
100
+ left,
88
101
  };
89
- });
102
+ }, [foregroundContentAspectRatio, isBottomAnchored, isLeftAnchored]);
90
103
  const dragHandleAnimatedStyle = useAnimatedStyle(() => ({
91
104
  transform: [{ scale: withSpring(isDragging.value ? 1.2 : 1, DEFAULT_ANIMATION_CONFIG) }],
92
105
  }));
93
- return (_jsxs(View, { style: [styles.container], onLayout: handleLayout, children: [_jsx(View, { style: styles.backgroundSection, children: backgroundContent }), _jsx(Animated.View, { style: [styles.overlaySection, overlayAnimatedStyle], children: foregroundContent }), !hideHandle && (_jsx(GestureDetector, { gesture: panGesture, children: _jsx(Animated.View, { style: [styles.handleContainer, handleContainerStyle, dragHandleContainerAnimatedStyle], children: _jsx(Animated.View, { style: [styles.handle, handleStyle, dragHandleAnimatedStyle] }) }) }))] }));
106
+ return (_jsxs(View, { style: [styles.container], onLayout: handleLayout, children: [_jsx(View, { style: styles.backgroundSection, children: backgroundContent }), _jsx(Animated.View, { style: [styles.overlaySection, overlayAnchorStyle, overlayAnimatedStyle], children: foregroundContent }), !hideHandle && (_jsx(GestureDetector, { gesture: panGesture, children: _jsx(Animated.View, { style: [styles.handleContainer, handleContainerStyle, dragHandleContainerAnimatedStyle], children: _jsx(Animated.View, { style: [styles.handle, handleStyle, dragHandleAnimatedStyle] }) }) }))] }));
94
107
  };
95
108
  const styles = StyleSheet.create({
96
109
  container: {
@@ -101,8 +114,6 @@ const styles = StyleSheet.create({
101
114
  },
102
115
  overlaySection: {
103
116
  position: 'absolute',
104
- top: 0,
105
- right: 0,
106
117
  overflow: 'hidden',
107
118
  },
108
119
  handleContainer: {
@@ -118,4 +129,4 @@ const styles = StyleSheet.create({
118
129
  borderRadius: 4,
119
130
  },
120
131
  });
121
- //# sourceMappingURL=vertical-resizable-overlay-view.js.map
132
+ //# sourceMappingURL=resizable-overlay-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable-overlay-view.js","sourceRoot":"","sources":["../../../../src/components/layout/resizable/resizable-overlay-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { LayoutChangeEvent } from 'react-native';
2
+ interface ComputeResizableOverlayLayoutValuesArgs {
3
+ event: LayoutChangeEvent;
4
+ initialForegroundRatio: number;
5
+ minForegroundRatio: number;
6
+ maxForegroundRatio: number;
7
+ foregroundContentAspectRatio?: number;
8
+ }
9
+ export declare const computeResizableOverlayLayoutValues: ({ event, initialForegroundRatio, minForegroundRatio, maxForegroundRatio, foregroundContentAspectRatio, }: ComputeResizableOverlayLayoutValuesArgs) => {
10
+ containerHeight: number;
11
+ containerWidth: number;
12
+ minHeight: number;
13
+ maxHeight: number;
14
+ overlayHeight: number;
15
+ };
16
+ export {};
@@ -0,0 +1,19 @@
1
+ export const computeResizableOverlayLayoutValues = ({ event, initialForegroundRatio, minForegroundRatio, maxForegroundRatio, foregroundContentAspectRatio, }) => {
2
+ const { height, width } = event.nativeEvent.layout;
3
+ if (height <= 0)
4
+ return { containerHeight: 0, containerWidth: 0, minHeight: 0, maxHeight: 0, overlayHeight: 0 };
5
+ // Always keep container & bounds updated (layout can change over time).
6
+ const computedMinHeight = height * minForegroundRatio;
7
+ const computedMaxHeightFromContainer = height * maxForegroundRatio;
8
+ const computedMaxHeightFromAspectRatio = foregroundContentAspectRatio !== undefined ? width / foregroundContentAspectRatio : Number.POSITIVE_INFINITY;
9
+ const computedMaxHeight = Math.max(computedMinHeight, Math.min(computedMaxHeightFromContainer, computedMaxHeightFromAspectRatio));
10
+ const computedOverlayHeight = Math.max(computedMinHeight, Math.min(height * initialForegroundRatio, computedMaxHeight));
11
+ return {
12
+ containerHeight: height,
13
+ containerWidth: width,
14
+ minHeight: computedMinHeight,
15
+ maxHeight: computedMaxHeight,
16
+ overlayHeight: computedOverlayHeight,
17
+ };
18
+ };
19
+ //# sourceMappingURL=resizable-overlay-view.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable-overlay-view.utils.js","sourceRoot":"","sources":["../../../../src/components/layout/resizable/resizable-overlay-view.utils.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,EAClD,KAAK,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,GACY,EAAE,EAAE;IAC5C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IACnD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAEhH,wEAAwE;IACxE,MAAM,iBAAiB,GAAG,MAAM,GAAG,kBAAkB,CAAC;IACtD,MAAM,8BAA8B,GAAG,MAAM,GAAG,kBAAkB,CAAC;IACnE,MAAM,gCAAgC,GACpC,4BAA4B,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,4BAA4B,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC/G,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAChC,iBAAiB,EACjB,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,gCAAgC,CAAC,CAC3E,CAAC;IAEF,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CACpC,iBAAiB,EACjB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,sBAAsB,EAAE,iBAAiB,CAAC,CAC7D,CAAC;IAEF,OAAO;QACL,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,KAAK;QACrB,SAAS,EAAE,iBAAiB;QAC5B,SAAS,EAAE,iBAAiB;QAC5B,aAAa,EAAE,qBAAqB;KACrC,CAAC;AACJ,CAAC,CAAC"}
@@ -1,10 +1,16 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ViewStyle } from 'react-native';
3
+ export type VerticalResizableOverlayViewAnchorType = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
3
4
  export interface VerticalResizableOverlayViewProps {
4
5
  /** Content to display in the overlay section (foreground, on top) */
5
6
  foregroundContent: ReactNode;
6
7
  /** Content to display in the background section (fills the entire container) */
7
8
  backgroundContent: ReactNode;
9
+ /**
10
+ * Where the overlay is anchored inside the container.
11
+ * Default: topRight
12
+ */
13
+ anchorType?: VerticalResizableOverlayViewAnchorType;
8
14
  /** Initial height ratio for the foreground overlay (0 to 1). Default: 0.5 */
9
15
  initialForegroundRatio?: number;
10
16
  /** Minimum height ratio for the foreground overlay (0 to 1). Default: 0.15 */
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Lichens Innovation React Native Expo shared components, utilities, hooks and services",
4
4
  "repository": "https://github.com/Lichens-Innovation/react-native-common",
5
5
  "author": "Lichens Innovation",
6
- "version": "3.0.0",
6
+ "version": "3.1.0",
7
7
  "private": false,
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@legendapp/list": "^2.0.9",
29
- "@lichens-innovation/ts-common": "^1.6.2",
29
+ "@lichens-innovation/ts-common": "^1.6.3",
30
30
  "@noble/hashes": "^2.0.1",
31
31
  "@uidotdev/usehooks": "^2.4.1",
32
32
  "buffer": "^6.0.3",
@@ -1 +0,0 @@
1
- {"version":3,"file":"vertical-resizable-overlay-view.js","sourceRoot":"","sources":["../../../../src/components/layout/resizable/vertical-resizable-overlay-view.tsx"],"names":[],"mappings":"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"}