flowboard-react 0.6.1 → 0.6.3

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 (97) hide show
  1. package/README.md +168 -52
  2. package/app.plugin.js +341 -0
  3. package/bin/setup.js +427 -0
  4. package/lib/module/Flowboard.js +1 -2
  5. package/lib/module/Flowboard.js.map +1 -1
  6. package/lib/module/FlowboardProvider.js +1 -1
  7. package/lib/module/FlowboardProvider.js.map +1 -1
  8. package/lib/module/components/FlowboardFlow.js +31 -9
  9. package/lib/module/components/FlowboardFlow.js.map +1 -1
  10. package/lib/module/components/FlowboardRenderer.js +419 -85
  11. package/lib/module/components/FlowboardRenderer.js.map +1 -1
  12. package/lib/module/core/clientContext.js +10 -29
  13. package/lib/module/core/clientContext.js.map +1 -1
  14. package/lib/module/core/fontAwesome.js +2 -9
  15. package/lib/module/core/fontAwesome.js.map +1 -1
  16. package/lib/module/core/onboardingRepository.js +13 -13
  17. package/lib/module/core/onboardingRepository.js.map +1 -1
  18. package/lib/module/native/asyncStorage.js +55 -0
  19. package/lib/module/native/asyncStorage.js.map +1 -0
  20. package/lib/module/native/deviceInfo.js +46 -0
  21. package/lib/module/native/deviceInfo.js.map +1 -0
  22. package/lib/module/native/inAppReview.js +17 -0
  23. package/lib/module/native/inAppReview.js.map +1 -0
  24. package/lib/module/native/linearGradient.js +29 -0
  25. package/lib/module/native/linearGradient.js.map +1 -0
  26. package/lib/module/native/lottie.js +20 -0
  27. package/lib/module/native/lottie.js.map +1 -0
  28. package/lib/module/native/maskedView.js +26 -0
  29. package/lib/module/native/maskedView.js.map +1 -0
  30. package/lib/module/native/pagerView.js +79 -0
  31. package/lib/module/native/pagerView.js.map +1 -0
  32. package/lib/module/native/permissions.js +30 -0
  33. package/lib/module/native/permissions.js.map +1 -0
  34. package/lib/module/native/runtime.js +81 -0
  35. package/lib/module/native/runtime.js.map +1 -0
  36. package/lib/module/native/safeAreaContext.js +43 -0
  37. package/lib/module/native/safeAreaContext.js.map +1 -0
  38. package/lib/module/native/svg.js +83 -0
  39. package/lib/module/native/svg.js.map +1 -0
  40. package/lib/module/native/vectorIcons.js +41 -0
  41. package/lib/module/native/vectorIcons.js.map +1 -0
  42. package/lib/module/utils/flowboardUtils.js +4 -1
  43. package/lib/module/utils/flowboardUtils.js.map +1 -1
  44. package/lib/typescript/src/Flowboard.d.ts.map +1 -1
  45. package/lib/typescript/src/components/FlowboardFlow.d.ts.map +1 -1
  46. package/lib/typescript/src/components/FlowboardRenderer.d.ts +33 -0
  47. package/lib/typescript/src/components/FlowboardRenderer.d.ts.map +1 -1
  48. package/lib/typescript/src/core/clientContext.d.ts.map +1 -1
  49. package/lib/typescript/src/core/fontAwesome.d.ts +1 -1
  50. package/lib/typescript/src/core/fontAwesome.d.ts.map +1 -1
  51. package/lib/typescript/src/core/onboardingRepository.d.ts.map +1 -1
  52. package/lib/typescript/src/native/asyncStorage.d.ts +16 -0
  53. package/lib/typescript/src/native/asyncStorage.d.ts.map +1 -0
  54. package/lib/typescript/src/native/deviceInfo.d.ts +11 -0
  55. package/lib/typescript/src/native/deviceInfo.d.ts.map +1 -0
  56. package/lib/typescript/src/native/inAppReview.d.ts +4 -0
  57. package/lib/typescript/src/native/inAppReview.d.ts.map +1 -0
  58. package/lib/typescript/src/native/linearGradient.d.ts +3 -0
  59. package/lib/typescript/src/native/linearGradient.d.ts.map +1 -0
  60. package/lib/typescript/src/native/lottie.d.ts +3 -0
  61. package/lib/typescript/src/native/lottie.d.ts.map +1 -0
  62. package/lib/typescript/src/native/maskedView.d.ts +3 -0
  63. package/lib/typescript/src/native/maskedView.d.ts.map +1 -0
  64. package/lib/typescript/src/native/pagerView.d.ts +14 -0
  65. package/lib/typescript/src/native/pagerView.d.ts.map +1 -0
  66. package/lib/typescript/src/native/permissions.d.ts +9 -0
  67. package/lib/typescript/src/native/permissions.d.ts.map +1 -0
  68. package/lib/typescript/src/native/runtime.d.ts +13 -0
  69. package/lib/typescript/src/native/runtime.d.ts.map +1 -0
  70. package/lib/typescript/src/native/safeAreaContext.d.ts +15 -0
  71. package/lib/typescript/src/native/safeAreaContext.d.ts.map +1 -0
  72. package/lib/typescript/src/native/svg.d.ts +8 -0
  73. package/lib/typescript/src/native/svg.d.ts.map +1 -0
  74. package/lib/typescript/src/native/vectorIcons.d.ts +4 -0
  75. package/lib/typescript/src/native/vectorIcons.d.ts.map +1 -0
  76. package/lib/typescript/src/utils/flowboardUtils.d.ts.map +1 -1
  77. package/package.json +24 -19
  78. package/src/Flowboard.ts +1 -2
  79. package/src/FlowboardProvider.tsx +1 -1
  80. package/src/components/FlowboardFlow.tsx +47 -9
  81. package/src/components/FlowboardRenderer.tsx +689 -113
  82. package/src/core/clientContext.ts +10 -32
  83. package/src/core/fontAwesome.ts +2 -9
  84. package/src/core/onboardingRepository.ts +18 -13
  85. package/src/native/asyncStorage.ts +99 -0
  86. package/src/native/deviceInfo.ts +88 -0
  87. package/src/native/inAppReview.ts +34 -0
  88. package/src/native/linearGradient.tsx +24 -0
  89. package/src/native/lottie.tsx +17 -0
  90. package/src/native/maskedView.tsx +19 -0
  91. package/src/native/pagerView.tsx +95 -0
  92. package/src/native/permissions.ts +59 -0
  93. package/src/native/runtime.ts +110 -0
  94. package/src/native/safeAreaContext.tsx +44 -0
  95. package/src/native/svg.tsx +82 -0
  96. package/src/native/vectorIcons.tsx +50 -0
  97. package/src/utils/flowboardUtils.ts +9 -1
package/bin/setup.js ADDED
@@ -0,0 +1,427 @@
1
+ #!/usr/bin/env node
2
+
3
+ const childProcess = require('node:child_process');
4
+ const fs = require('node:fs');
5
+ const path = require('node:path');
6
+ const readline = require('node:readline/promises');
7
+
8
+ const BASE_PACKAGES = [
9
+ ['@react-native-async-storage/async-storage', '1.24.0'],
10
+ ['@react-native-masked-view/masked-view', '0.3.2'],
11
+ ['lottie-react-native', '7.1.0'],
12
+ ['react-native-device-info', '13.2.0'],
13
+ ['react-native-in-app-review', '4.3.0'],
14
+ ['react-native-linear-gradient', '2.8.3'],
15
+ ['react-native-pager-view', '6.2.4'],
16
+ ['react-native-permissions', '4.1.5'],
17
+ ['react-native-safe-area-context', '5.0.0'],
18
+ ['react-native-svg', '15.10.1'],
19
+ ['react-native-vector-icons', '10.2.0'],
20
+ ];
21
+
22
+ const EXPO_EXTRA_PACKAGES = ['expo-font'];
23
+
24
+ function parseArgs(argv) {
25
+ const args = {
26
+ dryRun: false,
27
+ projectRoot: null,
28
+ upgrade: false,
29
+ verbose: false,
30
+ yes: false,
31
+ };
32
+
33
+ for (let index = 0; index < argv.length; index += 1) {
34
+ const arg = argv[index];
35
+ if (arg === '--dry-run') args.dryRun = true;
36
+ else if (arg === '--upgrade') args.upgrade = true;
37
+ else if (arg === '--verbose') args.verbose = true;
38
+ else if (arg === '--yes') args.yes = true;
39
+ else if (arg === '--project-root') {
40
+ args.projectRoot = argv[index + 1] ? path.resolve(argv[index + 1]) : null;
41
+ index += 1;
42
+ } else if (arg.startsWith('--project-root=')) {
43
+ args.projectRoot = path.resolve(arg.slice('--project-root='.length));
44
+ }
45
+ }
46
+
47
+ return args;
48
+ }
49
+
50
+ function parseSemver(input) {
51
+ const match = String(input || '').match(/(\d+)\.(\d+)\.(\d+)/);
52
+ if (!match) return null;
53
+ return {
54
+ major: Number(match[1]),
55
+ minor: Number(match[2]),
56
+ patch: Number(match[3]),
57
+ };
58
+ }
59
+
60
+ function compareSemver(left, right) {
61
+ if (left.major !== right.major) return left.major - right.major;
62
+ if (left.minor !== right.minor) return left.minor - right.minor;
63
+ return left.patch - right.patch;
64
+ }
65
+
66
+ function rangeAcceptsVersion(spec, version) {
67
+ const normalized = String(spec || '').trim();
68
+ if (!normalized) return false;
69
+ if (
70
+ normalized === '*' ||
71
+ normalized === 'latest' ||
72
+ normalized.startsWith('workspace:')
73
+ ) {
74
+ return true;
75
+ }
76
+ if (normalized.includes('||')) {
77
+ return normalized
78
+ .split('||')
79
+ .some((part) => rangeAcceptsVersion(part.trim(), version));
80
+ }
81
+
82
+ const comparators = normalized.split(/\s+/).filter(Boolean);
83
+ if (comparators.length > 1) {
84
+ return comparators.every((part) => rangeAcceptsVersion(part, version));
85
+ }
86
+
87
+ const target = parseSemver(version);
88
+ if (!target) return false;
89
+
90
+ const operatorMatch = normalized.match(/^(>=|<=|>|<|\^|~)/);
91
+ const operator = operatorMatch ? operatorMatch[1] : '';
92
+ const base = parseSemver(normalized.slice(operator.length));
93
+ if (!base) {
94
+ const exact = parseSemver(normalized);
95
+ return exact ? compareSemver(target, exact) === 0 : normalized === version;
96
+ }
97
+
98
+ switch (operator) {
99
+ case '^':
100
+ return target.major === base.major && compareSemver(target, base) >= 0;
101
+ case '~':
102
+ return (
103
+ target.major === base.major &&
104
+ target.minor === base.minor &&
105
+ compareSemver(target, base) >= 0
106
+ );
107
+ case '>=':
108
+ return compareSemver(target, base) >= 0;
109
+ case '<=':
110
+ return compareSemver(target, base) <= 0;
111
+ case '>':
112
+ return compareSemver(target, base) > 0;
113
+ case '<':
114
+ return compareSemver(target, base) < 0;
115
+ default:
116
+ return compareSemver(target, base) === 0;
117
+ }
118
+ }
119
+
120
+ function getManifest(root) {
121
+ const manifestPath = path.join(root, 'package.json');
122
+ if (!fs.existsSync(manifestPath)) {
123
+ throw new Error(`No package.json found in ${root}`);
124
+ }
125
+
126
+ return JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
127
+ }
128
+
129
+ function getProjectRoot(explicitProjectRoot) {
130
+ return explicitProjectRoot || process.cwd();
131
+ }
132
+
133
+ function detectPackageManager(root, manifest) {
134
+ const candidates = [
135
+ ['pnpm-lock.yaml', 'pnpm'],
136
+ ['yarn.lock', 'yarn'],
137
+ ['package-lock.json', 'npm'],
138
+ ['bun.lock', 'bun'],
139
+ ['bun.lockb', 'bun'],
140
+ ];
141
+
142
+ const detected = candidates.find(([file]) =>
143
+ fs.existsSync(path.join(root, file))
144
+ );
145
+ if (detected) return detected[1];
146
+
147
+ const packageManager = String(manifest.packageManager || '');
148
+ if (packageManager.startsWith('pnpm@')) return 'pnpm';
149
+ if (packageManager.startsWith('yarn@')) return 'yarn';
150
+ if (packageManager.startsWith('bun@')) return 'bun';
151
+ return 'npm';
152
+ }
153
+
154
+ function getPackageSpec(manifest, packageName) {
155
+ return (
156
+ manifest.dependencies?.[packageName] ||
157
+ manifest.devDependencies?.[packageName] ||
158
+ manifest.peerDependencies?.[packageName] ||
159
+ null
160
+ );
161
+ }
162
+
163
+ function isExpoProject(manifest) {
164
+ return Boolean(getPackageSpec(manifest, 'expo'));
165
+ }
166
+
167
+ function hasReactNative(manifest) {
168
+ return Boolean(getPackageSpec(manifest, 'react-native'));
169
+ }
170
+
171
+ function selectPackages(manifest, options) {
172
+ return BASE_PACKAGES.filter(([packageName, version]) => {
173
+ if (options.upgrade) return true;
174
+ const existingSpec = getPackageSpec(manifest, packageName);
175
+ return !rangeAcceptsVersion(existingSpec, version);
176
+ }).map(([name, version]) => ({ name, version }));
177
+ }
178
+
179
+ function selectExpoExtras(manifest, options) {
180
+ return EXPO_EXTRA_PACKAGES.filter((packageName) => {
181
+ if (options.upgrade) return true;
182
+ return !getPackageSpec(manifest, packageName);
183
+ });
184
+ }
185
+
186
+ function commandName(baseName) {
187
+ return process.platform === 'win32' ? `${baseName}.cmd` : baseName;
188
+ }
189
+
190
+ function buildInstallCommands({ expo, packageManager, packages, expoExtras }) {
191
+ const commands = [];
192
+
193
+ if (expo) {
194
+ if (packages.length > 0) {
195
+ commands.push({
196
+ args: ['expo', 'install', ...packages.map((entry) => entry.name)],
197
+ command: commandName('npx'),
198
+ title: 'Install Expo-compatible Flowboard peers',
199
+ });
200
+ }
201
+ if (expoExtras.length > 0) {
202
+ commands.push({
203
+ args: ['expo', 'install', ...expoExtras],
204
+ command: commandName('npx'),
205
+ title: 'Install Expo-only helpers',
206
+ });
207
+ }
208
+ return commands;
209
+ }
210
+
211
+ if (packages.length === 0) return commands;
212
+
213
+ const specs = packages.map((entry) => `${entry.name}@${entry.version}`);
214
+ const installArgsByManager = {
215
+ bun: ['add', ...specs],
216
+ npm: ['install', ...specs],
217
+ pnpm: ['add', ...specs],
218
+ yarn: ['add', ...specs],
219
+ };
220
+
221
+ commands.push({
222
+ args: installArgsByManager[packageManager] || installArgsByManager.npm,
223
+ command: commandName(packageManager),
224
+ title: 'Install validated React Native peer versions',
225
+ });
226
+
227
+ return commands;
228
+ }
229
+
230
+ function formatCommand(command) {
231
+ return [command.command, ...command.args].join(' ');
232
+ }
233
+
234
+ async function confirmExecution() {
235
+ const rl = readline.createInterface({
236
+ input: process.stdin,
237
+ output: process.stdout,
238
+ });
239
+
240
+ try {
241
+ const answer = await rl.question(
242
+ 'Proceed with these install commands? [y/N] '
243
+ );
244
+ return ['y', 'yes'].includes(answer.trim().toLowerCase());
245
+ } finally {
246
+ rl.close();
247
+ }
248
+ }
249
+
250
+ function printNextSteps({ expo, projectRoot }) {
251
+ if (expo) {
252
+ console.log('\nNext steps');
253
+ console.log('1. Add `"flowboard-react"` to your Expo plugins array.');
254
+ console.log('```json');
255
+ console.log('{');
256
+ console.log(' "expo": {');
257
+ console.log(' "plugins": ["flowboard-react"]');
258
+ console.log(' }');
259
+ console.log('}');
260
+ console.log('```');
261
+ console.log(
262
+ '2. If your flow requests permissions, use the plugin options:'
263
+ );
264
+ console.log('```json');
265
+ console.log('{');
266
+ console.log(' "expo": {');
267
+ console.log(' "plugins": [[');
268
+ console.log(' "flowboard-react",');
269
+ console.log(' {');
270
+ console.log(' "permissions": ["camera", "photos"],');
271
+ console.log(' "permissionMessages": {');
272
+ console.log(
273
+ ' "camera": "Allow $(PRODUCT_NAME) to access the camera during onboarding."'
274
+ );
275
+ console.log(' }');
276
+ console.log(' }');
277
+ console.log(' ]]');
278
+ console.log(' }');
279
+ console.log('}');
280
+ console.log('```');
281
+ console.log(
282
+ '3. Build a development client or run `npx expo prebuild` before testing. Expo Go is not supported.'
283
+ );
284
+ return;
285
+ }
286
+
287
+ console.log('\nNext steps');
288
+ console.log(
289
+ '1. Run `cd ios && pod install` before launching the app on iOS.'
290
+ );
291
+ console.log(
292
+ '2. Configure `react-native-permissions` in your Podfile, Info.plist, and AndroidManifest.xml when your flow uses permission actions.'
293
+ );
294
+ console.log(
295
+ '3. Configure `react-native-vector-icons` font bundling in native projects if your host app has not already done so.'
296
+ );
297
+ console.log(
298
+ `4. Use ${path.join(
299
+ projectRoot,
300
+ 'README.md'
301
+ )} in flowboard-react as the canonical checklist.`
302
+ );
303
+ }
304
+
305
+ function printPlan({ expo, packageManager, packages, expoExtras, commands }) {
306
+ console.log(
307
+ `[flowboard-setup] Target: ${
308
+ expo ? 'Expo development build' : `React Native CLI (${packageManager})`
309
+ }`
310
+ );
311
+
312
+ if (packages.length > 0) {
313
+ console.log('[flowboard-setup] Packages to install:');
314
+ packages.forEach((entry) => {
315
+ console.log(` - ${entry.name}${expo ? '' : `@${entry.version}`}`);
316
+ });
317
+ } else {
318
+ console.log(
319
+ '[flowboard-setup] Base Flowboard peer dependencies already look compatible.'
320
+ );
321
+ }
322
+
323
+ if (expoExtras.length > 0) {
324
+ console.log('[flowboard-setup] Expo-only helpers:');
325
+ expoExtras.forEach((entry) => {
326
+ console.log(` - ${entry}`);
327
+ });
328
+ }
329
+
330
+ if (commands.length > 0) {
331
+ console.log('[flowboard-setup] Commands:');
332
+ commands.forEach((command) => {
333
+ console.log(` - ${formatCommand(command)}`);
334
+ });
335
+ }
336
+ }
337
+
338
+ function runCommand(command, cwd, dryRun) {
339
+ if (dryRun) return;
340
+
341
+ const result = childProcess.spawnSync(command.command, command.args, {
342
+ cwd,
343
+ stdio: 'inherit',
344
+ });
345
+
346
+ if (result.status !== 0) {
347
+ throw new Error(`Command failed: ${formatCommand(command)}`);
348
+ }
349
+ }
350
+
351
+ async function main(rawArgs = process.argv.slice(2)) {
352
+ const options = parseArgs(rawArgs);
353
+ const projectRoot = getProjectRoot(options.projectRoot);
354
+ const manifest = getManifest(projectRoot);
355
+
356
+ if (!hasReactNative(manifest)) {
357
+ throw new Error(
358
+ 'This directory does not look like a React Native app. Add `react-native` to package.json before running flowboard-setup.'
359
+ );
360
+ }
361
+
362
+ const expo = isExpoProject(manifest);
363
+ const packageManager = detectPackageManager(projectRoot, manifest);
364
+ const packages = selectPackages(manifest, options);
365
+ const expoExtras = expo ? selectExpoExtras(manifest, options) : [];
366
+ const commands = buildInstallCommands({
367
+ expo,
368
+ expoExtras,
369
+ packageManager,
370
+ packages,
371
+ });
372
+
373
+ printPlan({ commands, expo, expoExtras, packageManager, packages });
374
+
375
+ if (commands.length === 0) {
376
+ printNextSteps({ expo, projectRoot });
377
+ return;
378
+ }
379
+
380
+ const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);
381
+ if (!options.yes && !options.dryRun && interactive) {
382
+ const confirmed = await confirmExecution();
383
+ if (!confirmed) {
384
+ console.log('[flowboard-setup] Cancelled.');
385
+ return;
386
+ }
387
+ }
388
+
389
+ commands.forEach((command) => {
390
+ if (options.verbose || options.dryRun) {
391
+ console.log(`[flowboard-setup] ${command.title}`);
392
+ console.log(`[flowboard-setup] ${formatCommand(command)}`);
393
+ }
394
+ runCommand(command, projectRoot, options.dryRun);
395
+ });
396
+
397
+ if (options.dryRun) {
398
+ console.log('[flowboard-setup] Dry run complete. No files were changed.');
399
+ }
400
+
401
+ printNextSteps({ expo, projectRoot });
402
+ }
403
+
404
+ module.exports = {
405
+ BASE_PACKAGES,
406
+ EXPO_EXTRA_PACKAGES,
407
+ buildInstallCommands,
408
+ detectPackageManager,
409
+ getManifest,
410
+ getPackageSpec,
411
+ getProjectRoot,
412
+ hasReactNative,
413
+ isExpoProject,
414
+ main,
415
+ parseArgs,
416
+ parseSemver,
417
+ rangeAcceptsVersion,
418
+ selectExpoExtras,
419
+ selectPackages,
420
+ };
421
+
422
+ if (require.main === module) {
423
+ main().catch((error) => {
424
+ console.error(`[flowboard-setup] ${error.message}`);
425
+ process.exitCode = 1;
426
+ });
427
+ }
@@ -97,8 +97,7 @@ export class Flowboard {
97
97
  });
98
98
  } catch (error) {
99
99
  Flowboard.log(`Failed to load onboarding by id: ${String(error)}`);
100
- Alert.alert('Failed to load onboarding', String(error));
101
- return;
100
+ throw error;
102
101
  }
103
102
  await Flowboard.launchResolvedOnboarding(data, options);
104
103
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Alert","ClientContext","ResolverService","OnboardingRepository","AnalyticsManager","Flowboard","apiToken","debug","repository","service","initPromise","listeners","Set","subscribe","listener","add","delete","init","params","trim","Error","log","clientContext","create","instance","configure","enabled","enableAnalytics","context","error","String","initialize","reinit","clearLocalCaches","fetchAndSave","launchOnboarding","options","configureAnalyticsForLaunch","data","getOnboardingJson","alert","launchResolvedOnboarding","launchOnboardingById","onboardingId","normalizedOnboardingId","locale","resolveLocale","fetchOnboardingById","version","shouldResumeProgress","resumeProgress","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","clientContextSnapshot","requestedLocale","normalized","cached","startSession","flowData","startTime","Date","now","installId","bundleId","json","fetchOnboardingJson","saveOnboardingJson","duration","trackOnboardLoaded","durationMs","Promise","all","clearOnboardingJson","payload","forEach","message","console"],"sourceRoot":"../../src","sources":["Flowboard.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Alert","ClientContext","ResolverService","OnboardingRepository","AnalyticsManager","Flowboard","apiToken","debug","repository","service","initPromise","listeners","Set","subscribe","listener","add","delete","init","params","trim","Error","log","clientContext","create","instance","configure","enabled","enableAnalytics","context","error","String","initialize","reinit","clearLocalCaches","fetchAndSave","launchOnboarding","options","configureAnalyticsForLaunch","data","getOnboardingJson","alert","launchResolvedOnboarding","launchOnboardingById","onboardingId","normalizedOnboardingId","locale","resolveLocale","fetchOnboardingById","version","shouldResumeProgress","resumeProgress","alwaysRestart","clearProgress","initialStep","initialFormData","flowId","flow_id","savedStep","getProgressStepForFlow","savedFormData","getProgressFormDataForFlow","undefined","screens","Array","isArray","length","maxIndex","Object","keys","emitLaunch","clientContextSnapshot","requestedLocale","normalized","cached","startSession","flowData","startTime","Date","now","installId","bundleId","json","fetchOnboardingJson","saveOnboardingJson","duration","trackOnboardLoaded","durationMs","Promise","all","clearOnboardingJson","payload","forEach","message","console"],"sourceRoot":"../../src","sources":["Flowboard.ts"],"mappings":"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","ignoreList":[]}
@@ -2,9 +2,9 @@
2
2
 
3
3
  import React, { useEffect, useState } from 'react';
4
4
  import { Modal, StyleSheet, View } from 'react-native';
5
- import { SafeAreaProvider } from 'react-native-safe-area-context';
6
5
  import { Flowboard } from "./Flowboard.js";
7
6
  import FlowboardFlow from "./components/FlowboardFlow.js";
7
+ import { SafeAreaProvider } from "./native/safeAreaContext.js";
8
8
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  const styles = StyleSheet.create({
10
10
  modalContainer: {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","Modal","StyleSheet","View","SafeAreaProvider","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","presentationStyle","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,gBAAgB,QAAQ,gCAAgC;AACjE,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,GAAGX,UAAU,CAACY,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,GAAGrB,QAAQ,CAAuB,IAAI,CAAC;EAClE,MAAM,CAACsB,OAAO,EAAEC,UAAU,CAAC,GAAGvB,QAAQ,CAAC,KAAK,CAAC;EAE7CD,SAAS,CAAC,MAAM;IACd,MAAMyB,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,CAACP,KAAK;MACJqB,OAAO,EAAEA,OAAQ;MACjBM,aAAa,EAAC,OAAO;MACrBC,WAAW,EAAE,KAAM;MACnBC,iBAAiB,EAAC,YAAY;MAC9BC,cAAc,EAAEJ,WAAY;MAAAR,QAAA,eAE5BX,IAAA,CAACJ,gBAAgB;QAAAe,QAAA,eACfX,IAAA,CAACL,IAAI;UAAC6B,KAAK,EAAEnB,MAAM,CAACE,cAAe;UAAAI,QAAA,EAChCC,OAAO,gBACNZ,IAAA,CAACF,aAAa;YACZ2B,IAAI,EAAEb,OAAO,CAACa,IAAK;YACnBC,mBAAmB,EAAEd,OAAO,CAACe,OAAO,CAACD,mBAAoB;YACzDE,mBAAmB,EAAEhB,OAAO,CAACe,OAAO,CAACC,mBAAoB;YACzDC,YAAY,EAAEjB,OAAO,CAACe,OAAO,CAACE,YAAa;YAC3CC,YAAY,EAAElB,OAAO,CAACe,OAAO,CAACG,YAAa;YAC3CC,WAAW,EAAEnB,OAAO,CAACmB,WAAY;YACjCC,eAAe,EAAEpB,OAAO,CAACoB,eAAgB;YACzCC,OAAO,EAAEd;UAAY,CACtB,CAAC,GACA;QAAI,CACJ;MAAC,CACS;IAAC,CACd,CAAC;EAAA,CACR,CAAC;AAEP","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useState","Modal","StyleSheet","View","Flowboard","FlowboardFlow","SafeAreaProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","styles","create","modalContainer","flex","backgroundColor","FlowboardProvider","children","payload","setPayload","visible","setVisible","unsubscribe","subscribe","nextPayload","handleClose","animationType","transparent","presentationStyle","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;AACtD,SAASC,gBAAgB,QAAQ,6BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAE5D,MAAMC,MAAM,GAAGX,UAAU,CAACY,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,GAAGrB,QAAQ,CAAuB,IAAI,CAAC;EAClE,MAAM,CAACsB,OAAO,EAAEC,UAAU,CAAC,GAAGvB,QAAQ,CAAC,KAAK,CAAC;EAE7CD,SAAS,CAAC,MAAM;IACd,MAAMyB,WAAW,GAAGpB,SAAS,CAACqB,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,CAACP,KAAK;MACJqB,OAAO,EAAEA,OAAQ;MACjBM,aAAa,EAAC,OAAO;MACrBC,WAAW,EAAE,KAAM;MACnBC,iBAAiB,EAAC,YAAY;MAC9BC,cAAc,EAAEJ,WAAY;MAAAR,QAAA,eAE5BX,IAAA,CAACF,gBAAgB;QAAAa,QAAA,eACfX,IAAA,CAACL,IAAI;UAAC6B,KAAK,EAAEnB,MAAM,CAACE,cAAe;UAAAI,QAAA,EAChCC,OAAO,gBACNZ,IAAA,CAACH,aAAa;YACZ4B,IAAI,EAAEb,OAAO,CAACa,IAAK;YACnBC,mBAAmB,EAAEd,OAAO,CAACe,OAAO,CAACD,mBAAoB;YACzDE,mBAAmB,EAAEhB,OAAO,CAACe,OAAO,CAACC,mBAAoB;YACzDC,YAAY,EAAEjB,OAAO,CAACe,OAAO,CAACE,YAAa;YAC3CC,YAAY,EAAElB,OAAO,CAACe,OAAO,CAACG,YAAa;YAC3CC,WAAW,EAAEnB,OAAO,CAACmB,WAAY;YACjCC,eAAe,EAAEpB,OAAO,CAACoB,eAAgB;YACzCC,OAAO,EAAEd;UAAY,CACtB,CAAC,GACA;QAAI,CACJ;MAAC,CACS;IAAC,CACd,CAAC;EAAA,CACR,CAAC;AAEP","ignoreList":[]}
@@ -2,21 +2,21 @@
2
2
 
3
3
  import { useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { Alert, Keyboard, Platform, StyleSheet, View } from 'react-native';
5
- import PagerView from 'react-native-pager-view';
6
5
  import { Linking } from 'react-native';
7
- import InAppReview from 'react-native-in-app-review';
8
- import { SafeAreaProvider } from 'react-native-safe-area-context';
9
- import { openSettings, PERMISSIONS, request, requestNotifications, RESULTS } from 'react-native-permissions';
6
+ import { openSettings, PERMISSIONS, request, requestNotifications, RESULTS } from "../native/permissions.js";
10
7
  import { AssetPreloader } from "../core/assetPreloader.js";
11
8
  import { AnalyticsManager, OnboardingOutcome } from "../core/analyticsManager.js";
12
9
  import { OnboardingRepository } from "../core/onboardingRepository.js";
10
+ import { requestInAppReview, isInAppReviewAvailable } from "../native/inAppReview.js";
11
+ import PagerView from "../native/pagerView.js";
12
+ import { SafeAreaProvider } from "../native/safeAreaContext.js";
13
13
  import FlowboardRenderer from "./FlowboardRenderer.js";
14
14
  import { SliderRegistry, SliderRegistryProvider } from "./widgets/sliderRegistry.js";
15
+ import { parseColor } from "../utils/flowboardUtils.js";
15
16
  import { jsx as _jsx } from "react/jsx-runtime";
16
17
  const styles = StyleSheet.create({
17
18
  container: {
18
- flex: 1,
19
- backgroundColor: '#ffffff'
19
+ flex: 1
20
20
  },
21
21
  fullFlex: {
22
22
  flex: 1
@@ -52,6 +52,8 @@ export default function FlowboardFlow(props) {
52
52
  const didSyncPagerRef = useRef(false);
53
53
  const completedRef = useRef(false);
54
54
  const flowStartTimeRef = useRef(Date.now());
55
+ const currentScreenData = screens[currentIndex] ?? null;
56
+ const flowBackgroundColor = resolveScreenBackgroundColor(currentScreenData);
55
57
  useEffect(() => {
56
58
  AnalyticsManager.instance.startSession({
57
59
  flowData: data
@@ -256,8 +258,8 @@ export default function FlowboardFlow(props) {
256
258
  };
257
259
  const handleRateAppAction = async (index, totalScreens) => {
258
260
  try {
259
- if (InAppReview.isAvailable()) {
260
- InAppReview.RequestInAppReview();
261
+ if (isInAppReviewAvailable()) {
262
+ await requestInAppReview();
261
263
  }
262
264
  } catch {
263
265
  // ignore
@@ -312,7 +314,9 @@ export default function FlowboardFlow(props) {
312
314
  };
313
315
  return /*#__PURE__*/_jsx(SafeAreaProvider, {
314
316
  children: /*#__PURE__*/_jsx(View, {
315
- style: styles.container,
317
+ style: [styles.container, flowBackgroundColor ? {
318
+ backgroundColor: flowBackgroundColor
319
+ } : undefined],
316
320
  children: /*#__PURE__*/_jsx(PagerView, {
317
321
  ref: pagerRef,
318
322
  style: styles.fullFlex,
@@ -354,6 +358,24 @@ function resolveInitialPage(desired, total) {
354
358
  if (desired >= total) return total - 1;
355
359
  return desired;
356
360
  }
361
+ function resolveScreenBackgroundColor(screenData) {
362
+ if (!screenData) return undefined;
363
+ const bgData = screenData.background;
364
+ if (bgData && typeof bgData === 'object') {
365
+ const type = String(bgData.type ?? '').toLowerCase();
366
+ if (type === 'color' && bgData.color !== undefined) {
367
+ return parseColor(bgData.color);
368
+ }
369
+ if (type === 'gradient' && Array.isArray(bgData.colors)) {
370
+ const first = bgData.colors[0];
371
+ if (first !== undefined) return parseColor(first);
372
+ }
373
+ }
374
+ if (screenData.backgroundColor !== undefined) {
375
+ return parseColor(screenData.backgroundColor);
376
+ }
377
+ return undefined;
378
+ }
357
379
  function validateScreen(screenData, formData) {
358
380
  const invalidFields = [];
359
381
  const children = Array.isArray(screenData.children) ? screenData.children : [];