@pushframe/sdk 0.1.5 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/PushframeProvider.js +69 -0
- package/lib/commonjs/PushframeProvider.js.map +1 -0
- package/lib/commonjs/PushframeScreen.js +69 -0
- package/lib/commonjs/PushframeScreen.js.map +1 -0
- package/lib/commonjs/bindings.js +73 -0
- package/lib/commonjs/bindings.js.map +1 -0
- package/lib/commonjs/components/ButtonComponent.js +72 -0
- package/lib/commonjs/components/ButtonComponent.js.map +1 -0
- package/lib/commonjs/components/FlatListComponent.js +73 -0
- package/lib/commonjs/components/FlatListComponent.js.map +1 -0
- package/lib/commonjs/components/ImageComponent.js +67 -0
- package/lib/commonjs/components/ImageComponent.js.map +1 -0
- package/lib/commonjs/components/PushFrameComponent.js +179 -0
- package/lib/commonjs/components/PushFrameComponent.js.map +1 -0
- package/lib/commonjs/components/PushFrameProvider.js +115 -0
- package/lib/commonjs/components/PushFrameProvider.js.map +1 -0
- package/lib/commonjs/components/PushFrameScreen.js +39 -0
- package/lib/commonjs/components/PushFrameScreen.js.map +1 -0
- package/lib/commonjs/components/ScrollViewComponent.js +64 -0
- package/lib/commonjs/components/ScrollViewComponent.js.map +1 -0
- package/lib/commonjs/components/StackComponent.js +61 -0
- package/lib/commonjs/components/StackComponent.js.map +1 -0
- package/lib/commonjs/components/TextComponent.js +62 -0
- package/lib/commonjs/components/TextComponent.js.map +1 -0
- package/lib/commonjs/conditions.js +44 -0
- package/lib/commonjs/conditions.js.map +1 -0
- package/lib/commonjs/context/PushFrameContext.js +33 -0
- package/lib/commonjs/context/PushFrameContext.js.map +1 -0
- package/lib/commonjs/index.js +200 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/overlays/BottomSheetHost.js +144 -0
- package/lib/commonjs/overlays/BottomSheetHost.js.map +1 -0
- package/lib/commonjs/overlays/ToastHost.js +135 -0
- package/lib/commonjs/overlays/ToastHost.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/primitives/ActivityIndicator.js +24 -0
- package/lib/commonjs/primitives/ActivityIndicator.js.map +1 -0
- package/lib/commonjs/primitives/FlatList.js +34 -0
- package/lib/commonjs/primitives/FlatList.js.map +1 -0
- package/lib/commonjs/primitives/Image.js +33 -0
- package/lib/commonjs/primitives/Image.js.map +1 -0
- package/lib/commonjs/primitives/KeyboardAvoidingView.js +24 -0
- package/lib/commonjs/primitives/KeyboardAvoidingView.js.map +1 -0
- package/lib/commonjs/primitives/Modal.js +24 -0
- package/lib/commonjs/primitives/Modal.js.map +1 -0
- package/lib/commonjs/primitives/Pressable.js +26 -0
- package/lib/commonjs/primitives/Pressable.js.map +1 -0
- package/lib/commonjs/primitives/SafeAreaView.js +38 -0
- package/lib/commonjs/primitives/SafeAreaView.js.map +1 -0
- package/lib/commonjs/primitives/ScrollView.js +26 -0
- package/lib/commonjs/primitives/ScrollView.js.map +1 -0
- package/lib/commonjs/primitives/StatusBar.js +24 -0
- package/lib/commonjs/primitives/StatusBar.js.map +1 -0
- package/lib/commonjs/primitives/Switch.js +28 -0
- package/lib/commonjs/primitives/Switch.js.map +1 -0
- package/lib/commonjs/primitives/Text.js +37 -0
- package/lib/commonjs/primitives/Text.js.map +1 -0
- package/lib/commonjs/primitives/TextInput.js +31 -0
- package/lib/commonjs/primitives/TextInput.js.map +1 -0
- package/lib/commonjs/primitives/View.js +24 -0
- package/lib/commonjs/primitives/View.js.map +1 -0
- package/lib/commonjs/primitives/index.js +97 -0
- package/lib/commonjs/primitives/index.js.map +1 -0
- package/lib/commonjs/registry/ComponentRegistry.js +70 -0
- package/lib/commonjs/registry/ComponentRegistry.js.map +1 -0
- package/lib/commonjs/registry.js +94 -0
- package/lib/commonjs/registry.js.map +1 -0
- package/lib/commonjs/renderer/RecursiveRenderer.js +202 -0
- package/lib/commonjs/renderer/RecursiveRenderer.js.map +1 -0
- package/lib/commonjs/renderer/bindingResolver.js +98 -0
- package/lib/commonjs/renderer/bindingResolver.js.map +1 -0
- package/lib/commonjs/renderer/conditionalEvaluator.js +31 -0
- package/lib/commonjs/renderer/conditionalEvaluator.js.map +1 -0
- package/lib/commonjs/renderer.js +107 -0
- package/lib/commonjs/renderer.js.map +1 -0
- package/lib/commonjs/schema.js +79 -0
- package/lib/commonjs/schema.js.map +1 -0
- package/lib/commonjs/transformer/index.js +1055 -0
- package/lib/commonjs/transformer/index.js.map +1 -0
- package/lib/commonjs/transport.js +86 -0
- package/lib/commonjs/transport.js.map +1 -0
- package/lib/module/PushframeProvider.js +62 -0
- package/lib/module/PushframeProvider.js.map +1 -0
- package/lib/module/PushframeScreen.js +65 -0
- package/lib/module/PushframeScreen.js.map +1 -0
- package/lib/module/bindings.js +68 -0
- package/lib/module/bindings.js.map +1 -0
- package/lib/module/components/ButtonComponent.js +67 -0
- package/lib/module/components/ButtonComponent.js.map +1 -0
- package/lib/module/components/FlatListComponent.js +68 -0
- package/lib/module/components/FlatListComponent.js.map +1 -0
- package/lib/module/components/ImageComponent.js +62 -0
- package/lib/module/components/ImageComponent.js.map +1 -0
- package/lib/module/components/PushFrameComponent.js +174 -0
- package/lib/module/components/PushFrameComponent.js.map +1 -0
- package/lib/module/components/PushFrameProvider.js +110 -0
- package/lib/module/components/PushFrameProvider.js.map +1 -0
- package/lib/module/components/PushFrameScreen.js +34 -0
- package/lib/module/components/PushFrameScreen.js.map +1 -0
- package/lib/module/components/ScrollViewComponent.js +59 -0
- package/lib/module/components/ScrollViewComponent.js.map +1 -0
- package/lib/module/components/StackComponent.js +56 -0
- package/lib/module/components/StackComponent.js.map +1 -0
- package/lib/module/components/TextComponent.js +57 -0
- package/lib/module/components/TextComponent.js.map +1 -0
- package/lib/module/conditions.js +40 -0
- package/lib/module/conditions.js.map +1 -0
- package/lib/module/context/PushFrameContext.js +29 -0
- package/lib/module/context/PushFrameContext.js.map +1 -0
- package/lib/module/index.js +99 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/overlays/BottomSheetHost.js +139 -0
- package/lib/module/overlays/BottomSheetHost.js.map +1 -0
- package/lib/module/overlays/ToastHost.js +130 -0
- package/lib/module/overlays/ToastHost.js.map +1 -0
- package/lib/module/primitives/ActivityIndicator.js +19 -0
- package/lib/module/primitives/ActivityIndicator.js.map +1 -0
- package/lib/module/primitives/FlatList.js +29 -0
- package/lib/module/primitives/FlatList.js.map +1 -0
- package/lib/module/primitives/Image.js +28 -0
- package/lib/module/primitives/Image.js.map +1 -0
- package/lib/module/primitives/KeyboardAvoidingView.js +19 -0
- package/lib/module/primitives/KeyboardAvoidingView.js.map +1 -0
- package/lib/module/primitives/Modal.js +19 -0
- package/lib/module/primitives/Modal.js.map +1 -0
- package/lib/module/primitives/Pressable.js +21 -0
- package/lib/module/primitives/Pressable.js.map +1 -0
- package/lib/module/primitives/SafeAreaView.js +33 -0
- package/lib/module/primitives/SafeAreaView.js.map +1 -0
- package/lib/module/primitives/ScrollView.js +21 -0
- package/lib/module/primitives/ScrollView.js.map +1 -0
- package/lib/module/primitives/StatusBar.js +19 -0
- package/lib/module/primitives/StatusBar.js.map +1 -0
- package/lib/module/primitives/Switch.js +23 -0
- package/lib/module/primitives/Switch.js.map +1 -0
- package/lib/module/primitives/Text.js +32 -0
- package/lib/module/primitives/Text.js.map +1 -0
- package/lib/module/primitives/TextInput.js +26 -0
- package/lib/module/primitives/TextInput.js.map +1 -0
- package/lib/module/primitives/View.js +19 -0
- package/lib/module/primitives/View.js.map +1 -0
- package/lib/module/primitives/index.js +16 -0
- package/lib/module/primitives/index.js.map +1 -0
- package/lib/module/registry/ComponentRegistry.js +66 -0
- package/lib/module/registry/ComponentRegistry.js.map +1 -0
- package/lib/module/registry.js +88 -0
- package/lib/module/registry.js.map +1 -0
- package/lib/module/renderer/RecursiveRenderer.js +197 -0
- package/lib/module/renderer/RecursiveRenderer.js.map +1 -0
- package/lib/module/renderer/bindingResolver.js +92 -0
- package/lib/module/renderer/bindingResolver.js.map +1 -0
- package/lib/module/renderer/conditionalEvaluator.js +28 -0
- package/lib/module/renderer/conditionalEvaluator.js.map +1 -0
- package/lib/module/renderer.js +103 -0
- package/lib/module/renderer.js.map +1 -0
- package/lib/module/schema.js +74 -0
- package/lib/module/schema.js.map +1 -0
- package/lib/module/transformer/index.js +1051 -0
- package/lib/module/transformer/index.js.map +1 -0
- package/lib/module/transport.js +82 -0
- package/lib/module/transport.js.map +1 -0
- package/lib/typescript/PushframeProvider.d.ts +58 -0
- package/lib/typescript/PushframeProvider.d.ts.map +1 -0
- package/lib/typescript/PushframeScreen.d.ts +36 -0
- package/lib/typescript/PushframeScreen.d.ts.map +1 -0
- package/lib/typescript/bindings.d.ts +29 -0
- package/lib/typescript/bindings.d.ts.map +1 -0
- package/lib/typescript/components/ButtonComponent.d.ts +11 -0
- package/lib/typescript/components/ButtonComponent.d.ts.map +1 -0
- package/lib/typescript/components/FlatListComponent.d.ts +28 -0
- package/lib/typescript/components/FlatListComponent.d.ts.map +1 -0
- package/lib/typescript/components/ImageComponent.d.ts +12 -0
- package/lib/typescript/components/ImageComponent.d.ts.map +1 -0
- package/lib/typescript/components/PushFrameComponent.d.ts +48 -0
- package/lib/typescript/components/PushFrameComponent.d.ts.map +1 -0
- package/lib/typescript/components/PushFrameProvider.d.ts +51 -0
- package/lib/typescript/components/PushFrameProvider.d.ts.map +1 -0
- package/lib/typescript/components/PushFrameScreen.d.ts +15 -0
- package/lib/typescript/components/PushFrameScreen.d.ts.map +1 -0
- package/lib/typescript/components/ScrollViewComponent.d.ts +19 -0
- package/lib/typescript/components/ScrollViewComponent.d.ts.map +1 -0
- package/lib/typescript/components/StackComponent.d.ts +16 -0
- package/lib/typescript/components/StackComponent.d.ts.map +1 -0
- package/lib/typescript/components/TextComponent.d.ts +13 -0
- package/lib/typescript/components/TextComponent.d.ts.map +1 -0
- package/lib/typescript/conditions.d.ts +12 -0
- package/lib/typescript/conditions.d.ts.map +1 -0
- package/lib/typescript/context/PushFrameContext.d.ts +57 -0
- package/lib/typescript/context/PushFrameContext.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +74 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/overlays/BottomSheetHost.d.ts +21 -0
- package/lib/typescript/overlays/BottomSheetHost.d.ts.map +1 -0
- package/lib/typescript/overlays/ToastHost.d.ts +12 -0
- package/lib/typescript/overlays/ToastHost.d.ts.map +1 -0
- package/lib/typescript/primitives/ActivityIndicator.d.ts +12 -0
- package/lib/typescript/primitives/ActivityIndicator.d.ts.map +1 -0
- package/lib/typescript/primitives/FlatList.d.ts +29 -0
- package/lib/typescript/primitives/FlatList.d.ts.map +1 -0
- package/lib/typescript/primitives/Image.d.ts +20 -0
- package/lib/typescript/primitives/Image.d.ts.map +1 -0
- package/lib/typescript/primitives/KeyboardAvoidingView.d.ts +12 -0
- package/lib/typescript/primitives/KeyboardAvoidingView.d.ts.map +1 -0
- package/lib/typescript/primitives/Modal.d.ts +12 -0
- package/lib/typescript/primitives/Modal.d.ts.map +1 -0
- package/lib/typescript/primitives/Pressable.d.ts +14 -0
- package/lib/typescript/primitives/Pressable.d.ts.map +1 -0
- package/lib/typescript/primitives/SafeAreaView.d.ts +20 -0
- package/lib/typescript/primitives/SafeAreaView.d.ts.map +1 -0
- package/lib/typescript/primitives/ScrollView.d.ts +15 -0
- package/lib/typescript/primitives/ScrollView.d.ts.map +1 -0
- package/lib/typescript/primitives/StatusBar.d.ts +12 -0
- package/lib/typescript/primitives/StatusBar.d.ts.map +1 -0
- package/lib/typescript/primitives/Switch.d.ts +19 -0
- package/lib/typescript/primitives/Switch.d.ts.map +1 -0
- package/lib/typescript/primitives/Text.d.ts +25 -0
- package/lib/typescript/primitives/Text.d.ts.map +1 -0
- package/lib/typescript/primitives/TextInput.d.ts +25 -0
- package/lib/typescript/primitives/TextInput.d.ts.map +1 -0
- package/lib/typescript/primitives/View.d.ts +12 -0
- package/lib/typescript/primitives/View.d.ts.map +1 -0
- package/lib/typescript/primitives/index.d.ts +27 -0
- package/lib/typescript/primitives/index.d.ts.map +1 -0
- package/lib/typescript/registry/ComponentRegistry.d.ts +21 -0
- package/lib/typescript/registry/ComponentRegistry.d.ts.map +1 -0
- package/lib/typescript/registry.d.ts +57 -0
- package/lib/typescript/registry.d.ts.map +1 -0
- package/lib/typescript/renderer/RecursiveRenderer.d.ts +32 -0
- package/lib/typescript/renderer/RecursiveRenderer.d.ts.map +1 -0
- package/lib/typescript/renderer/bindingResolver.d.ts +26 -0
- package/lib/typescript/renderer/bindingResolver.d.ts.map +1 -0
- package/lib/typescript/renderer/conditionalEvaluator.d.ts +15 -0
- package/lib/typescript/renderer/conditionalEvaluator.d.ts.map +1 -0
- package/lib/typescript/renderer.d.ts +29 -0
- package/lib/typescript/renderer.d.ts.map +1 -0
- package/lib/typescript/schema.d.ts +84 -0
- package/lib/typescript/schema.d.ts.map +1 -0
- package/lib/typescript/transformer/index.d.ts +49 -0
- package/lib/typescript/transformer/index.d.ts.map +1 -0
- package/lib/typescript/transport.d.ts +19 -0
- package/lib/typescript/transport.d.ts.map +1 -0
- package/package.json +20 -18
- package/src/PushframeProvider.tsx +119 -0
- package/src/PushframeScreen.tsx +107 -0
- package/src/bindings.ts +72 -0
- package/src/components/ButtonComponent.tsx +87 -0
- package/src/components/FlatListComponent.tsx +86 -0
- package/src/components/ImageComponent.tsx +70 -0
- package/src/components/PushFrameComponent.tsx +221 -0
- package/src/components/PushFrameProvider.tsx +177 -0
- package/src/components/PushFrameScreen.tsx +30 -0
- package/src/components/ScrollViewComponent.tsx +65 -0
- package/src/components/StackComponent.tsx +69 -0
- package/src/components/TextComponent.tsx +60 -0
- package/src/conditions.ts +46 -0
- package/src/context/PushFrameContext.ts +89 -0
- package/src/index.ts +119 -0
- package/src/overlays/BottomSheetHost.tsx +175 -0
- package/src/overlays/ToastHost.tsx +147 -0
- package/src/primitives/ActivityIndicator.tsx +21 -0
- package/src/primitives/FlatList.tsx +49 -0
- package/src/primitives/Image.tsx +26 -0
- package/src/primitives/KeyboardAvoidingView.tsx +21 -0
- package/src/primitives/Modal.tsx +17 -0
- package/src/primitives/Pressable.tsx +19 -0
- package/src/primitives/SafeAreaView.tsx +42 -0
- package/src/primitives/ScrollView.tsx +21 -0
- package/src/primitives/StatusBar.tsx +17 -0
- package/src/primitives/Switch.tsx +24 -0
- package/src/primitives/Text.tsx +43 -0
- package/src/primitives/TextInput.tsx +42 -0
- package/src/primitives/View.tsx +17 -0
- package/src/primitives/index.ts +38 -0
- package/src/registry/ComponentRegistry.ts +99 -0
- package/src/registry.ts +99 -0
- package/src/renderer/RecursiveRenderer.tsx +242 -0
- package/src/renderer/bindingResolver.ts +94 -0
- package/src/renderer/conditionalEvaluator.ts +29 -0
- package/src/renderer.tsx +124 -0
- package/src/schema.ts +132 -0
- package/src/transformer/index.ts +1016 -0
- package/src/transport.ts +104 -0
- package/dist/index.d.mts +0 -534
- package/dist/index.d.ts +0 -534
- package/dist/index.js +0 -1572
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1541
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Switch as RNSwitch } from 'react-native';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Thin wrapper over React Native Switch.
|
|
8
|
+
* Maps Pushframe schema trigger to RN event prop:
|
|
9
|
+
* onChange → onValueChange
|
|
10
|
+
* Strips `if`, `actions`, `onChange` before forwarding to RN.
|
|
11
|
+
*/
|
|
12
|
+
export function Switch({
|
|
13
|
+
if: _if,
|
|
14
|
+
actions: _actions,
|
|
15
|
+
onChange,
|
|
16
|
+
...rest
|
|
17
|
+
}) {
|
|
18
|
+
return /*#__PURE__*/_jsx(RNSwitch, {
|
|
19
|
+
onValueChange: onChange,
|
|
20
|
+
...rest
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Switch","RNSwitch","jsx","_jsx","if","_if","actions","_actions","onChange","rest","onValueChange"],"sourceRoot":"../../../src","sources":["primitives/Switch.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,IAAIC,QAAQ,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAclD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASH,MAAMA,CAAC;EAAEI,EAAE,EAAEC,GAAG;EAAEC,OAAO,EAAEC,QAAQ;EAAEC,QAAQ;EAAE,GAAGC;AAA2B,CAAC,EAAE;EAC9F,oBAAON,IAAA,CAACF,QAAQ;IAACS,aAAa,EAAEF,QAAS;IAAA,GAAKC;EAAI,CAAG,CAAC;AACxD","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Text as RNText } from 'react-native';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Thin wrapper over React Native Text.
|
|
8
|
+
* Strips `if`, `actions`, `content` before forwarding to RN.
|
|
9
|
+
* Display priority: value > content > children (children remain in rest).
|
|
10
|
+
*/
|
|
11
|
+
export function Text({
|
|
12
|
+
if: _if,
|
|
13
|
+
actions: _actions,
|
|
14
|
+
value,
|
|
15
|
+
content,
|
|
16
|
+
...rest
|
|
17
|
+
}) {
|
|
18
|
+
// When value or content is provided it takes precedence over JSX children
|
|
19
|
+
// (which are part of rest via RNTextProps inheritance).
|
|
20
|
+
const textContent = value !== undefined ? value : content;
|
|
21
|
+
if (textContent !== undefined) {
|
|
22
|
+
return /*#__PURE__*/_jsx(RNText, {
|
|
23
|
+
...rest,
|
|
24
|
+
children: textContent
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// No explicit text content — forward rest as-is (includes any children prop)
|
|
28
|
+
return /*#__PURE__*/_jsx(RNText, {
|
|
29
|
+
...rest
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Text","RNText","jsx","_jsx","if","_if","actions","_actions","value","content","rest","textContent","undefined","children"],"sourceRoot":"../../../src","sources":["primitives/Text.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,IAAIC,MAAM,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAqB9C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASH,IAAIA,CAAC;EACnBI,EAAE,EAAEC,GAAG;EACPC,OAAO,EAAEC,QAAQ;EACjBC,KAAK;EACLC,OAAO;EACP,GAAGC;AACe,CAAC,EAAE;EACrB;EACA;EACA,MAAMC,WAAW,GAAGH,KAAK,KAAKI,SAAS,GAAGJ,KAAK,GAAGC,OAAO;EACzD,IAAIE,WAAW,KAAKC,SAAS,EAAE;IAC7B,oBAAOT,IAAA,CAACF,MAAM;MAAA,GAAKS,IAAI;MAAAG,QAAA,EAAGF;IAAW,CAAS,CAAC;EACjD;EACA;EACA,oBAAOR,IAAA,CAACF,MAAM;IAAA,GAAKS;EAAI,CAAG,CAAC;AAC7B","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { TextInput as RNTextInput } from 'react-native';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Thin wrapper over React Native TextInput.
|
|
8
|
+
* Maps Pushframe schema triggers to RN event props:
|
|
9
|
+
* onChange → onChangeText
|
|
10
|
+
* onSubmit → onSubmitEditing
|
|
11
|
+
* Strips `if`, `actions`, `onChange`, `onSubmit` before forwarding to RN.
|
|
12
|
+
*/
|
|
13
|
+
export function TextInput({
|
|
14
|
+
if: _if,
|
|
15
|
+
actions: _actions,
|
|
16
|
+
onChange,
|
|
17
|
+
onSubmit,
|
|
18
|
+
...rest
|
|
19
|
+
}) {
|
|
20
|
+
return /*#__PURE__*/_jsx(RNTextInput, {
|
|
21
|
+
onChangeText: onChange,
|
|
22
|
+
onSubmitEditing: onSubmit ? () => onSubmit() : undefined,
|
|
23
|
+
...rest
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=TextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","TextInput","RNTextInput","jsx","_jsx","if","_if","actions","_actions","onChange","onSubmit","rest","onChangeText","onSubmitEditing","undefined"],"sourceRoot":"../../../src","sources":["primitives/TextInput.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,IAAIC,WAAW,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASH,SAASA,CAAC;EACxBI,EAAE,EAAEC,GAAG;EACPC,OAAO,EAAEC,QAAQ;EACjBC,QAAQ;EACRC,QAAQ;EACR,GAAGC;AACoB,CAAC,EAAE;EAC1B,oBACEP,IAAA,CAACF,WAAW;IACVU,YAAY,EAAEH,QAAS;IACvBI,eAAe,EAAEH,QAAQ,GAAG,MAAMA,QAAQ,CAAC,CAAC,GAAGI,SAAU;IAAA,GACrDH;EAAI,CACT,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { View as RNView } from 'react-native';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Thin wrapper over React Native View.
|
|
8
|
+
* Strips `if`, `actions` before forwarding to RN.
|
|
9
|
+
*/
|
|
10
|
+
export function View({
|
|
11
|
+
if: _if,
|
|
12
|
+
actions: _actions,
|
|
13
|
+
...rest
|
|
14
|
+
}) {
|
|
15
|
+
return /*#__PURE__*/_jsx(RNView, {
|
|
16
|
+
...rest
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=View.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","RNView","jsx","_jsx","if","_if","actions","_actions","rest"],"sourceRoot":"../../../src","sources":["primitives/View.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,IAAIC,MAAM,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAS9C;AACA;AACA;AACA;AACA,OAAO,SAASH,IAAIA,CAAC;EAAEI,EAAE,EAAEC,GAAG;EAAEC,OAAO,EAAEC,QAAQ;EAAE,GAAGC;AAAyB,CAAC,EAAE;EAChF,oBAAOL,IAAA,CAACF,MAAM;IAAA,GAAKO;EAAI,CAAG,CAAC;AAC7B","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { Text } from './Text';
|
|
4
|
+
export { View } from './View';
|
|
5
|
+
export { ScrollView } from './ScrollView';
|
|
6
|
+
export { Image } from './Image';
|
|
7
|
+
export { Pressable } from './Pressable';
|
|
8
|
+
export { TextInput } from './TextInput';
|
|
9
|
+
export { FlatList } from './FlatList';
|
|
10
|
+
export { Modal } from './Modal';
|
|
11
|
+
export { ActivityIndicator } from './ActivityIndicator';
|
|
12
|
+
export { Switch } from './Switch';
|
|
13
|
+
export { KeyboardAvoidingView } from './KeyboardAvoidingView';
|
|
14
|
+
export { SafeAreaView } from './SafeAreaView';
|
|
15
|
+
export { StatusBar } from './StatusBar';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Text","View","ScrollView","Image","Pressable","TextInput","FlatList","Modal","ActivityIndicator","Switch","KeyboardAvoidingView","SafeAreaView","StatusBar"],"sourceRoot":"../../../src","sources":["primitives/index.ts"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,QAAQ;AAG7B,SAASC,IAAI,QAAQ,QAAQ;AAG7B,SAASC,UAAU,QAAQ,cAAc;AAGzC,SAASC,KAAK,QAAQ,SAAS;AAG/B,SAASC,SAAS,QAAQ,aAAa;AAGvC,SAASC,SAAS,QAAQ,aAAa;AAGvC,SAASC,QAAQ,QAAQ,YAAY;AAGrC,SAASC,KAAK,QAAQ,SAAS;AAG/B,SAASC,iBAAiB,QAAQ,qBAAqB;AAGvD,SAASC,MAAM,QAAQ,UAAU;AAGjC,SAASC,oBAAoB,QAAQ,wBAAwB;AAG7D,SAASC,YAAY,QAAQ,gBAAgB;AAG7C,SAASC,SAAS,QAAQ,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Text } from '../primitives/Text';
|
|
4
|
+
import { View } from '../primitives/View';
|
|
5
|
+
import { ScrollView } from '../primitives/ScrollView';
|
|
6
|
+
import { Image } from '../primitives/Image';
|
|
7
|
+
import { Pressable } from '../primitives/Pressable';
|
|
8
|
+
import { TextInput } from '../primitives/TextInput';
|
|
9
|
+
import { FlatList } from '../primitives/FlatList';
|
|
10
|
+
import { Modal } from '../primitives/Modal';
|
|
11
|
+
import { ActivityIndicator } from '../primitives/ActivityIndicator';
|
|
12
|
+
import { Switch } from '../primitives/Switch';
|
|
13
|
+
import { KeyboardAvoidingView } from '../primitives/KeyboardAvoidingView';
|
|
14
|
+
import { SafeAreaView } from '../primitives/SafeAreaView';
|
|
15
|
+
import { StatusBar } from '../primitives/StatusBar';
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Built-in type → component mappings (cannot be overridden)
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
const BUILT_IN_TYPES = new Set(['text', 'view', 'scrollview', 'image', 'pressable', 'textinput', 'flatlist', 'modal', 'activityindicator', 'switch', 'keyboardavoidingview', 'safeareaview', 'statusbar']);
|
|
22
|
+
const BUILT_IN_COMPONENTS = new Map([['text', Text], ['view', View], ['scrollview', ScrollView], ['image', Image], ['pressable', Pressable], ['textinput', TextInput], ['flatlist', FlatList], ['modal', Modal], ['activityindicator', ActivityIndicator], ['switch', Switch], ['keyboardavoidingview', KeyboardAvoidingView], ['safeareaview', SafeAreaView], ['statusbar', StatusBar]]);
|
|
23
|
+
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// ComponentRegistry
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Maps component type strings to React components.
|
|
30
|
+
*
|
|
31
|
+
* Built-ins are always present and cannot be overridden.
|
|
32
|
+
* Developer-registered components are merged on top for non-conflicting types.
|
|
33
|
+
*/
|
|
34
|
+
export class ComponentRegistry {
|
|
35
|
+
constructor(developerComponents) {
|
|
36
|
+
// Start with built-ins
|
|
37
|
+
this.components = new Map(BUILT_IN_COMPONENTS);
|
|
38
|
+
|
|
39
|
+
// Merge developer components, skipping any that conflict with built-ins
|
|
40
|
+
if (developerComponents) {
|
|
41
|
+
for (const [type, component] of Object.entries(developerComponents)) {
|
|
42
|
+
if (BUILT_IN_TYPES.has(type)) {
|
|
43
|
+
console.warn(`[PushFrame] ComponentRegistry: "${type}" is a built-in type and cannot be overridden. ` + `Registration skipped.`);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
this.components.set(type, component);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a type string to its React component.
|
|
53
|
+
* Returns null if no component is registered for the type.
|
|
54
|
+
*/
|
|
55
|
+
resolve(type) {
|
|
56
|
+
return this.components.get(type) ?? null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns all registered type strings (useful for debugging).
|
|
61
|
+
*/
|
|
62
|
+
types() {
|
|
63
|
+
return Array.from(this.components.keys());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ComponentRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Text","View","ScrollView","Image","Pressable","TextInput","FlatList","Modal","ActivityIndicator","Switch","KeyboardAvoidingView","SafeAreaView","StatusBar","BUILT_IN_TYPES","Set","BUILT_IN_COMPONENTS","Map","ComponentRegistry","constructor","developerComponents","components","type","component","Object","entries","has","console","warn","set","resolve","get","types","Array","from","keys"],"sourceRoot":"../../../src","sources":["registry/ComponentRegistry.ts"],"mappings":";;AACA,SAASA,IAAI,QAAQ,oBAAoB;AACzC,SAASC,IAAI,QAAQ,oBAAoB;AACzC,SAASC,UAAU,QAAQ,0BAA0B;AACrD,SAASC,KAAK,QAAQ,qBAAqB;AAC3C,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,KAAK,QAAQ,qBAAqB;AAC3C,SAASC,iBAAiB,QAAQ,iCAAiC;AACnE,SAASC,MAAM,QAAQ,sBAAsB;AAC7C,SAASC,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,YAAY,QAAQ,4BAA4B;AACzD,SAASC,SAAS,QAAQ,yBAAyB;;AAEnD;AACA;AACA;;AAEA,MAAMC,cAAmC,GAAG,IAAIC,GAAG,CAAC,CAClD,MAAM,EACN,MAAM,EACN,YAAY,EACZ,OAAO,EACP,WAAW,EACX,WAAW,EACX,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,WAAW,CACZ,CAAC;AAEF,MAAMC,mBAAsF,GAC1F,IAAIC,GAAG,CAAC,CACN,CAAC,MAAM,EAAEhB,IAAI,CAAiD,EAC9D,CAAC,MAAM,EAAEC,IAAI,CAAiD,EAC9D,CAAC,YAAY,EAAEC,UAAU,CAAiD,EAC1E,CAAC,OAAO,EAAEC,KAAK,CAAiD,EAChE,CAAC,WAAW,EAAEC,SAAS,CAAiD,EACxE,CAAC,WAAW,EAAEC,SAAS,CAAiD,EACxE,CAAC,UAAU,EAAEC,QAAQ,CAA4D,EACjF,CAAC,OAAO,EAAEC,KAAK,CAAiD,EAChE,CAAC,mBAAmB,EAAEC,iBAAiB,CAAiD,EACxF,CAAC,QAAQ,EAAEC,MAAM,CAAiD,EAClE,CAAC,sBAAsB,EAAEC,oBAAoB,CAAiD,EAC9F,CAAC,cAAc,EAAEC,YAAY,CAAiD,EAC9E,CAAC,WAAW,EAAEC,SAAS,CAAiD,CACzE,CAAC;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,iBAAiB,CAAC;EAG7BC,WAAWA,CAACC,mBAAkE,EAAE;IAC9E;IACA,IAAI,CAACC,UAAU,GAAG,IAAIJ,GAAG,CAACD,mBAAmB,CAAC;;IAE9C;IACA,IAAII,mBAAmB,EAAE;MACvB,KAAK,MAAM,CAACE,IAAI,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,mBAAmB,CAAC,EAAE;QACnE,IAAIN,cAAc,CAACY,GAAG,CAACJ,IAAI,CAAC,EAAE;UAC5BK,OAAO,CAACC,IAAI,CACV,mCAAmCN,IAAI,iDAAiD,GACtF,uBACJ,CAAC;UACD;QACF;QACA,IAAI,CAACD,UAAU,CAACQ,GAAG,CAACP,IAAI,EAAEC,SAAyD,CAAC;MACtF;IACF;EACF;;EAEA;AACF;AACA;AACA;EACEO,OAAOA,CAACR,IAAY,EAAuD;IACzE,OAAO,IAAI,CAACD,UAAU,CAACU,GAAG,CAACT,IAAI,CAAC,IAAI,IAAI;EAC1C;;EAEA;AACF;AACA;EACEU,KAAKA,CAAA,EAAa;IAChB,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACb,UAAU,CAACc,IAAI,CAAC,CAAC,CAAC;EAC3C;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Props passed to every Pushframe component.
|
|
5
|
+
*
|
|
6
|
+
* `props` — fully-resolved (all $bind references substituted) props map.
|
|
7
|
+
* `children` — pre-rendered child nodes (if any).
|
|
8
|
+
* `onAction` — callback for emitting an action event back to the host app.
|
|
9
|
+
* `rawChildren` — raw schema child nodes, available for data-driven components
|
|
10
|
+
* (e.g. FlatList) that need to render the same template
|
|
11
|
+
* multiple times with different context.
|
|
12
|
+
* `renderChild` — render a schema node with an optional context override that
|
|
13
|
+
* gets merged into the parent context. Use this together with
|
|
14
|
+
* `rawChildren` to implement per-item rendering.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* ComponentRegistry maps a component type string (e.g. "stack") to its
|
|
19
|
+
* React component implementation.
|
|
20
|
+
*
|
|
21
|
+
* Use `createRegistry()` to construct one, then call `register()` to add
|
|
22
|
+
* custom components on top.
|
|
23
|
+
*/
|
|
24
|
+
export class ComponentRegistry {
|
|
25
|
+
components = new Map();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Register a component under the given type string.
|
|
29
|
+
* Calling register() with an existing type overwrites the previous entry,
|
|
30
|
+
* allowing host apps to override built-ins.
|
|
31
|
+
*/
|
|
32
|
+
register(type, component) {
|
|
33
|
+
this.components.set(type, component);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Look up a component by type string.
|
|
39
|
+
* Returns undefined if no component is registered for that type.
|
|
40
|
+
*/
|
|
41
|
+
get(type) {
|
|
42
|
+
return this.components.get(type);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Returns true if the registry contains an entry for the given type.
|
|
47
|
+
*/
|
|
48
|
+
has(type) {
|
|
49
|
+
return this.components.has(type);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Returns all registered type strings (useful for debugging).
|
|
54
|
+
*/
|
|
55
|
+
types() {
|
|
56
|
+
return Array.from(this.components.keys());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Build the default registry pre-loaded with all built-in components.
|
|
62
|
+
*/
|
|
63
|
+
export function createDefaultRegistry() {
|
|
64
|
+
// Lazy-import to keep tree-shaking effective when consumers only need
|
|
65
|
+
// a subset of built-ins.
|
|
66
|
+
const {
|
|
67
|
+
StackComponent
|
|
68
|
+
} = require('./components/StackComponent');
|
|
69
|
+
const {
|
|
70
|
+
TextComponent
|
|
71
|
+
} = require('./components/TextComponent');
|
|
72
|
+
const {
|
|
73
|
+
ButtonComponent
|
|
74
|
+
} = require('./components/ButtonComponent');
|
|
75
|
+
const {
|
|
76
|
+
ImageComponent
|
|
77
|
+
} = require('./components/ImageComponent');
|
|
78
|
+
const {
|
|
79
|
+
ScrollViewComponent
|
|
80
|
+
} = require('./components/ScrollViewComponent');
|
|
81
|
+
const {
|
|
82
|
+
FlatListComponent
|
|
83
|
+
} = require('./components/FlatListComponent');
|
|
84
|
+
return new ComponentRegistry().register('stack', StackComponent)
|
|
85
|
+
// 'screen' is a common server-side root container alias for stack
|
|
86
|
+
.register('screen', StackComponent).register('text', TextComponent).register('button', ButtonComponent).register('image', ImageComponent).register('scrollview', ScrollViewComponent).register('flatlist', FlatListComponent);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ComponentRegistry","components","Map","register","type","component","set","get","has","types","Array","from","keys","createDefaultRegistry","StackComponent","require","TextComponent","ButtonComponent","ImageComponent","ScrollViewComponent","FlatListComponent"],"sourceRoot":"../../src","sources":["registry.ts"],"mappings":";;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,iBAAiB,CAAC;EACZC,UAAU,GAAG,IAAIC,GAAG,CAA6B,CAAC;;EAEnE;AACF;AACA;AACA;AACA;EACEC,QAAQA,CACNC,IAAY,EACZC,SAAqC,EAC/B;IACN,IAAI,CAACJ,UAAU,CAACK,GAAG,CAACF,IAAI,EAAEC,SAA+B,CAAC;IAC1D,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEE,GAAGA,CAACH,IAAY,EAAkC;IAChD,OAAO,IAAI,CAACH,UAAU,CAACM,GAAG,CAACH,IAAI,CAAC;EAClC;;EAEA;AACF;AACA;EACEI,GAAGA,CAACJ,IAAY,EAAW;IACzB,OAAO,IAAI,CAACH,UAAU,CAACO,GAAG,CAACJ,IAAI,CAAC;EAClC;;EAEA;AACF;AACA;EACEK,KAAKA,CAAA,EAAa;IAChB,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACV,UAAU,CAACW,IAAI,CAAC,CAAC,CAAC;EAC3C;AACF;;AAEA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAA,EAAsB;EACzD;EACA;EACA,MAAM;IAAEC;EAAe,CAAC,GAAGC,OAAO,CAAC,6BAA6B,CAAC;EACjE,MAAM;IAAEC;EAAc,CAAC,GAAGD,OAAO,CAAC,4BAA4B,CAAC;EAC/D,MAAM;IAAEE;EAAgB,CAAC,GAAGF,OAAO,CAAC,8BAA8B,CAAC;EACnE,MAAM;IAAEG;EAAe,CAAC,GAAGH,OAAO,CAAC,6BAA6B,CAAC;EACjE,MAAM;IAAEI;EAAoB,CAAC,GAAGJ,OAAO,CAAC,kCAAkC,CAAC;EAC3E,MAAM;IAAEK;EAAkB,CAAC,GAAGL,OAAO,CAAC,gCAAgC,CAAC;EAEvE,OAAO,IAAIf,iBAAiB,CAAC,CAAC,CAC3BG,QAAQ,CAAC,OAAO,EAAEW,cAAc;EACjC;EAAA,CACCX,QAAQ,CAAC,QAAQ,EAAEW,cAAc,CAAC,CAClCX,QAAQ,CAAC,MAAM,EAAEa,aAAa,CAAC,CAC/Bb,QAAQ,CAAC,QAAQ,EAAEc,eAAe,CAAC,CACnCd,QAAQ,CAAC,OAAO,EAAEe,cAAc,CAAC,CACjCf,QAAQ,CAAC,YAAY,EAAEgB,mBAAmB,CAAC,CAC3ChB,QAAQ,CAAC,UAAU,EAAEiB,iBAAiB,CAAC;AAC5C","ignoreList":[]}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { resolveProps, resolveDeep, resolveValue } from './bindingResolver';
|
|
5
|
+
import { evaluateIf } from './conditionalEvaluator';
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Types
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Action wiring helpers
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Group an actions array by trigger name and produce a prop map where each
|
|
17
|
+
* trigger key maps to a callback that fires all actions for that trigger.
|
|
18
|
+
*/
|
|
19
|
+
function buildActionProps(actions, context, dispatchAction) {
|
|
20
|
+
// Group by trigger
|
|
21
|
+
const grouped = new Map();
|
|
22
|
+
for (const action of actions) {
|
|
23
|
+
const existing = grouped.get(action.trigger);
|
|
24
|
+
if (existing) {
|
|
25
|
+
existing.push(action);
|
|
26
|
+
} else {
|
|
27
|
+
grouped.set(action.trigger, [action]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const result = {};
|
|
31
|
+
for (const [trigger, triggerActions] of grouped) {
|
|
32
|
+
result[trigger] = (..._args) => {
|
|
33
|
+
for (const action of triggerActions) {
|
|
34
|
+
const resolvedPayload = action.payload !== undefined ? resolveDeep(action.payload, context) : undefined;
|
|
35
|
+
dispatchAction(action.action, resolvedPayload);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// FlatList special handling
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
function renderFlatListNode(node, context, registry, dispatchAction, fallbackComponent) {
|
|
47
|
+
// Resolve all props including the data/items binding
|
|
48
|
+
const resolvedProps = resolveProps(node.props, context);
|
|
49
|
+
|
|
50
|
+
// Build action props for the FlatList container itself
|
|
51
|
+
const actionProps = node.actions ? buildActionProps(node.actions, context, dispatchAction) : {};
|
|
52
|
+
|
|
53
|
+
// Support both `data` (transformer output) and `items` (legacy) for the array source.
|
|
54
|
+
// Extract and resolve; the primitive receives it as `items`.
|
|
55
|
+
const {
|
|
56
|
+
data: resolvedData,
|
|
57
|
+
items: resolvedItems,
|
|
58
|
+
keyExtractor: keyExtractorExpr,
|
|
59
|
+
direction,
|
|
60
|
+
numColumns,
|
|
61
|
+
visible: _visible,
|
|
62
|
+
_propValues: _pv,
|
|
63
|
+
...restProps
|
|
64
|
+
} = resolvedProps;
|
|
65
|
+
const items = Array.isArray(resolvedData) ? resolvedData : Array.isArray(resolvedItems) ? resolvedItems : [];
|
|
66
|
+
|
|
67
|
+
// Build a keyExtractor function if specified in schema
|
|
68
|
+
let keyExtractorFn;
|
|
69
|
+
if (typeof keyExtractorExpr === 'string') {
|
|
70
|
+
const extractorExpr = keyExtractorExpr;
|
|
71
|
+
keyExtractorFn = (item, index) => {
|
|
72
|
+
const itemContext = {
|
|
73
|
+
...context,
|
|
74
|
+
item,
|
|
75
|
+
index
|
|
76
|
+
};
|
|
77
|
+
const resolved = resolveValue(extractorExpr, itemContext);
|
|
78
|
+
return resolved !== undefined && resolved !== null ? String(resolved) : String(index);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// itemTemplate: per-item context merges { item, index } into current context
|
|
83
|
+
const renderItemFn = ({
|
|
84
|
+
item,
|
|
85
|
+
index
|
|
86
|
+
}) => {
|
|
87
|
+
const itemContext = {
|
|
88
|
+
...context,
|
|
89
|
+
item,
|
|
90
|
+
index
|
|
91
|
+
};
|
|
92
|
+
return /*#__PURE__*/_jsx(RecursiveRenderer, {
|
|
93
|
+
node: node.itemTemplate,
|
|
94
|
+
context: itemContext,
|
|
95
|
+
registry: registry,
|
|
96
|
+
dispatchAction: dispatchAction,
|
|
97
|
+
fallbackComponent: fallbackComponent
|
|
98
|
+
}, keyExtractorFn ? keyExtractorFn(item, index) : index);
|
|
99
|
+
};
|
|
100
|
+
const FlatListComponent = registry.resolve('flatlist');
|
|
101
|
+
if (!FlatListComponent) {
|
|
102
|
+
console.warn('[PushFrame] RecursiveRenderer: "flatlist" not found in registry.');
|
|
103
|
+
return fallbackComponent ? fallbackComponent : null;
|
|
104
|
+
}
|
|
105
|
+
return /*#__PURE__*/React.createElement(FlatListComponent, {
|
|
106
|
+
...restProps,
|
|
107
|
+
...actionProps,
|
|
108
|
+
items,
|
|
109
|
+
direction,
|
|
110
|
+
numColumns,
|
|
111
|
+
keyExtractor: keyExtractorFn,
|
|
112
|
+
renderItem: renderItemFn
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// RecursiveRenderer
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Stateless recursive renderer. Evaluates schema nodes and produces React elements.
|
|
122
|
+
*
|
|
123
|
+
* - Evaluates `if` expression (string or non-string); returns null when falsy
|
|
124
|
+
* - Handles `visible` prop: returns null when visible resolves to false
|
|
125
|
+
* - Handles FlatList nodes with per-item context injection via `itemTemplate`
|
|
126
|
+
* - Supports `data` (transformer) and `items` (legacy) as FlatList data source
|
|
127
|
+
* - Resolves all prop bindings against current context
|
|
128
|
+
* - Merges `_propValues` into child context (custom component prop injection)
|
|
129
|
+
* - Wires actions to component event handler props
|
|
130
|
+
* - Looks up component in registry; renders fallback or null when not found
|
|
131
|
+
* - Recurses into children
|
|
132
|
+
*/
|
|
133
|
+
export function RecursiveRenderer({
|
|
134
|
+
node,
|
|
135
|
+
context,
|
|
136
|
+
registry,
|
|
137
|
+
dispatchAction,
|
|
138
|
+
fallbackComponent
|
|
139
|
+
}) {
|
|
140
|
+
// 1. Evaluate conditional — skip entire subtree if falsy
|
|
141
|
+
if (!evaluateIf(node.if, context)) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// 2. FlatList special case
|
|
146
|
+
if (node.type === 'flatlist') {
|
|
147
|
+
return renderFlatListNode(node, context, registry, dispatchAction, fallbackComponent);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// 3. Resolve props
|
|
151
|
+
const resolvedProps = resolveProps(node.props, context);
|
|
152
|
+
|
|
153
|
+
// 4. Handle `visible` prop — transformer sets visible:false when a node is hidden.
|
|
154
|
+
// A missing or true value means visible; anything falsy hides the node.
|
|
155
|
+
if (resolvedProps.visible !== undefined && !resolvedProps.visible) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// 5. Extract SDK-internal props that must not be forwarded to RN components.
|
|
160
|
+
// `_propValues` carries custom-component instance overrides → merge into
|
|
161
|
+
// child context so nested bindings resolve against them.
|
|
162
|
+
const {
|
|
163
|
+
visible: _visible,
|
|
164
|
+
_propValues: propValuesRaw,
|
|
165
|
+
...propsToForward
|
|
166
|
+
} = resolvedProps;
|
|
167
|
+
const propValues = propValuesRaw;
|
|
168
|
+
const childContext = propValues && Object.keys(propValues).length > 0 ? {
|
|
169
|
+
...context,
|
|
170
|
+
...propValues
|
|
171
|
+
} : context;
|
|
172
|
+
|
|
173
|
+
// 6. Wire actions → inject as trigger-named props
|
|
174
|
+
const actionProps = node.actions ? buildActionProps(node.actions, context, dispatchAction) : {};
|
|
175
|
+
|
|
176
|
+
// 7. Resolve component from registry
|
|
177
|
+
const Component = registry.resolve(node.type);
|
|
178
|
+
if (!Component) {
|
|
179
|
+
console.warn(`[PushFrame] RecursiveRenderer: Unknown component type "${node.type}". ` + `Registered types: ${registry.types().join(', ')}`);
|
|
180
|
+
return fallbackComponent ? fallbackComponent : null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// 8. Render children recursively (using childContext for _propValues injection)
|
|
184
|
+
const children = node.children && node.children.length > 0 ? node.children.map((child, index) => /*#__PURE__*/_jsx(RecursiveRenderer, {
|
|
185
|
+
node: child,
|
|
186
|
+
context: childContext,
|
|
187
|
+
registry: registry,
|
|
188
|
+
dispatchAction: dispatchAction,
|
|
189
|
+
fallbackComponent: fallbackComponent
|
|
190
|
+
}, `${child.type}-${index}`)) : undefined;
|
|
191
|
+
return /*#__PURE__*/React.createElement(Component, {
|
|
192
|
+
...propsToForward,
|
|
193
|
+
...actionProps,
|
|
194
|
+
children
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=RecursiveRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","resolveProps","resolveDeep","resolveValue","evaluateIf","jsx","_jsx","buildActionProps","actions","context","dispatchAction","grouped","Map","action","existing","get","trigger","push","set","result","triggerActions","_args","resolvedPayload","payload","undefined","renderFlatListNode","node","registry","fallbackComponent","resolvedProps","props","actionProps","data","resolvedData","items","resolvedItems","keyExtractor","keyExtractorExpr","direction","numColumns","visible","_visible","_propValues","_pv","restProps","Array","isArray","keyExtractorFn","extractorExpr","item","index","itemContext","resolved","String","renderItemFn","RecursiveRenderer","itemTemplate","FlatListComponent","resolve","console","warn","createElement","renderItem","if","type","propValuesRaw","propsToForward","propValues","childContext","Object","keys","length","Component","types","join","children","map","child"],"sourceRoot":"../../../src","sources":["renderer/RecursiveRenderer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Binding resolver for PushFrame {{expression}} syntax.
|
|
5
|
+
*
|
|
6
|
+
* Rules:
|
|
7
|
+
* - A value that is entirely "{{expr}}" resolves to the bound value (any type)
|
|
8
|
+
* - A value with inline bindings "Hello {{user.name}}" resolves to a string
|
|
9
|
+
* - Unresolved paths return undefined — never throws
|
|
10
|
+
* - Non-string values are returned as-is
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const FULL_BINDING_RE = /^\{\{(.+)\}\}$/;
|
|
14
|
+
const INLINE_BINDING_RE = /\{\{([^}]+)\}\}/g;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Evaluate a binding expression string against the provided context.
|
|
18
|
+
* Uses Function constructor for safe, sandboxed expression evaluation.
|
|
19
|
+
* Returns undefined on any error.
|
|
20
|
+
*/
|
|
21
|
+
function evaluateExpression(expr, context) {
|
|
22
|
+
try {
|
|
23
|
+
const keys = Object.keys(context);
|
|
24
|
+
const values = keys.map(k => context[k]);
|
|
25
|
+
// eslint-disable-next-line no-new-func
|
|
26
|
+
const fn = new Function(...keys, `"use strict"; try { return (${expr}); } catch(e) { return undefined; }`);
|
|
27
|
+
return fn(...values);
|
|
28
|
+
} catch {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Resolve a single prop value against context.
|
|
35
|
+
*
|
|
36
|
+
* - String values: check for full binding "{{expr}}" or inline bindings "Hello {{name}}"
|
|
37
|
+
* - Non-string values: returned as-is
|
|
38
|
+
*/
|
|
39
|
+
export function resolveValue(value, context) {
|
|
40
|
+
if (typeof value !== 'string') {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Full binding: entire string is "{{expr}}" — return the actual resolved value
|
|
45
|
+
const fullMatch = FULL_BINDING_RE.exec(value);
|
|
46
|
+
if (fullMatch?.[1] !== undefined) {
|
|
47
|
+
return evaluateExpression(fullMatch[1].trim(), context);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Inline binding: replace each "{{expr}}" occurrence within the string
|
|
51
|
+
if (INLINE_BINDING_RE.test(value)) {
|
|
52
|
+
INLINE_BINDING_RE.lastIndex = 0;
|
|
53
|
+
return value.replace(INLINE_BINDING_RE, (_, expr) => {
|
|
54
|
+
const resolved = evaluateExpression(expr.trim(), context);
|
|
55
|
+
return resolved !== undefined && resolved !== null ? String(resolved) : '';
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// No bindings — return as-is
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Resolve all values in a props map against the context.
|
|
65
|
+
* Recursively resolves nested objects and arrays.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveProps(props, context) {
|
|
68
|
+
if (!props) return {};
|
|
69
|
+
const resolved = {};
|
|
70
|
+
for (const [key, value] of Object.entries(props)) {
|
|
71
|
+
resolved[key] = resolveDeep(value, context);
|
|
72
|
+
}
|
|
73
|
+
return resolved;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Recursively resolve binding expressions in a value (including nested objects/arrays).
|
|
78
|
+
*/
|
|
79
|
+
export function resolveDeep(value, context) {
|
|
80
|
+
if (Array.isArray(value)) {
|
|
81
|
+
return value.map(item => resolveDeep(item, context));
|
|
82
|
+
}
|
|
83
|
+
if (typeof value === 'object' && value !== null) {
|
|
84
|
+
const result = {};
|
|
85
|
+
for (const [k, v] of Object.entries(value)) {
|
|
86
|
+
result[k] = resolveDeep(v, context);
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
return resolveValue(value, context);
|
|
91
|
+
}
|
|
92
|
+
//# 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,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { resolveValue } from './bindingResolver';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate the `if` expression of a SchemaNode against the current context.
|
|
7
|
+
*
|
|
8
|
+
* Returns true → node should render
|
|
9
|
+
* Returns false → node (and its entire subtree) should be skipped
|
|
10
|
+
*
|
|
11
|
+
* Falsy values: false, null, undefined, 0, "" all hide the node.
|
|
12
|
+
* When `ifExpr` is undefined/null the node always renders.
|
|
13
|
+
*
|
|
14
|
+
* Accepts `unknown` to match the transformer's `if?: unknown` output:
|
|
15
|
+
* - String values are resolved as {{}} binding expressions
|
|
16
|
+
* - Non-string values (boolean, number, null) are coerced directly
|
|
17
|
+
*/
|
|
18
|
+
export function evaluateIf(ifExpr, context) {
|
|
19
|
+
if (ifExpr === undefined || ifExpr === null) return true;
|
|
20
|
+
|
|
21
|
+
// Non-string: treat the value itself as the condition (e.g. `if: false`)
|
|
22
|
+
if (typeof ifExpr !== 'string') return Boolean(ifExpr);
|
|
23
|
+
const resolved = resolveValue(ifExpr, context);
|
|
24
|
+
|
|
25
|
+
// Standard falsy check — any falsy value hides the node
|
|
26
|
+
return Boolean(resolved);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=conditionalEvaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["resolveValue","evaluateIf","ifExpr","context","undefined","Boolean","resolved"],"sourceRoot":"../../../src","sources":["renderer/conditionalEvaluator.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,mBAAmB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,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,GAAGN,YAAY,CAACE,MAAM,EAAEC,OAAO,CAAC;;EAE9C;EACA,OAAOE,OAAO,CAACC,QAAQ,CAAC;AAC1B","ignoreList":[]}
|