makethisbetter 1.10.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +49 -4
  2. package/dist/api/client.d.ts +9 -1
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/context/breadcrumbs.d.ts +1 -7
  5. package/dist/context/breadcrumbs.d.ts.map +1 -1
  6. package/dist/context/frustration-state.d.ts +12 -0
  7. package/dist/context/frustration-state.d.ts.map +1 -0
  8. package/dist/context/frustration-state.test.d.ts +2 -0
  9. package/dist/context/frustration-state.test.d.ts.map +1 -0
  10. package/dist/context/frustration.d.ts +5 -5
  11. package/dist/context/frustration.d.ts.map +1 -1
  12. package/dist/context/history-patch.d.ts +4 -0
  13. package/dist/context/history-patch.d.ts.map +1 -0
  14. package/dist/context/history-patch.test.d.ts +2 -0
  15. package/dist/context/history-patch.test.d.ts.map +1 -0
  16. package/dist/i18n/de.d.ts +2 -0
  17. package/dist/i18n/de.d.ts.map +1 -1
  18. package/dist/i18n/en.d.ts +2 -0
  19. package/dist/i18n/en.d.ts.map +1 -1
  20. package/dist/i18n/es.d.ts +2 -0
  21. package/dist/i18n/es.d.ts.map +1 -1
  22. package/dist/i18n/fr.d.ts +2 -0
  23. package/dist/i18n/fr.d.ts.map +1 -1
  24. package/dist/i18n/ja.d.ts +2 -0
  25. package/dist/i18n/ja.d.ts.map +1 -1
  26. package/dist/i18n/ko.d.ts +2 -0
  27. package/dist/i18n/ko.d.ts.map +1 -1
  28. package/dist/i18n/zh-CN.d.ts +2 -0
  29. package/dist/i18n/zh-CN.d.ts.map +1 -1
  30. package/dist/makethisbetter.cjs +54 -45
  31. package/dist/makethisbetter.cjs.map +1 -1
  32. package/dist/makethisbetter.esm.js +1080 -861
  33. package/dist/makethisbetter.esm.js.map +1 -1
  34. package/dist/makethisbetter.js +54 -45
  35. package/dist/makethisbetter.js.map +1 -1
  36. package/dist/popup/clarify.d.ts +12 -1
  37. package/dist/popup/clarify.d.ts.map +1 -1
  38. package/dist/record/session.d.ts +6 -1
  39. package/dist/record/session.d.ts.map +1 -1
  40. package/dist/record/session.destroy-during-load.test.d.ts +2 -0
  41. package/dist/record/session.destroy-during-load.test.d.ts.map +1 -0
  42. package/dist/screenshot/capture.d.ts.map +1 -1
  43. package/dist/styles.d.ts +2 -1
  44. package/dist/styles.d.ts.map +1 -1
  45. package/dist/types.d.ts +6 -1
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/widget/controller.d.ts +0 -1
  48. package/dist/widget/controller.d.ts.map +1 -1
  49. package/dist/widget/frustration-prompt.d.ts +7 -4
  50. package/dist/widget/frustration-prompt.d.ts.map +1 -1
  51. package/dist/widget/recording-manager.d.ts +2 -1
  52. package/dist/widget/recording-manager.d.ts.map +1 -1
  53. package/package.json +5 -3
  54. package/src/api/client.ts +41 -3
  55. package/src/context/breadcrumbs.ts +5 -48
  56. package/src/context/frustration-state.ts +83 -0
  57. package/src/context/frustration.ts +49 -44
  58. package/src/context/history-patch.ts +86 -0
  59. package/src/i18n/de.ts +2 -0
  60. package/src/i18n/en.ts +2 -0
  61. package/src/i18n/es.ts +2 -0
  62. package/src/i18n/fr.ts +2 -0
  63. package/src/i18n/ja.ts +2 -0
  64. package/src/i18n/ko.ts +2 -0
  65. package/src/i18n/zh-CN.ts +2 -0
  66. package/src/index.ts +3 -1
  67. package/src/popup/clarify.ts +163 -62
  68. package/src/popup/comment.ts +0 -7
  69. package/src/record/session.ts +32 -2
  70. package/src/screenshot/capture.ts +65 -16
  71. package/src/styles/widget.css +18 -9
  72. package/src/styles.ts +8 -1
  73. package/src/types.ts +20 -1
  74. package/src/widget/controller.ts +31 -6
  75. package/src/widget/frustration-prompt.ts +19 -2
  76. package/src/widget/recording-manager.ts +3 -1
  77. package/src/annotate/draw-note-bar.test.ts +0 -90
  78. package/src/annotate/draw.test.ts +0 -158
  79. package/src/annotate/highlighter.test.ts +0 -70
  80. package/src/annotate/overlay.test.ts +0 -91
  81. package/src/annotate/pin.test.ts +0 -83
  82. package/src/annotate/session.test.ts +0 -344
  83. package/src/annotate/toolbar.test.ts +0 -204
  84. package/src/api/client.test.ts +0 -298
  85. package/src/context/breadcrumbs.test.ts +0 -154
  86. package/src/context/collector.test.ts +0 -14
  87. package/src/context/console.test.ts +0 -44
  88. package/src/context/error-source.test.ts +0 -128
  89. package/src/context/frustration.test.ts +0 -485
  90. package/src/i18n/index.test.ts +0 -36
  91. package/src/popup/clarify.test.ts +0 -746
  92. package/src/popup/comment.test.ts +0 -202
  93. package/src/popup/success.test.ts +0 -190
  94. package/src/record/control-bar.test.ts +0 -110
  95. package/src/record/session.cdn.test.ts +0 -89
  96. package/src/record/session.test.ts +0 -160
  97. package/src/screenshot/capture.test.ts +0 -98
  98. package/src/screenshot/crop.test.ts +0 -130
  99. package/src/widget/anon-id.test.ts +0 -42
  100. package/src/widget/controller.test.ts +0 -1076
  101. package/src/widget/dim-overlay.test.ts +0 -27
  102. package/src/widget/frustration-prompt.test.ts +0 -86
  103. package/src/widget/payload.test.ts +0 -222
  104. package/src/widget/pet.test.ts +0 -65
  105. package/src/widget/recording-manager.test.ts +0 -136
  106. package/src/widget/shadow.test.ts +0 -44
  107. package/src/widget/tab.test.ts +0 -107
package/README.md CHANGED
@@ -31,7 +31,7 @@ No more "can you describe what happened?" No more lost screenshots in Slack. The
31
31
  ### CDN (2 lines)
32
32
 
33
33
  ```html
34
- <script src="https://unpkg.com/makethisbetter@2"></script>
34
+ <script src="https://unpkg.com/makethisbetter@1"></script>
35
35
  <script>
36
36
  MakeThisBetter.init({ projectKey: 'mtb_proj_YOUR_KEY' })
37
37
  </script>
@@ -136,7 +136,7 @@ export default defineNuxtPlugin(() => {
136
136
  ```erb
137
137
  <%# app/views/layouts/application.html.erb %>
138
138
  <% if current_user&.admin? %>
139
- <script src="https://unpkg.com/makethisbetter@2"></script>
139
+ <script src="https://unpkg.com/makethisbetter@1"></script>
140
140
  <script>
141
141
  MakeThisBetter.init({
142
142
  projectKey: '<%= Rails.application.credentials.mtb_project_key %>',
@@ -152,7 +152,7 @@ export default defineNuxtPlugin(() => {
152
152
  <summary><strong>Plain HTML / Static Sites</strong></summary>
153
153
 
154
154
  ```html
155
- <script src="https://unpkg.com/makethisbetter@2"></script>
155
+ <script src="https://unpkg.com/makethisbetter@1"></script>
156
156
  <script>
157
157
  MakeThisBetter.init({ projectKey: 'mtb_proj_YOUR_KEY' })
158
158
  </script>
@@ -168,7 +168,35 @@ Click any element to pin it, or drag to draw a freeform highlight. The SDK captu
168
168
 
169
169
  ### Interaction Replay
170
170
 
171
- Switch to **Replay** mode in the toolbar to capture an Interaction Replay (up to 60 seconds). It records rrweb DOM and interaction events with input values masked by default; it does not capture screen video or audio and does not request browser media permissions. The recorder loads lazily, so there is zero cost until the reporter starts a replay.
171
+ Switch to **Replay** mode in the toolbar to capture an Interaction Replay (up to 60 seconds). It records rrweb DOM mutations and interaction events. It does not capture screen video or audio and does not request browser media permissions. The recorder loads lazily, so there is zero cost until the reporter starts a replay.
172
+
173
+ **What a replay contains**
174
+
175
+ | Captured | Not captured |
176
+ |----------|--------------|
177
+ | The page's DOM structure and every mutation to it | Values typed into any `input`, `textarea` or `select` — masked by default, including values already filled in when the replay starts |
178
+ | Visible text content | Anything inside an element you mark `rr-block` or `rr-mask` |
179
+ | Mouse positions, clicks, scrolls, viewport size | Screen video, audio, camera, microphone |
180
+ | Stylesheets needed to render the replay | Cookies, `localStorage`, HTTP request or response bodies |
181
+
182
+ **Excluding an element.** Add rrweb's own escape-hatch classes to anything a replay must not see:
183
+
184
+ - `class="rr-block"` — the element is recorded as an empty placeholder of the same size; nothing inside it is serialized.
185
+ - `class="rr-mask"` — the element's text is replaced with asterisks.
186
+
187
+ ```html
188
+ <div class="rr-block"><!-- never appears in a replay --></div>
189
+ <span class="rr-mask">Account balance: $12,400</span>
190
+ ```
191
+
192
+ **Opting out of input masking.** Input masking is on by default, so a replay taken on a checkout or sign-in page carries no card numbers, passwords, 2FA codes or email addresses. If you need real typed values — for example on an internal tool where no input is sensitive — turn it off explicitly:
193
+
194
+ ```js
195
+ MakeThisBetter.init({
196
+ projectKey: 'mtb_proj_xxx',
197
+ recording: { maskAllInputs: false }, // records typed values verbatim
198
+ })
199
+ ```
172
200
 
173
201
  ### Frustration Detection
174
202
 
@@ -227,6 +255,11 @@ MakeThisBetter.init({
227
255
  frustrationDetection: true, // Proactive frustration prompts
228
256
  apiUrl: 'https://...', // Self-hosted API endpoint
229
257
 
258
+ // Interaction Replay
259
+ recording: {
260
+ maskAllInputs: true, // Default. false records typed input values verbatim
261
+ },
262
+
230
263
  // User identification (recommended)
231
264
  user: {
232
265
  id: 'usr_123',
@@ -236,6 +269,18 @@ MakeThisBetter.init({
236
269
  })
237
270
  ```
238
271
 
272
+ ### Changing the language at runtime
273
+
274
+ `MakeThisBetter.setLocale('zh-CN')` switches the language for the tab and for
275
+ anything opened afterwards. A popup that is already on screen keeps the language it
276
+ was opened in, so a reporter is never re-rendered mid-sentence. Call it before the
277
+ reporter opens the widget — for example, in the same place your app applies a
278
+ language change.
279
+
280
+ ```js
281
+ MakeThisBetter.setLocale('zh-CN')
282
+ ```
283
+
239
284
  ### Identity Verification
240
285
 
241
286
  Identity verification links feedback to authenticated users and lets them view their own submissions on the feedback board.
@@ -2,7 +2,13 @@ import type { FeedbackPayload, FeedbackResponse, SubmissionSessionResponse, Clar
2
2
  export interface ClarifyStreamResult {
3
3
  messages: ClarifyMessage[];
4
4
  done: boolean;
5
+ failed?: boolean;
5
6
  }
7
+ export declare class ApiError extends Error {
8
+ readonly status: number;
9
+ constructor(status: number);
10
+ }
11
+ export declare function isTerminalConflict(error: unknown): boolean;
6
12
  export declare class ApiClient {
7
13
  private apiUrl;
8
14
  private projectKey;
@@ -20,8 +26,10 @@ export declare class ApiClient {
20
26
  } | null>;
21
27
  updateReporter(feedbackId: string, email: string, identityToken: string): Promise<boolean>;
22
28
  startClarification(submissionSessionId: string, token: string, message?: string): Promise<ClarifyResponse>;
29
+ retryClarification(submissionSessionId: string, token: string): Promise<ClarifyResponse>;
30
+ private requestClarification;
23
31
  getClarification(submissionSessionId: string, token: string): Promise<ClarifyResponse>;
24
- streamClarification(submissionSessionId: string, token: string, onDelta: (text: string) => void): Promise<ClarifyStreamResult>;
32
+ streamClarification(submissionSessionId: string, token: string, onDelta: (text: string) => void, signal?: AbortSignal): Promise<ClarifyStreamResult>;
25
33
  finalizeSubmissionSession(submissionSessionId: string, token: string): Promise<FeedbackResponse>;
26
34
  abandonSubmissionSession(submissionSessionId: string, token: string): Promise<void>;
27
35
  private fetchWithRetry;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACf,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,IAAI,EAAE,OAAO,CAAA;CACd;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAuB;gBAE/B,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,SAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAQvH,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAKvC,WAAW;YAQX,iBAAiB;IAMzB,uBAAuB,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAuD9G,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAc9G,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe1F,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAa1G,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAatF,mBAAmB,CACvB,mBAAmB,EAAE,MAAM,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAAC,mBAAmB,CAAC;IAkBzB,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUhG,wBAAwB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ3E,cAAc;CAmB7B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACf,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAKD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,MAAM;CAK3B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE1D;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAuB;gBAE/B,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,SAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAQvH,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAKvC,WAAW;YAQX,iBAAiB;IAMzB,uBAAuB,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAuD9G,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAc9G,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe1F,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAM1G,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAIhF,oBAAoB;IAe5B,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAatF,mBAAmB,CACvB,mBAAmB,EAAE,MAAM,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,CAAC;IAmBzB,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUhG,wBAAwB,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ3E,cAAc;CAmB7B"}
@@ -5,11 +5,7 @@ export declare class BreadcrumbCollector {
5
5
  private unsubscribeErrors;
6
6
  private boundClickHandler;
7
7
  private boundChangeHandler;
8
- private boundPopstateHandler;
9
- private originalPushState;
10
- private originalReplaceState;
11
- private installedPushState;
12
- private installedReplaceState;
8
+ private unsubscribeNavigation;
13
9
  private lastUrl;
14
10
  constructor();
15
11
  start(): void;
@@ -19,8 +15,6 @@ export declare class BreadcrumbCollector {
19
15
  private handleClick;
20
16
  private handleChange;
21
17
  private recordError;
22
- private startNavigationTracking;
23
- private stopNavigationTracking;
24
18
  private handleNavigation;
25
19
  }
26
20
  //# sourceMappingURL=breadcrumbs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/context/breadcrumbs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAI1C,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,oBAAoB,CAA4B;IACxD,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,qBAAqB,CAAuC;IACpE,OAAO,CAAC,OAAO,CAAK;;IAOpB,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAUZ,cAAc,IAAI,UAAU,EAAE;IAI9B,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,gBAAgB;CAezB"}
1
+ {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/context/breadcrumbs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAI1C,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,OAAO,CAAK;;IAOpB,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAWZ,cAAc,IAAI,UAAU,EAAE;IAI9B,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,gBAAgB;CAezB"}
@@ -0,0 +1,12 @@
1
+ export interface FrustrationState {
2
+ navTimestamps: number[];
3
+ cooldownUntil: number;
4
+ errorPageUrls: string[];
5
+ dismissedByUser: boolean;
6
+ }
7
+ export declare function loadFrustrationState(): FrustrationState;
8
+ export declare function saveFrustrationState(state: FrustrationState): void;
9
+ export declare function isFrustrationDismissed(): boolean;
10
+ export declare function markFrustrationDismissed(): void;
11
+ export declare function clearFrustrationState(): void;
12
+ //# sourceMappingURL=frustration-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustration-state.d.ts","sourceRoot":"","sources":["../../src/context/frustration-state.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,EAAE,OAAO,CAAA;CACzB;AAOD,wBAAgB,oBAAoB,IAAI,gBAAgB,CAQvD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAQlE;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAKD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frustration-state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustration-state.test.d.ts","sourceRoot":"","sources":["../../src/context/frustration-state.test.ts"],"names":[],"mappings":""}
@@ -16,11 +16,7 @@ export declare class FrustrationDetector {
16
16
  private cooldownUntil;
17
17
  private static readonly COOLDOWN_MS;
18
18
  private navTimestamps;
19
- private boundPopstateHandler;
20
- private originalPushState;
21
- private originalReplaceState;
22
- private installedPushState;
23
- private installedReplaceState;
19
+ private unsubscribeNavigation;
24
20
  private boundSubmitHandler;
25
21
  private boundInvalidHandler;
26
22
  private recentSubmitForms;
@@ -33,11 +29,15 @@ export declare class FrustrationDetector {
33
29
  stop(): void;
34
30
  private startNavigationTracking;
35
31
  private stopNavigationTracking;
32
+ private restoreState;
33
+ private persistState;
36
34
  private startFormTracking;
37
35
  private stopFormTracking;
38
36
  private handleClick;
39
37
  private handleNavigation;
40
38
  private handleFormSubmit;
39
+ private trackFormSubmitIntent;
40
+ private rememberSubmitAttempt;
41
41
  private handleFormInvalid;
42
42
  private checkErrorPage;
43
43
  private checkDeadClickDom;
@@ -1 +1 @@
1
- {"version":3,"file":"frustration.d.ts","sourceRoot":"","sources":["../../src/context/frustration.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,YAAY,GACZ,kBAAkB,GAClB,cAAc,GACd,YAAY,GACZ,gBAAgB,CAAA;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AA6BD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAS;IAE5C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,oBAAoB,CAA4B;IACxD,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,qBAAqB,CAAuC;IACpE,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,cAAc,CAAK;gBAEf,aAAa,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;IAK5D,KAAK,IAAI,IAAI;IAab,IAAI,IAAI,IAAI;IAeZ,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,gBAAgB;CAIzB"}
1
+ {"version":3,"file":"frustration.d.ts","sourceRoot":"","sources":["../../src/context/frustration.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,YAAY,GACZ,kBAAkB,GAClB,cAAc,GACd,YAAY,GACZ,gBAAgB,CAAA;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AA6BD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAS;IAE5C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,cAAc,CAAK;gBAEf,aAAa,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;IAK5D,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IAeZ,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,WAAW;IAwCnB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,gBAAgB;CAKzB"}
@@ -0,0 +1,4 @@
1
+ type NavListener = () => void;
2
+ export declare function onHistoryNavigation(listener: NavListener): () => void;
3
+ export {};
4
+ //# sourceMappingURL=history-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-patch.d.ts","sourceRoot":"","sources":["../../src/context/history-patch.ts"],"names":[],"mappings":"AAUA,KAAK,WAAW,GAAG,MAAM,IAAI,CAAA;AAY7B,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI,CAWrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=history-patch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-patch.test.d.ts","sourceRoot":"","sources":["../../src/context/history-patch.test.ts"],"names":[],"mappings":""}
package/dist/i18n/de.d.ts CHANGED
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/i18n/de.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/i18n/de.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}
package/dist/i18n/en.d.ts CHANGED
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}
package/dist/i18n/es.d.ts CHANGED
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}
package/dist/i18n/fr.d.ts CHANGED
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}
package/dist/i18n/ja.d.ts CHANGED
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../src/i18n/ja.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../src/i18n/ja.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}
package/dist/i18n/ko.d.ts CHANGED
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/i18n/ko.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/i18n/ko.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}
@@ -71,6 +71,8 @@ declare const _default: {
71
71
  send_feedback: string;
72
72
  skip: string;
73
73
  retry: string;
74
+ error: string;
75
+ expired: string;
74
76
  };
75
77
  };
76
78
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../src/i18n/zh-CN.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2EC"}
1
+ {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../src/i18n/zh-CN.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA6EC"}