@pushframe/sdk 0.1.2 → 0.1.4
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/dist/index.js +58 -43
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +58 -43
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -11
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context/PushFrameContext.ts","../src/primitives/Text.tsx","../src/primitives/View.tsx","../src/primitives/ScrollView.tsx","../src/primitives/Image.tsx","../src/primitives/Pressable.tsx","../src/primitives/TextInput.tsx","../src/primitives/FlatList.tsx","../src/primitives/Modal.tsx","../src/primitives/ActivityIndicator.tsx","../src/primitives/Switch.tsx","../src/primitives/KeyboardAvoidingView.tsx","../src/primitives/SafeAreaView.tsx","../src/primitives/StatusBar.tsx","../src/registry/ComponentRegistry.ts","../src/overlays/ToastHost.tsx","../src/overlays/BottomSheetHost.tsx","../src/renderer/bindingResolver.ts","../src/renderer/conditionalEvaluator.ts","../src/renderer/RecursiveRenderer.tsx","../src/components/PushFrameProvider.tsx","../src/components/PushFrameComponent.tsx","../src/components/PushFrameScreen.tsx","../src/transformer/index.ts","../src/index.ts"],"names":["RNText","jsx","RNView","ScrollView","RNScrollView","RNImage","RNPressable","RNTextInput","RNFlatList","RNModal","RNActivityIndicator","RNSwitch","RNKeyboardAvoidingView","RNStatusBar","forwardRef","ToastHost","View","Text","BottomSheetHost","useState","useRef","Animated","useCallback","useEffect","useImperativeHandle","Modal","Pressable","styles","StyleSheet","React","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from 'react';\nimport type React from 'react';\nimport type { ComponentRegistry } from '../registry/ComponentRegistry';\n\n// ---------------------------------------------------------------------------\n// Schema types\n// ---------------------------------------------------------------------------\n\nexport interface SchemaNode {\n id?: string;\n type: string;\n props?: Record<string, unknown>;\n children?: SchemaNode[];\n /** Per-item render template for flatlist nodes. */\n itemTemplate?: SchemaNode;\n actions?: Action[];\n /**\n * Conditional render expression. String values are resolved against the\n * context via {{}} binding syntax. Non-string values (boolean, number, null)\n * are coerced directly. Falsy → node is hidden.\n */\n if?: unknown;\n}\n\nexport interface FlatListSchemaNode extends SchemaNode {\n type: 'flatlist';\n itemTemplate: SchemaNode;\n}\n\nexport interface Action {\n trigger: string;\n action: string;\n payload?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Overlay payload types\n// ---------------------------------------------------------------------------\n\nexport interface ToastPayload {\n message: string;\n duration?: number;\n type?: 'success' | 'error' | 'info' | 'warning';\n}\n\nexport interface BottomSheetPayload {\n schema: SchemaNode;\n context?: Record<string, unknown>;\n}\n\nexport interface ScrollToPayload {\n x?: number;\n y?: number;\n animated?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Context value\n// ---------------------------------------------------------------------------\n\nexport interface PushFrameContextValue {\n apiKey: string;\n baseUrl: string;\n appVersion?: string;\n globalContext: Record<string, unknown>;\n registry: ComponentRegistry;\n loadingComponent?: React.ReactNode;\n fallbackComponent?: React.ReactNode;\n onAction?: (action: string, payload?: Record<string, unknown>) => void;\n onError?: (error: Error) => void;\n // Overlay imperatives\n showToast: (payload: ToastPayload) => void;\n showBottomSheet: (payload: BottomSheetPayload) => void;\n dismissBottomSheet: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Context and hook\n// ---------------------------------------------------------------------------\n\nexport const PushFrameContext = createContext<PushFrameContextValue | null>(null);\n\nexport function usePushFrameContext(): PushFrameContextValue {\n const ctx = useContext(PushFrameContext);\n if (!ctx) {\n throw new Error('[PushFrame] usePushFrameContext must be called inside <PushFrame.Provider>');\n }\n return ctx;\n}\n","import React from 'react';\nimport { Text as RNText } from 'react-native';\nimport type { TextProps as RNTextProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameTextProps extends RNTextProps {\n /** Pushframe: hidden by RecursiveRenderer before component renders. */\n if?: string;\n /** Pushframe: converted to handlers by RecursiveRenderer before component renders. */\n actions?: Action[];\n /**\n * Text content. Takes precedence over `children`.\n * Pushframe schema convention: use `value`.\n */\n value?: string;\n /**\n * Alias for `value`. The transformer outputs the Craft editor's `content`\n * field here. `value` takes precedence when both are present.\n */\n content?: string;\n}\n\n/**\n * Thin wrapper over React Native Text.\n * Strips `if`, `actions`, `content` before forwarding to RN.\n * Display priority: value > content > children (children remain in rest).\n */\nexport function Text({\n if: _if,\n actions: _actions,\n value,\n content,\n ...rest\n}: PushFrameTextProps) {\n // When value or content is provided it takes precedence over JSX children\n // (which are part of rest via RNTextProps inheritance).\n const textContent = value !== undefined ? value : content;\n if (textContent !== undefined) {\n return <RNText {...rest}>{textContent}</RNText>;\n }\n // No explicit text content — forward rest as-is (includes any children prop)\n return <RNText {...rest} />;\n}\n","import React from 'react';\nimport { View as RNView } from 'react-native';\nimport type { ViewProps as RNViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameViewProps extends RNViewProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native View.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function View({ if: _if, actions: _actions, ...rest }: PushFrameViewProps) {\n return <RNView {...rest} />;\n}\n","import React, { forwardRef } from 'react';\nimport { ScrollView as RNScrollView } from 'react-native';\nimport type { ScrollViewProps as RNScrollViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameScrollViewProps extends RNScrollViewProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native ScrollView.\n * Forwards ref to support programmatic scrolling (e.g. scroll-to action).\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport const ScrollView = forwardRef<RNScrollView, PushFrameScrollViewProps>(function ScrollView(\n { if: _if, actions: _actions, ...rest },\n ref,\n) {\n return <RNScrollView ref={ref} {...rest} />;\n});\n","import React from 'react';\nimport { Image as RNImage } from 'react-native';\nimport type { ImageProps as RNImageProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameImageProps extends Omit<RNImageProps, 'source'> {\n if?: string;\n actions?: Action[];\n /**\n * URI string for the image source. Maps to RN `source={{ uri: src }}`.\n * Takes precedence over the base `source` prop.\n */\n src?: string;\n /** Pass-through for cases where a static require() source is needed. */\n source?: RNImageProps['source'];\n}\n\n/**\n * Thin wrapper over React Native Image.\n * `src` maps to `source={{ uri: src }}`.\n * Strips `if`, `actions`, `src` before forwarding to RN.\n */\nexport function Image({ if: _if, actions: _actions, src, source, ...rest }: PushFrameImageProps) {\n const resolvedSource = src ? { uri: src } : source ?? { uri: '' };\n return <RNImage source={resolvedSource} {...rest} />;\n}\n","import React from 'react';\nimport { Pressable as RNPressable } from 'react-native';\nimport type { PressableProps as RNPressableProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFramePressableProps extends RNPressableProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native Pressable.\n * Actions with trigger \"onPress\" and \"onLongPress\" are wired by RecursiveRenderer\n * and forwarded through as standard RN props.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function Pressable({ if: _if, actions: _actions, ...rest }: PushFramePressableProps) {\n return <RNPressable {...rest} />;\n}\n","import React from 'react';\nimport { TextInput as RNTextInput } from 'react-native';\nimport type { TextInputProps as RNTextInputProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameTextInputProps extends Omit<RNTextInputProps, 'onChange'> {\n if?: string;\n actions?: Action[];\n /**\n * Schema trigger \"onChange\" — wired by RecursiveRenderer.\n * Mapped to RN `onChangeText` by this component.\n */\n onChange?: (text: string) => void;\n /**\n * Schema trigger \"onSubmit\" — wired by RecursiveRenderer.\n * Mapped to RN `onSubmitEditing` by this component.\n */\n onSubmit?: () => void;\n}\n\n/**\n * Thin wrapper over React Native TextInput.\n * Maps Pushframe schema triggers to RN event props:\n * onChange → onChangeText\n * onSubmit → onSubmitEditing\n * Strips `if`, `actions`, `onChange`, `onSubmit` before forwarding to RN.\n */\nexport function TextInput({\n if: _if,\n actions: _actions,\n onChange,\n onSubmit,\n ...rest\n}: PushFrameTextInputProps) {\n return (\n <RNTextInput\n onChangeText={onChange}\n onSubmitEditing={onSubmit ? () => onSubmit() : undefined}\n {...rest}\n />\n );\n}\n","import React from 'react';\nimport { FlatList as RNFlatList } from 'react-native';\nimport type { FlatListProps as RNFlatListProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameFlatListProps<T = unknown>\n extends Omit<RNFlatListProps<T>, 'data' | 'horizontal'> {\n if?: string;\n actions?: Action[];\n /**\n * Resolved array of items. Populated by RecursiveRenderer from the\n * `items` binding expression on the schema node.\n */\n items?: T[];\n /**\n * \"vertical\" (default) or \"horizontal\". Maps to RN `horizontal` boolean.\n */\n direction?: 'vertical' | 'horizontal';\n /**\n * Number of columns for grid layouts. Forwarded directly to RN FlatList.\n */\n numColumns?: number;\n}\n\n/**\n * Thin wrapper over React Native FlatList.\n * RecursiveRenderer handles this type specially — it resolves `items` from\n * a binding expression and constructs the `renderItem` per-item context.\n *\n * This component maps Pushframe props to RN FlatList props and strips\n * Pushframe-specific props before forwarding.\n */\nexport function FlatList<T = unknown>({\n if: _if,\n actions: _actions,\n items,\n direction,\n numColumns,\n ...rest\n}: PushFrameFlatListProps<T>) {\n return (\n <RNFlatList<T>\n data={items}\n horizontal={direction === 'horizontal'}\n numColumns={numColumns}\n {...rest}\n />\n );\n}\n","import React from 'react';\nimport { Modal as RNModal } from 'react-native';\nimport type { ModalProps as RNModalProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameModalProps extends RNModalProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native Modal.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function Modal({ if: _if, actions: _actions, ...rest }: PushFrameModalProps) {\n return <RNModal {...rest} />;\n}\n","import React from 'react';\nimport { ActivityIndicator as RNActivityIndicator } from 'react-native';\nimport type { ActivityIndicatorProps as RNActivityIndicatorProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameActivityIndicatorProps extends RNActivityIndicatorProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native ActivityIndicator.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function ActivityIndicator({\n if: _if,\n actions: _actions,\n ...rest\n}: PushFrameActivityIndicatorProps) {\n return <RNActivityIndicator {...rest} />;\n}\n","import React from 'react';\nimport { Switch as RNSwitch } from 'react-native';\nimport type { SwitchProps as RNSwitchProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameSwitchProps extends Omit<RNSwitchProps, 'onValueChange' | 'onChange'> {\n if?: string;\n actions?: Action[];\n /**\n * Schema trigger \"onChange\" — wired by RecursiveRenderer.\n * Mapped to RN `onValueChange` by this component.\n */\n onChange?: (value: boolean) => void;\n}\n\n/**\n * Thin wrapper over React Native Switch.\n * Maps Pushframe schema trigger to RN event prop:\n * onChange → onValueChange\n * Strips `if`, `actions`, `onChange` before forwarding to RN.\n */\nexport function Switch({ if: _if, actions: _actions, onChange, ...rest }: PushFrameSwitchProps) {\n return <RNSwitch onValueChange={onChange} {...rest} />;\n}\n","import React from 'react';\nimport { KeyboardAvoidingView as RNKeyboardAvoidingView } from 'react-native';\nimport type { KeyboardAvoidingViewProps as RNKeyboardAvoidingViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameKeyboardAvoidingViewProps extends RNKeyboardAvoidingViewProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native KeyboardAvoidingView.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function KeyboardAvoidingView({\n if: _if,\n actions: _actions,\n ...rest\n}: PushFrameKeyboardAvoidingViewProps) {\n return <RNKeyboardAvoidingView {...rest} />;\n}\n","import React from 'react';\nimport type { ViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameSafeAreaViewProps extends ViewProps {\n if?: string;\n actions?: Action[];\n /**\n * Edges to apply safe-area insets on.\n * Forwarded to react-native-safe-area-context's SafeAreaView when available.\n * Example: ['top', 'bottom']\n */\n edges?: string[];\n}\n\n// Prefer react-native-safe-area-context (standard Expo dependency) when available;\n// fall back to RN core SafeAreaView otherwise.\n// Both are typed to accept `edges` so the prop flows through without stripping;\n// the RN core fallback will silently ignore the unknown prop at runtime.\nlet NativeSafeAreaView: React.ComponentType<ViewProps & { edges?: string[] }>;\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n NativeSafeAreaView = (require('react-native-safe-area-context') as {\n SafeAreaView: React.ComponentType<ViewProps & { edges?: string[] }>;\n }).SafeAreaView;\n} catch {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n NativeSafeAreaView = (require('react-native') as {\n SafeAreaView: React.ComponentType<ViewProps & { edges?: string[] }>;\n }).SafeAreaView;\n}\n\n/**\n * Thin wrapper over SafeAreaView.\n * Uses react-native-safe-area-context when available, RN core otherwise.\n * Strips `if`, `actions` before forwarding; passes `edges` through to\n * react-native-safe-area-context (ignored gracefully in the RN core fallback).\n */\nexport function SafeAreaView({ if: _if, actions: _actions, ...rest }: PushFrameSafeAreaViewProps) {\n return <NativeSafeAreaView {...rest} />;\n}\n","import React from 'react';\nimport { StatusBar as RNStatusBar } from 'react-native';\nimport type { StatusBarProps as RNStatusBarProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameStatusBarProps extends RNStatusBarProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native StatusBar.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function StatusBar({ if: _if, actions: _actions, ...rest }: PushFrameStatusBarProps) {\n return <RNStatusBar {...rest} />;\n}\n","import type React from 'react';\nimport { Text } from '../primitives/Text';\nimport { View } from '../primitives/View';\nimport { ScrollView } from '../primitives/ScrollView';\nimport { Image } from '../primitives/Image';\nimport { Pressable } from '../primitives/Pressable';\nimport { TextInput } from '../primitives/TextInput';\nimport { FlatList } from '../primitives/FlatList';\nimport { Modal } from '../primitives/Modal';\nimport { ActivityIndicator } from '../primitives/ActivityIndicator';\nimport { Switch } from '../primitives/Switch';\nimport { KeyboardAvoidingView } from '../primitives/KeyboardAvoidingView';\nimport { SafeAreaView } from '../primitives/SafeAreaView';\nimport { StatusBar } from '../primitives/StatusBar';\n\n// ---------------------------------------------------------------------------\n// Built-in type → component mappings (cannot be overridden)\n// ---------------------------------------------------------------------------\n\nconst BUILT_IN_TYPES: ReadonlySet<string> = new Set([\n 'text',\n 'view',\n 'scrollview',\n 'image',\n 'pressable',\n 'textinput',\n 'flatlist',\n 'modal',\n 'activityindicator',\n 'switch',\n 'keyboardavoidingview',\n 'safeareaview',\n 'statusbar',\n]);\n\nconst BUILT_IN_COMPONENTS: ReadonlyMap<string, React.ComponentType<Record<string, unknown>>> =\n new Map([\n ['text', Text as React.ComponentType<Record<string, unknown>>],\n ['view', View as React.ComponentType<Record<string, unknown>>],\n ['scrollview', ScrollView as React.ComponentType<Record<string, unknown>>],\n ['image', Image as React.ComponentType<Record<string, unknown>>],\n ['pressable', Pressable as React.ComponentType<Record<string, unknown>>],\n ['textinput', TextInput as React.ComponentType<Record<string, unknown>>],\n ['flatlist', FlatList as unknown as React.ComponentType<Record<string, unknown>>],\n ['modal', Modal as React.ComponentType<Record<string, unknown>>],\n ['activityindicator', ActivityIndicator as React.ComponentType<Record<string, unknown>>],\n ['switch', Switch as React.ComponentType<Record<string, unknown>>],\n ['keyboardavoidingview', KeyboardAvoidingView as React.ComponentType<Record<string, unknown>>],\n ['safeareaview', SafeAreaView as React.ComponentType<Record<string, unknown>>],\n ['statusbar', StatusBar as React.ComponentType<Record<string, unknown>>],\n ]);\n\n// ---------------------------------------------------------------------------\n// ComponentRegistry\n// ---------------------------------------------------------------------------\n\n/**\n * Maps component type strings to React components.\n *\n * Built-ins are always present and cannot be overridden.\n * Developer-registered components are merged on top for non-conflicting types.\n */\nexport class ComponentRegistry {\n private readonly components: Map<string, React.ComponentType<Record<string, unknown>>>;\n\n constructor(developerComponents?: Record<string, React.ComponentType<unknown>>) {\n // Start with built-ins\n this.components = new Map(BUILT_IN_COMPONENTS);\n\n // Merge developer components, skipping any that conflict with built-ins\n if (developerComponents) {\n for (const [type, component] of Object.entries(developerComponents)) {\n if (BUILT_IN_TYPES.has(type)) {\n console.warn(\n `[PushFrame] ComponentRegistry: \"${type}\" is a built-in type and cannot be overridden. ` +\n `Registration skipped.`,\n );\n continue;\n }\n this.components.set(type, component as React.ComponentType<Record<string, unknown>>);\n }\n }\n }\n\n /**\n * Resolve a type string to its React component.\n * Returns null if no component is registered for the type.\n */\n resolve(type: string): React.ComponentType<Record<string, unknown>> | null {\n return this.components.get(type) ?? null;\n }\n\n /**\n * Returns all registered type strings (useful for debugging).\n */\n types(): string[] {\n return Array.from(this.components.keys());\n }\n}\n","import React, {\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useRef,\n useCallback,\n} from 'react';\nimport { View, Text, StyleSheet, Animated } from 'react-native';\nimport type { ToastPayload } from '../context/PushFrameContext';\n\n// ---------------------------------------------------------------------------\n// Imperative handle\n// ---------------------------------------------------------------------------\n\nexport interface ToastHostHandle {\n show(payload: ToastPayload): void;\n}\n\n// ---------------------------------------------------------------------------\n// Internal state\n// ---------------------------------------------------------------------------\n\ninterface ToastState {\n id: number;\n message: string;\n duration: number;\n type: ToastPayload['type'];\n}\n\n// ---------------------------------------------------------------------------\n// Style helpers\n// ---------------------------------------------------------------------------\n\nconst TYPE_COLORS: Record<NonNullable<ToastPayload['type']>, string> = {\n success: '#22c55e',\n error: '#ef4444',\n info: '#3b82f6',\n warning: '#f59e0b',\n};\n\n// ---------------------------------------------------------------------------\n// ToastHost\n// ---------------------------------------------------------------------------\n\n/**\n * Rendered by PushFrameProvider at the root level.\n * Exposes an imperative `show()` handle for displaying toast messages.\n * Zero third-party dependencies — built with Animated API.\n */\nexport const ToastHost = forwardRef<ToastHostHandle>(function ToastHost(_props, ref) {\n const [toast, setToast] = useState<ToastState | null>(null);\n const opacity = useRef(new Animated.Value(0)).current;\n const idRef = useRef(0);\n\n const hide = useCallback(() => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }).start(() => {\n setToast(null);\n });\n }, [opacity]);\n\n useEffect(() => {\n if (!toast) return;\n\n // Fade in\n Animated.timing(opacity, {\n toValue: 1,\n duration: 200,\n useNativeDriver: true,\n }).start();\n\n // Auto-dismiss after duration\n const timer = setTimeout(() => {\n hide();\n }, toast.duration);\n\n return () => {\n clearTimeout(timer);\n };\n }, [toast, opacity, hide]);\n\n useImperativeHandle(\n ref,\n () => ({\n show(payload: ToastPayload) {\n idRef.current += 1;\n setToast({\n id: idRef.current,\n message: payload.message,\n duration: payload.duration ?? 3000,\n type: payload.type ?? 'info',\n });\n // Reset opacity for new toast\n opacity.setValue(0);\n },\n }),\n [opacity],\n );\n\n if (!toast) return null;\n\n const backgroundColor = TYPE_COLORS[toast.type ?? 'info'] ?? TYPE_COLORS.info;\n\n return (\n <View style={styles.container} pointerEvents=\"none\">\n <Animated.View style={[styles.toast, { backgroundColor, opacity }]}>\n <Text style={styles.message}>{toast.message}</Text>\n </Animated.View>\n </View>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n bottom: 60,\n left: 16,\n right: 16,\n alignItems: 'center',\n zIndex: 9999,\n },\n toast: {\n paddingVertical: 12,\n paddingHorizontal: 20,\n borderRadius: 8,\n maxWidth: 400,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 6,\n },\n message: {\n color: '#fff',\n fontSize: 14,\n fontWeight: '500',\n textAlign: 'center',\n },\n});\n","import React, {\n forwardRef,\n useImperativeHandle,\n useState,\n useRef,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n View,\n Modal,\n Pressable,\n StyleSheet,\n Animated,\n Dimensions,\n} from 'react-native';\nimport type { BottomSheetPayload } from '../context/PushFrameContext';\nimport type { SchemaNode } from '../context/PushFrameContext';\n\n// ---------------------------------------------------------------------------\n// Imperative handle\n// ---------------------------------------------------------------------------\n\nexport interface BottomSheetHostHandle {\n show(payload: BottomSheetPayload): void;\n dismiss(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Props from Provider (renderer callback)\n// ---------------------------------------------------------------------------\n\nexport interface BottomSheetHostProps {\n /**\n * Callback to render a SchemaNode inside the bottom sheet.\n * Provided by the Provider which has access to registry and context.\n */\n renderContent: (\n schema: SchemaNode,\n context?: Record<string, unknown>,\n ) => React.ReactElement | null;\n}\n\n// ---------------------------------------------------------------------------\n// BottomSheetHost\n// ---------------------------------------------------------------------------\n\nconst SCREEN_HEIGHT = Dimensions.get('window').height;\n\n/**\n * Rendered by PushFrameProvider at the root level.\n * Exposes imperative `show()` and `dismiss()` handles.\n * Zero third-party dependencies — built with Animated + Modal.\n */\nexport const BottomSheetHost = forwardRef<BottomSheetHostHandle, BottomSheetHostProps>(\n function BottomSheetHost({ renderContent }, ref) {\n const [visible, setVisible] = useState(false);\n const [payload, setPayload] = useState<BottomSheetPayload | null>(null);\n const translateY = useRef(new Animated.Value(SCREEN_HEIGHT)).current;\n\n const animateIn = useCallback(() => {\n Animated.spring(translateY, {\n toValue: 0,\n useNativeDriver: true,\n bounciness: 4,\n }).start();\n }, [translateY]);\n\n const animateOut = useCallback(\n (onDone?: () => void) => {\n Animated.timing(translateY, {\n toValue: SCREEN_HEIGHT,\n duration: 250,\n useNativeDriver: true,\n }).start(() => {\n onDone?.();\n });\n },\n [translateY],\n );\n\n useEffect(() => {\n if (visible) {\n translateY.setValue(SCREEN_HEIGHT);\n animateIn();\n }\n }, [visible, translateY, animateIn]);\n\n const dismiss = useCallback(() => {\n animateOut(() => {\n setVisible(false);\n setPayload(null);\n });\n }, [animateOut]);\n\n useImperativeHandle(\n ref,\n () => ({\n show(p: BottomSheetPayload) {\n setPayload(p);\n setVisible(true);\n },\n dismiss() {\n dismiss();\n },\n }),\n [dismiss],\n );\n\n if (!visible || !payload) return null;\n\n return (\n <Modal\n visible={visible}\n transparent\n animationType=\"none\"\n onRequestClose={dismiss}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable style={styles.backdrop} onPress={dismiss} />\n\n {/* Sheet */}\n <Animated.View style={[styles.sheet, { transform: [{ translateY }] }]}>\n <View style={styles.handle} />\n <View style={styles.content}>\n {renderContent(payload.schema, payload.context)}\n </View>\n </Animated.View>\n </Modal>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst styles = StyleSheet.create({\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.5)',\n },\n sheet: {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: '#fff',\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n paddingBottom: 34, // safe-area approximation\n minHeight: 200,\n maxHeight: '80%',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -4 },\n shadowOpacity: 0.15,\n shadowRadius: 12,\n elevation: 20,\n },\n handle: {\n alignSelf: 'center',\n width: 36,\n height: 4,\n borderRadius: 2,\n backgroundColor: '#d1d5db',\n marginTop: 12,\n marginBottom: 8,\n },\n content: {\n flex: 1,\n paddingHorizontal: 16,\n paddingTop: 8,\n },\n});\n","/**\n * Binding resolver for PushFrame {{expression}} syntax.\n *\n * Rules:\n * - A value that is entirely \"{{expr}}\" resolves to the bound value (any type)\n * - A value with inline bindings \"Hello {{user.name}}\" resolves to a string\n * - Unresolved paths return undefined — never throws\n * - Non-string values are returned as-is\n */\n\nconst FULL_BINDING_RE = /^\\{\\{(.+)\\}\\}$/;\nconst INLINE_BINDING_RE = /\\{\\{([^}]+)\\}\\}/g;\n\n/**\n * Evaluate a binding expression string against the provided context.\n * Uses Function constructor for safe, sandboxed expression evaluation.\n * Returns undefined on any error.\n */\nfunction evaluateExpression(expr: string, context: Record<string, unknown>): unknown {\n try {\n const keys = Object.keys(context);\n const values = keys.map((k) => context[k]);\n // eslint-disable-next-line no-new-func\n const fn = new Function(...keys, `\"use strict\"; try { return (${expr}); } catch(e) { return undefined; }`) as (\n ...args: unknown[]\n ) => unknown;\n return fn(...values);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolve a single prop value against context.\n *\n * - String values: check for full binding \"{{expr}}\" or inline bindings \"Hello {{name}}\"\n * - Non-string values: returned as-is\n */\nexport function resolveValue(value: unknown, context: Record<string, unknown>): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n // Full binding: entire string is \"{{expr}}\" — return the actual resolved value\n const fullMatch = FULL_BINDING_RE.exec(value);\n if (fullMatch?.[1] !== undefined) {\n return evaluateExpression(fullMatch[1].trim(), context);\n }\n\n // Inline binding: replace each \"{{expr}}\" occurrence within the string\n if (INLINE_BINDING_RE.test(value)) {\n INLINE_BINDING_RE.lastIndex = 0;\n return value.replace(INLINE_BINDING_RE, (_, expr: string) => {\n const resolved = evaluateExpression(expr.trim(), context);\n return resolved !== undefined && resolved !== null ? String(resolved) : '';\n });\n }\n\n // No bindings — return as-is\n return value;\n}\n\n/**\n * Resolve all values in a props map against the context.\n * Recursively resolves nested objects and arrays.\n */\nexport function resolveProps(\n props: Record<string, unknown> | undefined,\n context: Record<string, unknown>,\n): Record<string, unknown> {\n if (!props) return {};\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n resolved[key] = resolveDeep(value, context);\n }\n return resolved;\n}\n\n/**\n * Recursively resolve binding expressions in a value (including nested objects/arrays).\n */\nexport function resolveDeep(value: unknown, context: Record<string, unknown>): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => resolveDeep(item, context));\n }\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = resolveDeep(v, context);\n }\n return result;\n }\n return resolveValue(value, context);\n}\n","import { resolveValue } from './bindingResolver';\n\n/**\n * Evaluate the `if` expression of a SchemaNode against the current context.\n *\n * Returns true → node should render\n * Returns false → node (and its entire subtree) should be skipped\n *\n * Falsy values: false, null, undefined, 0, \"\" all hide the node.\n * When `ifExpr` is undefined/null the node always renders.\n *\n * Accepts `unknown` to match the transformer's `if?: unknown` output:\n * - String values are resolved as {{}} binding expressions\n * - Non-string values (boolean, number, null) are coerced directly\n */\nexport function evaluateIf(\n ifExpr: unknown,\n context: Record<string, unknown>,\n): boolean {\n if (ifExpr === undefined || ifExpr === null) return true;\n\n // Non-string: treat the value itself as the condition (e.g. `if: false`)\n if (typeof ifExpr !== 'string') return Boolean(ifExpr);\n\n const resolved = resolveValue(ifExpr, context);\n\n // Standard falsy check — any falsy value hides the node\n return Boolean(resolved);\n}\n","import React from 'react';\nimport type { ReactElement } from 'react';\nimport type { SchemaNode, FlatListSchemaNode, Action } from '../context/PushFrameContext';\nimport type { ComponentRegistry } from '../registry/ComponentRegistry';\nimport { resolveProps, resolveDeep, resolveValue } from './bindingResolver';\nimport { evaluateIf } from './conditionalEvaluator';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DispatchAction {\n (actionName: string, payload?: Record<string, unknown>): void;\n}\n\nexport interface RecursiveRendererProps {\n node: SchemaNode;\n /** Current merged data context for binding resolution. */\n context: Record<string, unknown>;\n registry: ComponentRegistry;\n /** Handles all actions — built-ins and host-app bubbling. Provided by the slot component. */\n dispatchAction: DispatchAction;\n /** Shown when a component type is not found in the registry. */\n fallbackComponent?: React.ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Action wiring helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Group an actions array by trigger name and produce a prop map where each\n * trigger key maps to a callback that fires all actions for that trigger.\n */\nfunction buildActionProps(\n actions: Action[],\n context: Record<string, unknown>,\n dispatchAction: DispatchAction,\n): Record<string, (...args: unknown[]) => void> {\n // Group by trigger\n const grouped = new Map<string, Action[]>();\n for (const action of actions) {\n const existing = grouped.get(action.trigger);\n if (existing) {\n existing.push(action);\n } else {\n grouped.set(action.trigger, [action]);\n }\n }\n\n const result: Record<string, (...args: unknown[]) => void> = {};\n for (const [trigger, triggerActions] of grouped) {\n result[trigger] = (..._args: unknown[]) => {\n for (const action of triggerActions) {\n const resolvedPayload =\n action.payload !== undefined\n ? (resolveDeep(action.payload, context) as Record<string, unknown>)\n : undefined;\n dispatchAction(action.action, resolvedPayload);\n }\n };\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// FlatList special handling\n// ---------------------------------------------------------------------------\n\nfunction renderFlatListNode(\n node: FlatListSchemaNode,\n context: Record<string, unknown>,\n registry: ComponentRegistry,\n dispatchAction: DispatchAction,\n fallbackComponent: React.ReactNode,\n): ReactElement | null {\n // Resolve all props including the data/items binding\n const resolvedProps = resolveProps(node.props, context);\n\n // Build action props for the FlatList container itself\n const actionProps = node.actions ? buildActionProps(node.actions, context, dispatchAction) : {};\n\n // Support both `data` (transformer output) and `items` (legacy) for the array source.\n // Extract and resolve; the primitive receives it as `items`.\n const {\n data: resolvedData,\n items: resolvedItems,\n keyExtractor: keyExtractorExpr,\n direction,\n numColumns,\n visible: _visible,\n _propValues: _pv,\n ...restProps\n } = resolvedProps;\n\n const items = Array.isArray(resolvedData)\n ? (resolvedData as unknown[])\n : Array.isArray(resolvedItems)\n ? (resolvedItems as unknown[])\n : [];\n\n // Build a keyExtractor function if specified in schema\n let keyExtractorFn: ((item: unknown, index: number) => string) | undefined;\n if (typeof keyExtractorExpr === 'string') {\n const extractorExpr = keyExtractorExpr;\n keyExtractorFn = (item: unknown, index: number) => {\n const itemContext = { ...context, item, index };\n const resolved = resolveValue(extractorExpr, itemContext);\n return resolved !== undefined && resolved !== null ? String(resolved) : String(index);\n };\n }\n\n // itemTemplate: per-item context merges { item, index } into current context\n const renderItemFn = ({ item, index }: { item: unknown; index: number }): ReactElement | null => {\n const itemContext = { ...context, item, index };\n return (\n <RecursiveRenderer\n node={node.itemTemplate}\n context={itemContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackComponent}\n key={keyExtractorFn ? keyExtractorFn(item, index) : index}\n />\n );\n };\n\n const FlatListComponent = registry.resolve('flatlist');\n if (!FlatListComponent) {\n console.warn('[PushFrame] RecursiveRenderer: \"flatlist\" not found in registry.');\n return fallbackComponent ? (fallbackComponent as ReactElement) : null;\n }\n\n return React.createElement(FlatListComponent, {\n ...restProps,\n ...actionProps,\n items,\n direction,\n numColumns,\n keyExtractor: keyExtractorFn,\n renderItem: renderItemFn,\n });\n}\n\n// ---------------------------------------------------------------------------\n// RecursiveRenderer\n// ---------------------------------------------------------------------------\n\n/**\n * Stateless recursive renderer. Evaluates schema nodes and produces React elements.\n *\n * - Evaluates `if` expression (string or non-string); returns null when falsy\n * - Handles `visible` prop: returns null when visible resolves to false\n * - Handles FlatList nodes with per-item context injection via `itemTemplate`\n * - Supports `data` (transformer) and `items` (legacy) as FlatList data source\n * - Resolves all prop bindings against current context\n * - Merges `_propValues` into child context (custom component prop injection)\n * - Wires actions to component event handler props\n * - Looks up component in registry; renders fallback or null when not found\n * - Recurses into children\n */\nexport function RecursiveRenderer({\n node,\n context,\n registry,\n dispatchAction,\n fallbackComponent,\n}: RecursiveRendererProps): ReactElement | null {\n // 1. Evaluate conditional — skip entire subtree if falsy\n if (!evaluateIf(node.if, context)) {\n return null;\n }\n\n // 2. FlatList special case\n if (node.type === 'flatlist') {\n return renderFlatListNode(\n node as FlatListSchemaNode,\n context,\n registry,\n dispatchAction,\n fallbackComponent,\n );\n }\n\n // 3. Resolve props\n const resolvedProps = resolveProps(node.props, context);\n\n // 4. Handle `visible` prop — transformer sets visible:false when a node is hidden.\n // A missing or true value means visible; anything falsy hides the node.\n if (resolvedProps.visible !== undefined && !resolvedProps.visible) {\n return null;\n }\n\n // 5. Extract SDK-internal props that must not be forwarded to RN components.\n // `_propValues` carries custom-component instance overrides → merge into\n // child context so nested bindings resolve against them.\n const {\n visible: _visible,\n _propValues: propValuesRaw,\n ...propsToForward\n } = resolvedProps;\n\n const propValues = propValuesRaw as Record<string, unknown> | undefined;\n const childContext =\n propValues && Object.keys(propValues).length > 0\n ? { ...context, ...propValues }\n : context;\n\n // 6. Wire actions → inject as trigger-named props\n const actionProps = node.actions ? buildActionProps(node.actions, context, dispatchAction) : {};\n\n // 7. Resolve component from registry\n const Component = registry.resolve(node.type);\n if (!Component) {\n console.warn(\n `[PushFrame] RecursiveRenderer: Unknown component type \"${node.type}\". ` +\n `Registered types: ${registry.types().join(', ')}`,\n );\n return fallbackComponent ? (fallbackComponent as ReactElement) : null;\n }\n\n // 8. Render children recursively (using childContext for _propValues injection)\n const children =\n node.children && node.children.length > 0\n ? node.children.map((child, index) => (\n <RecursiveRenderer\n key={`${child.type}-${index}`}\n node={child}\n context={childContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackComponent}\n />\n ))\n : undefined;\n\n return React.createElement(Component, {\n ...propsToForward,\n ...actionProps,\n children,\n });\n}\n","import React, { useCallback, useMemo, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { PushFrameContext } from '../context/PushFrameContext';\nimport type {\n PushFrameContextValue,\n ToastPayload,\n BottomSheetPayload,\n SchemaNode,\n} from '../context/PushFrameContext';\nimport { ComponentRegistry } from '../registry/ComponentRegistry';\nimport { ToastHost } from '../overlays/ToastHost';\nimport type { ToastHostHandle } from '../overlays/ToastHost';\nimport { BottomSheetHost } from '../overlays/BottomSheetHost';\nimport type { BottomSheetHostHandle } from '../overlays/BottomSheetHost';\nimport { RecursiveRenderer } from '../renderer/RecursiveRenderer';\n\nconst DEFAULT_BASE_URL = 'https://api.pushframe.io';\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport interface PushFrameProviderProps {\n /** Pushframe API key — sent as Authorization header on all fetches. */\n apiKey: string;\n /**\n * Runtime data context. Screens/Components bind to this via {{expressions}}.\n * Merged at the Provider level; slot-level context wins on conflict.\n */\n context?: Record<string, unknown>;\n /**\n * Base URL of the Pushframe delivery service.\n * Defaults to the production endpoint: https://api.pushframe.io\n */\n baseUrl?: string;\n /**\n * Semver string appended to fetch paths for schema version targeting.\n * e.g. \"1.2.3\" → GET /screens/home/1.2.3\n * When not provided, \"null\" is sent as the appVersion in the URL.\n */\n appVersion?: string;\n /**\n * Developer-registered native components merged into the ComponentRegistry.\n * Built-in types cannot be overridden — conflicting keys are warned and skipped.\n */\n components?: Record<string, React.ComponentType<unknown>>;\n /** Default loading UI shown while schema is fetching or isLoading=true. */\n loadingComponent?: ReactNode;\n /** Default fallback UI shown on fetch error or unknown component type. */\n fallbackComponent?: ReactNode;\n /**\n * Global action handler. Receives actions that are not handled as built-ins\n * and were not stopped by a slot-level onAction.\n */\n onAction?: (action: string, payload?: Record<string, unknown>) => void;\n /** Called whenever a fetch or render error occurs. */\n onError?: (error: Error) => void;\n children: ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// PushFrameProvider\n// ---------------------------------------------------------------------------\n\n/**\n * Root provider for the PushFrame SDK.\n *\n * Wrap your app (or a subtree) in this provider. All PushFrame.Screen and\n * PushFrame.Component slots inside will fetch their schemas from the delivery\n * service and render them using the shared ComponentRegistry and context.\n *\n * Also renders the ToastHost and BottomSheetHost overlay hosts at root level\n * so any component in the tree can trigger them via built-in actions.\n */\nexport function PushFrameProvider({\n apiKey,\n context = {},\n baseUrl = DEFAULT_BASE_URL,\n appVersion,\n components,\n loadingComponent,\n fallbackComponent,\n onAction,\n onError,\n children,\n}: PushFrameProviderProps) {\n // Registry — created once (components prop should be stable)\n const registry = useMemo(\n () => new ComponentRegistry(components),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Overlay refs\n const toastRef = useRef<ToastHostHandle>(null);\n const bottomSheetRef = useRef<BottomSheetHostHandle>(null);\n\n const showToast = useCallback((payload: ToastPayload) => {\n toastRef.current?.show(payload);\n }, []);\n\n const showBottomSheet = useCallback((payload: BottomSheetPayload) => {\n bottomSheetRef.current?.show(payload);\n }, []);\n\n const dismissBottomSheet = useCallback(() => {\n bottomSheetRef.current?.dismiss();\n }, []);\n\n // renderContent for BottomSheetHost — renders a schema node with the Provider's registry\n const renderBottomSheetContent = useCallback(\n (schema: SchemaNode, sheetContext?: Record<string, unknown>) => {\n const mergedContext = sheetContext ? { ...context, ...sheetContext } : context;\n // No-op dispatchAction for bottom sheet content (actions bubble via onAction)\n const dispatchAction = (action: string, payload?: Record<string, unknown>) => {\n if (action === 'dismiss-bottom-sheet') {\n dismissBottomSheet();\n return;\n }\n if (action === 'show-toast') {\n showToast(payload as unknown as ToastPayload);\n return;\n }\n onAction?.(action, payload);\n };\n return (\n <RecursiveRenderer\n node={schema}\n context={mergedContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackComponent}\n />\n );\n },\n [context, registry, fallbackComponent, onAction, dismissBottomSheet, showToast],\n );\n\n const contextValue = useMemo<PushFrameContextValue>(\n () => ({\n apiKey,\n baseUrl,\n appVersion,\n globalContext: context,\n registry,\n loadingComponent,\n fallbackComponent,\n onAction,\n onError,\n showToast,\n showBottomSheet,\n dismissBottomSheet,\n }),\n [\n apiKey,\n baseUrl,\n appVersion,\n context,\n registry,\n loadingComponent,\n fallbackComponent,\n onAction,\n onError,\n showToast,\n showBottomSheet,\n dismissBottomSheet,\n ],\n );\n\n return (\n <PushFrameContext.Provider value={contextValue}>\n {children}\n <ToastHost ref={toastRef} />\n <BottomSheetHost ref={bottomSheetRef} renderContent={renderBottomSheetContent} />\n </PushFrameContext.Provider>\n );\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport type { ReactNode, ReactElement } from 'react';\nimport { usePushFrameContext } from '../context/PushFrameContext';\nimport type { SchemaNode, ToastPayload, BottomSheetPayload } from '../context/PushFrameContext';\nimport { RecursiveRenderer } from '../renderer/RecursiveRenderer';\n\n// ---------------------------------------------------------------------------\n// Shared slot props (used by both Screen and Component)\n// ---------------------------------------------------------------------------\n\nexport interface PushFrameSlotProps {\n /** ID of the screen/component to fetch from the delivery service. */\n id: string;\n /**\n * Data context local to this slot. Merged with the Provider context;\n * local keys win on conflict.\n */\n context?: Record<string, unknown>;\n /**\n * External loading signal from the host app. When true, loading UI is shown\n * even if the schema has already been fetched.\n */\n isLoading?: boolean;\n /**\n * Loading UI shown while isLoading=true OR schema is being fetched.\n * Falls back to Provider-level loadingComponent.\n */\n loadingComponent?: ReactNode;\n /**\n * Fallback UI shown on fetch error or unresolvable component type.\n * Falls back to Provider-level fallbackComponent.\n */\n fallbackComponent?: ReactNode;\n /**\n * Slot-level action handler. Return true to stop the action from bubbling\n * to the Provider-level onAction.\n */\n onAction?: (action: string, payload?: Record<string, unknown>) => boolean | void;\n}\n\n// ---------------------------------------------------------------------------\n// Schema fetch\n// ---------------------------------------------------------------------------\n\nasync function fetchSchema(\n baseUrl: string,\n apiKey: string,\n path: string,\n): Promise<SchemaNode> {\n const url = new URL(path, baseUrl + '/').toString();\n const headers: Record<string, string> = {\n Accept: 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'x-project-key': apiKey,\n };\n\n const res = await fetch(url, { headers });\n if (!res.ok) {\n throw new Error(`[PushFrame] HTTP ${res.status} fetching \"${path}\"`);\n }\n\n const envelope = (await res.json()) as { schema?: SchemaNode } & SchemaNode;\n return envelope.schema ?? envelope;\n}\n\n// ---------------------------------------------------------------------------\n// PushFrameComponent\n// ---------------------------------------------------------------------------\n\ninterface PushFrameComponentInternalProps extends PushFrameSlotProps {\n /** Resource type — determines which delivery endpoint to hit. */\n resourceType: 'screens' | 'components';\n /** When true, wraps the rendered output with flex:1 (used by Screen). */\n fullscreen?: boolean;\n}\n\nfunction PushFrameComponentInternal({\n id,\n resourceType,\n context: slotContext,\n isLoading: externalLoading,\n loadingComponent: slotLoading,\n fallbackComponent: slotFallback,\n onAction: slotOnAction,\n fullscreen,\n}: PushFrameComponentInternalProps) {\n const {\n apiKey,\n baseUrl,\n appVersion,\n globalContext,\n registry,\n loadingComponent: providerLoading,\n fallbackComponent: providerFallback,\n onAction: providerOnAction,\n onError,\n showToast,\n showBottomSheet,\n dismissBottomSheet,\n } = usePushFrameContext();\n\n const [schema, setSchema] = useState<SchemaNode | null>(null);\n const [fetchError, setFetchError] = useState<Error | null>(null);\n const [isFetching, setIsFetching] = useState(true);\n\n // Build fetch path: {resourceType}/{id}/{appVersion} — \"null\" when not set\n const fetchPath = `${resourceType}/${encodeURIComponent(id)}/${encodeURIComponent(appVersion ?? 'null')}`;\n\n // Merged data context: provider → slot (local wins)\n const mergedContext = slotContext ? { ...globalContext, ...slotContext } : globalContext;\n\n // Resolved UI components with fallback precedence\n const loadingUI = slotLoading !== undefined ? slotLoading : providerLoading;\n const fallbackUI = slotFallback !== undefined ? slotFallback : providerFallback;\n\n // Fetch schema\n useEffect(() => {\n let cancelled = false;\n setSchema(null);\n setFetchError(null);\n setIsFetching(true);\n\n fetchSchema(baseUrl, apiKey, fetchPath)\n .then((s) => {\n if (!cancelled) {\n setSchema(s);\n setIsFetching(false);\n }\n })\n .catch((err: unknown) => {\n if (!cancelled) {\n const error = err instanceof Error ? err : new Error(String(err));\n setFetchError(error);\n setIsFetching(false);\n onError?.(error);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [fetchPath, baseUrl, apiKey, onError]);\n\n // Dispatch action — handles built-ins, then bubbles via slot → provider\n const dispatchAction = useCallback(\n (action: string, payload?: Record<string, unknown>) => {\n // Built-in actions — never bubble to host app\n if (action === 'show-toast') {\n showToast(payload as unknown as ToastPayload);\n return;\n }\n if (action === 'show-bottom-sheet') {\n showBottomSheet(payload as unknown as BottomSheetPayload);\n return;\n }\n if (action === 'dismiss-bottom-sheet') {\n dismissBottomSheet();\n return;\n }\n if (action === 'scroll-to') {\n // scroll-to is handled by the ScrollView primitive via ref; no bubbling needed\n return;\n }\n\n // Bubble: slot onAction first; if it returns true, stop\n const stopped = slotOnAction?.(action, payload);\n if (stopped) return;\n\n // Provider onAction\n providerOnAction?.(action, payload);\n },\n [showToast, showBottomSheet, dismissBottomSheet, slotOnAction, providerOnAction],\n );\n\n // Loading state: external flag OR schema not yet fetched\n const isShowingLoader = externalLoading || isFetching;\n\n if (isShowingLoader) {\n return (loadingUI as ReactElement | null) ?? null;\n }\n\n if (fetchError || !schema) {\n return (fallbackUI as ReactElement | null) ?? null;\n }\n\n const rendered = (\n <RecursiveRenderer\n node={schema}\n context={mergedContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackUI}\n />\n );\n\n if (fullscreen) {\n // PushFrame.Screen wraps with flex:1\n return <>{rendered}</>;\n }\n\n return rendered;\n}\n\n// ---------------------------------------------------------------------------\n// Public PushFrameComponent\n// ---------------------------------------------------------------------------\n\n/**\n * Fetches a component schema from GET /components/:id[/:appVersion] on the\n * delivery service and renders it inline using RecursiveRenderer.\n *\n * Context is merged: Provider context → slot context (local wins).\n * Actions bubble: slot onAction → Provider onAction.\n * Built-in actions (show-toast, show-bottom-sheet, etc.) are handled internally.\n */\nexport function PushFrameComponent(props: PushFrameSlotProps) {\n return <PushFrameComponentInternal {...props} resourceType=\"components\" />;\n}\n\n// Re-export internal for Screen to use\nexport { PushFrameComponentInternal };\n","import React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { PushFrameComponentInternal } from './PushFrameComponent';\nimport type { PushFrameSlotProps } from './PushFrameComponent';\n\n/**\n * Fetches a screen schema from GET /screens/:id[/:appVersion] on the delivery\n * service and renders it with flex:1 sizing (full-page layout).\n *\n * Identical to PushFrame.Component in behaviour, but:\n * - Fetches from /screens/:id instead of /components/:id\n * - Applies flex:1 to its container so it fills the available space\n *\n * Context is merged: Provider context → slot context (local wins).\n * Actions bubble: slot onAction → Provider onAction.\n * Built-in actions (show-toast, show-bottom-sheet, etc.) are handled internally.\n */\nexport function PushFrameScreen(props: PushFrameSlotProps) {\n return (\n <View style={styles.container}>\n <PushFrameComponentInternal {...props} resourceType=\"screens\" fullscreen />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n","/**\n * Craft.js → PushFrame SDUI transformer\n *\n * Converts a Craft.js editor schema (produced by the dashboard) into the\n * SDUINode tree consumed by the SDK's RecursiveRenderer at runtime.\n *\n * This module is intended for use by the backend/service layer or the\n * dashboard — it is NOT executed inside the React Native app at runtime.\n */\n\nimport type { Action, SchemaNode } from '../context/PushFrameContext';\n\n// ─── Craft input types ────────────────────────────────────────────────────────\n\nexport type CraftNode = {\n type: { resolvedName: string };\n props?: Record<string, unknown>;\n nodes?: string[];\n parent?: string;\n};\n\nexport type CraftSchema = Record<string, CraftNode>;\n\n// ─── Output types ─────────────────────────────────────────────────────────────\n\ntype SpacingValue = number | { top?: number; right?: number; bottom?: number; left?: number };\ntype RadiusValue = number | { tl?: number; tr?: number; br?: number; bl?: number };\ntype SizeModeValue = 'fill' | 'hug' | number;\n\ninterface ShadowValue {\n color: string;\n offsetX: number;\n offsetY: number;\n blur: number;\n /** 0–1 */\n opacity: number;\n}\n\ninterface BorderValue {\n width?: number;\n color?: string;\n style?: 'solid' | 'dotted' | 'dashed';\n widths?: { top?: number; right?: number; bottom?: number; left?: number };\n}\n\ninterface SafeAreaValue {\n top?: boolean;\n right?: boolean;\n bottom?: boolean;\n left?: boolean;\n}\n\n/**\n * The SDUI node shape produced by this transformer and consumed by the SDK's\n * RecursiveRenderer. Aligned with `SchemaNode` from the SDK context.\n */\nexport interface SDUINode extends SchemaNode {\n id: string;\n type: string;\n props: Record<string, unknown>;\n children?: SDUINode[];\n /** FlatList per-item render template. */\n itemTemplate?: SDUINode;\n /** Conditional render expression. Falsy → node is hidden. */\n if?: unknown;\n actions?: Action[];\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst BRIDGE_KEYS = new Set([\n '_schemaId', '_schemaType', '_schemaActions', '_schemaIf', '_schemaRenderItem',\n]);\n\nconst ALIGN_MAP: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst DISTRIBUTE_MAP: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n 'space-evenly': 'space-evenly',\n};\n\nconst FIT_TO_RESIZE_MODE: Record<string, string> = {\n cover: 'cover',\n contain: 'contain',\n fill: 'stretch', // RN uses 'stretch', not 'fill'\n center: 'center',\n};\n\nconst FONT_WEIGHT_MAP: Record<string, string> = {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n};\n\nconst TEXT_STYLE_PRESETS: Record<string, {\n fontSize: number;\n fontWeight: string;\n lineHeight?: number;\n textTransform?: string;\n letterSpacing?: number;\n}> = {\n 'heading-1': { fontSize: 28, fontWeight: '700' },\n 'heading-2': { fontSize: 22, fontWeight: '700' },\n 'heading-3': { fontSize: 18, fontWeight: '600' },\n 'body': { fontSize: 16, fontWeight: '400' },\n 'body-sm': { fontSize: 14, fontWeight: '400' },\n 'caption': { fontSize: 12, fontWeight: '400' },\n 'label': { fontSize: 13, fontWeight: '500' },\n 'overline': { fontSize: 11, fontWeight: '500', textTransform: 'uppercase', letterSpacing: 0.8 },\n};\n\n// inputType → RN keyboard + behaviour props\nconst INPUT_TYPE_MAP: Record<string, {\n keyboardType: string;\n secureTextEntry: boolean;\n autoCapitalize: string;\n autoCorrect: boolean;\n}> = {\n text: { keyboardType: 'default', secureTextEntry: false, autoCapitalize: 'sentences', autoCorrect: true },\n email: { keyboardType: 'email-address', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n password: { keyboardType: 'default', secureTextEntry: true, autoCapitalize: 'none', autoCorrect: false },\n number: { keyboardType: 'numeric', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n decimal: { keyboardType: 'decimal-pad', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n phone: { keyboardType: 'phone-pad', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n url: { keyboardType: 'url', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n search: { keyboardType: 'default', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n};\n\n// ─── Prop helpers ─────────────────────────────────────────────────────────────\n\nfunction stripBridgeKeys(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const k in props) {\n if (!BRIDGE_KEYS.has(k)) out[k] = props[k];\n }\n return out;\n}\n\nfunction extractMeta(raw: Record<string, unknown>): {\n actions: Action[] | undefined;\n condition: unknown;\n} {\n return {\n actions: raw._schemaActions as Action[] | undefined,\n condition: raw._schemaIf,\n };\n}\n\n// ─── RN style sub-builders ────────────────────────────────────────────────────\n\nfunction resolveSizeModeRN(\n value: SizeModeValue | undefined,\n axis: 'width' | 'height',\n out: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): void {\n if (value === undefined) return;\n if (value === 'fill') {\n const isMainAxis =\n (parentDirection === 'vertical' && axis === 'height') ||\n (parentDirection === 'horizontal' && axis === 'width');\n if (isMainAxis) {\n out.flex = 1;\n } else {\n out.alignSelf = 'stretch';\n }\n } else if (value === 'hug') {\n out.alignSelf = 'flex-start';\n } else {\n out[axis] = value;\n }\n}\n\nfunction resolvePaddingRN(padding: SpacingValue | undefined): Record<string, unknown> {\n if (padding === undefined) return {};\n if (typeof padding === 'number') return { padding };\n const { top, right, bottom, left } = padding;\n if (top === bottom && left === right && top !== undefined && left !== undefined) {\n return { paddingVertical: top, paddingHorizontal: left };\n }\n return {\n ...(top !== undefined ? { paddingTop: top } : {}),\n ...(right !== undefined ? { paddingRight: right } : {}),\n ...(bottom !== undefined ? { paddingBottom: bottom } : {}),\n ...(left !== undefined ? { paddingLeft: left } : {}),\n };\n}\n\nfunction resolveRadiusRN(radius: RadiusValue | undefined): Record<string, unknown> {\n if (radius === undefined) return {};\n if (typeof radius === 'number') return { borderRadius: radius };\n return {\n ...(radius.tl !== undefined ? { borderTopLeftRadius: radius.tl } : {}),\n ...(radius.tr !== undefined ? { borderTopRightRadius: radius.tr } : {}),\n ...(radius.br !== undefined ? { borderBottomRightRadius: radius.br } : {}),\n ...(radius.bl !== undefined ? { borderBottomLeftRadius: radius.bl } : {}),\n };\n}\n\nfunction resolveBorderRN(border: BorderValue | undefined): Record<string, unknown> {\n if (!border) return {};\n const out: Record<string, unknown> = {};\n if (border.style) out.borderStyle = border.style;\n if (border.color) out.borderColor = border.color;\n if (border.widths) {\n const w = border.widths;\n if (w.top !== undefined) out.borderTopWidth = w.top;\n if (w.right !== undefined) out.borderRightWidth = w.right;\n if (w.bottom !== undefined) out.borderBottomWidth = w.bottom;\n if (w.left !== undefined) out.borderLeftWidth = w.left;\n } else if (border.width !== undefined) {\n out.borderWidth = border.width;\n }\n return out;\n}\n\nfunction resolveShadowRN(shadow: ShadowValue | undefined): Record<string, unknown> {\n if (!shadow) return {};\n return {\n shadowColor: shadow.color,\n shadowOffset: { width: shadow.offsetX, height: shadow.offsetY },\n shadowRadius: shadow.blur,\n shadowOpacity: shadow.opacity,\n elevation: Math.round(shadow.blur / 2),\n };\n}\n\nfunction resolveTransformRN(props: {\n rotate?: number;\n scale?: number;\n translateX?: number;\n translateY?: number;\n}): Record<string, unknown> {\n const transforms: Record<string, unknown>[] = [];\n if (props.rotate !== undefined && props.rotate !== 0) transforms.push({ rotate: `${props.rotate}deg` });\n if (props.scale !== undefined && props.scale !== 1) transforms.push({ scale: props.scale });\n if (props.translateX !== undefined && props.translateX !== 0) transforms.push({ translateX: props.translateX });\n if (props.translateY !== undefined && props.translateY !== 0) transforms.push({ translateY: props.translateY });\n return transforms.length ? { transform: transforms } : {};\n}\n\nfunction resolvePositionRN(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (props.position) out.position = props.position;\n if (props.position === 'absolute') {\n if (props.top !== undefined) out.top = props.top;\n if (props.right !== undefined) out.right = props.right;\n if (props.bottom !== undefined) out.bottom = props.bottom;\n if (props.left !== undefined) out.left = props.left;\n }\n if (props.zIndex !== undefined) out.zIndex = props.zIndex;\n return out;\n}\n\nfunction resolveAccessibilityProps(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (props.accessible !== undefined) out.accessible = props.accessible;\n if (props.accessibilityLabel) out.accessibilityLabel = props.accessibilityLabel;\n if (props.accessibilityRole) out.accessibilityRole = props.accessibilityRole;\n if (props.testID) out.testID = props.testID;\n return out;\n}\n\n// ─── Full frame-style builder ─────────────────────────────────────────────────\n\nfunction buildFrameStyle(\n props: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): Record<string, unknown> {\n const style: Record<string, unknown> = {};\n const frameType = (props.type as string | undefined) ?? 'stack';\n\n if (frameType === 'grid') {\n if (props.align) style.alignItems = ALIGN_MAP[props.align as string] ?? props.align;\n } else {\n style.flexDirection = props.direction === 'horizontal' ? 'row' : 'column';\n if (props.align) style.alignItems = ALIGN_MAP[props.align as string] ?? props.align;\n if (props.distribute) style.justifyContent = DISTRIBUTE_MAP[props.distribute as string] ?? props.distribute;\n if (props.gap !== undefined && props.gap !== 0) style.gap = props.gap;\n if (props.wrap === 'yes') style.flexWrap = 'wrap';\n }\n\n resolveSizeModeRN(props.width as SizeModeValue | undefined, 'width', style, parentDirection);\n resolveSizeModeRN(props.height as SizeModeValue | undefined, 'height', style, parentDirection);\n if (props.minWidth !== undefined) style.minWidth = props.minWidth;\n if (props.maxWidth !== undefined) style.maxWidth = props.maxWidth;\n if (props.minHeight !== undefined) style.minHeight = props.minHeight;\n if (props.maxHeight !== undefined) style.maxHeight = props.maxHeight;\n if (props.aspectRatio !== undefined) style.aspectRatio = props.aspectRatio;\n\n Object.assign(style, resolvePaddingRN(props.padding as SpacingValue | undefined));\n\n if (props.fill && props.fill !== 'transparent') style.backgroundColor = props.fill;\n Object.assign(style, resolveRadiusRN(props.radius as RadiusValue | undefined));\n Object.assign(style, resolveBorderRN(props.border as BorderValue | undefined));\n Object.assign(style, resolveShadowRN(props.shadow as ShadowValue | undefined));\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n if (props.overflow === true) style.overflow = 'hidden';\n\n Object.assign(style, resolvePositionRN(props));\n Object.assign(style, resolveTransformRN(props as Parameters<typeof resolveTransformRN>[0]));\n\n return style;\n}\n\nfunction splitFrameStyle(style: Record<string, unknown>): {\n outer: Record<string, unknown>;\n inner: Record<string, unknown>;\n} {\n const OUTER_KEYS = new Set([\n 'flex', 'alignSelf', 'width', 'height',\n 'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'aspectRatio',\n 'position', 'top', 'right', 'bottom', 'left', 'zIndex',\n 'transform',\n ]);\n const outer: Record<string, unknown> = {};\n const inner: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(style)) {\n if (OUTER_KEYS.has(k)) outer[k] = v;\n else inner[k] = v;\n }\n return { outer, inner };\n}\n\nfunction splitScrollStyle(style: Record<string, unknown>): {\n containerStyle: Record<string, unknown>;\n contentStyle: Record<string, unknown>;\n} {\n const CONTENT_KEYS = new Set([\n 'flexDirection', 'justifyContent', 'alignItems', 'flexWrap', 'gap',\n 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'paddingVertical', 'paddingHorizontal',\n ]);\n const containerStyle: Record<string, unknown> = {};\n const contentStyle: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(style)) {\n if (CONTENT_KEYS.has(k)) contentStyle[k] = v;\n else containerStyle[k] = v;\n }\n return { containerStyle, contentStyle };\n}\n\n// ─── Safe area helper ─────────────────────────────────────────────────────────\n\nfunction safeAreaEdges(safeArea: SafeAreaValue | undefined): string[] {\n if (!safeArea) return [];\n return (Object.entries(safeArea) as [string, boolean][])\n .filter(([, v]) => v === true)\n .map(([edge]) => edge);\n}\n\n// ─── Custom component definition ──────────────────────────────────────────────\n\nexport interface CustomComponentDef {\n rootNodeId: string;\n nodes: CraftSchema;\n}\n\nexport type CustomComponentsMap = Record<string, CustomComponentDef>;\n\n// ─── Node transformers ────────────────────────────────────────────────────────\n\nfunction transformScreen(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const edges = safeAreaEdges(props.safeArea as SafeAreaValue | undefined);\n const hasSafeArea = edges.length > 0;\n const vis = props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {};\n\n const style: Record<string, unknown> = { flex: 1 };\n if (props.backgroundColor) style.backgroundColor = props.backgroundColor;\n\n let content: SDUINode[];\n if (props.scrollable) {\n const paddingStyle = resolvePaddingRN(props.padding as SpacingValue | undefined);\n const scrollNode: SDUINode = {\n id: `${id}__scroll`,\n type: 'scrollview',\n props: {\n style: { flex: 1 },\n ...(Object.keys(paddingStyle).length ? { contentContainerStyle: paddingStyle } : {}),\n showsVerticalScrollIndicator: false,\n showsHorizontalScrollIndicator: false,\n },\n children,\n };\n content = [scrollNode];\n } else {\n Object.assign(style, resolvePaddingRN(props.padding as SpacingValue | undefined));\n content = children;\n }\n\n const statusBar = props.statusBarStyle && props.statusBarStyle !== 'dark'\n ? { statusBarStyle: props.statusBarStyle }\n : {};\n\n const node: SDUINode = {\n id,\n type: hasSafeArea ? 'safeareaview' : 'view',\n props: {\n style,\n ...(hasSafeArea ? { edges } : {}),\n ...statusBar,\n ...vis,\n },\n children: content,\n };\n\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformFrame(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const p = stripBridgeKeys(raw);\n\n const isGrid = ((p.type as string | undefined) ?? 'stack') === 'grid';\n const isScrollable = p.scrollable === true;\n const isPressable = p.pressable === true;\n const direction: 'vertical' | 'horizontal' = p.direction === 'horizontal' ? 'horizontal' : 'vertical';\n const edges = safeAreaEdges(p.safeArea as SafeAreaValue | undefined);\n const hasSafeArea = edges.length > 0;\n const access = resolveAccessibilityProps(p);\n const vis = p.visible !== undefined && p.visible !== true ? { visible: p.visible } : {};\n\n const fullStyle = buildFrameStyle(p, parentDirection);\n const { outer: sizingStyle, inner: appearanceStyle } = splitFrameStyle(fullStyle);\n const { containerStyle: scrollOuter, contentStyle: scrollContent } = splitScrollStyle(fullStyle);\n\n function finalize(node: SDUINode): SDUINode {\n if (condition !== undefined) node.if = condition;\n if (actions && node.type === 'pressable') node.actions = actions;\n else if (actions && !isPressable) node.actions = actions;\n return node;\n }\n\n // ── Grid ──────────────────────────────────────────────────────────────────\n if (isGrid) {\n const gridStyle: Record<string, unknown> = { ...fullStyle, flexDirection: 'row', flexWrap: 'wrap' };\n delete gridStyle.gap;\n if (p.columnGap !== undefined) gridStyle.columnGap = p.columnGap;\n if (p.rowGap !== undefined) gridStyle.rowGap = p.rowGap;\n\n const gridView: SDUINode = {\n id: hasSafeArea || isPressable ? `${id}__grid` : id,\n type: 'view',\n props: {\n ...(Object.keys(gridStyle).length ? { style: gridStyle } : {}),\n numColumns: (p.columns as number | undefined) ?? 2,\n ...access,\n ...(hasSafeArea || isPressable ? {} : vis),\n },\n children,\n };\n\n if (!hasSafeArea && !isPressable) return finalize(gridView);\n\n let inner: SDUINode = gridView;\n\n if (hasSafeArea) {\n inner = {\n id: isPressable ? `${id}__sav` : id,\n type: 'safeareaview',\n props: { edges, ...(isPressable ? {} : vis) },\n children: [gridView],\n };\n }\n\n if (!isPressable) return finalize(inner);\n\n return finalize({\n id,\n type: 'pressable',\n props: {\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(actions ? { actions } : {}),\n ...vis,\n },\n children: [inner],\n });\n }\n\n // ── Scrollable ────────────────────────────────────────────────────────────\n if (isScrollable) {\n const scrollNode: SDUINode = {\n id: hasSafeArea || isPressable ? `${id}__scroll` : id,\n type: 'scrollview',\n props: {\n ...(Object.keys(scrollOuter).length ? { style: scrollOuter } : {}),\n ...(Object.keys(scrollContent).length ? { contentContainerStyle: scrollContent } : {}),\n horizontal: direction === 'horizontal',\n showsHorizontalScrollIndicator: p.showScrollIndicator === true,\n showsVerticalScrollIndicator: p.showScrollIndicator === true,\n ...access,\n ...(hasSafeArea || isPressable ? {} : vis),\n },\n children,\n };\n\n if (!hasSafeArea && !isPressable) return finalize(scrollNode);\n\n let inner: SDUINode = scrollNode;\n\n if (hasSafeArea) {\n inner = {\n id: isPressable ? `${id}__sav` : id,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(isPressable ? {} : vis),\n },\n children: [scrollNode],\n };\n }\n\n if (!isPressable) return finalize(inner);\n\n return finalize({\n id,\n type: 'pressable',\n props: {\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(actions ? { actions } : {}),\n ...vis,\n },\n children: [inner],\n });\n }\n\n // ── Plain view / safeareaview ─────────────────────────────────────────────\n\n if (!isPressable && !hasSafeArea) {\n return finalize({\n id,\n type: 'view',\n props: {\n ...(Object.keys(fullStyle).length ? { style: fullStyle } : {}),\n ...access,\n ...vis,\n },\n children,\n });\n }\n\n if (!isPressable && hasSafeArea) {\n return finalize({\n id,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(fullStyle).length ? { style: fullStyle } : {}),\n ...access,\n ...vis,\n },\n children,\n });\n }\n\n // isPressable === true\n const innerNode: SDUINode = hasSafeArea\n ? {\n id: `${id}__sav`,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(appearanceStyle).length ? { style: appearanceStyle } : {}),\n ...access,\n },\n children,\n }\n : {\n id: `${id}__content`,\n type: 'view',\n props: {\n ...(Object.keys(appearanceStyle).length ? { style: appearanceStyle } : {}),\n ...access,\n },\n children,\n };\n\n return finalize({\n id,\n type: 'pressable',\n props: {\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(actions ? { actions } : {}),\n ...vis,\n },\n children: [innerNode],\n });\n}\n\nfunction transformText(\n id: string,\n raw: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n\n if (props.textStyle) {\n const preset = TEXT_STYLE_PRESETS[props.textStyle as string];\n if (preset) {\n style.fontSize = preset.fontSize;\n style.fontWeight = preset.fontWeight;\n if (preset.lineHeight !== undefined) style.lineHeight = preset.lineHeight;\n if (preset.textTransform) style.textTransform = preset.textTransform;\n if (preset.letterSpacing !== undefined) style.letterSpacing = preset.letterSpacing;\n }\n }\n\n if (props.color) style.color = props.color;\n if (props.fontSize !== undefined) style.fontSize = props.fontSize;\n if (props.fontWeight) style.fontWeight = FONT_WEIGHT_MAP[props.fontWeight as string] ?? props.fontWeight;\n if (props.fontFamily) style.fontFamily = props.fontFamily;\n if (props.fontStyle) style.fontStyle = props.fontStyle;\n if (props.lineHeight !== undefined) style.lineHeight = props.lineHeight;\n if (props.letterSpacing !== undefined) style.letterSpacing = props.letterSpacing;\n if (props.align) style.textAlign = props.align;\n if (props.transform && props.transform !== 'none') style.textTransform = props.transform;\n if (props.decoration && props.decoration !== 'none') style.textDecorationLine = props.decoration;\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n resolveSizeModeRN(props.width as SizeModeValue | undefined, 'width', style, parentDirection);\n\n const textProps: Record<string, unknown> = {};\n if (typeof props.truncate === 'number' && props.truncate > 0) {\n textProps.numberOfLines = props.truncate;\n textProps.ellipsizeMode = 'tail';\n }\n if (props.adjustFontSize === true) {\n textProps.adjustsFontSizeToFit = true;\n if (props.minFontSize !== undefined) textProps.minimumFontScale = props.minFontSize;\n }\n if (props.selectable !== undefined) textProps.selectable = props.selectable;\n\n const node: SDUINode = {\n id,\n type: 'text',\n props: {\n // SDK contract: text content lives in the `value` prop.\n // The Craft editor stores text in `content`; map it to `value` here.\n value: (props.content as string | undefined) ?? '',\n ...(Object.keys(style).length ? { style } : {}),\n ...textProps,\n ...resolveAccessibilityProps(props),\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformImage(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n resolveSizeModeRN(props.width as SizeModeValue | undefined, 'width', style, parentDirection);\n resolveSizeModeRN(props.height as SizeModeValue | undefined, 'height', style, parentDirection);\n if (props.aspectRatio !== undefined) style.aspectRatio = props.aspectRatio;\n Object.assign(style, resolveRadiusRN(props.radius as RadiusValue | undefined));\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n\n const imageProps: Record<string, unknown> = {};\n if (props.src) imageProps.source = { uri: props.src };\n if (props.placeholder) imageProps.defaultSource = { uri: props.placeholder };\n if (props.fallback) imageProps.fallback = { uri: props.fallback };\n imageProps.resizeMode = FIT_TO_RESIZE_MODE[(props.fit as string | undefined) ?? 'cover'] ?? 'cover';\n\n if (props.background === true) imageProps.background = true;\n\n if (props.decorative) {\n imageProps.accessible = false;\n imageProps.accessibilityElementsHidden = true;\n } else if (props.alt) {\n imageProps.accessible = true;\n imageProps.accessibilityLabel = props.alt;\n }\n if (props.testID) imageProps.testID = props.testID;\n\n const node: SDUINode = {\n id,\n type: 'image',\n props: {\n ...(Object.keys(style).length ? { style } : {}),\n ...imageProps,\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n ...(props.background === true && children.length ? { children } : {}),\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformInput(\n id: string,\n raw: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n resolveSizeModeRN((props.width as SizeModeValue | undefined) ?? 'fill', 'width', style, parentDirection);\n Object.assign(style, resolvePaddingRN(props.padding as SpacingValue | undefined));\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n\n const inputTypeDefaults = INPUT_TYPE_MAP[(props.inputType as string | undefined) ?? 'text'] ?? INPUT_TYPE_MAP.text;\n\n const node: SDUINode = {\n id,\n type: 'textinput',\n props: {\n ...(Object.keys(style).length ? { style } : {}),\n ...(props.label !== undefined ? { label: props.label } : {}),\n ...(props.placeholder !== undefined ? { placeholder: props.placeholder } : {}),\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.helperText !== undefined ? { helperText: props.helperText } : {}),\n ...(props.errorText !== undefined ? { errorText: props.errorText } : {}),\n ...inputTypeDefaults,\n ...(props.autoCapitalize ? { autoCapitalize: props.autoCapitalize } : {}),\n returnKeyType: (props.returnKey as string | undefined) ?? 'done',\n multiline: (props.multiline as boolean | undefined) ?? false,\n ...(props.multiline && props.minLines ? { numberOfLines: props.minLines } : {}),\n ...(props.multiline && props.maxLines ? { maxNumberOfLines: props.maxLines } : {}),\n variant: (props.variant as string | undefined) ?? 'outline',\n size: (props.size as string | undefined) ?? 'md',\n ...(props.leadingIcon ? { leadingIcon: props.leadingIcon } : {}),\n ...(props.trailingIcon ? { trailingIcon: props.trailingIcon } : {}),\n ...resolveAccessibilityProps(props),\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformList(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const listType = (props.type as string | undefined) ?? 'stack';\n const direction: 'vertical' | 'horizontal' = props.direction === 'horizontal' ? 'horizontal' : 'vertical';\n const edges = safeAreaEdges(props.safeArea as SafeAreaValue | undefined);\n const hasSafeArea = edges.length > 0;\n const vis = props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {};\n\n const fullStyle = buildFrameStyle(props, parentDirection);\n const { containerStyle, contentStyle } = splitScrollStyle(fullStyle);\n\n // Children of PF.List are the per-item template.\n let itemTemplate: SDUINode | undefined;\n if (children.length === 1) {\n itemTemplate = children[0];\n } else if (children.length > 1) {\n itemTemplate = { id: `${id}__template`, type: 'view', props: {}, children };\n }\n\n const flatlistNode: SDUINode = {\n id: hasSafeArea ? `${id}__list` : id,\n type: 'flatlist',\n props: {\n ...(Object.keys(containerStyle).length ? { style: containerStyle } : {}),\n ...(Object.keys(contentStyle).length ? { contentContainerStyle: contentStyle } : {}),\n // `data` holds the binding expression for the list items array.\n // RecursiveRenderer resolves it and passes items to the FlatList primitive.\n data: props.data,\n keyExtractor: (props.keyExtractor as string | undefined) ?? 'id',\n ...(listType === 'grid' ? { numColumns: (props.columns as number | undefined) ?? 2 } : {}),\n ...(listType === 'grid' && props.columnGap ? { columnGap: props.columnGap } : {}),\n ...(listType === 'grid' && props.rowGap ? { rowGap: props.rowGap } : {}),\n horizontal: direction === 'horizontal',\n showsHorizontalScrollIndicator: props.showScrollIndicator === true,\n showsVerticalScrollIndicator: props.showScrollIndicator === true,\n ...resolveAccessibilityProps(props),\n ...(hasSafeArea ? {} : vis),\n },\n ...(itemTemplate ? { itemTemplate } : {}),\n };\n\n if (!hasSafeArea) {\n if (condition !== undefined) flatlistNode.if = condition;\n if (actions) flatlistNode.actions = actions;\n return flatlistNode;\n }\n\n const { outer: sizingStyle } = splitFrameStyle(fullStyle);\n const savNode: SDUINode = {\n id,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...vis,\n },\n children: [flatlistNode],\n };\n if (condition !== undefined) savNode.if = condition;\n if (actions) savNode.actions = actions;\n return savNode;\n}\n\nfunction transformIcon(\n id: string,\n raw: Record<string, unknown>,\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n\n const node: SDUINode = {\n id,\n type: 'icon',\n props: {\n name: props.name,\n set: (props.set as string | undefined) ?? 'default',\n size: (props.size as number | undefined) ?? 24,\n ...(props.color ? { color: props.color } : {}),\n ...(Object.keys(style).length ? { style } : {}),\n ...resolveAccessibilityProps(props),\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\n// ─── Core recursive builder ───────────────────────────────────────────────────\n\nfunction buildNodeFromSchema(\n nodeId: string,\n schema: CraftSchema,\n customComponents: CustomComponentsMap,\n visited: Set<string>,\n parentId?: string,\n): SDUINode {\n if (visited.has(nodeId)) {\n throw new Error(`Circular reference detected at node ${nodeId}`);\n }\n visited.add(nodeId);\n\n const node = schema[nodeId];\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n const resolvedName = node.type?.resolvedName;\n if (!resolvedName) throw new Error(`Invalid node type at ${nodeId}`);\n\n const raw = (node.props ?? {}) as Record<string, unknown>;\n const parentDirection: 'vertical' | 'horizontal' = parentId\n ? (schema[parentId]?.props?.['direction'] === 'horizontal' ? 'horizontal' : 'vertical')\n : 'vertical';\n const outputId = nodeId === 'ROOT' ? 'root' : nodeId;\n\n const childNodes = (node.nodes ?? []).map(childId =>\n buildNodeFromSchema(childId, schema, customComponents, visited, nodeId),\n );\n\n switch (resolvedName) {\n case 'PF.Screen':\n return transformScreen(outputId, raw, childNodes);\n\n case 'PF.Frame':\n return transformFrame(outputId, raw, childNodes, parentDirection);\n\n case 'PF.Text':\n return transformText(outputId, raw, parentDirection);\n\n case 'PF.Image':\n return transformImage(outputId, raw, childNodes, parentDirection);\n\n case 'PF.Input':\n return transformInput(outputId, raw, parentDirection);\n\n case 'PF.List':\n return transformList(outputId, raw, childNodes, parentDirection);\n\n case 'PF.Icon':\n return transformIcon(outputId, raw);\n\n case 'Component':\n return resolveCustomComponent(outputId, raw, parentDirection, customComponents);\n\n default:\n return { id: outputId, type: 'view', props: {}, children: childNodes };\n }\n}\n\n// ─── Custom component inliner ─────────────────────────────────────────────────\n\nfunction resolveCustomComponent(\n id: string,\n raw: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n customComponents: CustomComponentsMap,\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const { componentId, componentKey, propValues, ...frameProps } = props as {\n componentId?: string;\n componentKey?: string;\n propValues?: Record<string, unknown>;\n [k: string]: unknown;\n };\n const key = componentKey ?? componentId;\n const def = key ? customComponents[key] : undefined;\n\n const wrapperStyle = buildFrameStyle(frameProps, parentDirection);\n const vis = props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {};\n\n if (!def) {\n return {\n id,\n type: 'view',\n props: { ...(Object.keys(wrapperStyle).length ? { style: wrapperStyle } : {}), ...vis },\n children: [],\n };\n }\n\n const componentVisited = new Set<string>();\n const componentRoot = buildNodeFromSchema(\n def.rootNodeId,\n def.nodes,\n customComponents,\n componentVisited,\n );\n\n if (propValues && Object.keys(propValues).length) {\n componentRoot.props = { ...componentRoot.props, _propValues: propValues };\n }\n\n if (Object.keys(wrapperStyle).length > 0) {\n const wrapper: SDUINode = {\n id,\n type: 'view',\n props: { style: wrapperStyle, ...vis },\n children: [componentRoot],\n };\n if (condition !== undefined) wrapper.if = condition;\n if (actions) wrapper.actions = actions;\n return wrapper;\n }\n\n componentRoot.id = id;\n componentRoot.props = { ...componentRoot.props, ...vis };\n if (condition !== undefined) componentRoot.if = condition;\n if (actions) componentRoot.actions = actions;\n return componentRoot;\n}\n\n// ─── Main entry ───────────────────────────────────────────────────────────────\n\n/**\n * Convert a Craft.js editor schema into an SDUINode tree ready for the SDK's\n * RecursiveRenderer.\n *\n * @param craftJson - The full Craft.js node map (keyed by node ID, must include \"ROOT\").\n * @param customComponents - Optional map of reusable component definitions.\n * @returns The root SDUINode.\n */\nexport function transformCraftToSDUI(\n craftJson: CraftSchema,\n customComponents: CustomComponentsMap = {},\n): SDUINode {\n if (!craftJson || typeof craftJson !== 'object') {\n throw new Error('Invalid craft schema');\n }\n\n const visited = new Set<string>();\n return buildNodeFromSchema('ROOT', craftJson, customComponents, visited);\n}\n","/**\n * @pushframe/sdk — Server-Driven UI for React Native\n *\n * Usage:\n * import { PushFrame } from '@pushframe/sdk';\n *\n * <PushFrame.Provider apiKey=\"...\" context={...}>\n * <PushFrame.Screen name=\"home\" />\n * <PushFrame.Component name=\"promo-banner\" />\n * </PushFrame.Provider>\n */\n\n// ---------------------------------------------------------------------------\n// Component imports (for namespace assembly)\n// ---------------------------------------------------------------------------\n\nimport { PushFrameProvider } from './components/PushFrameProvider';\nimport { PushFrameScreen } from './components/PushFrameScreen';\nimport { PushFrameComponent } from './components/PushFrameComponent';\nimport { Text } from './primitives/Text';\nimport { View } from './primitives/View';\nimport { ScrollView } from './primitives/ScrollView';\nimport { Image } from './primitives/Image';\nimport { Pressable } from './primitives/Pressable';\nimport { TextInput } from './primitives/TextInput';\nimport { FlatList } from './primitives/FlatList';\nimport { Modal } from './primitives/Modal';\nimport { ActivityIndicator } from './primitives/ActivityIndicator';\nimport { Switch } from './primitives/Switch';\nimport { KeyboardAvoidingView } from './primitives/KeyboardAvoidingView';\nimport { SafeAreaView } from './primitives/SafeAreaView';\nimport { StatusBar } from './primitives/StatusBar';\n\n// ---------------------------------------------------------------------------\n// PushFrame namespace — the primary API surface\n// ---------------------------------------------------------------------------\n\n/**\n * The PushFrame namespace. Import this as the single entry-point for the SDK.\n *\n * Slot components:\n * - PushFrame.Provider — wraps the app, initialises registry and context\n * - PushFrame.Screen — full-page slot (fetches /screens/:name, applies flex:1)\n * - PushFrame.Component — inline slot (fetches /components/:name)\n *\n * Primitives (used internally by RecursiveRenderer, available for direct use):\n * - PushFrame.Text, PushFrame.View, PushFrame.ScrollView, PushFrame.Image\n * - PushFrame.Pressable, PushFrame.TextInput, PushFrame.FlatList\n * - PushFrame.Modal, PushFrame.ActivityIndicator, PushFrame.Switch\n * - PushFrame.KeyboardAvoidingView, PushFrame.SafeAreaView, PushFrame.StatusBar\n */\nexport const PushFrame = {\n // Slot components\n Provider: PushFrameProvider,\n Screen: PushFrameScreen,\n Component: PushFrameComponent,\n\n // Primitives\n Text,\n View,\n ScrollView,\n Image,\n Pressable,\n TextInput,\n FlatList,\n Modal,\n ActivityIndicator,\n Switch,\n KeyboardAvoidingView,\n SafeAreaView,\n StatusBar,\n} as const;\n\n// ---------------------------------------------------------------------------\n// Named exports (for tree-shaking and selective imports)\n// ---------------------------------------------------------------------------\n\n// Slot components\nexport { PushFrameProvider } from './components/PushFrameProvider';\nexport type { PushFrameProviderProps } from './components/PushFrameProvider';\nexport { PushFrameScreen } from './components/PushFrameScreen';\nexport { PushFrameComponent } from './components/PushFrameComponent';\nexport type { PushFrameSlotProps } from './components/PushFrameComponent';\n\n// Context\nexport { PushFrameContext, usePushFrameContext } from './context/PushFrameContext';\nexport type {\n PushFrameContextValue,\n SchemaNode,\n FlatListSchemaNode,\n Action,\n ToastPayload,\n BottomSheetPayload,\n ScrollToPayload,\n} from './context/PushFrameContext';\n\n// Registry\nexport { ComponentRegistry } from './registry/ComponentRegistry';\n\n// Renderer\nexport { RecursiveRenderer } from './renderer/RecursiveRenderer';\nexport type { RecursiveRendererProps, DispatchAction } from './renderer/RecursiveRenderer';\n\n// Binding utilities\nexport { resolveValue, resolveProps, resolveDeep } from './renderer/bindingResolver';\nexport { evaluateIf } from './renderer/conditionalEvaluator';\n\n// Primitives\nexport * from './primitives/index';\n\n// Transformer (Craft.js → SDUI; intended for backend / dashboard use)\nexport { transformCraftToSDUI } from './transformer/index';\nexport type {\n CraftNode,\n CraftSchema,\n SDUINode,\n CustomComponentDef,\n CustomComponentsMap,\n} from './transformer/index';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/context/PushFrameContext.ts","../src/primitives/Text.tsx","../src/primitives/View.tsx","../src/primitives/ScrollView.tsx","../src/primitives/Image.tsx","../src/primitives/Pressable.tsx","../src/primitives/TextInput.tsx","../src/primitives/FlatList.tsx","../src/primitives/Modal.tsx","../src/primitives/ActivityIndicator.tsx","../src/primitives/Switch.tsx","../src/primitives/KeyboardAvoidingView.tsx","../src/primitives/SafeAreaView.tsx","../src/primitives/StatusBar.tsx","../src/registry/ComponentRegistry.ts","../src/overlays/ToastHost.tsx","../src/overlays/BottomSheetHost.tsx","../src/renderer/bindingResolver.ts","../src/renderer/conditionalEvaluator.ts","../src/renderer/RecursiveRenderer.tsx","../src/components/PushFrameProvider.tsx","../src/components/PushFrameComponent.tsx","../src/components/PushFrameScreen.tsx","../src/transformer/index.ts","../src/index.ts"],"names":["RNText","jsx","RNView","ScrollView","RNScrollView","RNImage","RNPressable","RNTextInput","RNFlatList","RNModal","RNActivityIndicator","RNSwitch","RNKeyboardAvoidingView","RNStatusBar","forwardRef","ToastHost","_a","_b","View","Text","BottomSheetHost","useState","useRef","Animated","useCallback","useEffect","useImperativeHandle","Modal","Pressable","styles","StyleSheet","React","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createContext, useContext } from 'react';\nimport type React from 'react';\nimport type { ComponentRegistry } from '../registry/ComponentRegistry';\n\n// ---------------------------------------------------------------------------\n// Schema types\n// ---------------------------------------------------------------------------\n\nexport interface SchemaNode {\n id?: string;\n type: string;\n props?: Record<string, unknown>;\n children?: SchemaNode[];\n /** Per-item render template for flatlist nodes. */\n itemTemplate?: SchemaNode;\n actions?: Action[];\n /**\n * Conditional render expression. String values are resolved against the\n * context via {{}} binding syntax. Non-string values (boolean, number, null)\n * are coerced directly. Falsy → node is hidden.\n */\n if?: unknown;\n}\n\nexport interface FlatListSchemaNode extends SchemaNode {\n type: 'flatlist';\n itemTemplate: SchemaNode;\n}\n\nexport interface Action {\n trigger: string;\n action: string;\n payload?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Overlay payload types\n// ---------------------------------------------------------------------------\n\nexport interface ToastPayload {\n message: string;\n duration?: number;\n type?: 'success' | 'error' | 'info' | 'warning';\n}\n\nexport interface BottomSheetPayload {\n schema: SchemaNode;\n context?: Record<string, unknown>;\n}\n\nexport interface ScrollToPayload {\n x?: number;\n y?: number;\n animated?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Context value\n// ---------------------------------------------------------------------------\n\nexport interface PushFrameContextValue {\n apiKey: string;\n baseUrl: string;\n appVersion?: string;\n globalContext: Record<string, unknown>;\n registry: ComponentRegistry;\n loadingComponent?: React.ReactNode;\n fallbackComponent?: React.ReactNode;\n onAction?: (action: string, payload?: Record<string, unknown>) => void;\n onError?: (error: Error) => void;\n // Overlay imperatives\n showToast: (payload: ToastPayload) => void;\n showBottomSheet: (payload: BottomSheetPayload) => void;\n dismissBottomSheet: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Context and hook\n// ---------------------------------------------------------------------------\n\nexport const PushFrameContext = createContext<PushFrameContextValue | null>(null);\n\nexport function usePushFrameContext(): PushFrameContextValue {\n const ctx = useContext(PushFrameContext);\n if (!ctx) {\n throw new Error('[PushFrame] usePushFrameContext must be called inside <PushFrame.Provider>');\n }\n return ctx;\n}\n","import React from 'react';\nimport { Text as RNText } from 'react-native';\nimport type { TextProps as RNTextProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameTextProps extends RNTextProps {\n /** Pushframe: hidden by RecursiveRenderer before component renders. */\n if?: string;\n /** Pushframe: converted to handlers by RecursiveRenderer before component renders. */\n actions?: Action[];\n /**\n * Text content. Takes precedence over `children`.\n * Pushframe schema convention: use `value`.\n */\n value?: string;\n /**\n * Alias for `value`. The transformer outputs the Craft editor's `content`\n * field here. `value` takes precedence when both are present.\n */\n content?: string;\n}\n\n/**\n * Thin wrapper over React Native Text.\n * Strips `if`, `actions`, `content` before forwarding to RN.\n * Display priority: value > content > children (children remain in rest).\n */\nexport function Text({\n if: _if,\n actions: _actions,\n value,\n content,\n ...rest\n}: PushFrameTextProps) {\n // When value or content is provided it takes precedence over JSX children\n // (which are part of rest via RNTextProps inheritance).\n const textContent = value !== undefined ? value : content;\n if (textContent !== undefined) {\n return <RNText {...rest}>{textContent}</RNText>;\n }\n // No explicit text content — forward rest as-is (includes any children prop)\n return <RNText {...rest} />;\n}\n","import React from 'react';\nimport { View as RNView } from 'react-native';\nimport type { ViewProps as RNViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameViewProps extends RNViewProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native View.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function View({ if: _if, actions: _actions, ...rest }: PushFrameViewProps) {\n return <RNView {...rest} />;\n}\n","import React, { forwardRef } from 'react';\nimport { ScrollView as RNScrollView } from 'react-native';\nimport type { ScrollViewProps as RNScrollViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameScrollViewProps extends RNScrollViewProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native ScrollView.\n * Forwards ref to support programmatic scrolling (e.g. scroll-to action).\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport const ScrollView = forwardRef<RNScrollView, PushFrameScrollViewProps>(function ScrollView(\n { if: _if, actions: _actions, ...rest },\n ref,\n) {\n return <RNScrollView ref={ref} {...rest} />;\n});\n","import React from 'react';\nimport { Image as RNImage } from 'react-native';\nimport type { ImageProps as RNImageProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameImageProps extends Omit<RNImageProps, 'source'> {\n if?: string;\n actions?: Action[];\n /**\n * URI string for the image source. Maps to RN `source={{ uri: src }}`.\n * Takes precedence over the base `source` prop.\n */\n src?: string;\n /** Pass-through for cases where a static require() source is needed. */\n source?: RNImageProps['source'];\n}\n\n/**\n * Thin wrapper over React Native Image.\n * `src` maps to `source={{ uri: src }}`.\n * Strips `if`, `actions`, `src` before forwarding to RN.\n */\nexport function Image({ if: _if, actions: _actions, src, source, ...rest }: PushFrameImageProps) {\n const resolvedSource = src ? { uri: src } : source ?? { uri: '' };\n return <RNImage source={resolvedSource} {...rest} />;\n}\n","import React from 'react';\nimport { Pressable as RNPressable } from 'react-native';\nimport type { PressableProps as RNPressableProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFramePressableProps extends RNPressableProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native Pressable.\n * Actions with trigger \"onPress\" and \"onLongPress\" are wired by RecursiveRenderer\n * and forwarded through as standard RN props.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function Pressable({ if: _if, actions: _actions, ...rest }: PushFramePressableProps) {\n return <RNPressable {...rest} />;\n}\n","import React from 'react';\nimport { TextInput as RNTextInput } from 'react-native';\nimport type { TextInputProps as RNTextInputProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameTextInputProps extends Omit<RNTextInputProps, 'onChange'> {\n if?: string;\n actions?: Action[];\n /**\n * Schema trigger \"onChange\" — wired by RecursiveRenderer.\n * Mapped to RN `onChangeText` by this component.\n */\n onChange?: (text: string) => void;\n /**\n * Schema trigger \"onSubmit\" — wired by RecursiveRenderer.\n * Mapped to RN `onSubmitEditing` by this component.\n */\n onSubmit?: () => void;\n}\n\n/**\n * Thin wrapper over React Native TextInput.\n * Maps Pushframe schema triggers to RN event props:\n * onChange → onChangeText\n * onSubmit → onSubmitEditing\n * Strips `if`, `actions`, `onChange`, `onSubmit` before forwarding to RN.\n */\nexport function TextInput({\n if: _if,\n actions: _actions,\n onChange,\n onSubmit,\n ...rest\n}: PushFrameTextInputProps) {\n return (\n <RNTextInput\n onChangeText={onChange}\n onSubmitEditing={onSubmit ? () => onSubmit() : undefined}\n {...rest}\n />\n );\n}\n","import React from 'react';\nimport { FlatList as RNFlatList } from 'react-native';\nimport type { FlatListProps as RNFlatListProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameFlatListProps<T = unknown>\n extends Omit<RNFlatListProps<T>, 'data' | 'horizontal'> {\n if?: string;\n actions?: Action[];\n /**\n * Resolved array of items. Populated by RecursiveRenderer from the\n * `items` binding expression on the schema node.\n */\n items?: T[];\n /**\n * \"vertical\" (default) or \"horizontal\". Maps to RN `horizontal` boolean.\n */\n direction?: 'vertical' | 'horizontal';\n /**\n * Number of columns for grid layouts. Forwarded directly to RN FlatList.\n */\n numColumns?: number;\n}\n\n/**\n * Thin wrapper over React Native FlatList.\n * RecursiveRenderer handles this type specially — it resolves `items` from\n * a binding expression and constructs the `renderItem` per-item context.\n *\n * This component maps Pushframe props to RN FlatList props and strips\n * Pushframe-specific props before forwarding.\n */\nexport function FlatList<T = unknown>({\n if: _if,\n actions: _actions,\n items,\n direction,\n numColumns,\n ...rest\n}: PushFrameFlatListProps<T>) {\n return (\n <RNFlatList<T>\n data={items}\n horizontal={direction === 'horizontal'}\n numColumns={numColumns}\n {...rest}\n />\n );\n}\n","import React from 'react';\nimport { Modal as RNModal } from 'react-native';\nimport type { ModalProps as RNModalProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameModalProps extends RNModalProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native Modal.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function Modal({ if: _if, actions: _actions, ...rest }: PushFrameModalProps) {\n return <RNModal {...rest} />;\n}\n","import React from 'react';\nimport { ActivityIndicator as RNActivityIndicator } from 'react-native';\nimport type { ActivityIndicatorProps as RNActivityIndicatorProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameActivityIndicatorProps extends RNActivityIndicatorProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native ActivityIndicator.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function ActivityIndicator({\n if: _if,\n actions: _actions,\n ...rest\n}: PushFrameActivityIndicatorProps) {\n return <RNActivityIndicator {...rest} />;\n}\n","import React from 'react';\nimport { Switch as RNSwitch } from 'react-native';\nimport type { SwitchProps as RNSwitchProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameSwitchProps extends Omit<RNSwitchProps, 'onValueChange' | 'onChange'> {\n if?: string;\n actions?: Action[];\n /**\n * Schema trigger \"onChange\" — wired by RecursiveRenderer.\n * Mapped to RN `onValueChange` by this component.\n */\n onChange?: (value: boolean) => void;\n}\n\n/**\n * Thin wrapper over React Native Switch.\n * Maps Pushframe schema trigger to RN event prop:\n * onChange → onValueChange\n * Strips `if`, `actions`, `onChange` before forwarding to RN.\n */\nexport function Switch({ if: _if, actions: _actions, onChange, ...rest }: PushFrameSwitchProps) {\n return <RNSwitch onValueChange={onChange} {...rest} />;\n}\n","import React from 'react';\nimport { KeyboardAvoidingView as RNKeyboardAvoidingView } from 'react-native';\nimport type { KeyboardAvoidingViewProps as RNKeyboardAvoidingViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameKeyboardAvoidingViewProps extends RNKeyboardAvoidingViewProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native KeyboardAvoidingView.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function KeyboardAvoidingView({\n if: _if,\n actions: _actions,\n ...rest\n}: PushFrameKeyboardAvoidingViewProps) {\n return <RNKeyboardAvoidingView {...rest} />;\n}\n","import React from 'react';\nimport type { ViewProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameSafeAreaViewProps extends ViewProps {\n if?: string;\n actions?: Action[];\n /**\n * Edges to apply safe-area insets on.\n * Forwarded to react-native-safe-area-context's SafeAreaView when available.\n * Example: ['top', 'bottom']\n */\n edges?: string[];\n}\n\n// Prefer react-native-safe-area-context (standard Expo dependency) when available;\n// fall back to RN core SafeAreaView otherwise.\n// Both are typed to accept `edges` so the prop flows through without stripping;\n// the RN core fallback will silently ignore the unknown prop at runtime.\nlet NativeSafeAreaView: React.ComponentType<ViewProps & { edges?: string[] }>;\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n NativeSafeAreaView = (require('react-native-safe-area-context') as {\n SafeAreaView: React.ComponentType<ViewProps & { edges?: string[] }>;\n }).SafeAreaView;\n} catch {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n NativeSafeAreaView = (require('react-native') as {\n SafeAreaView: React.ComponentType<ViewProps & { edges?: string[] }>;\n }).SafeAreaView;\n}\n\n/**\n * Thin wrapper over SafeAreaView.\n * Uses react-native-safe-area-context when available, RN core otherwise.\n * Strips `if`, `actions` before forwarding; passes `edges` through to\n * react-native-safe-area-context (ignored gracefully in the RN core fallback).\n */\nexport function SafeAreaView({ if: _if, actions: _actions, ...rest }: PushFrameSafeAreaViewProps) {\n return <NativeSafeAreaView {...rest} />;\n}\n","import React from 'react';\nimport { StatusBar as RNStatusBar } from 'react-native';\nimport type { StatusBarProps as RNStatusBarProps } from 'react-native';\nimport type { Action } from '../context/PushFrameContext';\n\nexport interface PushFrameStatusBarProps extends RNStatusBarProps {\n if?: string;\n actions?: Action[];\n}\n\n/**\n * Thin wrapper over React Native StatusBar.\n * Strips `if`, `actions` before forwarding to RN.\n */\nexport function StatusBar({ if: _if, actions: _actions, ...rest }: PushFrameStatusBarProps) {\n return <RNStatusBar {...rest} />;\n}\n","import type React from 'react';\nimport { Text } from '../primitives/Text';\nimport { View } from '../primitives/View';\nimport { ScrollView } from '../primitives/ScrollView';\nimport { Image } from '../primitives/Image';\nimport { Pressable } from '../primitives/Pressable';\nimport { TextInput } from '../primitives/TextInput';\nimport { FlatList } from '../primitives/FlatList';\nimport { Modal } from '../primitives/Modal';\nimport { ActivityIndicator } from '../primitives/ActivityIndicator';\nimport { Switch } from '../primitives/Switch';\nimport { KeyboardAvoidingView } from '../primitives/KeyboardAvoidingView';\nimport { SafeAreaView } from '../primitives/SafeAreaView';\nimport { StatusBar } from '../primitives/StatusBar';\n\n// ---------------------------------------------------------------------------\n// Built-in type → component mappings (cannot be overridden)\n// ---------------------------------------------------------------------------\n\nconst BUILT_IN_TYPES: ReadonlySet<string> = new Set([\n 'text',\n 'view',\n 'scrollview',\n 'image',\n 'pressable',\n 'textinput',\n 'flatlist',\n 'modal',\n 'activityindicator',\n 'switch',\n 'keyboardavoidingview',\n 'safeareaview',\n 'statusbar',\n]);\n\nconst BUILT_IN_COMPONENTS: ReadonlyMap<string, React.ComponentType<Record<string, unknown>>> =\n new Map([\n ['text', Text as React.ComponentType<Record<string, unknown>>],\n ['view', View as React.ComponentType<Record<string, unknown>>],\n ['scrollview', ScrollView as React.ComponentType<Record<string, unknown>>],\n ['image', Image as React.ComponentType<Record<string, unknown>>],\n ['pressable', Pressable as React.ComponentType<Record<string, unknown>>],\n ['textinput', TextInput as React.ComponentType<Record<string, unknown>>],\n ['flatlist', FlatList as unknown as React.ComponentType<Record<string, unknown>>],\n ['modal', Modal as React.ComponentType<Record<string, unknown>>],\n ['activityindicator', ActivityIndicator as React.ComponentType<Record<string, unknown>>],\n ['switch', Switch as React.ComponentType<Record<string, unknown>>],\n ['keyboardavoidingview', KeyboardAvoidingView as React.ComponentType<Record<string, unknown>>],\n ['safeareaview', SafeAreaView as React.ComponentType<Record<string, unknown>>],\n ['statusbar', StatusBar as React.ComponentType<Record<string, unknown>>],\n ]);\n\n// ---------------------------------------------------------------------------\n// ComponentRegistry\n// ---------------------------------------------------------------------------\n\n/**\n * Maps component type strings to React components.\n *\n * Built-ins are always present and cannot be overridden.\n * Developer-registered components are merged on top for non-conflicting types.\n */\nexport class ComponentRegistry {\n private readonly components: Map<string, React.ComponentType<Record<string, unknown>>>;\n\n constructor(developerComponents?: Record<string, React.ComponentType<unknown>>) {\n // Start with built-ins\n this.components = new Map(BUILT_IN_COMPONENTS);\n\n // Merge developer components, skipping any that conflict with built-ins\n if (developerComponents) {\n for (const [type, component] of Object.entries(developerComponents)) {\n if (BUILT_IN_TYPES.has(type)) {\n console.warn(\n `[PushFrame] ComponentRegistry: \"${type}\" is a built-in type and cannot be overridden. ` +\n `Registration skipped.`,\n );\n continue;\n }\n this.components.set(type, component as React.ComponentType<Record<string, unknown>>);\n }\n }\n }\n\n /**\n * Resolve a type string to its React component.\n * Returns null if no component is registered for the type.\n */\n resolve(type: string): React.ComponentType<Record<string, unknown>> | null {\n return this.components.get(type) ?? null;\n }\n\n /**\n * Returns all registered type strings (useful for debugging).\n */\n types(): string[] {\n return Array.from(this.components.keys());\n }\n}\n","import React, {\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useRef,\n useCallback,\n} from 'react';\nimport { View, Text, StyleSheet, Animated } from 'react-native';\nimport type { ToastPayload } from '../context/PushFrameContext';\n\n// ---------------------------------------------------------------------------\n// Imperative handle\n// ---------------------------------------------------------------------------\n\nexport interface ToastHostHandle {\n show(payload: ToastPayload): void;\n}\n\n// ---------------------------------------------------------------------------\n// Internal state\n// ---------------------------------------------------------------------------\n\ninterface ToastState {\n id: number;\n message: string;\n duration: number;\n type: ToastPayload['type'];\n}\n\n// ---------------------------------------------------------------------------\n// Style helpers\n// ---------------------------------------------------------------------------\n\nconst TYPE_COLORS: Record<NonNullable<ToastPayload['type']>, string> = {\n success: '#22c55e',\n error: '#ef4444',\n info: '#3b82f6',\n warning: '#f59e0b',\n};\n\n// ---------------------------------------------------------------------------\n// ToastHost\n// ---------------------------------------------------------------------------\n\n/**\n * Rendered by PushFrameProvider at the root level.\n * Exposes an imperative `show()` handle for displaying toast messages.\n * Zero third-party dependencies — built with Animated API.\n */\nexport const ToastHost = forwardRef<ToastHostHandle>(function ToastHost(_props, ref) {\n const [toast, setToast] = useState<ToastState | null>(null);\n const opacity = useRef(new Animated.Value(0)).current;\n const idRef = useRef(0);\n\n const hide = useCallback(() => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }).start(() => {\n setToast(null);\n });\n }, [opacity]);\n\n useEffect(() => {\n if (!toast) return;\n\n // Fade in\n Animated.timing(opacity, {\n toValue: 1,\n duration: 200,\n useNativeDriver: true,\n }).start();\n\n // Auto-dismiss after duration\n const timer = setTimeout(() => {\n hide();\n }, toast.duration);\n\n return () => {\n clearTimeout(timer);\n };\n }, [toast, opacity, hide]);\n\n useImperativeHandle(\n ref,\n () => ({\n show(payload: ToastPayload) {\n idRef.current += 1;\n setToast({\n id: idRef.current,\n message: payload.message,\n duration: payload.duration ?? 3000,\n type: payload.type ?? 'info',\n });\n // Reset opacity for new toast\n opacity.setValue(0);\n },\n }),\n [opacity],\n );\n\n if (!toast) return null;\n\n const backgroundColor = TYPE_COLORS[toast.type ?? 'info'] ?? TYPE_COLORS.info;\n\n return (\n <View style={styles.container} pointerEvents=\"none\">\n <Animated.View style={[styles.toast, { backgroundColor, opacity }]}>\n <Text style={styles.message}>{toast.message}</Text>\n </Animated.View>\n </View>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n bottom: 60,\n left: 16,\n right: 16,\n alignItems: 'center',\n zIndex: 9999,\n },\n toast: {\n paddingVertical: 12,\n paddingHorizontal: 20,\n borderRadius: 8,\n maxWidth: 400,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 6,\n },\n message: {\n color: '#fff',\n fontSize: 14,\n fontWeight: '500',\n textAlign: 'center',\n },\n});\n","import React, {\n forwardRef,\n useImperativeHandle,\n useState,\n useRef,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n View,\n Modal,\n Pressable,\n StyleSheet,\n Animated,\n Dimensions,\n} from 'react-native';\nimport type { BottomSheetPayload } from '../context/PushFrameContext';\nimport type { SchemaNode } from '../context/PushFrameContext';\n\n// ---------------------------------------------------------------------------\n// Imperative handle\n// ---------------------------------------------------------------------------\n\nexport interface BottomSheetHostHandle {\n show(payload: BottomSheetPayload): void;\n dismiss(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Props from Provider (renderer callback)\n// ---------------------------------------------------------------------------\n\nexport interface BottomSheetHostProps {\n /**\n * Callback to render a SchemaNode inside the bottom sheet.\n * Provided by the Provider which has access to registry and context.\n */\n renderContent: (\n schema: SchemaNode,\n context?: Record<string, unknown>,\n ) => React.ReactElement | null;\n}\n\n// ---------------------------------------------------------------------------\n// BottomSheetHost\n// ---------------------------------------------------------------------------\n\nconst SCREEN_HEIGHT = Dimensions.get('window').height;\n\n/**\n * Rendered by PushFrameProvider at the root level.\n * Exposes imperative `show()` and `dismiss()` handles.\n * Zero third-party dependencies — built with Animated + Modal.\n */\nexport const BottomSheetHost = forwardRef<BottomSheetHostHandle, BottomSheetHostProps>(\n function BottomSheetHost({ renderContent }, ref) {\n const [visible, setVisible] = useState(false);\n const [payload, setPayload] = useState<BottomSheetPayload | null>(null);\n const translateY = useRef(new Animated.Value(SCREEN_HEIGHT)).current;\n\n const animateIn = useCallback(() => {\n Animated.spring(translateY, {\n toValue: 0,\n useNativeDriver: true,\n bounciness: 4,\n }).start();\n }, [translateY]);\n\n const animateOut = useCallback(\n (onDone?: () => void) => {\n Animated.timing(translateY, {\n toValue: SCREEN_HEIGHT,\n duration: 250,\n useNativeDriver: true,\n }).start(() => {\n onDone?.();\n });\n },\n [translateY],\n );\n\n useEffect(() => {\n if (visible) {\n translateY.setValue(SCREEN_HEIGHT);\n animateIn();\n }\n }, [visible, translateY, animateIn]);\n\n const dismiss = useCallback(() => {\n animateOut(() => {\n setVisible(false);\n setPayload(null);\n });\n }, [animateOut]);\n\n useImperativeHandle(\n ref,\n () => ({\n show(p: BottomSheetPayload) {\n setPayload(p);\n setVisible(true);\n },\n dismiss() {\n dismiss();\n },\n }),\n [dismiss],\n );\n\n if (!visible || !payload) return null;\n\n return (\n <Modal\n visible={visible}\n transparent\n animationType=\"none\"\n onRequestClose={dismiss}\n statusBarTranslucent\n >\n {/* Backdrop */}\n <Pressable style={styles.backdrop} onPress={dismiss} />\n\n {/* Sheet */}\n <Animated.View style={[styles.sheet, { transform: [{ translateY }] }]}>\n <View style={styles.handle} />\n <View style={styles.content}>\n {renderContent(payload.schema, payload.context)}\n </View>\n </Animated.View>\n </Modal>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst styles = StyleSheet.create({\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.5)',\n },\n sheet: {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: '#fff',\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n paddingBottom: 34, // safe-area approximation\n minHeight: 200,\n maxHeight: '80%',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -4 },\n shadowOpacity: 0.15,\n shadowRadius: 12,\n elevation: 20,\n },\n handle: {\n alignSelf: 'center',\n width: 36,\n height: 4,\n borderRadius: 2,\n backgroundColor: '#d1d5db',\n marginTop: 12,\n marginBottom: 8,\n },\n content: {\n flex: 1,\n paddingHorizontal: 16,\n paddingTop: 8,\n },\n});\n","/**\n * Binding resolver for PushFrame {{expression}} syntax.\n *\n * Rules:\n * - A value that is entirely \"{{expr}}\" resolves to the bound value (any type)\n * - A value with inline bindings \"Hello {{user.name}}\" resolves to a string\n * - Unresolved paths return undefined — never throws\n * - Non-string values are returned as-is\n */\n\nconst FULL_BINDING_RE = /^\\{\\{(.+)\\}\\}$/;\nconst INLINE_BINDING_RE = /\\{\\{([^}]+)\\}\\}/g;\n\n/**\n * Evaluate a binding expression string against the provided context.\n * Uses Function constructor for safe, sandboxed expression evaluation.\n * Returns undefined on any error.\n */\nfunction evaluateExpression(expr: string, context: Record<string, unknown>): unknown {\n try {\n const keys = Object.keys(context);\n const values = keys.map((k) => context[k]);\n // eslint-disable-next-line no-new-func\n const fn = new Function(...keys, `\"use strict\"; try { return (${expr}); } catch(e) { return undefined; }`) as (\n ...args: unknown[]\n ) => unknown;\n return fn(...values);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolve a single prop value against context.\n *\n * - String values: check for full binding \"{{expr}}\" or inline bindings \"Hello {{name}}\"\n * - Non-string values: returned as-is\n */\nexport function resolveValue(value: unknown, context: Record<string, unknown>): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n // Full binding: entire string is \"{{expr}}\" — return the actual resolved value\n const fullMatch = FULL_BINDING_RE.exec(value);\n if (fullMatch?.[1] !== undefined) {\n return evaluateExpression(fullMatch[1].trim(), context);\n }\n\n // Inline binding: replace each \"{{expr}}\" occurrence within the string\n if (INLINE_BINDING_RE.test(value)) {\n INLINE_BINDING_RE.lastIndex = 0;\n return value.replace(INLINE_BINDING_RE, (_, expr: string) => {\n const resolved = evaluateExpression(expr.trim(), context);\n return resolved !== undefined && resolved !== null ? String(resolved) : '';\n });\n }\n\n // No bindings — return as-is\n return value;\n}\n\n/**\n * Resolve all values in a props map against the context.\n * Recursively resolves nested objects and arrays.\n */\nexport function resolveProps(\n props: Record<string, unknown> | undefined,\n context: Record<string, unknown>,\n): Record<string, unknown> {\n if (!props) return {};\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n resolved[key] = resolveDeep(value, context);\n }\n return resolved;\n}\n\n/**\n * Recursively resolve binding expressions in a value (including nested objects/arrays).\n */\nexport function resolveDeep(value: unknown, context: Record<string, unknown>): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => resolveDeep(item, context));\n }\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = resolveDeep(v, context);\n }\n return result;\n }\n return resolveValue(value, context);\n}\n","import { resolveValue } from './bindingResolver';\n\n/**\n * Evaluate the `if` expression of a SchemaNode against the current context.\n *\n * Returns true → node should render\n * Returns false → node (and its entire subtree) should be skipped\n *\n * Falsy values: false, null, undefined, 0, \"\" all hide the node.\n * When `ifExpr` is undefined/null the node always renders.\n *\n * Accepts `unknown` to match the transformer's `if?: unknown` output:\n * - String values are resolved as {{}} binding expressions\n * - Non-string values (boolean, number, null) are coerced directly\n */\nexport function evaluateIf(\n ifExpr: unknown,\n context: Record<string, unknown>,\n): boolean {\n if (ifExpr === undefined || ifExpr === null) return true;\n\n // Non-string: treat the value itself as the condition (e.g. `if: false`)\n if (typeof ifExpr !== 'string') return Boolean(ifExpr);\n\n const resolved = resolveValue(ifExpr, context);\n\n // Standard falsy check — any falsy value hides the node\n return Boolean(resolved);\n}\n","import React from 'react';\nimport type { ReactElement } from 'react';\nimport type { SchemaNode, FlatListSchemaNode, Action } from '../context/PushFrameContext';\nimport type { ComponentRegistry } from '../registry/ComponentRegistry';\nimport { resolveProps, resolveDeep, resolveValue } from './bindingResolver';\nimport { evaluateIf } from './conditionalEvaluator';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DispatchAction {\n (actionName: string, payload?: Record<string, unknown>): void;\n}\n\nexport interface RecursiveRendererProps {\n node: SchemaNode;\n /** Current merged data context for binding resolution. */\n context: Record<string, unknown>;\n registry: ComponentRegistry;\n /** Handles all actions — built-ins and host-app bubbling. Provided by the slot component. */\n dispatchAction: DispatchAction;\n /** Shown when a component type is not found in the registry. */\n fallbackComponent?: React.ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Action wiring helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Group an actions array by trigger name and produce a prop map where each\n * trigger key maps to a callback that fires all actions for that trigger.\n */\nfunction buildActionProps(\n actions: Action[],\n context: Record<string, unknown>,\n dispatchAction: DispatchAction,\n): Record<string, (...args: unknown[]) => void> {\n // Group by trigger\n const grouped = new Map<string, Action[]>();\n for (const action of actions) {\n const existing = grouped.get(action.trigger);\n if (existing) {\n existing.push(action);\n } else {\n grouped.set(action.trigger, [action]);\n }\n }\n\n const result: Record<string, (...args: unknown[]) => void> = {};\n for (const [trigger, triggerActions] of grouped) {\n result[trigger] = (..._args: unknown[]) => {\n for (const action of triggerActions) {\n const resolvedPayload =\n action.payload !== undefined\n ? (resolveDeep(action.payload, context) as Record<string, unknown>)\n : undefined;\n dispatchAction(action.action, resolvedPayload);\n }\n };\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// FlatList special handling\n// ---------------------------------------------------------------------------\n\nfunction renderFlatListNode(\n node: FlatListSchemaNode,\n context: Record<string, unknown>,\n registry: ComponentRegistry,\n dispatchAction: DispatchAction,\n fallbackComponent: React.ReactNode,\n): ReactElement | null {\n // Resolve all props including the data/items binding\n const resolvedProps = resolveProps(node.props, context);\n\n // Build action props for the FlatList container itself\n const actionProps = node.actions ? buildActionProps(node.actions, context, dispatchAction) : {};\n\n // Support both `data` (transformer output) and `items` (legacy) for the array source.\n // Extract and resolve; the primitive receives it as `items`.\n const {\n data: resolvedData,\n items: resolvedItems,\n keyExtractor: keyExtractorExpr,\n direction,\n numColumns,\n visible: _visible,\n _propValues: _pv,\n ...restProps\n } = resolvedProps;\n\n const items = Array.isArray(resolvedData)\n ? (resolvedData as unknown[])\n : Array.isArray(resolvedItems)\n ? (resolvedItems as unknown[])\n : [];\n\n // Build a keyExtractor function if specified in schema\n let keyExtractorFn: ((item: unknown, index: number) => string) | undefined;\n if (typeof keyExtractorExpr === 'string') {\n const extractorExpr = keyExtractorExpr;\n keyExtractorFn = (item: unknown, index: number) => {\n const itemContext = { ...context, item, index };\n const resolved = resolveValue(extractorExpr, itemContext);\n return resolved !== undefined && resolved !== null ? String(resolved) : String(index);\n };\n }\n\n // itemTemplate: per-item context merges { item, index } into current context\n const renderItemFn = ({ item, index }: { item: unknown; index: number }): ReactElement | null => {\n const itemContext = { ...context, item, index };\n return (\n <RecursiveRenderer\n node={node.itemTemplate}\n context={itemContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackComponent}\n key={keyExtractorFn ? keyExtractorFn(item, index) : index}\n />\n );\n };\n\n const FlatListComponent = registry.resolve('flatlist');\n if (!FlatListComponent) {\n console.warn('[PushFrame] RecursiveRenderer: \"flatlist\" not found in registry.');\n return fallbackComponent ? (fallbackComponent as ReactElement) : null;\n }\n\n return React.createElement(FlatListComponent, {\n ...restProps,\n ...actionProps,\n items,\n direction,\n numColumns,\n keyExtractor: keyExtractorFn,\n renderItem: renderItemFn,\n });\n}\n\n// ---------------------------------------------------------------------------\n// RecursiveRenderer\n// ---------------------------------------------------------------------------\n\n/**\n * Stateless recursive renderer. Evaluates schema nodes and produces React elements.\n *\n * - Evaluates `if` expression (string or non-string); returns null when falsy\n * - Handles `visible` prop: returns null when visible resolves to false\n * - Handles FlatList nodes with per-item context injection via `itemTemplate`\n * - Supports `data` (transformer) and `items` (legacy) as FlatList data source\n * - Resolves all prop bindings against current context\n * - Merges `_propValues` into child context (custom component prop injection)\n * - Wires actions to component event handler props\n * - Looks up component in registry; renders fallback or null when not found\n * - Recurses into children\n */\nexport function RecursiveRenderer({\n node,\n context,\n registry,\n dispatchAction,\n fallbackComponent,\n}: RecursiveRendererProps): ReactElement | null {\n // 1. Evaluate conditional — skip entire subtree if falsy\n if (!evaluateIf(node.if, context)) {\n return null;\n }\n\n // 2. FlatList special case\n if (node.type === 'flatlist') {\n return renderFlatListNode(\n node as FlatListSchemaNode,\n context,\n registry,\n dispatchAction,\n fallbackComponent,\n );\n }\n\n // 3. Resolve props\n const resolvedProps = resolveProps(node.props, context);\n\n // 4. Handle `visible` prop — transformer sets visible:false when a node is hidden.\n // A missing or true value means visible; anything falsy hides the node.\n if (resolvedProps.visible !== undefined && !resolvedProps.visible) {\n return null;\n }\n\n // 5. Extract SDK-internal props that must not be forwarded to RN components.\n // `_propValues` carries custom-component instance overrides → merge into\n // child context so nested bindings resolve against them.\n const {\n visible: _visible,\n _propValues: propValuesRaw,\n ...propsToForward\n } = resolvedProps;\n\n const propValues = propValuesRaw as Record<string, unknown> | undefined;\n const childContext =\n propValues && Object.keys(propValues).length > 0\n ? { ...context, ...propValues }\n : context;\n\n // 6. Wire actions → inject as trigger-named props\n const actionProps = node.actions ? buildActionProps(node.actions, context, dispatchAction) : {};\n\n // 7. Resolve component from registry\n const Component = registry.resolve(node.type);\n if (!Component) {\n console.warn(\n `[PushFrame] RecursiveRenderer: Unknown component type \"${node.type}\". ` +\n `Registered types: ${registry.types().join(', ')}`,\n );\n return fallbackComponent ? (fallbackComponent as ReactElement) : null;\n }\n\n // 8. Render children recursively (using childContext for _propValues injection)\n const children =\n node.children && node.children.length > 0\n ? node.children.map((child, index) => (\n <RecursiveRenderer\n key={`${child.type}-${index}`}\n node={child}\n context={childContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackComponent}\n />\n ))\n : undefined;\n\n return React.createElement(Component, {\n ...propsToForward,\n ...actionProps,\n children,\n });\n}\n","import React, { useCallback, useMemo, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { PushFrameContext } from '../context/PushFrameContext';\nimport type {\n PushFrameContextValue,\n ToastPayload,\n BottomSheetPayload,\n SchemaNode,\n} from '../context/PushFrameContext';\nimport { ComponentRegistry } from '../registry/ComponentRegistry';\nimport { ToastHost } from '../overlays/ToastHost';\nimport type { ToastHostHandle } from '../overlays/ToastHost';\nimport { BottomSheetHost } from '../overlays/BottomSheetHost';\nimport type { BottomSheetHostHandle } from '../overlays/BottomSheetHost';\nimport { RecursiveRenderer } from '../renderer/RecursiveRenderer';\n\nconst DEFAULT_BASE_URL = 'https://api.pushframe.io';\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport interface PushFrameProviderProps {\n /** Pushframe API key — sent as Authorization header on all fetches. */\n apiKey: string;\n /**\n * Runtime data context. Screens/Components bind to this via {{expressions}}.\n * Merged at the Provider level; slot-level context wins on conflict.\n */\n context?: Record<string, unknown>;\n /**\n * Base URL of the Pushframe delivery service.\n * Defaults to the production endpoint: https://api.pushframe.io\n */\n baseUrl?: string;\n /**\n * Semver string appended to fetch paths for schema version targeting.\n * e.g. \"1.2.3\" → GET /screens/home/1.2.3\n * When not provided, \"null\" is sent as the appVersion in the URL.\n */\n appVersion?: string;\n /**\n * Developer-registered native components merged into the ComponentRegistry.\n * Built-in types cannot be overridden — conflicting keys are warned and skipped.\n */\n components?: Record<string, React.ComponentType<unknown>>;\n /** Default loading UI shown while schema is fetching or isLoading=true. */\n loadingComponent?: ReactNode;\n /** Default fallback UI shown on fetch error or unknown component type. */\n fallbackComponent?: ReactNode;\n /**\n * Global action handler. Receives actions that are not handled as built-ins\n * and were not stopped by a slot-level onAction.\n */\n onAction?: (action: string, payload?: Record<string, unknown>) => void;\n /** Called whenever a fetch or render error occurs. */\n onError?: (error: Error) => void;\n children: ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// PushFrameProvider\n// ---------------------------------------------------------------------------\n\n/**\n * Root provider for the PushFrame SDK.\n *\n * Wrap your app (or a subtree) in this provider. All PushFrame.Screen and\n * PushFrame.Component slots inside will fetch their schemas from the delivery\n * service and render them using the shared ComponentRegistry and context.\n *\n * Also renders the ToastHost and BottomSheetHost overlay hosts at root level\n * so any component in the tree can trigger them via built-in actions.\n */\nexport function PushFrameProvider({\n apiKey,\n context = {},\n baseUrl = DEFAULT_BASE_URL,\n appVersion,\n components,\n loadingComponent,\n fallbackComponent,\n onAction,\n onError,\n children,\n}: PushFrameProviderProps) {\n // Registry — created once (components prop should be stable)\n const registry = useMemo(\n () => new ComponentRegistry(components),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Overlay refs\n const toastRef = useRef<ToastHostHandle>(null);\n const bottomSheetRef = useRef<BottomSheetHostHandle>(null);\n\n const showToast = useCallback((payload: ToastPayload) => {\n toastRef.current?.show(payload);\n }, []);\n\n const showBottomSheet = useCallback((payload: BottomSheetPayload) => {\n bottomSheetRef.current?.show(payload);\n }, []);\n\n const dismissBottomSheet = useCallback(() => {\n bottomSheetRef.current?.dismiss();\n }, []);\n\n // renderContent for BottomSheetHost — renders a schema node with the Provider's registry\n const renderBottomSheetContent = useCallback(\n (schema: SchemaNode, sheetContext?: Record<string, unknown>) => {\n const mergedContext = sheetContext ? { ...context, ...sheetContext } : context;\n // No-op dispatchAction for bottom sheet content (actions bubble via onAction)\n const dispatchAction = (action: string, payload?: Record<string, unknown>) => {\n if (action === 'dismiss-bottom-sheet') {\n dismissBottomSheet();\n return;\n }\n if (action === 'show-toast') {\n showToast(payload as unknown as ToastPayload);\n return;\n }\n onAction?.(action, payload);\n };\n return (\n <RecursiveRenderer\n node={schema}\n context={mergedContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackComponent}\n />\n );\n },\n [context, registry, fallbackComponent, onAction, dismissBottomSheet, showToast],\n );\n\n const contextValue = useMemo<PushFrameContextValue>(\n () => ({\n apiKey,\n baseUrl,\n appVersion,\n globalContext: context,\n registry,\n loadingComponent,\n fallbackComponent,\n onAction,\n onError,\n showToast,\n showBottomSheet,\n dismissBottomSheet,\n }),\n [\n apiKey,\n baseUrl,\n appVersion,\n context,\n registry,\n loadingComponent,\n fallbackComponent,\n onAction,\n onError,\n showToast,\n showBottomSheet,\n dismissBottomSheet,\n ],\n );\n\n return (\n <PushFrameContext.Provider value={contextValue}>\n {children}\n <ToastHost ref={toastRef} />\n <BottomSheetHost ref={bottomSheetRef} renderContent={renderBottomSheetContent} />\n </PushFrameContext.Provider>\n );\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport type { ReactNode, ReactElement } from 'react';\nimport { usePushFrameContext } from '../context/PushFrameContext';\nimport type { SchemaNode, ToastPayload, BottomSheetPayload } from '../context/PushFrameContext';\nimport { RecursiveRenderer } from '../renderer/RecursiveRenderer';\n\n// ---------------------------------------------------------------------------\n// Shared slot props (used by both Screen and Component)\n// ---------------------------------------------------------------------------\n\nexport interface PushFrameSlotProps {\n /** ID of the screen/component to fetch from the delivery service. */\n id: string;\n /**\n * Data context local to this slot. Merged with the Provider context;\n * local keys win on conflict.\n */\n context?: Record<string, unknown>;\n /**\n * External loading signal from the host app. When true, loading UI is shown\n * even if the schema has already been fetched.\n */\n isLoading?: boolean;\n /**\n * Loading UI shown while isLoading=true OR schema is being fetched.\n * Falls back to Provider-level loadingComponent.\n */\n loadingComponent?: ReactNode;\n /**\n * Fallback UI shown on fetch error or unresolvable component type.\n * Falls back to Provider-level fallbackComponent.\n */\n fallbackComponent?: ReactNode;\n /**\n * Slot-level action handler. Return true to stop the action from bubbling\n * to the Provider-level onAction.\n */\n onAction?: (action: string, payload?: Record<string, unknown>) => boolean | void;\n}\n\n// ---------------------------------------------------------------------------\n// Schema fetch\n// ---------------------------------------------------------------------------\n\nasync function fetchSchema(\n baseUrl: string,\n apiKey: string,\n path: string,\n): Promise<SchemaNode> {\n const url = new URL(path, baseUrl + '/').toString();\n const headers: Record<string, string> = {\n Accept: 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'x-project-key': apiKey,\n };\n\n const res = await fetch(url, { headers });\n if (!res.ok) {\n throw new Error(`[PushFrame] HTTP ${res.status} fetching \"${path}\"`);\n }\n\n const envelope = (await res.json()) as { schema?: SchemaNode } & SchemaNode;\n return envelope.schema ?? envelope;\n}\n\n// ---------------------------------------------------------------------------\n// PushFrameComponent\n// ---------------------------------------------------------------------------\n\ninterface PushFrameComponentInternalProps extends PushFrameSlotProps {\n /** Resource type — determines which delivery endpoint to hit. */\n resourceType: 'screens' | 'components';\n /** When true, wraps the rendered output with flex:1 (used by Screen). */\n fullscreen?: boolean;\n}\n\nfunction PushFrameComponentInternal({\n id,\n resourceType,\n context: slotContext,\n isLoading: externalLoading,\n loadingComponent: slotLoading,\n fallbackComponent: slotFallback,\n onAction: slotOnAction,\n fullscreen,\n}: PushFrameComponentInternalProps) {\n const {\n apiKey,\n baseUrl,\n appVersion,\n globalContext,\n registry,\n loadingComponent: providerLoading,\n fallbackComponent: providerFallback,\n onAction: providerOnAction,\n onError,\n showToast,\n showBottomSheet,\n dismissBottomSheet,\n } = usePushFrameContext();\n\n const [schema, setSchema] = useState<SchemaNode | null>(null);\n const [fetchError, setFetchError] = useState<Error | null>(null);\n const [isFetching, setIsFetching] = useState(true);\n\n // Build fetch path: {resourceType}/{id}/{appVersion} — \"null\" when not set\n const fetchPath = `${resourceType}/${encodeURIComponent(id)}/${encodeURIComponent(appVersion ?? 'null')}`;\n\n // Merged data context: provider → slot (local wins)\n const mergedContext = slotContext ? { ...globalContext, ...slotContext } : globalContext;\n\n // Resolved UI components with fallback precedence\n const loadingUI = slotLoading !== undefined ? slotLoading : providerLoading;\n const fallbackUI = slotFallback !== undefined ? slotFallback : providerFallback;\n\n // Fetch schema\n useEffect(() => {\n let cancelled = false;\n setSchema(null);\n setFetchError(null);\n setIsFetching(true);\n\n fetchSchema(baseUrl, apiKey, fetchPath)\n .then((s) => {\n if (!cancelled) {\n setSchema(s);\n setIsFetching(false);\n }\n })\n .catch((err: unknown) => {\n if (!cancelled) {\n const error = err instanceof Error ? err : new Error(String(err));\n setFetchError(error);\n setIsFetching(false);\n onError?.(error);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [fetchPath, baseUrl, apiKey, onError]);\n\n // Dispatch action — handles built-ins, then bubbles via slot → provider\n const dispatchAction = useCallback(\n (action: string, payload?: Record<string, unknown>) => {\n // Built-in actions — never bubble to host app\n if (action === 'show-toast') {\n showToast(payload as unknown as ToastPayload);\n return;\n }\n if (action === 'show-bottom-sheet') {\n showBottomSheet(payload as unknown as BottomSheetPayload);\n return;\n }\n if (action === 'dismiss-bottom-sheet') {\n dismissBottomSheet();\n return;\n }\n if (action === 'scroll-to') {\n // scroll-to is handled by the ScrollView primitive via ref; no bubbling needed\n return;\n }\n\n // Bubble: slot onAction first; if it returns true, stop\n const stopped = slotOnAction?.(action, payload);\n if (stopped) return;\n\n // Provider onAction\n providerOnAction?.(action, payload);\n },\n [showToast, showBottomSheet, dismissBottomSheet, slotOnAction, providerOnAction],\n );\n\n // Loading state: external flag OR schema not yet fetched\n const isShowingLoader = externalLoading || isFetching;\n\n if (isShowingLoader) {\n return (loadingUI as ReactElement | null) ?? null;\n }\n\n if (fetchError || !schema) {\n return (fallbackUI as ReactElement | null) ?? null;\n }\n\n const rendered = (\n <RecursiveRenderer\n node={schema}\n context={mergedContext}\n registry={registry}\n dispatchAction={dispatchAction}\n fallbackComponent={fallbackUI}\n />\n );\n\n if (fullscreen) {\n // PushFrame.Screen wraps with flex:1\n return <>{rendered}</>;\n }\n\n return rendered;\n}\n\n// ---------------------------------------------------------------------------\n// Public PushFrameComponent\n// ---------------------------------------------------------------------------\n\n/**\n * Fetches a component schema from GET /components/:id[/:appVersion] on the\n * delivery service and renders it inline using RecursiveRenderer.\n *\n * Context is merged: Provider context → slot context (local wins).\n * Actions bubble: slot onAction → Provider onAction.\n * Built-in actions (show-toast, show-bottom-sheet, etc.) are handled internally.\n */\nexport function PushFrameComponent(props: PushFrameSlotProps) {\n return <PushFrameComponentInternal {...props} resourceType=\"components\" />;\n}\n\n// Re-export internal for Screen to use\nexport { PushFrameComponentInternal };\n","import React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { PushFrameComponentInternal } from './PushFrameComponent';\nimport type { PushFrameSlotProps } from './PushFrameComponent';\n\n/**\n * Fetches a screen schema from GET /screens/:id[/:appVersion] on the delivery\n * service and renders it with flex:1 sizing (full-page layout).\n *\n * Identical to PushFrame.Component in behaviour, but:\n * - Fetches from /screens/:id instead of /components/:id\n * - Applies flex:1 to its container so it fills the available space\n *\n * Context is merged: Provider context → slot context (local wins).\n * Actions bubble: slot onAction → Provider onAction.\n * Built-in actions (show-toast, show-bottom-sheet, etc.) are handled internally.\n */\nexport function PushFrameScreen(props: PushFrameSlotProps) {\n return (\n <View style={styles.container}>\n <PushFrameComponentInternal {...props} resourceType=\"screens\" fullscreen />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n","/**\n * Craft.js → PushFrame SDUI transformer\n *\n * Converts a Craft.js editor schema (produced by the dashboard) into the\n * SDUINode tree consumed by the SDK's RecursiveRenderer at runtime.\n *\n * This module is intended for use by the backend/service layer or the\n * dashboard — it is NOT executed inside the React Native app at runtime.\n */\n\nimport type { Action, SchemaNode } from '../context/PushFrameContext';\n\n// ─── Craft input types ────────────────────────────────────────────────────────\n\nexport type CraftNode = {\n type: { resolvedName: string };\n props?: Record<string, unknown>;\n nodes?: string[];\n parent?: string;\n};\n\nexport type CraftSchema = Record<string, CraftNode>;\n\n// ─── Output types ─────────────────────────────────────────────────────────────\n\ntype SpacingValue = number | { top?: number; right?: number; bottom?: number; left?: number };\ntype RadiusValue = number | { tl?: number; tr?: number; br?: number; bl?: number };\ntype SizeModeValue = 'fill' | 'hug' | number;\n\ninterface ShadowValue {\n color: string;\n offsetX: number;\n offsetY: number;\n blur: number;\n /** 0–1 */\n opacity: number;\n}\n\ninterface BorderValue {\n width?: number;\n color?: string;\n style?: 'solid' | 'dotted' | 'dashed';\n widths?: { top?: number; right?: number; bottom?: number; left?: number };\n}\n\ninterface SafeAreaValue {\n top?: boolean;\n right?: boolean;\n bottom?: boolean;\n left?: boolean;\n}\n\n/**\n * The SDUI node shape produced by this transformer and consumed by the SDK's\n * RecursiveRenderer. Aligned with `SchemaNode` from the SDK context.\n */\nexport interface SDUINode extends SchemaNode {\n id: string;\n type: string;\n props: Record<string, unknown>;\n children?: SDUINode[];\n /** FlatList per-item render template. */\n itemTemplate?: SDUINode;\n /** Conditional render expression. Falsy → node is hidden. */\n if?: unknown;\n actions?: Action[];\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst BRIDGE_KEYS = new Set([\n '_schemaId', '_schemaType', '_schemaActions', '_schemaIf', '_schemaRenderItem',\n]);\n\nconst ALIGN_MAP: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst DISTRIBUTE_MAP: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n 'space-between': 'space-between',\n 'space-around': 'space-around',\n 'space-evenly': 'space-evenly',\n};\n\nconst FIT_TO_RESIZE_MODE: Record<string, string> = {\n cover: 'cover',\n contain: 'contain',\n fill: 'stretch', // RN uses 'stretch', not 'fill'\n center: 'center',\n};\n\nconst FONT_WEIGHT_MAP: Record<string, string> = {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n};\n\nconst TEXT_STYLE_PRESETS: Record<string, {\n fontSize: number;\n fontWeight: string;\n lineHeight?: number;\n textTransform?: string;\n letterSpacing?: number;\n}> = {\n 'heading-1': { fontSize: 28, fontWeight: '700' },\n 'heading-2': { fontSize: 22, fontWeight: '700' },\n 'heading-3': { fontSize: 18, fontWeight: '600' },\n 'body': { fontSize: 16, fontWeight: '400' },\n 'body-sm': { fontSize: 14, fontWeight: '400' },\n 'caption': { fontSize: 12, fontWeight: '400' },\n 'label': { fontSize: 13, fontWeight: '500' },\n 'overline': { fontSize: 11, fontWeight: '500', textTransform: 'uppercase', letterSpacing: 0.8 },\n};\n\n// inputType → RN keyboard + behaviour props\nconst INPUT_TYPE_MAP: Record<string, {\n keyboardType: string;\n secureTextEntry: boolean;\n autoCapitalize: string;\n autoCorrect: boolean;\n}> = {\n text: { keyboardType: 'default', secureTextEntry: false, autoCapitalize: 'sentences', autoCorrect: true },\n email: { keyboardType: 'email-address', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n password: { keyboardType: 'default', secureTextEntry: true, autoCapitalize: 'none', autoCorrect: false },\n number: { keyboardType: 'numeric', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n decimal: { keyboardType: 'decimal-pad', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n phone: { keyboardType: 'phone-pad', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n url: { keyboardType: 'url', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n search: { keyboardType: 'default', secureTextEntry: false, autoCapitalize: 'none', autoCorrect: false },\n};\n\n// ─── Prop helpers ─────────────────────────────────────────────────────────────\n\nfunction stripBridgeKeys(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const k in props) {\n if (!BRIDGE_KEYS.has(k)) out[k] = props[k];\n }\n return out;\n}\n\nfunction extractMeta(raw: Record<string, unknown>): {\n actions: Action[] | undefined;\n condition: unknown;\n} {\n return {\n actions: raw._schemaActions as Action[] | undefined,\n condition: raw._schemaIf,\n };\n}\n\n// ─── RN style sub-builders ────────────────────────────────────────────────────\n\nfunction resolveSizeModeRN(\n value: SizeModeValue | undefined,\n axis: 'width' | 'height',\n out: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): void {\n if (value === undefined) return;\n if (value === 'fill') {\n const isMainAxis =\n (parentDirection === 'vertical' && axis === 'height') ||\n (parentDirection === 'horizontal' && axis === 'width');\n if (isMainAxis) {\n out.flex = 1;\n } else {\n out.alignSelf = 'stretch';\n }\n } else if (value === 'hug') {\n out.alignSelf = 'flex-start';\n } else {\n out[axis] = value;\n }\n}\n\nfunction resolvePaddingRN(padding: SpacingValue | undefined): Record<string, unknown> {\n if (padding === undefined) return {};\n if (typeof padding === 'number') return { padding };\n const { top, right, bottom, left } = padding;\n if (top === bottom && left === right && top !== undefined && left !== undefined) {\n return { paddingVertical: top, paddingHorizontal: left };\n }\n return {\n ...(top !== undefined ? { paddingTop: top } : {}),\n ...(right !== undefined ? { paddingRight: right } : {}),\n ...(bottom !== undefined ? { paddingBottom: bottom } : {}),\n ...(left !== undefined ? { paddingLeft: left } : {}),\n };\n}\n\nfunction resolveRadiusRN(radius: RadiusValue | undefined): Record<string, unknown> {\n if (radius === undefined) return {};\n if (typeof radius === 'number') return { borderRadius: radius };\n return {\n ...(radius.tl !== undefined ? { borderTopLeftRadius: radius.tl } : {}),\n ...(radius.tr !== undefined ? { borderTopRightRadius: radius.tr } : {}),\n ...(radius.br !== undefined ? { borderBottomRightRadius: radius.br } : {}),\n ...(radius.bl !== undefined ? { borderBottomLeftRadius: radius.bl } : {}),\n };\n}\n\nfunction resolveBorderRN(border: BorderValue | undefined): Record<string, unknown> {\n if (!border) return {};\n const out: Record<string, unknown> = {};\n if (border.style) out.borderStyle = border.style;\n if (border.color) out.borderColor = border.color;\n if (border.widths) {\n const w = border.widths;\n if (w.top !== undefined) out.borderTopWidth = w.top;\n if (w.right !== undefined) out.borderRightWidth = w.right;\n if (w.bottom !== undefined) out.borderBottomWidth = w.bottom;\n if (w.left !== undefined) out.borderLeftWidth = w.left;\n } else if (border.width !== undefined) {\n out.borderWidth = border.width;\n }\n return out;\n}\n\nfunction resolveShadowRN(shadow: ShadowValue | undefined): Record<string, unknown> {\n if (!shadow) return {};\n return {\n shadowColor: shadow.color,\n shadowOffset: { width: shadow.offsetX, height: shadow.offsetY },\n shadowRadius: shadow.blur,\n shadowOpacity: shadow.opacity,\n elevation: Math.round(shadow.blur / 2),\n };\n}\n\nfunction resolveTransformRN(props: {\n rotate?: number;\n scale?: number;\n translateX?: number;\n translateY?: number;\n}): Record<string, unknown> {\n const transforms: Record<string, unknown>[] = [];\n if (props.rotate !== undefined && props.rotate !== 0) transforms.push({ rotate: `${props.rotate}deg` });\n if (props.scale !== undefined && props.scale !== 1) transforms.push({ scale: props.scale });\n if (props.translateX !== undefined && props.translateX !== 0) transforms.push({ translateX: props.translateX });\n if (props.translateY !== undefined && props.translateY !== 0) transforms.push({ translateY: props.translateY });\n return transforms.length ? { transform: transforms } : {};\n}\n\nfunction resolvePositionRN(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (props.position) out.position = props.position;\n if (props.position === 'absolute') {\n if (props.top !== undefined) out.top = props.top;\n if (props.right !== undefined) out.right = props.right;\n if (props.bottom !== undefined) out.bottom = props.bottom;\n if (props.left !== undefined) out.left = props.left;\n }\n if (props.zIndex !== undefined) out.zIndex = props.zIndex;\n return out;\n}\n\nfunction resolveAccessibilityProps(props: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (props.accessible !== undefined) out.accessible = props.accessible;\n if (props.accessibilityLabel) out.accessibilityLabel = props.accessibilityLabel;\n if (props.accessibilityRole) out.accessibilityRole = props.accessibilityRole;\n if (props.testID) out.testID = props.testID;\n return out;\n}\n\n// ─── Full frame-style builder ─────────────────────────────────────────────────\n\nfunction buildFrameStyle(\n props: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): Record<string, unknown> {\n const style: Record<string, unknown> = {};\n const frameType = (props.type as string | undefined) ?? 'stack';\n\n if (frameType === 'grid') {\n if (props.align) style.alignItems = ALIGN_MAP[props.align as string] ?? props.align;\n } else {\n style.flexDirection = props.direction === 'horizontal' ? 'row' : 'column';\n if (props.align) style.alignItems = ALIGN_MAP[props.align as string] ?? props.align;\n if (props.distribute) style.justifyContent = DISTRIBUTE_MAP[props.distribute as string] ?? props.distribute;\n if (props.gap !== undefined && props.gap !== 0) style.gap = props.gap;\n if (props.wrap === 'yes') style.flexWrap = 'wrap';\n }\n\n resolveSizeModeRN(props.width as SizeModeValue | undefined, 'width', style, parentDirection);\n resolveSizeModeRN(props.height as SizeModeValue | undefined, 'height', style, parentDirection);\n if (props.minWidth !== undefined) style.minWidth = props.minWidth;\n if (props.maxWidth !== undefined) style.maxWidth = props.maxWidth;\n if (props.minHeight !== undefined) style.minHeight = props.minHeight;\n if (props.maxHeight !== undefined) style.maxHeight = props.maxHeight;\n if (props.aspectRatio !== undefined) style.aspectRatio = props.aspectRatio;\n\n Object.assign(style, resolvePaddingRN(props.padding as SpacingValue | undefined));\n\n if (props.fill && props.fill !== 'transparent') style.backgroundColor = props.fill;\n Object.assign(style, resolveRadiusRN(props.radius as RadiusValue | undefined));\n Object.assign(style, resolveBorderRN(props.border as BorderValue | undefined));\n Object.assign(style, resolveShadowRN(props.shadow as ShadowValue | undefined));\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n if (props.overflow === true) style.overflow = 'hidden';\n\n Object.assign(style, resolvePositionRN(props));\n Object.assign(style, resolveTransformRN(props as Parameters<typeof resolveTransformRN>[0]));\n\n return style;\n}\n\nfunction splitFrameStyle(style: Record<string, unknown>): {\n outer: Record<string, unknown>;\n inner: Record<string, unknown>;\n} {\n const OUTER_KEYS = new Set([\n 'flex', 'alignSelf', 'width', 'height',\n 'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'aspectRatio',\n 'position', 'top', 'right', 'bottom', 'left', 'zIndex',\n 'transform',\n ]);\n const outer: Record<string, unknown> = {};\n const inner: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(style)) {\n if (OUTER_KEYS.has(k)) outer[k] = v;\n else inner[k] = v;\n }\n return { outer, inner };\n}\n\nfunction splitScrollStyle(style: Record<string, unknown>): {\n containerStyle: Record<string, unknown>;\n contentStyle: Record<string, unknown>;\n} {\n const CONTENT_KEYS = new Set([\n 'flexDirection', 'justifyContent', 'alignItems', 'flexWrap', 'gap',\n 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'paddingVertical', 'paddingHorizontal',\n ]);\n const containerStyle: Record<string, unknown> = {};\n const contentStyle: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(style)) {\n if (CONTENT_KEYS.has(k)) contentStyle[k] = v;\n else containerStyle[k] = v;\n }\n return { containerStyle, contentStyle };\n}\n\n// ─── Safe area helper ─────────────────────────────────────────────────────────\n\nfunction safeAreaEdges(safeArea: SafeAreaValue | undefined): string[] {\n if (!safeArea) return [];\n return (Object.entries(safeArea) as [string, boolean][])\n .filter(([, v]) => v === true)\n .map(([edge]) => edge);\n}\n\n// ─── Custom component definition ──────────────────────────────────────────────\n\nexport interface CustomComponentDef {\n rootNodeId: string;\n nodes: CraftSchema;\n}\n\nexport type CustomComponentsMap = Record<string, CustomComponentDef>;\n\n// ─── Node transformers ────────────────────────────────────────────────────────\n\nfunction transformScreen(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const edges = safeAreaEdges(props.safeArea as SafeAreaValue | undefined);\n const hasSafeArea = edges.length > 0;\n const vis = props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {};\n\n const style: Record<string, unknown> = { flex: 1 };\n if (props.backgroundColor) style.backgroundColor = props.backgroundColor;\n\n let content: SDUINode[];\n if (props.scrollable) {\n const paddingStyle = resolvePaddingRN(props.padding as SpacingValue | undefined);\n const scrollNode: SDUINode = {\n id: `${id}__scroll`,\n type: 'scrollview',\n props: {\n style: { flex: 1 },\n ...(Object.keys(paddingStyle).length ? { contentContainerStyle: paddingStyle } : {}),\n showsVerticalScrollIndicator: false,\n showsHorizontalScrollIndicator: false,\n },\n children,\n };\n content = [scrollNode];\n } else {\n Object.assign(style, resolvePaddingRN(props.padding as SpacingValue | undefined));\n content = children;\n }\n\n const statusBar = props.statusBarStyle && props.statusBarStyle !== 'dark'\n ? { statusBarStyle: props.statusBarStyle }\n : {};\n\n const node: SDUINode = {\n id,\n type: hasSafeArea ? 'safeareaview' : 'view',\n props: {\n style,\n ...(hasSafeArea ? { edges } : {}),\n ...statusBar,\n ...vis,\n },\n children: content,\n };\n\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformFrame(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const p = stripBridgeKeys(raw);\n\n const isGrid = ((p.type as string | undefined) ?? 'stack') === 'grid';\n const isScrollable = p.scrollable === true;\n const isPressable = p.pressable === true;\n const direction: 'vertical' | 'horizontal' = p.direction === 'horizontal' ? 'horizontal' : 'vertical';\n const edges = safeAreaEdges(p.safeArea as SafeAreaValue | undefined);\n const hasSafeArea = edges.length > 0;\n const access = resolveAccessibilityProps(p);\n const vis = p.visible !== undefined && p.visible !== true ? { visible: p.visible } : {};\n\n const fullStyle = buildFrameStyle(p, parentDirection);\n const { outer: sizingStyle, inner: appearanceStyle } = splitFrameStyle(fullStyle);\n const { containerStyle: scrollOuter, contentStyle: scrollContent } = splitScrollStyle(fullStyle);\n\n function finalize(node: SDUINode): SDUINode {\n if (condition !== undefined) node.if = condition;\n if (actions && node.type === 'pressable') node.actions = actions;\n else if (actions && !isPressable) node.actions = actions;\n return node;\n }\n\n // ── Grid ──────────────────────────────────────────────────────────────────\n if (isGrid) {\n const gridStyle: Record<string, unknown> = { ...fullStyle, flexDirection: 'row', flexWrap: 'wrap' };\n delete gridStyle.gap;\n if (p.columnGap !== undefined) gridStyle.columnGap = p.columnGap;\n if (p.rowGap !== undefined) gridStyle.rowGap = p.rowGap;\n\n const gridView: SDUINode = {\n id: hasSafeArea || isPressable ? `${id}__grid` : id,\n type: 'view',\n props: {\n ...(Object.keys(gridStyle).length ? { style: gridStyle } : {}),\n numColumns: (p.columns as number | undefined) ?? 2,\n ...access,\n ...(hasSafeArea || isPressable ? {} : vis),\n },\n children,\n };\n\n if (!hasSafeArea && !isPressable) return finalize(gridView);\n\n let inner: SDUINode = gridView;\n\n if (hasSafeArea) {\n inner = {\n id: isPressable ? `${id}__sav` : id,\n type: 'safeareaview',\n props: { edges, ...(isPressable ? {} : vis) },\n children: [gridView],\n };\n }\n\n if (!isPressable) return finalize(inner);\n\n return finalize({\n id,\n type: 'pressable',\n props: {\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(actions ? { actions } : {}),\n ...vis,\n },\n children: [inner],\n });\n }\n\n // ── Scrollable ────────────────────────────────────────────────────────────\n if (isScrollable) {\n const scrollNode: SDUINode = {\n id: hasSafeArea || isPressable ? `${id}__scroll` : id,\n type: 'scrollview',\n props: {\n ...(Object.keys(scrollOuter).length ? { style: scrollOuter } : {}),\n ...(Object.keys(scrollContent).length ? { contentContainerStyle: scrollContent } : {}),\n horizontal: direction === 'horizontal',\n showsHorizontalScrollIndicator: p.showScrollIndicator === true,\n showsVerticalScrollIndicator: p.showScrollIndicator === true,\n ...access,\n ...(hasSafeArea || isPressable ? {} : vis),\n },\n children,\n };\n\n if (!hasSafeArea && !isPressable) return finalize(scrollNode);\n\n let inner: SDUINode = scrollNode;\n\n if (hasSafeArea) {\n inner = {\n id: isPressable ? `${id}__sav` : id,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(isPressable ? {} : vis),\n },\n children: [scrollNode],\n };\n }\n\n if (!isPressable) return finalize(inner);\n\n return finalize({\n id,\n type: 'pressable',\n props: {\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(actions ? { actions } : {}),\n ...vis,\n },\n children: [inner],\n });\n }\n\n // ── Plain view / safeareaview ─────────────────────────────────────────────\n\n if (!isPressable && !hasSafeArea) {\n return finalize({\n id,\n type: 'view',\n props: {\n ...(Object.keys(fullStyle).length ? { style: fullStyle } : {}),\n ...access,\n ...vis,\n },\n children,\n });\n }\n\n if (!isPressable && hasSafeArea) {\n return finalize({\n id,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(fullStyle).length ? { style: fullStyle } : {}),\n ...access,\n ...vis,\n },\n children,\n });\n }\n\n // isPressable === true\n const innerNode: SDUINode = hasSafeArea\n ? {\n id: `${id}__sav`,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(appearanceStyle).length ? { style: appearanceStyle } : {}),\n ...access,\n },\n children,\n }\n : {\n id: `${id}__content`,\n type: 'view',\n props: {\n ...(Object.keys(appearanceStyle).length ? { style: appearanceStyle } : {}),\n ...access,\n },\n children,\n };\n\n return finalize({\n id,\n type: 'pressable',\n props: {\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...(actions ? { actions } : {}),\n ...vis,\n },\n children: [innerNode],\n });\n}\n\nfunction transformText(\n id: string,\n raw: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n\n if (props.textStyle) {\n const preset = TEXT_STYLE_PRESETS[props.textStyle as string];\n if (preset) {\n style.fontSize = preset.fontSize;\n style.fontWeight = preset.fontWeight;\n if (preset.lineHeight !== undefined) style.lineHeight = preset.lineHeight;\n if (preset.textTransform) style.textTransform = preset.textTransform;\n if (preset.letterSpacing !== undefined) style.letterSpacing = preset.letterSpacing;\n }\n }\n\n if (props.color) style.color = props.color;\n if (props.fontSize !== undefined) style.fontSize = props.fontSize;\n if (props.fontWeight) style.fontWeight = FONT_WEIGHT_MAP[props.fontWeight as string] ?? props.fontWeight;\n if (props.fontFamily) style.fontFamily = props.fontFamily;\n if (props.fontStyle) style.fontStyle = props.fontStyle;\n if (props.lineHeight !== undefined) style.lineHeight = props.lineHeight;\n if (props.letterSpacing !== undefined) style.letterSpacing = props.letterSpacing;\n if (props.align) style.textAlign = props.align;\n if (props.transform && props.transform !== 'none') style.textTransform = props.transform;\n if (props.decoration && props.decoration !== 'none') style.textDecorationLine = props.decoration;\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n resolveSizeModeRN(props.width as SizeModeValue | undefined, 'width', style, parentDirection);\n\n const textProps: Record<string, unknown> = {};\n if (typeof props.truncate === 'number' && props.truncate > 0) {\n textProps.numberOfLines = props.truncate;\n textProps.ellipsizeMode = 'tail';\n }\n if (props.adjustFontSize === true) {\n textProps.adjustsFontSizeToFit = true;\n if (props.minFontSize !== undefined) textProps.minimumFontScale = props.minFontSize;\n }\n if (props.selectable !== undefined) textProps.selectable = props.selectable;\n\n const node: SDUINode = {\n id,\n type: 'text',\n props: {\n // SDK contract: text content lives in the `value` prop.\n // The Craft editor stores text in `content`; map it to `value` here.\n value: (props.content as string | undefined) ?? '',\n ...(Object.keys(style).length ? { style } : {}),\n ...textProps,\n ...resolveAccessibilityProps(props),\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformImage(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n resolveSizeModeRN(props.width as SizeModeValue | undefined, 'width', style, parentDirection);\n resolveSizeModeRN(props.height as SizeModeValue | undefined, 'height', style, parentDirection);\n if (props.aspectRatio !== undefined) style.aspectRatio = props.aspectRatio;\n Object.assign(style, resolveRadiusRN(props.radius as RadiusValue | undefined));\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n\n const imageProps: Record<string, unknown> = {};\n if (props.src) imageProps.source = { uri: props.src };\n if (props.placeholder) imageProps.defaultSource = { uri: props.placeholder };\n if (props.fallback) imageProps.fallback = { uri: props.fallback };\n imageProps.resizeMode = FIT_TO_RESIZE_MODE[(props.fit as string | undefined) ?? 'cover'] ?? 'cover';\n\n if (props.background === true) imageProps.background = true;\n\n if (props.decorative) {\n imageProps.accessible = false;\n imageProps.accessibilityElementsHidden = true;\n } else if (props.alt) {\n imageProps.accessible = true;\n imageProps.accessibilityLabel = props.alt;\n }\n if (props.testID) imageProps.testID = props.testID;\n\n const node: SDUINode = {\n id,\n type: 'image',\n props: {\n ...(Object.keys(style).length ? { style } : {}),\n ...imageProps,\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n ...(props.background === true && children.length ? { children } : {}),\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformInput(\n id: string,\n raw: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n resolveSizeModeRN((props.width as SizeModeValue | undefined) ?? 'fill', 'width', style, parentDirection);\n Object.assign(style, resolvePaddingRN(props.padding as SpacingValue | undefined));\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n\n const inputTypeDefaults = INPUT_TYPE_MAP[(props.inputType as string | undefined) ?? 'text'] ?? INPUT_TYPE_MAP.text;\n\n const node: SDUINode = {\n id,\n type: 'textinput',\n props: {\n ...(Object.keys(style).length ? { style } : {}),\n ...(props.label !== undefined ? { label: props.label } : {}),\n ...(props.placeholder !== undefined ? { placeholder: props.placeholder } : {}),\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.helperText !== undefined ? { helperText: props.helperText } : {}),\n ...(props.errorText !== undefined ? { errorText: props.errorText } : {}),\n ...inputTypeDefaults,\n ...(props.autoCapitalize ? { autoCapitalize: props.autoCapitalize } : {}),\n returnKeyType: (props.returnKey as string | undefined) ?? 'done',\n multiline: (props.multiline as boolean | undefined) ?? false,\n ...(props.multiline && props.minLines ? { numberOfLines: props.minLines } : {}),\n ...(props.multiline && props.maxLines ? { maxNumberOfLines: props.maxLines } : {}),\n variant: (props.variant as string | undefined) ?? 'outline',\n size: (props.size as string | undefined) ?? 'md',\n ...(props.leadingIcon ? { leadingIcon: props.leadingIcon } : {}),\n ...(props.trailingIcon ? { trailingIcon: props.trailingIcon } : {}),\n ...resolveAccessibilityProps(props),\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\nfunction transformList(\n id: string,\n raw: Record<string, unknown>,\n children: SDUINode[],\n parentDirection: 'vertical' | 'horizontal',\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const listType = (props.type as string | undefined) ?? 'stack';\n const direction: 'vertical' | 'horizontal' = props.direction === 'horizontal' ? 'horizontal' : 'vertical';\n const edges = safeAreaEdges(props.safeArea as SafeAreaValue | undefined);\n const hasSafeArea = edges.length > 0;\n const vis = props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {};\n\n const fullStyle = buildFrameStyle(props, parentDirection);\n const { containerStyle, contentStyle } = splitScrollStyle(fullStyle);\n\n // Children of PF.List are the per-item template.\n let itemTemplate: SDUINode | undefined;\n if (children.length === 1) {\n itemTemplate = children[0];\n } else if (children.length > 1) {\n itemTemplate = { id: `${id}__template`, type: 'view', props: {}, children };\n }\n\n const flatlistNode: SDUINode = {\n id: hasSafeArea ? `${id}__list` : id,\n type: 'flatlist',\n props: {\n ...(Object.keys(containerStyle).length ? { style: containerStyle } : {}),\n ...(Object.keys(contentStyle).length ? { contentContainerStyle: contentStyle } : {}),\n // `data` holds the binding expression for the list items array.\n // RecursiveRenderer resolves it and passes items to the FlatList primitive.\n data: props.data,\n keyExtractor: (props.keyExtractor as string | undefined) ?? 'id',\n ...(listType === 'grid' ? { numColumns: (props.columns as number | undefined) ?? 2 } : {}),\n ...(listType === 'grid' && props.columnGap ? { columnGap: props.columnGap } : {}),\n ...(listType === 'grid' && props.rowGap ? { rowGap: props.rowGap } : {}),\n horizontal: direction === 'horizontal',\n showsHorizontalScrollIndicator: props.showScrollIndicator === true,\n showsVerticalScrollIndicator: props.showScrollIndicator === true,\n ...resolveAccessibilityProps(props),\n ...(hasSafeArea ? {} : vis),\n },\n ...(itemTemplate ? { itemTemplate } : {}),\n };\n\n if (!hasSafeArea) {\n if (condition !== undefined) flatlistNode.if = condition;\n if (actions) flatlistNode.actions = actions;\n return flatlistNode;\n }\n\n const { outer: sizingStyle } = splitFrameStyle(fullStyle);\n const savNode: SDUINode = {\n id,\n type: 'safeareaview',\n props: {\n edges,\n ...(Object.keys(sizingStyle).length ? { style: sizingStyle } : {}),\n ...vis,\n },\n children: [flatlistNode],\n };\n if (condition !== undefined) savNode.if = condition;\n if (actions) savNode.actions = actions;\n return savNode;\n}\n\nfunction transformIcon(\n id: string,\n raw: Record<string, unknown>,\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const style: Record<string, unknown> = {};\n if (props.opacity !== undefined) style.opacity = (props.opacity as number) / 100;\n Object.assign(style, resolvePositionRN(props));\n\n const node: SDUINode = {\n id,\n type: 'icon',\n props: {\n name: props.name,\n set: (props.set as string | undefined) ?? 'default',\n size: (props.size as number | undefined) ?? 24,\n ...(props.color ? { color: props.color } : {}),\n ...(Object.keys(style).length ? { style } : {}),\n ...resolveAccessibilityProps(props),\n ...(props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {}),\n },\n };\n if (condition !== undefined) node.if = condition;\n if (actions) node.actions = actions;\n return node;\n}\n\n// ─── Core recursive builder ───────────────────────────────────────────────────\n\nfunction buildNodeFromSchema(\n nodeId: string,\n schema: CraftSchema,\n customComponents: CustomComponentsMap,\n visited: Set<string>,\n parentId?: string,\n): SDUINode {\n if (visited.has(nodeId)) {\n throw new Error(`Circular reference detected at node ${nodeId}`);\n }\n visited.add(nodeId);\n\n const node = schema[nodeId];\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n const resolvedName = node.type?.resolvedName;\n if (!resolvedName) throw new Error(`Invalid node type at ${nodeId}`);\n\n const raw = (node.props ?? {}) as Record<string, unknown>;\n const parentDirection: 'vertical' | 'horizontal' = parentId\n ? (schema[parentId]?.props?.['direction'] === 'horizontal' ? 'horizontal' : 'vertical')\n : 'vertical';\n const outputId = nodeId === 'ROOT' ? 'root' : nodeId;\n\n const childNodes = (node.nodes ?? []).map(childId =>\n buildNodeFromSchema(childId, schema, customComponents, visited, nodeId),\n );\n\n switch (resolvedName) {\n case 'PF.Screen':\n return transformScreen(outputId, raw, childNodes);\n\n case 'PF.Frame':\n return transformFrame(outputId, raw, childNodes, parentDirection);\n\n case 'PF.Text':\n return transformText(outputId, raw, parentDirection);\n\n case 'PF.Image':\n return transformImage(outputId, raw, childNodes, parentDirection);\n\n case 'PF.Input':\n return transformInput(outputId, raw, parentDirection);\n\n case 'PF.List':\n return transformList(outputId, raw, childNodes, parentDirection);\n\n case 'PF.Icon':\n return transformIcon(outputId, raw);\n\n case 'Component':\n return resolveCustomComponent(outputId, raw, parentDirection, customComponents);\n\n default:\n return { id: outputId, type: 'view', props: {}, children: childNodes };\n }\n}\n\n// ─── Custom component inliner ─────────────────────────────────────────────────\n\nfunction resolveCustomComponent(\n id: string,\n raw: Record<string, unknown>,\n parentDirection: 'vertical' | 'horizontal',\n customComponents: CustomComponentsMap,\n): SDUINode {\n const { actions, condition } = extractMeta(raw);\n const props = stripBridgeKeys(raw);\n\n const { componentId, componentKey, propValues, ...frameProps } = props as {\n componentId?: string;\n componentKey?: string;\n propValues?: Record<string, unknown>;\n [k: string]: unknown;\n };\n const key = componentKey ?? componentId;\n const def = key ? customComponents[key] : undefined;\n\n const wrapperStyle = buildFrameStyle(frameProps, parentDirection);\n const vis = props.visible !== undefined && props.visible !== true ? { visible: props.visible } : {};\n\n if (!def) {\n return {\n id,\n type: 'view',\n props: { ...(Object.keys(wrapperStyle).length ? { style: wrapperStyle } : {}), ...vis },\n children: [],\n };\n }\n\n const componentVisited = new Set<string>();\n const componentRoot = buildNodeFromSchema(\n def.rootNodeId,\n def.nodes,\n customComponents,\n componentVisited,\n );\n\n if (propValues && Object.keys(propValues).length) {\n componentRoot.props = { ...componentRoot.props, _propValues: propValues };\n }\n\n if (Object.keys(wrapperStyle).length > 0) {\n const wrapper: SDUINode = {\n id,\n type: 'view',\n props: { style: wrapperStyle, ...vis },\n children: [componentRoot],\n };\n if (condition !== undefined) wrapper.if = condition;\n if (actions) wrapper.actions = actions;\n return wrapper;\n }\n\n componentRoot.id = id;\n componentRoot.props = { ...componentRoot.props, ...vis };\n if (condition !== undefined) componentRoot.if = condition;\n if (actions) componentRoot.actions = actions;\n return componentRoot;\n}\n\n// ─── Main entry ───────────────────────────────────────────────────────────────\n\n/**\n * Convert a Craft.js editor schema into an SDUINode tree ready for the SDK's\n * RecursiveRenderer.\n *\n * @param craftJson - The full Craft.js node map (keyed by node ID, must include \"ROOT\").\n * @param customComponents - Optional map of reusable component definitions.\n * @returns The root SDUINode.\n */\nexport function transformCraftToSDUI(\n craftJson: CraftSchema,\n customComponents: CustomComponentsMap = {},\n): SDUINode {\n if (!craftJson || typeof craftJson !== 'object') {\n throw new Error('Invalid craft schema');\n }\n\n const visited = new Set<string>();\n return buildNodeFromSchema('ROOT', craftJson, customComponents, visited);\n}\n","/**\n * @pushframe/sdk — Server-Driven UI for React Native\n *\n * Usage:\n * import { PushFrame } from '@pushframe/sdk';\n *\n * <PushFrame.Provider apiKey=\"...\" context={...}>\n * <PushFrame.Screen name=\"home\" />\n * <PushFrame.Component name=\"promo-banner\" />\n * </PushFrame.Provider>\n */\n\n// ---------------------------------------------------------------------------\n// Component imports (for namespace assembly)\n// ---------------------------------------------------------------------------\n\nimport { PushFrameProvider } from './components/PushFrameProvider';\nimport { PushFrameScreen } from './components/PushFrameScreen';\nimport { PushFrameComponent } from './components/PushFrameComponent';\nimport { Text } from './primitives/Text';\nimport { View } from './primitives/View';\nimport { ScrollView } from './primitives/ScrollView';\nimport { Image } from './primitives/Image';\nimport { Pressable } from './primitives/Pressable';\nimport { TextInput } from './primitives/TextInput';\nimport { FlatList } from './primitives/FlatList';\nimport { Modal } from './primitives/Modal';\nimport { ActivityIndicator } from './primitives/ActivityIndicator';\nimport { Switch } from './primitives/Switch';\nimport { KeyboardAvoidingView } from './primitives/KeyboardAvoidingView';\nimport { SafeAreaView } from './primitives/SafeAreaView';\nimport { StatusBar } from './primitives/StatusBar';\n\n// ---------------------------------------------------------------------------\n// PushFrame namespace — the primary API surface\n// ---------------------------------------------------------------------------\n\n/**\n * The PushFrame namespace. Import this as the single entry-point for the SDK.\n *\n * Slot components:\n * - PushFrame.Provider — wraps the app, initialises registry and context\n * - PushFrame.Screen — full-page slot (fetches /screens/:name, applies flex:1)\n * - PushFrame.Component — inline slot (fetches /components/:name)\n *\n * Primitives (used internally by RecursiveRenderer, available for direct use):\n * - PushFrame.Text, PushFrame.View, PushFrame.ScrollView, PushFrame.Image\n * - PushFrame.Pressable, PushFrame.TextInput, PushFrame.FlatList\n * - PushFrame.Modal, PushFrame.ActivityIndicator, PushFrame.Switch\n * - PushFrame.KeyboardAvoidingView, PushFrame.SafeAreaView, PushFrame.StatusBar\n */\nexport const PushFrame = {\n // Slot components\n Provider: PushFrameProvider,\n Screen: PushFrameScreen,\n Component: PushFrameComponent,\n\n // Primitives\n Text,\n View,\n ScrollView,\n Image,\n Pressable,\n TextInput,\n FlatList,\n Modal,\n ActivityIndicator,\n Switch,\n KeyboardAvoidingView,\n SafeAreaView,\n StatusBar,\n} as const;\n\n// ---------------------------------------------------------------------------\n// Named exports (for tree-shaking and selective imports)\n// ---------------------------------------------------------------------------\n\n// Slot components\nexport { PushFrameProvider } from './components/PushFrameProvider';\nexport type { PushFrameProviderProps } from './components/PushFrameProvider';\nexport { PushFrameScreen } from './components/PushFrameScreen';\nexport { PushFrameComponent } from './components/PushFrameComponent';\nexport type { PushFrameSlotProps } from './components/PushFrameComponent';\n\n// Context\nexport { PushFrameContext, usePushFrameContext } from './context/PushFrameContext';\nexport type {\n PushFrameContextValue,\n SchemaNode,\n FlatListSchemaNode,\n Action,\n ToastPayload,\n BottomSheetPayload,\n ScrollToPayload,\n} from './context/PushFrameContext';\n\n// Registry\nexport { ComponentRegistry } from './registry/ComponentRegistry';\n\n// Renderer\nexport { RecursiveRenderer } from './renderer/RecursiveRenderer';\nexport type { RecursiveRendererProps, DispatchAction } from './renderer/RecursiveRenderer';\n\n// Binding utilities\nexport { resolveValue, resolveProps, resolveDeep } from './renderer/bindingResolver';\nexport { evaluateIf } from './renderer/conditionalEvaluator';\n\n// Primitives\nexport * from './primitives/index';\n\n// Transformer (Craft.js → SDUI; intended for backend / dashboard use)\nexport { transformCraftToSDUI } from './transformer/index';\nexport type {\n CraftNode,\n CraftSchema,\n SDUINode,\n CustomComponentDef,\n CustomComponentsMap,\n} from './transformer/index';\n"]}
|