makethisbetter 1.0.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 (168) hide show
  1. package/LICENSE +62 -0
  2. package/README.md +113 -0
  3. package/dist/annotate/draw.d.ts +21 -0
  4. package/dist/annotate/draw.d.ts.map +1 -0
  5. package/dist/annotate/draw.test.d.ts +2 -0
  6. package/dist/annotate/draw.test.d.ts.map +1 -0
  7. package/dist/annotate/highlighter.d.ts +11 -0
  8. package/dist/annotate/highlighter.d.ts.map +1 -0
  9. package/dist/annotate/highlighter.test.d.ts +2 -0
  10. package/dist/annotate/highlighter.test.d.ts.map +1 -0
  11. package/dist/annotate/overlay.d.ts +17 -0
  12. package/dist/annotate/overlay.d.ts.map +1 -0
  13. package/dist/annotate/overlay.test.d.ts +2 -0
  14. package/dist/annotate/overlay.test.d.ts.map +1 -0
  15. package/dist/annotate/pin.d.ts +10 -0
  16. package/dist/annotate/pin.d.ts.map +1 -0
  17. package/dist/annotate/pin.test.d.ts +2 -0
  18. package/dist/annotate/pin.test.d.ts.map +1 -0
  19. package/dist/annotate/session.d.ts +20 -0
  20. package/dist/annotate/session.d.ts.map +1 -0
  21. package/dist/annotate/session.test.d.ts +2 -0
  22. package/dist/annotate/session.test.d.ts.map +1 -0
  23. package/dist/annotate/toolbar.d.ts +17 -0
  24. package/dist/annotate/toolbar.d.ts.map +1 -0
  25. package/dist/annotate/toolbar.test.d.ts +2 -0
  26. package/dist/annotate/toolbar.test.d.ts.map +1 -0
  27. package/dist/api/client.d.ts +10 -0
  28. package/dist/api/client.d.ts.map +1 -0
  29. package/dist/api/client.test.d.ts +2 -0
  30. package/dist/api/client.test.d.ts.map +1 -0
  31. package/dist/context/collector.d.ts +10 -0
  32. package/dist/context/collector.d.ts.map +1 -0
  33. package/dist/context/collector.test.d.ts +2 -0
  34. package/dist/context/collector.test.d.ts.map +1 -0
  35. package/dist/context/console.d.ts +10 -0
  36. package/dist/context/console.d.ts.map +1 -0
  37. package/dist/context/console.test.d.ts +2 -0
  38. package/dist/context/console.test.d.ts.map +1 -0
  39. package/dist/context/error-source.d.ts +21 -0
  40. package/dist/context/error-source.d.ts.map +1 -0
  41. package/dist/context/error-source.test.d.ts +2 -0
  42. package/dist/context/error-source.test.d.ts.map +1 -0
  43. package/dist/context/frustration.d.ts +27 -0
  44. package/dist/context/frustration.d.ts.map +1 -0
  45. package/dist/context/frustration.test.d.ts +2 -0
  46. package/dist/context/frustration.test.d.ts.map +1 -0
  47. package/dist/global.d.ts +3 -0
  48. package/dist/global.d.ts.map +1 -0
  49. package/dist/i18n/en.d.ts +47 -0
  50. package/dist/i18n/en.d.ts.map +1 -0
  51. package/dist/i18n/index.d.ts +4 -0
  52. package/dist/i18n/index.d.ts.map +1 -0
  53. package/dist/i18n/index.test.d.ts +2 -0
  54. package/dist/i18n/index.test.d.ts.map +1 -0
  55. package/dist/i18n/zh-CN.d.ts +47 -0
  56. package/dist/i18n/zh-CN.d.ts.map +1 -0
  57. package/dist/index.d.mts +8 -0
  58. package/dist/index.d.ts +8 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/makethisbetter.cjs.js +84 -0
  61. package/dist/makethisbetter.cjs.js.map +1 -0
  62. package/dist/makethisbetter.esm.js +1433 -0
  63. package/dist/makethisbetter.esm.js.map +1 -0
  64. package/dist/makethisbetter.js +84 -0
  65. package/dist/makethisbetter.js.map +1 -0
  66. package/dist/popup/comment.d.ts +31 -0
  67. package/dist/popup/comment.d.ts.map +1 -0
  68. package/dist/popup/comment.test.d.ts +2 -0
  69. package/dist/popup/comment.test.d.ts.map +1 -0
  70. package/dist/popup/success.d.ts +8 -0
  71. package/dist/popup/success.d.ts.map +1 -0
  72. package/dist/popup/success.test.d.ts +2 -0
  73. package/dist/popup/success.test.d.ts.map +1 -0
  74. package/dist/record/control-bar.d.ts +12 -0
  75. package/dist/record/control-bar.d.ts.map +1 -0
  76. package/dist/record/control-bar.test.d.ts +2 -0
  77. package/dist/record/control-bar.test.d.ts.map +1 -0
  78. package/dist/record/session.d.ts +26 -0
  79. package/dist/record/session.d.ts.map +1 -0
  80. package/dist/record/session.test.d.ts +2 -0
  81. package/dist/record/session.test.d.ts.map +1 -0
  82. package/dist/screenshot/capture.d.ts +3 -0
  83. package/dist/screenshot/capture.d.ts.map +1 -0
  84. package/dist/screenshot/capture.test.d.ts +2 -0
  85. package/dist/screenshot/capture.test.d.ts.map +1 -0
  86. package/dist/styles.d.ts +9 -0
  87. package/dist/styles.d.ts.map +1 -0
  88. package/dist/types.d.ts +45 -0
  89. package/dist/types.d.ts.map +1 -0
  90. package/dist/widget/controller.d.ts +37 -0
  91. package/dist/widget/controller.d.ts.map +1 -0
  92. package/dist/widget/controller.test.d.ts +2 -0
  93. package/dist/widget/controller.test.d.ts.map +1 -0
  94. package/dist/widget/frustration-prompt.d.ts +11 -0
  95. package/dist/widget/frustration-prompt.d.ts.map +1 -0
  96. package/dist/widget/frustration-prompt.test.d.ts +2 -0
  97. package/dist/widget/frustration-prompt.test.d.ts.map +1 -0
  98. package/dist/widget/payload.d.ts +5 -0
  99. package/dist/widget/payload.d.ts.map +1 -0
  100. package/dist/widget/payload.test.d.ts +2 -0
  101. package/dist/widget/payload.test.d.ts.map +1 -0
  102. package/dist/widget/pet.d.ts +12 -0
  103. package/dist/widget/pet.d.ts.map +1 -0
  104. package/dist/widget/pet.test.d.ts +2 -0
  105. package/dist/widget/pet.test.d.ts.map +1 -0
  106. package/dist/widget/shadow.d.ts +11 -0
  107. package/dist/widget/shadow.d.ts.map +1 -0
  108. package/dist/widget/shadow.test.d.ts +2 -0
  109. package/dist/widget/shadow.test.d.ts.map +1 -0
  110. package/dist/widget/tab.d.ts +10 -0
  111. package/dist/widget/tab.d.ts.map +1 -0
  112. package/dist/widget/tab.test.d.ts +2 -0
  113. package/dist/widget/tab.test.d.ts.map +1 -0
  114. package/package.json +64 -0
  115. package/src/annotate/draw.test.ts +168 -0
  116. package/src/annotate/draw.ts +108 -0
  117. package/src/annotate/highlighter.test.ts +47 -0
  118. package/src/annotate/highlighter.ts +84 -0
  119. package/src/annotate/overlay.test.ts +91 -0
  120. package/src/annotate/overlay.ts +44 -0
  121. package/src/annotate/pin.test.ts +87 -0
  122. package/src/annotate/pin.ts +28 -0
  123. package/src/annotate/session.test.ts +219 -0
  124. package/src/annotate/session.ts +104 -0
  125. package/src/annotate/toolbar.test.ts +132 -0
  126. package/src/annotate/toolbar.ts +81 -0
  127. package/src/api/client.test.ts +75 -0
  128. package/src/api/client.ts +77 -0
  129. package/src/context/collector.test.ts +14 -0
  130. package/src/context/collector.ts +41 -0
  131. package/src/context/console.test.ts +44 -0
  132. package/src/context/console.ts +34 -0
  133. package/src/context/error-source.test.ts +115 -0
  134. package/src/context/error-source.ts +62 -0
  135. package/src/context/frustration.test.ts +134 -0
  136. package/src/context/frustration.ts +145 -0
  137. package/src/global.ts +3 -0
  138. package/src/i18n/en.ts +47 -0
  139. package/src/i18n/index.test.ts +24 -0
  140. package/src/i18n/index.ts +16 -0
  141. package/src/i18n/zh-CN.ts +47 -0
  142. package/src/index.ts +32 -0
  143. package/src/popup/comment.test.ts +73 -0
  144. package/src/popup/comment.ts +177 -0
  145. package/src/popup/success.test.ts +75 -0
  146. package/src/popup/success.ts +33 -0
  147. package/src/record/control-bar.test.ts +110 -0
  148. package/src/record/control-bar.ts +46 -0
  149. package/src/record/session.test.ts +153 -0
  150. package/src/record/session.ts +139 -0
  151. package/src/screenshot/capture.test.ts +68 -0
  152. package/src/screenshot/capture.ts +96 -0
  153. package/src/styles/widget.css +847 -0
  154. package/src/styles.ts +9 -0
  155. package/src/types.ts +46 -0
  156. package/src/vite-env.d.ts +6 -0
  157. package/src/widget/controller.test.ts +62 -0
  158. package/src/widget/controller.ts +249 -0
  159. package/src/widget/frustration-prompt.test.ts +86 -0
  160. package/src/widget/frustration-prompt.ts +34 -0
  161. package/src/widget/payload.test.ts +167 -0
  162. package/src/widget/payload.ts +31 -0
  163. package/src/widget/pet.test.ts +63 -0
  164. package/src/widget/pet.ts +67 -0
  165. package/src/widget/shadow.test.ts +25 -0
  166. package/src/widget/shadow.ts +41 -0
  167. package/src/widget/tab.test.ts +92 -0
  168. package/src/widget/tab.ts +31 -0
package/LICENSE ADDED
@@ -0,0 +1,62 @@
1
+ Business Source License 1.1
2
+
3
+ Parameters
4
+
5
+ Licensor: Make This Better, Inc.
6
+ Licensed Work: @makethisbetter/js
7
+ The Licensed Work is (c) 2026 Make This Better, Inc.
8
+ Additional Use Grant: You may make production use of the Licensed Work,
9
+ provided your use does not include offering the Licensed
10
+ Work to third parties on a hosted or embedded basis
11
+ which is competitive with Make This Better's products.
12
+ Change Date: 2029-01-01
13
+ Change License: MIT
14
+
15
+ For information about alternative licensing arrangements, contact:
16
+ hello@makethisbetter.dev
17
+
18
+ ---
19
+
20
+ Business Source License 1.1
21
+
22
+ Terms
23
+
24
+ The Licensor hereby grants you the right to copy, modify, create derivative
25
+ works, redistribute, and make non-production use of the Licensed Work. The
26
+ Licensor may make an Additional Use Grant, above, permitting limited
27
+ production use.
28
+
29
+ Effective on the Change Date, or the fourth anniversary of the first publicly
30
+ available distribution of a specific version of the Licensed Work under this
31
+ License, whichever comes first, the Licensor hereby grants you rights under
32
+ the terms of the Change License, and the rights granted in the paragraph
33
+ above terminate.
34
+
35
+ If your use of the Licensed Work does not comply with the requirements
36
+ currently in effect as described in this License, you must purchase a
37
+ commercial license from the Licensor, its affiliated entities, or authorized
38
+ resellers, or you must refrain from using the Licensed Work.
39
+
40
+ All copies of the original and modified Licensed Work, and derivative works
41
+ of the Licensed Work, are subject to this License. This License applies
42
+ separately for each version of the Licensed Work and the Change Date may vary
43
+ for each version of the Licensed Work released by the Licensor.
44
+
45
+ You must conspicuously display this License on each original or modified copy
46
+ of the Licensed Work. If you receive the Licensed Work in original or modified
47
+ form from a third party, the terms and conditions set forth in this License
48
+ apply to your use of that work.
49
+
50
+ Any use of the Licensed Work in violation of this License will automatically
51
+ terminate your rights under this License for the current and all other
52
+ versions of the Licensed Work.
53
+
54
+ This License does not grant you any right in any trademark or logo of
55
+ Licensor or its affiliates (provided that you may use a trademark or logo of
56
+ Licensor as expressly required by this License).
57
+
58
+ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
59
+ AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
60
+ EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
61
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
62
+ TITLE.
package/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # @makethisbetter/js
2
+
3
+ The Make This Better Widget SDK — embed user feedback collection in any website.
4
+
5
+ One script. Click any element. Describe the issue. Done.
6
+
7
+ ## Quickstart
8
+
9
+ ### Script tag (IIFE)
10
+
11
+ ```html
12
+ <script src="https://unpkg.com/@makethisbetter/js/dist/makethisbetter.iife.js"></script>
13
+ <script>
14
+ MakeThisBetter.init({ projectKey: 'mtb_proj_YOUR_KEY' });
15
+ </script>
16
+ ```
17
+
18
+ ### npm / ESM
19
+
20
+ ```bash
21
+ npm install @makethisbetter/js
22
+ ```
23
+
24
+ ```js
25
+ import { MakeThisBetter } from '@makethisbetter/js';
26
+
27
+ MakeThisBetter.init({ projectKey: 'mtb_proj_YOUR_KEY' });
28
+ ```
29
+
30
+ ## Configuration
31
+
32
+ ```js
33
+ MakeThisBetter.init({
34
+ projectKey: 'mtb_proj_xxx', // required — your project API key
35
+ locale: 'zh-CN', // optional — 'en' (default) or 'zh-CN'
36
+ position: 'right', // optional — 'right' (default) or 'left'
37
+ theme: 'auto', // optional — 'light' | 'dark' | 'auto'
38
+ apiUrl: 'https://...', // optional — custom API endpoint
39
+ user: {
40
+ id: 'usr_123', // optional — identify the user
41
+ email: 'alex@company.co',
42
+ name: 'Alex Chen',
43
+ },
44
+ });
45
+ ```
46
+
47
+ ## How it works
48
+
49
+ 1. A green **Feedback** tab appears on the right edge of the page
50
+ 2. Clicking the tab enters **Mark up mode** — a toolbar appears at the top
51
+ 3. Hover over any element to highlight it (blue outline + tooltip)
52
+ 4. Click to place a **pin** annotation
53
+ 5. Or drag to **draw** a free-form highlight
54
+ 6. A **Comment popup** appears — describe the issue and hit Submit
55
+ 7. The SDK captures a screenshot, collects page context (URL, browser, OS, console errors), and sends everything to the Make This Better API
56
+ 8. Your dashboard shows the structured feedback with AI triage
57
+
58
+ ## What gets collected automatically
59
+
60
+ - Page URL
61
+ - Browser and OS
62
+ - Screen resolution
63
+ - Console errors (captured via `window.onerror`)
64
+ - Target element CSS selector and text content
65
+ - Page screenshot (via `html-to-image`, invisible to the user)
66
+ - Annotation coordinates
67
+
68
+ ## Conditional loading
69
+
70
+ The Widget only loads when you call `MakeThisBetter.init()`. Control who sees it with your own logic:
71
+
72
+ ```js
73
+ // Only show to admins
74
+ if (currentUser.isAdmin) {
75
+ MakeThisBetter.init({ projectKey: 'mtb_proj_xxx', user: { id: currentUser.id } });
76
+ }
77
+ ```
78
+
79
+ ```ruby
80
+ # Rails example
81
+ <% if current_user&.admin? %>
82
+ <script>
83
+ MakeThisBetter.init({
84
+ projectKey: '<%= Rails.application.credentials.mtb_project_key %>',
85
+ user: { id: '<%= current_user.id %>', email: '<%= current_user.email %>' }
86
+ });
87
+ </script>
88
+ <% end %>
89
+ ```
90
+
91
+ ## Development
92
+
93
+ ```bash
94
+ npm install
95
+ npm run build # build dist/
96
+ open demo/index.html # run the standalone demo
97
+ npm run dev # optional: serve demo at localhost:5173
98
+ npm test # run tests
99
+ npm run type-check # TypeScript check
100
+ ```
101
+
102
+ ## Bundle size
103
+
104
+ | Format | Size | gzip |
105
+ |--------|--------|--------|
106
+ | IIFE | 42 KB | 13.6 KB |
107
+ | ESM | 50 KB | 14.7 KB |
108
+
109
+ ## License
110
+
111
+ [Business Source License 1.1](LICENSE) — free for non-competitive use, converts to MIT on 2029-01-01.
112
+
113
+ Free to self-host. Cloud platform at [makethisbetter.dev](https://makethisbetter.dev).
@@ -0,0 +1,21 @@
1
+ import type { ShadowContainer } from '../widget/shadow';
2
+ import type { Annotation } from '../types';
3
+ export declare class DrawLayer {
4
+ private svg;
5
+ private path;
6
+ private points;
7
+ private isDrawing;
8
+ private onDrawComplete;
9
+ constructor(shadow: ShadowContainer, onDrawComplete: (annotation: Annotation) => void);
10
+ startDraw(x: number, y: number): void;
11
+ continueDraw(x: number, y: number): void;
12
+ endDraw(): void;
13
+ private buildPathD;
14
+ private getCenter;
15
+ clearAll(): void;
16
+ cancelCurrentDraw(): void;
17
+ isCurrentlyDrawing(): boolean;
18
+ getPointCount(): number;
19
+ destroy(): void;
20
+ }
21
+ //# sourceMappingURL=draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../src/annotate/draw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1C,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAkC;gBAE5C,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI;IAQrF,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAcrC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAMxC,OAAO,IAAI,IAAI;IAwBf,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,SAAS;IAQjB,QAAQ,IAAI,IAAI;IAOhB,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,IAAI,OAAO;IAI7B,aAAa,IAAI,MAAM;IAIvB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=draw.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.test.d.ts","sourceRoot":"","sources":["../../src/annotate/draw.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { ShadowContainer } from '../widget/shadow';
2
+ export declare class ElementHighlighter {
3
+ private highlightEl;
4
+ constructor(shadow: ShadowContainer);
5
+ highlight(el: Element): void;
6
+ hide(): void;
7
+ destroy(): void;
8
+ }
9
+ export declare function getElementName(el: Element): string;
10
+ export declare function getCssSelector(el: Element): string;
11
+ //# sourceMappingURL=highlighter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlighter.d.ts","sourceRoot":"","sources":["../../src/annotate/highlighter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAgB;gBAEvB,MAAM,EAAE,eAAe;IAMnC,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAS5B,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,IAAI;CAGhB;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAqBlD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CA+BlD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=highlighter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlighter.test.d.ts","sourceRoot":"","sources":["../../src/annotate/highlighter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import type { ShadowContainer } from '../widget/shadow';
2
+ export declare class AnnotationOverlay {
3
+ private overlayEl;
4
+ private dimEl;
5
+ private onMouseDown;
6
+ private onMouseMove;
7
+ private onMouseUp;
8
+ private onMouseLeave;
9
+ constructor(shadow: ShadowContainer, handlers: {
10
+ onMouseDown: (e: MouseEvent) => void;
11
+ onMouseMove: (e: MouseEvent) => void;
12
+ onMouseUp: (e: MouseEvent) => void;
13
+ onMouseLeave: (e: MouseEvent) => void;
14
+ });
15
+ destroy(): void;
16
+ }
17
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/annotate/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,YAAY,CAAyB;gBAG3C,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE;QACR,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;QACpC,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;QACpC,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;QAClC,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACtC;IAkBH,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=overlay.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.test.d.ts","sourceRoot":"","sources":["../../src/annotate/overlay.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { ShadowContainer } from '../widget/shadow';
2
+ export declare class PinMarker {
3
+ private pins;
4
+ private shadow;
5
+ constructor(shadow: ShadowContainer);
6
+ addPin(x: number, y: number, index: number): void;
7
+ clearAll(): void;
8
+ destroy(): void;
9
+ }
10
+ //# sourceMappingURL=pin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../../src/annotate/pin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,eAAe;IAInC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASjD,QAAQ,IAAI,IAAI;IAKhB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin.test.d.ts","sourceRoot":"","sources":["../../src/annotate/pin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { ShadowContainer } from '../widget/shadow';
2
+ import type { I18nMessages } from '../i18n';
3
+ import type { Annotation } from '../types';
4
+ export declare class AnnotationSession {
5
+ private messages;
6
+ private onReady;
7
+ private overlay;
8
+ private highlighter;
9
+ private pinMarker;
10
+ private drawLayer;
11
+ private pinCount;
12
+ private interactionActive;
13
+ constructor(shadow: ShadowContainer, messages: I18nMessages, onReady: (annotation: Annotation, targetName: string) => void);
14
+ private handleMouseDown;
15
+ private handleMouseMove;
16
+ private handleMouseUp;
17
+ dismissInteraction(): void;
18
+ destroy(): void;
19
+ }
20
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/annotate/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAQ1C,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,iBAAiB,CAAO;gBAG9B,MAAM,EAAE,eAAe,EACf,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI;IAkBvE,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,aAAa;IAyBrB,kBAAkB,IAAI,IAAI;IAO1B,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.test.d.ts","sourceRoot":"","sources":["../../src/annotate/session.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import type { ShadowContainer } from '../widget/shadow';
2
+ import type { I18nMessages } from '../i18n';
3
+ export type ToolbarMode = 'markup' | 'record';
4
+ export declare class AnnotationToolbar {
5
+ private el;
6
+ private hintEl;
7
+ private markupBtn;
8
+ private recordBtn;
9
+ private messages;
10
+ private currentMode;
11
+ constructor(shadow: ShadowContainer, messages: I18nMessages, onExit: () => void, onModeChange?: (mode: ToolbarMode) => void);
12
+ private buildHTML;
13
+ setMode(mode: ToolbarMode): void;
14
+ getMode(): ToolbarMode;
15
+ destroy(): void;
16
+ }
17
+ //# sourceMappingURL=toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/annotate/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE7C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,WAAW,CAAwB;gBAGzC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,IAAI,EAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI;IAuB5C,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAahC,OAAO,IAAI,WAAW;IAItB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=toolbar.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.test.d.ts","sourceRoot":"","sources":["../../src/annotate/toolbar.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { FeedbackPayload } from '../types';
2
+ export declare class ApiClient {
3
+ private apiUrl;
4
+ private projectKey;
5
+ private retryDelayMs;
6
+ constructor(projectKey: string, apiUrl?: string, retryDelayMs?: number);
7
+ submitFeedback(payload: FeedbackPayload, screenshot: Blob | null): Promise<void>;
8
+ private fetchWithRetry;
9
+ }
10
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI/C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,SAAO;IAM9D,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAqCxE,cAAc;CAmB7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/api/client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export interface PageContext {
2
+ page_url: string;
3
+ user_agent: string;
4
+ browser: string;
5
+ os: string;
6
+ screen_width: number;
7
+ screen_height: number;
8
+ }
9
+ export declare function collectPageContext(): PageContext;
10
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/context/collector.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAShD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=collector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.test.d.ts","sourceRoot":"","sources":["../../src/context/collector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export declare class ConsoleErrorCollector {
2
+ private errors;
3
+ private unsubscribe;
4
+ start(): void;
5
+ private record;
6
+ private addError;
7
+ getErrors(): string[];
8
+ stop(): void;
9
+ }
10
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/context/console.ts"],"names":[],"mappings":"AAIA,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAA4B;IAE/C,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAOhB,SAAS,IAAI,MAAM,EAAE;IAIrB,IAAI,IAAI,IAAI;CAIb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=console.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.test.d.ts","sourceRoot":"","sources":["../../src/context/console.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ export interface ErrorSourceEvent {
2
+ message: string;
3
+ source?: string;
4
+ line?: number;
5
+ col?: number;
6
+ error?: unknown;
7
+ }
8
+ type ErrorListener = (event: ErrorSourceEvent) => void;
9
+ declare class ErrorSource {
10
+ private listeners;
11
+ private originalOnError;
12
+ private rejectionHandler;
13
+ private hooked;
14
+ subscribe(listener: ErrorListener): () => void;
15
+ private hook;
16
+ private unhook;
17
+ private emit;
18
+ }
19
+ export declare const errorSource: ErrorSource;
20
+ export {};
21
+ //# sourceMappingURL=error-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-source.d.ts","sourceRoot":"","sources":["../../src/context/error-source.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;AAEtD,cAAM,WAAW;IACf,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,gBAAgB,CAAoD;IAC5E,OAAO,CAAC,MAAM,CAAQ;IAEtB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAS9C,OAAO,CAAC,IAAI;IAoBZ,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,IAAI;CAGb;AAED,eAAO,MAAM,WAAW,aAAoB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-source.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-source.test.d.ts","sourceRoot":"","sources":["../../src/context/error-source.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ export type FrustrationSignal = 'rage_click' | 'dead_click' | 'console_error';
2
+ export interface FrustrationEvent {
3
+ signal: FrustrationSignal;
4
+ target?: string;
5
+ detail?: string;
6
+ timestamp: number;
7
+ }
8
+ export declare class FrustrationDetector {
9
+ private clickHistory;
10
+ private onFrustration;
11
+ private boundClickHandler;
12
+ private unsubscribeErrors;
13
+ private active;
14
+ private errorCount;
15
+ private deadClickCount;
16
+ private cooldownUntil;
17
+ private static readonly COOLDOWN_MS;
18
+ constructor(onFrustration: (event: FrustrationEvent) => void);
19
+ start(): void;
20
+ stop(): void;
21
+ private handleClick;
22
+ private isInteractive;
23
+ private isWidgetElement;
24
+ private emitIfReady;
25
+ private emitHighPriority;
26
+ }
27
+ //# sourceMappingURL=frustration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustration.d.ts","sourceRoot":"","sources":["../../src/context/frustration.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,eAAe,CAAA;AAE7E,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;AAmBD,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;gBAEhC,aAAa,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;IAK5D,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,gBAAgB;CAIzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frustration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustration.test.d.ts","sourceRoot":"","sources":["../../src/context/frustration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { MakeThisBetter } from './index';
2
+ export default MakeThisBetter;
3
+ //# sourceMappingURL=global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExC,eAAe,cAAc,CAAA"}
@@ -0,0 +1,47 @@
1
+ declare const _default: {
2
+ tab: string;
3
+ toolbar: {
4
+ markup: string;
5
+ record: string;
6
+ hint: string;
7
+ hintRecord: string;
8
+ exit: string;
9
+ };
10
+ popup: {
11
+ about: string;
12
+ placeholder: string;
13
+ submit: string;
14
+ cancel: string;
15
+ quickOptions: {
16
+ emoji: string;
17
+ label: string;
18
+ }[];
19
+ };
20
+ success: {
21
+ title: string;
22
+ message: string;
23
+ close: string;
24
+ };
25
+ error: {
26
+ submit: string;
27
+ };
28
+ pet: {
29
+ bubble: string;
30
+ };
31
+ frustration: {
32
+ prompt: string;
33
+ action: string;
34
+ dismiss: string;
35
+ };
36
+ annotation: {
37
+ drawing: string;
38
+ element: string;
39
+ };
40
+ record: {
41
+ stop: string;
42
+ timer_label: string;
43
+ max_reached: string;
44
+ };
45
+ };
46
+ export default _default;
47
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA8CC"}
@@ -0,0 +1,4 @@
1
+ import en from './en';
2
+ export type I18nMessages = typeof en;
3
+ export declare function getMessages(locale: string): I18nMessages;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,MAAM,CAAA;AAGrB,MAAM,MAAM,YAAY,GAAG,OAAO,EAAE,CAAA;AAOpC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAKxD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/i18n/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ declare const _default: {
2
+ tab: string;
3
+ toolbar: {
4
+ markup: string;
5
+ record: string;
6
+ hint: string;
7
+ hintRecord: string;
8
+ exit: string;
9
+ };
10
+ popup: {
11
+ about: string;
12
+ placeholder: string;
13
+ submit: string;
14
+ cancel: string;
15
+ quickOptions: {
16
+ emoji: string;
17
+ label: string;
18
+ }[];
19
+ };
20
+ success: {
21
+ title: string;
22
+ message: string;
23
+ close: string;
24
+ };
25
+ error: {
26
+ submit: string;
27
+ };
28
+ pet: {
29
+ bubble: string;
30
+ };
31
+ frustration: {
32
+ prompt: string;
33
+ action: string;
34
+ dismiss: string;
35
+ };
36
+ annotation: {
37
+ drawing: string;
38
+ element: string;
39
+ };
40
+ record: {
41
+ stop: string;
42
+ timer_label: string;
43
+ max_reached: string;
44
+ };
45
+ };
46
+ export default _default;
47
+ //# sourceMappingURL=zh-CN.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../src/i18n/zh-CN.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA8CC"}
@@ -0,0 +1,8 @@
1
+ import type { MakeThisBetterConfig } from './types';
2
+ declare const MakeThisBetter: {
3
+ init(config: MakeThisBetterConfig): void;
4
+ destroy(): void;
5
+ };
6
+ export { MakeThisBetter };
7
+ export type { MakeThisBetterConfig };
8
+ //# sourceMappingURL=index.d.ts.map