@wireai/activation 0.7.0 → 0.9.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.
- package/AGENTS.md +29 -5
- package/CHANGELOG.md +198 -6
- package/README.md +105 -10
- package/dist/analytics/index.d.mts +12 -8
- package/dist/analytics/index.d.ts +12 -8
- package/dist/analytics/index.js +525 -55
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +525 -55
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/coachmarks/index.d.mts +2 -2
- package/dist/coachmarks/index.d.ts +2 -2
- package/dist/coachmarks/index.js.map +1 -1
- package/dist/coachmarks/index.mjs.map +1 -1
- package/dist/{currentSession-CxnP7gAa.d.ts → currentSession-61dcm3V-.d.ts} +19 -3
- package/dist/{currentSession-BJBB7i4-.d.mts → currentSession-Bs2JfTJ8.d.mts} +19 -3
- package/dist/{decision-BzbiKwk3.d.mts → decision-Bl_M2y3r.d.mts} +1 -1
- package/dist/{decision-plDEOCkt.d.ts → decision-Cau5KmP6.d.ts} +1 -1
- package/dist/index.d.mts +620 -13
- package/dist/index.d.ts +620 -13
- package/dist/index.js +1194 -369
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1015 -201
- package/dist/index.mjs.map +1 -1
- package/dist/questionnaire/index.d.mts +69 -23
- package/dist/questionnaire/index.d.ts +69 -23
- package/dist/questionnaire/index.js +643 -172
- package/dist/questionnaire/index.js.map +1 -1
- package/dist/questionnaire/index.mjs +608 -137
- package/dist/questionnaire/index.mjs.map +1 -1
- package/dist/reviews/index.d.mts +24 -12
- package/dist/reviews/index.d.ts +24 -12
- package/dist/reviews/index.js +507 -173
- package/dist/reviews/index.js.map +1 -1
- package/dist/reviews/index.mjs +462 -129
- package/dist/reviews/index.mjs.map +1 -1
- package/dist/showcase/index.d.mts +2 -2
- package/dist/showcase/index.d.ts +2 -2
- package/dist/showcase/index.js.map +1 -1
- package/dist/showcase/index.mjs.map +1 -1
- package/dist/transport-DzU-TqZz.d.ts +86 -0
- package/dist/transport-f5VVB5hH.d.mts +86 -0
- package/dist/{types-GL_hQ0TN.d.mts → types-BcmagF6K.d.mts} +1 -1
- package/dist/{types-GL_hQ0TN.d.ts → types-BcmagF6K.d.ts} +1 -1
- package/dist/{types-BhpXJGlg.d.ts → types-Buj9Lw9t.d.ts} +15 -3
- package/dist/{types-CMuOexw0.d.mts → types-CKFhyrMu.d.mts} +1 -1
- package/dist/{types-CMuOexw0.d.ts → types-CKFhyrMu.d.ts} +1 -1
- package/dist/{types-A6pTxIZV.d.mts → types-CNUqMK0D.d.mts} +15 -3
- package/metro/index.d.ts +18 -1
- package/metro/index.js +80 -0
- package/package.json +9 -1
- package/src/WireOnboarding.tsx +4 -0
- package/src/analytics/analyticsFacade.ts +55 -10
- package/src/analytics/currentSession.ts +1 -1
- package/src/cards/CardGridSelectCard.tsx +253 -0
- package/src/cards/ChipSelectCard.tsx +1 -1
- package/src/cards/SelectionCard.tsx +15 -19
- package/src/cards/index.ts +13 -1
- package/src/cards/optionSchema.ts +65 -0
- package/src/coachmarks/types.ts +1 -1
- package/src/components/CardHandoff.tsx +39 -7
- package/src/components/DoneCheck.tsx +94 -0
- package/src/components/ModalPaneHost.tsx +141 -0
- package/src/components/StepDots.tsx +112 -0
- package/src/context/deviceId.ts +43 -0
- package/src/device/appVersion.ts +29 -8
- package/src/device/deviceContext.ts +14 -1
- package/src/device/deviceModel.ts +106 -0
- package/src/features/cache.ts +1 -1
- package/src/haptics/expo-haptics.d.ts +31 -0
- package/src/haptics/haptics.ts +58 -0
- package/src/icons/IconRegistry.tsx +53 -0
- package/src/icons/WireIcon.tsx +85 -0
- package/src/icons/expoIcons.ts +165 -0
- package/src/icons/index.ts +18 -0
- package/src/icons/vocabulary.ts +154 -0
- package/src/index.ts +22 -0
- package/src/questionnaire/QuestionnaireGate.tsx +315 -164
- package/src/questionnaire/decision.ts +4 -2
- package/src/questionnaire/index.ts +3 -2
- package/src/questionnaire/steps.ts +261 -0
- package/src/questionnaire/types.ts +33 -12
- package/src/reviews/ReviewGate.tsx +250 -152
- package/src/reviews/index.ts +7 -3
- package/src/reviews/transport.ts +77 -3
- package/src/reviews/types.ts +13 -0
- package/src/session/persistedSession.ts +1 -1
- package/src/session-analytics/lifecycle.ts +1 -1
- package/src/session-analytics/useSessionStart.ts +2 -2
- package/src/showcase/FeatureShowcase.tsx +1 -1
- package/src/showcase/showcaseColors.ts +1 -1
- package/src/theme/mergeThemeOver.ts +27 -0
- package/src/types.ts +8 -0
- package/dist/transport-BeO_Brcu.d.mts +0 -40
- package/dist/transport-DLpd1v5_.d.ts +0 -40
package/dist/index.mjs
CHANGED
|
@@ -1,21 +1,406 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { StyleSheet, Easing, Animated, BackHandler, Modal, Pressable, Text, View, TouchableOpacity, KeyboardAvoidingView, ScrollView, useWindowDimensions, TextInput, Image, AccessibilityInfo, Platform, Dimensions, I18nManager, AppState, NativeModules, TurboModuleRegistry } from 'react-native';
|
|
2
|
+
import React18, { createContext, forwardRef, useRef, useState, useEffect, useCallback, useImperativeHandle, useMemo, useContext } from 'react';
|
|
2
3
|
import { useWireAIThread, useWireAIAction, ComponentRenderer, WireAIProvider } from 'wireai-rn';
|
|
3
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
|
-
import { StyleSheet, Easing, Animated, BackHandler, Modal, Pressable, Text, View, TouchableOpacity, KeyboardAvoidingView, ScrollView, useWindowDimensions, TextInput, Image, AccessibilityInfo, Platform, Dimensions, I18nManager, AppState } from 'react-native';
|
|
5
5
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
9
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
10
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
11
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
12
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
10
13
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
11
14
|
}) : x)(function(x) {
|
|
12
15
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
13
16
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
14
17
|
});
|
|
18
|
+
var __esm = (fn, res) => function __init() {
|
|
19
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
20
|
+
};
|
|
15
21
|
var __export = (target, all) => {
|
|
16
|
-
for (var
|
|
17
|
-
__defProp(target,
|
|
22
|
+
for (var name2 in all)
|
|
23
|
+
__defProp(target, name2, { get: all[name2], enumerable: true });
|
|
24
|
+
};
|
|
25
|
+
var __copyProps = (to, from, except, desc) => {
|
|
26
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
27
|
+
for (let key of __getOwnPropNames(from))
|
|
28
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
29
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
30
|
+
}
|
|
31
|
+
return to;
|
|
18
32
|
};
|
|
33
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
34
|
+
|
|
35
|
+
// node_modules/expo-modules-core/src/errors/CodedError.ts
|
|
36
|
+
var CodedError;
|
|
37
|
+
var init_CodedError = __esm({
|
|
38
|
+
"node_modules/expo-modules-core/src/errors/CodedError.ts"() {
|
|
39
|
+
CodedError = class extends Error {
|
|
40
|
+
constructor(code, message) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.code = code;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// node_modules/expo-modules-core/src/NativeModulesProxy.ts
|
|
49
|
+
var NativeModulesProxy_default;
|
|
50
|
+
var init_NativeModulesProxy = __esm({
|
|
51
|
+
"node_modules/expo-modules-core/src/NativeModulesProxy.ts"() {
|
|
52
|
+
NativeModulesProxy_default = {};
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// node_modules/expo-modules-core/src/TurboModuleToExpoModuleProxy.ts
|
|
57
|
+
function createTurboModuleToExpoProxy(turboModule, name2) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
var init_TurboModuleToExpoModuleProxy = __esm({
|
|
61
|
+
"node_modules/expo-modules-core/src/TurboModuleToExpoModuleProxy.ts"() {
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
var init_ensureNativeModulesAreInstalled = __esm({
|
|
65
|
+
"node_modules/expo-modules-core/src/ensureNativeModulesAreInstalled.ts"() {
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
function requireOptionalNativeModule(moduleName) {
|
|
69
|
+
var _a2, _b, _c, _d, _e;
|
|
70
|
+
try {
|
|
71
|
+
return (_e = (_d = (_c = (_b = (_a2 = globalThis.expo) == null ? void 0 : _a2.modules) == null ? void 0 : _b[moduleName]) != null ? _c : NativeModulesProxy_default[moduleName]) != null ? _d : createTurboModuleToExpoProxy(TurboModuleRegistry.get(moduleName), moduleName)) != null ? _e : null;
|
|
72
|
+
} catch (e) {
|
|
73
|
+
const error = e;
|
|
74
|
+
console.warn(`An error occurred while requiring the '${moduleName}' module: ${error.message}`);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
var init_requireNativeModule = __esm({
|
|
79
|
+
"node_modules/expo-modules-core/src/requireNativeModule.ts"() {
|
|
80
|
+
init_NativeModulesProxy();
|
|
81
|
+
init_TurboModuleToExpoModuleProxy();
|
|
82
|
+
init_ensureNativeModulesAreInstalled();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// node_modules/expo-modules-core/src/sweet/setUpJsLogger.fx.ts
|
|
87
|
+
var init_setUpJsLogger_fx = __esm({
|
|
88
|
+
"node_modules/expo-modules-core/src/sweet/setUpJsLogger.fx.ts"() {
|
|
89
|
+
init_CodedError();
|
|
90
|
+
init_requireNativeModule();
|
|
91
|
+
if (__DEV__ && typeof window !== "undefined" && (process.env.EXPO_OS === "android" || process.env.EXPO_OS === "ios")) {
|
|
92
|
+
const NativeJSLogger = requireOptionalNativeModule("ExpoModulesCoreJSLogger");
|
|
93
|
+
if (NativeJSLogger) {
|
|
94
|
+
const onNewException = {
|
|
95
|
+
eventName: "ExpoModulesCoreJSLogger.onNewError",
|
|
96
|
+
action: console.error
|
|
97
|
+
};
|
|
98
|
+
const onNewWarning = {
|
|
99
|
+
eventName: "ExpoModulesCoreJSLogger.onNewWarning",
|
|
100
|
+
action: console.warn
|
|
101
|
+
};
|
|
102
|
+
const onNewDebug = {
|
|
103
|
+
eventName: "ExpoModulesCoreJSLogger.onNewDebug",
|
|
104
|
+
action: console.debug
|
|
105
|
+
};
|
|
106
|
+
const onNewInfo = {
|
|
107
|
+
eventName: "ExpoModulesCoreJSLogger.onNewInfo",
|
|
108
|
+
action: console.info
|
|
109
|
+
};
|
|
110
|
+
const onNewTrace = {
|
|
111
|
+
eventName: "ExpoModulesCoreJSLogger.onNewTrace",
|
|
112
|
+
action: console.trace
|
|
113
|
+
};
|
|
114
|
+
const listeners = [
|
|
115
|
+
onNewException,
|
|
116
|
+
onNewWarning,
|
|
117
|
+
onNewDebug,
|
|
118
|
+
onNewInfo,
|
|
119
|
+
onNewTrace
|
|
120
|
+
];
|
|
121
|
+
for (const listener of listeners) {
|
|
122
|
+
NativeJSLogger.addListener(listener.eventName, ({ message }) => {
|
|
123
|
+
listener.action(message);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
globalThis.ExpoModulesCore_CodedError = CodedError;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// node_modules/expo-modules-core/src/registerWebModule.ts
|
|
133
|
+
var init_registerWebModule = __esm({
|
|
134
|
+
"node_modules/expo-modules-core/src/registerWebModule.ts"() {
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// node_modules/expo-modules-core/src/TypedArrays.types.ts
|
|
139
|
+
var init_TypedArrays_types = __esm({
|
|
140
|
+
"node_modules/expo-modules-core/src/TypedArrays.types.ts"() {
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// node_modules/expo-modules-core/src/PermissionsInterface.ts
|
|
145
|
+
var init_PermissionsInterface = __esm({
|
|
146
|
+
"node_modules/expo-modules-core/src/PermissionsInterface.ts"() {
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
var init_PermissionsHook = __esm({
|
|
150
|
+
"node_modules/expo-modules-core/src/PermissionsHook.ts"() {
|
|
151
|
+
"use client";
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
var init_Refs = __esm({
|
|
155
|
+
"node_modules/expo-modules-core/src/Refs.ts"() {
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
var init_useReleasingSharedObject = __esm({
|
|
159
|
+
"node_modules/expo-modules-core/src/hooks/useReleasingSharedObject.ts"() {
|
|
160
|
+
"use client";
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// node_modules/expo-modules-core/src/reload.ts
|
|
165
|
+
var init_reload = __esm({
|
|
166
|
+
"node_modules/expo-modules-core/src/reload.ts"() {
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// node_modules/expo-modules-core/src/index.ts
|
|
171
|
+
var init_src = __esm({
|
|
172
|
+
"node_modules/expo-modules-core/src/index.ts"() {
|
|
173
|
+
init_setUpJsLogger_fx();
|
|
174
|
+
init_requireNativeModule();
|
|
175
|
+
init_registerWebModule();
|
|
176
|
+
init_TypedArrays_types();
|
|
177
|
+
init_PermissionsInterface();
|
|
178
|
+
init_PermissionsHook();
|
|
179
|
+
init_Refs();
|
|
180
|
+
init_useReleasingSharedObject();
|
|
181
|
+
init_reload();
|
|
182
|
+
init_CodedError();
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// node_modules/expo-constants/build/Constants.types.js
|
|
187
|
+
var AppOwnership, ExecutionEnvironment, UserInterfaceIdiom;
|
|
188
|
+
var init_Constants_types = __esm({
|
|
189
|
+
"node_modules/expo-constants/build/Constants.types.js"() {
|
|
190
|
+
(function(AppOwnership2) {
|
|
191
|
+
AppOwnership2["Expo"] = "expo";
|
|
192
|
+
})(AppOwnership || (AppOwnership = {}));
|
|
193
|
+
(function(ExecutionEnvironment2) {
|
|
194
|
+
ExecutionEnvironment2["Bare"] = "bare";
|
|
195
|
+
ExecutionEnvironment2["Standalone"] = "standalone";
|
|
196
|
+
ExecutionEnvironment2["StoreClient"] = "storeClient";
|
|
197
|
+
})(ExecutionEnvironment || (ExecutionEnvironment = {}));
|
|
198
|
+
(function(UserInterfaceIdiom2) {
|
|
199
|
+
UserInterfaceIdiom2["Handset"] = "handset";
|
|
200
|
+
UserInterfaceIdiom2["Tablet"] = "tablet";
|
|
201
|
+
UserInterfaceIdiom2["Desktop"] = "desktop";
|
|
202
|
+
UserInterfaceIdiom2["TV"] = "tv";
|
|
203
|
+
UserInterfaceIdiom2["Unsupported"] = "unsupported";
|
|
204
|
+
})(UserInterfaceIdiom || (UserInterfaceIdiom = {}));
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// node_modules/expo-constants/build/ExponentConstants.js
|
|
209
|
+
var ExponentConstants_default;
|
|
210
|
+
var init_ExponentConstants = __esm({
|
|
211
|
+
"node_modules/expo-constants/build/ExponentConstants.js"() {
|
|
212
|
+
init_src();
|
|
213
|
+
ExponentConstants_default = requireOptionalNativeModule("ExponentConstants");
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// node_modules/expo-constants/build/Constants.js
|
|
218
|
+
var Constants_exports = {};
|
|
219
|
+
__export(Constants_exports, {
|
|
220
|
+
AppOwnership: () => AppOwnership,
|
|
221
|
+
ExecutionEnvironment: () => ExecutionEnvironment,
|
|
222
|
+
UserInterfaceIdiom: () => UserInterfaceIdiom,
|
|
223
|
+
default: () => Constants_default
|
|
224
|
+
});
|
|
225
|
+
function isEmbeddedManifest(manifest) {
|
|
226
|
+
return !isExpoUpdatesManifest(manifest);
|
|
227
|
+
}
|
|
228
|
+
function isExpoUpdatesManifest(manifest) {
|
|
229
|
+
return "metadata" in manifest;
|
|
230
|
+
}
|
|
231
|
+
function getManifest(suppressWarning = false) {
|
|
232
|
+
if (!rawManifest) {
|
|
233
|
+
const invalidManifestType = rawManifest === null ? "null" : "undefined";
|
|
234
|
+
if (nativeConstants.executionEnvironment === ExecutionEnvironment.Bare && Platform.OS !== "web") {
|
|
235
|
+
if (!suppressWarning) {
|
|
236
|
+
console.warn(`Constants.manifest is ${invalidManifestType} because the embedded app.config could not be read. Ensure that you have installed the expo-constants build scripts if you need to read from Constants.manifest.`);
|
|
237
|
+
}
|
|
238
|
+
} else if (nativeConstants.executionEnvironment === ExecutionEnvironment.StoreClient || nativeConstants.executionEnvironment === ExecutionEnvironment.Standalone) {
|
|
239
|
+
throw new CodedError("ERR_CONSTANTS_MANIFEST_UNAVAILABLE", `Constants.manifest is ${invalidManifestType}, must be an object.`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return rawManifest;
|
|
243
|
+
}
|
|
244
|
+
var ExpoUpdates, rawUpdatesManifest, rawDevLauncherManifest, rawAppConfig, _a, rawManifest, name, appOwnership, nativeConstants, constants, Constants_default;
|
|
245
|
+
var init_Constants = __esm({
|
|
246
|
+
"node_modules/expo-constants/build/Constants.js"() {
|
|
247
|
+
init_src();
|
|
248
|
+
init_Constants_types();
|
|
249
|
+
init_ExponentConstants();
|
|
250
|
+
init_Constants_types();
|
|
251
|
+
if (!ExponentConstants_default) {
|
|
252
|
+
console.warn("No native ExponentConstants module found, are you sure the expo-constants's module is linked properly?");
|
|
253
|
+
}
|
|
254
|
+
ExpoUpdates = requireOptionalNativeModule("ExpoUpdates");
|
|
255
|
+
rawUpdatesManifest = null;
|
|
256
|
+
if (ExpoUpdates) {
|
|
257
|
+
let updatesManifest;
|
|
258
|
+
if (ExpoUpdates.manifest) {
|
|
259
|
+
updatesManifest = ExpoUpdates.manifest;
|
|
260
|
+
} else if (ExpoUpdates.manifestString) {
|
|
261
|
+
updatesManifest = JSON.parse(ExpoUpdates.manifestString);
|
|
262
|
+
}
|
|
263
|
+
if (updatesManifest && Object.keys(updatesManifest).length > 0) {
|
|
264
|
+
rawUpdatesManifest = updatesManifest;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
rawDevLauncherManifest = null;
|
|
268
|
+
if (NativeModules.EXDevLauncher) {
|
|
269
|
+
let devLauncherManifest;
|
|
270
|
+
if (NativeModules.EXDevLauncher.manifestString) {
|
|
271
|
+
devLauncherManifest = JSON.parse(NativeModules.EXDevLauncher.manifestString);
|
|
272
|
+
}
|
|
273
|
+
if (devLauncherManifest && Object.keys(devLauncherManifest).length > 0) {
|
|
274
|
+
rawDevLauncherManifest = devLauncherManifest;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
rawAppConfig = null;
|
|
278
|
+
if (ExponentConstants_default && ExponentConstants_default.manifest) {
|
|
279
|
+
const appConfig = ExponentConstants_default.manifest;
|
|
280
|
+
if (typeof appConfig === "string") {
|
|
281
|
+
rawAppConfig = JSON.parse(appConfig);
|
|
282
|
+
} else {
|
|
283
|
+
rawAppConfig = appConfig;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
rawManifest = (_a = rawUpdatesManifest != null ? rawUpdatesManifest : rawDevLauncherManifest) != null ? _a : rawAppConfig;
|
|
287
|
+
({ name, appOwnership, ...nativeConstants } = ExponentConstants_default || {});
|
|
288
|
+
constants = {
|
|
289
|
+
...nativeConstants,
|
|
290
|
+
// Ensure this is null in bare workflow
|
|
291
|
+
appOwnership: appOwnership != null ? appOwnership : null
|
|
292
|
+
};
|
|
293
|
+
Object.defineProperties(constants, {
|
|
294
|
+
/**
|
|
295
|
+
* Use `manifest` property by default.
|
|
296
|
+
* This property is only used for internal purposes.
|
|
297
|
+
* It behaves similarly to the original one, but suppresses warning upon no manifest available.
|
|
298
|
+
* `expo-asset` uses it to prevent users from seeing mentioned warning.
|
|
299
|
+
*/
|
|
300
|
+
__unsafeNoWarnManifest: {
|
|
301
|
+
get() {
|
|
302
|
+
const maybeManifest = getManifest(true);
|
|
303
|
+
if (!maybeManifest || !isEmbeddedManifest(maybeManifest)) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
return maybeManifest;
|
|
307
|
+
},
|
|
308
|
+
enumerable: false
|
|
309
|
+
},
|
|
310
|
+
__unsafeNoWarnManifest2: {
|
|
311
|
+
get() {
|
|
312
|
+
const maybeManifest = getManifest(true);
|
|
313
|
+
if (!maybeManifest || !isExpoUpdatesManifest(maybeManifest)) {
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
return maybeManifest;
|
|
317
|
+
},
|
|
318
|
+
enumerable: false
|
|
319
|
+
},
|
|
320
|
+
manifest: {
|
|
321
|
+
get() {
|
|
322
|
+
const maybeManifest = getManifest();
|
|
323
|
+
if (!maybeManifest || !isEmbeddedManifest(maybeManifest)) {
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
return maybeManifest;
|
|
327
|
+
},
|
|
328
|
+
enumerable: true
|
|
329
|
+
},
|
|
330
|
+
manifest2: {
|
|
331
|
+
get() {
|
|
332
|
+
const maybeManifest = getManifest();
|
|
333
|
+
if (!maybeManifest || !isExpoUpdatesManifest(maybeManifest)) {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
return maybeManifest;
|
|
337
|
+
},
|
|
338
|
+
enumerable: true
|
|
339
|
+
},
|
|
340
|
+
expoConfig: {
|
|
341
|
+
get() {
|
|
342
|
+
var _a2, _b;
|
|
343
|
+
const maybeManifest = getManifest(true);
|
|
344
|
+
if (!maybeManifest) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
if (ExpoUpdates && ExpoUpdates.isEmbeddedLaunch) {
|
|
348
|
+
return rawAppConfig;
|
|
349
|
+
}
|
|
350
|
+
if (isExpoUpdatesManifest(maybeManifest)) {
|
|
351
|
+
return (_b = (_a2 = maybeManifest.extra) == null ? void 0 : _a2.expoClient) != null ? _b : null;
|
|
352
|
+
} else if (isEmbeddedManifest(maybeManifest)) {
|
|
353
|
+
return maybeManifest;
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
},
|
|
357
|
+
enumerable: true
|
|
358
|
+
},
|
|
359
|
+
expoGoConfig: {
|
|
360
|
+
get() {
|
|
361
|
+
var _a2, _b;
|
|
362
|
+
const maybeManifest = getManifest(true);
|
|
363
|
+
if (!maybeManifest) {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
if (isExpoUpdatesManifest(maybeManifest)) {
|
|
367
|
+
return (_b = (_a2 = maybeManifest.extra) == null ? void 0 : _a2.expoGo) != null ? _b : null;
|
|
368
|
+
} else if (isEmbeddedManifest(maybeManifest)) {
|
|
369
|
+
return maybeManifest;
|
|
370
|
+
}
|
|
371
|
+
return null;
|
|
372
|
+
},
|
|
373
|
+
enumerable: true
|
|
374
|
+
},
|
|
375
|
+
easConfig: {
|
|
376
|
+
get() {
|
|
377
|
+
var _a2, _b;
|
|
378
|
+
const maybeManifest = getManifest(true);
|
|
379
|
+
if (!maybeManifest) {
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
if (isExpoUpdatesManifest(maybeManifest)) {
|
|
383
|
+
return (_b = (_a2 = maybeManifest.extra) == null ? void 0 : _a2.eas) != null ? _b : null;
|
|
384
|
+
} else if (isEmbeddedManifest(maybeManifest)) {
|
|
385
|
+
return maybeManifest;
|
|
386
|
+
}
|
|
387
|
+
return null;
|
|
388
|
+
},
|
|
389
|
+
enumerable: true
|
|
390
|
+
},
|
|
391
|
+
__rawManifest_TEST: {
|
|
392
|
+
get() {
|
|
393
|
+
return rawManifest;
|
|
394
|
+
},
|
|
395
|
+
set(value) {
|
|
396
|
+
rawManifest = value;
|
|
397
|
+
},
|
|
398
|
+
enumerable: false
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
Constants_default = constants;
|
|
402
|
+
}
|
|
403
|
+
});
|
|
19
404
|
|
|
20
405
|
// src/theme/defaultTheme.ts
|
|
21
406
|
var defaultOnboardingTheme = {
|
|
@@ -94,10 +479,10 @@ var IllustrationProvider = ({
|
|
|
94
479
|
const value = useMemo(() => registry != null ? registry : EMPTY_REGISTRY, [registry]);
|
|
95
480
|
return /* @__PURE__ */ jsx(IllustrationContext.Provider, { value, children });
|
|
96
481
|
};
|
|
97
|
-
var useIllustration = (
|
|
482
|
+
var useIllustration = (name2) => {
|
|
98
483
|
const registry = useContext(IllustrationContext);
|
|
99
|
-
if (!
|
|
100
|
-
return registry[
|
|
484
|
+
if (!name2) return void 0;
|
|
485
|
+
return registry[name2];
|
|
101
486
|
};
|
|
102
487
|
var Glyph = ({ children }) => {
|
|
103
488
|
const t = useOnboardingTheme();
|
|
@@ -169,6 +554,21 @@ var styles = StyleSheet.create({
|
|
|
169
554
|
fontWeight: "700"
|
|
170
555
|
}
|
|
171
556
|
});
|
|
557
|
+
var EMPTY_REGISTRY2 = {};
|
|
558
|
+
var IconContext = createContext(EMPTY_REGISTRY2);
|
|
559
|
+
var IconRegistryProvider = ({
|
|
560
|
+
registry,
|
|
561
|
+
children
|
|
562
|
+
}) => {
|
|
563
|
+
const value = useMemo(() => registry != null ? registry : EMPTY_REGISTRY2, [registry]);
|
|
564
|
+
return /* @__PURE__ */ jsx(IconContext.Provider, { value, children });
|
|
565
|
+
};
|
|
566
|
+
var useHostIcon = (name2) => {
|
|
567
|
+
const registry = useContext(IconContext);
|
|
568
|
+
if (!name2) return void 0;
|
|
569
|
+
if (!Object.prototype.hasOwnProperty.call(registry, name2)) return void 0;
|
|
570
|
+
return registry[name2];
|
|
571
|
+
};
|
|
172
572
|
|
|
173
573
|
// src/theme/typography.ts
|
|
174
574
|
var round = (n) => Math.round(n);
|
|
@@ -183,9 +583,9 @@ var captionStyle = (f) => ({
|
|
|
183
583
|
lineHeight: round(f.baseSize * 0.8125 * f.scale * 1.5)
|
|
184
584
|
});
|
|
185
585
|
var labelStyle = (f) => {
|
|
186
|
-
var
|
|
586
|
+
var _a2;
|
|
187
587
|
return {
|
|
188
|
-
fontFamily: (
|
|
588
|
+
fontFamily: (_a2 = f.medium) != null ? _a2 : f.bold,
|
|
189
589
|
fontSize: round(f.baseSize * f.scale),
|
|
190
590
|
lineHeight: round(f.baseSize * f.scale * 1.4),
|
|
191
591
|
fontWeight: f.medium ? void 0 : "600"
|
|
@@ -198,9 +598,9 @@ var headingStyle = (f) => ({
|
|
|
198
598
|
fontWeight: f.bold ? void 0 : "700"
|
|
199
599
|
});
|
|
200
600
|
var buttonLabelStyle = (f) => {
|
|
201
|
-
var
|
|
601
|
+
var _a2;
|
|
202
602
|
return {
|
|
203
|
-
fontFamily: (
|
|
603
|
+
fontFamily: (_a2 = f.bold) != null ? _a2 : f.medium,
|
|
204
604
|
fontSize: round(f.baseSize * f.scale),
|
|
205
605
|
fontWeight: f.bold ? void 0 : "600"
|
|
206
606
|
};
|
|
@@ -402,7 +802,7 @@ var _AnimatedSparkle = ({ size = 30, color, variant = "spin" }) => {
|
|
|
402
802
|
}
|
|
403
803
|
) });
|
|
404
804
|
};
|
|
405
|
-
var AnimatedSparkle =
|
|
805
|
+
var AnimatedSparkle = React18.memo(_AnimatedSparkle);
|
|
406
806
|
var styles2 = StyleSheet.create({
|
|
407
807
|
box: { alignItems: "center", justifyContent: "center" },
|
|
408
808
|
glyph: {
|
|
@@ -505,7 +905,7 @@ var _LoadingBlock = ({
|
|
|
505
905
|
)
|
|
506
906
|
] });
|
|
507
907
|
};
|
|
508
|
-
var LoadingBlock =
|
|
908
|
+
var LoadingBlock = React18.memo(_LoadingBlock);
|
|
509
909
|
var styles3 = StyleSheet.create({
|
|
510
910
|
center: { flex: 1, alignItems: "center", justifyContent: "center" },
|
|
511
911
|
// Absolutely-positioned label column, pinned just under the centered stage: its top
|
|
@@ -550,7 +950,7 @@ var _LoadingScreen = ({ title, hint }) => {
|
|
|
550
950
|
}
|
|
551
951
|
);
|
|
552
952
|
};
|
|
553
|
-
var LoadingScreen =
|
|
953
|
+
var LoadingScreen = React18.memo(_LoadingScreen);
|
|
554
954
|
var styles4 = StyleSheet.create({
|
|
555
955
|
flex: { flex: 1 }
|
|
556
956
|
});
|
|
@@ -590,7 +990,7 @@ var _StepProgress = ({ step, complete, approxScreens }) => {
|
|
|
590
990
|
}
|
|
591
991
|
) });
|
|
592
992
|
};
|
|
593
|
-
var StepProgress =
|
|
993
|
+
var StepProgress = React18.memo(_StepProgress);
|
|
594
994
|
var styles5 = StyleSheet.create({
|
|
595
995
|
track: { height: 6, width: "100%", overflow: "hidden" },
|
|
596
996
|
fill: { height: 6 }
|
|
@@ -606,31 +1006,31 @@ var _OnboardingScaffold = ({
|
|
|
606
1006
|
children
|
|
607
1007
|
}) => {
|
|
608
1008
|
const t = useOnboardingTheme();
|
|
609
|
-
const
|
|
1009
|
+
const styles18 = useMemo(() => makeStyles(t), [t]);
|
|
610
1010
|
const hit = { top: 12, bottom: 12, left: 12, right: 12 };
|
|
611
1011
|
return /* @__PURE__ */ jsxs(
|
|
612
1012
|
SafeAreaView,
|
|
613
1013
|
{
|
|
614
1014
|
edges: ["top", "bottom"],
|
|
615
|
-
style: [
|
|
1015
|
+
style: [styles18.flex, { backgroundColor: t.colors.background }],
|
|
616
1016
|
children: [
|
|
617
|
-
/* @__PURE__ */ jsxs(View, { style: [
|
|
618
|
-
/* @__PURE__ */ jsx(View, { style:
|
|
619
|
-
onSkip ? /* @__PURE__ */ jsx(TouchableOpacity, { onPress: onSkip, hitSlop: hit, style:
|
|
1017
|
+
/* @__PURE__ */ jsxs(View, { style: [styles18.header, { paddingHorizontal: t.spacing.md, paddingTop: t.spacing.md }], children: [
|
|
1018
|
+
/* @__PURE__ */ jsx(View, { style: styles18.progressWrap, children: /* @__PURE__ */ jsx(StepProgress, { step, complete, approxScreens }) }),
|
|
1019
|
+
onSkip ? /* @__PURE__ */ jsx(TouchableOpacity, { onPress: onSkip, hitSlop: hit, style: styles18.skip, children: /* @__PURE__ */ jsx(Text, { style: [bodyStyle(t.fonts), { color: t.colors.textMuted }], children: skipLabel }) }) : null
|
|
620
1020
|
] }),
|
|
621
1021
|
/* @__PURE__ */ jsx(
|
|
622
1022
|
View,
|
|
623
1023
|
{
|
|
624
|
-
style: [
|
|
1024
|
+
style: [styles18.body, { paddingHorizontal: t.spacing.md, paddingTop: t.spacing.md }],
|
|
625
1025
|
children
|
|
626
1026
|
}
|
|
627
1027
|
),
|
|
628
|
-
onBack ? /* @__PURE__ */ jsx(View, { style: [
|
|
1028
|
+
onBack ? /* @__PURE__ */ jsx(View, { style: [styles18.footer, { paddingHorizontal: t.spacing.md, paddingBottom: t.spacing.sm }], children: /* @__PURE__ */ jsx(TouchableOpacity, { onPress: onBack, hitSlop: hit, children: /* @__PURE__ */ jsx(Text, { style: [bodyStyle(t.fonts), { color: t.colors.textMuted }], children: backLabel }) }) }) : null
|
|
629
1029
|
]
|
|
630
1030
|
}
|
|
631
1031
|
);
|
|
632
1032
|
};
|
|
633
|
-
var OnboardingScaffold =
|
|
1033
|
+
var OnboardingScaffold = React18.memo(_OnboardingScaffold);
|
|
634
1034
|
function makeStyles(t) {
|
|
635
1035
|
return StyleSheet.create({
|
|
636
1036
|
flex: { flex: 1 },
|
|
@@ -731,7 +1131,7 @@ var _Button = ({
|
|
|
731
1131
|
}
|
|
732
1132
|
);
|
|
733
1133
|
};
|
|
734
|
-
var Button =
|
|
1134
|
+
var Button = React18.memo(_Button);
|
|
735
1135
|
var styles6 = StyleSheet.create({
|
|
736
1136
|
base: { alignItems: "center", justifyContent: "center" },
|
|
737
1137
|
fill: { width: "100%" }
|
|
@@ -749,7 +1149,7 @@ var _ErrorBlock = ({
|
|
|
749
1149
|
onRetry ? /* @__PURE__ */ jsx(Button, { title: retryLabel, onPress: onRetry, variant: "outline" }) : null
|
|
750
1150
|
] });
|
|
751
1151
|
};
|
|
752
|
-
var ErrorBlock =
|
|
1152
|
+
var ErrorBlock = React18.memo(_ErrorBlock);
|
|
753
1153
|
var styles7 = StyleSheet.create({
|
|
754
1154
|
center: { flex: 1, alignItems: "center", justifyContent: "center" }
|
|
755
1155
|
});
|
|
@@ -762,10 +1162,10 @@ var _CardLayout = ({
|
|
|
762
1162
|
titleNode
|
|
763
1163
|
}) => {
|
|
764
1164
|
const t = useOnboardingTheme();
|
|
765
|
-
const
|
|
1165
|
+
const styles18 = useMemo(() => makeStyles2(t), [t]);
|
|
766
1166
|
const hasHeader = !!title || !!subtitle || !!titleNode;
|
|
767
|
-
return /* @__PURE__ */ jsxs(KeyboardAvoidingView, { style:
|
|
768
|
-
hasHeader ? /* @__PURE__ */ jsxs(View, { style:
|
|
1167
|
+
return /* @__PURE__ */ jsxs(KeyboardAvoidingView, { style: styles18.fill, behavior: "padding", children: [
|
|
1168
|
+
hasHeader ? /* @__PURE__ */ jsxs(View, { style: styles18.header, children: [
|
|
769
1169
|
titleNode != null ? titleNode : title ? /* @__PURE__ */ jsx(Text, { style: [labelStyle(t.fonts), { color: t.colors.text }], children: title }) : null,
|
|
770
1170
|
subtitle ? /* @__PURE__ */ jsx(
|
|
771
1171
|
Text,
|
|
@@ -781,10 +1181,10 @@ var _CardLayout = ({
|
|
|
781
1181
|
/* @__PURE__ */ jsx(
|
|
782
1182
|
ScrollView,
|
|
783
1183
|
{
|
|
784
|
-
style:
|
|
1184
|
+
style: styles18.fill,
|
|
785
1185
|
contentContainerStyle: [
|
|
786
|
-
|
|
787
|
-
align === "center" &&
|
|
1186
|
+
styles18.scrollContent,
|
|
1187
|
+
align === "center" && styles18.center
|
|
788
1188
|
],
|
|
789
1189
|
keyboardShouldPersistTaps: "handled",
|
|
790
1190
|
keyboardDismissMode: "on-drag",
|
|
@@ -792,10 +1192,10 @@ var _CardLayout = ({
|
|
|
792
1192
|
children
|
|
793
1193
|
}
|
|
794
1194
|
),
|
|
795
|
-
footer ? /* @__PURE__ */ jsx(View, { style:
|
|
1195
|
+
footer ? /* @__PURE__ */ jsx(View, { style: styles18.footer, children: footer }) : null
|
|
796
1196
|
] });
|
|
797
1197
|
};
|
|
798
|
-
var CardLayout =
|
|
1198
|
+
var CardLayout = React18.memo(_CardLayout);
|
|
799
1199
|
function makeStyles2(t) {
|
|
800
1200
|
return StyleSheet.create({
|
|
801
1201
|
fill: { flex: 1 },
|
|
@@ -920,7 +1320,7 @@ var _CompletionView = ({
|
|
|
920
1320
|
}
|
|
921
1321
|
);
|
|
922
1322
|
};
|
|
923
|
-
var CompletionView =
|
|
1323
|
+
var CompletionView = React18.memo(_CompletionView);
|
|
924
1324
|
var styles8 = StyleSheet.create({
|
|
925
1325
|
center: { width: "100%", alignItems: "center", justifyContent: "center" },
|
|
926
1326
|
badgeStage: {
|
|
@@ -937,6 +1337,8 @@ var easeWire3 = Easing.bezier(...WIRE_BEZIER);
|
|
|
937
1337
|
var _CardHandoff = ({
|
|
938
1338
|
transitionKey,
|
|
939
1339
|
variant = "slide",
|
|
1340
|
+
direction = "forward",
|
|
1341
|
+
layout = "fill",
|
|
940
1342
|
children
|
|
941
1343
|
}) => {
|
|
942
1344
|
const reduced = useReducedMotion();
|
|
@@ -947,7 +1349,7 @@ var _CardHandoff = ({
|
|
|
947
1349
|
const running = useRef({});
|
|
948
1350
|
const mounted = useRef(false);
|
|
949
1351
|
useEffect(() => {
|
|
950
|
-
var
|
|
1352
|
+
var _a2, _b;
|
|
951
1353
|
const last = prev.current;
|
|
952
1354
|
prev.current = { key: transitionKey, node: children, variant };
|
|
953
1355
|
if (!mounted.current) {
|
|
@@ -956,7 +1358,7 @@ var _CardHandoff = ({
|
|
|
956
1358
|
return;
|
|
957
1359
|
}
|
|
958
1360
|
if (last.key === transitionKey) return;
|
|
959
|
-
(
|
|
1361
|
+
(_a2 = running.current.enter) == null ? void 0 : _a2.stop();
|
|
960
1362
|
(_b = running.current.exit) == null ? void 0 : _b.stop();
|
|
961
1363
|
setLeaving(last);
|
|
962
1364
|
enterT.setValue(0);
|
|
@@ -981,15 +1383,15 @@ var _CardHandoff = ({
|
|
|
981
1383
|
});
|
|
982
1384
|
useEffect(
|
|
983
1385
|
() => () => {
|
|
984
|
-
var
|
|
985
|
-
(
|
|
1386
|
+
var _a2, _b;
|
|
1387
|
+
(_a2 = running.current.enter) == null ? void 0 : _a2.stop();
|
|
986
1388
|
(_b = running.current.exit) == null ? void 0 : _b.stop();
|
|
987
1389
|
},
|
|
988
1390
|
[]
|
|
989
1391
|
);
|
|
990
1392
|
const enterStyle = {
|
|
991
1393
|
opacity: enterT,
|
|
992
|
-
transform: transformFor(variant, enterT, reduced, "enter")
|
|
1394
|
+
transform: transformFor(variant, enterT, reduced, "enter", direction)
|
|
993
1395
|
};
|
|
994
1396
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
995
1397
|
leaving ? /* @__PURE__ */ jsx(
|
|
@@ -1000,13 +1402,14 @@ var _CardHandoff = ({
|
|
|
1000
1402
|
StyleSheet.absoluteFill,
|
|
1001
1403
|
{
|
|
1002
1404
|
opacity: exitT.interpolate({ inputRange: [0, 1], outputRange: [1, 0] }),
|
|
1003
|
-
|
|
1405
|
+
// The CURRENT direction drives BOTH layers: one transition, one geography.
|
|
1406
|
+
transform: transformFor(leaving.variant, exitT, reduced, "exit", direction)
|
|
1004
1407
|
}
|
|
1005
1408
|
],
|
|
1006
1409
|
children: leaving.node
|
|
1007
1410
|
}
|
|
1008
1411
|
) : null,
|
|
1009
|
-
/* @__PURE__ */ jsx(Animated.View, { style: [styles9.fill, enterStyle], children }, variant)
|
|
1412
|
+
/* @__PURE__ */ jsx(Animated.View, { style: [layout === "fill" ? styles9.fill : null, enterStyle], children }, variant)
|
|
1010
1413
|
] });
|
|
1011
1414
|
};
|
|
1012
1415
|
var startEnter = (value, variant, reduced, delay, onDone) => {
|
|
@@ -1032,21 +1435,22 @@ var startEnter = (value, variant, reduced, delay, onDone) => {
|
|
|
1032
1435
|
});
|
|
1033
1436
|
return anim;
|
|
1034
1437
|
};
|
|
1035
|
-
var transformFor = (variant, t, reduced,
|
|
1438
|
+
var transformFor = (variant, t, reduced, layer, travel) => {
|
|
1036
1439
|
if (reduced || variant === "fade") return [];
|
|
1037
|
-
if (variant === "spring" &&
|
|
1440
|
+
if (variant === "spring" && layer === "enter") {
|
|
1038
1441
|
return [{ scale: t.interpolate({ inputRange: [0, 1], outputRange: [CARD_ENTER_SCALE_FROM, 1] }) }];
|
|
1039
1442
|
}
|
|
1443
|
+
const slide = travel === "forward" ? CARD_SLIDE_PX : -CARD_SLIDE_PX;
|
|
1040
1444
|
return [
|
|
1041
1445
|
{
|
|
1042
1446
|
translateX: t.interpolate({
|
|
1043
1447
|
inputRange: [0, 1],
|
|
1044
|
-
outputRange:
|
|
1448
|
+
outputRange: layer === "enter" ? [slide, 0] : [0, -slide]
|
|
1045
1449
|
})
|
|
1046
1450
|
}
|
|
1047
1451
|
];
|
|
1048
1452
|
};
|
|
1049
|
-
var CardHandoff =
|
|
1453
|
+
var CardHandoff = React18.memo(_CardHandoff);
|
|
1050
1454
|
var styles9 = StyleSheet.create({
|
|
1051
1455
|
fill: { flex: 1 }
|
|
1052
1456
|
});
|
|
@@ -1061,13 +1465,13 @@ var tryParse = (s) => {
|
|
|
1061
1465
|
}
|
|
1062
1466
|
};
|
|
1063
1467
|
var deriveAnswers = (messages) => {
|
|
1064
|
-
var
|
|
1468
|
+
var _a2, _b, _c;
|
|
1065
1469
|
const out = {};
|
|
1066
1470
|
for (let i = 0; i < messages.length; i++) {
|
|
1067
1471
|
const m = messages[i];
|
|
1068
1472
|
const r = m == null ? void 0 : m.response;
|
|
1069
1473
|
if (!m || m.role !== "assistant" || !r || r.action !== "render") continue;
|
|
1070
|
-
const props = (
|
|
1474
|
+
const props = (_a2 = r.props) != null ? _a2 : {};
|
|
1071
1475
|
const progress = props.progress;
|
|
1072
1476
|
const questionText = (_c = (_b = props.title) != null ? _b : props.label) != null ? _c : props.question;
|
|
1073
1477
|
const key = (progress == null ? void 0 : progress.key) || questionText;
|
|
@@ -1081,9 +1485,9 @@ var deriveAnswers = (messages) => {
|
|
|
1081
1485
|
|
|
1082
1486
|
// src/utils/readProgress.ts
|
|
1083
1487
|
var readProgress = (response) => {
|
|
1084
|
-
var
|
|
1488
|
+
var _a2;
|
|
1085
1489
|
if (!response || response.action !== "render") return {};
|
|
1086
|
-
const props = (
|
|
1490
|
+
const props = (_a2 = response.props) != null ? _a2 : {};
|
|
1087
1491
|
const raw = props.progress;
|
|
1088
1492
|
if (!raw || typeof raw !== "object") return {};
|
|
1089
1493
|
const p = raw;
|
|
@@ -1169,7 +1573,7 @@ var OnboardingFlow = ({
|
|
|
1169
1573
|
resumed = false,
|
|
1170
1574
|
clientContext
|
|
1171
1575
|
}) => {
|
|
1172
|
-
var
|
|
1576
|
+
var _a2, _b, _c, _d, _e, _f;
|
|
1173
1577
|
const { messages, error, isLoading, sendMessage, reset } = useWireAIThread();
|
|
1174
1578
|
const makeActions = useWireAIAction(sendMessage);
|
|
1175
1579
|
const c = useMemo(() => ({ ...DEFAULT_COPY, ...copy }), [copy]);
|
|
@@ -1200,25 +1604,25 @@ var OnboardingFlow = ({
|
|
|
1200
1604
|
const [validating, setValidating] = useState(false);
|
|
1201
1605
|
const lastCard = useMemo(
|
|
1202
1606
|
() => [...messages].reverse().find((m) => {
|
|
1203
|
-
var
|
|
1204
|
-
return m.role === "assistant" && ((
|
|
1607
|
+
var _a3;
|
|
1608
|
+
return m.role === "assistant" && ((_a3 = m.response) == null ? void 0 : _a3.action) === "render";
|
|
1205
1609
|
}),
|
|
1206
1610
|
[messages]
|
|
1207
1611
|
);
|
|
1208
1612
|
const renderedCount = useMemo(
|
|
1209
1613
|
() => messages.filter((m) => {
|
|
1210
|
-
var
|
|
1211
|
-
return m.role === "assistant" && ((
|
|
1614
|
+
var _a3;
|
|
1615
|
+
return m.role === "assistant" && ((_a3 = m.response) == null ? void 0 : _a3.action) === "render";
|
|
1212
1616
|
}).length,
|
|
1213
1617
|
[messages]
|
|
1214
1618
|
);
|
|
1215
1619
|
const progress = useMemo(() => readProgress(lastCard == null ? void 0 : lastCard.response), [lastCard]);
|
|
1216
1620
|
useEffect(() => {
|
|
1217
|
-
var
|
|
1621
|
+
var _a3;
|
|
1218
1622
|
if (started.current) return;
|
|
1219
1623
|
started.current = true;
|
|
1220
1624
|
sendMessage(resumed ? SKIP_ONE_SENTINEL : startMessage);
|
|
1221
|
-
(
|
|
1625
|
+
(_a3 = onEventRef.current) == null ? void 0 : _a3.call(
|
|
1222
1626
|
onEventRef,
|
|
1223
1627
|
resumed ? { type: "resumed", contextId: sessionId } : { type: "started", contextId: sessionId }
|
|
1224
1628
|
);
|
|
@@ -1229,10 +1633,10 @@ var OnboardingFlow = ({
|
|
|
1229
1633
|
return () => clearTimeout(timer);
|
|
1230
1634
|
}, [lastCard, startTimeoutMs]);
|
|
1231
1635
|
useEffect(() => {
|
|
1232
|
-
var
|
|
1636
|
+
var _a3, _b2, _c2, _d2;
|
|
1233
1637
|
setValidationError(void 0);
|
|
1234
1638
|
if (!(lastCard == null ? void 0 : lastCard.id)) return;
|
|
1235
|
-
const step2 = (
|
|
1639
|
+
const step2 = (_a3 = progress.step) != null ? _a3 : renderedCount;
|
|
1236
1640
|
lastScreenIndexRef.current = Math.max(0, step2 - 1);
|
|
1237
1641
|
(_c2 = onEventRef.current) == null ? void 0 : _c2.call(onEventRef, {
|
|
1238
1642
|
type: "turn",
|
|
@@ -1248,13 +1652,13 @@ var OnboardingFlow = ({
|
|
|
1248
1652
|
}, [lastCard == null ? void 0 : lastCard.id]);
|
|
1249
1653
|
useEffect(() => {
|
|
1250
1654
|
return () => {
|
|
1251
|
-
var
|
|
1655
|
+
var _a3, _b2, _c2;
|
|
1252
1656
|
if (finished.current || degradedRef.current) return;
|
|
1253
1657
|
reportClientEvent(reportTargetRef.current, {
|
|
1254
1658
|
event_type: "dropped",
|
|
1255
1659
|
session_id: sessionIdRef.current,
|
|
1256
1660
|
screen_index: lastScreenIndexRef.current >= 0 ? lastScreenIndexRef.current : void 0,
|
|
1257
|
-
device: (
|
|
1661
|
+
device: (_a3 = clientContextRef.current) == null ? void 0 : _a3.device,
|
|
1258
1662
|
user_context: (_b2 = clientContextRef.current) == null ? void 0 : _b2.userContext,
|
|
1259
1663
|
user_id: (_c2 = clientContextRef.current) == null ? void 0 : _c2.userId
|
|
1260
1664
|
});
|
|
@@ -1267,12 +1671,12 @@ var OnboardingFlow = ({
|
|
|
1267
1671
|
reset();
|
|
1268
1672
|
}, [reset]);
|
|
1269
1673
|
useEffect(() => {
|
|
1270
|
-
var
|
|
1674
|
+
var _a3, _b2, _c2, _d2, _e2, _f2, _g;
|
|
1271
1675
|
if (errored.current) return;
|
|
1272
1676
|
if (!error && !timedOut) return;
|
|
1273
1677
|
errored.current = true;
|
|
1274
1678
|
const reason = error ? "backend" : "timeout";
|
|
1275
|
-
(
|
|
1679
|
+
(_a3 = onEventRef.current) == null ? void 0 : _a3.call(onEventRef, { type: "error", reason });
|
|
1276
1680
|
attempts.current += 1;
|
|
1277
1681
|
if (attempts.current <= maxRetries) {
|
|
1278
1682
|
(_b2 = onEventRef.current) == null ? void 0 : _b2.call(onEventRef, { type: "retry", reason, attempt: attempts.current });
|
|
@@ -1325,26 +1729,26 @@ var OnboardingFlow = ({
|
|
|
1325
1729
|
}, []);
|
|
1326
1730
|
const wrappedActions = useCallback(
|
|
1327
1731
|
(messageId) => {
|
|
1328
|
-
var
|
|
1732
|
+
var _a3;
|
|
1329
1733
|
const base = makeActions(messageId);
|
|
1330
1734
|
const key = progress.key;
|
|
1331
|
-
const validator = key ? (
|
|
1735
|
+
const validator = key ? (_a3 = validatorsRef.current) == null ? void 0 : _a3[key] : void 0;
|
|
1332
1736
|
if (!validator) return base;
|
|
1333
1737
|
const out = { ...base };
|
|
1334
|
-
for (const
|
|
1335
|
-
const original = base[
|
|
1738
|
+
for (const name2 of ANSWER_CALLBACKS) {
|
|
1739
|
+
const original = base[name2];
|
|
1336
1740
|
if (!original) continue;
|
|
1337
|
-
out[
|
|
1741
|
+
out[name2] = (...args) => {
|
|
1338
1742
|
const value = args[0];
|
|
1339
1743
|
if (typeof value !== "string") return original(...args);
|
|
1340
1744
|
setValidating(true);
|
|
1341
1745
|
validator(value).then((res) => {
|
|
1342
|
-
var
|
|
1746
|
+
var _a4;
|
|
1343
1747
|
if (res.ok) {
|
|
1344
1748
|
setValidationError(void 0);
|
|
1345
1749
|
original(...args);
|
|
1346
1750
|
} else {
|
|
1347
|
-
setValidationError((
|
|
1751
|
+
setValidationError((_a4 = res.error) != null ? _a4 : "That value isn't available.");
|
|
1348
1752
|
}
|
|
1349
1753
|
}).catch(() => {
|
|
1350
1754
|
original(...args);
|
|
@@ -1375,7 +1779,7 @@ var OnboardingFlow = ({
|
|
|
1375
1779
|
if (!lastCard || !response) {
|
|
1376
1780
|
return /* @__PURE__ */ jsx(LoadingScreen, { title: c.startingTitle, hint: c.startingHint });
|
|
1377
1781
|
}
|
|
1378
|
-
const step = (
|
|
1782
|
+
const step = (_a2 = progress.step) != null ? _a2 : renderedCount;
|
|
1379
1783
|
const total = (_b = progress.total) != null ? _b : approxScreens;
|
|
1380
1784
|
const isTerminal = response.action === "render" && response.component === "StatusCard";
|
|
1381
1785
|
if (isTerminal) {
|
|
@@ -1562,7 +1966,7 @@ var _ChipItem = ({ chip, isSelected, multiSelect, onToggle }) => {
|
|
|
1562
1966
|
}
|
|
1563
1967
|
);
|
|
1564
1968
|
};
|
|
1565
|
-
var ChipItem =
|
|
1969
|
+
var ChipItem = React18.memo(_ChipItem);
|
|
1566
1970
|
var _ChipSelectCard = ({
|
|
1567
1971
|
title,
|
|
1568
1972
|
chips,
|
|
@@ -1627,8 +2031,8 @@ var _ChipSelectCard = ({
|
|
|
1627
2031
|
};
|
|
1628
2032
|
var ChipSelectCard = {
|
|
1629
2033
|
name: "ChipSelectCard",
|
|
1630
|
-
description: "Use for compact short labels: seasons, activities, travel styles, moods, categories. Ideal for 4\u201312 single-word or two-word options. Use SelectionCard instead when options need descriptions.",
|
|
1631
|
-
component:
|
|
2034
|
+
description: "Use for compact short labels: seasons, activities, travel styles, moods, categories. Ideal for 4\u201312 single-word or two-word options. Use SelectionCard instead when options need descriptions; use CardGridSelectCard for a smaller set (2\u20136) of visual choices that each deserve an icon.",
|
|
2035
|
+
component: React18.memo(_ChipSelectCard),
|
|
1632
2036
|
propsSchema: schema,
|
|
1633
2037
|
defaultProps: { multiSelect: true, submitLabel: "Continue" }
|
|
1634
2038
|
};
|
|
@@ -1664,7 +2068,7 @@ var _TextInputCard = ({
|
|
|
1664
2068
|
lines = 6
|
|
1665
2069
|
}) => {
|
|
1666
2070
|
const t = useOnboardingTheme();
|
|
1667
|
-
const
|
|
2071
|
+
const styles18 = useMemo(() => makeStyles3(t), [t]);
|
|
1668
2072
|
const { height: screenHeight } = useWindowDimensions();
|
|
1669
2073
|
const [value, setValue] = useState("");
|
|
1670
2074
|
const [submitted, setSubmitted] = useState(false);
|
|
@@ -1691,7 +2095,7 @@ var _TextInputCard = ({
|
|
|
1691
2095
|
disabled: !value.trim() || locked
|
|
1692
2096
|
}
|
|
1693
2097
|
),
|
|
1694
|
-
children: /* @__PURE__ */ jsxs(View, { style:
|
|
2098
|
+
children: /* @__PURE__ */ jsxs(View, { style: styles18.row, children: [
|
|
1695
2099
|
/* @__PURE__ */ jsx(
|
|
1696
2100
|
TextInput,
|
|
1697
2101
|
{
|
|
@@ -1705,7 +2109,7 @@ var _TextInputCard = ({
|
|
|
1705
2109
|
textAlignVertical: multiline ? "top" : "center",
|
|
1706
2110
|
style: [
|
|
1707
2111
|
bodyStyle(t.fonts),
|
|
1708
|
-
|
|
2112
|
+
styles18.input,
|
|
1709
2113
|
{
|
|
1710
2114
|
color: t.colors.text,
|
|
1711
2115
|
backgroundColor: t.colors.surface,
|
|
@@ -1725,7 +2129,7 @@ var _TextInputCard = ({
|
|
|
1725
2129
|
var TextInputCard = {
|
|
1726
2130
|
name: "TextInputCard",
|
|
1727
2131
|
description: "Use when the user needs to type a free-text answer: an open-ended goal, notes, feedback, a name, a destination, a search query. Multi-line by default (great for open-ended goals); set multiline:false for a short single-line field like a name. Use NumberStepperCard for numeric ranges with known bounds.",
|
|
1728
|
-
component:
|
|
2132
|
+
component: React18.memo(_TextInputCard),
|
|
1729
2133
|
propsSchema: schema2,
|
|
1730
2134
|
defaultProps: { submitLabel: "Submit", multiline: true, lines: 6 }
|
|
1731
2135
|
};
|
|
@@ -1735,17 +2139,201 @@ function makeStyles3(t) {
|
|
|
1735
2139
|
input: { borderWidth: 1 }
|
|
1736
2140
|
});
|
|
1737
2141
|
}
|
|
1738
|
-
|
|
2142
|
+
|
|
2143
|
+
// src/icons/expoIcons.ts
|
|
2144
|
+
var runtimeRequire = (moduleName) => {
|
|
2145
|
+
if (moduleName !== "@expo/vector-icons") return void 0;
|
|
2146
|
+
if (typeof __require !== "function") return void 0;
|
|
2147
|
+
try {
|
|
2148
|
+
return __require("@expo/vector-icons");
|
|
2149
|
+
} catch {
|
|
2150
|
+
return void 0;
|
|
2151
|
+
}
|
|
2152
|
+
};
|
|
2153
|
+
var interop = (mod) => {
|
|
2154
|
+
if (!mod || typeof mod !== "object") return void 0;
|
|
2155
|
+
const def = mod.default;
|
|
2156
|
+
const ns = mod;
|
|
2157
|
+
if (ns.MaterialCommunityIcons || ns.Ionicons) return ns;
|
|
2158
|
+
if (def && typeof def === "object") return def;
|
|
2159
|
+
return ns;
|
|
2160
|
+
};
|
|
2161
|
+
var asComponent = (value) => {
|
|
2162
|
+
if (typeof value === "function") return value;
|
|
2163
|
+
if (value && typeof value === "object" && "$$typeof" in value) {
|
|
2164
|
+
return value;
|
|
2165
|
+
}
|
|
2166
|
+
return void 0;
|
|
2167
|
+
};
|
|
2168
|
+
var cached;
|
|
2169
|
+
var resolveIconFamily = (family, requireModule = runtimeRequire) => {
|
|
2170
|
+
try {
|
|
2171
|
+
if (cached === void 0 || requireModule !== runtimeRequire) {
|
|
2172
|
+
const resolved = interop(requireModule("@expo/vector-icons"));
|
|
2173
|
+
if (requireModule === runtimeRequire) cached = resolved != null ? resolved : null;
|
|
2174
|
+
if (!resolved) return void 0;
|
|
2175
|
+
return asComponent(resolved[family]);
|
|
2176
|
+
}
|
|
2177
|
+
if (cached === null) return void 0;
|
|
2178
|
+
return asComponent(cached[family]);
|
|
2179
|
+
} catch {
|
|
2180
|
+
return void 0;
|
|
2181
|
+
}
|
|
2182
|
+
};
|
|
2183
|
+
|
|
2184
|
+
// src/icons/vocabulary.ts
|
|
2185
|
+
var WIRE_ICON_GLYPHS = {
|
|
2186
|
+
// ── Acquisition channels ("where did you hear about us?") ──────────────────
|
|
2187
|
+
instagram: { family: "MaterialCommunityIcons", name: "instagram" },
|
|
2188
|
+
tiktok: { family: "Ionicons", name: "logo-tiktok" },
|
|
2189
|
+
youtube: { family: "MaterialCommunityIcons", name: "youtube" },
|
|
2190
|
+
facebook: { family: "MaterialCommunityIcons", name: "facebook" },
|
|
2191
|
+
twitter: { family: "MaterialCommunityIcons", name: "twitter" },
|
|
2192
|
+
reddit: { family: "MaterialCommunityIcons", name: "reddit" },
|
|
2193
|
+
linkedin: { family: "MaterialCommunityIcons", name: "linkedin" },
|
|
2194
|
+
discord: { family: "Ionicons", name: "logo-discord" },
|
|
2195
|
+
whatsapp: { family: "MaterialCommunityIcons", name: "whatsapp" },
|
|
2196
|
+
twitch: { family: "MaterialCommunityIcons", name: "twitch" },
|
|
2197
|
+
snapchat: { family: "MaterialCommunityIcons", name: "snapchat" },
|
|
2198
|
+
pinterest: { family: "MaterialCommunityIcons", name: "pinterest" },
|
|
2199
|
+
google: { family: "MaterialCommunityIcons", name: "google" },
|
|
2200
|
+
search: { family: "MaterialCommunityIcons", name: "magnify" },
|
|
2201
|
+
friend: { family: "MaterialCommunityIcons", name: "account-heart" },
|
|
2202
|
+
podcast: { family: "MaterialCommunityIcons", name: "podcast" },
|
|
2203
|
+
blog: { family: "MaterialCommunityIcons", name: "post" },
|
|
2204
|
+
newsletter: { family: "MaterialCommunityIcons", name: "email-outline" },
|
|
2205
|
+
news: { family: "MaterialCommunityIcons", name: "newspaper" },
|
|
2206
|
+
"app-store": { family: "MaterialCommunityIcons", name: "apple" },
|
|
2207
|
+
ad: { family: "MaterialCommunityIcons", name: "bullhorn" },
|
|
2208
|
+
// ── Intent / occasion ("what brings you here?") ────────────────────────────
|
|
2209
|
+
wedding: { family: "MaterialCommunityIcons", name: "ring" },
|
|
2210
|
+
birthday: { family: "MaterialCommunityIcons", name: "cake-variant" },
|
|
2211
|
+
baby: { family: "MaterialCommunityIcons", name: "baby-carriage" },
|
|
2212
|
+
travel: { family: "MaterialCommunityIcons", name: "airplane" },
|
|
2213
|
+
work: { family: "MaterialCommunityIcons", name: "briefcase" },
|
|
2214
|
+
celebration: { family: "MaterialCommunityIcons", name: "party-popper" },
|
|
2215
|
+
store: { family: "MaterialCommunityIcons", name: "storefront" },
|
|
2216
|
+
school: { family: "MaterialCommunityIcons", name: "school" },
|
|
2217
|
+
team: { family: "MaterialCommunityIcons", name: "account-multiple" },
|
|
2218
|
+
growth: { family: "MaterialCommunityIcons", name: "trending-up" },
|
|
2219
|
+
// ── General purpose ────────────────────────────────────────────────────────
|
|
2220
|
+
sparkle: { family: "MaterialCommunityIcons", name: "star-four-points" },
|
|
2221
|
+
heart: { family: "MaterialCommunityIcons", name: "heart" },
|
|
2222
|
+
star: { family: "MaterialCommunityIcons", name: "star" },
|
|
2223
|
+
fire: { family: "MaterialCommunityIcons", name: "fire" },
|
|
2224
|
+
target: { family: "MaterialCommunityIcons", name: "target" },
|
|
2225
|
+
trophy: { family: "MaterialCommunityIcons", name: "trophy" },
|
|
2226
|
+
rocket: { family: "MaterialCommunityIcons", name: "rocket-launch" },
|
|
2227
|
+
clock: { family: "MaterialCommunityIcons", name: "clock-outline" },
|
|
2228
|
+
calendar: { family: "MaterialCommunityIcons", name: "calendar-star" },
|
|
2229
|
+
camera: { family: "MaterialCommunityIcons", name: "camera" },
|
|
2230
|
+
image: { family: "MaterialCommunityIcons", name: "image" },
|
|
2231
|
+
video: { family: "MaterialCommunityIcons", name: "video" },
|
|
2232
|
+
mic: { family: "MaterialCommunityIcons", name: "microphone" },
|
|
2233
|
+
music: { family: "MaterialCommunityIcons", name: "music" },
|
|
2234
|
+
book: { family: "MaterialCommunityIcons", name: "book-open-variant" },
|
|
2235
|
+
food: { family: "MaterialCommunityIcons", name: "silverware-fork-knife" },
|
|
2236
|
+
coffee: { family: "MaterialCommunityIcons", name: "coffee" },
|
|
2237
|
+
fitness: { family: "MaterialCommunityIcons", name: "dumbbell" },
|
|
2238
|
+
health: { family: "MaterialCommunityIcons", name: "heart-pulse" },
|
|
2239
|
+
meditation: { family: "MaterialCommunityIcons", name: "meditation" },
|
|
2240
|
+
sleep: { family: "MaterialCommunityIcons", name: "sleep" },
|
|
2241
|
+
brain: { family: "MaterialCommunityIcons", name: "brain" },
|
|
2242
|
+
idea: { family: "MaterialCommunityIcons", name: "lightbulb-on" },
|
|
2243
|
+
money: { family: "MaterialCommunityIcons", name: "cash" },
|
|
2244
|
+
shopping: { family: "MaterialCommunityIcons", name: "cart" },
|
|
2245
|
+
gift: { family: "MaterialCommunityIcons", name: "gift" },
|
|
2246
|
+
home: { family: "MaterialCommunityIcons", name: "home" },
|
|
2247
|
+
car: { family: "MaterialCommunityIcons", name: "car" },
|
|
2248
|
+
pet: { family: "MaterialCommunityIcons", name: "paw" },
|
|
2249
|
+
plant: { family: "MaterialCommunityIcons", name: "sprout" },
|
|
2250
|
+
sun: { family: "MaterialCommunityIcons", name: "white-balance-sunny" },
|
|
2251
|
+
moon: { family: "MaterialCommunityIcons", name: "weather-night" },
|
|
2252
|
+
globe: { family: "MaterialCommunityIcons", name: "earth" },
|
|
2253
|
+
"map-pin": { family: "MaterialCommunityIcons", name: "map-marker" },
|
|
2254
|
+
compass: { family: "MaterialCommunityIcons", name: "compass" },
|
|
2255
|
+
flag: { family: "MaterialCommunityIcons", name: "flag" },
|
|
2256
|
+
bookmark: { family: "MaterialCommunityIcons", name: "bookmark" },
|
|
2257
|
+
bell: { family: "MaterialCommunityIcons", name: "bell" },
|
|
2258
|
+
mail: { family: "MaterialCommunityIcons", name: "email" },
|
|
2259
|
+
phone: { family: "MaterialCommunityIcons", name: "phone" },
|
|
2260
|
+
chat: { family: "MaterialCommunityIcons", name: "chat" },
|
|
2261
|
+
user: { family: "MaterialCommunityIcons", name: "account" },
|
|
2262
|
+
users: { family: "MaterialCommunityIcons", name: "account-group" },
|
|
2263
|
+
settings: { family: "MaterialCommunityIcons", name: "cog" },
|
|
2264
|
+
tools: { family: "MaterialCommunityIcons", name: "tools" },
|
|
2265
|
+
puzzle: { family: "MaterialCommunityIcons", name: "puzzle" },
|
|
2266
|
+
chart: { family: "MaterialCommunityIcons", name: "chart-line" },
|
|
2267
|
+
shield: { family: "MaterialCommunityIcons", name: "shield-check" },
|
|
2268
|
+
lock: { family: "MaterialCommunityIcons", name: "lock" },
|
|
2269
|
+
cloud: { family: "MaterialCommunityIcons", name: "cloud" },
|
|
2270
|
+
pencil: { family: "MaterialCommunityIcons", name: "pencil" },
|
|
2271
|
+
check: { family: "MaterialCommunityIcons", name: "check-circle" },
|
|
2272
|
+
plus: { family: "MaterialCommunityIcons", name: "plus-circle" },
|
|
2273
|
+
question: { family: "MaterialCommunityIcons", name: "help-circle" },
|
|
2274
|
+
other: { family: "MaterialCommunityIcons", name: "dots-horizontal-circle" }
|
|
2275
|
+
};
|
|
2276
|
+
var WIRE_ICON_NAMES = Object.keys(WIRE_ICON_GLYPHS).sort();
|
|
2277
|
+
var lookupIconGlyph = (name2) => {
|
|
2278
|
+
if (!name2) return void 0;
|
|
2279
|
+
if (!Object.prototype.hasOwnProperty.call(WIRE_ICON_GLYPHS, name2)) return void 0;
|
|
2280
|
+
return WIRE_ICON_GLYPHS[name2];
|
|
2281
|
+
};
|
|
2282
|
+
var _WireIcon = ({ name: name2, size = 20, color, requireModule }) => {
|
|
2283
|
+
const hostIcon = useHostIcon(name2);
|
|
2284
|
+
if (hostIcon) {
|
|
2285
|
+
return /* @__PURE__ */ jsx(
|
|
2286
|
+
View,
|
|
2287
|
+
{
|
|
2288
|
+
style: styles11.decorative,
|
|
2289
|
+
accessible: false,
|
|
2290
|
+
importantForAccessibility: "no-hide-descendants",
|
|
2291
|
+
children: hostIcon
|
|
2292
|
+
}
|
|
2293
|
+
);
|
|
2294
|
+
}
|
|
2295
|
+
const glyph = lookupIconGlyph(name2);
|
|
2296
|
+
if (!glyph) return null;
|
|
2297
|
+
const Family = resolveIconFamily(glyph.family, requireModule);
|
|
2298
|
+
if (!Family) return null;
|
|
2299
|
+
return /* @__PURE__ */ jsx(
|
|
2300
|
+
View,
|
|
2301
|
+
{
|
|
2302
|
+
style: styles11.decorative,
|
|
2303
|
+
accessible: false,
|
|
2304
|
+
importantForAccessibility: "no-hide-descendants",
|
|
2305
|
+
children: /* @__PURE__ */ jsx(
|
|
2306
|
+
Family,
|
|
2307
|
+
{
|
|
2308
|
+
name: glyph.name,
|
|
2309
|
+
size,
|
|
2310
|
+
color,
|
|
2311
|
+
allowFontScaling: false
|
|
2312
|
+
}
|
|
2313
|
+
)
|
|
2314
|
+
}
|
|
2315
|
+
);
|
|
2316
|
+
};
|
|
2317
|
+
var WireIcon = React18.memo(_WireIcon);
|
|
2318
|
+
WireIcon.displayName = "WireIcon";
|
|
2319
|
+
var styles11 = StyleSheet.create({
|
|
2320
|
+
// No size/margin of its own: the glyph decides its footprint, so an absent icon and a
|
|
2321
|
+
// present one differ by exactly the glyph — never by a wrapper.
|
|
2322
|
+
decorative: {}
|
|
2323
|
+
});
|
|
2324
|
+
var ICON_FIELD_DESCRIPTION = `Optional icon for this option, making the choice scannable at a glance. Pick the ONE name whose meaning matches the option (e.g. 'instagram' for an Instagram answer, 'friend' for 'A friend told me', 'wedding' for a wedding). Omit it when no name fits \u2014 a wrong icon is worse than none. Allowed values: ${WIRE_ICON_NAMES.join(", ")}.`;
|
|
1739
2325
|
var optionObjectSchema = z.object({
|
|
1740
2326
|
value: z.string().describe("Option value"),
|
|
1741
|
-
label: z.string().describe("Option display label")
|
|
2327
|
+
label: z.string().describe("Option display label"),
|
|
2328
|
+
icon: z.string().optional().describe(ICON_FIELD_DESCRIPTION)
|
|
1742
2329
|
});
|
|
2330
|
+
var coerceOptions = (arr) => Array.isArray(arr) ? arr.map((item) => typeof item === "string" ? { value: item, label: item } : item) : arr;
|
|
2331
|
+
var optionsField = (description) => z.preprocess(coerceOptions, z.array(optionObjectSchema).min(1)).describe(description);
|
|
2332
|
+
var normalizeOptions = (options) => options.map((opt) => typeof opt === "string" ? { value: opt, label: opt } : opt);
|
|
2333
|
+
var easeWire5 = Easing.bezier(...WIRE_BEZIER);
|
|
1743
2334
|
var schema3 = z.object({
|
|
1744
2335
|
title: z.string().describe("Question or prompt for the user"),
|
|
1745
|
-
options:
|
|
1746
|
-
(arr) => Array.isArray(arr) ? arr.map((item) => typeof item === "string" ? { value: item, label: item } : item) : arr,
|
|
1747
|
-
z.array(optionObjectSchema).min(1)
|
|
1748
|
-
).describe("List of choices"),
|
|
2336
|
+
options: optionsField("List of choices"),
|
|
1749
2337
|
submitLabel: z.string().optional().describe("Submit button label, default: Continue"),
|
|
1750
2338
|
multiSelect: z.boolean().optional().describe("Allow multiple selections")
|
|
1751
2339
|
});
|
|
@@ -1813,7 +2401,7 @@ var _OptionRow = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
|
1813
2401
|
Animated.View,
|
|
1814
2402
|
{
|
|
1815
2403
|
style: [
|
|
1816
|
-
|
|
2404
|
+
styles12.option,
|
|
1817
2405
|
{
|
|
1818
2406
|
padding: t.spacing.md,
|
|
1819
2407
|
borderRadius: t.radius.md,
|
|
@@ -1830,7 +2418,7 @@ var _OptionRow = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
|
1830
2418
|
pointerEvents: "none",
|
|
1831
2419
|
style: [
|
|
1832
2420
|
StyleSheet.absoluteFill,
|
|
1833
|
-
|
|
2421
|
+
styles12.selectedOverlay,
|
|
1834
2422
|
{
|
|
1835
2423
|
borderRadius: t.radius.md,
|
|
1836
2424
|
borderColor: t.colors.primary,
|
|
@@ -1844,7 +2432,7 @@ var _OptionRow = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
|
1844
2432
|
View,
|
|
1845
2433
|
{
|
|
1846
2434
|
style: [
|
|
1847
|
-
|
|
2435
|
+
styles12.indicator,
|
|
1848
2436
|
{ borderRadius: t.radius.full },
|
|
1849
2437
|
isSelected ? { borderColor: t.colors.primary, backgroundColor: t.colors.primary } : { borderColor: t.colors.borderStrong, backgroundColor: "transparent" }
|
|
1850
2438
|
],
|
|
@@ -1852,7 +2440,7 @@ var _OptionRow = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
|
1852
2440
|
Animated.Text,
|
|
1853
2441
|
{
|
|
1854
2442
|
style: [
|
|
1855
|
-
|
|
2443
|
+
styles12.check,
|
|
1856
2444
|
{ color: t.colors.onPrimary, opacity: checkT, transform: [{ scale: checkScale }] }
|
|
1857
2445
|
],
|
|
1858
2446
|
children: "\u2713"
|
|
@@ -1860,6 +2448,7 @@ var _OptionRow = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
|
1860
2448
|
) : null
|
|
1861
2449
|
}
|
|
1862
2450
|
),
|
|
2451
|
+
/* @__PURE__ */ jsx(WireIcon, { name: opt.icon, size: 20, color: t.colors.text }),
|
|
1863
2452
|
/* @__PURE__ */ jsx(Text, { style: [labelStyle(t.fonts), { color: t.colors.text }], children: opt.label })
|
|
1864
2453
|
]
|
|
1865
2454
|
}
|
|
@@ -1867,7 +2456,7 @@ var _OptionRow = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
|
1867
2456
|
}
|
|
1868
2457
|
);
|
|
1869
2458
|
};
|
|
1870
|
-
var OptionRow =
|
|
2459
|
+
var OptionRow = React18.memo(_OptionRow);
|
|
1871
2460
|
var _SelectionCard = ({
|
|
1872
2461
|
title,
|
|
1873
2462
|
options,
|
|
@@ -1877,6 +2466,7 @@ var _SelectionCard = ({
|
|
|
1877
2466
|
onSelectionChange
|
|
1878
2467
|
}) => {
|
|
1879
2468
|
const t = useOnboardingTheme();
|
|
2469
|
+
const opts = React18.useMemo(() => normalizeOptions(options), [options]);
|
|
1880
2470
|
const [selected, setSelected] = useState([]);
|
|
1881
2471
|
const [submitted, setSubmitted] = useState(false);
|
|
1882
2472
|
useEffect(() => {
|
|
@@ -1911,7 +2501,7 @@ var _SelectionCard = ({
|
|
|
1911
2501
|
disabled: selected.length === 0 || submitted
|
|
1912
2502
|
}
|
|
1913
2503
|
),
|
|
1914
|
-
children: /* @__PURE__ */ jsx(View, { style: { gap: t.spacing.sm + t.spacing.xs }, children:
|
|
2504
|
+
children: /* @__PURE__ */ jsx(View, { style: { gap: t.spacing.sm + t.spacing.xs }, children: opts.map((opt) => /* @__PURE__ */ jsx(
|
|
1915
2505
|
OptionRow,
|
|
1916
2506
|
{
|
|
1917
2507
|
opt,
|
|
@@ -1926,12 +2516,12 @@ var _SelectionCard = ({
|
|
|
1926
2516
|
};
|
|
1927
2517
|
var SelectionCard = {
|
|
1928
2518
|
name: "SelectionCard",
|
|
1929
|
-
description: "Use for mutually exclusive (radio) or multi-select (checkbox) choices from 2\u20138 options. Use ChipSelectCard instead when options are short single words.",
|
|
1930
|
-
component:
|
|
2519
|
+
description: "Use for mutually exclusive (radio) or multi-select (checkbox) choices from 2\u20138 options, as a vertical list of rows. Best when options are wordy or need reading. Options may carry an optional `icon` from the vocabulary to make the list scannable. Use ChipSelectCard instead when options are short single words; use CardGridSelectCard when the options are visual and each has an obvious icon (occasions, channels, categories).",
|
|
2520
|
+
component: React18.memo(_SelectionCard),
|
|
1931
2521
|
propsSchema: schema3,
|
|
1932
2522
|
defaultProps: { submitLabel: "Continue", multiSelect: false }
|
|
1933
2523
|
};
|
|
1934
|
-
var
|
|
2524
|
+
var styles12 = StyleSheet.create({
|
|
1935
2525
|
option: { borderWidth: 1.5, flexDirection: "row", alignItems: "center", overflow: "hidden" },
|
|
1936
2526
|
selectedOverlay: { borderWidth: 1.5 },
|
|
1937
2527
|
indicator: { width: 24, height: 24, borderWidth: 2, alignItems: "center", justifyContent: "center" },
|
|
@@ -1939,6 +2529,168 @@ var styles11 = StyleSheet.create({
|
|
|
1939
2529
|
});
|
|
1940
2530
|
var easeWire6 = Easing.bezier(...WIRE_BEZIER);
|
|
1941
2531
|
var schema4 = z.object({
|
|
2532
|
+
title: z.string().describe("Question or prompt for the user, e.g. 'What brings you here?'"),
|
|
2533
|
+
options: optionsField(
|
|
2534
|
+
"The choices, 2-6 of them. Give EVERY option an `icon` from the vocabulary \u2014 the icon is the point of this card, and an option without one renders as a bare label next to icon-bearing neighbours. Keep labels short (1-3 words) so they fit a half-width card."
|
|
2535
|
+
),
|
|
2536
|
+
submitLabel: z.string().optional().describe("Submit button label, default: Continue"),
|
|
2537
|
+
multiSelect: z.boolean().optional().describe("Allow multiple cards selected at once, default true")
|
|
2538
|
+
});
|
|
2539
|
+
var _OptionCard = ({ opt, isSelected, multiSelect, onToggle }) => {
|
|
2540
|
+
const t = useOnboardingTheme();
|
|
2541
|
+
const reduced = useReducedMotion();
|
|
2542
|
+
const handlePress = useCallback(() => onToggle(opt.value), [opt.value, onToggle]);
|
|
2543
|
+
const pressScale = useRef(new Animated.Value(1)).current;
|
|
2544
|
+
const pressTo = useCallback(
|
|
2545
|
+
(to) => {
|
|
2546
|
+
if (reduced) return;
|
|
2547
|
+
Animated.spring(pressScale, {
|
|
2548
|
+
toValue: to,
|
|
2549
|
+
friction: PRESS_SPRING.friction,
|
|
2550
|
+
tension: PRESS_SPRING.tension,
|
|
2551
|
+
useNativeDriver: true
|
|
2552
|
+
}).start();
|
|
2553
|
+
},
|
|
2554
|
+
[pressScale, reduced]
|
|
2555
|
+
);
|
|
2556
|
+
const handlePressIn = useCallback(() => pressTo(ROW_PRESS_SCALE), [pressTo]);
|
|
2557
|
+
const handlePressOut = useCallback(() => pressTo(1), [pressTo]);
|
|
2558
|
+
const selectT = useRef(new Animated.Value(isSelected ? 1 : 0)).current;
|
|
2559
|
+
useEffect(() => {
|
|
2560
|
+
const anim = Animated.timing(selectT, {
|
|
2561
|
+
toValue: isSelected ? 1 : 0,
|
|
2562
|
+
duration: scaledMs(stateChangeDuration(reduced, SELECT_FILL_MS)),
|
|
2563
|
+
easing: easeWire6,
|
|
2564
|
+
useNativeDriver: true
|
|
2565
|
+
});
|
|
2566
|
+
anim.start();
|
|
2567
|
+
return () => anim.stop();
|
|
2568
|
+
}, [isSelected, reduced, selectT]);
|
|
2569
|
+
return /* @__PURE__ */ jsx(
|
|
2570
|
+
Pressable,
|
|
2571
|
+
{
|
|
2572
|
+
onPress: handlePress,
|
|
2573
|
+
onPressIn: handlePressIn,
|
|
2574
|
+
onPressOut: handlePressOut,
|
|
2575
|
+
accessibilityRole: multiSelect ? "checkbox" : "radio",
|
|
2576
|
+
accessibilityState: multiSelect ? { checked: isSelected } : { selected: isSelected },
|
|
2577
|
+
accessibilityLabel: opt.label,
|
|
2578
|
+
style: styles13.cell,
|
|
2579
|
+
children: /* @__PURE__ */ jsxs(
|
|
2580
|
+
Animated.View,
|
|
2581
|
+
{
|
|
2582
|
+
style: [
|
|
2583
|
+
styles13.card,
|
|
2584
|
+
{
|
|
2585
|
+
padding: t.spacing.md,
|
|
2586
|
+
borderRadius: t.radius.lg,
|
|
2587
|
+
gap: t.spacing.sm,
|
|
2588
|
+
borderColor: t.colors.border,
|
|
2589
|
+
backgroundColor: t.colors.surface,
|
|
2590
|
+
transform: [{ scale: pressScale }]
|
|
2591
|
+
}
|
|
2592
|
+
],
|
|
2593
|
+
children: [
|
|
2594
|
+
/* @__PURE__ */ jsx(
|
|
2595
|
+
Animated.View,
|
|
2596
|
+
{
|
|
2597
|
+
pointerEvents: "none",
|
|
2598
|
+
style: [
|
|
2599
|
+
StyleSheet.absoluteFill,
|
|
2600
|
+
styles13.selectedOverlay,
|
|
2601
|
+
{
|
|
2602
|
+
borderRadius: t.radius.lg,
|
|
2603
|
+
borderColor: t.colors.primary,
|
|
2604
|
+
backgroundColor: t.colors.primarySoft,
|
|
2605
|
+
opacity: selectT
|
|
2606
|
+
}
|
|
2607
|
+
]
|
|
2608
|
+
}
|
|
2609
|
+
),
|
|
2610
|
+
/* @__PURE__ */ jsx(WireIcon, { name: opt.icon, size: 24, color: t.colors.text }),
|
|
2611
|
+
/* @__PURE__ */ jsx(Text, { style: [labelStyle(t.fonts), { color: t.colors.text }], children: opt.label })
|
|
2612
|
+
]
|
|
2613
|
+
}
|
|
2614
|
+
)
|
|
2615
|
+
}
|
|
2616
|
+
);
|
|
2617
|
+
};
|
|
2618
|
+
var OptionCard = React18.memo(_OptionCard);
|
|
2619
|
+
var _CardGridSelectCard = ({
|
|
2620
|
+
title,
|
|
2621
|
+
options,
|
|
2622
|
+
submitLabel = "Continue",
|
|
2623
|
+
multiSelect = true,
|
|
2624
|
+
onSelect,
|
|
2625
|
+
onSelectionChange
|
|
2626
|
+
}) => {
|
|
2627
|
+
const t = useOnboardingTheme();
|
|
2628
|
+
const opts = React18.useMemo(() => normalizeOptions(options), [options]);
|
|
2629
|
+
const [selected, setSelected] = useState([]);
|
|
2630
|
+
const [submitted, setSubmitted] = useState(false);
|
|
2631
|
+
useEffect(() => {
|
|
2632
|
+
if (!submitted && selected.length) onSelectionChange == null ? void 0 : onSelectionChange(multiSelect ? selected : selected[0]);
|
|
2633
|
+
}, [selected, submitted, multiSelect, onSelectionChange]);
|
|
2634
|
+
const toggle = useCallback(
|
|
2635
|
+
(value) => {
|
|
2636
|
+
if (submitted) return;
|
|
2637
|
+
if (multiSelect) {
|
|
2638
|
+
setSelected(
|
|
2639
|
+
(prev) => prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value]
|
|
2640
|
+
);
|
|
2641
|
+
} else {
|
|
2642
|
+
setSelected([value]);
|
|
2643
|
+
}
|
|
2644
|
+
},
|
|
2645
|
+
[submitted, multiSelect]
|
|
2646
|
+
);
|
|
2647
|
+
const handleSubmit = useCallback(() => {
|
|
2648
|
+
if (!selected.length || !onSelect || submitted) return;
|
|
2649
|
+
setSubmitted(true);
|
|
2650
|
+
onSelect(multiSelect ? selected : selected[0]);
|
|
2651
|
+
}, [selected, onSelect, submitted, multiSelect]);
|
|
2652
|
+
return /* @__PURE__ */ jsx(
|
|
2653
|
+
CardLayout,
|
|
2654
|
+
{
|
|
2655
|
+
title,
|
|
2656
|
+
footer: /* @__PURE__ */ jsx(
|
|
2657
|
+
Button,
|
|
2658
|
+
{
|
|
2659
|
+
title: submitLabel,
|
|
2660
|
+
onPress: handleSubmit,
|
|
2661
|
+
variant: "primary",
|
|
2662
|
+
disabled: selected.length === 0 || submitted
|
|
2663
|
+
}
|
|
2664
|
+
),
|
|
2665
|
+
children: /* @__PURE__ */ jsx(View, { style: [styles13.grid, { gap: t.spacing.sm }], children: opts.map((opt) => /* @__PURE__ */ jsx(
|
|
2666
|
+
OptionCard,
|
|
2667
|
+
{
|
|
2668
|
+
opt,
|
|
2669
|
+
isSelected: selected.includes(opt.value),
|
|
2670
|
+
multiSelect,
|
|
2671
|
+
onToggle: toggle
|
|
2672
|
+
},
|
|
2673
|
+
opt.value
|
|
2674
|
+
)) })
|
|
2675
|
+
}
|
|
2676
|
+
);
|
|
2677
|
+
};
|
|
2678
|
+
var CardGridSelectCard = {
|
|
2679
|
+
name: "CardGridSelectCard",
|
|
2680
|
+
description: "Use for VISUAL, icon-led choices shown as a 2-column grid of tappable cards (icon on top, short label beneath). Ideal for 2\u20136 concrete options that each have an obvious icon \u2014 occasions, channels, goals, categories \u2014 e.g. 'What brings you here?' or 'Where did you hear about us?'. Multi-select by default. Every option should carry an `icon`. Use SelectionCard instead when options need descriptions or have no natural icon; use ChipSelectCard for many short word-like tags.",
|
|
2681
|
+
component: React18.memo(_CardGridSelectCard),
|
|
2682
|
+
propsSchema: schema4,
|
|
2683
|
+
defaultProps: { submitLabel: "Continue", multiSelect: true }
|
|
2684
|
+
};
|
|
2685
|
+
var styles13 = StyleSheet.create({
|
|
2686
|
+
grid: { flexDirection: "row", flexWrap: "wrap" },
|
|
2687
|
+
// Two per row: ~47% basis leaves room for the gap, flexGrow fills the remainder exactly.
|
|
2688
|
+
cell: { flexBasis: "47%", flexGrow: 1 },
|
|
2689
|
+
card: { borderWidth: 1.5, alignItems: "flex-start", overflow: "hidden" },
|
|
2690
|
+
selectedOverlay: { borderWidth: 1.5 }
|
|
2691
|
+
});
|
|
2692
|
+
var easeWire7 = Easing.bezier(...WIRE_BEZIER);
|
|
2693
|
+
var schema5 = z.object({
|
|
1942
2694
|
status: z.enum(["success", "warning", "error", "info"]).describe("Status type"),
|
|
1943
2695
|
title: z.string().describe("Status title"),
|
|
1944
2696
|
message: z.string().optional().describe("Supporting message"),
|
|
@@ -1953,7 +2705,7 @@ var STATUS_ICONS = {
|
|
|
1953
2705
|
info: "\u2139"
|
|
1954
2706
|
};
|
|
1955
2707
|
var _StatusCard = ({ status, title, message, ctaLabel, onContinue, onPress, onSubmit }) => {
|
|
1956
|
-
var
|
|
2708
|
+
var _a2;
|
|
1957
2709
|
const t = useOnboardingTheme();
|
|
1958
2710
|
const reduced = useReducedMotion();
|
|
1959
2711
|
const [submitted, setSubmitted] = useState(false);
|
|
@@ -1988,7 +2740,7 @@ var _StatusCard = ({ status, title, message, ctaLabel, onContinue, onPress, onSu
|
|
|
1988
2740
|
toValue: 1,
|
|
1989
2741
|
duration: scaledMs(STATUS_COPY_MS),
|
|
1990
2742
|
delay: scaledMs(STATUS_COPY_STAGGER_MS),
|
|
1991
|
-
easing:
|
|
2743
|
+
easing: easeWire7,
|
|
1992
2744
|
useNativeDriver: true
|
|
1993
2745
|
})
|
|
1994
2746
|
];
|
|
@@ -2010,8 +2762,8 @@ var _StatusCard = ({ status, title, message, ctaLabel, onContinue, onPress, onSu
|
|
|
2010
2762
|
{
|
|
2011
2763
|
align: "center",
|
|
2012
2764
|
footer: ctaLabel ? /* @__PURE__ */ jsx(Button, { title: ctaLabel, onPress: handleContinue, variant: "primary", disabled: submitted }) : void 0,
|
|
2013
|
-
children: /* @__PURE__ */ jsxs(View, { style: [
|
|
2014
|
-
/* @__PURE__ */ jsxs(View, { style: [
|
|
2765
|
+
children: /* @__PURE__ */ jsxs(View, { style: [styles14.center, { gap: t.spacing.sm }], children: [
|
|
2766
|
+
/* @__PURE__ */ jsxs(View, { style: [styles14.titleRow, { gap: t.spacing.sm }], children: [
|
|
2015
2767
|
/* @__PURE__ */ jsx(
|
|
2016
2768
|
Animated.Text,
|
|
2017
2769
|
{
|
|
@@ -2019,7 +2771,7 @@ var _StatusCard = ({ status, title, message, ctaLabel, onContinue, onPress, onSu
|
|
|
2019
2771
|
headingStyle(t.fonts),
|
|
2020
2772
|
{ color, opacity: popT, transform: [{ scale: popScale }] }
|
|
2021
2773
|
],
|
|
2022
|
-
children: (
|
|
2774
|
+
children: (_a2 = STATUS_ICONS[status]) != null ? _a2 : "\xB7"
|
|
2023
2775
|
}
|
|
2024
2776
|
),
|
|
2025
2777
|
/* @__PURE__ */ jsx(
|
|
@@ -2055,14 +2807,14 @@ var _StatusCard = ({ status, title, message, ctaLabel, onContinue, onPress, onSu
|
|
|
2055
2807
|
var StatusCard = {
|
|
2056
2808
|
name: "StatusCard",
|
|
2057
2809
|
description: "Use ONLY for real outcomes: booking confirmed, data saved, action completed. NEVER for 'you just viewed X' acknowledgments. Always include ctaLabel so the user can continue after seeing the status.",
|
|
2058
|
-
component:
|
|
2059
|
-
propsSchema:
|
|
2810
|
+
component: React18.memo(_StatusCard),
|
|
2811
|
+
propsSchema: schema5
|
|
2060
2812
|
};
|
|
2061
|
-
var
|
|
2813
|
+
var styles14 = StyleSheet.create({
|
|
2062
2814
|
center: { width: "100%", alignItems: "center", justifyContent: "center" },
|
|
2063
2815
|
titleRow: { flexDirection: "row", alignItems: "center", justifyContent: "center" }
|
|
2064
2816
|
});
|
|
2065
|
-
var
|
|
2817
|
+
var schema6 = z.object({
|
|
2066
2818
|
label: z.string().describe("What is being counted, e.g. 'Number of days' or 'Travellers'"),
|
|
2067
2819
|
min: z.number().optional().describe("Minimum value, default 1"),
|
|
2068
2820
|
max: z.number().optional().describe("Maximum value, default 30"),
|
|
@@ -2083,7 +2835,7 @@ var _NumberStepperCard = ({
|
|
|
2083
2835
|
onSubmit
|
|
2084
2836
|
}) => {
|
|
2085
2837
|
const t = useOnboardingTheme();
|
|
2086
|
-
const
|
|
2838
|
+
const styles18 = useMemo(() => makeStyles4(t), [t]);
|
|
2087
2839
|
const safeMin = safeNum(min, 1);
|
|
2088
2840
|
const safeMaxRaw = safeNum(max, 30);
|
|
2089
2841
|
const safeMax = safeMaxRaw < safeMin ? safeMin : safeMaxRaw;
|
|
@@ -2107,7 +2859,7 @@ var _NumberStepperCard = ({
|
|
|
2107
2859
|
const atMin = value <= safeMin;
|
|
2108
2860
|
const atMax = value >= safeMax;
|
|
2109
2861
|
const stepBtnStyle = (disabled) => [
|
|
2110
|
-
|
|
2862
|
+
styles18.stepBtn,
|
|
2111
2863
|
{ borderRadius: t.radius.full, backgroundColor: t.colors.background, borderColor: disabled ? t.colors.border : t.colors.primary }
|
|
2112
2864
|
];
|
|
2113
2865
|
return /* @__PURE__ */ jsx(
|
|
@@ -2116,10 +2868,10 @@ var _NumberStepperCard = ({
|
|
|
2116
2868
|
title: label,
|
|
2117
2869
|
align: "center",
|
|
2118
2870
|
footer: /* @__PURE__ */ jsx(Button, { title: submitLabel, onPress: handleSubmit, variant: "primary", disabled: submitted }),
|
|
2119
|
-
children: /* @__PURE__ */ jsxs(View, { style:
|
|
2120
|
-
/* @__PURE__ */ jsxs(View, { style: [
|
|
2871
|
+
children: /* @__PURE__ */ jsxs(View, { style: styles18.wrap, children: [
|
|
2872
|
+
/* @__PURE__ */ jsxs(View, { style: [styles18.stepper, { gap: t.spacing.lg }], children: [
|
|
2121
2873
|
/* @__PURE__ */ jsx(Pressable, { onPress: atMin || submitted ? void 0 : handleDecrement, disabled: atMin || submitted, style: stepBtnStyle(atMin), children: /* @__PURE__ */ jsx(Text, { style: [headingStyle(t.fonts), { color: atMin ? t.colors.textMuted : t.colors.primary }], children: "\u2212" }) }),
|
|
2122
|
-
/* @__PURE__ */ jsxs(View, { style:
|
|
2874
|
+
/* @__PURE__ */ jsxs(View, { style: styles18.valueBox, children: [
|
|
2123
2875
|
/* @__PURE__ */ jsx(Text, { style: [headingStyle(t.fonts), { color: t.colors.primary }], children: String(value) }),
|
|
2124
2876
|
unit ? /* @__PURE__ */ jsx(Text, { style: [captionStyle(t.fonts), { color: t.colors.textMuted }], children: unit }) : null
|
|
2125
2877
|
] }),
|
|
@@ -2133,8 +2885,8 @@ var _NumberStepperCard = ({
|
|
|
2133
2885
|
var NumberStepperCard = {
|
|
2134
2886
|
name: "NumberStepperCard",
|
|
2135
2887
|
description: "Use for any bounded numeric input: days, people, portions, budget tiers, ratings. Best for ranges 1\u201399. Set unit (e.g. 'days', 'people') for clarity.",
|
|
2136
|
-
component:
|
|
2137
|
-
propsSchema:
|
|
2888
|
+
component: React18.memo(_NumberStepperCard),
|
|
2889
|
+
propsSchema: schema6,
|
|
2138
2890
|
defaultProps: { min: 1, max: 30, defaultValue: 1, step: 1, submitLabel: "Confirm" }
|
|
2139
2891
|
};
|
|
2140
2892
|
function makeStyles4(t) {
|
|
@@ -2145,9 +2897,9 @@ function makeStyles4(t) {
|
|
|
2145
2897
|
valueBox: { alignItems: "center", minWidth: 80 }
|
|
2146
2898
|
});
|
|
2147
2899
|
}
|
|
2148
|
-
var
|
|
2900
|
+
var easeWire8 = Easing.bezier(...WIRE_BEZIER);
|
|
2149
2901
|
var RISE_PX = 10;
|
|
2150
|
-
var
|
|
2902
|
+
var schema7 = z.object({
|
|
2151
2903
|
title: z.string().describe("Short, warm headline for the value/momentum moment"),
|
|
2152
2904
|
body: z.string().optional().describe("One or two supporting lines that reflect the user's answers back and build momentum"),
|
|
2153
2905
|
items: z.array(z.string()).max(4).optional().describe(
|
|
@@ -2184,7 +2936,7 @@ var _WorkItem = ({
|
|
|
2184
2936
|
toValue: 1,
|
|
2185
2937
|
duration: scaledMs(INTERSTITIAL_ITEM_MS),
|
|
2186
2938
|
delay: scaledMs(interstitialItemDelay(index)),
|
|
2187
|
-
easing:
|
|
2939
|
+
easing: easeWire8,
|
|
2188
2940
|
useNativeDriver: true
|
|
2189
2941
|
}),
|
|
2190
2942
|
Animated.spring(checkT, {
|
|
@@ -2206,20 +2958,20 @@ var _WorkItem = ({
|
|
|
2206
2958
|
return /* @__PURE__ */ jsxs(
|
|
2207
2959
|
Animated.View,
|
|
2208
2960
|
{
|
|
2209
|
-
style: [
|
|
2961
|
+
style: [styles15.itemRow, { gap: t.spacing.sm + t.spacing.xs, opacity: rowT, transform: [{ translateY: rise }] }],
|
|
2210
2962
|
children: [
|
|
2211
2963
|
/* @__PURE__ */ jsx(
|
|
2212
2964
|
View,
|
|
2213
2965
|
{
|
|
2214
2966
|
style: [
|
|
2215
|
-
|
|
2967
|
+
styles15.itemBadge,
|
|
2216
2968
|
{ backgroundColor: t.colors.primarySoft, borderRadius: t.radius.full }
|
|
2217
2969
|
],
|
|
2218
2970
|
children: /* @__PURE__ */ jsx(
|
|
2219
2971
|
Animated.Text,
|
|
2220
2972
|
{
|
|
2221
2973
|
style: [
|
|
2222
|
-
|
|
2974
|
+
styles15.itemCheck,
|
|
2223
2975
|
{ color: t.colors.primary, opacity: checkT, transform: [{ scale: checkScale }] }
|
|
2224
2976
|
],
|
|
2225
2977
|
children: "\u2713"
|
|
@@ -2227,12 +2979,12 @@ var _WorkItem = ({
|
|
|
2227
2979
|
)
|
|
2228
2980
|
}
|
|
2229
2981
|
),
|
|
2230
|
-
/* @__PURE__ */ jsx(Text, { style: [bodyStyle(t.fonts),
|
|
2982
|
+
/* @__PURE__ */ jsx(Text, { style: [bodyStyle(t.fonts), styles15.itemText, { color: t.colors.text }], children: text })
|
|
2231
2983
|
]
|
|
2232
2984
|
}
|
|
2233
2985
|
);
|
|
2234
2986
|
};
|
|
2235
|
-
var WorkItem =
|
|
2987
|
+
var WorkItem = React18.memo(_WorkItem);
|
|
2236
2988
|
var _InterstitialCard = ({
|
|
2237
2989
|
title,
|
|
2238
2990
|
body,
|
|
@@ -2269,7 +3021,7 @@ var _InterstitialCard = ({
|
|
|
2269
3021
|
toValue: 1,
|
|
2270
3022
|
duration: scaledMs(INTERSTITIAL_HEAD_MS),
|
|
2271
3023
|
delay,
|
|
2272
|
-
easing:
|
|
3024
|
+
easing: easeWire8,
|
|
2273
3025
|
useNativeDriver: true
|
|
2274
3026
|
});
|
|
2275
3027
|
const anims = [
|
|
@@ -2305,18 +3057,18 @@ var _InterstitialCard = ({
|
|
|
2305
3057
|
disabled: submitted || !canAdvance
|
|
2306
3058
|
}
|
|
2307
3059
|
),
|
|
2308
|
-
children: /* @__PURE__ */ jsxs(View, { style: [
|
|
2309
|
-
/* @__PURE__ */ jsx(Animated.View, { style: [
|
|
3060
|
+
children: /* @__PURE__ */ jsxs(View, { style: [styles15.center, { gap: t.spacing.md }], children: [
|
|
3061
|
+
/* @__PURE__ */ jsx(Animated.View, { style: [styles15.fullWidth, riseStyle(artT)], children: showImage ? /* @__PURE__ */ jsx(
|
|
2310
3062
|
Image,
|
|
2311
3063
|
{
|
|
2312
3064
|
source: { uri: imageUrl },
|
|
2313
|
-
style:
|
|
3065
|
+
style: styles15.image,
|
|
2314
3066
|
resizeMode: "contain",
|
|
2315
3067
|
onError: () => setImgFailed(true)
|
|
2316
3068
|
}
|
|
2317
|
-
) : art ? /* @__PURE__ */ jsx(View, { style:
|
|
3069
|
+
) : art ? /* @__PURE__ */ jsx(View, { style: styles15.art, children: art }) : null }),
|
|
2318
3070
|
/* @__PURE__ */ jsx(Animated.View, { style: riseStyle(titleT), children: /* @__PURE__ */ jsx(Text, { style: [headingStyle(t.fonts), { color: t.colors.text, textAlign: "center" }], children: title }) }),
|
|
2319
|
-
(items == null ? void 0 : items.length) ? /* @__PURE__ */ jsx(View, { style: [
|
|
3071
|
+
(items == null ? void 0 : items.length) ? /* @__PURE__ */ jsx(View, { style: [styles15.items, { gap: t.spacing.md, marginTop: t.spacing.sm }], children: items.map((item, i) => /* @__PURE__ */ jsx(WorkItem, { text: item, index: i, reduced }, `${item}-${i}`)) }) : body ? /* @__PURE__ */ jsx(Animated.View, { style: riseStyle(bodyT), children: /* @__PURE__ */ jsx(Text, { style: [bodyStyle(t.fonts), { color: t.colors.textMuted, textAlign: "center" }], children: body }) }) : null
|
|
2320
3072
|
] })
|
|
2321
3073
|
}
|
|
2322
3074
|
);
|
|
@@ -2324,11 +3076,11 @@ var _InterstitialCard = ({
|
|
|
2324
3076
|
var InterstitialCard = {
|
|
2325
3077
|
name: "InterstitialCard",
|
|
2326
3078
|
description: "Use ONCE mid-flow (never first, never last) as a momentum/value screen between questions \u2014 an illustration + a warm line that reflects answers back, like Duolingo/Cal-AI. NOT a question; the user just taps Continue. Set `illustration` to an app-registered artwork name. Prefer `items` (2-3 short ticked lines, each reflecting a real answer) when you have the signal. Skip it if you don't have enough signal to make the line specific.",
|
|
2327
|
-
component:
|
|
2328
|
-
propsSchema:
|
|
3079
|
+
component: React18.memo(_InterstitialCard),
|
|
3080
|
+
propsSchema: schema7,
|
|
2329
3081
|
defaultProps: { ctaLabel: "Continue", illustrationFallback: "momentum" }
|
|
2330
3082
|
};
|
|
2331
|
-
var
|
|
3083
|
+
var styles15 = StyleSheet.create({
|
|
2332
3084
|
center: { width: "100%", alignItems: "center", justifyContent: "center" },
|
|
2333
3085
|
fullWidth: { width: "100%", alignItems: "center" },
|
|
2334
3086
|
art: { alignItems: "center", justifyContent: "center" },
|
|
@@ -2345,6 +3097,7 @@ var onboardingComponents = [
|
|
|
2345
3097
|
ChipSelectCard,
|
|
2346
3098
|
TextInputCard,
|
|
2347
3099
|
SelectionCard,
|
|
3100
|
+
CardGridSelectCard,
|
|
2348
3101
|
StatusCard,
|
|
2349
3102
|
NumberStepperCard,
|
|
2350
3103
|
InterstitialCard
|
|
@@ -2356,15 +3109,22 @@ var coerceVersion = (value) => {
|
|
|
2356
3109
|
const trimmed = value.trim();
|
|
2357
3110
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
2358
3111
|
};
|
|
2359
|
-
var
|
|
3112
|
+
var runtimeRequire2 = (moduleName) => {
|
|
3113
|
+
if (typeof __require !== "function") return void 0;
|
|
2360
3114
|
try {
|
|
2361
|
-
|
|
2362
|
-
|
|
3115
|
+
switch (moduleName) {
|
|
3116
|
+
case "expo-constants":
|
|
3117
|
+
return init_Constants(), __toCommonJS(Constants_exports);
|
|
3118
|
+
case "expo-application":
|
|
3119
|
+
return __require("expo-application");
|
|
3120
|
+
default:
|
|
3121
|
+
return void 0;
|
|
3122
|
+
}
|
|
2363
3123
|
} catch {
|
|
2364
3124
|
return void 0;
|
|
2365
3125
|
}
|
|
2366
3126
|
};
|
|
2367
|
-
var
|
|
3127
|
+
var interop2 = (mod) => {
|
|
2368
3128
|
if (!mod || typeof mod !== "object") return void 0;
|
|
2369
3129
|
const def = mod.default;
|
|
2370
3130
|
if (def && typeof def === "object") return def;
|
|
@@ -2372,21 +3132,21 @@ var interop = (mod) => {
|
|
|
2372
3132
|
};
|
|
2373
3133
|
var safeInterop = (requireModule, moduleName) => {
|
|
2374
3134
|
try {
|
|
2375
|
-
return
|
|
3135
|
+
return interop2(requireModule(moduleName));
|
|
2376
3136
|
} catch {
|
|
2377
3137
|
return void 0;
|
|
2378
3138
|
}
|
|
2379
3139
|
};
|
|
2380
|
-
var detectAppVersion = (requireModule =
|
|
3140
|
+
var detectAppVersion = (requireModule = runtimeRequire2) => {
|
|
2381
3141
|
try {
|
|
2382
|
-
const
|
|
2383
|
-
if (
|
|
2384
|
-
const expoConfig =
|
|
3142
|
+
const constants2 = safeInterop(requireModule, "expo-constants");
|
|
3143
|
+
if (constants2) {
|
|
3144
|
+
const expoConfig = constants2.expoConfig;
|
|
2385
3145
|
if (expoConfig && typeof expoConfig === "object") {
|
|
2386
3146
|
const fromExpoConfig = coerceVersion(expoConfig.version);
|
|
2387
3147
|
if (fromExpoConfig) return fromExpoConfig;
|
|
2388
3148
|
}
|
|
2389
|
-
const fromNative = coerceVersion(
|
|
3149
|
+
const fromNative = coerceVersion(constants2.nativeAppVersion);
|
|
2390
3150
|
if (fromNative) return fromNative;
|
|
2391
3151
|
}
|
|
2392
3152
|
const application = safeInterop(requireModule, "expo-application");
|
|
@@ -2399,6 +3159,48 @@ var detectAppVersion = (requireModule = runtimeRequire) => {
|
|
|
2399
3159
|
return void 0;
|
|
2400
3160
|
};
|
|
2401
3161
|
|
|
3162
|
+
// src/device/deviceModel.ts
|
|
3163
|
+
var coerceModel = (value) => {
|
|
3164
|
+
if (typeof value !== "string") return void 0;
|
|
3165
|
+
const trimmed = value.trim();
|
|
3166
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
3167
|
+
};
|
|
3168
|
+
var runtimeRequire3 = (moduleName) => {
|
|
3169
|
+
if (moduleName !== "expo-device") return void 0;
|
|
3170
|
+
if (typeof __require !== "function") return void 0;
|
|
3171
|
+
try {
|
|
3172
|
+
return __require("expo-device");
|
|
3173
|
+
} catch {
|
|
3174
|
+
return void 0;
|
|
3175
|
+
}
|
|
3176
|
+
};
|
|
3177
|
+
var interop3 = (mod) => {
|
|
3178
|
+
if (!mod || typeof mod !== "object") return void 0;
|
|
3179
|
+
const def = mod.default;
|
|
3180
|
+
if (def && typeof def === "object") return def;
|
|
3181
|
+
return mod;
|
|
3182
|
+
};
|
|
3183
|
+
var safeInterop2 = (requireModule, moduleName) => {
|
|
3184
|
+
try {
|
|
3185
|
+
return interop3(requireModule(moduleName));
|
|
3186
|
+
} catch {
|
|
3187
|
+
return void 0;
|
|
3188
|
+
}
|
|
3189
|
+
};
|
|
3190
|
+
var detectNativeModel = (requireModule = runtimeRequire3) => {
|
|
3191
|
+
try {
|
|
3192
|
+
const device = safeInterop2(requireModule, "expo-device");
|
|
3193
|
+
if (device) {
|
|
3194
|
+
const modelName = coerceModel(device.modelName);
|
|
3195
|
+
if (modelName) return modelName;
|
|
3196
|
+
const modelId = coerceModel(device.modelId);
|
|
3197
|
+
if (modelId) return modelId;
|
|
3198
|
+
}
|
|
3199
|
+
} catch {
|
|
3200
|
+
}
|
|
3201
|
+
return void 0;
|
|
3202
|
+
};
|
|
3203
|
+
|
|
2402
3204
|
// src/device/deviceContext.ts
|
|
2403
3205
|
var deriveFormFactor = (iosIdiom, width, height) => {
|
|
2404
3206
|
if (iosIdiom === "pad") return "tablet";
|
|
@@ -2409,7 +3211,7 @@ var deriveFormFactor = (iosIdiom, width, height) => {
|
|
|
2409
3211
|
return void 0;
|
|
2410
3212
|
};
|
|
2411
3213
|
var collectDeviceContext = () => {
|
|
2412
|
-
var
|
|
3214
|
+
var _a2;
|
|
2413
3215
|
const ctx = { platform: Platform.OS };
|
|
2414
3216
|
try {
|
|
2415
3217
|
const version = Platform.Version;
|
|
@@ -2418,26 +3220,26 @@ var collectDeviceContext = () => {
|
|
|
2418
3220
|
}
|
|
2419
3221
|
} catch {
|
|
2420
3222
|
}
|
|
2421
|
-
let
|
|
3223
|
+
let constants2 = {};
|
|
2422
3224
|
try {
|
|
2423
|
-
|
|
3225
|
+
constants2 = (_a2 = Platform.constants) != null ? _a2 : {};
|
|
2424
3226
|
} catch {
|
|
2425
|
-
|
|
3227
|
+
constants2 = {};
|
|
2426
3228
|
}
|
|
2427
3229
|
let iosIdiom;
|
|
2428
3230
|
try {
|
|
2429
3231
|
if (Platform.OS === "android") {
|
|
2430
|
-
const brand =
|
|
2431
|
-
const model =
|
|
2432
|
-
const release =
|
|
3232
|
+
const brand = constants2.Brand;
|
|
3233
|
+
const model = constants2.Model;
|
|
3234
|
+
const release = constants2.Release;
|
|
2433
3235
|
if (typeof brand === "string" && brand) ctx.brand = brand;
|
|
2434
3236
|
if (typeof model === "string" && model) ctx.model = model;
|
|
2435
3237
|
if (release !== void 0 && release !== null && String(release)) {
|
|
2436
3238
|
ctx.osVersion = String(release);
|
|
2437
3239
|
}
|
|
2438
3240
|
} else if (Platform.OS === "ios") {
|
|
2439
|
-
const osVersion =
|
|
2440
|
-
const idiom =
|
|
3241
|
+
const osVersion = constants2.osVersion;
|
|
3242
|
+
const idiom = constants2.interfaceIdiom;
|
|
2441
3243
|
if (osVersion !== void 0 && osVersion !== null && String(osVersion)) {
|
|
2442
3244
|
ctx.osVersion = String(osVersion);
|
|
2443
3245
|
}
|
|
@@ -2445,6 +3247,8 @@ var collectDeviceContext = () => {
|
|
|
2445
3247
|
ctx.interfaceIdiom = idiom;
|
|
2446
3248
|
iosIdiom = idiom;
|
|
2447
3249
|
}
|
|
3250
|
+
const iosModel = detectNativeModel();
|
|
3251
|
+
if (iosModel) ctx.model = iosModel;
|
|
2448
3252
|
}
|
|
2449
3253
|
} catch {
|
|
2450
3254
|
}
|
|
@@ -2551,9 +3355,9 @@ var sanitizeUserId = (raw) => {
|
|
|
2551
3355
|
return trimmed.length > USER_ID_MAX_LENGTH ? trimmed.slice(0, USER_ID_MAX_LENGTH) : trimmed;
|
|
2552
3356
|
};
|
|
2553
3357
|
var identifyOnboarding = async (opts) => {
|
|
2554
|
-
var
|
|
3358
|
+
var _a2, _b, _c;
|
|
2555
3359
|
const userId = sanitizeUserId(opts.userId);
|
|
2556
|
-
if (!userId || !((
|
|
3360
|
+
if (!userId || !((_a2 = opts.config) == null ? void 0 : _a2.serverUrl)) return false;
|
|
2557
3361
|
let contextId = ((_b = opts.contextId) == null ? void 0 : _b.trim()) || void 0;
|
|
2558
3362
|
if (!contextId && opts.storage) {
|
|
2559
3363
|
const key = (_c = opts.persistKey) != null ? _c : opts.appId ? sessionStorageKey(opts.appId) : void 0;
|
|
@@ -2575,6 +3379,7 @@ var WireOnboarding = ({
|
|
|
2575
3379
|
theme,
|
|
2576
3380
|
components,
|
|
2577
3381
|
illustrations,
|
|
3382
|
+
icons,
|
|
2578
3383
|
validators,
|
|
2579
3384
|
onComplete,
|
|
2580
3385
|
onSkip,
|
|
@@ -2592,7 +3397,7 @@ var WireOnboarding = ({
|
|
|
2592
3397
|
userContext,
|
|
2593
3398
|
userId
|
|
2594
3399
|
}) => {
|
|
2595
|
-
var
|
|
3400
|
+
var _a2, _b, _c;
|
|
2596
3401
|
const boundUserId = useMemo(() => sanitizeUserId(userId), [userId]);
|
|
2597
3402
|
const device = useMemo(() => {
|
|
2598
3403
|
const collected = collectDeviceContext();
|
|
@@ -2628,7 +3433,7 @@ var WireOnboarding = ({
|
|
|
2628
3433
|
},
|
|
2629
3434
|
[storage, storageKey, onComplete]
|
|
2630
3435
|
);
|
|
2631
|
-
const sessionId = (
|
|
3436
|
+
const sessionId = (_a2 = session == null ? void 0 : session.id) != null ? _a2 : "";
|
|
2632
3437
|
const startupUserIdRef = useRef(boundUserId);
|
|
2633
3438
|
const metadataKey = config.metadata ? JSON.stringify(config.metadata) : "";
|
|
2634
3439
|
const metadataStable = useMemo(() => metadataKey ? JSON.parse(metadataKey) : void 0, [metadataKey]);
|
|
@@ -2692,7 +3497,7 @@ var WireOnboarding = ({
|
|
|
2692
3497
|
}
|
|
2693
3498
|
) });
|
|
2694
3499
|
}
|
|
2695
|
-
return /* @__PURE__ */ jsx(OnboardingThemeProvider, { theme, children: /* @__PURE__ */ jsx(IllustrationProvider, { registry: { ...defaultIllustrations, ...illustrations }, children: /* @__PURE__ */ jsx(WireAIProvider, { llm, components: cards, children: /* @__PURE__ */ jsx(
|
|
3500
|
+
return /* @__PURE__ */ jsx(OnboardingThemeProvider, { theme, children: /* @__PURE__ */ jsx(IllustrationProvider, { registry: { ...defaultIllustrations, ...illustrations }, children: /* @__PURE__ */ jsx(IconRegistryProvider, { registry: icons, children: /* @__PURE__ */ jsx(WireAIProvider, { llm, components: cards, children: /* @__PURE__ */ jsx(
|
|
2696
3501
|
OnboardingFlow,
|
|
2697
3502
|
{
|
|
2698
3503
|
validators,
|
|
@@ -2711,7 +3516,7 @@ var WireOnboarding = ({
|
|
|
2711
3516
|
resumed: session.resumed,
|
|
2712
3517
|
clientContext
|
|
2713
3518
|
}
|
|
2714
|
-
) }) }) });
|
|
3519
|
+
) }) }) }) });
|
|
2715
3520
|
};
|
|
2716
3521
|
function DemoOnboarding({
|
|
2717
3522
|
config,
|
|
@@ -2726,7 +3531,7 @@ function DemoOnboarding({
|
|
|
2726
3531
|
const [open, setOpen] = useState(false);
|
|
2727
3532
|
const [runId, setRunId] = useState(0);
|
|
2728
3533
|
const t = useMemo(() => mergeTheme(theme != null ? theme : {}), [theme]);
|
|
2729
|
-
const
|
|
3534
|
+
const styles18 = useMemo(() => makeStyles5(t), [t]);
|
|
2730
3535
|
const openDemo = useCallback(() => {
|
|
2731
3536
|
setRunId((n) => n + 1);
|
|
2732
3537
|
setOpen(true);
|
|
@@ -2740,7 +3545,7 @@ function DemoOnboarding({
|
|
|
2740
3545
|
[onComplete]
|
|
2741
3546
|
);
|
|
2742
3547
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2743
|
-
renderTrigger ? renderTrigger(openDemo) : /* @__PURE__ */ jsx(Pressable, { onPress: openDemo, style:
|
|
3548
|
+
renderTrigger ? renderTrigger(openDemo) : /* @__PURE__ */ jsx(Pressable, { onPress: openDemo, style: styles18.trigger, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles18.triggerText, children: label }) }),
|
|
2744
3549
|
/* @__PURE__ */ jsx(
|
|
2745
3550
|
Modal,
|
|
2746
3551
|
{
|
|
@@ -2748,7 +3553,7 @@ function DemoOnboarding({
|
|
|
2748
3553
|
animationType: "slide",
|
|
2749
3554
|
presentationStyle: "fullScreen",
|
|
2750
3555
|
onRequestClose: close,
|
|
2751
|
-
children: /* @__PURE__ */ jsx(View, { style:
|
|
3556
|
+
children: /* @__PURE__ */ jsx(View, { style: styles18.modal, children: config ? /* @__PURE__ */ jsx(
|
|
2752
3557
|
WireOnboarding,
|
|
2753
3558
|
{
|
|
2754
3559
|
config,
|
|
@@ -2761,10 +3566,10 @@ function DemoOnboarding({
|
|
|
2761
3566
|
onError: close
|
|
2762
3567
|
},
|
|
2763
3568
|
runId
|
|
2764
|
-
) : /* @__PURE__ */ jsxs(View, { style:
|
|
2765
|
-
/* @__PURE__ */ jsx(Text, { style:
|
|
2766
|
-
/* @__PURE__ */ jsx(Text, { style:
|
|
2767
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: close, style:
|
|
3569
|
+
) : /* @__PURE__ */ jsxs(View, { style: styles18.notice, children: [
|
|
3570
|
+
/* @__PURE__ */ jsx(Text, { style: styles18.noticeTitle, children: "Wire AI not configured" }),
|
|
3571
|
+
/* @__PURE__ */ jsx(Text, { style: styles18.noticeBody, children: "Set the Wire AI key + server URL (e.g. via wireConfigFromEnv) to demo the AI onboarding here." }),
|
|
3572
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: close, style: styles18.trigger, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles18.triggerText, children: "Close" }) })
|
|
2768
3573
|
] }) })
|
|
2769
3574
|
}
|
|
2770
3575
|
)
|
|
@@ -2843,13 +3648,13 @@ var _DoneBlock = ({
|
|
|
2843
3648
|
message = "Personalizing your experience\u2026"
|
|
2844
3649
|
}) => {
|
|
2845
3650
|
const t = useOnboardingTheme();
|
|
2846
|
-
return /* @__PURE__ */ jsxs(View, { style: [
|
|
3651
|
+
return /* @__PURE__ */ jsxs(View, { style: [styles16.center, { gap: t.spacing.sm, padding: t.spacing.lg }], children: [
|
|
2847
3652
|
/* @__PURE__ */ jsx(Text, { style: [headingStyle(t.fonts), { color: t.colors.success, textAlign: "center" }], children: title }),
|
|
2848
3653
|
/* @__PURE__ */ jsx(Text, { style: [bodyStyle(t.fonts), { color: t.colors.textMuted, textAlign: "center" }], children: message })
|
|
2849
3654
|
] });
|
|
2850
3655
|
};
|
|
2851
|
-
var DoneBlock =
|
|
2852
|
-
var
|
|
3656
|
+
var DoneBlock = React18.memo(_DoneBlock);
|
|
3657
|
+
var styles16 = StyleSheet.create({
|
|
2853
3658
|
center: { flex: 1, alignItems: "center", justifyContent: "center" }
|
|
2854
3659
|
});
|
|
2855
3660
|
|
|
@@ -2928,25 +3733,25 @@ var _CenteredModal = forwardRef(
|
|
|
2928
3733
|
/* @__PURE__ */ jsx(
|
|
2929
3734
|
Animated.View,
|
|
2930
3735
|
{
|
|
2931
|
-
style: [
|
|
3736
|
+
style: [styles17.backdrop, { opacity: backdropOpacity }],
|
|
2932
3737
|
pointerEvents: "none"
|
|
2933
3738
|
}
|
|
2934
3739
|
),
|
|
2935
3740
|
/* @__PURE__ */ jsx(
|
|
2936
3741
|
Pressable,
|
|
2937
3742
|
{
|
|
2938
|
-
style:
|
|
3743
|
+
style: styles17.fill,
|
|
2939
3744
|
onPress: onBackdrop,
|
|
2940
3745
|
accessibilityRole: "button",
|
|
2941
3746
|
accessibilityLabel: "Dismiss",
|
|
2942
|
-
children: /* @__PURE__ */ jsx(SafeAreaView, { style:
|
|
2943
|
-
}, style:
|
|
3747
|
+
children: /* @__PURE__ */ jsx(SafeAreaView, { style: styles17.center, pointerEvents: "box-none", children: /* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
3748
|
+
}, style: styles17.cardWrap, children: /* @__PURE__ */ jsx(
|
|
2944
3749
|
Animated.View,
|
|
2945
3750
|
{
|
|
2946
3751
|
accessibilityViewIsModal: true,
|
|
2947
3752
|
accessibilityRole: "alert",
|
|
2948
3753
|
style: [
|
|
2949
|
-
|
|
3754
|
+
styles17.card,
|
|
2950
3755
|
{
|
|
2951
3756
|
backgroundColor: theme.colors.surface,
|
|
2952
3757
|
borderRadius: theme.radius.lg,
|
|
@@ -2967,8 +3772,8 @@ var _CenteredModal = forwardRef(
|
|
|
2967
3772
|
}
|
|
2968
3773
|
);
|
|
2969
3774
|
_CenteredModal.displayName = "CenteredModal";
|
|
2970
|
-
var CenteredModal =
|
|
2971
|
-
var
|
|
3775
|
+
var CenteredModal = React18.memo(_CenteredModal);
|
|
3776
|
+
var styles17 = StyleSheet.create({
|
|
2972
3777
|
fill: { flex: 1 },
|
|
2973
3778
|
backdrop: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, backgroundColor: "#000" },
|
|
2974
3779
|
center: { flex: 1, alignItems: "center", justifyContent: "center", padding: 24 },
|
|
@@ -3001,10 +3806,10 @@ var readEnabled = (raw) => {
|
|
|
3001
3806
|
return { enabled: true };
|
|
3002
3807
|
};
|
|
3003
3808
|
var parseWireFeatures = (raw) => {
|
|
3004
|
-
var
|
|
3809
|
+
var _a2;
|
|
3005
3810
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return defaultWireFeatures;
|
|
3006
3811
|
const src = raw;
|
|
3007
|
-
const modeRaw = (
|
|
3812
|
+
const modeRaw = (_a2 = src.onboarding) == null ? void 0 : _a2.mode;
|
|
3008
3813
|
const mode = typeof modeRaw === "string" && VALID_MODES.includes(modeRaw) ? modeRaw : "ai";
|
|
3009
3814
|
return {
|
|
3010
3815
|
coachmarks: readEnabled(src.coachmarks),
|
|
@@ -3061,10 +3866,10 @@ var writeCachedFeatures = (storage, key, features) => {
|
|
|
3061
3866
|
// src/features/fetchWireFeatures.ts
|
|
3062
3867
|
var DEFAULT_TIMEOUT_MS = 4e3;
|
|
3063
3868
|
var failOpen = async (storage, key) => {
|
|
3064
|
-
var
|
|
3869
|
+
var _a2;
|
|
3065
3870
|
if (!storage) return defaultWireFeatures;
|
|
3066
|
-
const
|
|
3067
|
-
return (
|
|
3871
|
+
const cached2 = await readCachedFeatures(storage, key);
|
|
3872
|
+
return (_a2 = cached2 == null ? void 0 : cached2.features) != null ? _a2 : defaultWireFeatures;
|
|
3068
3873
|
};
|
|
3069
3874
|
var fetchWithTimeout = async (url, apiKey, timeoutMs) => {
|
|
3070
3875
|
const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
|
|
@@ -3141,17 +3946,17 @@ var WireFeaturesProvider = ({
|
|
|
3141
3946
|
WireFeaturesProvider.displayName = "WireFeaturesProvider";
|
|
3142
3947
|
var useWireFeaturesContext = () => useContext(WireFeaturesContext);
|
|
3143
3948
|
var useResolvedFeatures = (options) => {
|
|
3144
|
-
var
|
|
3949
|
+
var _a2, _b, _c;
|
|
3145
3950
|
const ctx = useWireFeaturesContext();
|
|
3146
3951
|
const shouldFetch = !(options == null ? void 0 : options.flags) && ctx == null;
|
|
3147
3952
|
const fetched = useWireFeatures(shouldFetch ? options == null ? void 0 : options.config : void 0);
|
|
3148
|
-
return (_c = (_b = (
|
|
3953
|
+
return (_c = (_b = (_a2 = options == null ? void 0 : options.flags) != null ? _a2 : ctx) != null ? _b : fetched) != null ? _c : defaultWireFeatures;
|
|
3149
3954
|
};
|
|
3150
3955
|
|
|
3151
3956
|
// src/config/wireConfigFromEnv.ts
|
|
3152
3957
|
var wireConfigFromEnv = (overrides) => {
|
|
3153
|
-
var
|
|
3154
|
-
const apiKey = (
|
|
3958
|
+
var _a2, _b, _c, _d;
|
|
3959
|
+
const apiKey = (_a2 = overrides == null ? void 0 : overrides.apiKey) != null ? _a2 : process.env.EXPO_PUBLIC_WIREAI_API_KEY;
|
|
3155
3960
|
const serverUrl = (_b = overrides == null ? void 0 : overrides.serverUrl) != null ? _b : process.env.EXPO_PUBLIC_WIREAI_SERVER_URL;
|
|
3156
3961
|
const appId = (_d = (_c = overrides == null ? void 0 : overrides.appId) != null ? _c : process.env.EXPO_PUBLIC_WIREAI_APP_ID) != null ? _d : "default";
|
|
3157
3962
|
if (!apiKey || !serverUrl) return null;
|
|
@@ -3165,10 +3970,10 @@ var wireConfigFromEnv = (overrides) => {
|
|
|
3165
3970
|
|
|
3166
3971
|
// src/config/onboardingFlag.ts
|
|
3167
3972
|
var isOnboardingEnabled = (opts) => {
|
|
3168
|
-
var
|
|
3973
|
+
var _a2;
|
|
3169
3974
|
const transportPresent = wireConfigFromEnv(opts == null ? void 0 : opts.config) !== null;
|
|
3170
3975
|
if (!transportPresent) return false;
|
|
3171
|
-
return (
|
|
3976
|
+
return (_a2 = opts == null ? void 0 : opts.remote) != null ? _a2 : true;
|
|
3172
3977
|
};
|
|
3173
3978
|
|
|
3174
3979
|
// src/analytics/analyticsEvent.ts
|
|
@@ -3264,7 +4069,7 @@ var namespaceExtra = (extra) => {
|
|
|
3264
4069
|
return out;
|
|
3265
4070
|
};
|
|
3266
4071
|
var resolveUserContext = (ctx = {}, opts = {}) => {
|
|
3267
|
-
var
|
|
4072
|
+
var _a2;
|
|
3268
4073
|
const result = {};
|
|
3269
4074
|
const bucket = {};
|
|
3270
4075
|
const userId = sanitizeUserId(ctx.userId);
|
|
@@ -3274,7 +4079,7 @@ var resolveUserContext = (ctx = {}, opts = {}) => {
|
|
|
3274
4079
|
result.deviceKey = deviceKey;
|
|
3275
4080
|
bucket.device_key = deviceKey;
|
|
3276
4081
|
}
|
|
3277
|
-
const appVersion = (
|
|
4082
|
+
const appVersion = (_a2 = cleanString(ctx.appVersion)) != null ? _a2 : cleanString(opts.autoAppVersion);
|
|
3278
4083
|
if (appVersion) {
|
|
3279
4084
|
result.appVersion = appVersion;
|
|
3280
4085
|
bucket.app_version = appVersion;
|
|
@@ -3293,6 +4098,15 @@ var resolveUserContext = (ctx = {}, opts = {}) => {
|
|
|
3293
4098
|
return result;
|
|
3294
4099
|
};
|
|
3295
4100
|
|
|
4101
|
+
// src/context/deviceId.ts
|
|
4102
|
+
var AUTO_DEVICE_ID_PREFIX = "wdev_";
|
|
4103
|
+
var deviceIdStorageKey = (appId) => `wireai:analytics:deviceKey:${appId != null ? appId : "default"}`;
|
|
4104
|
+
var randomChunk = () => Math.floor(Math.random() * 4294967296).toString(36).padStart(6, "0");
|
|
4105
|
+
var mintDeviceId = () => {
|
|
4106
|
+
const time = Date.now().toString(36);
|
|
4107
|
+
return `${AUTO_DEVICE_ID_PREFIX}${time}_${randomChunk()}${randomChunk()}`;
|
|
4108
|
+
};
|
|
4109
|
+
|
|
3296
4110
|
// src/session-analytics/reportSessionStart.ts
|
|
3297
4111
|
var SESSION_STARTED_EVENT = "app.session_started";
|
|
3298
4112
|
var _emitted = /* @__PURE__ */ new Set();
|
|
@@ -3301,10 +4115,10 @@ var resetSessionStartGuard = () => {
|
|
|
3301
4115
|
_emitted.clear();
|
|
3302
4116
|
};
|
|
3303
4117
|
var reportSessionStart = (opts) => {
|
|
3304
|
-
var
|
|
4118
|
+
var _a2;
|
|
3305
4119
|
const target = opts.target;
|
|
3306
4120
|
if (!opts.sink && !(target == null ? void 0 : target.serverUrl)) return;
|
|
3307
|
-
const sessionId = (
|
|
4121
|
+
const sessionId = (_a2 = opts.sessionId) != null ? _a2 : makeSessionId();
|
|
3308
4122
|
setCurrentSessionId(sessionId);
|
|
3309
4123
|
if (opts.once !== false) {
|
|
3310
4124
|
if (_emitted.has(sessionId)) return;
|
|
@@ -3356,11 +4170,11 @@ var useSessionStart = (config, options = {}) => {
|
|
|
3356
4170
|
latest.current = { config, options };
|
|
3357
4171
|
useEffect(() => {
|
|
3358
4172
|
const fire = () => {
|
|
3359
|
-
var
|
|
4173
|
+
var _a2, _b;
|
|
3360
4174
|
const { config: cfg, options: opts } = latest.current;
|
|
3361
4175
|
if (!(cfg == null ? void 0 : cfg.serverUrl)) return;
|
|
3362
4176
|
if (opts.enabled === false) return;
|
|
3363
|
-
const target = { serverUrl: cfg.serverUrl, apiKey: (
|
|
4177
|
+
const target = { serverUrl: cfg.serverUrl, apiKey: (_a2 = cfg.apiKey) != null ? _a2 : "" };
|
|
3364
4178
|
const device = collectDeviceContext();
|
|
3365
4179
|
if (cfg.appVersion) device.appVersion = cfg.appVersion;
|
|
3366
4180
|
reportSessionStart({
|
|
@@ -3411,7 +4225,7 @@ var resetFirstOpenLatch = () => {
|
|
|
3411
4225
|
_firstOpenLatched.clear();
|
|
3412
4226
|
};
|
|
3413
4227
|
var buildLifecycleEvent = (questionKey, opts) => {
|
|
3414
|
-
var
|
|
4228
|
+
var _a2;
|
|
3415
4229
|
const userContext = {};
|
|
3416
4230
|
if (opts.deviceKey) userContext.device_key = opts.deviceKey;
|
|
3417
4231
|
if (typeof opts.sessionCount === "number" && Number.isFinite(opts.sessionCount)) {
|
|
@@ -3423,7 +4237,7 @@ var buildLifecycleEvent = (questionKey, opts) => {
|
|
|
3423
4237
|
const event = {
|
|
3424
4238
|
event_type: "app_event",
|
|
3425
4239
|
question_key: questionKey,
|
|
3426
|
-
session_id: (
|
|
4240
|
+
session_id: (_a2 = opts.sessionId) != null ? _a2 : makeSessionId()
|
|
3427
4241
|
};
|
|
3428
4242
|
const userId = sanitizeUserId(opts.userId);
|
|
3429
4243
|
if (userId) event.user_id = userId;
|
|
@@ -3456,8 +4270,8 @@ var emitFirstOpen = (opts) => {
|
|
|
3456
4270
|
routeLifecycleEvent(buildLifecycleEvent(FIRST_OPEN_EVENT, opts), opts);
|
|
3457
4271
|
};
|
|
3458
4272
|
var reportFirstOpen = (opts) => {
|
|
3459
|
-
var
|
|
3460
|
-
const appId = (
|
|
4273
|
+
var _a2;
|
|
4274
|
+
const appId = (_a2 = opts.appId) != null ? _a2 : "default";
|
|
3461
4275
|
if (_firstOpenLatched.has(appId)) return;
|
|
3462
4276
|
_firstOpenLatched.add(appId);
|
|
3463
4277
|
const storage = opts.storage;
|
|
@@ -3534,10 +4348,10 @@ var parsePersisted2 = (raw) => {
|
|
|
3534
4348
|
}
|
|
3535
4349
|
};
|
|
3536
4350
|
var createEventQueue = (options) => {
|
|
3537
|
-
var
|
|
4351
|
+
var _a2, _b, _c, _d, _e, _f, _g;
|
|
3538
4352
|
const target = options.target;
|
|
3539
4353
|
const storage = options.storage;
|
|
3540
|
-
const key = (_b = options.storageKey) != null ? _b : `wireai:evtq:${(
|
|
4354
|
+
const key = (_b = options.storageKey) != null ? _b : `wireai:evtq:${(_a2 = options.appId) != null ? _a2 : "default"}`;
|
|
3541
4355
|
const maxSize = (_c = options.maxSize) != null ? _c : DEFAULTS.maxSize;
|
|
3542
4356
|
const batchSize = (_d = options.batchSize) != null ? _d : DEFAULTS.batchSize;
|
|
3543
4357
|
const baseBackoffMs = (_e = options.baseBackoffMs) != null ? _e : DEFAULTS.baseBackoffMs;
|
|
@@ -3556,13 +4370,13 @@ var createEventQueue = (options) => {
|
|
|
3556
4370
|
}
|
|
3557
4371
|
};
|
|
3558
4372
|
const stamp = (event) => {
|
|
3559
|
-
var
|
|
4373
|
+
var _a3;
|
|
3560
4374
|
const env = resolveEnvelope();
|
|
3561
4375
|
const stamped = { ...event };
|
|
3562
4376
|
if (!env) return stamped;
|
|
3563
4377
|
if (!stamped.device && env.device) stamped.device = env.device;
|
|
3564
4378
|
if (!stamped.session_id && env.sessionId) stamped.session_id = env.sessionId;
|
|
3565
|
-
const uc = { ...(
|
|
4379
|
+
const uc = { ...(_a3 = stamped.user_context) != null ? _a3 : {} };
|
|
3566
4380
|
if (env.appVersion && uc.app_version === void 0) uc.app_version = env.appVersion;
|
|
3567
4381
|
if (env.appBuild && uc.app_build === void 0) uc.app_build = env.appBuild;
|
|
3568
4382
|
if (env.networkType && uc.network_type === void 0) uc.network_type = env.networkType;
|
|
@@ -3711,15 +4525,15 @@ var useLifecycleEvents = (config, options = {}) => {
|
|
|
3711
4525
|
latest.current = { config, options };
|
|
3712
4526
|
const queueRef = useRef(void 0);
|
|
3713
4527
|
useEffect(() => {
|
|
3714
|
-
var
|
|
4528
|
+
var _a2;
|
|
3715
4529
|
const resolveSink = () => {
|
|
3716
|
-
var
|
|
4530
|
+
var _a3, _b;
|
|
3717
4531
|
const { config: cfg, options: opts } = latest.current;
|
|
3718
4532
|
if (opts.sink) return opts.sink;
|
|
3719
4533
|
if (!(cfg == null ? void 0 : cfg.serverUrl)) return void 0;
|
|
3720
4534
|
if (!queueRef.current) {
|
|
3721
4535
|
queueRef.current = createEventQueue({
|
|
3722
|
-
target: { serverUrl: cfg.serverUrl, apiKey: (
|
|
4536
|
+
target: { serverUrl: cfg.serverUrl, apiKey: (_a3 = cfg.apiKey) != null ? _a3 : "" },
|
|
3723
4537
|
storage: cfg.storage,
|
|
3724
4538
|
// Dedicated key so the hook's internal queue never collides with a host's main queue.
|
|
3725
4539
|
storageKey: `wireai:evtq:lifecycle:${(_b = cfg.appId) != null ? _b : "default"}`,
|
|
@@ -3729,8 +4543,8 @@ var useLifecycleEvents = (config, options = {}) => {
|
|
|
3729
4543
|
return queueRef.current.enqueue;
|
|
3730
4544
|
};
|
|
3731
4545
|
const targetOf = (cfg) => {
|
|
3732
|
-
var
|
|
3733
|
-
return (cfg == null ? void 0 : cfg.serverUrl) ? { serverUrl: cfg.serverUrl, apiKey: (
|
|
4546
|
+
var _a3;
|
|
4547
|
+
return (cfg == null ? void 0 : cfg.serverUrl) ? { serverUrl: cfg.serverUrl, apiKey: (_a3 = cfg.apiKey) != null ? _a3 : "" } : void 0;
|
|
3734
4548
|
};
|
|
3735
4549
|
{
|
|
3736
4550
|
const { config: cfg, options: opts } = latest.current;
|
|
@@ -3745,7 +4559,7 @@ var useLifecycleEvents = (config, options = {}) => {
|
|
|
3745
4559
|
userId: opts.userId,
|
|
3746
4560
|
deviceKey: opts.deviceKey,
|
|
3747
4561
|
sessionCount: opts.sessionCount,
|
|
3748
|
-
appVersion: (
|
|
4562
|
+
appVersion: (_a2 = cfg == null ? void 0 : cfg.appVersion) != null ? _a2 : device.appVersion,
|
|
3749
4563
|
platform: Platform.OS,
|
|
3750
4564
|
device,
|
|
3751
4565
|
meta: opts.meta
|
|
@@ -3753,7 +4567,7 @@ var useLifecycleEvents = (config, options = {}) => {
|
|
|
3753
4567
|
}
|
|
3754
4568
|
}
|
|
3755
4569
|
const fireSession = () => {
|
|
3756
|
-
var
|
|
4570
|
+
var _a3;
|
|
3757
4571
|
const { config: cfg, options: opts } = latest.current;
|
|
3758
4572
|
if (opts.enabled === false) return;
|
|
3759
4573
|
if (!(cfg == null ? void 0 : cfg.serverUrl) && !opts.sink) return;
|
|
@@ -3766,7 +4580,7 @@ var useLifecycleEvents = (config, options = {}) => {
|
|
|
3766
4580
|
userId: opts.userId,
|
|
3767
4581
|
deviceKey: opts.deviceKey,
|
|
3768
4582
|
sessionCount: opts.sessionCount,
|
|
3769
|
-
appVersion: (
|
|
4583
|
+
appVersion: (_a3 = cfg == null ? void 0 : cfg.appVersion) != null ? _a3 : device.appVersion,
|
|
3770
4584
|
platform: Platform.OS,
|
|
3771
4585
|
device,
|
|
3772
4586
|
meta: opts.meta
|
|
@@ -3792,6 +4606,6 @@ var useLifecycleEvents = (config, options = {}) => {
|
|
|
3792
4606
|
}, []);
|
|
3793
4607
|
};
|
|
3794
4608
|
|
|
3795
|
-
export { AnimatedSparkle, BACKGROUND_SESSION_MS, CardHandoff, CenteredModal, ChipSelectCard, CompletionView, DEFAULT_FEATURES_TTL_MS, DEFAULT_SESSION_TTL_MS, DemoOnboarding, DoneBlock, EXTRA_KEY_PREFIX, ErrorBlock, FIRST_OPEN_EVENT, IllustrationProvider, InterstitialCard, LoadingBlock, LoadingScreen, NumberStepperCard, Button as OnboardingButton, OnboardingFlow, OnboardingScaffold, OnboardingThemeProvider, RESERVED_USER_CONTEXT_KEYS, SESSION_STARTED_EVENT, SelectionCard, StatusCard, StepProgress, TextInputCard, USER_ID_MAX_LENGTH, WIRE_ONBOARDING_EVENTS, WireFeaturesProvider, WireOnboarding, attributionMetadata, clearPersistedSession, collectDeviceContext, defaultIllustrations, defaultOnboardingTheme, defaultWireFeatures, deriveAnswers, detectAppVersion, featuresCacheKey, featuresEqual, fetchWireFeatures, firstOpenStorageKey, getCurrentSessionId, hashEmailFnv1a, identifyOnboarding, isFeaturesFresh, isOnboardingEnabled, isWireScalar, loadPersistedSession, makeSessionId, mergeTheme, motionSpec_exports as motionSpec, namespaceExtra, onboardingComponents, parseWireFeatures, peekPersistedSession, readCachedFeatures, readProgress, reportClientEvent, reportClientEvents, reportFirstOpen, reportSessionStart, resetCurrentSessionId, resetFirstOpenLatch, resetSessionStartGuard, resolveUserContext, sanitizeUserId, savePersistedSession, sessionStorageKey, setCurrentSessionId, themeFromBrand, toAnalyticsEvent, useIllustration, useLifecycleEvents, useOnboardingTheme, useReducedMotion, useResolvedFeatures, useSessionStart, useWireFeatures, useWireFeaturesContext, wireConfigFromEnv, wireLifecycleEvents, writeCachedFeatures };
|
|
4609
|
+
export { AUTO_DEVICE_ID_PREFIX, AnimatedSparkle, BACKGROUND_SESSION_MS, CardGridSelectCard, CardHandoff, CenteredModal, ChipSelectCard, CompletionView, DEFAULT_FEATURES_TTL_MS, DEFAULT_SESSION_TTL_MS, DemoOnboarding, DoneBlock, EXTRA_KEY_PREFIX, ErrorBlock, FIRST_OPEN_EVENT, IconRegistryProvider, IllustrationProvider, InterstitialCard, LoadingBlock, LoadingScreen, NumberStepperCard, Button as OnboardingButton, OnboardingFlow, OnboardingScaffold, OnboardingThemeProvider, RESERVED_USER_CONTEXT_KEYS, SESSION_STARTED_EVENT, SelectionCard, StatusCard, StepProgress, TextInputCard, USER_ID_MAX_LENGTH, WIRE_ICON_GLYPHS, WIRE_ICON_NAMES, WIRE_ONBOARDING_EVENTS, WireFeaturesProvider, WireIcon, WireOnboarding, attributionMetadata, clearPersistedSession, collectDeviceContext, defaultIllustrations, defaultOnboardingTheme, defaultWireFeatures, deriveAnswers, detectAppVersion, detectNativeModel, deviceIdStorageKey, featuresCacheKey, featuresEqual, fetchWireFeatures, firstOpenStorageKey, getCurrentSessionId, hashEmailFnv1a, identifyOnboarding, isFeaturesFresh, isOnboardingEnabled, isWireScalar, loadPersistedSession, lookupIconGlyph, makeSessionId, mergeTheme, mintDeviceId, motionSpec_exports as motionSpec, namespaceExtra, onboardingComponents, parseWireFeatures, peekPersistedSession, readCachedFeatures, readProgress, reportClientEvent, reportClientEvents, reportFirstOpen, reportSessionStart, resetCurrentSessionId, resetFirstOpenLatch, resetSessionStartGuard, resolveUserContext, sanitizeUserId, savePersistedSession, sessionStorageKey, setCurrentSessionId, themeFromBrand, toAnalyticsEvent, useHostIcon, useIllustration, useLifecycleEvents, useOnboardingTheme, useReducedMotion, useResolvedFeatures, useSessionStart, useWireFeatures, useWireFeaturesContext, wireConfigFromEnv, wireLifecycleEvents, writeCachedFeatures };
|
|
3796
4610
|
//# sourceMappingURL=index.mjs.map
|
|
3797
4611
|
//# sourceMappingURL=index.mjs.map
|