flowboard-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/FlowboardReact.podspec +20 -0
  2. package/LICENSE +20 -0
  3. package/README.md +122 -0
  4. package/android/build.gradle +67 -0
  5. package/android/src/main/AndroidManifest.xml +2 -0
  6. package/android/src/main/java/com/flowboardreact/FlowboardReactModule.kt +15 -0
  7. package/android/src/main/java/com/flowboardreact/FlowboardReactPackage.kt +33 -0
  8. package/ios/FlowboardReact.h +5 -0
  9. package/ios/FlowboardReact.mm +21 -0
  10. package/lib/module/Flowboard.js +167 -0
  11. package/lib/module/Flowboard.js.map +1 -0
  12. package/lib/module/FlowboardProvider.js +52 -0
  13. package/lib/module/FlowboardProvider.js.map +1 -0
  14. package/lib/module/NativeFlowboardReact.js +5 -0
  15. package/lib/module/NativeFlowboardReact.js.map +1 -0
  16. package/lib/module/components/FlowboardFlow.js +389 -0
  17. package/lib/module/components/FlowboardFlow.js.map +1 -0
  18. package/lib/module/components/FlowboardRenderer.js +1684 -0
  19. package/lib/module/components/FlowboardRenderer.js.map +1 -0
  20. package/lib/module/components/widgets/sliderRegistry.js +48 -0
  21. package/lib/module/components/widgets/sliderRegistry.js.map +1 -0
  22. package/lib/module/core/analyticsManager.js +110 -0
  23. package/lib/module/core/analyticsManager.js.map +1 -0
  24. package/lib/module/core/assetPreloader.js +72 -0
  25. package/lib/module/core/assetPreloader.js.map +1 -0
  26. package/lib/module/core/clientContext.js +105 -0
  27. package/lib/module/core/clientContext.js.map +1 -0
  28. package/lib/module/core/fontAwesome.js +110 -0
  29. package/lib/module/core/fontAwesome.js.map +1 -0
  30. package/lib/module/core/onboardingRepository.js +62 -0
  31. package/lib/module/core/onboardingRepository.js.map +1 -0
  32. package/lib/module/core/resolverService.js +58 -0
  33. package/lib/module/core/resolverService.js.map +1 -0
  34. package/lib/module/index.js +5 -0
  35. package/lib/module/index.js.map +1 -0
  36. package/lib/module/package.json +1 -0
  37. package/lib/module/types/flowboard.js +4 -0
  38. package/lib/module/types/flowboard.js.map +1 -0
  39. package/lib/module/types/react-native-vector-icons.d.js +2 -0
  40. package/lib/module/types/react-native-vector-icons.d.js.map +1 -0
  41. package/lib/module/utils/flowboardUtils.js +379 -0
  42. package/lib/module/utils/flowboardUtils.js.map +1 -0
  43. package/lib/typescript/package.json +1 -0
  44. package/lib/typescript/src/Flowboard.d.ts +33 -0
  45. package/lib/typescript/src/Flowboard.d.ts.map +1 -0
  46. package/lib/typescript/src/FlowboardProvider.d.ts +5 -0
  47. package/lib/typescript/src/FlowboardProvider.d.ts.map +1 -0
  48. package/lib/typescript/src/NativeFlowboardReact.d.ts +7 -0
  49. package/lib/typescript/src/NativeFlowboardReact.d.ts.map +1 -0
  50. package/lib/typescript/src/components/FlowboardFlow.d.ts +14 -0
  51. package/lib/typescript/src/components/FlowboardFlow.d.ts.map +1 -0
  52. package/lib/typescript/src/components/FlowboardRenderer.d.ts +31 -0
  53. package/lib/typescript/src/components/FlowboardRenderer.d.ts.map +1 -0
  54. package/lib/typescript/src/components/widgets/sliderRegistry.d.ts +16 -0
  55. package/lib/typescript/src/components/widgets/sliderRegistry.d.ts.map +1 -0
  56. package/lib/typescript/src/core/analyticsManager.d.ts +42 -0
  57. package/lib/typescript/src/core/analyticsManager.d.ts.map +1 -0
  58. package/lib/typescript/src/core/assetPreloader.d.ts +8 -0
  59. package/lib/typescript/src/core/assetPreloader.d.ts.map +1 -0
  60. package/lib/typescript/src/core/clientContext.d.ts +27 -0
  61. package/lib/typescript/src/core/clientContext.d.ts.map +1 -0
  62. package/lib/typescript/src/core/fontAwesome.d.ts +8 -0
  63. package/lib/typescript/src/core/fontAwesome.d.ts.map +1 -0
  64. package/lib/typescript/src/core/onboardingRepository.d.ts +15 -0
  65. package/lib/typescript/src/core/onboardingRepository.d.ts.map +1 -0
  66. package/lib/typescript/src/core/resolverService.d.ts +11 -0
  67. package/lib/typescript/src/core/resolverService.d.ts.map +1 -0
  68. package/lib/typescript/src/index.d.ts +4 -0
  69. package/lib/typescript/src/index.d.ts.map +1 -0
  70. package/lib/typescript/src/types/flowboard.d.ts +34 -0
  71. package/lib/typescript/src/types/flowboard.d.ts.map +1 -0
  72. package/lib/typescript/src/utils/flowboardUtils.d.ts +31 -0
  73. package/lib/typescript/src/utils/flowboardUtils.d.ts.map +1 -0
  74. package/package.json +192 -0
  75. package/src/Flowboard.ts +223 -0
  76. package/src/FlowboardProvider.tsx +60 -0
  77. package/src/NativeFlowboardReact.ts +7 -0
  78. package/src/components/FlowboardFlow.tsx +513 -0
  79. package/src/components/FlowboardRenderer.tsx +1957 -0
  80. package/src/components/widgets/sliderRegistry.tsx +56 -0
  81. package/src/core/analyticsManager.ts +125 -0
  82. package/src/core/assetPreloader.ts +103 -0
  83. package/src/core/clientContext.ts +132 -0
  84. package/src/core/fontAwesome.ts +90 -0
  85. package/src/core/onboardingRepository.ts +79 -0
  86. package/src/core/resolverService.ts +69 -0
  87. package/src/index.tsx +11 -0
  88. package/src/types/flowboard.ts +50 -0
  89. package/src/types/react-native-vector-icons.d.ts +15 -0
  90. package/src/utils/flowboardUtils.ts +400 -0
@@ -0,0 +1,20 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "FlowboardReact"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => min_ios_version_supported }
14
+ s.source = { :git => "https://github.com/gregoirecambon/flowboard-pckg-react.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = "ios/**/*.{h,m,mm,swift,cpp}"
17
+ s.private_header_files = "ios/**/*.h"
18
+
19
+ install_modules_dependencies(s)
20
+ end
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Flowboard
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,122 @@
1
+ # flowboard-react
2
+
3
+ Flowboard React Native SDK. JSON-driven onboarding flows with custom screens and full SDUI rendering parity with the Flutter package.
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ npm install flowboard-react
9
+ ```
10
+
11
+ Install peer/native dependencies (recommended):
12
+
13
+ ```sh
14
+ npm install \
15
+ @react-native-async-storage/async-storage \
16
+ @react-native-masked-view/masked-view \
17
+ lottie-react-native \
18
+ react-native-device-info \
19
+ react-native-get-random-values \
20
+ react-native-in-app-review \
21
+ react-native-linear-gradient \
22
+ react-native-mask-input \
23
+ react-native-pager-view \
24
+ react-native-permissions \
25
+ react-native-safe-area-context \
26
+ react-native-svg \
27
+ react-native-vector-icons \
28
+ uuid
29
+ ```
30
+
31
+ iOS:
32
+
33
+ ```sh
34
+ cd ios && pod install
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ ```tsx
40
+ import React from 'react';
41
+ import { Flowboard, FlowboardProvider } from 'flowboard-react';
42
+
43
+ export default function App() {
44
+ React.useEffect(() => {
45
+ Flowboard.init({
46
+ appId: 'YOUR_APP_ID',
47
+ bundleId: 'com.your.app',
48
+ debug: true,
49
+ });
50
+ }, []);
51
+
52
+ return (
53
+ <FlowboardProvider>
54
+ {/* your app */}
55
+ </FlowboardProvider>
56
+ );
57
+ }
58
+ ```
59
+
60
+ Launch onboarding:
61
+
62
+ ```tsx
63
+ await Flowboard.launchOnboarding({
64
+ customScreenBuilder: (ctx) => {
65
+ if (ctx.screenData.id === 'paywall') {
66
+ return <MyPaywall onClose={ctx.onNext} />;
67
+ }
68
+ return null;
69
+ },
70
+ onOnboardEnd: (formData) => {
71
+ console.log('Flow completed:', formData);
72
+ },
73
+ });
74
+ ```
75
+
76
+ Re-initialize:
77
+
78
+ ```tsx
79
+ await Flowboard.reinit();
80
+ ```
81
+
82
+ ## API
83
+
84
+ - `Flowboard.init({ appId, bundleId, debug, enableAnalytics })`
85
+ - `Flowboard.launchOnboarding({ customScreenBuilder, customActionBuilder, onOnboardEnd, onStepChange, enableAnalytics, alwaysRestart })`
86
+ - `Flowboard.reinit()`
87
+ - `FlowboardProvider` (required to host modal flow)
88
+
89
+ ## Parity Checklist
90
+
91
+ - [x] Flowboard init/launch/reinit
92
+ - [x] Client context capture + resolver payload
93
+ - [x] Analytics events (onboard_loaded, onboard_started, screen_view, onboard_ended)
94
+ - [x] Cache + progress persistence
95
+ - [x] SDUI components (layout, visual, inputs, advanced)
96
+ - [x] Custom screens/actions
97
+ - [x] Deeplink/weblink, rate_app, request_permission
98
+ - [x] Feature showcase example app
99
+ - [x] Jest unit tests for critical logic
100
+
101
+ ## Testing
102
+
103
+ ```sh
104
+ yarn typecheck
105
+ yarn test
106
+ yarn lint
107
+ ```
108
+
109
+ ## Notes
110
+
111
+ - Custom fonts must be available in the host app when using `fontFamily`.
112
+ - Asset images/Lottie ("source": "asset") should be provided as `uri` or through a custom loader in the host app.
113
+
114
+ ## Contributing
115
+
116
+ - [Development workflow](CONTRIBUTING.md#development-workflow)
117
+ - [Sending a pull request](CONTRIBUTING.md#sending-a-pull-request)
118
+ - [Code of conduct](CODE_OF_CONDUCT.md)
119
+
120
+ ## License
121
+
122
+ MIT
@@ -0,0 +1,67 @@
1
+ buildscript {
2
+ ext.FlowboardReact = [
3
+ kotlinVersion: "2.0.21",
4
+ minSdkVersion: 24,
5
+ compileSdkVersion: 36,
6
+ targetSdkVersion: 36
7
+ ]
8
+
9
+ ext.getExtOrDefault = { prop ->
10
+ if (rootProject.ext.has(prop)) {
11
+ return rootProject.ext.get(prop)
12
+ }
13
+
14
+ return FlowboardReact[prop]
15
+ }
16
+
17
+ repositories {
18
+ google()
19
+ mavenCentral()
20
+ }
21
+
22
+ dependencies {
23
+ classpath "com.android.tools.build:gradle:8.7.2"
24
+ // noinspection DifferentKotlinGradleVersion
25
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
26
+ }
27
+ }
28
+
29
+
30
+ apply plugin: "com.android.library"
31
+ apply plugin: "kotlin-android"
32
+
33
+ apply plugin: "com.facebook.react"
34
+
35
+ android {
36
+ namespace "com.flowboardreact"
37
+
38
+ compileSdkVersion getExtOrDefault("compileSdkVersion")
39
+
40
+ defaultConfig {
41
+ minSdkVersion getExtOrDefault("minSdkVersion")
42
+ targetSdkVersion getExtOrDefault("targetSdkVersion")
43
+ }
44
+
45
+ buildFeatures {
46
+ buildConfig true
47
+ }
48
+
49
+ buildTypes {
50
+ release {
51
+ minifyEnabled false
52
+ }
53
+ }
54
+
55
+ lint {
56
+ disable "GradleCompatible"
57
+ }
58
+
59
+ compileOptions {
60
+ sourceCompatibility JavaVersion.VERSION_1_8
61
+ targetCompatibility JavaVersion.VERSION_1_8
62
+ }
63
+ }
64
+
65
+ dependencies {
66
+ implementation "com.facebook.react:react-android"
67
+ }
@@ -0,0 +1,2 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -0,0 +1,15 @@
1
+ package com.flowboardreact
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+
5
+ class FlowboardReactModule(reactContext: ReactApplicationContext) :
6
+ NativeFlowboardReactSpec(reactContext) {
7
+
8
+ override fun multiply(a: Double, b: Double): Double {
9
+ return a * b
10
+ }
11
+
12
+ companion object {
13
+ const val NAME = NativeFlowboardReactSpec.NAME
14
+ }
15
+ }
@@ -0,0 +1,33 @@
1
+ package com.flowboardreact
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
8
+ import java.util.HashMap
9
+
10
+ class FlowboardReactPackage : BaseReactPackage() {
11
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
12
+ return if (name == FlowboardReactModule.NAME) {
13
+ FlowboardReactModule(reactContext)
14
+ } else {
15
+ null
16
+ }
17
+ }
18
+
19
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
20
+ return ReactModuleInfoProvider {
21
+ val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
22
+ moduleInfos[FlowboardReactModule.NAME] = ReactModuleInfo(
23
+ FlowboardReactModule.NAME,
24
+ FlowboardReactModule.NAME,
25
+ false, // canOverrideExistingModule
26
+ false, // needsEagerInit
27
+ false, // isCxxModule
28
+ true // isTurboModule
29
+ )
30
+ moduleInfos
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,5 @@
1
+ #import <FlowboardReactSpec/FlowboardReactSpec.h>
2
+
3
+ @interface FlowboardReact : NSObject <NativeFlowboardReactSpec>
4
+
5
+ @end
@@ -0,0 +1,21 @@
1
+ #import "FlowboardReact.h"
2
+
3
+ @implementation FlowboardReact
4
+ - (NSNumber *)multiply:(double)a b:(double)b {
5
+ NSNumber *result = @(a * b);
6
+
7
+ return result;
8
+ }
9
+
10
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
11
+ (const facebook::react::ObjCTurboModule::InitParams &)params
12
+ {
13
+ return std::make_shared<facebook::react::NativeFlowboardReactSpecJSI>(params);
14
+ }
15
+
16
+ + (NSString *)moduleName
17
+ {
18
+ return @"FlowboardReact";
19
+ }
20
+
21
+ @end
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+
3
+ import { Alert } from 'react-native';
4
+ import { ClientContext } from "./core/clientContext.js";
5
+ import { ResolverService } from "./core/resolverService.js";
6
+ import { OnboardingRepository } from "./core/onboardingRepository.js";
7
+ import { AnalyticsManager } from "./core/analyticsManager.js";
8
+ export class Flowboard {
9
+ static appId = null;
10
+ static bundleId = null;
11
+ static debug = false;
12
+ static repository = new OnboardingRepository();
13
+ static service = new ResolverService();
14
+ static initPromise = null;
15
+ static listeners = new Set();
16
+ static subscribe(listener) {
17
+ Flowboard.listeners.add(listener);
18
+ return () => Flowboard.listeners.delete(listener);
19
+ }
20
+ static async init(params) {
21
+ Flowboard.appId = params.appId;
22
+ Flowboard.bundleId = params.bundleId;
23
+ Flowboard.debug = params.debug ?? false;
24
+ Flowboard.log(`Initialized with appId: ${Flowboard.appId}, bundleId: ${Flowboard.bundleId}`);
25
+ try {
26
+ const clientContext = await ClientContext.create();
27
+ AnalyticsManager.instance.configure({
28
+ enabled: params.enableAnalytics ?? true,
29
+ context: clientContext
30
+ });
31
+ } catch (error) {
32
+ Flowboard.log(`Failed to configure analytics: ${String(error)}`);
33
+ }
34
+ Flowboard.initPromise = Flowboard.initialize();
35
+ }
36
+ static async reinit() {
37
+ Flowboard.log('Re-initializing. Clearing cache...');
38
+ await Flowboard.clearLocalCaches();
39
+ Flowboard.initPromise = Flowboard.fetchAndSave();
40
+ await Flowboard.initPromise;
41
+ }
42
+ static async launchOnboarding(options = {}) {
43
+ Flowboard.log('Attempting to launch onboarding...');
44
+ if (!Flowboard.appId) {
45
+ throw new Error('Flowboard.init() must be called before launchOnboarding');
46
+ }
47
+ try {
48
+ const context = AnalyticsManager.instance.clientContextSnapshot ?? (await ClientContext.create());
49
+ AnalyticsManager.instance.configure({
50
+ enabled: options.enableAnalytics ?? true,
51
+ context
52
+ });
53
+ } catch (error) {
54
+ Flowboard.log(`Failed to configure analytics for launch: ${String(error)}`);
55
+ }
56
+ let data = await Flowboard.repository.getOnboardingJson();
57
+ if (!data) {
58
+ Flowboard.log('Data not in cache. Waiting for initialization...');
59
+ if (Flowboard.initPromise) {
60
+ try {
61
+ await Flowboard.initPromise;
62
+ } catch (error) {
63
+ Flowboard.log(`Initialization failed during wait: ${String(error)}`);
64
+ }
65
+ }
66
+ data = await Flowboard.repository.getOnboardingJson();
67
+ if (!data) {
68
+ Flowboard.log('Data still null after wait. Retrying fetch...');
69
+ try {
70
+ await Flowboard.fetchAndSave();
71
+ data = await Flowboard.repository.getOnboardingJson();
72
+ } catch (error) {
73
+ Flowboard.log(`Retry fetch failed: ${String(error)}`);
74
+ Alert.alert('Failed to load onboarding', String(error));
75
+ return;
76
+ }
77
+ }
78
+ }
79
+ if (!data) {
80
+ Flowboard.log('Failed to launch: Data is null.');
81
+ return;
82
+ }
83
+ if (options.alwaysRestart) {
84
+ await Flowboard.repository.clearProgress();
85
+ }
86
+ let initialStep = 0;
87
+ let initialFormData = {};
88
+ if (!options.alwaysRestart) {
89
+ const flowId = data.flow_id;
90
+ if (flowId) {
91
+ const savedStep = await Flowboard.repository.getProgressStepForFlow(flowId);
92
+ const savedFormData = await Flowboard.repository.getProgressFormDataForFlow(flowId);
93
+ if (savedStep !== null && savedStep !== undefined) {
94
+ const screens = Array.isArray(data.screens) ? data.screens : [];
95
+ if (screens.length > 0) {
96
+ const maxIndex = screens.length - 1;
97
+ if (savedStep <= 0) initialStep = 0;else if (savedStep >= screens.length) initialStep = maxIndex;else initialStep = savedStep;
98
+ }
99
+ }
100
+ if (savedFormData && Object.keys(savedFormData).length > 0) {
101
+ initialFormData = {
102
+ ...savedFormData
103
+ };
104
+ }
105
+ }
106
+ }
107
+ Flowboard.log(`Launching onboarding flow. ${data.flow_id ?? ''}`);
108
+ Flowboard.emitLaunch({
109
+ data,
110
+ options,
111
+ initialStep,
112
+ initialFormData
113
+ });
114
+ }
115
+ static async initialize() {
116
+ Flowboard.log('Checking local cache...');
117
+ const cached = await Flowboard.repository.getOnboardingJson();
118
+ if (cached) {
119
+ Flowboard.log('Onboarding data found in cache.');
120
+ AnalyticsManager.instance.startSession({
121
+ flowData: cached
122
+ });
123
+ return;
124
+ }
125
+ Flowboard.log('No cached data found. Fetching from remote...');
126
+ await Flowboard.fetchAndSave();
127
+ }
128
+ static async fetchAndSave() {
129
+ const startTime = Date.now();
130
+ if (!Flowboard.appId || !Flowboard.bundleId) {
131
+ throw new Error('Flowboard not initialized. Call Flowboard.init() first.');
132
+ }
133
+ try {
134
+ const context = await ClientContext.create();
135
+ Flowboard.log(`Fetching onboarding JSON for installId: ${context.installId} | appId: ${Flowboard.appId} | bundleId: ${Flowboard.bundleId}`);
136
+ const json = await Flowboard.service.fetchOnboardingJson({
137
+ context,
138
+ appId: Flowboard.appId
139
+ });
140
+ Flowboard.log('Fetch successful. Saving to cache.');
141
+ await Flowboard.repository.saveOnboardingJson(json);
142
+ AnalyticsManager.instance.startSession({
143
+ flowData: json
144
+ });
145
+ const duration = Date.now() - startTime;
146
+ AnalyticsManager.instance.trackOnboardLoaded({
147
+ durationMs: duration,
148
+ cached: false
149
+ });
150
+ } catch (error) {
151
+ Flowboard.log(`Error fetching onboarding data: ${String(error)}`);
152
+ throw error;
153
+ }
154
+ }
155
+ static async clearLocalCaches() {
156
+ await Promise.all([Flowboard.repository.clearProgress(), Flowboard.repository.clearOnboardingJson()]);
157
+ }
158
+ static emitLaunch(payload) {
159
+ Flowboard.listeners.forEach(listener => listener(payload));
160
+ }
161
+ static log(message) {
162
+ if (Flowboard.debug) {
163
+ console.log(`\u{1F30A} Flowboard - ${message}`);
164
+ }
165
+ }
166
+ }
167
+ //# sourceMappingURL=Flowboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Alert","ClientContext","ResolverService","OnboardingRepository","AnalyticsManager","Flowboard","appId","bundleId","debug","repository","service","initPromise","listeners","Set","subscribe","listener","add","delete","init","params","log","clientContext","create","instance","configure","enabled","enableAnalytics","context","error","String","initialize","reinit","clearLocalCaches","fetchAndSave","launchOnboarding","options","Error","clientContextSnapshot","data","getOnboardingJson","alert","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","cached","startSession","flowData","startTime","Date","now","installId","json","fetchOnboardingJson","saveOnboardingJson","duration","trackOnboardLoaded","durationMs","Promise","all","clearOnboardingJson","payload","forEach","message","console"],"sourceRoot":"../../src","sources":["Flowboard.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect, useState } from 'react';
4
+ import { Modal, StyleSheet, View } from 'react-native';
5
+ import { Flowboard } from "./Flowboard.js";
6
+ import FlowboardFlow from "./components/FlowboardFlow.js";
7
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
8
+ const styles = StyleSheet.create({
9
+ modalContainer: {
10
+ flex: 1,
11
+ backgroundColor: 'transparent'
12
+ }
13
+ });
14
+ export default function FlowboardProvider({
15
+ children
16
+ }) {
17
+ const [payload, setPayload] = useState(null);
18
+ const [visible, setVisible] = useState(false);
19
+ useEffect(() => {
20
+ const unsubscribe = Flowboard.subscribe(nextPayload => {
21
+ setPayload(nextPayload);
22
+ setVisible(true);
23
+ });
24
+ return unsubscribe;
25
+ }, []);
26
+ const handleClose = () => {
27
+ setVisible(false);
28
+ setPayload(null);
29
+ };
30
+ return /*#__PURE__*/_jsxs(_Fragment, {
31
+ children: [children, /*#__PURE__*/_jsx(Modal, {
32
+ visible: visible,
33
+ animationType: "slide",
34
+ transparent: true,
35
+ onRequestClose: handleClose,
36
+ children: /*#__PURE__*/_jsx(View, {
37
+ style: styles.modalContainer,
38
+ children: payload ? /*#__PURE__*/_jsx(FlowboardFlow, {
39
+ data: payload.data,
40
+ customScreenBuilder: payload.options.customScreenBuilder,
41
+ customActionBuilder: payload.options.customActionBuilder,
42
+ onOnboardEnd: payload.options.onOnboardEnd,
43
+ onStepChange: payload.options.onStepChange,
44
+ initialStep: payload.initialStep,
45
+ initialFormData: payload.initialFormData,
46
+ onClose: handleClose
47
+ }) : null
48
+ })
49
+ })]
50
+ });
51
+ }
52
+ //# sourceMappingURL=FlowboardProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","useState","Modal","StyleSheet","View","Flowboard","FlowboardFlow","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","styles","create","modalContainer","flex","backgroundColor","FlowboardProvider","children","payload","setPayload","visible","setVisible","unsubscribe","subscribe","nextPayload","handleClose","animationType","transparent","onRequestClose","style","data","customScreenBuilder","options","customActionBuilder","onOnboardEnd","onStepChange","initialStep","initialFormData","onClose"],"sourceRoot":"../../src","sources":["FlowboardProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,KAAK,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACtD,SAASC,SAAS,QAA4B,gBAAa;AAC3D,OAAOC,aAAa,MAAM,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAEvD,MAAMC,MAAM,GAAGV,UAAU,CAACW,MAAM,CAAC;EAC/BC,cAAc,EAAE;IACdC,IAAI,EAAE,CAAC;IACPC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC;AAEF,eAAe,SAASC,iBAAiBA,CAAC;EACxCC;AAGF,CAAC,EAAE;EACD,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGpB,QAAQ,CAAuB,IAAI,CAAC;EAClE,MAAM,CAACqB,OAAO,EAAEC,UAAU,CAAC,GAAGtB,QAAQ,CAAC,KAAK,CAAC;EAE7CD,SAAS,CAAC,MAAM;IACd,MAAMwB,WAAW,GAAGnB,SAAS,CAACoB,SAAS,CAAEC,WAAW,IAAK;MACvDL,UAAU,CAACK,WAAW,CAAC;MACvBH,UAAU,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC;IACF,OAAOC,WAAW;EACpB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,WAAW,GAAGA,CAAA,KAAM;IACxBJ,UAAU,CAAC,KAAK,CAAC;IACjBF,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC;EAED,oBACET,KAAA,CAAAF,SAAA;IAAAS,QAAA,GACGA,QAAQ,eACTX,IAAA,CAACN,KAAK;MACJoB,OAAO,EAAEA,OAAQ;MACjBM,aAAa,EAAC,OAAO;MACrBC,WAAW;MACXC,cAAc,EAAEH,WAAY;MAAAR,QAAA,eAE5BX,IAAA,CAACJ,IAAI;QAAC2B,KAAK,EAAElB,MAAM,CAACE,cAAe;QAAAI,QAAA,EAChCC,OAAO,gBACNZ,IAAA,CAACF,aAAa;UACZ0B,IAAI,EAAEZ,OAAO,CAACY,IAAK;UACnBC,mBAAmB,EAAEb,OAAO,CAACc,OAAO,CAACD,mBAAoB;UACzDE,mBAAmB,EAAEf,OAAO,CAACc,OAAO,CAACC,mBAAoB;UACzDC,YAAY,EAAEhB,OAAO,CAACc,OAAO,CAACE,YAAa;UAC3CC,YAAY,EAAEjB,OAAO,CAACc,OAAO,CAACG,YAAa;UAC3CC,WAAW,EAAElB,OAAO,CAACkB,WAAY;UACjCC,eAAe,EAAEnB,OAAO,CAACmB,eAAgB;UACzCC,OAAO,EAAEb;QAAY,CACtB,CAAC,GACA;MAAI,CACJ;IAAC,CACF,CAAC;EAAA,CACR,CAAC;AAEP","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.getEnforcing('FlowboardReact');
5
+ //# sourceMappingURL=NativeFlowboardReact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeFlowboardReact.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AAMpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}