react-native-divkit 1.6.5 → 1.8.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.
Files changed (97) hide show
  1. package/README.md +18 -15
  2. package/dist/DivKit.d.ts.map +1 -1
  3. package/dist/DivKit.js +115 -4
  4. package/dist/DivKit.js.map +1 -1
  5. package/dist/components/DivComponent.d.ts.map +1 -1
  6. package/dist/components/DivComponent.js +6 -2
  7. package/dist/components/DivComponent.js.map +1 -1
  8. package/dist/components/index.d.ts +4 -0
  9. package/dist/components/index.d.ts.map +1 -1
  10. package/dist/components/index.js +2 -0
  11. package/dist/components/index.js.map +1 -1
  12. package/dist/components/indicator/DivIndicator.d.ts +19 -0
  13. package/dist/components/indicator/DivIndicator.d.ts.map +1 -0
  14. package/dist/components/indicator/DivIndicator.js +112 -0
  15. package/dist/components/indicator/DivIndicator.js.map +1 -0
  16. package/dist/components/indicator/index.d.ts +3 -0
  17. package/dist/components/indicator/index.d.ts.map +1 -0
  18. package/dist/components/indicator/index.js +2 -0
  19. package/dist/components/indicator/index.js.map +1 -0
  20. package/dist/components/indicator/utils.d.ts +61 -0
  21. package/dist/components/indicator/utils.d.ts.map +1 -0
  22. package/dist/components/indicator/utils.js +104 -0
  23. package/dist/components/indicator/utils.js.map +1 -0
  24. package/dist/components/pager/DivPager.d.ts +22 -0
  25. package/dist/components/pager/DivPager.d.ts.map +1 -0
  26. package/dist/components/pager/DivPager.js +269 -0
  27. package/dist/components/pager/DivPager.js.map +1 -0
  28. package/dist/components/pager/index.d.ts +3 -0
  29. package/dist/components/pager/index.d.ts.map +1 -0
  30. package/dist/components/pager/index.js +2 -0
  31. package/dist/components/pager/index.js.map +1 -0
  32. package/dist/components/pager/utils.d.ts +96 -0
  33. package/dist/components/pager/utils.d.ts.map +1 -0
  34. package/dist/components/pager/utils.js +142 -0
  35. package/dist/components/pager/utils.js.map +1 -0
  36. package/dist/components/state/DivState.d.ts +11 -12
  37. package/dist/components/state/DivState.d.ts.map +1 -1
  38. package/dist/components/state/DivState.js +263 -35
  39. package/dist/components/state/DivState.js.map +1 -1
  40. package/dist/components/utilities/Background.d.ts.map +1 -1
  41. package/dist/components/utilities/Background.js +4 -3
  42. package/dist/components/utilities/Background.js.map +1 -1
  43. package/dist/components/utilities/Outer.d.ts.map +1 -1
  44. package/dist/components/utilities/Outer.js +175 -78
  45. package/dist/components/utilities/Outer.js.map +1 -1
  46. package/dist/context/DivStateScopeContext.d.ts +18 -0
  47. package/dist/context/DivStateScopeContext.d.ts.map +1 -0
  48. package/dist/context/DivStateScopeContext.js +7 -0
  49. package/dist/context/DivStateScopeContext.js.map +1 -0
  50. package/dist/context/PagerContext.d.ts +30 -0
  51. package/dist/context/PagerContext.d.ts.map +1 -0
  52. package/dist/context/PagerContext.js +76 -0
  53. package/dist/context/PagerContext.js.map +1 -0
  54. package/dist/context/index.d.ts +1 -0
  55. package/dist/context/index.d.ts.map +1 -1
  56. package/dist/context/index.js +1 -0
  57. package/dist/context/index.js.map +1 -1
  58. package/dist/hooks/useAppearanceTransition.d.ts +86 -0
  59. package/dist/hooks/useAppearanceTransition.d.ts.map +1 -0
  60. package/dist/hooks/useAppearanceTransition.js +490 -0
  61. package/dist/hooks/useAppearanceTransition.js.map +1 -0
  62. package/dist/hooks/useChangeBoundsTransition.d.ts +46 -0
  63. package/dist/hooks/useChangeBoundsTransition.d.ts.map +1 -0
  64. package/dist/hooks/useChangeBoundsTransition.js +151 -0
  65. package/dist/hooks/useChangeBoundsTransition.js.map +1 -0
  66. package/dist/utils/configureChangeBoundsLayout.d.ts +11 -0
  67. package/dist/utils/configureChangeBoundsLayout.d.ts.map +1 -0
  68. package/dist/utils/configureChangeBoundsLayout.js +65 -0
  69. package/dist/utils/configureChangeBoundsLayout.js.map +1 -0
  70. package/dist/utils/flattenTransition.d.ts +5 -0
  71. package/dist/utils/flattenTransition.d.ts.map +1 -0
  72. package/dist/utils/flattenTransition.js +27 -0
  73. package/dist/utils/flattenTransition.js.map +1 -0
  74. package/package.json +3 -1
  75. package/src/DivKit.tsx +131 -5
  76. package/src/components/DivComponent.tsx +8 -2
  77. package/src/components/README.md +59 -5
  78. package/src/components/index.ts +4 -0
  79. package/src/components/indicator/DivIndicator.tsx +175 -0
  80. package/src/components/indicator/index.ts +2 -0
  81. package/src/components/indicator/utils.ts +149 -0
  82. package/src/components/pager/DivPager.tsx +393 -0
  83. package/src/components/pager/index.ts +2 -0
  84. package/src/components/pager/utils.ts +214 -0
  85. package/src/components/state/DivState.tsx +308 -39
  86. package/src/components/utilities/Background.tsx +4 -3
  87. package/src/components/utilities/Outer.tsx +192 -75
  88. package/src/context/DivStateScopeContext.tsx +23 -0
  89. package/src/context/PagerContext.tsx +108 -0
  90. package/src/context/index.ts +8 -0
  91. package/src/hooks/useAppearanceTransition.ts +621 -0
  92. package/src/hooks/useChangeBoundsTransition.ts +193 -0
  93. package/src/types/indicator.d.ts +32 -0
  94. package/src/types/pager.d.ts +36 -0
  95. package/src/types/shape.d.ts +26 -0
  96. package/src/utils/configureChangeBoundsLayout.ts +74 -0
  97. package/src/utils/flattenTransition.ts +36 -0
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Pure helpers for DivPager. Extracted so they can be unit-tested without
3
+ * having to render the React tree.
4
+ */
5
+ /**
6
+ * Compute the size of a single page along the main axis. Mirrors the Web
7
+ * Pager.svelte autoSizeVal calculation:
8
+ * - fixed + center: containerSize − 2·neighbour − 2·spacing
9
+ * - fixed + start/end: containerSize − neighbour − spacing
10
+ * - percentage: containerSize · page_width / 100
11
+ * - wrap_content / unknown: usable area (containerSize − paddings)
12
+ */
13
+ export function computePageSize(args) {
14
+ const { containerSize, layoutMode, scrollAxisAlignment, itemSpacing, innerPadStart, innerPadEnd } = args;
15
+ if (containerSize <= 0)
16
+ return 0;
17
+ const usable = containerSize - innerPadStart - innerPadEnd;
18
+ const lm = layoutMode;
19
+ if (lm && lm.type === 'fixed') {
20
+ const neighbourW = lm.neighbour_page_width?.value ?? 0;
21
+ if (scrollAxisAlignment === 'center') {
22
+ return Math.max(0, containerSize - 2 * neighbourW - 2 * itemSpacing);
23
+ }
24
+ return Math.max(0, containerSize - neighbourW - itemSpacing);
25
+ }
26
+ if (lm && lm.type === 'percentage') {
27
+ const pageW = lm.page_width?.value ?? 100;
28
+ return Math.max(0, (containerSize * pageW) / 100);
29
+ }
30
+ return Math.max(0, usable);
31
+ }
32
+ /**
33
+ * Compute the contentContainer paddings the inner ScrollView needs so that the
34
+ * first/last items snap to the right visual position (centre/start/end). In
35
+ * infinite mode the duplicates take that role and we use zero padding.
36
+ */
37
+ export function computeContentPad(args) {
38
+ const { containerSize, pageSize, innerPadStart, innerPadEnd, layoutMode, scrollAxisAlignment, itemSpacing, isInfinite } = args;
39
+ if (containerSize <= 0 || pageSize <= 0) {
40
+ return { start: innerPadStart, end: innerPadEnd };
41
+ }
42
+ if (isInfinite) {
43
+ return { start: 0, end: 0 };
44
+ }
45
+ const lm = layoutMode;
46
+ if (lm && lm.type === 'fixed') {
47
+ const neighbourW = lm.neighbour_page_width?.value ?? 0;
48
+ if (scrollAxisAlignment === 'center') {
49
+ const pad = neighbourW + itemSpacing;
50
+ return { start: pad, end: pad };
51
+ }
52
+ if (scrollAxisAlignment === 'start') {
53
+ return { start: innerPadStart, end: neighbourW + itemSpacing + innerPadEnd };
54
+ }
55
+ if (scrollAxisAlignment === 'end') {
56
+ return { start: neighbourW + itemSpacing + innerPadStart, end: innerPadEnd };
57
+ }
58
+ }
59
+ return { start: innerPadStart, end: innerPadEnd };
60
+ }
61
+ export const DUPLICATES_IN_INFINITE = 2;
62
+ /**
63
+ * Map a "real" item index (0..size-1) to its rendered position.
64
+ * In infinite mode the real items live in [DUPLICATES, DUPLICATES + size).
65
+ */
66
+ export function realToPosition(realIdx, isInfinite, duplicates = DUPLICATES_IN_INFINITE) {
67
+ return isInfinite ? duplicates + realIdx : realIdx;
68
+ }
69
+ /**
70
+ * Map a rendered position back to the real index. Wraps modulo `size` when
71
+ * the position lands inside the duplicate region.
72
+ */
73
+ export function positionToReal(pos, isInfinite, size, duplicates = DUPLICATES_IN_INFINITE) {
74
+ if (size <= 0)
75
+ return 0;
76
+ if (!isInfinite) {
77
+ return Math.max(0, Math.min(size - 1, pos));
78
+ }
79
+ const inner = pos - duplicates;
80
+ return ((inner % size) + size) % size;
81
+ }
82
+ /**
83
+ * True when `pos` corresponds to one of the duplicate entries (only meaningful
84
+ * in infinite mode).
85
+ */
86
+ export function isInDuplicateRegion(pos, isInfinite, size, duplicates = DUPLICATES_IN_INFINITE) {
87
+ if (!isInfinite)
88
+ return false;
89
+ return pos < duplicates || pos >= duplicates + size;
90
+ }
91
+ /**
92
+ * Build the list of items to render. In infinite mode this prefixes the array
93
+ * with `duplicates` copies of the last items and suffixes it with `duplicates`
94
+ * copies of the first items, so the user can swipe past either edge and land
95
+ * on something visually identical to the wrap-around target.
96
+ */
97
+ export function buildRenderedItems(items, isInfinite, duplicates = DUPLICATES_IN_INFINITE) {
98
+ if (!items.length)
99
+ return [];
100
+ if (!isInfinite) {
101
+ return items.map((item, index) => ({ item, realIndex: index, key: `r-${index}` }));
102
+ }
103
+ const size = items.length;
104
+ const head = [];
105
+ const tail = [];
106
+ for (let i = 0; i < duplicates; i++) {
107
+ const realIdx = (size - duplicates + i + size) % size;
108
+ head.push({ item: items[realIdx], realIndex: realIdx, key: `dup-h-${i}` });
109
+ }
110
+ for (let i = 0; i < duplicates; i++) {
111
+ const realIdx = i % size;
112
+ tail.push({ item: items[realIdx], realIndex: realIdx, key: `dup-t-${i}` });
113
+ }
114
+ const real = items.map((item, index) => ({
115
+ item,
116
+ realIndex: index,
117
+ key: `r-${index}`
118
+ }));
119
+ return [...head, ...real, ...tail];
120
+ }
121
+ /**
122
+ * Decide whether infinite_scroll should actually be active.
123
+ * Mirrors Web's correctBooleanInt + the `items.length >= DUPLICATES_IN_INFINITE`
124
+ * gate.
125
+ */
126
+ export function isInfiniteEnabled(infiniteValue, itemsLength) {
127
+ const truthy = infiniteValue === true ||
128
+ infiniteValue === 1 ||
129
+ infiniteValue === '1' ||
130
+ infiniteValue === 'true';
131
+ return truthy && itemsLength >= DUPLICATES_IN_INFINITE;
132
+ }
133
+ /**
134
+ * Convert a scroll offset (in px) into a snap position (rounded). Returns 0
135
+ * when snapInterval <= 0.
136
+ */
137
+ export function offsetToPosition(offset, snapInterval) {
138
+ if (snapInterval <= 0)
139
+ return 0;
140
+ return Math.round(offset / snapInterval);
141
+ }
142
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/pager/utils.ts"],"names":[],"mappings":"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"}
@@ -6,21 +6,20 @@ export interface DivStateProps {
6
6
  }
7
7
  /**
8
8
  * DivState component - renders different content based on state
9
- * MVP implementation with basic features:
9
+ *
10
+ * Supports:
10
11
  * - State selection by state_id
11
12
  * - Default state
12
- * - State switching via actions (set_state)
13
- * - State registration in StateContext
14
- * - State variable binding (state_id_variable)
15
- *
16
- * Deferred for post-MVP:
17
- * - Transition animations (in/out/change)
18
- * - Animation timing and interpolation
19
- * - Clip to bounds
20
- * - Advanced state management
21
- * - Multiple concurrent state transitions
13
+ * - State switching via actions (set_state) and via state_id_variable two-way binding
14
+ * - transition_change on the state container (smooth layout transitions for neighbours via
15
+ * configureChangeBoundsLayout)
16
+ * - Per-element transition_out for children declaring it in the OUTGOING state JSON
17
+ * (children register a playOut via DivStateScopeContext; DivState awaits them in parallel
18
+ * before mounting the new state). Transition_in for the INCOMING children plays automatically
19
+ * on mount via Outer's mode='auto-in'.
22
20
  *
23
- * Based on Web State.svelte
21
+ * Based on Web State.svelte (simplified — no per-element bbox tracking for transition_change
22
+ * within state subtree).
24
23
  */
25
24
  export declare function DivState({ componentContext }: DivStateProps): React.JSX.Element;
26
25
  //# sourceMappingURL=DivState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DivState.d.ts","sourceRoot":"","sources":["../../../src/components/state/DivState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,mBAAmB,CAAC;AAM7D,MAAM,WAAW,aAAa;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAAE,aAAa,qBA6G3D"}
1
+ {"version":3,"file":"DivState.d.ts","sourceRoot":"","sources":["../../../src/components/state/DivState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,mBAAmB,CAAC;AAW7D,MAAM,WAAW,aAAa;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;CACpD;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAAE,aAAa,qBAuR3D"}
@@ -1,63 +1,154 @@
1
- import React, { useState, useEffect, useMemo } from 'react';
2
- import { View } from 'react-native';
1
+ import React, { useState, useEffect, useMemo, useCallback, useRef } from 'react';
2
+ import { Animated, Easing, View } from 'react-native';
3
3
  import { Outer } from '../utilities/Outer';
4
4
  import { useStateContext } from '../../context/StateContext';
5
5
  import { useDivKitContext } from '../../context/DivKitContext';
6
+ import { DivStateScopeContext } from '../../context/DivStateScopeContext';
7
+ import { LayoutParamsContext } from '../../context/LayoutParamsContext';
6
8
  import { wrapError } from '../../utils/wrapError';
9
+ import { flattenChangeTransition } from '../../utils/flattenTransition';
7
10
  /**
8
11
  * DivState component - renders different content based on state
9
- * MVP implementation with basic features:
12
+ *
13
+ * Supports:
10
14
  * - State selection by state_id
11
15
  * - Default state
12
- * - State switching via actions (set_state)
13
- * - State registration in StateContext
14
- * - State variable binding (state_id_variable)
15
- *
16
- * Deferred for post-MVP:
17
- * - Transition animations (in/out/change)
18
- * - Animation timing and interpolation
19
- * - Clip to bounds
20
- * - Advanced state management
21
- * - Multiple concurrent state transitions
16
+ * - State switching via actions (set_state) and via state_id_variable two-way binding
17
+ * - transition_change on the state container (smooth layout transitions for neighbours via
18
+ * configureChangeBoundsLayout)
19
+ * - Per-element transition_out for children declaring it in the OUTGOING state JSON
20
+ * (children register a playOut via DivStateScopeContext; DivState awaits them in parallel
21
+ * before mounting the new state). Transition_in for the INCOMING children plays automatically
22
+ * on mount via Outer's mode='auto-in'.
22
23
  *
23
- * Based on Web State.svelte
24
+ * Based on Web State.svelte (simplified — no per-element bbox tracking for transition_change
25
+ * within state subtree).
24
26
  */
25
27
  export function DivState({ componentContext }) {
26
28
  const { json } = componentContext;
27
29
  const { getVariable } = useDivKitContext();
28
30
  const { registerState } = useStateContext();
29
- // Get state ID for registration
30
31
  const stateId = json.div_id || json.id;
31
- // Find default state
32
32
  const defaultStateId = useMemo(() => {
33
33
  if (json.default_state_id) {
34
34
  return json.default_state_id;
35
35
  }
36
- // If no default, use first state
37
36
  if (json.states && json.states.length > 0) {
38
37
  return json.states[0].state_id;
39
38
  }
40
39
  return undefined;
41
40
  }, [json.default_state_id, json.states]);
42
- // State management
43
41
  const [currentStateId, setCurrentStateId] = useState(defaultStateId);
42
+ const [stagedStateChange, setStagedStateChange] = useState(null);
43
+ const [contentSize, setContentSize] = useState(null);
44
+ // True while we're awaiting transition_out of the previous state — we keep rendering the
45
+ // outgoing children during this window so their out-animations remain visible.
46
+ const [pendingStateId, setPendingStateId] = useState(undefined);
47
+ // Registry of transition_out players from children inside this state's scope.
48
+ // The set is REPLACED each time the state swaps (because children unmount), so we don't need
49
+ // explicit clearing — old entries are pruned naturally by Outer's cleanup effect.
50
+ const outPlayersRef = useRef(new Set());
51
+ const scopeValue = useMemo(() => ({
52
+ registerTransitionOutPlayer(play) {
53
+ outPlayersRef.current.add(play);
54
+ return () => {
55
+ outPlayersRef.current.delete(play);
56
+ };
57
+ }
58
+ }), []);
59
+ const transitionChange = json.transition_change;
60
+ const stageTimerRef = useRef(null);
61
+ const animatedFrame = useRef({
62
+ left: new Animated.Value(0),
63
+ top: new Animated.Value(0),
64
+ width: new Animated.Value(0),
65
+ height: new Animated.Value(0),
66
+ }).current;
67
+ const applyStateChange = useCallback(async (newStateId) => {
68
+ if (newStateId === currentStateId || newStateId === pendingStateId)
69
+ return;
70
+ const outPlayers = Array.from(outPlayersRef.current);
71
+ if (outPlayers.length > 0) {
72
+ setPendingStateId(newStateId);
73
+ try {
74
+ await Promise.all(outPlayers.map(p => p()));
75
+ }
76
+ catch (err) {
77
+ componentContext.logError(wrapError(err, {
78
+ additional: { phase: 'state_transition_out' }
79
+ }));
80
+ }
81
+ }
82
+ const nextState = json.states?.find(state => state.state_id === newStateId);
83
+ const previousState = json.states?.find(state => state.state_id === currentStateId);
84
+ const nextTransitionChange = nextState?.div?.transition_change;
85
+ const currentTransitionChange = previousState?.div?.transition_change;
86
+ const effectiveTransitionChange = nextTransitionChange || currentTransitionChange || transitionChange;
87
+ const duration = getChangeBoundsDuration(effectiveTransitionChange);
88
+ if (previousState?.div && nextState?.div && contentSize && duration > 0) {
89
+ const fromFrame = getChildFrame(previousState.div, contentSize);
90
+ const toFrame = getChildFrame(nextState.div, contentSize);
91
+ animatedFrame.left.setValue(fromFrame.left);
92
+ animatedFrame.top.setValue(fromFrame.top);
93
+ animatedFrame.width.setValue(fromFrame.width);
94
+ animatedFrame.height.setValue(fromFrame.height);
95
+ setPendingStateId(newStateId);
96
+ setStagedStateChange({
97
+ targetStateId: newStateId,
98
+ div: createOverlayDiv(previousState.div)
99
+ });
100
+ await new Promise(resolve => {
101
+ if (stageTimerRef.current) {
102
+ clearTimeout(stageTimerRef.current);
103
+ }
104
+ Animated.parallel([
105
+ Animated.timing(animatedFrame.left, {
106
+ toValue: toFrame.left,
107
+ duration,
108
+ easing: Easing.inOut(Easing.ease),
109
+ useNativeDriver: false,
110
+ }),
111
+ Animated.timing(animatedFrame.top, {
112
+ toValue: toFrame.top,
113
+ duration,
114
+ easing: Easing.inOut(Easing.ease),
115
+ useNativeDriver: false,
116
+ }),
117
+ Animated.timing(animatedFrame.width, {
118
+ toValue: toFrame.width,
119
+ duration,
120
+ easing: Easing.inOut(Easing.ease),
121
+ useNativeDriver: false,
122
+ }),
123
+ Animated.timing(animatedFrame.height, {
124
+ toValue: toFrame.height,
125
+ duration,
126
+ easing: Easing.inOut(Easing.ease),
127
+ useNativeDriver: false,
128
+ }),
129
+ ]).start(() => {
130
+ resolve();
131
+ });
132
+ });
133
+ }
134
+ setCurrentStateId(newStateId);
135
+ setStagedStateChange(null);
136
+ setPendingStateId(undefined);
137
+ }, [currentStateId, pendingStateId, json.states, transitionChange, contentSize, animatedFrame, componentContext]);
44
138
  // Handle state_id_variable (two-way binding)
45
139
  const stateVariableName = json.state_id_variable;
46
140
  const stateVariable = stateVariableName ? getVariable(stateVariableName) : undefined;
47
- // Sync with state variable
48
141
  useEffect(() => {
49
142
  if (stateVariable) {
50
- // Subscribe to variable changes
51
143
  const unsubscribe = stateVariable.subscribe((value) => {
52
144
  if (typeof value === 'string' && value !== currentStateId) {
53
- setCurrentStateId(value);
145
+ void applyStateChange(value);
54
146
  }
55
147
  });
56
148
  return unsubscribe;
57
149
  }
58
150
  return undefined;
59
- }, [stateVariable, currentStateId]);
60
- // Update variable when state changes
151
+ }, [stateVariable, currentStateId, applyStateChange]);
61
152
  useEffect(() => {
62
153
  if (stateVariable && currentStateId) {
63
154
  const currentValue = stateVariable.getValue();
@@ -66,18 +157,16 @@ export function DivState({ componentContext }) {
66
157
  }
67
158
  }
68
159
  }, [stateVariable, currentStateId]);
69
- // Register state in context for set_state action
70
160
  useEffect(() => {
71
161
  if (stateId) {
72
162
  const unregister = registerState(stateId, async (newStateId) => {
73
- setCurrentStateId(newStateId);
163
+ await applyStateChange(newStateId);
74
164
  return undefined;
75
165
  });
76
166
  return unregister;
77
167
  }
78
168
  return undefined;
79
- }, [stateId, registerState]);
80
- // Validate states
169
+ }, [stateId, registerState, applyStateChange]);
81
170
  useEffect(() => {
82
171
  if (!json.states || json.states.length === 0) {
83
172
  componentContext.logError(wrapError(new Error('Empty "states" prop for div "state"')));
@@ -86,7 +175,14 @@ export function DivState({ componentContext }) {
86
175
  componentContext.logError(wrapError(new Error('Missing "id" prop for div "state"')));
87
176
  }
88
177
  }, [json.states, stateId, componentContext]);
89
- // Find current state
178
+ useEffect(() => {
179
+ return () => {
180
+ if (stageTimerRef.current) {
181
+ clearTimeout(stageTimerRef.current);
182
+ stageTimerRef.current = null;
183
+ }
184
+ };
185
+ }, []);
90
186
  const currentState = useMemo(() => {
91
187
  if (!json.states)
92
188
  return undefined;
@@ -95,17 +191,29 @@ export function DivState({ componentContext }) {
95
191
  return undefined;
96
192
  return found;
97
193
  }, [json.states, currentStateId]);
98
- // Create child context for current state
194
+ const renderedDiv = currentState?.div;
99
195
  const childContext = useMemo(() => {
100
- if (!currentState?.div)
196
+ if (!renderedDiv)
101
197
  return undefined;
102
- return componentContext.produceChildContext(currentState.div, {
198
+ return componentContext.produceChildContext(renderedDiv, {
103
199
  path: currentStateId
104
200
  });
105
- }, [currentState, currentStateId, componentContext]);
106
- // Render current state
201
+ }, [renderedDiv, currentStateId, componentContext]);
202
+ const contentStyle = useMemo(() => {
203
+ const child = renderedDiv;
204
+ const style = {
205
+ width: '100%',
206
+ alignItems: mapAlignmentToFlex(child?.alignment_horizontal),
207
+ justifyContent: mapAlignmentToFlex(child?.alignment_vertical),
208
+ };
209
+ const heightType = json.height?.type;
210
+ if (heightType === 'fixed' || heightType === 'match_parent') {
211
+ style.flex = 1;
212
+ }
213
+ return style;
214
+ }, [renderedDiv, json.height]);
107
215
  const renderContent = () => {
108
- if (!currentState?.div || !childContext) {
216
+ if (!renderedDiv || !childContext) {
109
217
  return null;
110
218
  }
111
219
  // Import DivComponent dynamically to avoid circular dependency
@@ -113,8 +221,128 @@ export function DivState({ componentContext }) {
113
221
  const DivComponent = require('../DivComponent').DivComponent;
114
222
  return <DivComponent componentContext={childContext}/>;
115
223
  };
224
+ const overlayContext = useMemo(() => {
225
+ if (!stagedStateChange?.div)
226
+ return undefined;
227
+ return componentContext.produceChildContext(stagedStateChange.div, {
228
+ path: currentStateId
229
+ });
230
+ }, [stagedStateChange, currentStateId, componentContext]);
231
+ const renderOverlay = () => {
232
+ if (!stagedStateChange?.div || !overlayContext) {
233
+ return null;
234
+ }
235
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
236
+ const DivComponent = require('../DivComponent').DivComponent;
237
+ return (<Animated.View pointerEvents="none" style={{
238
+ position: 'absolute',
239
+ left: animatedFrame.left,
240
+ top: animatedFrame.top,
241
+ width: animatedFrame.width,
242
+ height: animatedFrame.height,
243
+ overflow: 'hidden',
244
+ }}>
245
+ <LayoutParamsContext.Provider value={{ parentContainerOrientation: 'vertical' }}>
246
+ <DivComponent componentContext={overlayContext}/>
247
+ </LayoutParamsContext.Provider>
248
+ </Animated.View>);
249
+ };
250
+ const handleContentLayout = useCallback((event) => {
251
+ const { width, height } = event.nativeEvent.layout;
252
+ setContentSize(prev => {
253
+ if (prev && prev.width === width && prev.height === height)
254
+ return prev;
255
+ return { width, height };
256
+ });
257
+ }, []);
116
258
  return (<Outer componentContext={componentContext}>
117
- <View>{renderContent()}</View>
259
+ <DivStateScopeContext.Provider value={scopeValue}>
260
+ <View style={[contentStyle, { position: 'relative' }]} onLayout={handleContentLayout}>
261
+ {stagedStateChange ? (<View style={{ opacity: 0 }}>
262
+ <LayoutParamsContext.Provider value={{ parentContainerOrientation: 'vertical' }}>
263
+ {renderContent()}
264
+ </LayoutParamsContext.Provider>
265
+ </View>) : (<LayoutParamsContext.Provider value={{ parentContainerOrientation: 'vertical' }}>
266
+ {renderContent()}
267
+ </LayoutParamsContext.Provider>)}
268
+ {renderOverlay()}
269
+ </View>
270
+ </DivStateScopeContext.Provider>
118
271
  </Outer>);
119
272
  }
273
+ function mapAlignmentToFlex(alignment) {
274
+ switch (alignment) {
275
+ case 'center':
276
+ return 'center';
277
+ case 'right':
278
+ case 'bottom':
279
+ case 'end':
280
+ return 'flex-end';
281
+ case 'left':
282
+ case 'top':
283
+ case 'start':
284
+ default:
285
+ return 'flex-start';
286
+ }
287
+ }
288
+ function getChangeBoundsDuration(transition) {
289
+ if (!transition)
290
+ return 0;
291
+ return flattenChangeTransition(transition).reduce((max, item) => {
292
+ const duration = Math.max(0, item.duration ?? 300);
293
+ const delay = Math.max(0, item.start_delay ?? 0);
294
+ return Math.max(max, duration + delay);
295
+ }, 0);
296
+ }
297
+ function createOverlayDiv(previousDiv) {
298
+ return {
299
+ ...previousDiv,
300
+ alignment_horizontal: 'left',
301
+ alignment_vertical: 'top',
302
+ width: { type: 'match_parent' },
303
+ height: { type: 'match_parent' },
304
+ margins: undefined,
305
+ transition_change: undefined,
306
+ };
307
+ }
308
+ function getChildFrame(div, container) {
309
+ const margins = div?.margins || {};
310
+ const leftMargin = numberOrZero(margins.left ?? margins.start);
311
+ const rightMargin = numberOrZero(margins.right ?? margins.end);
312
+ const topMargin = numberOrZero(margins.top);
313
+ const bottomMargin = numberOrZero(margins.bottom);
314
+ const availableWidth = Math.max(0, container.width - leftMargin - rightMargin);
315
+ const availableHeight = Math.max(0, container.height - topMargin - bottomMargin);
316
+ const width = resolveSize(div?.width, availableWidth);
317
+ const height = resolveSize(div?.height, availableHeight);
318
+ return {
319
+ left: resolvePosition(div?.alignment_horizontal, leftMargin, availableWidth, width),
320
+ top: resolvePosition(div?.alignment_vertical, topMargin, availableHeight, height),
321
+ width,
322
+ height,
323
+ };
324
+ }
325
+ function resolveSize(size, available) {
326
+ if (size?.type === 'fixed')
327
+ return Math.max(0, numberOrZero(size.value));
328
+ return available;
329
+ }
330
+ function resolvePosition(alignment, start, available, size) {
331
+ switch (alignment) {
332
+ case 'center':
333
+ return start + (available - size) / 2;
334
+ case 'right':
335
+ case 'bottom':
336
+ case 'end':
337
+ return start + available - size;
338
+ case 'left':
339
+ case 'top':
340
+ case 'start':
341
+ default:
342
+ return start;
343
+ }
344
+ }
345
+ function numberOrZero(value) {
346
+ return typeof value === 'number' && Number.isFinite(value) ? value : 0;
347
+ }
120
348
  //# sourceMappingURL=DivState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DivState.js","sourceRoot":"","sources":["../../../src/components/state/DivState.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DivState.js","sourceRoot":"","sources":["../../../src/components/state/DivState.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Background.d.ts","sourceRoot":"","sources":["../../../src/components/utilities/Background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAoB,MAAM,wBAAwB,CAAC;AAE7F,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAoFD,eAAO,MAAM,UAAU,GAAI,mBAAmB,eAAe,6BAyB5D,CAAC"}
1
+ {"version":3,"file":"Background.d.ts","sourceRoot":"","sources":["../../../src/components/utilities/Background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAoB,MAAM,wBAAwB,CAAC;AAG7F,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAoFD,eAAO,MAAM,UAAU,GAAI,mBAAmB,eAAe,6BAyB5D,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { StyleSheet, View } from 'react-native';
3
3
  import Svg, { Defs, RadialGradient, Stop, Rect } from 'react-native-svg';
4
+ import { correctColor } from '../../utils/correctColor';
4
5
  const RadialGradientLayer = ({ layer }) => {
5
6
  // Default to 50% 50% if not specified
6
7
  let cx = '50%';
@@ -26,10 +27,10 @@ const RadialGradientLayer = ({ layer }) => {
26
27
  // If color_map provided, use it
27
28
  let stops = [];
28
29
  if (layer.colors) {
29
- stops = layer.colors.map((color, index) => (<Stop key={index} offset={index / (layer.colors.length - 1)} stopColor={color} stopOpacity={1}/>));
30
+ stops = layer.colors.map((color, index) => (<Stop key={index} offset={index / (layer.colors.length - 1)} stopColor={correctColor(color)} stopOpacity={1}/>));
30
31
  }
31
32
  else if (layer.color_map) {
32
- stops = layer.color_map.map((point, index) => (<Stop key={index} offset={point.position} stopColor={point.color} stopOpacity={1}/>));
33
+ stops = layer.color_map.map((point, index) => (<Stop key={index} offset={point.position} stopColor={correctColor(point.color)} stopOpacity={1}/>));
33
34
  }
34
35
  // Radius
35
36
  // DivKit defaults: farthest_corner
@@ -59,7 +60,7 @@ export const Background = ({ layers, style }) => {
59
60
  return (<View style={[StyleSheet.absoluteFill, style, { zIndex: -1, overflow: 'hidden' }]} pointerEvents="none">
60
61
  {layers.map((layer, index) => {
61
62
  if (layer.type === 'solid') {
62
- return (<View key={index} style={[StyleSheet.absoluteFill, { backgroundColor: layer.color }]}/>);
63
+ return (<View key={index} style={[StyleSheet.absoluteFill, { backgroundColor: correctColor(layer.color) }]}/>);
63
64
  }
64
65
  if (layer.type === 'radial_gradient') {
65
66
  return (<View key={index} style={StyleSheet.absoluteFill}>