react-native-divkit 0.1.0-alpha.1

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 (322) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +340 -0
  3. package/dist/DivKit.d.ts +68 -0
  4. package/dist/DivKit.d.ts.map +1 -0
  5. package/dist/DivKit.js +400 -0
  6. package/dist/DivKit.js.map +1 -0
  7. package/dist/actions/array.d.ts +8 -0
  8. package/dist/actions/array.d.ts.map +1 -0
  9. package/dist/actions/array.js +139 -0
  10. package/dist/actions/array.js.map +1 -0
  11. package/dist/actions/copyToClipboard.d.ts +22 -0
  12. package/dist/actions/copyToClipboard.d.ts.map +1 -0
  13. package/dist/actions/copyToClipboard.js +63 -0
  14. package/dist/actions/copyToClipboard.js.map +1 -0
  15. package/dist/actions/dict.d.ts +6 -0
  16. package/dist/actions/dict.d.ts.map +1 -0
  17. package/dist/actions/dict.js +58 -0
  18. package/dist/actions/dict.js.map +1 -0
  19. package/dist/actions/index.d.ts +11 -0
  20. package/dist/actions/index.d.ts.map +1 -0
  21. package/dist/actions/index.js +11 -0
  22. package/dist/actions/index.js.map +1 -0
  23. package/dist/actions/updateStructure.d.ts +6 -0
  24. package/dist/actions/updateStructure.d.ts.map +1 -0
  25. package/dist/actions/updateStructure.js +116 -0
  26. package/dist/actions/updateStructure.js.map +1 -0
  27. package/dist/components/DivComponent.d.ts +29 -0
  28. package/dist/components/DivComponent.d.ts.map +1 -0
  29. package/dist/components/DivComponent.js +62 -0
  30. package/dist/components/DivComponent.js.map +1 -0
  31. package/dist/components/container/DivContainer.d.ts +26 -0
  32. package/dist/components/container/DivContainer.d.ts.map +1 -0
  33. package/dist/components/container/DivContainer.js +172 -0
  34. package/dist/components/container/DivContainer.js.map +1 -0
  35. package/dist/components/container/index.d.ts +3 -0
  36. package/dist/components/container/index.d.ts.map +1 -0
  37. package/dist/components/container/index.js +2 -0
  38. package/dist/components/container/index.js.map +1 -0
  39. package/dist/components/image/DivImage.d.ts +29 -0
  40. package/dist/components/image/DivImage.d.ts.map +1 -0
  41. package/dist/components/image/DivImage.js +122 -0
  42. package/dist/components/image/DivImage.js.map +1 -0
  43. package/dist/components/image/index.d.ts +3 -0
  44. package/dist/components/image/index.d.ts.map +1 -0
  45. package/dist/components/image/index.js +2 -0
  46. package/dist/components/image/index.js.map +1 -0
  47. package/dist/components/index.d.ts +14 -0
  48. package/dist/components/index.d.ts.map +1 -0
  49. package/dist/components/index.js +11 -0
  50. package/dist/components/index.js.map +1 -0
  51. package/dist/components/state/DivState.d.ts +26 -0
  52. package/dist/components/state/DivState.d.ts.map +1 -0
  53. package/dist/components/state/DivState.js +121 -0
  54. package/dist/components/state/DivState.js.map +1 -0
  55. package/dist/components/state/index.d.ts +3 -0
  56. package/dist/components/state/index.d.ts.map +1 -0
  57. package/dist/components/state/index.js +2 -0
  58. package/dist/components/state/index.js.map +1 -0
  59. package/dist/components/text/DivText.d.ts +28 -0
  60. package/dist/components/text/DivText.d.ts.map +1 -0
  61. package/dist/components/text/DivText.js +143 -0
  62. package/dist/components/text/DivText.js.map +1 -0
  63. package/dist/components/text/index.d.ts +3 -0
  64. package/dist/components/text/index.d.ts.map +1 -0
  65. package/dist/components/text/index.js +2 -0
  66. package/dist/components/text/index.js.map +1 -0
  67. package/dist/components/utilities/Outer.d.ts +17 -0
  68. package/dist/components/utilities/Outer.d.ts.map +1 -0
  69. package/dist/components/utilities/Outer.js +210 -0
  70. package/dist/components/utilities/Outer.js.map +1 -0
  71. package/dist/components/utilities/Unknown.d.ts +11 -0
  72. package/dist/components/utilities/Unknown.d.ts.map +1 -0
  73. package/dist/components/utilities/Unknown.js +50 -0
  74. package/dist/components/utilities/Unknown.js.map +1 -0
  75. package/dist/components/utilities/index.d.ts +5 -0
  76. package/dist/components/utilities/index.d.ts.map +1 -0
  77. package/dist/components/utilities/index.js +3 -0
  78. package/dist/components/utilities/index.js.map +1 -0
  79. package/dist/context/ActionContext.d.ts +25 -0
  80. package/dist/context/ActionContext.d.ts.map +1 -0
  81. package/dist/context/ActionContext.js +20 -0
  82. package/dist/context/ActionContext.js.map +1 -0
  83. package/dist/context/DivKitContext.d.ts +33 -0
  84. package/dist/context/DivKitContext.d.ts.map +1 -0
  85. package/dist/context/DivKitContext.js +14 -0
  86. package/dist/context/DivKitContext.js.map +1 -0
  87. package/dist/context/EnabledContext.d.ts +31 -0
  88. package/dist/context/EnabledContext.d.ts.map +1 -0
  89. package/dist/context/EnabledContext.js +31 -0
  90. package/dist/context/EnabledContext.js.map +1 -0
  91. package/dist/context/StateContext.d.ts +57 -0
  92. package/dist/context/StateContext.d.ts.map +1 -0
  93. package/dist/context/StateContext.js +20 -0
  94. package/dist/context/StateContext.js.map +1 -0
  95. package/dist/context/index.d.ts +9 -0
  96. package/dist/context/index.d.ts.map +1 -0
  97. package/dist/context/index.js +9 -0
  98. package/dist/context/index.js.map +1 -0
  99. package/dist/expressions/bigint.d.ts +8 -0
  100. package/dist/expressions/bigint.d.ts.map +1 -0
  101. package/dist/expressions/bigint.js +31 -0
  102. package/dist/expressions/bigint.js.map +1 -0
  103. package/dist/expressions/const.d.ts +15 -0
  104. package/dist/expressions/const.d.ts.map +1 -0
  105. package/dist/expressions/const.js +15 -0
  106. package/dist/expressions/const.js.map +1 -0
  107. package/dist/expressions/eval.d.ts +77 -0
  108. package/dist/expressions/eval.d.ts.map +1 -0
  109. package/dist/expressions/eval.js +459 -0
  110. package/dist/expressions/eval.js.map +1 -0
  111. package/dist/expressions/expressions.d.ts +7 -0
  112. package/dist/expressions/expressions.d.ts.map +1 -0
  113. package/dist/expressions/expressions.js +3191 -0
  114. package/dist/expressions/expressions.js.map +1 -0
  115. package/dist/expressions/funcs/array.d.ts +2 -0
  116. package/dist/expressions/funcs/array.d.ts.map +1 -0
  117. package/dist/expressions/funcs/array.js +381 -0
  118. package/dist/expressions/funcs/array.js.map +1 -0
  119. package/dist/expressions/funcs/colors.d.ts +2 -0
  120. package/dist/expressions/funcs/colors.d.ts.map +1 -0
  121. package/dist/expressions/funcs/colors.js +75 -0
  122. package/dist/expressions/funcs/colors.js.map +1 -0
  123. package/dist/expressions/funcs/customFuncs.d.ts +8 -0
  124. package/dist/expressions/funcs/customFuncs.d.ts.map +1 -0
  125. package/dist/expressions/funcs/customFuncs.js +114 -0
  126. package/dist/expressions/funcs/customFuncs.js.map +1 -0
  127. package/dist/expressions/funcs/datetime.d.ts +2 -0
  128. package/dist/expressions/funcs/datetime.d.ts.map +1 -0
  129. package/dist/expressions/funcs/datetime.js +182 -0
  130. package/dist/expressions/funcs/datetime.js.map +1 -0
  131. package/dist/expressions/funcs/dict.d.ts +2 -0
  132. package/dist/expressions/funcs/dict.d.ts.map +1 -0
  133. package/dist/expressions/funcs/dict.js +170 -0
  134. package/dist/expressions/funcs/dict.js.map +1 -0
  135. package/dist/expressions/funcs/funcs.d.ts +80 -0
  136. package/dist/expressions/funcs/funcs.d.ts.map +1 -0
  137. package/dist/expressions/funcs/funcs.js +146 -0
  138. package/dist/expressions/funcs/funcs.js.map +1 -0
  139. package/dist/expressions/funcs/index.d.ts +2 -0
  140. package/dist/expressions/funcs/index.d.ts.map +1 -0
  141. package/dist/expressions/funcs/index.js +23 -0
  142. package/dist/expressions/funcs/index.js.map +1 -0
  143. package/dist/expressions/funcs/interval.d.ts +2 -0
  144. package/dist/expressions/funcs/interval.d.ts.map +1 -0
  145. package/dist/expressions/funcs/interval.js +61 -0
  146. package/dist/expressions/funcs/interval.js.map +1 -0
  147. package/dist/expressions/funcs/math.d.ts +2 -0
  148. package/dist/expressions/funcs/math.d.ts.map +1 -0
  149. package/dist/expressions/funcs/math.js +324 -0
  150. package/dist/expressions/funcs/math.js.map +1 -0
  151. package/dist/expressions/funcs/std.d.ts +2 -0
  152. package/dist/expressions/funcs/std.d.ts.map +1 -0
  153. package/dist/expressions/funcs/std.js +293 -0
  154. package/dist/expressions/funcs/std.js.map +1 -0
  155. package/dist/expressions/funcs/stored.d.ts +4 -0
  156. package/dist/expressions/funcs/stored.d.ts.map +1 -0
  157. package/dist/expressions/funcs/stored.js +62 -0
  158. package/dist/expressions/funcs/stored.js.map +1 -0
  159. package/dist/expressions/funcs/strings.d.ts +2 -0
  160. package/dist/expressions/funcs/strings.d.ts.map +1 -0
  161. package/dist/expressions/funcs/strings.js +158 -0
  162. package/dist/expressions/funcs/strings.js.map +1 -0
  163. package/dist/expressions/funcs/trigonometry.d.ts +2 -0
  164. package/dist/expressions/funcs/trigonometry.d.ts.map +1 -0
  165. package/dist/expressions/funcs/trigonometry.js +92 -0
  166. package/dist/expressions/funcs/trigonometry.js.map +1 -0
  167. package/dist/expressions/json.d.ts +18 -0
  168. package/dist/expressions/json.d.ts.map +1 -0
  169. package/dist/expressions/json.js +271 -0
  170. package/dist/expressions/json.js.map +1 -0
  171. package/dist/expressions/parserCache.d.ts +4 -0
  172. package/dist/expressions/parserCache.d.ts.map +1 -0
  173. package/dist/expressions/parserCache.js +23 -0
  174. package/dist/expressions/parserCache.js.map +1 -0
  175. package/dist/expressions/simpleUnescapeString.d.ts +2 -0
  176. package/dist/expressions/simpleUnescapeString.d.ts.map +1 -0
  177. package/dist/expressions/simpleUnescapeString.js +61 -0
  178. package/dist/expressions/simpleUnescapeString.js.map +1 -0
  179. package/dist/expressions/utils.d.ts +29 -0
  180. package/dist/expressions/utils.d.ts.map +1 -0
  181. package/dist/expressions/utils.js +236 -0
  182. package/dist/expressions/utils.js.map +1 -0
  183. package/dist/expressions/variable.d.ts +82 -0
  184. package/dist/expressions/variable.d.ts.map +1 -0
  185. package/dist/expressions/variable.js +337 -0
  186. package/dist/expressions/variable.js.map +1 -0
  187. package/dist/expressions/walk.d.ts +7 -0
  188. package/dist/expressions/walk.d.ts.map +1 -0
  189. package/dist/expressions/walk.js +39 -0
  190. package/dist/expressions/walk.js.map +1 -0
  191. package/dist/hooks/index.d.ts +8 -0
  192. package/dist/hooks/index.d.ts.map +1 -0
  193. package/dist/hooks/index.js +11 -0
  194. package/dist/hooks/index.js.map +1 -0
  195. package/dist/hooks/useAction.d.ts +102 -0
  196. package/dist/hooks/useAction.d.ts.map +1 -0
  197. package/dist/hooks/useAction.js +116 -0
  198. package/dist/hooks/useAction.js.map +1 -0
  199. package/dist/hooks/useDerivedFromVars.d.ts +72 -0
  200. package/dist/hooks/useDerivedFromVars.d.ts.map +1 -0
  201. package/dist/hooks/useDerivedFromVars.js +100 -0
  202. package/dist/hooks/useDerivedFromVars.js.map +1 -0
  203. package/dist/hooks/useVariable.d.ts +86 -0
  204. package/dist/hooks/useVariable.d.ts.map +1 -0
  205. package/dist/hooks/useVariable.js +130 -0
  206. package/dist/hooks/useVariable.js.map +1 -0
  207. package/dist/index.d.ts +30 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +28 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/stores/createObservable.d.ts +38 -0
  212. package/dist/stores/createObservable.d.ts.map +1 -0
  213. package/dist/stores/createObservable.js +49 -0
  214. package/dist/stores/createObservable.js.map +1 -0
  215. package/dist/utils/applyTemplate.d.ts +8 -0
  216. package/dist/utils/applyTemplate.d.ts.map +1 -0
  217. package/dist/utils/applyTemplate.js +94 -0
  218. package/dist/utils/applyTemplate.js.map +1 -0
  219. package/dist/utils/correctColor.d.ts +18 -0
  220. package/dist/utils/correctColor.d.ts.map +1 -0
  221. package/dist/utils/correctColor.js +79 -0
  222. package/dist/utils/correctColor.js.map +1 -0
  223. package/dist/utils/escapeRegExp.d.ts +2 -0
  224. package/dist/utils/escapeRegExp.d.ts.map +1 -0
  225. package/dist/utils/escapeRegExp.js +4 -0
  226. package/dist/utils/escapeRegExp.js.map +1 -0
  227. package/dist/utils/formatDate.d.ts +6 -0
  228. package/dist/utils/formatDate.d.ts.map +1 -0
  229. package/dist/utils/formatDate.js +325 -0
  230. package/dist/utils/formatDate.js.map +1 -0
  231. package/dist/utils/padLeft.d.ts +2 -0
  232. package/dist/utils/padLeft.d.ts.map +1 -0
  233. package/dist/utils/padLeft.js +7 -0
  234. package/dist/utils/padLeft.js.map +1 -0
  235. package/dist/utils/uniq.d.ts +2 -0
  236. package/dist/utils/uniq.d.ts.map +1 -0
  237. package/dist/utils/uniq.js +4 -0
  238. package/dist/utils/uniq.js.map +1 -0
  239. package/dist/utils/wrapError.d.ts +10 -0
  240. package/dist/utils/wrapError.d.ts.map +1 -0
  241. package/dist/utils/wrapError.js +9 -0
  242. package/dist/utils/wrapError.js.map +1 -0
  243. package/package.json +58 -0
  244. package/src/DivKit.tsx +542 -0
  245. package/src/actions/array.ts +170 -0
  246. package/src/actions/copyToClipboard.ts +82 -0
  247. package/src/actions/dict.ts +71 -0
  248. package/src/actions/index.ts +11 -0
  249. package/src/actions/updateStructure.ts +134 -0
  250. package/src/components/DivComponent.tsx +75 -0
  251. package/src/components/README.md +230 -0
  252. package/src/components/container/DivContainer.tsx +222 -0
  253. package/src/components/container/index.ts +2 -0
  254. package/src/components/image/DivImage.tsx +172 -0
  255. package/src/components/image/index.ts +2 -0
  256. package/src/components/index.ts +20 -0
  257. package/src/components/state/DivState.tsx +146 -0
  258. package/src/components/state/index.ts +2 -0
  259. package/src/components/text/DivText.tsx +186 -0
  260. package/src/components/text/index.ts +2 -0
  261. package/src/components/utilities/Outer.tsx +239 -0
  262. package/src/components/utilities/README.md +175 -0
  263. package/src/components/utilities/Unknown.tsx +60 -0
  264. package/src/components/utilities/index.ts +4 -0
  265. package/src/context/ActionContext.tsx +37 -0
  266. package/src/context/DivKitContext.tsx +54 -0
  267. package/src/context/EnabledContext.tsx +50 -0
  268. package/src/context/StateContext.tsx +75 -0
  269. package/src/context/index.ts +33 -0
  270. package/src/expressions/ast.d.ts +101 -0
  271. package/src/expressions/bigint.ts +38 -0
  272. package/src/expressions/const.ts +16 -0
  273. package/src/expressions/eval.ts +669 -0
  274. package/src/expressions/expressions.peggy +235 -0
  275. package/src/expressions/expressions.ts +2854 -0
  276. package/src/expressions/funcs/array.ts +412 -0
  277. package/src/expressions/funcs/colors.ts +100 -0
  278. package/src/expressions/funcs/customFuncs.ts +139 -0
  279. package/src/expressions/funcs/datetime.ts +232 -0
  280. package/src/expressions/funcs/dict.ts +207 -0
  281. package/src/expressions/funcs/funcs.ts +323 -0
  282. package/src/expressions/funcs/index.ts +23 -0
  283. package/src/expressions/funcs/interval.ts +76 -0
  284. package/src/expressions/funcs/math.ts +395 -0
  285. package/src/expressions/funcs/std.ts +392 -0
  286. package/src/expressions/funcs/stored.ts +62 -0
  287. package/src/expressions/funcs/strings.ts +200 -0
  288. package/src/expressions/funcs/trigonometry.ts +108 -0
  289. package/src/expressions/json.ts +367 -0
  290. package/src/expressions/parserCache.ts +32 -0
  291. package/src/expressions/simpleUnescapeString.ts +57 -0
  292. package/src/expressions/utils.ts +271 -0
  293. package/src/expressions/variable.ts +429 -0
  294. package/src/expressions/walk.ts +43 -0
  295. package/src/hooks/README.md +265 -0
  296. package/src/hooks/index.ts +28 -0
  297. package/src/hooks/useAction.ts +152 -0
  298. package/src/hooks/useDerivedFromVars.ts +187 -0
  299. package/src/hooks/useVariable.ts +157 -0
  300. package/src/index.ts +97 -0
  301. package/src/stores/createObservable.ts +64 -0
  302. package/src/types/alignment.d.ts +13 -0
  303. package/src/types/background.d.ts +71 -0
  304. package/src/types/base.d.ts +224 -0
  305. package/src/types/border.d.ts +46 -0
  306. package/src/types/componentContext.d.ts +98 -0
  307. package/src/types/container.d.ts +40 -0
  308. package/src/types/edgeInserts.d.ts +9 -0
  309. package/src/types/general.d.ts +3 -0
  310. package/src/types/image.d.ts +33 -0
  311. package/src/types/imageScale.d.ts +1 -0
  312. package/src/types/layoutParams.d.ts +27 -0
  313. package/src/types/sizes.d.ts +37 -0
  314. package/src/types/state.d.ts +19 -0
  315. package/src/types/text.d.ts +126 -0
  316. package/src/utils/applyTemplate.ts +145 -0
  317. package/src/utils/correctColor.ts +102 -0
  318. package/src/utils/escapeRegExp.ts +3 -0
  319. package/src/utils/formatDate.ts +385 -0
  320. package/src/utils/padLeft.ts +6 -0
  321. package/src/utils/uniq.ts +3 -0
  322. package/src/utils/wrapError.ts +21 -0
@@ -0,0 +1,122 @@
1
+ import React, { useMemo, useState } from 'react';
2
+ import { Image, View, ActivityIndicator } from 'react-native';
3
+ import { Outer } from '../utilities/Outer';
4
+ import { useDerivedFromVarsSimple } from '../../hooks/useDerivedFromVars';
5
+ import { wrapError } from '../../utils/wrapError';
6
+ /**
7
+ * DivImage component - renders images from network URLs
8
+ * MVP implementation with basic features:
9
+ * - Network image loading
10
+ * - Scaling modes (fill, fit, stretch, no_scale)
11
+ * - Placeholder color while loading
12
+ * - Content alignment (horizontal & vertical)
13
+ * - Aspect ratio
14
+ *
15
+ * Deferred for post-MVP:
16
+ * - GIF support (requires native module or library)
17
+ * - Image preview (blur-up technique)
18
+ * - Tint color and tint modes
19
+ * - Image filters (blur, etc.)
20
+ * - Appearance animations
21
+ * - High priority preview
22
+ * - Preload required flag
23
+ * - react-native-fast-image integration
24
+ *
25
+ * Based on Web Image.svelte
26
+ */
27
+ export function DivImage({ componentContext }) {
28
+ const { json, variables } = componentContext;
29
+ const [loading, setLoading] = useState(true);
30
+ const [error, setError] = useState(false);
31
+ // Reactive properties
32
+ const imageUrl = useDerivedFromVarsSimple(json.image_url || json.gif_url, variables || new Map());
33
+ const scale = useDerivedFromVarsSimple(json.scale || 'fill', variables || new Map());
34
+ const placeholderColor = useDerivedFromVarsSimple(json.placeholder_color, variables || new Map());
35
+ // Map DivKit scale to React Native resizeMode
36
+ const resizeMode = useMemo(() => {
37
+ switch (scale) {
38
+ case 'fill':
39
+ return 'cover'; // Fills the area, may crop
40
+ case 'fit':
41
+ return 'contain'; // Fits within area, no crop
42
+ case 'stretch':
43
+ return 'stretch'; // Stretches to fill, may distort
44
+ case 'no_scale':
45
+ return 'center'; // Original size, centered
46
+ default:
47
+ return 'cover';
48
+ }
49
+ }, [scale]);
50
+ // Container style (for placeholder and loading)
51
+ const containerStyle = useMemo(() => {
52
+ const style = {
53
+ overflow: 'hidden'
54
+ };
55
+ // Placeholder background
56
+ if (placeholderColor && loading) {
57
+ style.backgroundColor = placeholderColor;
58
+ }
59
+ // Aspect ratio
60
+ if (json.aspect?.ratio) {
61
+ style.aspectRatio = json.aspect.ratio;
62
+ }
63
+ return style;
64
+ }, [placeholderColor, loading, json.aspect]);
65
+ // Image style
66
+ const imageStyle = useMemo(() => {
67
+ const style = {
68
+ width: '100%',
69
+ height: '100%'
70
+ };
71
+ // Aspect ratio
72
+ if (json.aspect?.ratio) {
73
+ style.aspectRatio = json.aspect.ratio;
74
+ }
75
+ return style;
76
+ }, [json.aspect]);
77
+ // Handle image load events
78
+ const handleLoadStart = () => {
79
+ setLoading(true);
80
+ setError(false);
81
+ };
82
+ const handleLoadEnd = () => {
83
+ setLoading(false);
84
+ };
85
+ const handleError = () => {
86
+ setLoading(false);
87
+ setError(true);
88
+ componentContext.logError(wrapError(new Error(`Failed to load image: ${imageUrl}`)));
89
+ };
90
+ // Render error state
91
+ if (error) {
92
+ return (<Outer componentContext={componentContext}>
93
+ <View style={[containerStyle, { backgroundColor: placeholderColor || '#EEEEEE' }]}>
94
+ {/* Error placeholder - could be customized */}
95
+ </View>
96
+ </Outer>);
97
+ }
98
+ // Render loading state
99
+ if (!imageUrl) {
100
+ return (<Outer componentContext={componentContext}>
101
+ <View style={[containerStyle, { backgroundColor: placeholderColor || '#EEEEEE' }]}/>
102
+ </Outer>);
103
+ }
104
+ return (<Outer componentContext={componentContext}>
105
+ <View style={containerStyle}>
106
+ <Image source={{ uri: imageUrl }} style={imageStyle} resizeMode={resizeMode} onLoadStart={handleLoadStart} onLoadEnd={handleLoadEnd} onError={handleError}/>
107
+ {loading && (<View style={{
108
+ position: 'absolute',
109
+ top: 0,
110
+ left: 0,
111
+ right: 0,
112
+ bottom: 0,
113
+ justifyContent: 'center',
114
+ alignItems: 'center',
115
+ backgroundColor: placeholderColor || 'transparent'
116
+ }}>
117
+ <ActivityIndicator size="small" color="#999999"/>
118
+ </View>)}
119
+ </View>
120
+ </Outer>);
121
+ }
122
+ //# sourceMappingURL=DivImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DivImage.js","sourceRoot":"","sources":["../../../src/components/image/DivImage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAyB,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIrF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMlD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,gBAAgB,EAAiB;IACxD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1C,sBAAsB;IACtB,MAAM,QAAQ,GAAG,wBAAwB,CACrC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAC9B,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,MAAM,KAAK,GAAG,wBAAwB,CAClC,IAAI,CAAC,KAAK,IAAI,MAAM,EACpB,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,MAAM,gBAAgB,GAAG,wBAAwB,CAC7C,IAAI,CAAC,iBAAiB,EACtB,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,8CAA8C;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAA6B,EAAE;QACtD,QAAQ,KAAK,EAAE,CAAC;YACZ,KAAK,MAAM;gBACP,OAAO,OAAO,CAAC,CAAC,2BAA2B;YAC/C,KAAK,KAAK;gBACN,OAAO,SAAS,CAAC,CAAC,4BAA4B;YAClD,KAAK,SAAS;gBACV,OAAO,SAAS,CAAC,CAAC,iCAAiC;YACvD,KAAK,UAAU;gBACX,OAAO,QAAQ,CAAC,CAAC,0BAA0B;YAC/C;gBACI,OAAO,OAAO,CAAC;QACvB,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,gDAAgD;IAChD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAc,EAAE;QAC3C,MAAM,KAAK,GAAc;YACrB,QAAQ,EAAE,QAAQ;SACrB,CAAC;QAEF,yBAAyB;QACzB,IAAI,gBAAgB,IAAI,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC;QAC7C,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;YACrB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7C,cAAc;IACd,MAAM,UAAU,GAAG,OAAO,CAAC,GAAe,EAAE;QACxC,MAAM,KAAK,GAAe;YACtB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;SACjB,CAAC;QAEF,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;YACrB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAElB,2BAA2B;IAC3B,MAAM,eAAe,GAAG,GAAG,EAAE;QACzB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,UAAU,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACrB,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC;IAEF,qBAAqB;IACrB,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CACH,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACtC;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,eAAe,EAAE,gBAAgB,IAAI,SAAS,EAAE,CAAC,CAAC,CAC9E;oBAAA,CAAC,6CAA6C,CAClD;gBAAA,EAAE,IAAI,CACV;YAAA,EAAE,KAAK,CAAC,CACX,CAAC;IACN,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,CACH,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACtC;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,eAAe,EAAE,gBAAgB,IAAI,SAAS,EAAE,CAAC,CAAC,EACtF;YAAA,EAAE,KAAK,CAAC,CACX,CAAC;IACN,CAAC;IAED,OAAO,CACH,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACtC;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CACxB;gBAAA,CAAC,KAAK,CACF,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAC1B,KAAK,CAAC,CAAC,UAAU,CAAC,CAClB,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,WAAW,CAAC,CAAC,eAAe,CAAC,CAC7B,SAAS,CAAC,CAAC,aAAa,CAAC,CACzB,OAAO,CAAC,CAAC,WAAW,CAAC,EAEzB;gBAAA,CAAC,OAAO,IAAI,CACR,CAAC,IAAI,CACD,KAAK,CAAC,CAAC;gBACH,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,QAAQ;gBACpB,eAAe,EAAE,gBAAgB,IAAI,aAAa;aACrD,CAAC,CAEF;wBAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EACnD;oBAAA,EAAE,IAAI,CAAC,CACV,CACL;YAAA,EAAE,IAAI,CACV;QAAA,EAAE,KAAK,CAAC,CACX,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DivImage } from './DivImage';
2
+ export type { DivImageProps } from './DivImage';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DivImage } from './DivImage';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { DivComponent } from './DivComponent';
2
+ export type { DivComponentProps } from './DivComponent';
3
+ export { DivText } from './text';
4
+ export { DivContainer } from './container';
5
+ export { DivImage } from './image';
6
+ export { DivState } from './state';
7
+ export { Outer } from './utilities/Outer';
8
+ export { Unknown } from './utilities/Unknown';
9
+ export type { DivTextProps } from './text';
10
+ export type { DivContainerProps } from './container';
11
+ export type { DivImageProps } from './image';
12
+ export type { DivStateProps } from './state';
13
+ export type { OuterProps } from './utilities/Outer';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Component router
2
+ export { DivComponent } from './DivComponent';
3
+ // Individual components
4
+ export { DivText } from './text';
5
+ export { DivContainer } from './container';
6
+ export { DivImage } from './image';
7
+ export { DivState } from './state';
8
+ // Utilities
9
+ export { Outer } from './utilities/Outer';
10
+ export { Unknown } from './utilities/Unknown';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,wBAAwB;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,YAAY;AACZ,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import type { ComponentContext } from '../../types/componentContext';
3
+ import type { DivStateData } from '../../types/state';
4
+ export interface DivStateProps {
5
+ componentContext: ComponentContext<DivStateData>;
6
+ }
7
+ /**
8
+ * DivState component - renders different content based on state
9
+ * MVP implementation with basic features:
10
+ * - State selection by state_id
11
+ * - 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
22
+ *
23
+ * Based on Web State.svelte
24
+ */
25
+ export declare function DivState({ componentContext }: DivStateProps): React.JSX.Element;
26
+ //# sourceMappingURL=DivState.d.ts.map
@@ -0,0 +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,qBAkH3D"}
@@ -0,0 +1,121 @@
1
+ import React, { useState, useEffect, useMemo } from 'react';
2
+ import { View } from 'react-native';
3
+ import { Outer } from '../utilities/Outer';
4
+ import { useStateContext } from '../../context/StateContext';
5
+ import { useDivKitContext } from '../../context/DivKitContext';
6
+ import { wrapError } from '../../utils/wrapError';
7
+ /**
8
+ * DivState component - renders different content based on state
9
+ * MVP implementation with basic features:
10
+ * - State selection by state_id
11
+ * - 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
22
+ *
23
+ * Based on Web State.svelte
24
+ */
25
+ export function DivState({ componentContext }) {
26
+ const { json } = componentContext;
27
+ const { getVariable } = useDivKitContext();
28
+ const { registerState } = useStateContext();
29
+ // Get state ID for registration
30
+ const stateId = json.div_id || json.id;
31
+ // Find default state
32
+ const defaultStateId = useMemo(() => {
33
+ if (json.default_state_id) {
34
+ return json.default_state_id;
35
+ }
36
+ // If no default, use first state
37
+ if (json.states && json.states.length > 0) {
38
+ return json.states[0].state_id;
39
+ }
40
+ return undefined;
41
+ }, [json.default_state_id, json.states]);
42
+ // State management
43
+ const [currentStateId, setCurrentStateId] = useState(defaultStateId);
44
+ // Handle state_id_variable (two-way binding)
45
+ const stateVariableName = json.state_id_variable;
46
+ const stateVariable = stateVariableName ? getVariable(stateVariableName) : undefined;
47
+ // Sync with state variable
48
+ useEffect(() => {
49
+ if (stateVariable) {
50
+ // Subscribe to variable changes
51
+ const unsubscribe = stateVariable.subscribe((value) => {
52
+ if (typeof value === 'string' && value !== currentStateId) {
53
+ setCurrentStateId(value);
54
+ }
55
+ });
56
+ return unsubscribe;
57
+ }
58
+ return undefined;
59
+ }, [stateVariable, currentStateId]);
60
+ // Update variable when state changes
61
+ useEffect(() => {
62
+ if (stateVariable && currentStateId) {
63
+ const currentValue = stateVariable.getValue();
64
+ if (currentValue !== currentStateId) {
65
+ stateVariable.setValue(currentStateId);
66
+ }
67
+ }
68
+ }, [stateVariable, currentStateId]);
69
+ // Register state in context for set_state action
70
+ useEffect(() => {
71
+ if (stateId) {
72
+ const unregister = registerState(stateId, async (newStateId) => {
73
+ setCurrentStateId(newStateId);
74
+ return undefined;
75
+ });
76
+ return unregister;
77
+ }
78
+ return undefined;
79
+ }, [stateId, registerState]);
80
+ // Validate states
81
+ useEffect(() => {
82
+ if (!json.states || json.states.length === 0) {
83
+ componentContext.logError(wrapError(new Error('Empty "states" prop for div "state"')));
84
+ }
85
+ if (!stateId) {
86
+ componentContext.logError(wrapError(new Error('Missing "id" prop for div "state"')));
87
+ }
88
+ }, [json.states, stateId, componentContext]);
89
+ // Find current state
90
+ const currentState = useMemo(() => {
91
+ if (!json.states)
92
+ return undefined;
93
+ const found = json.states.find(s => s.state_id === currentStateId);
94
+ if (!found || !found.state_id)
95
+ return undefined;
96
+ return found;
97
+ }, [json.states, currentStateId]);
98
+ // Create child context for current state
99
+ const childContext = useMemo(() => {
100
+ if (!currentState?.div)
101
+ return undefined;
102
+ return componentContext.produceChildContext(currentState.div, {
103
+ path: currentStateId,
104
+ });
105
+ }, [currentState, currentStateId, componentContext]);
106
+ // Render current state
107
+ const renderContent = () => {
108
+ if (!currentState?.div || !childContext) {
109
+ return null;
110
+ }
111
+ // Import DivComponent dynamically to avoid circular dependency
112
+ const DivComponent = require('../DivComponent').DivComponent;
113
+ return (<DivComponent componentContext={childContext}/>);
114
+ };
115
+ return (<Outer componentContext={componentContext}>
116
+ <View>
117
+ {renderContent()}
118
+ </View>
119
+ </Outer>);
120
+ }
121
+ //# sourceMappingURL=DivState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DivState.js","sourceRoot":"","sources":["../../../src/components/state/DivState.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { DivState } from './DivState';
2
+ export type { DivStateProps } from './DivState';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DivState } from './DivState';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import type { ComponentContext } from '../../types/componentContext';
3
+ import type { DivTextData } from '../../types/text';
4
+ export interface DivTextProps {
5
+ componentContext: ComponentContext<DivTextData>;
6
+ }
7
+ /**
8
+ * DivText component - renders text with styling
9
+ * MVP implementation with basic features:
10
+ * - Text rendering with variable substitution
11
+ * - Font styling (size, weight, color, family)
12
+ * - Text alignment (horizontal & vertical)
13
+ * - Max lines with ellipsize
14
+ * - Line height, letter spacing
15
+ * - Text decorations (underline, strikethrough)
16
+ *
17
+ * Deferred for post-MVP:
18
+ * - Text ranges (nested styling)
19
+ * - Text images
20
+ * - Text gradients
21
+ * - Text shadows
22
+ * - Auto ellipsize
23
+ * - Selectable text with custom actions
24
+ *
25
+ * Based on Web Text.svelte
26
+ */
27
+ export declare function DivText({ componentContext }: DivTextProps): React.JSX.Element;
28
+ //# sourceMappingURL=DivText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DivText.d.ts","sourceRoot":"","sources":["../../../src/components/text/DivText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAC;AAK1E,MAAM,WAAW,YAAY;IACzB,gBAAgB,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,EAAE,gBAAgB,EAAE,EAAE,YAAY,qBAyJzD"}
@@ -0,0 +1,143 @@
1
+ import React, { useMemo } from 'react';
2
+ import { Text } from 'react-native';
3
+ import { Outer } from '../utilities/Outer';
4
+ import { useDerivedFromVarsSimple } from '../../hooks/useDerivedFromVars';
5
+ import { useDivKitContext } from '../../context/DivKitContext';
6
+ /**
7
+ * DivText component - renders text with styling
8
+ * MVP implementation with basic features:
9
+ * - Text rendering with variable substitution
10
+ * - Font styling (size, weight, color, family)
11
+ * - Text alignment (horizontal & vertical)
12
+ * - Max lines with ellipsize
13
+ * - Line height, letter spacing
14
+ * - Text decorations (underline, strikethrough)
15
+ *
16
+ * Deferred for post-MVP:
17
+ * - Text ranges (nested styling)
18
+ * - Text images
19
+ * - Text gradients
20
+ * - Text shadows
21
+ * - Auto ellipsize
22
+ * - Selectable text with custom actions
23
+ *
24
+ * Based on Web Text.svelte
25
+ */
26
+ export function DivText({ componentContext }) {
27
+ const { direction } = useDivKitContext();
28
+ const { json, variables } = componentContext;
29
+ // Reactive properties - use hooks for properties that may contain variables
30
+ const text = useDerivedFromVarsSimple(json.text || '', variables || new Map());
31
+ const fontSize = useDerivedFromVarsSimple(json.font_size || 12, variables || new Map());
32
+ const textColor = useDerivedFromVarsSimple(json.text_color || '#000000', variables || new Map());
33
+ const textAlignmentHorizontal = useDerivedFromVarsSimple(json.text_alignment_horizontal || 'start', variables || new Map());
34
+ const maxLines = useDerivedFromVarsSimple(json.max_lines, variables || new Map());
35
+ // Build text style
36
+ const textStyle = useMemo(() => {
37
+ const style = {};
38
+ // Font size
39
+ if (fontSize) {
40
+ style.fontSize = fontSize;
41
+ }
42
+ // Text color
43
+ if (textColor) {
44
+ style.color = textColor;
45
+ }
46
+ // Font weight
47
+ if (json.font_weight) {
48
+ const weightMap = {
49
+ 'light': '300',
50
+ 'regular': '400',
51
+ 'medium': '500',
52
+ 'bold': '700'
53
+ };
54
+ style.fontWeight = weightMap[json.font_weight] || '400';
55
+ }
56
+ else if (json.font_weight_value) {
57
+ // Custom weight value (100-900)
58
+ const weight = Math.max(100, Math.min(900, json.font_weight_value));
59
+ style.fontWeight = String(weight);
60
+ }
61
+ // Font family
62
+ if (json.font_family) {
63
+ style.fontFamily = json.font_family;
64
+ }
65
+ // Line height
66
+ if (json.line_height && fontSize) {
67
+ // DivKit line_height is in pixels, React Native expects ratio or pixels
68
+ // Convert to ratio: line_height / font_size
69
+ style.lineHeight = json.line_height;
70
+ }
71
+ // Letter spacing
72
+ if (json.letter_spacing !== undefined) {
73
+ style.letterSpacing = json.letter_spacing;
74
+ }
75
+ // Text alignment
76
+ const alignValue = textAlignmentHorizontal;
77
+ if (alignValue === 'start') {
78
+ style.textAlign = direction === 'rtl' ? 'right' : 'left';
79
+ }
80
+ else if (alignValue === 'end') {
81
+ style.textAlign = direction === 'rtl' ? 'left' : 'right';
82
+ }
83
+ else if (alignValue === 'center') {
84
+ style.textAlign = 'center';
85
+ }
86
+ else if (alignValue === 'left' || alignValue === 'right') {
87
+ style.textAlign = alignValue;
88
+ }
89
+ // Text decoration - underline
90
+ if (json.underline === 'single') {
91
+ style.textDecorationLine = 'underline';
92
+ }
93
+ // Text decoration - strike (strikethrough)
94
+ if (json.strike === 'single') {
95
+ if (style.textDecorationLine === 'underline') {
96
+ style.textDecorationLine = 'underline line-through';
97
+ }
98
+ else {
99
+ style.textDecorationLine = 'line-through';
100
+ }
101
+ }
102
+ // Font feature settings (advanced typography)
103
+ if (json.font_feature_settings) {
104
+ // React Native supports fontVariant for some features
105
+ // For full support, this may require native modules
106
+ // MVP: basic support
107
+ style.fontVariant = json.font_feature_settings.split(',').map(s => s.trim());
108
+ }
109
+ return style;
110
+ }, [
111
+ fontSize,
112
+ textColor,
113
+ textAlignmentHorizontal,
114
+ json.font_weight,
115
+ json.font_weight_value,
116
+ json.font_family,
117
+ json.line_height,
118
+ json.letter_spacing,
119
+ json.underline,
120
+ json.strike,
121
+ json.font_feature_settings,
122
+ direction
123
+ ]);
124
+ // Determine numberOfLines prop
125
+ const numberOfLines = maxLines && maxLines > 0 ? maxLines : undefined;
126
+ // Ellipsize mode
127
+ const ellipsizeMode = useMemo(() => {
128
+ const truncate = json.truncate;
129
+ if (truncate === 'end' || numberOfLines !== undefined) {
130
+ return 'tail';
131
+ }
132
+ return undefined;
133
+ }, [json.truncate, numberOfLines]);
134
+ // Vertical alignment is handled by Outer component via alignment props
135
+ // For text, we primarily care about horizontal alignment which is in textStyle
136
+ return (<Outer componentContext={componentContext}>
137
+ <Text style={textStyle} numberOfLines={numberOfLines} ellipsizeMode={ellipsizeMode} allowFontScaling={false} // DivKit has fixed sizes
138
+ >
139
+ {text}
140
+ </Text>
141
+ </Outer>);
142
+ }
143
+ //# sourceMappingURL=DivText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DivText.js","sourceRoot":"","sources":["../../../src/components/text/DivText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAM/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,gBAAgB,EAAgB;IACtD,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC;IAE7C,4EAA4E;IAC5E,MAAM,IAAI,GAAG,wBAAwB,CACjC,IAAI,CAAC,IAAI,IAAI,EAAE,EACf,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,MAAM,QAAQ,GAAG,wBAAwB,CACrC,IAAI,CAAC,SAAS,IAAI,EAAE,EACpB,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,MAAM,SAAS,GAAG,wBAAwB,CACtC,IAAI,CAAC,UAAU,IAAI,SAAS,EAC5B,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,MAAM,uBAAuB,GAAG,wBAAwB,CACpD,IAAI,CAAC,yBAAyB,IAAI,OAAO,EACzC,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,MAAM,QAAQ,GAAG,wBAAwB,CACrC,IAAI,CAAC,SAAS,EACd,SAAS,IAAI,IAAI,GAAG,EAAE,CACzB,CAAC;IAEF,mBAAmB;IACnB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAc,EAAE;QACtC,MAAM,KAAK,GAAc,EAAE,CAAC;QAE5B,YAAY;QACZ,IAAI,QAAQ,EAAE,CAAC;YACX,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,CAAC;QAED,aAAa;QACb,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,cAAc;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,SAAS,GAAgD;gBAC3D,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;aAChB,CAAC;YACF,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;QAC5D,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChC,gCAAgC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACpE,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAA4B,CAAC;QACjE,CAAC;QAED,cAAc;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,CAAC;QAED,cAAc;QACd,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC;YAC/B,wEAAwE;YACxE,4CAA4C;YAC5C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9C,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,uBAAuB,CAAC;QAC3C,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YACzB,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7D,CAAC;aAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAC9B,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,CAAC;aAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACjC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YACzD,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;QACjC,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,CAAC,kBAAkB,GAAG,WAAW,CAAC;QAC3C,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,kBAAkB,KAAK,WAAW,EAAE,CAAC;gBAC3C,KAAK,CAAC,kBAAkB,GAAG,wBAAwB,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,kBAAkB,GAAG,cAAc,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,sDAAsD;YACtD,oDAAoD;YACpD,qBAAqB;YACrB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAQ,CAAC;QACxF,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,EAAE;QACC,QAAQ;QACR,SAAS;QACT,uBAAuB;QACvB,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,qBAAqB;QAC1B,SAAS;KACZ,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,aAAa,GAAG,QAAQ,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,iBAAiB;IACjB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAgC,CAAC;QACvD,IAAI,QAAQ,KAAK,KAAK,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAEnC,uEAAuE;IACvE,+EAA+E;IAE/E,OAAO,CACH,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACtC;YAAA,CAAC,IAAI,CACD,KAAK,CAAC,CAAC,SAAS,CAAC,CACjB,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,yBAAyB;KAElD;gBAAA,CAAC,IAAI,CACT;YAAA,EAAE,IAAI,CACV;QAAA,EAAE,KAAK,CAAC,CACX,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DivText } from './DivText';
2
+ export type { DivTextProps } from './DivText';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DivText } from './DivText';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+ import type { ComponentContext } from '../../types/componentContext';
4
+ import type { DivBaseData } from '../../types/base';
5
+ export interface OuterProps<T extends DivBaseData = DivBaseData> {
6
+ componentContext: ComponentContext<T>;
7
+ children: ReactNode;
8
+ style?: ViewStyle;
9
+ }
10
+ /**
11
+ * Outer component - base wrapper for all DivKit components
12
+ * Handles visibility, sizing, padding, margins, background, borders, and actions
13
+ *
14
+ * Based on Web Outer.svelte but simplified for React Native MVP
15
+ */
16
+ export declare function Outer<T extends DivBaseData = DivBaseData>({ componentContext, children, style: customStyle }: OuterProps<T>): React.JSX.Element | null;
17
+ //# sourceMappingURL=Outer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Outer.d.ts","sourceRoot":"","sources":["../../../src/components/utilities/Outer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAClD,OAAO,EAAmB,SAAS,EAAc,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQpD,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAC3D,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,EACvD,gBAAgB,EAChB,QAAQ,EACR,KAAK,EAAE,WAAW,EACrB,EAAE,UAAU,CAAC,CAAC,CAAC,4BAmNf"}