@magicfeedback/popup-sdk 1.2.0 → 1.4.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.
@@ -162,6 +162,15 @@ interface DeepdotsInitParams {
162
162
  * `setContactAttributes` after init (sends only when values changed from the last sync).
163
163
  */
164
164
  contactAttributes?: Record<string, string | number | boolean>;
165
+ /**
166
+ * Whether the SDK renders the popup "modal" (card + backdrop + positioning) around the survey.
167
+ * Default `true`. Only affects React Native (the survey WebView HTML); the web DOM popup is
168
+ * unaffected. With `false` the survey is delivered transparent and edge-to-edge so the host
169
+ * mounts its own Modal/container and controls the styling — avoids the "double modal" when the
170
+ * host already wraps the WebView. The survey stays fully functional (bridge, form, nav buttons,
171
+ * close). Ver `ReactNativePopupRenderer`.
172
+ */
173
+ renderChrome?: boolean;
165
174
  }
166
175
  /**
167
176
  * Options for configuring survey triggers
@@ -243,7 +252,7 @@ interface PopupRenderer {
243
252
  /** Preparar recursos si aplica */
244
253
  init?(): void;
245
254
  /** Mostrar popup */
246
- show(surveyId: string, productId: string, actions: PopupActions | undefined, emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string): void;
255
+ show(surveyId: string, productId: string, actions: PopupActions | undefined, emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string, renderChrome?: boolean): void;
247
256
  /** Ocultar popup */
248
257
  hide(): void;
249
258
  }
@@ -323,6 +332,8 @@ declare class DeepdotsPopups {
323
332
  private deferredExitTimers;
324
333
  private baseUrl;
325
334
  private env;
335
+ /** Si el SDK pinta el "modal" del popup (RN). Default true; false = el host lo envuelve. */
336
+ private renderChrome;
326
337
  /** Identidad + sesión (Fase 1 tracking). Null hasta init(). */
327
338
  private tracking;
328
339
  /** Capa de analytics (canal separado del feedback). Null hasta init(). */
@@ -394,6 +405,15 @@ declare class DeepdotsPopups {
394
405
  trackFindabilityFriction(frictionTopic: string, params?: Record<string, unknown>): void;
395
406
  /** Funnel: un paso del embudo, correlacionado por `taskId`. El backend reconstruye conversión/drop-off/tiempo. */
396
407
  trackFunnelStep(funnel: string, step: string, taskId: string, params?: Record<string, unknown>): void;
408
+ /**
409
+ * Product Effectiveness: una interacción significativa del usuario (`interaction_type` es la
410
+ * dimensión de agrupación, p. ej. `get_help`, `homepage`, `contact_support`).
411
+ *
412
+ * Existe como evento RESERVADO para que la convención no la invente cada host: un `track()`
413
+ * custom acaba como `deepdots_event_…` y no lo cuenta la analítica de effectiveness.
414
+ * Un `interactionType` vacío se descarta con warning (no aporta dato agrupable).
415
+ */
416
+ trackMeaningfulInteraction(interactionType: string, params?: Record<string, unknown>): void;
397
417
  /**
398
418
  * Messaging (#18–22): registra una etapa del funnel de una notificación (push/in-app).
399
419
  * No-op si tracking off. El evento se descarta (con warning) si el `channel` no es válido,
@@ -612,7 +632,7 @@ declare class ReactNativePopupRenderer implements PopupRenderer {
612
632
  private partialEmitted;
613
633
  constructor(options?: ReactNativeRendererOptions);
614
634
  init(): void;
615
- show(surveyId: string, productId: string, _actions: PopupActions | undefined, emit: EmitFn, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string): void;
635
+ show(surveyId: string, productId: string, actions: PopupActions | undefined, emit: EmitFn, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string, renderChrome?: boolean): void;
616
636
  hide(): void;
617
637
  /**
618
638
  * El host la conecta al `onMessage` del WebView. Traduce los mensajes del survey a
@@ -162,6 +162,15 @@ interface DeepdotsInitParams {
162
162
  * `setContactAttributes` after init (sends only when values changed from the last sync).
163
163
  */
164
164
  contactAttributes?: Record<string, string | number | boolean>;
165
+ /**
166
+ * Whether the SDK renders the popup "modal" (card + backdrop + positioning) around the survey.
167
+ * Default `true`. Only affects React Native (the survey WebView HTML); the web DOM popup is
168
+ * unaffected. With `false` the survey is delivered transparent and edge-to-edge so the host
169
+ * mounts its own Modal/container and controls the styling — avoids the "double modal" when the
170
+ * host already wraps the WebView. The survey stays fully functional (bridge, form, nav buttons,
171
+ * close). Ver `ReactNativePopupRenderer`.
172
+ */
173
+ renderChrome?: boolean;
165
174
  }
166
175
  /**
167
176
  * Options for configuring survey triggers
@@ -243,7 +252,7 @@ interface PopupRenderer {
243
252
  /** Preparar recursos si aplica */
244
253
  init?(): void;
245
254
  /** Mostrar popup */
246
- show(surveyId: string, productId: string, actions: PopupActions | undefined, emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string): void;
255
+ show(surveyId: string, productId: string, actions: PopupActions | undefined, emit: (type: DeepdotsEventType, surveyId: string, data?: Record<string, unknown>) => void, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string, renderChrome?: boolean): void;
247
256
  /** Ocultar popup */
248
257
  hide(): void;
249
258
  }
@@ -323,6 +332,8 @@ declare class DeepdotsPopups {
323
332
  private deferredExitTimers;
324
333
  private baseUrl;
325
334
  private env;
335
+ /** Si el SDK pinta el "modal" del popup (RN). Default true; false = el host lo envuelve. */
336
+ private renderChrome;
326
337
  /** Identidad + sesión (Fase 1 tracking). Null hasta init(). */
327
338
  private tracking;
328
339
  /** Capa de analytics (canal separado del feedback). Null hasta init(). */
@@ -394,6 +405,15 @@ declare class DeepdotsPopups {
394
405
  trackFindabilityFriction(frictionTopic: string, params?: Record<string, unknown>): void;
395
406
  /** Funnel: un paso del embudo, correlacionado por `taskId`. El backend reconstruye conversión/drop-off/tiempo. */
396
407
  trackFunnelStep(funnel: string, step: string, taskId: string, params?: Record<string, unknown>): void;
408
+ /**
409
+ * Product Effectiveness: una interacción significativa del usuario (`interaction_type` es la
410
+ * dimensión de agrupación, p. ej. `get_help`, `homepage`, `contact_support`).
411
+ *
412
+ * Existe como evento RESERVADO para que la convención no la invente cada host: un `track()`
413
+ * custom acaba como `deepdots_event_…` y no lo cuenta la analítica de effectiveness.
414
+ * Un `interactionType` vacío se descarta con warning (no aporta dato agrupable).
415
+ */
416
+ trackMeaningfulInteraction(interactionType: string, params?: Record<string, unknown>): void;
397
417
  /**
398
418
  * Messaging (#18–22): registra una etapa del funnel de una notificación (push/in-app).
399
419
  * No-op si tracking off. El evento se descarta (con warning) si el `channel` no es válido,
@@ -612,7 +632,7 @@ declare class ReactNativePopupRenderer implements PopupRenderer {
612
632
  private partialEmitted;
613
633
  constructor(options?: ReactNativeRendererOptions);
614
634
  init(): void;
615
- show(surveyId: string, productId: string, _actions: PopupActions | undefined, emit: EmitFn, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string): void;
635
+ show(surveyId: string, productId: string, actions: PopupActions | undefined, emit: EmitFn, onClose: () => void, env?: string, userId?: string, style?: PopupStyle, sessionId?: string, miniService?: string, analyticsFeedbackSessionId?: string, renderChrome?: boolean): void;
616
636
  hide(): void;
617
637
  /**
618
638
  * El host la conecta al `onMessage` del WebView. Traduce los mensajes del survey a