@wireai/activation 0.13.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/AGENTS.md +4 -3
  2. package/CHANGELOG.md +228 -4
  3. package/README.md +16 -2
  4. package/dist/analytics/index.d.mts +4 -4
  5. package/dist/analytics/index.d.ts +4 -4
  6. package/dist/analytics/index.js +104 -470
  7. package/dist/analytics/index.js.map +1 -1
  8. package/dist/analytics/index.mjs +102 -468
  9. package/dist/analytics/index.mjs.map +1 -1
  10. package/dist/coachmarks/index.d.mts +14 -1
  11. package/dist/coachmarks/index.d.ts +14 -1
  12. package/dist/coachmarks/index.js +58 -14
  13. package/dist/coachmarks/index.js.map +1 -1
  14. package/dist/coachmarks/index.mjs +58 -14
  15. package/dist/coachmarks/index.mjs.map +1 -1
  16. package/dist/{currentSession-ClkLjcJ0.d.mts → currentSession-BoWtr3Jp.d.mts} +2 -2
  17. package/dist/{currentSession-DOVZEWJl.d.ts → currentSession-CCOMlaQ2.d.ts} +2 -2
  18. package/dist/{decision-Bl_M2y3r.d.mts → decision-Cjw0jbEj.d.mts} +1 -1
  19. package/dist/{decision-Cau5KmP6.d.ts → decision-GfpXAsk_.d.ts} +1 -1
  20. package/dist/index.d.mts +25 -2
  21. package/dist/index.d.ts +25 -2
  22. package/dist/index.js +220 -573
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.mjs +217 -570
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/questionnaire/index.d.mts +42 -10
  27. package/dist/questionnaire/index.d.ts +42 -10
  28. package/dist/questionnaire/index.js +45 -13
  29. package/dist/questionnaire/index.js.map +1 -1
  30. package/dist/questionnaire/index.mjs +45 -13
  31. package/dist/questionnaire/index.mjs.map +1 -1
  32. package/dist/reviews/index.d.mts +4 -4
  33. package/dist/reviews/index.d.ts +4 -4
  34. package/dist/reviews/index.js +27 -7
  35. package/dist/reviews/index.js.map +1 -1
  36. package/dist/reviews/index.mjs +27 -7
  37. package/dist/reviews/index.mjs.map +1 -1
  38. package/dist/showcase/index.js +7 -2
  39. package/dist/showcase/index.js.map +1 -1
  40. package/dist/showcase/index.mjs +7 -2
  41. package/dist/showcase/index.mjs.map +1 -1
  42. package/dist/{transport-DsRe4epC.d.ts → transport-CefdERPs.d.mts} +44 -5
  43. package/dist/{transport-CF_eHwzC.d.mts → transport-DFuPyCoJ.d.ts} +44 -5
  44. package/dist/{types-Buj9Lw9t.d.ts → types-UVYt9BJe.d.ts} +41 -1
  45. package/dist/{types-CNUqMK0D.d.mts → types-l2tfg23P.d.mts} +41 -1
  46. package/package.json +4 -1
  47. package/src/OnboardingFlow.tsx +44 -15
  48. package/src/WireOnboarding.tsx +7 -6
  49. package/src/activation/wireActivation.ts +3 -3
  50. package/src/analytics/analyticsFacade.ts +2 -2
  51. package/src/analytics/eventQueue.ts +83 -20
  52. package/src/cards/CardGridSelectCard.tsx +1 -1
  53. package/src/cards/ChipSelectCard.tsx +2 -2
  54. package/src/cards/SelectionCard.tsx +1 -1
  55. package/src/coachmarks/runtime.ts +62 -2
  56. package/src/coachmarks/useCoachmarkTour.ts +62 -14
  57. package/src/context/deviceId.ts +4 -4
  58. package/src/features/WireFeaturesProvider.tsx +4 -1
  59. package/src/identity/userIdentity.ts +1 -1
  60. package/src/questionnaire/QuestionnaireGate.tsx +90 -10
  61. package/src/questionnaire/index.ts +9 -1
  62. package/src/questionnaire/transport.ts +46 -11
  63. package/src/reviews/ReviewGate.tsx +61 -6
  64. package/src/reviews/index.ts +10 -1
  65. package/src/reviews/transport.ts +58 -12
  66. package/src/session-analytics/useLifecycleEvents.ts +1 -1
  67. package/src/theme/ThemeContext.tsx +42 -1
  68. package/src/types.ts +1 -1
  69. package/src/utils/submitResult.ts +39 -0
@@ -145,7 +145,7 @@ var useWireFeatures = (config) => {
145
145
  return flags;
146
146
  };
147
147
  var CONTEXT_SYMBOL = /* @__PURE__ */ Symbol.for("wireai.features.context");
148
- var globalObj = global;
148
+ var globalObj = globalThis;
149
149
  if (!globalObj[CONTEXT_SYMBOL]) {
150
150
  globalObj[CONTEXT_SYMBOL] = createContext(null);
151
151
  }
@@ -169,10 +169,36 @@ var coachmarkRuntime = () => {
169
169
  runtimeGlobal[COACHMARK_RUNTIME_SLOT] = created;
170
170
  return created;
171
171
  };
172
+ var enabledListeners = () => {
173
+ const runtime = coachmarkRuntime();
174
+ if (!runtime.listeners) runtime.listeners = /* @__PURE__ */ new Set();
175
+ return runtime.listeners;
176
+ };
177
+ var notifyCoachmarksEnabled = () => {
178
+ if (enabledListeners().size === 0) return;
179
+ void Promise.resolve().then(() => {
180
+ for (const listener of [...enabledListeners()]) {
181
+ try {
182
+ listener();
183
+ } catch {
184
+ }
185
+ }
186
+ });
187
+ };
172
188
  var setCoachmarksEnabled = (value) => {
173
- coachmarkRuntime().coachmarksEnabled = value;
189
+ const runtime = coachmarkRuntime();
190
+ if (runtime.coachmarksEnabled === value) return;
191
+ runtime.coachmarksEnabled = value;
192
+ notifyCoachmarksEnabled();
174
193
  };
175
194
  var areCoachmarksEnabled = () => coachmarkRuntime().coachmarksEnabled;
195
+ var subscribeCoachmarksEnabled = (listener) => {
196
+ const listeners2 = enabledListeners();
197
+ listeners2.add(listener);
198
+ return () => {
199
+ listeners2.delete(listener);
200
+ };
201
+ };
176
202
  var setCoachmarkStorage = (storage) => {
177
203
  coachmarkRuntime().storage = storage;
178
204
  };
@@ -286,7 +312,12 @@ var defaultOnboardingTheme = {
286
312
  var mergeTheme = (override) => {
287
313
  return defaultOnboardingTheme;
288
314
  };
289
- var OnboardingThemeContext = createContext(null);
315
+ var THEME_CONTEXT_SLOT = /* @__PURE__ */ Symbol.for("@wireai/activation:themeContext");
316
+ var themeGlobal = globalThis;
317
+ if (!themeGlobal[THEME_CONTEXT_SLOT]) {
318
+ themeGlobal[THEME_CONTEXT_SLOT] = createContext(null);
319
+ }
320
+ var OnboardingThemeContext = themeGlobal[THEME_CONTEXT_SLOT];
290
321
  var useOnboardingTheme = () => {
291
322
  const ctx = useContext(OnboardingThemeContext);
292
323
  return ctx != null ? ctx : mergeTheme();
@@ -831,26 +862,39 @@ var useCoachmarkTour = (steps, {
831
862
  const lastShownStepIdRef = useRef(null);
832
863
  const callbacksRef = useRef({ onStepShown, onStepEngaged, onStepDismissed });
833
864
  callbacksRef.current = { onStepShown, onStepEngaged, onStepDismissed };
834
- const finish = useCallback(() => {
835
- if (finishedRef.current) return;
836
- finishedRef.current = true;
837
- if (showOnce) markSeenGate(coachmarkGateKey(tourId));
838
- coachmarkOverlay.hide();
839
- setActiveIndex(null);
840
- onComplete == null ? void 0 : onComplete();
841
- }, [onComplete, showOnce, tourId]);
865
+ const coachmarksOn = useSyncExternalStore(
866
+ subscribeCoachmarksEnabled,
867
+ areCoachmarksEnabled,
868
+ areCoachmarksEnabled
869
+ );
870
+ const exit = useCallback(
871
+ (writeGate) => {
872
+ if (finishedRef.current) return;
873
+ finishedRef.current = true;
874
+ if (writeGate && showOnce) markSeenGate(coachmarkGateKey(tourId));
875
+ coachmarkOverlay.hide();
876
+ setActiveIndex(null);
877
+ onComplete == null ? void 0 : onComplete();
878
+ },
879
+ [onComplete, showOnce, tourId]
880
+ );
881
+ const finish = useCallback(() => exit(true), [exit]);
842
882
  useEffect(() => {
843
883
  if (!enabled || startedRef.current) return void 0;
844
- if (!areCoachmarksEnabled()) return void 0;
884
+ if (!coachmarksOn) return void 0;
845
885
  if (showOnce && hasSeenGate(coachmarkGateKey(tourId))) return void 0;
846
886
  const timer = setTimeout(() => {
847
887
  startedRef.current = true;
848
888
  setActiveIndex(0);
849
889
  }, startDelayMs);
850
890
  return () => clearTimeout(timer);
851
- }, [enabled, startDelayMs, showOnce, tourId]);
891
+ }, [enabled, coachmarksOn, startDelayMs, showOnce, tourId]);
852
892
  useEffect(() => {
853
893
  if (activeIndex === null) return void 0;
894
+ if (!coachmarksOn) {
895
+ exit(false);
896
+ return void 0;
897
+ }
854
898
  if (!enabled) {
855
899
  if (startedRef.current && !finishedRef.current) coachmarkOverlay.hide();
856
900
  return void 0;
@@ -900,7 +944,7 @@ var useCoachmarkTour = (steps, {
900
944
  return () => {
901
945
  cancelled = true;
902
946
  };
903
- }, [activeIndex, steps, finish, enabled]);
947
+ }, [activeIndex, steps, finish, exit, enabled, coachmarksOn]);
904
948
  useEffect(
905
949
  () => () => {
906
950
  if (!finishedRef.current) coachmarkOverlay.hide();