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,337 @@
1
+ import { writable } from '../stores/createObservable';
2
+ import { parseColor } from '../utils/correctColor';
3
+ import { bigIntZero, toBigInt } from './bigint';
4
+ import { checkUrl, transformColorValue } from './utils';
5
+ import { BOOLEAN } from './const';
6
+ export class Variable {
7
+ constructor(name, value) {
8
+ const val = this.convertValue(value);
9
+ this.name = name;
10
+ this.value = val;
11
+ }
12
+ getName() {
13
+ return this.name;
14
+ }
15
+ subscribe(cb) {
16
+ if (!this.store) {
17
+ this.store = writable(this.value);
18
+ }
19
+ return this.store.subscribe(cb);
20
+ }
21
+ set(val) {
22
+ const value = this.fromString(val);
23
+ this.setValue(value);
24
+ }
25
+ setValue(val) {
26
+ const converted = this.convertValue(val);
27
+ this.value = converted;
28
+ if (this.store) {
29
+ this.store.set(converted);
30
+ }
31
+ }
32
+ getValue() {
33
+ return this.value;
34
+ }
35
+ }
36
+ export class StringVariable extends Variable {
37
+ convertValue(value) {
38
+ if (typeof value !== 'string') {
39
+ throw new Error('Incorrect variable value');
40
+ }
41
+ return value;
42
+ }
43
+ fromString(val) {
44
+ return val;
45
+ }
46
+ getType() {
47
+ return 'string';
48
+ }
49
+ }
50
+ export class IntegerVariable extends Variable {
51
+ convertValue(value) {
52
+ if (typeof value !== 'bigint' && typeof value !== 'number') {
53
+ throw new Error('Incorrect variable value');
54
+ }
55
+ try {
56
+ return toBigInt(value);
57
+ }
58
+ catch (_err) {
59
+ throw new Error('Incorrect variable value');
60
+ }
61
+ }
62
+ fromString(val) {
63
+ try {
64
+ return toBigInt(val);
65
+ }
66
+ catch (_err) {
67
+ throw new Error('Incorrect variable value');
68
+ }
69
+ }
70
+ getType() {
71
+ return 'integer';
72
+ }
73
+ }
74
+ export class NumberVariable extends Variable {
75
+ convertValue(value) {
76
+ if (typeof value !== 'number' ||
77
+ Number.isNaN(value) ||
78
+ !isFinite(value)) {
79
+ throw new Error('Incorrect variable value');
80
+ }
81
+ return value;
82
+ }
83
+ fromString(val) {
84
+ const res = Number(val);
85
+ return this.convertValue(res);
86
+ }
87
+ getType() {
88
+ return 'number';
89
+ }
90
+ }
91
+ export class BooleanVariable extends Variable {
92
+ convertValue(value) {
93
+ if (value !== 1 && value !== 0 && value !== true && value !== false) {
94
+ throw new Error('Incorrect variable value');
95
+ }
96
+ return Boolean(value);
97
+ }
98
+ fromString(val) {
99
+ if (val === '1' || val === 'true') {
100
+ return true;
101
+ }
102
+ else if (val === '0' || val === 'false') {
103
+ return false;
104
+ }
105
+ throw new Error('Incorrect variable value');
106
+ }
107
+ getType() {
108
+ return 'boolean';
109
+ }
110
+ }
111
+ export class ColorVariable extends Variable {
112
+ convertValue(value) {
113
+ if (typeof value !== 'string' || !parseColor(value)) {
114
+ throw new Error('Incorrect variable value');
115
+ }
116
+ return transformColorValue(value);
117
+ }
118
+ fromString(val) {
119
+ return this.convertValue(val);
120
+ }
121
+ getType() {
122
+ return 'color';
123
+ }
124
+ }
125
+ export class UrlVariable extends Variable {
126
+ convertValue(value) {
127
+ if (typeof value !== 'string') {
128
+ throw new Error('Incorrect variable value');
129
+ }
130
+ checkUrl(value);
131
+ return value;
132
+ }
133
+ fromString(val) {
134
+ checkUrl(val);
135
+ return val;
136
+ }
137
+ getType() {
138
+ return 'url';
139
+ }
140
+ }
141
+ export class DictVariable extends Variable {
142
+ convertValue(value) {
143
+ if (typeof value !== 'object' || !value) {
144
+ throw new Error('Incorrect variable value');
145
+ }
146
+ return value;
147
+ }
148
+ fromString(val) {
149
+ try {
150
+ return JSON.parse(val);
151
+ }
152
+ catch (_err) {
153
+ throw new Error('Incorrect dict value');
154
+ }
155
+ }
156
+ getType() {
157
+ return 'dict';
158
+ }
159
+ }
160
+ export class ArrayVariable extends Variable {
161
+ convertValue(value) {
162
+ if (!Array.isArray(value)) {
163
+ throw new Error('Incorrect variable value');
164
+ }
165
+ return value;
166
+ }
167
+ fromString(val) {
168
+ try {
169
+ return JSON.parse(val);
170
+ }
171
+ catch (_err) {
172
+ throw new Error('Incorrect array value');
173
+ }
174
+ }
175
+ getType() {
176
+ return 'array';
177
+ }
178
+ }
179
+ export const TYPE_TO_CLASS = {
180
+ string: StringVariable,
181
+ number: NumberVariable,
182
+ integer: IntegerVariable,
183
+ boolean: BooleanVariable,
184
+ color: ColorVariable,
185
+ url: UrlVariable,
186
+ dict: DictVariable,
187
+ array: ArrayVariable
188
+ };
189
+ export function createVariable(name, type, value) {
190
+ if (!(type in TYPE_TO_CLASS)) {
191
+ throw new Error('Unsupported variable type');
192
+ }
193
+ return new TYPE_TO_CLASS[type](name, value);
194
+ }
195
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
196
+ function noop() {
197
+ }
198
+ function constSubscribe(cb) {
199
+ cb(this.value);
200
+ return noop;
201
+ }
202
+ function constSetter() {
203
+ throw new Error('Cannot change the value of this type of variable');
204
+ }
205
+ class ConstStringVariable extends StringVariable {
206
+ }
207
+ class ConstNumberVariable extends NumberVariable {
208
+ }
209
+ class ConstIntegerVariable extends IntegerVariable {
210
+ }
211
+ class ConstBooleanVariable extends BooleanVariable {
212
+ }
213
+ class ConstColorVariable extends ColorVariable {
214
+ }
215
+ class ConstUrlVariable extends UrlVariable {
216
+ }
217
+ class ConstDictVariable extends DictVariable {
218
+ }
219
+ class ConstArrayVariable extends ArrayVariable {
220
+ }
221
+ class ConstDatetimeVariable extends Variable {
222
+ convertValue(value) {
223
+ if (!(value instanceof Date)) {
224
+ throw new Error('Incorrect variable value');
225
+ }
226
+ return value;
227
+ }
228
+ fromString() {
229
+ throw new Error('Datetime variable does not support setter from string');
230
+ }
231
+ getType() {
232
+ return 'datetime';
233
+ }
234
+ }
235
+ export const CONST_TYPE_TO_CLASS = {
236
+ string: ConstStringVariable,
237
+ number: ConstNumberVariable,
238
+ integer: ConstIntegerVariable,
239
+ boolean: ConstBooleanVariable,
240
+ color: ConstColorVariable,
241
+ url: ConstUrlVariable,
242
+ dict: ConstDictVariable,
243
+ array: ConstArrayVariable,
244
+ datetime: ConstDatetimeVariable
245
+ };
246
+ for (const type in CONST_TYPE_TO_CLASS) {
247
+ const Class = CONST_TYPE_TO_CLASS[type];
248
+ Class.prototype.subscribe = constSubscribe;
249
+ Class.prototype.set = constSetter;
250
+ Class.prototype.setValue = constSetter;
251
+ }
252
+ export function createConstVariable(name, type, value) {
253
+ if (!(type in CONST_TYPE_TO_CLASS)) {
254
+ throw new Error('Unsupported variable type');
255
+ }
256
+ return new CONST_TYPE_TO_CLASS[type](name, value);
257
+ }
258
+ export function defaultValueByType(type) {
259
+ if (type === 'integer') {
260
+ return bigIntZero;
261
+ }
262
+ if (type === 'boolean' || type === 'number') {
263
+ return 0;
264
+ }
265
+ if (type === 'dict') {
266
+ return {};
267
+ }
268
+ if (type === 'array') {
269
+ return [];
270
+ }
271
+ return '';
272
+ }
273
+ export function variableToValue(variable) {
274
+ const type = variable.getType();
275
+ let value = variable.getValue();
276
+ if (type === BOOLEAN) {
277
+ value = value ? 1 : 0;
278
+ }
279
+ return {
280
+ type,
281
+ value
282
+ };
283
+ }
284
+ export function variableValueFromString(val, type) {
285
+ if (type === 'string') {
286
+ return val;
287
+ }
288
+ else if (type === 'integer') {
289
+ try {
290
+ return toBigInt(val);
291
+ }
292
+ catch (_err) {
293
+ throw new Error('Incorrect variable value');
294
+ }
295
+ }
296
+ else if (type === 'number') {
297
+ const converted = Number(val);
298
+ if (Number.isNaN(converted) ||
299
+ !isFinite(converted)) {
300
+ throw new Error('Incorrect variable value');
301
+ }
302
+ return converted;
303
+ }
304
+ else if (type === 'boolean') {
305
+ if (val === '1' || val === 'true') {
306
+ return true;
307
+ }
308
+ else if (val === '0' || val === 'false') {
309
+ return false;
310
+ }
311
+ throw new Error('Incorrect variable value');
312
+ }
313
+ else if (type === 'color') {
314
+ if (typeof val !== 'string' || !parseColor(val)) {
315
+ throw new Error('Incorrect variable value');
316
+ }
317
+ return transformColorValue(val);
318
+ }
319
+ else if (type === 'url') {
320
+ if (typeof val !== 'string') {
321
+ throw new Error('Incorrect variable value');
322
+ }
323
+ checkUrl(val);
324
+ return val;
325
+ }
326
+ else if (type === 'dict' || type === 'array') {
327
+ try {
328
+ return JSON.parse(val);
329
+ }
330
+ catch (_err) {
331
+ throw new Error('Incorrect dict value');
332
+ }
333
+ }
334
+ // For purpose when new eval value types will be added
335
+ throw new Error(`Unexpected type ${type}`);
336
+ }
337
+ //# sourceMappingURL=variable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable.js","sourceRoot":"","sources":["../../src/expressions/variable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Node } from './ast';
2
+ export declare function walk(ast: Node, visitors: {
3
+ [Type in Node['type']]?: (node: Extract<Node, {
4
+ type: Type;
5
+ }>) => void;
6
+ }): void;
7
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/expressions/walk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;KACrC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,KAAK,IAAI;CACzE,GAAG,IAAI,CAsCP"}
@@ -0,0 +1,39 @@
1
+ export function walk(ast, visitors) {
2
+ visitors[ast.type]?.(ast);
3
+ switch (ast.type) {
4
+ case 'TemplateLiteral':
5
+ ast.expressions.forEach(item => {
6
+ walk(item, visitors);
7
+ });
8
+ break;
9
+ case 'BinaryExpression':
10
+ case 'LogicalExpression':
11
+ walk(ast.left, visitors);
12
+ walk(ast.right, visitors);
13
+ break;
14
+ case 'UnaryExpression':
15
+ walk(ast.argument, visitors);
16
+ break;
17
+ case 'ConditionalExpression':
18
+ walk(ast.test, visitors);
19
+ walk(ast.consequent, visitors);
20
+ walk(ast.alternate, visitors);
21
+ break;
22
+ case 'TryExpression':
23
+ walk(ast.test, visitors);
24
+ walk(ast.alternate, visitors);
25
+ break;
26
+ case 'CallExpression':
27
+ ast.arguments.forEach(item => {
28
+ walk(item, visitors);
29
+ });
30
+ break;
31
+ case 'MethodExpression':
32
+ walk(ast.object, visitors);
33
+ ast.arguments.forEach(item => {
34
+ walk(item, visitors);
35
+ });
36
+ break;
37
+ }
38
+ }
39
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/expressions/walk.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,IAAI,CAAC,GAAS,EAAE,QAE/B;IACG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAU,CAAC,CAAC;IAEjC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,iBAAiB;YAClB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC3B,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM;QACV,KAAK,kBAAkB,CAAC;QACxB,KAAK,mBAAmB;YACpB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1B,MAAM;QACV,KAAK,iBAAiB;YAClB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7B,MAAM;QACV,KAAK,uBAAuB;YACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC9B,MAAM;QACV,KAAK,eAAe;YAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC9B,MAAM;QACV,KAAK,gBAAgB;YACjB,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM;QACV,KAAK,kBAAkB;YACnB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC3B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM;IACd,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * DivKit React Hooks
3
+ * Export all custom hooks for use in React Native components
4
+ */
5
+ export { useDerivedFromVars, useDerivedFromVarsSimple, type UseDerivedFromVarsOptions } from './useDerivedFromVars';
6
+ export { useVariable, useVariableInstance, useVariableSetter, useVariableState } from './useVariable';
7
+ export { useAction, useActions, useActionHandler, useHasActions, type UseActionOptions } from './useAction';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,yBAAyB,EACjC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACH,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACH,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,KAAK,gBAAgB,EACxB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * DivKit React Hooks
3
+ * Export all custom hooks for use in React Native components
4
+ */
5
+ // Main reactivity hook - variable substitution in JSON
6
+ export { useDerivedFromVars, useDerivedFromVarsSimple } from './useDerivedFromVars';
7
+ // Variable subscription hooks
8
+ export { useVariable, useVariableInstance, useVariableSetter, useVariableState } from './useVariable';
9
+ // Action execution hooks
10
+ export { useAction, useActions, useActionHandler, useHasActions } from './useAction';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uDAAuD;AACvD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EAE3B,MAAM,sBAAsB,CAAC;AAE9B,8BAA8B;AAC9B,OAAO,EACH,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACnB,MAAM,eAAe,CAAC;AAEvB,yBAAyB;AACzB,OAAO,EACH,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EAEhB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * React hooks for executing DivKit actions
3
+ * Handles click actions, visibility actions, and other user interactions
4
+ */
5
+ import type { Action } from '../../typings/common';
6
+ import type { MaybeMissing } from '../expressions/json';
7
+ import type { ComponentContext } from '../types/componentContext';
8
+ export interface UseActionOptions {
9
+ /**
10
+ * Component context (for action execution context)
11
+ */
12
+ componentContext?: ComponentContext;
13
+ /**
14
+ * Whether to process URLs (open external links)
15
+ * Default: true
16
+ */
17
+ processUrls?: boolean;
18
+ }
19
+ /**
20
+ * Hook to execute a single action
21
+ *
22
+ * @param options Action execution options
23
+ * @returns Function to execute an action
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * function MyButton({ action }: { action: Action }) {
28
+ * const execAction = useAction();
29
+ *
30
+ * return (
31
+ * <Pressable onPress={() => execAction(action)}>
32
+ * <Text>Click me</Text>
33
+ * </Pressable>
34
+ * );
35
+ * }
36
+ * ```
37
+ */
38
+ export declare function useAction(options?: UseActionOptions): (action: MaybeMissing<Action> | undefined) => Promise<void>;
39
+ /**
40
+ * Hook to execute multiple actions
41
+ *
42
+ * @param options Action execution options
43
+ * @returns Function to execute an array of actions
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * function MyButton({ actions }: { actions: Action[] }) {
48
+ * const execActions = useActions();
49
+ *
50
+ * return (
51
+ * <Pressable onPress={() => execActions(actions)}>
52
+ * <Text>Click me</Text>
53
+ * </Pressable>
54
+ * );
55
+ * }
56
+ * ```
57
+ */
58
+ export declare function useActions(options?: UseActionOptions): (actions: MaybeMissing<Action[]> | undefined) => Promise<void>;
59
+ /**
60
+ * Hook to create an onPress handler from actions
61
+ * Convenience hook for Pressable/TouchableOpacity components
62
+ *
63
+ * @param actions Actions to execute on press
64
+ * @param options Action execution options
65
+ * @returns onPress handler function, or undefined if no actions
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * function DivText({ json }: { json: DivTextJson }) {
70
+ * const onPress = useActionHandler(json.actions);
71
+ *
72
+ * return (
73
+ * <Pressable onPress={onPress}>
74
+ * <Text>{json.text}</Text>
75
+ * </Pressable>
76
+ * );
77
+ * }
78
+ * ```
79
+ */
80
+ export declare function useActionHandler(actions: MaybeMissing<Action[]> | undefined, options?: UseActionOptions): (() => Promise<void>) | undefined;
81
+ /**
82
+ * Hook to check if actions array is not empty
83
+ * Useful for conditional rendering or styling
84
+ *
85
+ * @param actions Actions to check
86
+ * @returns true if actions exist and are not empty
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * function DivText({ json }: { json: DivTextJson }) {
91
+ * const hasActions = useHasActions(json.actions);
92
+ *
93
+ * return (
94
+ * <Text style={{ cursor: hasActions ? 'pointer' : 'default' }}>
95
+ * {json.text}
96
+ * </Text>
97
+ * );
98
+ * }
99
+ * ```
100
+ */
101
+ export declare function useHasActions(actions: MaybeMissing<Action[]> | undefined): boolean;
102
+ //# sourceMappingURL=useAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAction.d.ts","sourceRoot":"","sources":["../../src/hooks/useAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,YAI7B,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,mBAStD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,gBAAgB,aAI7B,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,mBASzD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,EAC3C,OAAO,CAAC,EAAE,gBAAgB,GAC3B,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CASnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CACzB,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAC5C,OAAO,CAET"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * React hooks for executing DivKit actions
3
+ * Handles click actions, visibility actions, and other user interactions
4
+ */
5
+ import { useCallback } from 'react';
6
+ import { useDivKitContext } from '../context/DivKitContext';
7
+ /**
8
+ * Hook to execute a single action
9
+ *
10
+ * @param options Action execution options
11
+ * @returns Function to execute an action
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * function MyButton({ action }: { action: Action }) {
16
+ * const execAction = useAction();
17
+ *
18
+ * return (
19
+ * <Pressable onPress={() => execAction(action)}>
20
+ * <Text>Click me</Text>
21
+ * </Pressable>
22
+ * );
23
+ * }
24
+ * ```
25
+ */
26
+ export function useAction(options) {
27
+ const { execAnyActions } = useDivKitContext();
28
+ return useCallback(async (action) => {
29
+ if (!action) {
30
+ return;
31
+ }
32
+ await execAnyActions([action], options);
33
+ }, [execAnyActions, options]);
34
+ }
35
+ /**
36
+ * Hook to execute multiple actions
37
+ *
38
+ * @param options Action execution options
39
+ * @returns Function to execute an array of actions
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * function MyButton({ actions }: { actions: Action[] }) {
44
+ * const execActions = useActions();
45
+ *
46
+ * return (
47
+ * <Pressable onPress={() => execActions(actions)}>
48
+ * <Text>Click me</Text>
49
+ * </Pressable>
50
+ * );
51
+ * }
52
+ * ```
53
+ */
54
+ export function useActions(options) {
55
+ const { execAnyActions } = useDivKitContext();
56
+ return useCallback(async (actions) => {
57
+ if (!actions || actions.length === 0) {
58
+ return;
59
+ }
60
+ await execAnyActions(actions, options);
61
+ }, [execAnyActions, options]);
62
+ }
63
+ /**
64
+ * Hook to create an onPress handler from actions
65
+ * Convenience hook for Pressable/TouchableOpacity components
66
+ *
67
+ * @param actions Actions to execute on press
68
+ * @param options Action execution options
69
+ * @returns onPress handler function, or undefined if no actions
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * function DivText({ json }: { json: DivTextJson }) {
74
+ * const onPress = useActionHandler(json.actions);
75
+ *
76
+ * return (
77
+ * <Pressable onPress={onPress}>
78
+ * <Text>{json.text}</Text>
79
+ * </Pressable>
80
+ * );
81
+ * }
82
+ * ```
83
+ */
84
+ export function useActionHandler(actions, options) {
85
+ const execActions = useActions(options);
86
+ return useCallback(() => {
87
+ if (!actions || actions.length === 0) {
88
+ return Promise.resolve();
89
+ }
90
+ return execActions(actions);
91
+ }, [actions, execActions]);
92
+ }
93
+ /**
94
+ * Hook to check if actions array is not empty
95
+ * Useful for conditional rendering or styling
96
+ *
97
+ * @param actions Actions to check
98
+ * @returns true if actions exist and are not empty
99
+ *
100
+ * @example
101
+ * ```tsx
102
+ * function DivText({ json }: { json: DivTextJson }) {
103
+ * const hasActions = useHasActions(json.actions);
104
+ *
105
+ * return (
106
+ * <Text style={{ cursor: hasActions ? 'pointer' : 'default' }}>
107
+ * {json.text}
108
+ * </Text>
109
+ * );
110
+ * }
111
+ * ```
112
+ */
113
+ export function useHasActions(actions) {
114
+ return Boolean(actions && actions.length > 0);
115
+ }
116
+ //# sourceMappingURL=useAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAction.js","sourceRoot":"","sources":["../../src/hooks/useAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAgB5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,SAAS,CAAC,OAA0B;IAChD,MAAM,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE9C,OAAO,WAAW,CACd,KAAK,EAAE,MAAwC,EAAE,EAAE;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QAED,MAAM,cAAc,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,EACD,CAAC,cAAc,EAAE,OAAO,CAAC,CAC5B,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0B;IACjD,MAAM,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE9C,OAAO,WAAW,CACd,KAAK,EAAE,OAA2C,EAAE,EAAE;QAClD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,EACD,CAAC,cAAc,EAAE,OAAO,CAAC,CAC5B,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAC5B,OAA2C,EAC3C,OAA0B;IAE1B,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAExC,OAAO,WAAW,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CACzB,OAA2C;IAE3C,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC"}