@pushframe/sdk 0.1.4 → 0.1.8

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 (288) hide show
  1. package/lib/commonjs/PushframeProvider.js +69 -0
  2. package/lib/commonjs/PushframeProvider.js.map +1 -0
  3. package/lib/commonjs/PushframeScreen.js +69 -0
  4. package/lib/commonjs/PushframeScreen.js.map +1 -0
  5. package/lib/commonjs/bindings.js +73 -0
  6. package/lib/commonjs/bindings.js.map +1 -0
  7. package/lib/commonjs/components/ButtonComponent.js +72 -0
  8. package/lib/commonjs/components/ButtonComponent.js.map +1 -0
  9. package/lib/commonjs/components/FlatListComponent.js +73 -0
  10. package/lib/commonjs/components/FlatListComponent.js.map +1 -0
  11. package/lib/commonjs/components/ImageComponent.js +67 -0
  12. package/lib/commonjs/components/ImageComponent.js.map +1 -0
  13. package/lib/commonjs/components/PushFrameComponent.js +179 -0
  14. package/lib/commonjs/components/PushFrameComponent.js.map +1 -0
  15. package/lib/commonjs/components/PushFrameProvider.js +115 -0
  16. package/lib/commonjs/components/PushFrameProvider.js.map +1 -0
  17. package/lib/commonjs/components/PushFrameScreen.js +39 -0
  18. package/lib/commonjs/components/PushFrameScreen.js.map +1 -0
  19. package/lib/commonjs/components/ScrollViewComponent.js +64 -0
  20. package/lib/commonjs/components/ScrollViewComponent.js.map +1 -0
  21. package/lib/commonjs/components/StackComponent.js +61 -0
  22. package/lib/commonjs/components/StackComponent.js.map +1 -0
  23. package/lib/commonjs/components/TextComponent.js +62 -0
  24. package/lib/commonjs/components/TextComponent.js.map +1 -0
  25. package/lib/commonjs/conditions.js +44 -0
  26. package/lib/commonjs/conditions.js.map +1 -0
  27. package/lib/commonjs/context/PushFrameContext.js +33 -0
  28. package/lib/commonjs/context/PushFrameContext.js.map +1 -0
  29. package/lib/commonjs/index.js +200 -0
  30. package/lib/commonjs/index.js.map +1 -0
  31. package/lib/commonjs/overlays/BottomSheetHost.js +144 -0
  32. package/lib/commonjs/overlays/BottomSheetHost.js.map +1 -0
  33. package/lib/commonjs/overlays/ToastHost.js +135 -0
  34. package/lib/commonjs/overlays/ToastHost.js.map +1 -0
  35. package/lib/commonjs/package.json +1 -0
  36. package/lib/commonjs/primitives/ActivityIndicator.js +24 -0
  37. package/lib/commonjs/primitives/ActivityIndicator.js.map +1 -0
  38. package/lib/commonjs/primitives/FlatList.js +34 -0
  39. package/lib/commonjs/primitives/FlatList.js.map +1 -0
  40. package/lib/commonjs/primitives/Image.js +33 -0
  41. package/lib/commonjs/primitives/Image.js.map +1 -0
  42. package/lib/commonjs/primitives/KeyboardAvoidingView.js +24 -0
  43. package/lib/commonjs/primitives/KeyboardAvoidingView.js.map +1 -0
  44. package/lib/commonjs/primitives/Modal.js +24 -0
  45. package/lib/commonjs/primitives/Modal.js.map +1 -0
  46. package/lib/commonjs/primitives/Pressable.js +26 -0
  47. package/lib/commonjs/primitives/Pressable.js.map +1 -0
  48. package/lib/commonjs/primitives/SafeAreaView.js +38 -0
  49. package/lib/commonjs/primitives/SafeAreaView.js.map +1 -0
  50. package/lib/commonjs/primitives/ScrollView.js +26 -0
  51. package/lib/commonjs/primitives/ScrollView.js.map +1 -0
  52. package/lib/commonjs/primitives/StatusBar.js +24 -0
  53. package/lib/commonjs/primitives/StatusBar.js.map +1 -0
  54. package/lib/commonjs/primitives/Switch.js +28 -0
  55. package/lib/commonjs/primitives/Switch.js.map +1 -0
  56. package/lib/commonjs/primitives/Text.js +37 -0
  57. package/lib/commonjs/primitives/Text.js.map +1 -0
  58. package/lib/commonjs/primitives/TextInput.js +31 -0
  59. package/lib/commonjs/primitives/TextInput.js.map +1 -0
  60. package/lib/commonjs/primitives/View.js +24 -0
  61. package/lib/commonjs/primitives/View.js.map +1 -0
  62. package/lib/commonjs/primitives/index.js +97 -0
  63. package/lib/commonjs/primitives/index.js.map +1 -0
  64. package/lib/commonjs/registry/ComponentRegistry.js +70 -0
  65. package/lib/commonjs/registry/ComponentRegistry.js.map +1 -0
  66. package/lib/commonjs/registry.js +94 -0
  67. package/lib/commonjs/registry.js.map +1 -0
  68. package/lib/commonjs/renderer/RecursiveRenderer.js +202 -0
  69. package/lib/commonjs/renderer/RecursiveRenderer.js.map +1 -0
  70. package/lib/commonjs/renderer/bindingResolver.js +98 -0
  71. package/lib/commonjs/renderer/bindingResolver.js.map +1 -0
  72. package/lib/commonjs/renderer/conditionalEvaluator.js +31 -0
  73. package/lib/commonjs/renderer/conditionalEvaluator.js.map +1 -0
  74. package/lib/commonjs/renderer.js +107 -0
  75. package/lib/commonjs/renderer.js.map +1 -0
  76. package/lib/commonjs/schema.js +79 -0
  77. package/lib/commonjs/schema.js.map +1 -0
  78. package/lib/commonjs/transformer/index.js +1055 -0
  79. package/lib/commonjs/transformer/index.js.map +1 -0
  80. package/lib/commonjs/transport.js +86 -0
  81. package/lib/commonjs/transport.js.map +1 -0
  82. package/lib/module/PushframeProvider.js +62 -0
  83. package/lib/module/PushframeProvider.js.map +1 -0
  84. package/lib/module/PushframeScreen.js +65 -0
  85. package/lib/module/PushframeScreen.js.map +1 -0
  86. package/lib/module/bindings.js +68 -0
  87. package/lib/module/bindings.js.map +1 -0
  88. package/lib/module/components/ButtonComponent.js +67 -0
  89. package/lib/module/components/ButtonComponent.js.map +1 -0
  90. package/lib/module/components/FlatListComponent.js +68 -0
  91. package/lib/module/components/FlatListComponent.js.map +1 -0
  92. package/lib/module/components/ImageComponent.js +62 -0
  93. package/lib/module/components/ImageComponent.js.map +1 -0
  94. package/lib/module/components/PushFrameComponent.js +174 -0
  95. package/lib/module/components/PushFrameComponent.js.map +1 -0
  96. package/lib/module/components/PushFrameProvider.js +110 -0
  97. package/lib/module/components/PushFrameProvider.js.map +1 -0
  98. package/lib/module/components/PushFrameScreen.js +34 -0
  99. package/lib/module/components/PushFrameScreen.js.map +1 -0
  100. package/lib/module/components/ScrollViewComponent.js +59 -0
  101. package/lib/module/components/ScrollViewComponent.js.map +1 -0
  102. package/lib/module/components/StackComponent.js +56 -0
  103. package/lib/module/components/StackComponent.js.map +1 -0
  104. package/lib/module/components/TextComponent.js +57 -0
  105. package/lib/module/components/TextComponent.js.map +1 -0
  106. package/lib/module/conditions.js +40 -0
  107. package/lib/module/conditions.js.map +1 -0
  108. package/lib/module/context/PushFrameContext.js +29 -0
  109. package/lib/module/context/PushFrameContext.js.map +1 -0
  110. package/lib/module/index.js +99 -0
  111. package/lib/module/index.js.map +1 -0
  112. package/lib/module/overlays/BottomSheetHost.js +139 -0
  113. package/lib/module/overlays/BottomSheetHost.js.map +1 -0
  114. package/lib/module/overlays/ToastHost.js +130 -0
  115. package/lib/module/overlays/ToastHost.js.map +1 -0
  116. package/lib/module/primitives/ActivityIndicator.js +19 -0
  117. package/lib/module/primitives/ActivityIndicator.js.map +1 -0
  118. package/lib/module/primitives/FlatList.js +29 -0
  119. package/lib/module/primitives/FlatList.js.map +1 -0
  120. package/lib/module/primitives/Image.js +28 -0
  121. package/lib/module/primitives/Image.js.map +1 -0
  122. package/lib/module/primitives/KeyboardAvoidingView.js +19 -0
  123. package/lib/module/primitives/KeyboardAvoidingView.js.map +1 -0
  124. package/lib/module/primitives/Modal.js +19 -0
  125. package/lib/module/primitives/Modal.js.map +1 -0
  126. package/lib/module/primitives/Pressable.js +21 -0
  127. package/lib/module/primitives/Pressable.js.map +1 -0
  128. package/lib/module/primitives/SafeAreaView.js +33 -0
  129. package/lib/module/primitives/SafeAreaView.js.map +1 -0
  130. package/lib/module/primitives/ScrollView.js +21 -0
  131. package/lib/module/primitives/ScrollView.js.map +1 -0
  132. package/lib/module/primitives/StatusBar.js +19 -0
  133. package/lib/module/primitives/StatusBar.js.map +1 -0
  134. package/lib/module/primitives/Switch.js +23 -0
  135. package/lib/module/primitives/Switch.js.map +1 -0
  136. package/lib/module/primitives/Text.js +32 -0
  137. package/lib/module/primitives/Text.js.map +1 -0
  138. package/lib/module/primitives/TextInput.js +26 -0
  139. package/lib/module/primitives/TextInput.js.map +1 -0
  140. package/lib/module/primitives/View.js +19 -0
  141. package/lib/module/primitives/View.js.map +1 -0
  142. package/lib/module/primitives/index.js +16 -0
  143. package/lib/module/primitives/index.js.map +1 -0
  144. package/lib/module/registry/ComponentRegistry.js +66 -0
  145. package/lib/module/registry/ComponentRegistry.js.map +1 -0
  146. package/lib/module/registry.js +88 -0
  147. package/lib/module/registry.js.map +1 -0
  148. package/lib/module/renderer/RecursiveRenderer.js +197 -0
  149. package/lib/module/renderer/RecursiveRenderer.js.map +1 -0
  150. package/lib/module/renderer/bindingResolver.js +92 -0
  151. package/lib/module/renderer/bindingResolver.js.map +1 -0
  152. package/lib/module/renderer/conditionalEvaluator.js +28 -0
  153. package/lib/module/renderer/conditionalEvaluator.js.map +1 -0
  154. package/lib/module/renderer.js +103 -0
  155. package/lib/module/renderer.js.map +1 -0
  156. package/lib/module/schema.js +74 -0
  157. package/lib/module/schema.js.map +1 -0
  158. package/lib/module/transformer/index.js +1051 -0
  159. package/lib/module/transformer/index.js.map +1 -0
  160. package/lib/module/transport.js +82 -0
  161. package/lib/module/transport.js.map +1 -0
  162. package/lib/typescript/PushframeProvider.d.ts +58 -0
  163. package/lib/typescript/PushframeProvider.d.ts.map +1 -0
  164. package/lib/typescript/PushframeScreen.d.ts +36 -0
  165. package/lib/typescript/PushframeScreen.d.ts.map +1 -0
  166. package/lib/typescript/bindings.d.ts +29 -0
  167. package/lib/typescript/bindings.d.ts.map +1 -0
  168. package/lib/typescript/components/ButtonComponent.d.ts +11 -0
  169. package/lib/typescript/components/ButtonComponent.d.ts.map +1 -0
  170. package/lib/typescript/components/FlatListComponent.d.ts +28 -0
  171. package/lib/typescript/components/FlatListComponent.d.ts.map +1 -0
  172. package/lib/typescript/components/ImageComponent.d.ts +12 -0
  173. package/lib/typescript/components/ImageComponent.d.ts.map +1 -0
  174. package/lib/typescript/components/PushFrameComponent.d.ts +48 -0
  175. package/lib/typescript/components/PushFrameComponent.d.ts.map +1 -0
  176. package/lib/typescript/components/PushFrameProvider.d.ts +51 -0
  177. package/lib/typescript/components/PushFrameProvider.d.ts.map +1 -0
  178. package/lib/typescript/components/PushFrameScreen.d.ts +15 -0
  179. package/lib/typescript/components/PushFrameScreen.d.ts.map +1 -0
  180. package/lib/typescript/components/ScrollViewComponent.d.ts +19 -0
  181. package/lib/typescript/components/ScrollViewComponent.d.ts.map +1 -0
  182. package/lib/typescript/components/StackComponent.d.ts +16 -0
  183. package/lib/typescript/components/StackComponent.d.ts.map +1 -0
  184. package/lib/typescript/components/TextComponent.d.ts +13 -0
  185. package/lib/typescript/components/TextComponent.d.ts.map +1 -0
  186. package/lib/typescript/conditions.d.ts +12 -0
  187. package/lib/typescript/conditions.d.ts.map +1 -0
  188. package/lib/typescript/context/PushFrameContext.d.ts +57 -0
  189. package/lib/typescript/context/PushFrameContext.d.ts.map +1 -0
  190. package/lib/typescript/index.d.ts +74 -0
  191. package/lib/typescript/index.d.ts.map +1 -0
  192. package/lib/typescript/overlays/BottomSheetHost.d.ts +21 -0
  193. package/lib/typescript/overlays/BottomSheetHost.d.ts.map +1 -0
  194. package/lib/typescript/overlays/ToastHost.d.ts +12 -0
  195. package/lib/typescript/overlays/ToastHost.d.ts.map +1 -0
  196. package/lib/typescript/primitives/ActivityIndicator.d.ts +12 -0
  197. package/lib/typescript/primitives/ActivityIndicator.d.ts.map +1 -0
  198. package/lib/typescript/primitives/FlatList.d.ts +29 -0
  199. package/lib/typescript/primitives/FlatList.d.ts.map +1 -0
  200. package/lib/typescript/primitives/Image.d.ts +20 -0
  201. package/lib/typescript/primitives/Image.d.ts.map +1 -0
  202. package/lib/typescript/primitives/KeyboardAvoidingView.d.ts +12 -0
  203. package/lib/typescript/primitives/KeyboardAvoidingView.d.ts.map +1 -0
  204. package/lib/typescript/primitives/Modal.d.ts +12 -0
  205. package/lib/typescript/primitives/Modal.d.ts.map +1 -0
  206. package/lib/typescript/primitives/Pressable.d.ts +14 -0
  207. package/lib/typescript/primitives/Pressable.d.ts.map +1 -0
  208. package/lib/typescript/primitives/SafeAreaView.d.ts +20 -0
  209. package/lib/typescript/primitives/SafeAreaView.d.ts.map +1 -0
  210. package/lib/typescript/primitives/ScrollView.d.ts +15 -0
  211. package/lib/typescript/primitives/ScrollView.d.ts.map +1 -0
  212. package/lib/typescript/primitives/StatusBar.d.ts +12 -0
  213. package/lib/typescript/primitives/StatusBar.d.ts.map +1 -0
  214. package/lib/typescript/primitives/Switch.d.ts +19 -0
  215. package/lib/typescript/primitives/Switch.d.ts.map +1 -0
  216. package/lib/typescript/primitives/Text.d.ts +25 -0
  217. package/lib/typescript/primitives/Text.d.ts.map +1 -0
  218. package/lib/typescript/primitives/TextInput.d.ts +25 -0
  219. package/lib/typescript/primitives/TextInput.d.ts.map +1 -0
  220. package/lib/typescript/primitives/View.d.ts +12 -0
  221. package/lib/typescript/primitives/View.d.ts.map +1 -0
  222. package/lib/typescript/primitives/index.d.ts +27 -0
  223. package/lib/typescript/primitives/index.d.ts.map +1 -0
  224. package/lib/typescript/registry/ComponentRegistry.d.ts +21 -0
  225. package/lib/typescript/registry/ComponentRegistry.d.ts.map +1 -0
  226. package/lib/typescript/registry.d.ts +57 -0
  227. package/lib/typescript/registry.d.ts.map +1 -0
  228. package/lib/typescript/renderer/RecursiveRenderer.d.ts +32 -0
  229. package/lib/typescript/renderer/RecursiveRenderer.d.ts.map +1 -0
  230. package/lib/typescript/renderer/bindingResolver.d.ts +26 -0
  231. package/lib/typescript/renderer/bindingResolver.d.ts.map +1 -0
  232. package/lib/typescript/renderer/conditionalEvaluator.d.ts +15 -0
  233. package/lib/typescript/renderer/conditionalEvaluator.d.ts.map +1 -0
  234. package/lib/typescript/renderer.d.ts +29 -0
  235. package/lib/typescript/renderer.d.ts.map +1 -0
  236. package/lib/typescript/schema.d.ts +84 -0
  237. package/lib/typescript/schema.d.ts.map +1 -0
  238. package/lib/typescript/transformer/index.d.ts +49 -0
  239. package/lib/typescript/transformer/index.d.ts.map +1 -0
  240. package/lib/typescript/transport.d.ts +19 -0
  241. package/lib/typescript/transport.d.ts.map +1 -0
  242. package/package.json +20 -18
  243. package/src/PushframeProvider.tsx +119 -0
  244. package/src/PushframeScreen.tsx +107 -0
  245. package/src/bindings.ts +72 -0
  246. package/src/components/ButtonComponent.tsx +87 -0
  247. package/src/components/FlatListComponent.tsx +86 -0
  248. package/src/components/ImageComponent.tsx +70 -0
  249. package/src/components/PushFrameComponent.tsx +221 -0
  250. package/src/components/PushFrameProvider.tsx +177 -0
  251. package/src/components/PushFrameScreen.tsx +30 -0
  252. package/src/components/ScrollViewComponent.tsx +65 -0
  253. package/src/components/StackComponent.tsx +69 -0
  254. package/src/components/TextComponent.tsx +60 -0
  255. package/src/conditions.ts +46 -0
  256. package/src/context/PushFrameContext.ts +89 -0
  257. package/src/index.ts +119 -0
  258. package/src/overlays/BottomSheetHost.tsx +175 -0
  259. package/src/overlays/ToastHost.tsx +147 -0
  260. package/src/primitives/ActivityIndicator.tsx +21 -0
  261. package/src/primitives/FlatList.tsx +49 -0
  262. package/src/primitives/Image.tsx +26 -0
  263. package/src/primitives/KeyboardAvoidingView.tsx +21 -0
  264. package/src/primitives/Modal.tsx +17 -0
  265. package/src/primitives/Pressable.tsx +19 -0
  266. package/src/primitives/SafeAreaView.tsx +42 -0
  267. package/src/primitives/ScrollView.tsx +21 -0
  268. package/src/primitives/StatusBar.tsx +17 -0
  269. package/src/primitives/Switch.tsx +24 -0
  270. package/src/primitives/Text.tsx +43 -0
  271. package/src/primitives/TextInput.tsx +42 -0
  272. package/src/primitives/View.tsx +17 -0
  273. package/src/primitives/index.ts +38 -0
  274. package/src/registry/ComponentRegistry.ts +99 -0
  275. package/src/registry.ts +99 -0
  276. package/src/renderer/RecursiveRenderer.tsx +242 -0
  277. package/src/renderer/bindingResolver.ts +94 -0
  278. package/src/renderer/conditionalEvaluator.ts +29 -0
  279. package/src/renderer.tsx +124 -0
  280. package/src/schema.ts +132 -0
  281. package/src/transformer/index.ts +1016 -0
  282. package/src/transport.ts +104 -0
  283. package/dist/index.d.mts +0 -534
  284. package/dist/index.d.ts +0 -534
  285. package/dist/index.js +0 -1572
  286. package/dist/index.js.map +0 -1
  287. package/dist/index.mjs +0 -1541
  288. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resolveDeep = resolveDeep;
7
+ exports.resolveProps = resolveProps;
8
+ exports.resolveValue = resolveValue;
9
+ /**
10
+ * Binding resolver for PushFrame {{expression}} syntax.
11
+ *
12
+ * Rules:
13
+ * - A value that is entirely "{{expr}}" resolves to the bound value (any type)
14
+ * - A value with inline bindings "Hello {{user.name}}" resolves to a string
15
+ * - Unresolved paths return undefined — never throws
16
+ * - Non-string values are returned as-is
17
+ */
18
+
19
+ const FULL_BINDING_RE = /^\{\{(.+)\}\}$/;
20
+ const INLINE_BINDING_RE = /\{\{([^}]+)\}\}/g;
21
+
22
+ /**
23
+ * Evaluate a binding expression string against the provided context.
24
+ * Uses Function constructor for safe, sandboxed expression evaluation.
25
+ * Returns undefined on any error.
26
+ */
27
+ function evaluateExpression(expr, context) {
28
+ try {
29
+ const keys = Object.keys(context);
30
+ const values = keys.map(k => context[k]);
31
+ // eslint-disable-next-line no-new-func
32
+ const fn = new Function(...keys, `"use strict"; try { return (${expr}); } catch(e) { return undefined; }`);
33
+ return fn(...values);
34
+ } catch {
35
+ return undefined;
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Resolve a single prop value against context.
41
+ *
42
+ * - String values: check for full binding "{{expr}}" or inline bindings "Hello {{name}}"
43
+ * - Non-string values: returned as-is
44
+ */
45
+ function resolveValue(value, context) {
46
+ if (typeof value !== 'string') {
47
+ return value;
48
+ }
49
+
50
+ // Full binding: entire string is "{{expr}}" — return the actual resolved value
51
+ const fullMatch = FULL_BINDING_RE.exec(value);
52
+ if (fullMatch?.[1] !== undefined) {
53
+ return evaluateExpression(fullMatch[1].trim(), context);
54
+ }
55
+
56
+ // Inline binding: replace each "{{expr}}" occurrence within the string
57
+ if (INLINE_BINDING_RE.test(value)) {
58
+ INLINE_BINDING_RE.lastIndex = 0;
59
+ return value.replace(INLINE_BINDING_RE, (_, expr) => {
60
+ const resolved = evaluateExpression(expr.trim(), context);
61
+ return resolved !== undefined && resolved !== null ? String(resolved) : '';
62
+ });
63
+ }
64
+
65
+ // No bindings — return as-is
66
+ return value;
67
+ }
68
+
69
+ /**
70
+ * Resolve all values in a props map against the context.
71
+ * Recursively resolves nested objects and arrays.
72
+ */
73
+ function resolveProps(props, context) {
74
+ if (!props) return {};
75
+ const resolved = {};
76
+ for (const [key, value] of Object.entries(props)) {
77
+ resolved[key] = resolveDeep(value, context);
78
+ }
79
+ return resolved;
80
+ }
81
+
82
+ /**
83
+ * Recursively resolve binding expressions in a value (including nested objects/arrays).
84
+ */
85
+ function resolveDeep(value, context) {
86
+ if (Array.isArray(value)) {
87
+ return value.map(item => resolveDeep(item, context));
88
+ }
89
+ if (typeof value === 'object' && value !== null) {
90
+ const result = {};
91
+ for (const [k, v] of Object.entries(value)) {
92
+ result[k] = resolveDeep(v, context);
93
+ }
94
+ return result;
95
+ }
96
+ return resolveValue(value, context);
97
+ }
98
+ //# sourceMappingURL=bindingResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FULL_BINDING_RE","INLINE_BINDING_RE","evaluateExpression","expr","context","keys","Object","values","map","k","fn","Function","undefined","resolveValue","value","fullMatch","exec","trim","test","lastIndex","replace","_","resolved","String","resolveProps","props","key","entries","resolveDeep","Array","isArray","item","result","v"],"sourceRoot":"../../../src","sources":["renderer/bindingResolver.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.evaluateIf = evaluateIf;
7
+ var _bindingResolver = require("./bindingResolver");
8
+ /**
9
+ * Evaluate the `if` expression of a SchemaNode against the current context.
10
+ *
11
+ * Returns true → node should render
12
+ * Returns false → node (and its entire subtree) should be skipped
13
+ *
14
+ * Falsy values: false, null, undefined, 0, "" all hide the node.
15
+ * When `ifExpr` is undefined/null the node always renders.
16
+ *
17
+ * Accepts `unknown` to match the transformer's `if?: unknown` output:
18
+ * - String values are resolved as {{}} binding expressions
19
+ * - Non-string values (boolean, number, null) are coerced directly
20
+ */
21
+ function evaluateIf(ifExpr, context) {
22
+ if (ifExpr === undefined || ifExpr === null) return true;
23
+
24
+ // Non-string: treat the value itself as the condition (e.g. `if: false`)
25
+ if (typeof ifExpr !== 'string') return Boolean(ifExpr);
26
+ const resolved = (0, _bindingResolver.resolveValue)(ifExpr, context);
27
+
28
+ // Standard falsy check — any falsy value hides the node
29
+ return Boolean(resolved);
30
+ }
31
+ //# sourceMappingURL=conditionalEvaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_bindingResolver","require","evaluateIf","ifExpr","context","undefined","Boolean","resolved","resolveValue"],"sourceRoot":"../../../src","sources":["renderer/conditionalEvaluator.ts"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CACxBC,MAAe,EACfC,OAAgC,EACvB;EACT,IAAID,MAAM,KAAKE,SAAS,IAAIF,MAAM,KAAK,IAAI,EAAE,OAAO,IAAI;;EAExD;EACA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE,OAAOG,OAAO,CAACH,MAAM,CAAC;EAEtD,MAAMI,QAAQ,GAAG,IAAAC,6BAAY,EAACL,MAAM,EAAEC,OAAO,CAAC;;EAE9C;EACA,OAAOE,OAAO,CAACC,QAAQ,CAAC;AAC1B","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderNode = renderNode;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _bindings = require("./bindings");
9
+ var _conditions = require("./conditions");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * Called by the host app whenever an action is triggered.
13
+ * `eventName` is the prop key (e.g. "onPress").
14
+ * `action` is the resolved action descriptor from the schema.
15
+ */
16
+
17
+ /**
18
+ * Recursively render a single PushframeNode.
19
+ *
20
+ * Returns null when:
21
+ * - The node's condition evaluates to false
22
+ * - The node's type is not found in the registry
23
+ */
24
+ function renderNode({
25
+ node,
26
+ context,
27
+ registry,
28
+ onAction,
29
+ key
30
+ }) {
31
+ // 1. Evaluate conditions — skip if false.
32
+ if (!(0, _conditions.evaluateCondition)(node.conditions, context)) {
33
+ return null;
34
+ }
35
+
36
+ // 2. Look up the component.
37
+ const Component = registry.get(node.type);
38
+ if (!Component) {
39
+ console.warn(`[Pushframe] No component registered for type "${node.type}". ` + `Registered types: ${registry.types().join(', ')}`);
40
+ return null;
41
+ }
42
+
43
+ // 3. Resolve props.
44
+ const resolvedProps = (0, _bindings.resolveProps)(node.props, context);
45
+
46
+ // 4. Build action callbacks and merge into props.
47
+ if (node.actions) {
48
+ mergeActionCallbacks(resolvedProps, node.actions, onAction);
49
+ }
50
+
51
+ // 5. Render children recursively.
52
+ const childOptions = onAction ? {
53
+ context,
54
+ registry,
55
+ onAction
56
+ } : {
57
+ context,
58
+ registry
59
+ };
60
+ const children = node.children && node.children.length > 0 ? node.children.map((child, index) => renderNode({
61
+ node: child,
62
+ key: `${child.type}-${index}`,
63
+ ...childOptions
64
+ })) : undefined;
65
+
66
+ // Helper for data-driven components (e.g. FlatList) to render a template
67
+ // node multiple times with different context (e.g. one render per list item).
68
+ const renderChild = (childNode, contextOverride) => renderNode({
69
+ node: childNode,
70
+ context: contextOverride ? {
71
+ ...context,
72
+ ...contextOverride
73
+ } : context,
74
+ registry,
75
+ onAction
76
+ });
77
+
78
+ // 6. Build component props — only include onAction when defined
79
+ // (required by exactOptionalPropertyTypes).
80
+ const componentProps = {
81
+ props: resolvedProps,
82
+ children,
83
+ rawChildren: node.children,
84
+ renderChild
85
+ };
86
+ return /*#__PURE__*/_react.default.createElement(Component, {
87
+ key,
88
+ ...componentProps
89
+ });
90
+ }
91
+
92
+ /**
93
+ * For each entry in the actions map, inject a callback function into resolvedProps
94
+ * so the component can call e.g. `props.onPress()` without coupling to the schema.
95
+ */
96
+ function mergeActionCallbacks(resolvedProps, actions, onAction) {
97
+ for (const [eventName, action] of Object.entries(actions)) {
98
+ resolvedProps[eventName] = () => {
99
+ if (onAction) {
100
+ onAction(eventName, action);
101
+ } else {
102
+ console.warn(`[Pushframe] Action "${eventName}" fired but no onAction handler was provided.`);
103
+ }
104
+ };
105
+ }
106
+ }
107
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_bindings","_conditions","e","__esModule","default","renderNode","node","context","registry","onAction","key","evaluateCondition","conditions","Component","get","type","console","warn","types","join","resolvedProps","resolveProps","props","actions","mergeActionCallbacks","childOptions","children","length","map","child","index","undefined","renderChild","childNode","contextOverride","componentProps","rawChildren","React","createElement","eventName","action","Object","entries"],"sourceRoot":"../../src","sources":["renderer.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SCHEMA_VERSION = void 0;
7
+ exports.isBinding = isBinding;
8
+ /**
9
+ * Pushframe Schema — typed definitions for screen definitions.
10
+ *
11
+ * A screen is described as a tree of PushframeNode objects.
12
+ * Props can be static values OR data-bindings via { "$bind": "path.to.value" }.
13
+ * Conditions gate whether a node renders at all.
14
+ * Actions declare event handlers; the host app is responsible for handling them.
15
+ */
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Primitive schema version
19
+ // ---------------------------------------------------------------------------
20
+
21
+ const SCHEMA_VERSION = exports.SCHEMA_VERSION = '1.0';
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Data binding
25
+ // ---------------------------------------------------------------------------
26
+
27
+ /**
28
+ * A binding reference to a value in the runtime context.
29
+ * e.g. { "$bind": "user.firstName" }
30
+ */
31
+
32
+ function isBinding(value) {
33
+ return typeof value === 'object' && value !== null && '$bind' in value && typeof value['$bind'] === 'string';
34
+ }
35
+
36
+ /**
37
+ * A prop value is either a static primitive / object, or a binding.
38
+ */
39
+
40
+ // ---------------------------------------------------------------------------
41
+ // Conditions
42
+ // ---------------------------------------------------------------------------
43
+
44
+ /**
45
+ * A condition gates whether a node should render.
46
+ *
47
+ * Supported operators:
48
+ * equals — strict equality (===)
49
+ * notEquals — strict inequality (!==)
50
+ * truthy — if the resolved value is truthy (no `value` needed)
51
+ * falsy — if the resolved value is falsy (no `value` needed)
52
+ */
53
+
54
+ // ---------------------------------------------------------------------------
55
+ // Actions
56
+ // ---------------------------------------------------------------------------
57
+
58
+ /** Navigate to another screen by ID. */
59
+
60
+ /** Emit a named custom event. The host app decides what to do with it. */
61
+
62
+ // ---------------------------------------------------------------------------
63
+ // Node
64
+ // ---------------------------------------------------------------------------
65
+
66
+ /**
67
+ * A single node in the UI tree.
68
+ *
69
+ * `type` maps to a registered component (e.g. "stack", "text", "button", "image").
70
+ * `props` are passed (after binding resolution) directly to the component.
71
+ * `children` are rendered recursively.
72
+ * `conditions` — when present, node is skipped if the condition evaluates to false.
73
+ * `actions` — event handler definitions; passed to the component as resolved callbacks.
74
+ */
75
+
76
+ // ---------------------------------------------------------------------------
77
+ // Screen definition
78
+ // ---------------------------------------------------------------------------
79
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SCHEMA_VERSION","exports","isBinding","value"],"sourceRoot":"../../src","sources":["schema.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO,MAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,KAAc;;AAG5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAKO,SAASE,SAASA,CAACC,KAAc,EAAoB;EAC1D,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,OAAO,IAAIA,KAAK,IAChB,OAAQA,KAAK,CAA6B,OAAO,CAAC,KAAK,QAAQ;AAEnE;;AAEA;AACA;AACA;;AAYA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;;AAEA;;AAOA;;AAWA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA","ignoreList":[]}