makethisbetter 1.2.0 → 1.3.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 (43) hide show
  1. package/dist/i18n/de.d.ts +2 -0
  2. package/dist/i18n/de.d.ts.map +1 -1
  3. package/dist/i18n/en.d.ts +2 -0
  4. package/dist/i18n/en.d.ts.map +1 -1
  5. package/dist/i18n/es.d.ts +2 -0
  6. package/dist/i18n/es.d.ts.map +1 -1
  7. package/dist/i18n/fr.d.ts +2 -0
  8. package/dist/i18n/fr.d.ts.map +1 -1
  9. package/dist/i18n/ja.d.ts +2 -0
  10. package/dist/i18n/ja.d.ts.map +1 -1
  11. package/dist/i18n/ko.d.ts +2 -0
  12. package/dist/i18n/ko.d.ts.map +1 -1
  13. package/dist/i18n/zh-CN.d.ts +2 -0
  14. package/dist/i18n/zh-CN.d.ts.map +1 -1
  15. package/dist/makethisbetter.cjs.js +19 -19
  16. package/dist/makethisbetter.cjs.js.map +1 -1
  17. package/dist/makethisbetter.esm.js +261 -243
  18. package/dist/makethisbetter.esm.js.map +1 -1
  19. package/dist/makethisbetter.js +17 -17
  20. package/dist/makethisbetter.js.map +1 -1
  21. package/dist/popup/success.d.ts +4 -1
  22. package/dist/popup/success.d.ts.map +1 -1
  23. package/dist/record/session.cdn.test.d.ts +2 -0
  24. package/dist/record/session.cdn.test.d.ts.map +1 -0
  25. package/dist/record/session.d.ts.map +1 -1
  26. package/dist/types.d.ts +1 -0
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/widget/controller.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/src/i18n/de.ts +2 -0
  31. package/src/i18n/en.ts +2 -0
  32. package/src/i18n/es.ts +2 -0
  33. package/src/i18n/fr.ts +2 -0
  34. package/src/i18n/ja.ts +2 -0
  35. package/src/i18n/ko.ts +2 -0
  36. package/src/i18n/zh-CN.ts +2 -0
  37. package/src/popup/success.test.ts +13 -0
  38. package/src/popup/success.ts +10 -3
  39. package/src/record/session.cdn.test.ts +89 -0
  40. package/src/record/session.ts +21 -7
  41. package/src/types.ts +1 -0
  42. package/src/widget/controller.test.ts +4 -1
  43. package/src/widget/controller.ts +8 -5
package/dist/i18n/de.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/i18n/de.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/i18n/de.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
package/dist/i18n/en.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
package/dist/i18n/es.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
package/dist/i18n/fr.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
package/dist/i18n/ja.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../src/i18n/ja.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../src/i18n/ja.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
package/dist/i18n/ko.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/i18n/ko.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/i18n/ko.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  success: {
21
21
  title: string;
22
22
  message: string;
23
+ title_no_ai: string;
24
+ message_no_ai: string;
23
25
  view_feedback: string;
24
26
  close: string;
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../src/i18n/zh-CN.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqDC"}
1
+ {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../src/i18n/zh-CN.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAuDC"}
@@ -1,11 +1,11 @@
1
- "use strict";var nt=Object.create;var H=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,ct=Object.prototype.hasOwnProperty;var ht=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of at(t))!ct.call(i,r)&&r!==e&&H(i,r,{get:()=>t[r],enumerable:!(s=ot(t,r))||s.enumerable});return i};var dt=(i,t,e)=>(e=i!=null?nt(lt(i)):{},ht(t||!i||!i.__esModule?H(e,"default",{value:i,enumerable:!0}):e,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ut='*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{all:initial;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;color:#191a1c;-webkit-font-smoothing:antialiased}:host([data-mtb-theme="dark"]) .mtb-popup,:host([data-mtb-theme="dark"]) .mtb-success{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-popup-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="dark"]) .mtb-popup-title,:host([data-mtb-theme="dark"]) .mtb-success-title{color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-quick-option,:host([data-mtb-theme="dark"]) .mtb-textarea{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-popup-close,:host([data-mtb-theme="dark"]) .mtb-success-msg,:host([data-mtb-theme="dark"]) .mtb-close-link{color:#ffffffad}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-popup,:host([data-mtb-theme="auto"]) .mtb-success{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-popup-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="auto"]) .mtb-popup-title,:host([data-mtb-theme="auto"]) .mtb-success-title{color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-quick-option,:host([data-mtb-theme="auto"]) .mtb-textarea{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-popup-close,:host([data-mtb-theme="auto"]) .mtb-success-msg,:host([data-mtb-theme="auto"]) .mtb-close-link{color:#ffffffad}}.mtb-tab{position:fixed;top:50%;right:0;transform:translateY(-50%);z-index:2147483646;display:flex;align-items:center;justify-content:center;width:32px;padding:14px 0;background:#059669;color:#fff;border-radius:8px 0 0 8px;cursor:pointer;box-shadow:-2px 0 14px #05966959;transition:background .15s,box-shadow .15s,width .15s;writing-mode:vertical-lr;text-orientation:mixed;font-size:12px;font-weight:600;letter-spacing:.04em;user-select:none;border:none;outline:none}.mtb-tab.left{right:auto;left:0;border-radius:0 8px 8px 0;box-shadow:2px 0 14px #05966959}.mtb-tab:hover{background:#047857;box-shadow:-3px 0 20px #05966980}.mtb-tab.active{background:#065f46}.mtb-toolbar{position:fixed;top:18px;left:50%;transform:translate(-50%);z-index:2147483647;display:flex;align-items:center;gap:11px;height:46px;padding:0 7px;border-radius:13px;background:linear-gradient(120deg,#10b981,#059669);box-shadow:0 10px 26px #0f172a38;animation:mtbBarIn .2s ease;white-space:nowrap}@keyframes mtbBarIn{0%{transform:translate(-50%,12px);opacity:0}to{transform:translate(-50%);opacity:1}}.mtb-toolbar-modes{display:flex;align-items:center;gap:3px;background:#ffffff29;border-radius:9px;padding:3px}.mtb-toolbar-mode-btn{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:7px;border:none;cursor:pointer;font-family:inherit;font-size:12px;font-weight:550;white-space:nowrap;background:transparent;color:#fffffff2;transition:all .12s}.mtb-toolbar-mode-btn.active{background:#fff;color:#047857}.mtb-toolbar-hint{font-size:12px;color:#fffffff2;white-space:nowrap}.mtb-toolbar-sep{width:1px;height:20px;background:#ffffff38}.mtb-exit-btn{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border-radius:8px;font-size:11.5px;font-weight:500;color:#fff;cursor:pointer;background:#ffffff29;border:none;font-family:inherit;transition:background .12s}.mtb-exit-btn:hover{background:#ffffff47}.mtb-overlay{position:fixed;inset:0;z-index:2147483640;cursor:crosshair}.mtb-dim{position:fixed;inset:0;z-index:2147483639;background:#00000014}.mtb-highlight{position:fixed;z-index:2147483641;pointer-events:none;border:2px solid #10b981;border-radius:6px;background:#10b9810f;transition:all .08s ease}.mtb-highlight-tooltip{position:fixed;z-index:2147483642;pointer-events:none;transform:translate(-50%);background:#064e3b;color:#fff;padding:4px 10px;border-radius:6px;font-size:11px;font-weight:500;white-space:nowrap;box-shadow:0 4px 12px #0000002e}.mtb-highlight-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#064e3b}.mtb-draw-svg{position:fixed;inset:0;z-index:2147483643;pointer-events:none;width:100%;height:100%;overflow:visible}.mtb-pin{position:fixed;z-index:2147483644;pointer-events:none;width:22px;height:22px;border-radius:50% 50% 50% 2px;background:#059669;border:2px solid #fff;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;font-weight:700;box-shadow:0 2px 8px #05966973;animation:mtbPinPop .25s cubic-bezier(.34,1.56,.64,1);transform:translate(-50%,-50%)}@keyframes mtbPinPop{0%{transform:translate(-50%,-50%) scale(.4)}to{transform:translate(-50%,-50%) scale(1)}}.mtb-popup{position:fixed;z-index:2147483645;width:320px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:14px;box-shadow:0 12px 40px #00000029;overflow:hidden;animation:mtbSlideUp .28s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}@keyframes mtbSlideUp{0%{transform:translateY(14px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.mtb-popup-header{padding:11px 13px 11px 14px;border-bottom:1px solid rgba(0,0,0,.06);display:flex;align-items:center;gap:8px}.mtb-popup-icon{width:20px;height:20px;border-radius:5px;background:#10b9811a;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mtb-popup-title{flex:1;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#191a1c}.mtb-popup-close{background:none;border:none;cursor:pointer;padding:3px;color:#00000061;display:flex;align-items:center;border-radius:4px;transition:color .12s}.mtb-popup-close:hover{color:#000000b3}.mtb-popup-body{padding:13px}.mtb-quick-options{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.mtb-quick-option{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid rgba(0,0,0,.09);border-radius:10px;background:#fafafa;cursor:pointer;font-family:inherit;font-size:13px;color:#191a1c;text-align:left;transition:all .12s}.mtb-quick-option:hover{background:#10b9810f;border-color:#10b9814d}.mtb-quick-option-emoji{font-size:15px;flex-shrink:0;line-height:1}.mtb-textarea-wrap{position:relative}.mtb-textarea{width:100%;height:64px;padding:9px 11px;border:1px solid rgba(0,0,0,.12);border-radius:9px;font-family:inherit;font-size:12.5px;line-height:1.5;color:#191a1c;outline:none;background:#fff;resize:none;transition:border-color .12s,box-shadow .12s}.mtb-textarea:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b9811f}.mtb-textarea::placeholder{color:#00000057}.mtb-popup-error{margin-top:8px;color:#b91c1c;font-size:11.5px}.mtb-popup-error:empty,.mtb-popup-error[hidden]{display:none}.mtb-popup-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.mtb-cancel-btn,.mtb-submit-btn{min-width:72px;height:30px;border:none;border-radius:7px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s}.mtb-cancel-btn{background:#f3f4f6;color:#000000ad}.mtb-cancel-btn:hover{background:#e5e7eb}.mtb-submit-btn{background:#d1d5db;color:#fff}.mtb-submit-btn.ready{background:#059669}.mtb-submit-btn.ready:hover{background:#047857}.mtb-submit-btn.loading{background:#059669;opacity:.7;cursor:wait}.mtb-submit-btn:disabled{cursor:not-allowed}.mtb-success{position:fixed;z-index:2147483645;width:300px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 20px 60px #0000001f;padding:26px 22px;text-align:center;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.mtb-success-icon{width:44px;height:44px;border-radius:50%;background:#05966914;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}.mtb-success-title{font-size:16px;font-weight:700;margin-bottom:6px;color:#191a1c}.mtb-success-msg{font-size:13px;color:#0000008c;margin-bottom:16px;line-height:1.6}.mtb-close-link{background:none;border:none;cursor:pointer;font-size:12px;color:#00000073;font-family:inherit;transition:color .12s}.mtb-close-link:hover{color:#000000b3}.mtb-pet{position:fixed;bottom:20px;right:20px;z-index:2147483646;cursor:pointer;width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:transparent;animation:mtbPetBounce 3s ease-in-out infinite;transition:transform .2s;user-select:none;outline:none;filter:drop-shadow(0 4px 12px rgba(5,150,105,.35))}.mtb-pet:hover{transform:scale(1.12);animation-play-state:paused}.mtb-pet:hover .mtb-pet-bubble{opacity:1;transform:translate(-50%) translateY(0);pointer-events:auto}.mtb-pet.active{animation:none;opacity:.6}.mtb-pet-svg{display:block}@keyframes mtbPetBounce{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.mtb-pet-bubble{position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(4px);margin-bottom:8px;background:#064e3b;color:#fff;padding:6px 12px;border-radius:8px;font-size:12px;font-weight:500;white-space:nowrap;box-shadow:0 4px 14px #0000002e;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}.mtb-pet-bubble.visible{opacity:1;transform:translate(-50%) translateY(0);pointer-events:auto}.mtb-pet-bubble.hidden{opacity:0;pointer-events:none}.mtb-pet-bubble:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#064e3b}.mtb-frustration-prompt{position:fixed;bottom:20px;right:20px;z-index:2147483645;display:flex;align-items:center;gap:10px;padding:12px 16px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:12px;box-shadow:0 8px 30px #0000001f;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}:host([data-mtb-theme="dark"]) .mtb-frustration-prompt{background:#151719;border-color:#ffffff1f;color:#f9fafb}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-frustration-prompt{background:#151719;border-color:#ffffff1f;color:#f9fafb}}.mtb-frustration-icon{width:32px;height:32px;border-radius:50%;background:#eab3081a;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;line-height:1}.mtb-frustration-text{font-size:13px;font-weight:500;color:inherit;line-height:1.4}.mtb-frustration-actions{display:flex;gap:6px;flex-shrink:0}.mtb-frustration-tell{height:28px;padding:0 12px;border:none;border-radius:7px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s}.mtb-frustration-tell:hover{background:#047857}.mtb-frustration-dismiss{height:28px;padding:0 8px;border:none;border-radius:7px;background:transparent;color:#0006;cursor:pointer;font-family:inherit;font-size:12px;transition:color .12s}.mtb-frustration-dismiss:hover{color:#000000b3}:host([data-mtb-theme="dark"]) .mtb-frustration-dismiss{color:#fff6}:host([data-mtb-theme="dark"]) .mtb-frustration-dismiss:hover{color:#ffffffb3}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-frustration-dismiss{color:#fff6}:host([data-mtb-theme="auto"]) .mtb-frustration-dismiss:hover{color:#ffffffb3}}.mtb-record-bar{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:2147483647;display:flex;align-items:center;gap:12px;height:42px;padding:0 8px 0 14px;border-radius:12px;background:#0f172aeb;box-shadow:0 8px 24px #00000040;animation:mtbBarIn .2s ease}.mtb-record-dot{width:8px;height:8px;border-radius:50%;background:#ef4444;animation:mtbRecordPulse 1.2s ease-in-out infinite;flex-shrink:0}@keyframes mtbRecordPulse{0%,to{opacity:1}50%{opacity:.3}}.mtb-record-timer{font-family:JetBrains Mono,SF Mono,Fira Code,Cascadia Code,monospace;font-size:13px;font-weight:500;color:#fff;font-variant-numeric:tabular-nums;letter-spacing:.02em;min-width:38px}.mtb-record-stop{height:28px;padding:0 14px;border:none;border-radius:7px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s}.mtb-record-stop:hover{background:#047857}.mtb-click-ripple{position:fixed;z-index:2147483644;width:24px;height:24px;border-radius:50%;border:2px solid #10b981;background:#10b98133;pointer-events:none;transform:translate(-50%,-50%) scale(.5);animation:mtbClickRipple .3s ease-out forwards}@keyframes mtbClickRipple{0%{transform:translate(-50%,-50%) scale(.5);opacity:1}to{transform:translate(-50%,-50%) scale(2);opacity:0}}.mtb-dot{display:inline-block;width:4px;height:4px;border-radius:50%;background:#fff;animation:mtbDot 1.2s infinite}.mtb-dot:nth-child(2){animation-delay:.2s}.mtb-dot:nth-child(3){animation-delay:.4s}@keyframes mtbDot{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.mtb-clarify{position:fixed;z-index:2147483645;width:320px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 20px 60px #0000001f;display:flex;flex-direction:column;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow:hidden}.mtb-clarify-header{padding:10px 13px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(0,0,0,.06)}.mtb-clarify-icon{width:26px;height:26px;border-radius:50%;background:#05966914;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mtb-clarify-skip{background:none;border:none;cursor:pointer;font-size:12px;color:#00000073;font-family:inherit;transition:color .12s}.mtb-clarify-skip:hover{color:#000000b3}.mtb-clarify-messages{flex:1;max-height:240px;overflow-y:auto;padding:12px 13px;display:flex;flex-direction:column;gap:8px}.mtb-clarify-bubble{max-width:85%;padding:8px 12px;border-radius:12px;font-size:13px;line-height:1.5;word-wrap:break-word}.mtb-clarify-ai{align-self:flex-start;background:#f3f4f6;color:#191a1c;border-bottom-left-radius:4px}.mtb-clarify-user{align-self:flex-end;background:#059669;color:#fff;border-bottom-right-radius:4px}.mtb-clarify-thinking{display:flex;align-items:center;gap:3px;padding:10px 16px}.mtb-clarify-thinking .mtb-dot{background:#9ca3af}.mtb-clarify-footer{padding:10px 13px;border-top:1px solid rgba(0,0,0,.06);display:flex;gap:8px}.mtb-clarify-input{flex:1;height:32px;padding:0 10px;border:1px solid rgba(0,0,0,.12);border-radius:8px;font-family:inherit;font-size:12.5px;color:#191a1c;outline:none;background:#fff;transition:border-color .12s,box-shadow .12s}.mtb-clarify-input:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b9811f}.mtb-clarify-input::placeholder{color:#00000057}.mtb-clarify-send{height:32px;padding:0 14px;border:none;border-radius:8px;background:#d1d5db;color:#fff;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s;flex-shrink:0}.mtb-clarify-send:not(:disabled){background:#059669}.mtb-clarify-send:not(:disabled):hover{background:#047857}.mtb-clarify-send:disabled{cursor:not-allowed}:host([data-mtb-theme="dark"]) .mtb-clarify{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-clarify-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="dark"]) .mtb-clarify-footer{border-top-color:#ffffff1a}:host([data-mtb-theme="dark"]) .mtb-clarify-skip{color:#ffffff73}:host([data-mtb-theme="dark"]) .mtb-clarify-skip:hover{color:#ffffffb3}:host([data-mtb-theme="dark"]) .mtb-clarify-ai{background:#1f2327;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-clarify-input{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-clarify{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="auto"]) .mtb-clarify-footer{border-top-color:#ffffff1a}:host([data-mtb-theme="auto"]) .mtb-clarify-skip{color:#ffffff73}:host([data-mtb-theme="auto"]) .mtb-clarify-skip:hover{color:#ffffffb3}:host([data-mtb-theme="auto"]) .mtb-clarify-ai{background:#1f2327;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-input{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}}';class pt{constructor(t="auto"){this.host=document.createElement("div"),this.host.id="mtb-widget-host",this.host.style.cssText="position:fixed;top:0;left:0;width:0;height:0;overflow:visible;z-index:2147483646;",this.host.setAttribute("data-mtb-theme",t),document.body.appendChild(this.host),this.root=this.host.attachShadow({mode:"open"});const e=document.createElement("style");e.textContent=ut,this.root.appendChild(e)}el(t,e){const s=document.createElement(t);return e&&(s.className=e),s}append(...t){for(const e of t)this.root.appendChild(e)}remove(...t){for(const e of t)e.parentNode===this.root&&this.root.removeChild(e)}destroy(){document.body.removeChild(this.host)}}class ft{constructor(t,e,s,r,n){this.onClick=r,this.el=t.el("button","mtb-tab"),s==="left"&&this.el.classList.add("left");const o=n??e.tab;this.el.textContent=o,this.el.setAttribute("aria-label",o),this.el.addEventListener("click",r),t.append(this.el)}setActive(t){this.el.classList.toggle("active",t)}destroy(){this.el.removeEventListener("click",this.onClick),this.el.remove()}}const mt=8e3;class bt{constructor(t,e,s){this.el=t.el("div","mtb-frustration-prompt"),this.el.innerHTML=`
1
+ "use strict";var ot=Object.create;var H=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var lt=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,ht=Object.prototype.hasOwnProperty;var dt=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of lt(t))!ht.call(i,r)&&r!==e&&H(i,r,{get:()=>t[r],enumerable:!(s=at(t,r))||s.enumerable});return i};var ut=(i,t,e)=>(e=i!=null?ot(ct(i)):{},dt(t||!i||!i.__esModule?H(e,"default",{value:i,enumerable:!0}):e,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const pt='*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{all:initial;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;color:#191a1c;-webkit-font-smoothing:antialiased}:host([data-mtb-theme="dark"]) .mtb-popup,:host([data-mtb-theme="dark"]) .mtb-success{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-popup-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="dark"]) .mtb-popup-title,:host([data-mtb-theme="dark"]) .mtb-success-title{color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-quick-option,:host([data-mtb-theme="dark"]) .mtb-textarea{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-popup-close,:host([data-mtb-theme="dark"]) .mtb-success-msg,:host([data-mtb-theme="dark"]) .mtb-close-link{color:#ffffffad}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-popup,:host([data-mtb-theme="auto"]) .mtb-success{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-popup-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="auto"]) .mtb-popup-title,:host([data-mtb-theme="auto"]) .mtb-success-title{color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-quick-option,:host([data-mtb-theme="auto"]) .mtb-textarea{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-popup-close,:host([data-mtb-theme="auto"]) .mtb-success-msg,:host([data-mtb-theme="auto"]) .mtb-close-link{color:#ffffffad}}.mtb-tab{position:fixed;top:50%;right:0;transform:translateY(-50%);z-index:2147483646;display:flex;align-items:center;justify-content:center;width:32px;padding:14px 0;background:#059669;color:#fff;border-radius:8px 0 0 8px;cursor:pointer;box-shadow:-2px 0 14px #05966959;transition:background .15s,box-shadow .15s,width .15s;writing-mode:vertical-lr;text-orientation:mixed;font-size:12px;font-weight:600;letter-spacing:.04em;user-select:none;border:none;outline:none}.mtb-tab.left{right:auto;left:0;border-radius:0 8px 8px 0;box-shadow:2px 0 14px #05966959}.mtb-tab:hover{background:#047857;box-shadow:-3px 0 20px #05966980}.mtb-tab.active{background:#065f46}.mtb-toolbar{position:fixed;top:18px;left:50%;transform:translate(-50%);z-index:2147483647;display:flex;align-items:center;gap:11px;height:46px;padding:0 7px;border-radius:13px;background:linear-gradient(120deg,#10b981,#059669);box-shadow:0 10px 26px #0f172a38;animation:mtbBarIn .2s ease;white-space:nowrap}@keyframes mtbBarIn{0%{transform:translate(-50%,12px);opacity:0}to{transform:translate(-50%);opacity:1}}.mtb-toolbar-modes{display:flex;align-items:center;gap:3px;background:#ffffff29;border-radius:9px;padding:3px}.mtb-toolbar-mode-btn{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:7px;border:none;cursor:pointer;font-family:inherit;font-size:12px;font-weight:550;white-space:nowrap;background:transparent;color:#fffffff2;transition:all .12s}.mtb-toolbar-mode-btn.active{background:#fff;color:#047857}.mtb-toolbar-hint{font-size:12px;color:#fffffff2;white-space:nowrap}.mtb-toolbar-sep{width:1px;height:20px;background:#ffffff38}.mtb-exit-btn{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border-radius:8px;font-size:11.5px;font-weight:500;color:#fff;cursor:pointer;background:#ffffff29;border:none;font-family:inherit;transition:background .12s}.mtb-exit-btn:hover{background:#ffffff47}.mtb-overlay{position:fixed;inset:0;z-index:2147483640;cursor:crosshair}.mtb-dim{position:fixed;inset:0;z-index:2147483639;background:#00000014}.mtb-highlight{position:fixed;z-index:2147483641;pointer-events:none;border:2px solid #10b981;border-radius:6px;background:#10b9810f;transition:all .08s ease}.mtb-highlight-tooltip{position:fixed;z-index:2147483642;pointer-events:none;transform:translate(-50%);background:#064e3b;color:#fff;padding:4px 10px;border-radius:6px;font-size:11px;font-weight:500;white-space:nowrap;box-shadow:0 4px 12px #0000002e}.mtb-highlight-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#064e3b}.mtb-draw-svg{position:fixed;inset:0;z-index:2147483643;pointer-events:none;width:100%;height:100%;overflow:visible}.mtb-pin{position:fixed;z-index:2147483644;pointer-events:none;width:22px;height:22px;border-radius:50% 50% 50% 2px;background:#059669;border:2px solid #fff;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;font-weight:700;box-shadow:0 2px 8px #05966973;animation:mtbPinPop .25s cubic-bezier(.34,1.56,.64,1);transform:translate(-50%,-50%)}@keyframes mtbPinPop{0%{transform:translate(-50%,-50%) scale(.4)}to{transform:translate(-50%,-50%) scale(1)}}.mtb-popup{position:fixed;z-index:2147483645;width:320px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:14px;box-shadow:0 12px 40px #00000029;overflow:hidden;animation:mtbSlideUp .28s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}@keyframes mtbSlideUp{0%{transform:translateY(14px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.mtb-popup-header{padding:11px 13px 11px 14px;border-bottom:1px solid rgba(0,0,0,.06);display:flex;align-items:center;gap:8px}.mtb-popup-icon{width:20px;height:20px;border-radius:5px;background:#10b9811a;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mtb-popup-title{flex:1;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#191a1c}.mtb-popup-close{background:none;border:none;cursor:pointer;padding:3px;color:#00000061;display:flex;align-items:center;border-radius:4px;transition:color .12s}.mtb-popup-close:hover{color:#000000b3}.mtb-popup-body{padding:13px}.mtb-quick-options{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.mtb-quick-option{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid rgba(0,0,0,.09);border-radius:10px;background:#fafafa;cursor:pointer;font-family:inherit;font-size:13px;color:#191a1c;text-align:left;transition:all .12s}.mtb-quick-option:hover{background:#10b9810f;border-color:#10b9814d}.mtb-quick-option-emoji{font-size:15px;flex-shrink:0;line-height:1}.mtb-textarea-wrap{position:relative}.mtb-textarea{width:100%;height:64px;padding:9px 11px;border:1px solid rgba(0,0,0,.12);border-radius:9px;font-family:inherit;font-size:12.5px;line-height:1.5;color:#191a1c;outline:none;background:#fff;resize:none;transition:border-color .12s,box-shadow .12s}.mtb-textarea:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b9811f}.mtb-textarea::placeholder{color:#00000057}.mtb-popup-error{margin-top:8px;color:#b91c1c;font-size:11.5px}.mtb-popup-error:empty,.mtb-popup-error[hidden]{display:none}.mtb-popup-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.mtb-cancel-btn,.mtb-submit-btn{min-width:72px;height:30px;border:none;border-radius:7px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s}.mtb-cancel-btn{background:#f3f4f6;color:#000000ad}.mtb-cancel-btn:hover{background:#e5e7eb}.mtb-submit-btn{background:#d1d5db;color:#fff}.mtb-submit-btn.ready{background:#059669}.mtb-submit-btn.ready:hover{background:#047857}.mtb-submit-btn.loading{background:#059669;opacity:.7;cursor:wait}.mtb-submit-btn:disabled{cursor:not-allowed}.mtb-success{position:fixed;z-index:2147483645;width:300px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 20px 60px #0000001f;padding:26px 22px;text-align:center;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.mtb-success-icon{width:44px;height:44px;border-radius:50%;background:#05966914;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}.mtb-success-title{font-size:16px;font-weight:700;margin-bottom:6px;color:#191a1c}.mtb-success-msg{font-size:13px;color:#0000008c;margin-bottom:16px;line-height:1.6}.mtb-close-link{background:none;border:none;cursor:pointer;font-size:12px;color:#00000073;font-family:inherit;transition:color .12s}.mtb-close-link:hover{color:#000000b3}.mtb-pet{position:fixed;bottom:20px;right:20px;z-index:2147483646;cursor:pointer;width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:transparent;animation:mtbPetBounce 3s ease-in-out infinite;transition:transform .2s;user-select:none;outline:none;filter:drop-shadow(0 4px 12px rgba(5,150,105,.35))}.mtb-pet:hover{transform:scale(1.12);animation-play-state:paused}.mtb-pet:hover .mtb-pet-bubble{opacity:1;transform:translate(-50%) translateY(0);pointer-events:auto}.mtb-pet.active{animation:none;opacity:.6}.mtb-pet-svg{display:block}@keyframes mtbPetBounce{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.mtb-pet-bubble{position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(4px);margin-bottom:8px;background:#064e3b;color:#fff;padding:6px 12px;border-radius:8px;font-size:12px;font-weight:500;white-space:nowrap;box-shadow:0 4px 14px #0000002e;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}.mtb-pet-bubble.visible{opacity:1;transform:translate(-50%) translateY(0);pointer-events:auto}.mtb-pet-bubble.hidden{opacity:0;pointer-events:none}.mtb-pet-bubble:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:#064e3b}.mtb-frustration-prompt{position:fixed;bottom:20px;right:20px;z-index:2147483645;display:flex;align-items:center;gap:10px;padding:12px 16px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:12px;box-shadow:0 8px 30px #0000001f;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}:host([data-mtb-theme="dark"]) .mtb-frustration-prompt{background:#151719;border-color:#ffffff1f;color:#f9fafb}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-frustration-prompt{background:#151719;border-color:#ffffff1f;color:#f9fafb}}.mtb-frustration-icon{width:32px;height:32px;border-radius:50%;background:#eab3081a;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;line-height:1}.mtb-frustration-text{font-size:13px;font-weight:500;color:inherit;line-height:1.4}.mtb-frustration-actions{display:flex;gap:6px;flex-shrink:0}.mtb-frustration-tell{height:28px;padding:0 12px;border:none;border-radius:7px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s}.mtb-frustration-tell:hover{background:#047857}.mtb-frustration-dismiss{height:28px;padding:0 8px;border:none;border-radius:7px;background:transparent;color:#0006;cursor:pointer;font-family:inherit;font-size:12px;transition:color .12s}.mtb-frustration-dismiss:hover{color:#000000b3}:host([data-mtb-theme="dark"]) .mtb-frustration-dismiss{color:#fff6}:host([data-mtb-theme="dark"]) .mtb-frustration-dismiss:hover{color:#ffffffb3}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-frustration-dismiss{color:#fff6}:host([data-mtb-theme="auto"]) .mtb-frustration-dismiss:hover{color:#ffffffb3}}.mtb-record-bar{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:2147483647;display:flex;align-items:center;gap:12px;height:42px;padding:0 8px 0 14px;border-radius:12px;background:#0f172aeb;box-shadow:0 8px 24px #00000040;animation:mtbBarIn .2s ease}.mtb-record-dot{width:8px;height:8px;border-radius:50%;background:#ef4444;animation:mtbRecordPulse 1.2s ease-in-out infinite;flex-shrink:0}@keyframes mtbRecordPulse{0%,to{opacity:1}50%{opacity:.3}}.mtb-record-timer{font-family:JetBrains Mono,SF Mono,Fira Code,Cascadia Code,monospace;font-size:13px;font-weight:500;color:#fff;font-variant-numeric:tabular-nums;letter-spacing:.02em;min-width:38px}.mtb-record-stop{height:28px;padding:0 14px;border:none;border-radius:7px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s}.mtb-record-stop:hover{background:#047857}.mtb-click-ripple{position:fixed;z-index:2147483644;width:24px;height:24px;border-radius:50%;border:2px solid #10b981;background:#10b98133;pointer-events:none;transform:translate(-50%,-50%) scale(.5);animation:mtbClickRipple .3s ease-out forwards}@keyframes mtbClickRipple{0%{transform:translate(-50%,-50%) scale(.5);opacity:1}to{transform:translate(-50%,-50%) scale(2);opacity:0}}.mtb-dot{display:inline-block;width:4px;height:4px;border-radius:50%;background:#fff;animation:mtbDot 1.2s infinite}.mtb-dot:nth-child(2){animation-delay:.2s}.mtb-dot:nth-child(3){animation-delay:.4s}@keyframes mtbDot{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.mtb-clarify{position:fixed;z-index:2147483645;width:320px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 20px 60px #0000001f;display:flex;flex-direction:column;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow:hidden}.mtb-clarify-header{padding:10px 13px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(0,0,0,.06)}.mtb-clarify-icon{width:26px;height:26px;border-radius:50%;background:#05966914;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mtb-clarify-skip{background:none;border:none;cursor:pointer;font-size:12px;color:#00000073;font-family:inherit;transition:color .12s}.mtb-clarify-skip:hover{color:#000000b3}.mtb-clarify-messages{flex:1;max-height:240px;overflow-y:auto;padding:12px 13px;display:flex;flex-direction:column;gap:8px}.mtb-clarify-bubble{max-width:85%;padding:8px 12px;border-radius:12px;font-size:13px;line-height:1.5;word-wrap:break-word}.mtb-clarify-ai{align-self:flex-start;background:#f3f4f6;color:#191a1c;border-bottom-left-radius:4px}.mtb-clarify-user{align-self:flex-end;background:#059669;color:#fff;border-bottom-right-radius:4px}.mtb-clarify-thinking{display:flex;align-items:center;gap:3px;padding:10px 16px}.mtb-clarify-thinking .mtb-dot{background:#9ca3af}.mtb-clarify-footer{padding:10px 13px;border-top:1px solid rgba(0,0,0,.06);display:flex;gap:8px}.mtb-clarify-input{flex:1;height:32px;padding:0 10px;border:1px solid rgba(0,0,0,.12);border-radius:8px;font-family:inherit;font-size:12.5px;color:#191a1c;outline:none;background:#fff;transition:border-color .12s,box-shadow .12s}.mtb-clarify-input:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b9811f}.mtb-clarify-input::placeholder{color:#00000057}.mtb-clarify-send{height:32px;padding:0 14px;border:none;border-radius:8px;background:#d1d5db;color:#fff;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;transition:background .12s;flex-shrink:0}.mtb-clarify-send:not(:disabled){background:#059669}.mtb-clarify-send:not(:disabled):hover{background:#047857}.mtb-clarify-send:disabled{cursor:not-allowed}:host([data-mtb-theme="dark"]) .mtb-clarify{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-clarify-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="dark"]) .mtb-clarify-footer{border-top-color:#ffffff1a}:host([data-mtb-theme="dark"]) .mtb-clarify-skip{color:#ffffff73}:host([data-mtb-theme="dark"]) .mtb-clarify-skip:hover{color:#ffffffb3}:host([data-mtb-theme="dark"]) .mtb-clarify-ai{background:#1f2327;color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-clarify-input{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}@media (prefers-color-scheme: dark){:host([data-mtb-theme="auto"]) .mtb-clarify{background:#151719;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-header{border-bottom-color:#ffffff1a}:host([data-mtb-theme="auto"]) .mtb-clarify-footer{border-top-color:#ffffff1a}:host([data-mtb-theme="auto"]) .mtb-clarify-skip{color:#ffffff73}:host([data-mtb-theme="auto"]) .mtb-clarify-skip:hover{color:#ffffffb3}:host([data-mtb-theme="auto"]) .mtb-clarify-ai{background:#1f2327;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-input{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}}';class mt{constructor(t="auto"){this.host=document.createElement("div"),this.host.id="mtb-widget-host",this.host.style.cssText="position:fixed;top:0;left:0;width:0;height:0;overflow:visible;z-index:2147483646;",this.host.setAttribute("data-mtb-theme",t),document.body.appendChild(this.host),this.root=this.host.attachShadow({mode:"open"});const e=document.createElement("style");e.textContent=pt,this.root.appendChild(e)}el(t,e){const s=document.createElement(t);return e&&(s.className=e),s}append(...t){for(const e of t)this.root.appendChild(e)}remove(...t){for(const e of t)e.parentNode===this.root&&this.root.removeChild(e)}destroy(){document.body.removeChild(this.host)}}class ft{constructor(t,e,s,r,n){this.onClick=r,this.el=t.el("button","mtb-tab"),s==="left"&&this.el.classList.add("left");const o=n??e.tab;this.el.textContent=o,this.el.setAttribute("aria-label",o),this.el.addEventListener("click",r),t.append(this.el)}setActive(t){this.el.classList.toggle("active",t)}destroy(){this.el.removeEventListener("click",this.onClick),this.el.remove()}}const bt=8e3;class gt{constructor(t,e,s){this.el=t.el("div","mtb-frustration-prompt"),this.el.innerHTML=`
2
2
  <div class="mtb-frustration-icon">&#9888;&#65039;</div>
3
3
  <span class="mtb-frustration-text">${e.frustration.prompt}</span>
4
4
  <div class="mtb-frustration-actions">
5
5
  <button class="mtb-frustration-tell">${e.frustration.action}</button>
6
6
  <button class="mtb-frustration-dismiss">${e.frustration.dismiss}</button>
7
7
  </div>
8
- `,this.el.querySelector(".mtb-frustration-tell").addEventListener("click",s.onTell),this.el.querySelector(".mtb-frustration-dismiss").addEventListener("click",s.onDismiss),t.append(this.el),setTimeout(s.onDismiss,mt)}destroy(){this.el.remove()}}class gt{constructor(t,e,s,r){this.currentMode="markup",this.messages=e,this.el=t.el("div","mtb-toolbar"),this.el.innerHTML=this.buildHTML(e),t.append(this.el),this.hintEl=this.el.querySelector(".mtb-toolbar-hint"),this.markupBtn=this.el.querySelector(".mtb-toolbar-mode-markup"),this.recordBtn=this.el.querySelector(".mtb-toolbar-mode-record"),this.markupBtn.addEventListener("click",()=>{this.setMode("markup"),r?.("markup")}),this.recordBtn.addEventListener("click",()=>{this.setMode("record"),r?.("record")}),this.el.querySelector(".mtb-exit-btn").addEventListener("click",s)}buildHTML(t){return`
8
+ `,this.el.querySelector(".mtb-frustration-tell").addEventListener("click",s.onTell),this.el.querySelector(".mtb-frustration-dismiss").addEventListener("click",s.onDismiss),t.append(this.el),setTimeout(s.onDismiss,bt)}destroy(){this.el.remove()}}class yt{constructor(t,e,s,r){this.currentMode="markup",this.messages=e,this.el=t.el("div","mtb-toolbar"),this.el.innerHTML=this.buildHTML(e),t.append(this.el),this.hintEl=this.el.querySelector(".mtb-toolbar-hint"),this.markupBtn=this.el.querySelector(".mtb-toolbar-mode-markup"),this.recordBtn=this.el.querySelector(".mtb-toolbar-mode-record"),this.markupBtn.addEventListener("click",()=>{this.setMode("markup"),r?.("markup")}),this.recordBtn.addEventListener("click",()=>{this.setMode("record"),r?.("record")}),this.el.querySelector(".mtb-exit-btn").addEventListener("click",s)}buildHTML(t){return`
9
9
  <div class="mtb-toolbar-modes">
10
10
  <button class="mtb-toolbar-mode-btn mtb-toolbar-mode-markup active">
11
11
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><line x1="12" y1="3" x2="12" y2="7"/><line x1="12" y1="17" x2="12" y2="21"/><line x1="3" y1="12" x2="7" y2="12"/><line x1="17" y1="12" x2="21" y2="12"/></svg>${t.toolbar.markup}
@@ -21,10 +21,10 @@
21
21
  <path d="M18 6L6 18M6 6l12 12"/>
22
22
  </svg>${t.toolbar.exit}
23
23
  </button>
24
- `}setMode(t){this.currentMode=t,t==="markup"?(this.markupBtn.classList.add("active"),this.recordBtn.classList.remove("active"),this.hintEl.textContent=this.messages.toolbar.hint):(this.markupBtn.classList.remove("active"),this.recordBtn.classList.add("active"),this.hintEl.textContent=this.messages.toolbar.hintRecord)}getMode(){return this.currentMode}destroy(){this.el.remove()}}class yt{constructor(t,e){this.onMouseDown=e.onMouseDown,this.onMouseMove=e.onMouseMove,this.onMouseUp=e.onMouseUp,this.onMouseLeave=e.onMouseLeave,this.overlayEl=t.el("div","mtb-overlay"),this.overlayEl.addEventListener("mousedown",this.onMouseDown),this.overlayEl.addEventListener("mousemove",this.onMouseMove),this.overlayEl.addEventListener("mouseup",this.onMouseUp),this.overlayEl.addEventListener("mouseleave",this.onMouseLeave),t.append(this.overlayEl),this.dimEl=t.el("div","mtb-dim"),t.append(this.dimEl)}destroy(){this.overlayEl.removeEventListener("mousedown",this.onMouseDown),this.overlayEl.removeEventListener("mousemove",this.onMouseMove),this.overlayEl.removeEventListener("mouseup",this.onMouseUp),this.overlayEl.removeEventListener("mouseleave",this.onMouseLeave),this.overlayEl.remove(),this.dimEl.remove()}}class xt{constructor(t){this.highlightEl=t.el("div","mtb-highlight"),this.hide(),t.append(this.highlightEl)}highlight(t){const e=t.getBoundingClientRect();this.highlightEl.style.top=`${e.top-2}px`,this.highlightEl.style.left=`${e.left-2}px`,this.highlightEl.style.width=`${e.width+4}px`,this.highlightEl.style.height=`${e.height+4}px`,this.highlightEl.style.display="block"}hide(){this.highlightEl.style.display="none"}destroy(){this.highlightEl.remove()}}function wt(i){if(i instanceof HTMLElement){const t=i.getAttribute("aria-label");if(t)return t;const e=i.getAttribute("title");if(e)return e;const s=i.textContent?.trim().slice(0,40);if(s)return s;const r=i.placeholder;if(r)return r;const n=i.alt;if(n)return n;const o=i.getAttribute("data-mark");if(o)return o}return i.tagName.toLowerCase()}function kt(i){const t=[];let e=i;for(;e&&e!==document.body&&t.length<5;){let s=e.tagName.toLowerCase();if(e.id){s=`#${e.id}`,t.unshift(s);break}const r=Array.from(e.classList).filter(o=>!o.startsWith("mtb-")).slice(0,2).join(".");r&&(s+=`.${r}`);const n=e.parentElement;if(n){const o=Array.from(n.children).filter(a=>a.tagName===e.tagName);if(o.length>1){const a=o.indexOf(e)+1;s+=`:nth-child(${a})`}}t.unshift(s),e=e.parentElement}return t.join(" > ")}class vt{constructor(t){this.pins=[],this.shadow=t}addPin(t,e,s){const r=this.shadow.el("div","mtb-pin");r.textContent=String(s),r.style.top=`${e}px`,r.style.left=`${t}px`,this.shadow.append(r),this.pins.push(r)}clearAll(){for(const t of this.pins)t.remove();this.pins=[]}destroy(){this.clearAll()}}const R="#059669",x={color:R,width:"3.5",linecap:"round",linejoin:"round",filter:"drop-shadow(0 1px 2px rgba(5,150,105,0.35))"};class St{constructor(t,e){this.path=null,this.points=[],this.isDrawing=!1,this.onDrawComplete=e,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.setAttribute("class","mtb-draw-svg"),t.append(this.svg)}startDraw(t,e){this.isDrawing=!0,this.points=[[t,e]],this.path=document.createElementNS("http://www.w3.org/2000/svg","path"),this.path.setAttribute("fill","none"),this.path.setAttribute("stroke",x.color),this.path.setAttribute("stroke-width",x.width),this.path.setAttribute("stroke-linecap",x.linecap),this.path.setAttribute("stroke-linejoin",x.linejoin),this.path.setAttribute("style",`filter:${x.filter}`),this.svg.appendChild(this.path)}continueDraw(t,e){!this.isDrawing||!this.path||(this.points.push([t,e]),this.path.setAttribute("d",this.buildPathD()))}endDraw(){if(!this.isDrawing||this.points.length<2){this.isDrawing=!1,this.path&&(this.path.remove(),this.path=null);return}this.isDrawing=!1;const t=this.getCenter(),e=this.buildPathD(),s={type:"draw",x:t[0],y:t[1],drawPath:e};this.onDrawComplete(s)}buildPathD(){if(this.points.length===0)return"";const[t,e]=this.points[0];let s=`M ${t} ${e}`;for(let r=1;r<this.points.length;r++){const[n,o]=this.points[r];s+=` L ${n} ${o}`}return s}getCenter(){const t=this.points.map(n=>n[0]),e=this.points.map(n=>n[1]),s=(Math.min(...t)+Math.max(...t))/2,r=(Math.min(...e)+Math.max(...e))/2;return[s,r]}clearAll(){for(;this.svg.firstChild;)this.svg.removeChild(this.svg.firstChild);this.path=null,this.isDrawing=!1,this.points=[]}cancelCurrentDraw(){this.path?.remove(),this.path=null,this.isDrawing=!1,this.points=[]}isCurrentlyDrawing(){return this.isDrawing}getPointCount(){return this.points.length}destroy(){this.svg.remove()}}const Et=5;class ${constructor(t,e,s){this.messages=e,this.onReady=s,this.pinCount=0,this.interactionActive=!0,this.pendingHighlightFrame=null,this.lastMoveX=0,this.lastMoveY=0,this.highlighter=new xt(t),this.pinMarker=new vt(t),this.drawLayer=new St(t,r=>{this.onReady(r,this.messages.annotation.drawing)}),this.overlay=new yt(t,{onMouseDown:r=>this.handleMouseDown(r),onMouseMove:r=>this.handleMouseMove(r),onMouseUp:r=>this.handleMouseUp(r),onMouseLeave:()=>{this.drawLayer.isCurrentlyDrawing()&&this.drawLayer.endDraw(),this.cancelPendingHighlight(),this.highlighter.hide()}})}handleMouseDown(t){t.preventDefault(),this.drawLayer.startDraw(t.clientX,t.clientY)}handleMouseMove(t){if(this.drawLayer.isCurrentlyDrawing()){this.cancelPendingHighlight(),this.drawLayer.continueDraw(t.clientX,t.clientY),this.highlighter.hide();return}this.lastMoveX=t.clientX,this.lastMoveY=t.clientY,this.pendingHighlightFrame===null&&(this.pendingHighlightFrame=requestAnimationFrame(()=>{this.pendingHighlightFrame=null,this.updateHighlight()}))}updateHighlight(){if(!this.interactionActive||this.drawLayer.isCurrentlyDrawing())return;const t=I(this.lastMoveX,this.lastMoveY);t?this.highlighter.highlight(t):this.highlighter.hide()}cancelPendingHighlight(){this.pendingHighlightFrame!==null&&(cancelAnimationFrame(this.pendingHighlightFrame),this.pendingHighlightFrame=null)}handleMouseUp(t){if(!this.drawLayer.isCurrentlyDrawing())return;if(this.drawLayer.getPointCount()>=Et){this.drawLayer.endDraw();return}this.drawLayer.cancelCurrentDraw();const e=I(t.clientX,t.clientY),s=e?wt(e):this.messages.annotation.element,r={type:"pin",x:t.clientX,y:t.clientY,targetSelector:e?kt(e):void 0,targetText:e?.textContent?.trim().slice(0,200)??"",targetName:s};this.pinMarker.addPin(t.clientX,t.clientY,++this.pinCount),this.drawLayer.clearAll(),this.highlighter.hide(),this.onReady(r,s)}dismissInteraction(){this.interactionActive&&(this.interactionActive=!1,this.cancelPendingHighlight(),this.overlay.destroy(),this.highlighter.destroy())}destroy(){this.dismissInteraction(),this.pinMarker.destroy(),this.drawLayer.destroy()}}function I(i,t){return document.elementsFromPoint(i,t).find(e=>e.id!=="mtb-widget-host")??null}class Ct{constructor(t,e){this.loading=!1,this.onSubmit=e.onSubmit,this.onClose=e.onClose,this.submitLabel=e.messages.popup.submit,this.el=t.el("div","mtb-popup"),this.el.innerHTML=this.buildHTML(e),t.append(this.el),this.textarea=this.el.querySelector(".mtb-textarea"),this.submitBtn=this.el.querySelector(".mtb-submit-btn"),this.positionPopup(e.x,e.y),this.bindEvents(e.messages),this.textarea.focus()}buildHTML(t){const e=t.messages,s=e.popup.quickOptions.map(r=>`
25
- <button class="mtb-quick-option" data-quick="${m(r.label)}">
24
+ `}setMode(t){this.currentMode=t,t==="markup"?(this.markupBtn.classList.add("active"),this.recordBtn.classList.remove("active"),this.hintEl.textContent=this.messages.toolbar.hint):(this.markupBtn.classList.remove("active"),this.recordBtn.classList.add("active"),this.hintEl.textContent=this.messages.toolbar.hintRecord)}getMode(){return this.currentMode}destroy(){this.el.remove()}}class xt{constructor(t,e){this.onMouseDown=e.onMouseDown,this.onMouseMove=e.onMouseMove,this.onMouseUp=e.onMouseUp,this.onMouseLeave=e.onMouseLeave,this.overlayEl=t.el("div","mtb-overlay"),this.overlayEl.addEventListener("mousedown",this.onMouseDown),this.overlayEl.addEventListener("mousemove",this.onMouseMove),this.overlayEl.addEventListener("mouseup",this.onMouseUp),this.overlayEl.addEventListener("mouseleave",this.onMouseLeave),t.append(this.overlayEl),this.dimEl=t.el("div","mtb-dim"),t.append(this.dimEl)}destroy(){this.overlayEl.removeEventListener("mousedown",this.onMouseDown),this.overlayEl.removeEventListener("mousemove",this.onMouseMove),this.overlayEl.removeEventListener("mouseup",this.onMouseUp),this.overlayEl.removeEventListener("mouseleave",this.onMouseLeave),this.overlayEl.remove(),this.dimEl.remove()}}class wt{constructor(t){this.highlightEl=t.el("div","mtb-highlight"),this.hide(),t.append(this.highlightEl)}highlight(t){const e=t.getBoundingClientRect();this.highlightEl.style.top=`${e.top-2}px`,this.highlightEl.style.left=`${e.left-2}px`,this.highlightEl.style.width=`${e.width+4}px`,this.highlightEl.style.height=`${e.height+4}px`,this.highlightEl.style.display="block"}hide(){this.highlightEl.style.display="none"}destroy(){this.highlightEl.remove()}}function kt(i){if(i instanceof HTMLElement){const t=i.getAttribute("aria-label");if(t)return t;const e=i.getAttribute("title");if(e)return e;const s=i.textContent?.trim().slice(0,40);if(s)return s;const r=i.placeholder;if(r)return r;const n=i.alt;if(n)return n;const o=i.getAttribute("data-mark");if(o)return o}return i.tagName.toLowerCase()}function vt(i){const t=[];let e=i;for(;e&&e!==document.body&&t.length<5;){let s=e.tagName.toLowerCase();if(e.id){s=`#${e.id}`,t.unshift(s);break}const r=Array.from(e.classList).filter(o=>!o.startsWith("mtb-")).slice(0,2).join(".");r&&(s+=`.${r}`);const n=e.parentElement;if(n){const o=Array.from(n.children).filter(a=>a.tagName===e.tagName);if(o.length>1){const a=o.indexOf(e)+1;s+=`:nth-child(${a})`}}t.unshift(s),e=e.parentElement}return t.join(" > ")}class St{constructor(t){this.pins=[],this.shadow=t}addPin(t,e,s){const r=this.shadow.el("div","mtb-pin");r.textContent=String(s),r.style.top=`${e}px`,r.style.left=`${t}px`,this.shadow.append(r),this.pins.push(r)}clearAll(){for(const t of this.pins)t.remove();this.pins=[]}destroy(){this.clearAll()}}const A="#059669",x={color:A,width:"3.5",linecap:"round",linejoin:"round",filter:"drop-shadow(0 1px 2px rgba(5,150,105,0.35))"};class Et{constructor(t,e){this.path=null,this.points=[],this.isDrawing=!1,this.onDrawComplete=e,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.setAttribute("class","mtb-draw-svg"),t.append(this.svg)}startDraw(t,e){this.isDrawing=!0,this.points=[[t,e]],this.path=document.createElementNS("http://www.w3.org/2000/svg","path"),this.path.setAttribute("fill","none"),this.path.setAttribute("stroke",x.color),this.path.setAttribute("stroke-width",x.width),this.path.setAttribute("stroke-linecap",x.linecap),this.path.setAttribute("stroke-linejoin",x.linejoin),this.path.setAttribute("style",`filter:${x.filter}`),this.svg.appendChild(this.path)}continueDraw(t,e){!this.isDrawing||!this.path||(this.points.push([t,e]),this.path.setAttribute("d",this.buildPathD()))}endDraw(){if(!this.isDrawing||this.points.length<2){this.isDrawing=!1,this.path&&(this.path.remove(),this.path=null);return}this.isDrawing=!1;const t=this.getCenter(),e=this.buildPathD(),s={type:"draw",x:t[0],y:t[1],drawPath:e};this.onDrawComplete(s)}buildPathD(){if(this.points.length===0)return"";const[t,e]=this.points[0];let s=`M ${t} ${e}`;for(let r=1;r<this.points.length;r++){const[n,o]=this.points[r];s+=` L ${n} ${o}`}return s}getCenter(){const t=this.points.map(n=>n[0]),e=this.points.map(n=>n[1]),s=(Math.min(...t)+Math.max(...t))/2,r=(Math.min(...e)+Math.max(...e))/2;return[s,r]}clearAll(){for(;this.svg.firstChild;)this.svg.removeChild(this.svg.firstChild);this.path=null,this.isDrawing=!1,this.points=[]}cancelCurrentDraw(){this.path?.remove(),this.path=null,this.isDrawing=!1,this.points=[]}isCurrentlyDrawing(){return this.isDrawing}getPointCount(){return this.points.length}destroy(){this.svg.remove()}}const Ct=5;class ${constructor(t,e,s){this.messages=e,this.onReady=s,this.pinCount=0,this.interactionActive=!0,this.pendingHighlightFrame=null,this.lastMoveX=0,this.lastMoveY=0,this.highlighter=new wt(t),this.pinMarker=new St(t),this.drawLayer=new Et(t,r=>{this.onReady(r,this.messages.annotation.drawing)}),this.overlay=new xt(t,{onMouseDown:r=>this.handleMouseDown(r),onMouseMove:r=>this.handleMouseMove(r),onMouseUp:r=>this.handleMouseUp(r),onMouseLeave:()=>{this.drawLayer.isCurrentlyDrawing()&&this.drawLayer.endDraw(),this.cancelPendingHighlight(),this.highlighter.hide()}})}handleMouseDown(t){t.preventDefault(),this.drawLayer.startDraw(t.clientX,t.clientY)}handleMouseMove(t){if(this.drawLayer.isCurrentlyDrawing()){this.cancelPendingHighlight(),this.drawLayer.continueDraw(t.clientX,t.clientY),this.highlighter.hide();return}this.lastMoveX=t.clientX,this.lastMoveY=t.clientY,this.pendingHighlightFrame===null&&(this.pendingHighlightFrame=requestAnimationFrame(()=>{this.pendingHighlightFrame=null,this.updateHighlight()}))}updateHighlight(){if(!this.interactionActive||this.drawLayer.isCurrentlyDrawing())return;const t=I(this.lastMoveX,this.lastMoveY);t?this.highlighter.highlight(t):this.highlighter.hide()}cancelPendingHighlight(){this.pendingHighlightFrame!==null&&(cancelAnimationFrame(this.pendingHighlightFrame),this.pendingHighlightFrame=null)}handleMouseUp(t){if(!this.drawLayer.isCurrentlyDrawing())return;if(this.drawLayer.getPointCount()>=Ct){this.drawLayer.endDraw();return}this.drawLayer.cancelCurrentDraw();const e=I(t.clientX,t.clientY),s=e?kt(e):this.messages.annotation.element,r={type:"pin",x:t.clientX,y:t.clientY,targetSelector:e?vt(e):void 0,targetText:e?.textContent?.trim().slice(0,200)??"",targetName:s};this.pinMarker.addPin(t.clientX,t.clientY,++this.pinCount),this.drawLayer.clearAll(),this.highlighter.hide(),this.onReady(r,s)}dismissInteraction(){this.interactionActive&&(this.interactionActive=!1,this.cancelPendingHighlight(),this.overlay.destroy(),this.highlighter.destroy())}destroy(){this.dismissInteraction(),this.pinMarker.destroy(),this.drawLayer.destroy()}}function I(i,t){return document.elementsFromPoint(i,t).find(e=>e.id!=="mtb-widget-host")??null}class Mt{constructor(t,e){this.loading=!1,this.onSubmit=e.onSubmit,this.onClose=e.onClose,this.submitLabel=e.messages.popup.submit,this.el=t.el("div","mtb-popup"),this.el.innerHTML=this.buildHTML(e),t.append(this.el),this.textarea=this.el.querySelector(".mtb-textarea"),this.submitBtn=this.el.querySelector(".mtb-submit-btn"),this.positionPopup(e.x,e.y),this.bindEvents(e.messages),this.textarea.focus()}buildHTML(t){const e=t.messages,s=e.popup.quickOptions.map(r=>`
25
+ <button class="mtb-quick-option" data-quick="${f(r.label)}">
26
26
  <span class="mtb-quick-option-emoji">${r.emoji}</span>
27
- <span>${m(r.label)}</span>
27
+ <span>${f(r.label)}</span>
28
28
  </button>`).join("");return`
29
29
  <div class="mtb-popup-header">
30
30
  <div class="mtb-popup-icon">
@@ -32,7 +32,7 @@
32
32
  <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/>
33
33
  </svg>
34
34
  </div>
35
- <span class="mtb-popup-title">${e.popup.about} "${m(t.targetName)}"</span>
35
+ <span class="mtb-popup-title">${e.popup.about} "${f(t.targetName)}"</span>
36
36
  <button class="mtb-popup-close" aria-label="Close">
37
37
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
38
38
  <path d="M18 6L6 18M6 6l12 12"/>
@@ -44,18 +44,18 @@
44
44
  ${s}
45
45
  </div>
46
46
  <div class="mtb-textarea-wrap">
47
- <textarea class="mtb-textarea" placeholder="${m(e.popup.placeholder)}"></textarea>
47
+ <textarea class="mtb-textarea" placeholder="${f(e.popup.placeholder)}"></textarea>
48
48
  </div>
49
49
  <div class="mtb-popup-error" role="alert"></div>
50
50
  <div class="mtb-popup-actions">
51
- <button class="mtb-cancel-btn" type="button">${m(e.popup.cancel)}</button>
52
- <button class="mtb-submit-btn" type="button" disabled>${m(e.popup.submit)}</button>
51
+ <button class="mtb-cancel-btn" type="button">${f(e.popup.cancel)}</button>
52
+ <button class="mtb-submit-btn" type="button" disabled>${f(e.popup.submit)}</button>
53
53
  </div>
54
54
  </div>
55
- `}positionPopup(t,e){const n=window.innerWidth,o=window.innerHeight,a=12;let l=t+12,c=e+12;l+320>n-a&&(l=t-320-12),l<a&&(l=a),c+260>o-a&&(c=o-260-a),c<a&&(c=a),this.el.style.left=`${l}px`,this.el.style.top=`${c}px`}bindEvents(t){this.el.querySelector(".mtb-popup-close").addEventListener("click",()=>this.onClose()),this.el.querySelector(".mtb-cancel-btn").addEventListener("click",()=>this.onClose()),this.errorEl=this.el.querySelector(".mtb-popup-error"),this.el.querySelectorAll(".mtb-quick-option").forEach(e=>{e.addEventListener("click",()=>{const s=e.dataset.quick??"";this.textarea.value=s,this.updateSubmitState(),this.textarea.focus()})}),this.textarea.addEventListener("input",()=>this.updateSubmitState()),this.textarea.addEventListener("keydown",e=>{e.key==="Enter"&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),this.submit())}),this.submitBtn.addEventListener("click",()=>this.submit())}updateSubmitState(){const t=this.textarea.value.trim().length>0;this.submitBtn.classList.toggle("ready",t&&!this.loading),this.submitBtn.disabled=!t||this.loading,this.errorEl.hidden=!0,this.errorEl.textContent=""}submit(){const t=this.textarea.value.trim();!t||this.loading||this.onSubmit(t)}setLoading(t){this.loading=t,t?(this.submitBtn.classList.add("loading"),this.submitBtn.innerHTML='<span class="mtb-dot"></span><span class="mtb-dot"></span><span class="mtb-dot"></span>',this.textarea.disabled=!0):(this.submitBtn.classList.remove("loading"),this.submitBtn.textContent=this.submitLabel,this.textarea.disabled=!1),this.updateSubmitState()}setError(t){this.errorEl.textContent=t,this.errorEl.hidden=!1}destroy(){this.el.remove()}}function m(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}const Mt=2e3,Tt=2e3;class Lt{constructor(t,e){this.pollTimer=null,this.doneTimer=null,this.sending=!1,this.destroyed=!1,this.feedbackId=e.feedbackId,this.apiClient=e.apiClient,this.onDone=e.onDone,this.el=t.el("div","mtb-clarify"),this.el.style.right="20px",this.el.style.bottom="20px",this.el.innerHTML=this.buildHTML(e.messages),t.append(this.el),this.messagesEl=this.el.querySelector(".mtb-clarify-messages"),this.inputEl=this.el.querySelector(".mtb-clarify-input"),this.sendBtn=this.el.querySelector(".mtb-clarify-send"),this.bindEvents(e.messages),this.startConversation()}buildHTML(t){return`
55
+ `}positionPopup(t,e){const n=window.innerWidth,o=window.innerHeight,a=12;let l=t+12,c=e+12;l+320>n-a&&(l=t-320-12),l<a&&(l=a),c+260>o-a&&(c=o-260-a),c<a&&(c=a),this.el.style.left=`${l}px`,this.el.style.top=`${c}px`}bindEvents(t){this.el.querySelector(".mtb-popup-close").addEventListener("click",()=>this.onClose()),this.el.querySelector(".mtb-cancel-btn").addEventListener("click",()=>this.onClose()),this.errorEl=this.el.querySelector(".mtb-popup-error"),this.el.querySelectorAll(".mtb-quick-option").forEach(e=>{e.addEventListener("click",()=>{const s=e.dataset.quick??"";this.textarea.value=s,this.updateSubmitState(),this.textarea.focus()})}),this.textarea.addEventListener("input",()=>this.updateSubmitState()),this.textarea.addEventListener("keydown",e=>{e.key==="Enter"&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),this.submit())}),this.submitBtn.addEventListener("click",()=>this.submit())}updateSubmitState(){const t=this.textarea.value.trim().length>0;this.submitBtn.classList.toggle("ready",t&&!this.loading),this.submitBtn.disabled=!t||this.loading,this.errorEl.hidden=!0,this.errorEl.textContent=""}submit(){const t=this.textarea.value.trim();!t||this.loading||this.onSubmit(t)}setLoading(t){this.loading=t,t?(this.submitBtn.classList.add("loading"),this.submitBtn.innerHTML='<span class="mtb-dot"></span><span class="mtb-dot"></span><span class="mtb-dot"></span>',this.textarea.disabled=!0):(this.submitBtn.classList.remove("loading"),this.submitBtn.textContent=this.submitLabel,this.textarea.disabled=!1),this.updateSubmitState()}setError(t){this.errorEl.textContent=t,this.errorEl.hidden=!1}destroy(){this.el.remove()}}function f(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}const Tt=2e3,Lt=2e3;class _t{constructor(t,e){this.pollTimer=null,this.doneTimer=null,this.sending=!1,this.destroyed=!1,this.feedbackId=e.feedbackId,this.apiClient=e.apiClient,this.onDone=e.onDone,this.el=t.el("div","mtb-clarify"),this.el.style.right="20px",this.el.style.bottom="20px",this.el.innerHTML=this.buildHTML(e.messages),t.append(this.el),this.messagesEl=this.el.querySelector(".mtb-clarify-messages"),this.inputEl=this.el.querySelector(".mtb-clarify-input"),this.sendBtn=this.el.querySelector(".mtb-clarify-send"),this.bindEvents(e.messages),this.startConversation()}buildHTML(t){return`
56
56
  <div class="mtb-clarify-header">
57
57
  <div class="mtb-clarify-icon">
58
- <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${R}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
58
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${A}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
59
59
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
60
60
  </svg>
61
61
  </div>
@@ -66,20 +66,20 @@
66
66
  <input class="mtb-clarify-input" type="text" placeholder="${T(t.clarify.placeholder)}" />
67
67
  <button class="mtb-clarify-send" disabled>${T(t.clarify.send)}</button>
68
68
  </div>
69
- `}bindEvents(t){this.el.querySelector(".mtb-clarify-skip").addEventListener("click",()=>{this.stopPolling(),this.onDone()}),this.inputEl.addEventListener("input",()=>{const e=this.inputEl.value.trim().length>0;this.sendBtn.disabled=!e||this.sending}),this.inputEl.addEventListener("keydown",e=>{e.isComposing||e.keyCode===229||e.key==="Enter"&&(e.preventDefault(),this.sendMessage(t))}),this.sendBtn.addEventListener("click",()=>this.sendMessage(t))}async startConversation(){this.showThinking();try{const t=await this.apiClient.startClarification(this.feedbackId);if(this.destroyed)return;this.renderConversation(t.messages,t.done),t.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.onDone()}}async sendMessage(t){const e=this.inputEl.value.trim();if(!(!e||this.sending)){this.sending=!0,this.inputEl.disabled=!0,this.sendBtn.disabled=!0,this.stopPolling(),this.appendMessage({role:"user",content:e}),this.inputEl.value="",this.showThinking();try{const s=await this.apiClient.startClarification(this.feedbackId,e);if(this.destroyed)return;this.renderConversation(s.messages,s.done),s.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.onDone()}finally{this.sending=!1,this.inputEl.disabled=!1,this.sendBtn.disabled=this.inputEl.value.trim().length===0,this.inputEl.focus()}}}startPolling(){this.stopPolling(),this.pollTimer=setInterval(()=>this.poll(),Mt)}stopPolling(){this.pollTimer!==null&&(clearInterval(this.pollTimer),this.pollTimer=null)}async poll(){try{const t=await this.apiClient.getClarification(this.feedbackId);if(this.destroyed)return;this.renderConversation(t.messages,t.done),t.done&&(this.stopPolling(),this.handleDone())}catch{if(this.destroyed)return;this.stopPolling()}}handleDone(){this.inputEl.disabled=!0,this.sendBtn.disabled=!0,this.doneTimer=setTimeout(()=>{this.destroyed||this.onDone()},Tt)}renderConversation(t,e){this.renderMessages(t);const s=t[t.length-1];!e&&(!s||s.role==="user")&&this.showThinking()}renderMessages(t){this.messagesEl.innerHTML="";for(const e of t)this.appendMessage(e);this.messagesEl.scrollTop=this.messagesEl.scrollHeight}appendMessage(t){const e=document.createElement("div");e.className=t.role==="user"?"mtb-clarify-bubble mtb-clarify-user":"mtb-clarify-bubble mtb-clarify-ai",e.textContent=t.content,this.messagesEl.appendChild(e),this.messagesEl.scrollTop=this.messagesEl.scrollHeight}showThinking(){const t=document.createElement("div");t.className="mtb-clarify-bubble mtb-clarify-ai mtb-clarify-thinking",t.innerHTML='<span class="mtb-dot"></span><span class="mtb-dot"></span><span class="mtb-dot"></span>',this.messagesEl.appendChild(t),this.messagesEl.scrollTop=this.messagesEl.scrollHeight}destroy(){this.destroyed=!0,this.stopPolling(),this.doneTimer!==null&&(clearTimeout(this.doneTimer),this.doneTimer=null),this.el.remove()}}function T(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}const At=5e3;class Pt{constructor(t,e,s,r){this.el=t.el("div","mtb-success"),this.el.style.right="20px",this.el.style.bottom="20px";const n=r?`<button class="mtb-view-feedback-link">${e.success.view_feedback}</button>`:"";this.el.innerHTML=`
69
+ `}bindEvents(t){this.el.querySelector(".mtb-clarify-skip").addEventListener("click",()=>{this.stopPolling(),this.onDone()}),this.inputEl.addEventListener("input",()=>{const e=this.inputEl.value.trim().length>0;this.sendBtn.disabled=!e||this.sending}),this.inputEl.addEventListener("keydown",e=>{e.isComposing||e.keyCode===229||e.key==="Enter"&&(e.preventDefault(),this.sendMessage(t))}),this.sendBtn.addEventListener("click",()=>this.sendMessage(t))}async startConversation(){this.showThinking();try{const t=await this.apiClient.startClarification(this.feedbackId);if(this.destroyed)return;this.renderConversation(t.messages,t.done),t.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.onDone()}}async sendMessage(t){const e=this.inputEl.value.trim();if(!(!e||this.sending)){this.sending=!0,this.inputEl.disabled=!0,this.sendBtn.disabled=!0,this.stopPolling(),this.appendMessage({role:"user",content:e}),this.inputEl.value="",this.showThinking();try{const s=await this.apiClient.startClarification(this.feedbackId,e);if(this.destroyed)return;this.renderConversation(s.messages,s.done),s.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.onDone()}finally{this.sending=!1,this.inputEl.disabled=!1,this.sendBtn.disabled=this.inputEl.value.trim().length===0,this.inputEl.focus()}}}startPolling(){this.stopPolling(),this.pollTimer=setInterval(()=>this.poll(),Tt)}stopPolling(){this.pollTimer!==null&&(clearInterval(this.pollTimer),this.pollTimer=null)}async poll(){try{const t=await this.apiClient.getClarification(this.feedbackId);if(this.destroyed)return;this.renderConversation(t.messages,t.done),t.done&&(this.stopPolling(),this.handleDone())}catch{if(this.destroyed)return;this.stopPolling()}}handleDone(){this.inputEl.disabled=!0,this.sendBtn.disabled=!0,this.doneTimer=setTimeout(()=>{this.destroyed||this.onDone()},Lt)}renderConversation(t,e){this.renderMessages(t);const s=t[t.length-1];!e&&(!s||s.role==="user")&&this.showThinking()}renderMessages(t){this.messagesEl.innerHTML="";for(const e of t)this.appendMessage(e);this.messagesEl.scrollTop=this.messagesEl.scrollHeight}appendMessage(t){const e=document.createElement("div");e.className=t.role==="user"?"mtb-clarify-bubble mtb-clarify-user":"mtb-clarify-bubble mtb-clarify-ai",e.textContent=t.content,this.messagesEl.appendChild(e),this.messagesEl.scrollTop=this.messagesEl.scrollHeight}showThinking(){const t=document.createElement("div");t.className="mtb-clarify-bubble mtb-clarify-ai mtb-clarify-thinking",t.innerHTML='<span class="mtb-dot"></span><span class="mtb-dot"></span><span class="mtb-dot"></span>',this.messagesEl.appendChild(t),this.messagesEl.scrollTop=this.messagesEl.scrollHeight}destroy(){this.destroyed=!0,this.stopPolling(),this.doneTimer!==null&&(clearTimeout(this.doneTimer),this.doneTimer=null),this.el.remove()}}function T(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}const Dt=5e3;class At{constructor(t,e,s,r,n){this.el=t.el("div","mtb-success"),this.el.style.right="20px",this.el.style.bottom="20px";const o=n?.skipFollowup?e.success.title_no_ai:e.success.title,a=n?.skipFollowup?e.success.message_no_ai:e.success.message,l=r?`<button class="mtb-view-feedback-link">${e.success.view_feedback}</button>`:"";this.el.innerHTML=`
70
70
  <div class="mtb-success-icon">
71
- <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="${R}" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
71
+ <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="${A}" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
72
72
  <polyline points="20 6 9 17 4 12"/>
73
73
  </svg>
74
74
  </div>
75
- <div class="mtb-success-title">${e.success.title}</div>
76
- <div class="mtb-success-msg">${e.success.message}</div>
77
- ${n}
75
+ <div class="mtb-success-title">${o}</div>
76
+ <div class="mtb-success-msg">${a}</div>
77
+ ${l}
78
78
  <button class="mtb-close-link">${e.success.close}</button>
79
- `,t.append(this.el),this.el.querySelector(".mtb-close-link").addEventListener("click",s),r&&this.el.querySelector(".mtb-view-feedback-link").addEventListener("click",r),setTimeout(()=>s(),At)}destroy(){this.el.remove()}}function Rt(i,t){if(i.match(/^[a-z]+:\/\//i))return i;if(i.match(/^\/\//))return window.location.protocol+i;if(i.match(/^[a-z]+:/i))return i;const e=document.implementation.createHTMLDocument(),s=e.createElement("base"),r=e.createElement("a");return e.head.appendChild(s),e.body.appendChild(r),t&&(s.href=t),r.href=i,r.href}const Dt=(()=>{let i=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(i+=1,`u${t()}${i}`)})();function p(i){const t=[];for(let e=0,s=i.length;e<s;e++)t.push(i[e]);return t}let b=null;function Y(i={}){return b||(i.includeStyleProperties?(b=i.includeStyleProperties,b):(b=p(window.getComputedStyle(document.documentElement)),b))}function S(i,t){const s=(i.ownerDocument.defaultView||window).getComputedStyle(i).getPropertyValue(t);return s?parseFloat(s.replace("px","")):0}function _t(i){const t=S(i,"border-left-width"),e=S(i,"border-right-width");return i.clientWidth+t+e}function Ht(i){const t=S(i,"border-top-width"),e=S(i,"border-bottom-width");return i.clientHeight+t+e}function X(i,t={}){const e=t.width||_t(i),s=t.height||Ht(i);return{width:e,height:s}}function $t(){let i,t;try{t=process}catch{}const e=t&&t.env?t.env.devicePixelRatio:null;return e&&(i=parseInt(e,10),Number.isNaN(i)&&(i=1)),i||window.devicePixelRatio||1}const d=16384;function It(i){(i.width>d||i.height>d)&&(i.width>d&&i.height>d?i.width>i.height?(i.height*=d/i.width,i.width=d):(i.width*=d/i.height,i.height=d):i.width>d?(i.height*=d/i.width,i.width=d):(i.width*=d/i.height,i.height=d))}function E(i){return new Promise((t,e)=>{const s=new Image;s.onload=()=>{s.decode().then(()=>{requestAnimationFrame(()=>t(s))})},s.onerror=e,s.crossOrigin="anonymous",s.decoding="async",s.src=i})}async function Ot(i){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(i)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function Ft(i,t,e){const s="http://www.w3.org/2000/svg",r=document.createElementNS(s,"svg"),n=document.createElementNS(s,"foreignObject");return r.setAttribute("width",`${t}`),r.setAttribute("height",`${e}`),r.setAttribute("viewBox",`0 0 ${t} ${e}`),n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("externalResourcesRequired","true"),r.appendChild(n),n.appendChild(i),Ot(r)}const h=(i,t)=>{if(i instanceof t)return!0;const e=Object.getPrototypeOf(i);return e===null?!1:e.constructor.name===t.name||h(e,t)};function jt(i){const t=i.getPropertyValue("content");return`${i.cssText} content: '${t.replace(/'|"/g,"")}';`}function Ut(i,t){return Y(t).map(e=>{const s=i.getPropertyValue(e),r=i.getPropertyPriority(e);return`${e}: ${s}${r?" !important":""};`}).join(" ")}function zt(i,t,e,s){const r=`.${i}:${t}`,n=e.cssText?jt(e):Ut(e,s);return document.createTextNode(`${r}{${n}}`)}function O(i,t,e,s){const r=window.getComputedStyle(i,e),n=r.getPropertyValue("content");if(n===""||n==="none")return;const o=Dt();try{t.className=`${t.className} ${o}`}catch{return}const a=document.createElement("style");a.appendChild(zt(o,e,r,s)),t.appendChild(a)}function Bt(i,t,e){O(i,t,":before",e),O(i,t,":after",e)}const F="application/font-woff",j="image/jpeg",qt={woff:F,woff2:F,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:j,jpeg:j,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Wt(i){const t=/\.([^./]*?)$/g.exec(i);return t?t[1]:""}function D(i){const t=Wt(i).toLowerCase();return qt[t]||""}function Nt(i){return i.split(/,/)[1]}function A(i){return i.search(/^(data:)/)!==-1}function Vt(i,t){return`data:${t};base64,${i}`}async function G(i,t,e){const s=await fetch(i,t);if(s.status===404)throw new Error(`Resource "${s.url}" not found`);const r=await s.blob();return new Promise((n,o)=>{const a=new FileReader;a.onerror=o,a.onloadend=()=>{try{n(e({res:s,result:a.result}))}catch(l){o(l)}},a.readAsDataURL(r)})}const L={};function Yt(i,t,e){let s=i.replace(/\?.*/,"");return e&&(s=i),/ttf|otf|eot|woff2?/i.test(s)&&(s=s.replace(/.*\//,"")),t?`[${t}]${s}`:s}async function _(i,t,e){const s=Yt(i,t,e.includeQueryParams);if(L[s]!=null)return L[s];e.cacheBust&&(i+=(/\?/.test(i)?"&":"?")+new Date().getTime());let r;try{const n=await G(i,e.fetchRequestInit,({res:o,result:a})=>(t||(t=o.headers.get("Content-Type")||""),Nt(a)));r=Vt(n,t)}catch(n){r=e.imagePlaceholder||"";let o=`Failed to fetch resource: ${i}`;n&&(o=typeof n=="string"?n:n.message),o&&console.warn(o)}return L[s]=r,r}async function Xt(i){const t=i.toDataURL();return t==="data:,"?i.cloneNode(!1):E(t)}async function Gt(i,t){if(i.currentSrc){const n=document.createElement("canvas"),o=n.getContext("2d");n.width=i.clientWidth,n.height=i.clientHeight,o?.drawImage(i,0,0,n.width,n.height);const a=n.toDataURL();return E(a)}const e=i.poster,s=D(e),r=await _(e,s,t);return E(r)}async function Kt(i,t){var e;try{if(!((e=i?.contentDocument)===null||e===void 0)&&e.body)return await C(i.contentDocument.body,t,!0)}catch{}return i.cloneNode(!1)}async function Jt(i,t){return h(i,HTMLCanvasElement)?Xt(i):h(i,HTMLVideoElement)?Gt(i,t):h(i,HTMLIFrameElement)?Kt(i,t):i.cloneNode(K(i))}const Qt=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SLOT",K=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SVG";async function Zt(i,t,e){var s,r;if(K(t))return t;let n=[];return Qt(i)&&i.assignedNodes?n=p(i.assignedNodes()):h(i,HTMLIFrameElement)&&(!((s=i.contentDocument)===null||s===void 0)&&s.body)?n=p(i.contentDocument.body.childNodes):n=p(((r=i.shadowRoot)!==null&&r!==void 0?r:i).childNodes),n.length===0||h(i,HTMLVideoElement)||await n.reduce((o,a)=>o.then(()=>C(a,e)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function te(i,t,e){const s=t.style;if(!s)return;const r=window.getComputedStyle(i);r.cssText?(s.cssText=r.cssText,s.transformOrigin=r.transformOrigin):Y(e).forEach(n=>{let o=r.getPropertyValue(n);n==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),h(i,HTMLIFrameElement)&&n==="display"&&o==="inline"&&(o="block"),n==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),s.setProperty(n,o,r.getPropertyPriority(n))})}function ee(i,t){h(i,HTMLTextAreaElement)&&(t.innerHTML=i.value),h(i,HTMLInputElement)&&t.setAttribute("value",i.value)}function ie(i,t){if(h(i,HTMLSelectElement)){const e=t,s=Array.from(e.children).find(r=>i.value===r.getAttribute("value"));s&&s.setAttribute("selected","")}}function se(i,t,e){return h(t,Element)&&(te(i,t,e),Bt(i,t,e),ee(i,t),ie(i,t)),t}async function re(i,t){const e=i.querySelectorAll?i.querySelectorAll("use"):[];if(e.length===0)return i;const s={};for(let n=0;n<e.length;n++){const a=e[n].getAttribute("xlink:href");if(a){const l=i.querySelector(a),c=document.querySelector(a);!l&&c&&!s[a]&&(s[a]=await C(c,t,!0))}}const r=Object.values(s);if(r.length){const n="http://www.w3.org/1999/xhtml",o=document.createElementNS(n,"svg");o.setAttribute("xmlns",n),o.style.position="absolute",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.display="none";const a=document.createElementNS(n,"defs");o.appendChild(a);for(let l=0;l<r.length;l++)a.appendChild(r[l]);i.appendChild(o)}return i}async function C(i,t,e){return!e&&t.filter&&!t.filter(i)?null:Promise.resolve(i).then(s=>Jt(s,t)).then(s=>Zt(i,s,t)).then(s=>se(i,s,t)).then(s=>re(s,t))}const J=/url\((['"]?)([^'"]+?)\1\)/g,ne=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,oe=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function ae(i){const t=i.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function le(i){const t=[];return i.replace(J,(e,s,r)=>(t.push(r),e)),t.filter(e=>!A(e))}async function ce(i,t,e,s,r){try{const n=e?Rt(t,e):t,o=D(t);let a;return r||(a=await _(n,o,s)),i.replace(ae(t),`$1${a}$3`)}catch{}return i}function he(i,{preferredFontFormat:t}){return t?i.replace(oe,e=>{for(;;){const[s,,r]=ne.exec(e)||[];if(!r)return"";if(r===t)return`src: ${s};`}}):i}function Q(i){return i.search(J)!==-1}async function Z(i,t,e){if(!Q(i))return i;const s=he(i,e);return le(s).reduce((n,o)=>n.then(a=>ce(a,o,t,e)),Promise.resolve(s))}async function g(i,t,e){var s;const r=(s=t.style)===null||s===void 0?void 0:s.getPropertyValue(i);if(r){const n=await Z(r,null,e);return t.style.setProperty(i,n,t.style.getPropertyPriority(i)),!0}return!1}async function de(i,t){await g("background",i,t)||await g("background-image",i,t),await g("mask",i,t)||await g("-webkit-mask",i,t)||await g("mask-image",i,t)||await g("-webkit-mask-image",i,t)}async function ue(i,t){const e=h(i,HTMLImageElement);if(!(e&&!A(i.src))&&!(h(i,SVGImageElement)&&!A(i.href.baseVal)))return;const s=e?i.src:i.href.baseVal,r=await _(s,D(s),t);await new Promise((n,o)=>{i.onload=n,i.onerror=t.onImageErrorHandler?(...l)=>{try{n(t.onImageErrorHandler(...l))}catch(c){o(c)}}:o;const a=i;a.decode&&(a.decode=n),a.loading==="lazy"&&(a.loading="eager"),e?(i.srcset="",i.src=r):i.href.baseVal=r})}async function pe(i,t){const s=p(i.childNodes).map(r=>tt(r,t));await Promise.all(s).then(()=>i)}async function tt(i,t){h(i,Element)&&(await de(i,t),await ue(i,t),await pe(i,t))}function fe(i,t){const{style:e}=i;t.backgroundColor&&(e.backgroundColor=t.backgroundColor),t.width&&(e.width=`${t.width}px`),t.height&&(e.height=`${t.height}px`);const s=t.style;return s!=null&&Object.keys(s).forEach(r=>{e[r]=s[r]}),i}const U={};async function z(i){let t=U[i];if(t!=null)return t;const s=await(await fetch(i)).text();return t={url:i,cssText:s},U[i]=t,t}async function B(i,t){let e=i.cssText;const s=/url\(["']?([^"')]+)["']?\)/g,n=(e.match(/url\([^)]+\)/g)||[]).map(async o=>{let a=o.replace(s,"$1");return a.startsWith("https://")||(a=new URL(a,i.url).href),G(a,t.fetchRequestInit,({result:l})=>(e=e.replace(o,`url(${l})`),[o,l]))});return Promise.all(n).then(()=>e)}function q(i){if(i==null)return[];const t=[],e=/(\/\*[\s\S]*?\*\/)/gi;let s=i.replace(e,"");const r=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=r.exec(s);if(l===null)break;t.push(l[0])}s=s.replace(r,"");const n=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(o,"gi");for(;;){let l=n.exec(s);if(l===null){if(l=a.exec(s),l===null)break;n.lastIndex=a.lastIndex}else a.lastIndex=n.lastIndex;t.push(l[0])}return t}async function me(i,t){const e=[],s=[];return i.forEach(r=>{if("cssRules"in r)try{p(r.cssRules||[]).forEach((n,o)=>{if(n.type===CSSRule.IMPORT_RULE){let a=o+1;const l=n.href,c=z(l).then(u=>B(u,t)).then(u=>q(u).forEach(M=>{try{r.insertRule(M,M.startsWith("@import")?a+=1:r.cssRules.length)}catch(rt){console.error("Error inserting rule from remote css",{rule:M,error:rt})}})).catch(u=>{console.error("Error loading remote css",u.toString())});s.push(c)}})}catch(n){const o=i.find(a=>a.href==null)||document.styleSheets[0];r.href!=null&&s.push(z(r.href).then(a=>B(a,t)).then(a=>q(a).forEach(l=>{o.insertRule(l,o.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",n)}}),Promise.all(s).then(()=>(i.forEach(r=>{if("cssRules"in r)try{p(r.cssRules||[]).forEach(n=>{e.push(n)})}catch(n){console.error(`Error while reading CSS rules from ${r.href}`,n)}}),e))}function be(i){return i.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>Q(t.style.getPropertyValue("src")))}async function ge(i,t){if(i.ownerDocument==null)throw new Error("Provided element is not within a Document");const e=p(i.ownerDocument.styleSheets),s=await me(e,t);return be(s)}function et(i){return i.trim().replace(/["']/g,"")}function ye(i){const t=new Set;function e(s){(s.style.fontFamily||getComputedStyle(s).fontFamily).split(",").forEach(n=>{t.add(et(n))}),Array.from(s.children).forEach(n=>{n instanceof HTMLElement&&e(n)})}return e(i),t}async function xe(i,t){const e=await ge(i,t),s=ye(i);return(await Promise.all(e.filter(n=>s.has(et(n.style.fontFamily))).map(n=>{const o=n.parentStyleSheet?n.parentStyleSheet.href:null;return Z(n.cssText,o,t)}))).join(`
80
- `)}async function we(i,t){const e=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await xe(i,t);if(e){const s=document.createElement("style"),r=document.createTextNode(e);s.appendChild(r),i.firstChild?i.insertBefore(s,i.firstChild):i.appendChild(s)}}async function ke(i,t={}){const{width:e,height:s}=X(i,t),r=await C(i,t,!0);return await we(r,t),await tt(r,t),fe(r,t),await Ft(r,e,s)}async function ve(i,t={}){const{width:e,height:s}=X(i,t),r=await ke(i,t),n=await E(r),o=document.createElement("canvas"),a=o.getContext("2d"),l=t.pixelRatio||$t(),c=t.canvasWidth||e,u=t.canvasHeight||s;return o.width=c*l,o.height=u*l,t.skipAutoScale||It(o),o.style.width=`${c}`,o.style.height=`${u}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,o.width,o.height)),a.drawImage(n,0,0,o.width,o.height),o}async function Se(i,t={}){return(await ve(i,t)).toDataURL()}async function Ee(i=[]){const t=Ce(i);try{const e=await Se(document.body,{cacheBust:!0,skipAutoScale:!1,filter:s=>!(s instanceof HTMLElement&&s.id==="mtb-widget-host")});return Le(e)}catch{return null}finally{t?.remove()}}function Ce(i){if(i.length===0)return null;const t=document.createElement("div");t.setAttribute("data-mtb-capture-annotations","true"),t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;inset:0;pointer-events:none;z-index:2147483645;";for(const[e,s]of i.entries())s.type==="pin"?t.appendChild(Me(s,e+1)):s.type==="draw"&&s.drawPath&&t.appendChild(Te(s.drawPath));return document.body.appendChild(t),t}function Me(i,t){const e=document.createElement("div");return e.textContent=String(t),e.style.cssText=["position:fixed",`left:${i.x}px`,`top:${i.y}px`,"width:22px","height:22px","border-radius:50% 50% 50% 2px","background:#059669","border:2px solid #fff","display:flex","align-items:center","justify-content:center",'font:700 10px -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',"color:#fff","box-shadow:0 2px 8px rgba(5,150,105,0.45)","transform:translate(-50%,-50%)"].join(";"),e}function Te(i){const t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("width","100%"),t.setAttribute("height","100%"),t.setAttribute("viewBox",`0 0 ${window.innerWidth} ${window.innerHeight}`),t.style.cssText="position:fixed;inset:0;width:100%;height:100%;overflow:visible;";const e=document.createElementNS("http://www.w3.org/2000/svg","path");return e.setAttribute("d",i),e.setAttribute("fill","none"),e.setAttribute("stroke","#059669"),e.setAttribute("stroke-width","3.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("filter","drop-shadow(0 1px 2px rgba(5,150,105,0.35))"),t.appendChild(e),t}function Le(i){const[t,e]=i.split(","),s=t.match(/:(.*?);/)?.[1]??"image/png",r=atob(e),n=new Uint8Array(r.length);for(let o=0;o<r.length;o++)n[o]=r.charCodeAt(o);return new Blob([n],{type:s})}class Ae{constructor(){this.listeners=new Set,this.originalOnError=null,this.installedOnError=null,this.rejectionHandler=null,this.hooked=!1}subscribe(t){return this.listeners.add(t),this.hook(),()=>{this.listeners.delete(t),this.listeners.size===0&&this.unhook()}}hook(){this.hooked||(this.hooked=!0,this.originalOnError=window.onerror,this.installedOnError=(t,e,s,r,n)=>(this.emit({message:String(t),source:e,line:s,col:r,error:n}),this.originalOnError?this.originalOnError.call(window,t,e,s,r,n):!1),window.onerror=this.installedOnError,this.rejectionHandler=t=>{const e=t.reason instanceof Error?t.reason.message:String(t.reason);this.emit({message:`Unhandled rejection: ${e}`})},window.addEventListener("unhandledrejection",this.rejectionHandler))}unhook(){this.hooked&&(this.hooked=!1,window.onerror===this.installedOnError&&(window.onerror=this.originalOnError),this.installedOnError=null,this.originalOnError=null,this.rejectionHandler&&(window.removeEventListener("unhandledrejection",this.rejectionHandler),this.rejectionHandler=null))}emit(t){for(const e of this.listeners)e(t)}}const it=new Ae,Pe=20;class Re{constructor(){this.errors=[],this.unsubscribe=null}start(){this.unsubscribe||(this.unsubscribe=it.subscribe(t=>this.record(t)))}record(t){const e=t.line!=null?` (${t.line}:${t.col??0})`:"";this.addError(`${t.message}${e}`)}addError(t){this.errors.length>=Pe||this.errors.includes(t)||this.errors.push(t)}getErrors(){return[...this.errors]}stop(){this.unsubscribe?.(),this.unsubscribe=null}}const De=3,_e=1e3,He=3,$e=5e3,Ie=500,Oe=500,Fe=300,je=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA","LABEL","SUMMARY","DETAILS"]),Ue=new Set(["button","link","checkbox","radio","tab","menuitem","option","switch","textbox","combobox","listbox","slider","spinbutton"]),W=["404","500","not found","page not found","server error","internal server error"],k=class k{constructor(t){this.clickHistory=[],this.unsubscribeErrors=null,this.active=!1,this.errorCount=0,this.deadClickCount=0,this.cooldownUntil=0,this.navTimestamps=[],this.boundPopstateHandler=null,this.originalPushState=null,this.originalReplaceState=null,this.installedPushState=null,this.installedReplaceState=null,this.boundSubmitHandler=null,this.boundInvalidHandler=null,this.errorPageUrls=new Set,this.domObserver=null,this.pendingDomChecks=0,this.lastMutationAt=-1,this.onFrustration=t,this.boundClickHandler=e=>this.handleClick(e)}start(){this.active||(this.active=!0,document.addEventListener("click",this.boundClickHandler,!0),this.unsubscribeErrors=it.subscribe(t=>{this.errorCount++}),this.startNavigationTracking(),this.startFormTracking(),this.checkErrorPage())}stop(){this.active&&(this.active=!1,document.removeEventListener("click",this.boundClickHandler,!0),this.unsubscribeErrors?.(),this.unsubscribeErrors=null,this.clickHistory=[],this.stopNavigationTracking(),this.stopFormTracking(),this.errorPageUrls.clear(),this.disconnectDomObserver())}startNavigationTracking(){this.boundPopstateHandler=()=>this.handleNavigation(),window.addEventListener("popstate",this.boundPopstateHandler),this.originalPushState=history.pushState.bind(history),this.originalReplaceState=history.replaceState.bind(history);const t=this.originalPushState,e=this.originalReplaceState,s=()=>this.handleNavigation();this.installedPushState=function(r,n,o){t(r,n,o),s()},this.installedReplaceState=function(r,n,o){e(r,n,o),s()},history.pushState=this.installedPushState,history.replaceState=this.installedReplaceState}stopNavigationTracking(){this.boundPopstateHandler&&(window.removeEventListener("popstate",this.boundPopstateHandler),this.boundPopstateHandler=null),this.originalPushState&&history.pushState===this.installedPushState&&(history.pushState=this.originalPushState),this.originalReplaceState&&history.replaceState===this.installedReplaceState&&(history.replaceState=this.originalReplaceState),this.originalPushState=null,this.originalReplaceState=null,this.installedPushState=null,this.installedReplaceState=null,this.navTimestamps=[]}startFormTracking(){this.boundSubmitHandler=t=>this.handleFormSubmit(t),this.boundInvalidHandler=t=>this.handleFormInvalid(t),document.addEventListener("submit",this.boundSubmitHandler,!0),document.addEventListener("invalid",this.boundInvalidHandler,!0)}stopFormTracking(){this.boundSubmitHandler&&(document.removeEventListener("submit",this.boundSubmitHandler,!0),this.boundSubmitHandler=null),this.boundInvalidHandler&&(document.removeEventListener("invalid",this.boundInvalidHandler,!0),this.boundInvalidHandler=null)}handleClick(t){const e=t.target;if(!e||this.isWidgetElement(e))return;const s=Date.now();this.clickHistory.push({target:e,time:s});const r=s-_e;if(this.clickHistory=this.clickHistory.filter(o=>o.time>r),this.clickHistory.filter(o=>o.target===e).length>=De){this.clickHistory=[],this.emitHighPriority({signal:"rage_click",target:y(e),timestamp:s});return}this.isInteractive(e)||(this.deadClickCount++,this.deadClickCount>=3&&this.errorCount>0&&(this.deadClickCount=0,this.errorCount=0,this.emitIfReady({signal:"dead_click",target:y(e),timestamp:s}))),this.checkDeadClickDom(e,s)}handleNavigation(){const t=Date.now();this.navTimestamps.push(t);const e=t-$e;this.navTimestamps=this.navTimestamps.filter(s=>s>e),this.navTimestamps.length>=He&&(this.navTimestamps=[],this.emitIfReady({signal:"rapid_navigation",timestamp:t})),setTimeout(()=>{this.active&&this.checkErrorPage()},Fe)}handleFormSubmit(t){const e=t.target;e instanceof HTMLFormElement&&(this.isWidgetElement(e)||setTimeout(()=>{this.active&&e.querySelector('[aria-invalid="true"], .is-invalid')&&this.emitIfReady({signal:"form_failure",target:y(e),timestamp:Date.now()})},Ie))}handleFormInvalid(t){const e=t.target;if(!e||this.isWidgetElement(e))return;const s=e.closest("form");this.emitIfReady({signal:"form_failure",target:y(s||e),timestamp:Date.now()})}checkErrorPage(){const t=location.href;if(this.errorPageUrls.has(t))return;const e=document.title.toLowerCase();if(W.some(r=>e.includes(r))){this.errorPageUrls.add(t),this.emitHighPriority({signal:"error_page",detail:document.title,timestamp:Date.now()});return}const s=document.querySelectorAll('h1, h2, [class*="error"], [class*="not-found"], [id*="error"], [id*="not-found"]');for(const r of s){const n=r.textContent??"";if(n.length<200&&W.some(o=>n.toLowerCase().includes(o))){this.errorPageUrls.add(t),this.emitHighPriority({signal:"error_page",detail:n.trim().slice(0,60),timestamp:Date.now()});return}}}checkDeadClickDom(t,e){this.looksInteractive(t)&&(this.pendingDomChecks++,this.ensureDomObserver(),setTimeout(()=>{this.pendingDomChecks--;const s=this.lastMutationAt>=e;this.pendingDomChecks===0&&this.disconnectDomObserver(),!s&&this.active&&this.emitIfReady({signal:"dead_click_dom",target:y(t),timestamp:e})},Oe))}ensureDomObserver(){this.domObserver||(this.domObserver=new MutationObserver(()=>{this.lastMutationAt=Date.now()}),this.domObserver.observe(document.body,{childList:!0,subtree:!0,attributes:!0,characterData:!0}))}disconnectDomObserver(){this.domObserver?.disconnect(),this.domObserver=null}looksInteractive(t){if(window.getComputedStyle(t).cursor==="pointer")return!0;if(t.classList)for(const s of t.classList){const r=s.toLowerCase();if(r.includes("btn")||r.includes("button"))return!0}return!1}isInteractive(t){if(je.has(t.tagName))return!0;const e=t.getAttribute("role");return!!(e&&Ue.has(e)||t.hasAttribute("onclick")||t.hasAttribute("tabindex")||t.contentEditable==="true"||window.getComputedStyle(t).cursor==="pointer"||t.closest('a, button, [role="button"], [role="link"], label'))}isWidgetElement(t){const e=document.getElementById("mtb-widget-host");return e?e===t||e.contains(t):!1}emitIfReady(t){const e=Date.now();e<this.cooldownUntil||(this.cooldownUntil=e+k.COOLDOWN_MS,this.onFrustration(t))}emitHighPriority(t){this.cooldownUntil=Date.now()+k.COOLDOWN_MS,this.onFrustration(t)}};k.COOLDOWN_MS=6e4;let P=k;function y(i){const t=i.tagName.toLowerCase(),e=i.id?`#${i.id}`:"",s=i.className&&typeof i.className=="string"?"."+i.className.trim().split(/\s+/).slice(0,2).join("."):"",r=i.textContent?.trim().slice(0,30)??"";return`<${t}${e}${s}>${r?` "${r}"`:""}`}function ze(){return{page_url:window.location.href,user_agent:navigator.userAgent,browser:Be(),os:qe(),screen_width:window.screen.width,screen_height:window.screen.height}}function Be(){const i=navigator.userAgent;return/Edg\//.test(i)?`Edge ${i.match(/Edg\/(\S+)/)?.[1]??""}`:/OPR\//.test(i)?`Opera ${i.match(/OPR\/(\S+)/)?.[1]??""}`:/Chrome\//.test(i)?`Chrome ${i.match(/Chrome\/(\S+)/)?.[1]??""}`:/Safari\//.test(i)&&/Version\//.test(i)?`Safari ${i.match(/Version\/(\S+)/)?.[1]??""}`:/Firefox\//.test(i)?`Firefox ${i.match(/Firefox\/(\S+)/)?.[1]??""}`:"Unknown"}function qe(){const i=navigator.userAgent;return/Windows NT 10/.test(i)?"Windows 10/11":/Windows NT/.test(i)?"Windows":/Mac OS X 10_15|macOS 1[56789]/.test(i)||/Mac OS X/.test(i)?"macOS":/Android/.test(i)?`Android ${i.match(/Android (\d+)/)?.[1]??""}`:/iPhone|iPad|iPod/.test(i)?"iOS":/Linux/.test(i)?"Linux":"Unknown"}const We="https://makethisbetter.dev/api/v1";class Ne{constructor(t,e,s=1e3,r,n){this.projectKey=t,this.apiUrl=(e??We).replace(/\/$/,""),this.retryDelayMs=s,this.userToken=r,this.userTokenFn=n}async resolveUserToken(){return this.userTokenFn?this.userTokenFn():this.userToken}async authHeaders(t){const e={"X-Project-Key":this.projectKey},s=await this.resolveUserToken();return s&&(e["X-User-Token"]=s),t&&(e["Content-Type"]=t),e}async submitFeedback(t,e){const s=new FormData;if(s.append("feedback[description]",t.description),s.append("feedback[page_url]",t.page_url),s.append("feedback[user_agent]",t.user_agent),s.append("feedback[browser]",t.browser),s.append("feedback[os]",t.os),s.append("feedback[screen_width]",String(t.screen_width)),s.append("feedback[screen_height]",String(t.screen_height)),s.append("feedback[console_errors]",JSON.stringify(t.console_errors)),s.append("feedback[annotations]",JSON.stringify(t.annotations)),t.target_element&&s.append("feedback[target_element]",JSON.stringify(t.target_element)),t.user_id&&s.append("feedback[user_id]",t.user_id),t.user_email&&s.append("feedback[user_email]",t.user_email),t.user_name&&s.append("feedback[user_name]",t.user_name),t.recording_events&&t.recording_events.length>0){const o=JSON.stringify(t.recording_events),a=new Blob([o],{type:"application/json"});s.append("feedback[recording]",a,"recording.json"),s.append("feedback[recording_duration]",String(t.recording_duration??0))}e&&s.append("feedback[screenshot]",e,"screenshot.png");const r=await this.authHeaders();return r["X-Idempotency-Key"]=Ve(),(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks`,{method:"POST",headers:r,body:s})).json()}async startClarification(t,e){const s={};e&&(s.message=e);const r=await this.authHeaders("application/json");return(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/clarify`,{method:"POST",headers:r,body:JSON.stringify(s)})).json()}async getClarification(t){const e=await this.authHeaders();return(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/clarify`,{method:"GET",headers:e})).json()}async fetchWithRetry(t,e,s=1){let r;try{r=await fetch(t,e)}catch(n){if(s>0)return await N(this.retryDelayMs),this.fetchWithRetry(t,e,s-1);throw n}if(r.ok)return r;if(r.status>=500&&s>0)return await N(this.retryDelayMs),this.fetchWithRetry(t,e,s-1);throw new Error(`HTTP ${r.status}`)}}function N(i){return i<=0?Promise.resolve():new Promise(t=>setTimeout(t,i))}function Ve(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function Ye(i,t,e,s,r,n){return{description:i,...t,console_errors:e,annotations:s?[s]:[],target_element:s?.targetSelector?{selector:s.targetSelector,text:s.targetText??"",name:s.targetName??""}:void 0,user_id:r?.id,user_email:r?.email,user_name:r?.name,recording_events:n?.events,recording_duration:n?.duration}}const Xe={tab:"Feedback",toolbar:{markup:"Mark up",record:"Record",hint:"Click any element to annotate · drag to draw",hintRecord:"Recording your screen",exit:"Exit"},popup:{about:"About",placeholder:"Describe the issue or suggestion...",submit:"Submit",cancel:"Cancel",quickOptions:[{emoji:"🐛",label:"Something is broken"},{emoji:"💡",label:"I wish this worked differently"},{emoji:"🤔",label:"I don't understand this"},{emoji:"✨",label:"I have an idea"}]},success:{title:"Thanks!",message:"Your feedback has been received.",view_feedback:"View my feedback",close:"Close"},error:{submit:"Failed to submit. Please try again."},pet:{bubble:"Need help?"},frustration:{prompt:"Something not working? Tell us.",action:"Annotate",dismiss:"Dismiss"},annotation:{drawing:"Drawing",element:"element"},record:{stop:"Stop",timer_label:"Recording",max_reached:"Maximum recording time reached"},clarify:{thinking:"Thinking...",placeholder:"Type your response...",send:"Send",skip:"Skip"}},Ge={tab:"反馈",toolbar:{markup:"标注",record:"录屏",hint:"点击任意元素进行标注 · 拖拽可自由绘制",hintRecord:"正在录制屏幕",exit:"退出"},popup:{about:"关于",placeholder:"描述问题或建议...",submit:"提交",cancel:"取消",quickOptions:[{emoji:"🐛",label:"这里有问题"},{emoji:"💡",label:"我希望它能更好用"},{emoji:"🤔",label:"我看不懂这里"},{emoji:"✨",label:"我有个想法"}]},success:{title:"感谢!",message:"您的反馈已收到。",view_feedback:"查看我的反馈",close:"关闭"},error:{submit:"提交失败,请重试。"},pet:{bubble:"需要帮助吗?"},frustration:{prompt:"遇到问题了?告诉我们。",action:"标注",dismiss:"关闭"},annotation:{drawing:"绘制",element:"元素"},record:{stop:"停止",timer_label:"录制中",max_reached:"已达到最大录制时长"},clarify:{thinking:"思考中...",placeholder:"输入你的回复...",send:"发送",skip:"跳过"}},Ke={tab:"フィードバック",toolbar:{markup:"マークアップ",record:"録画",hint:"要素をクリックして注釈 · ドラッグで描画",hintRecord:"画面を録画中",exit:"終了"},popup:{about:"概要",placeholder:"問題や提案を入力してください...",submit:"送信",cancel:"キャンセル",quickOptions:[{emoji:"🐛",label:"不具合があります"},{emoji:"💡",label:"もっと使いやすくしてほしい"},{emoji:"🤔",label:"ここがわかりにくい"},{emoji:"✨",label:"アイデアがあります"}]},success:{title:"ありがとうございます!",message:"フィードバックを受け付けました。",view_feedback:"フィードバックを確認",close:"閉じる"},error:{submit:"送信に失敗しました。もう一度お試しください。"},pet:{bubble:"お困りですか?"},frustration:{prompt:"うまくいかないことがありますか?お知らせください。",action:"注釈",dismiss:"閉じる"},annotation:{drawing:"描画",element:"要素"},record:{stop:"停止",timer_label:"録画中",max_reached:"最大録画時間に達しました"},clarify:{thinking:"考え中...",placeholder:"回答を入力...",send:"送信",skip:"スキップ"}},Je={tab:"피드백",toolbar:{markup:"마크업",record:"녹화",hint:"요소를 클릭하여 주석 · 드래그하여 그리기",hintRecord:"화면을 녹화 중입니다",exit:"나가기"},popup:{about:"정보",placeholder:"문제 또는 제안 사항을 설명해 주세요...",submit:"제출",cancel:"취소",quickOptions:[{emoji:"🐛",label:"오류가 있어요"},{emoji:"💡",label:"이 기능을 개선해 주세요"},{emoji:"🤔",label:"이 부분을 모르겠어요"},{emoji:"✨",label:"아이디어가 있어요"}]},success:{title:"감사합니다!",message:"피드백이 접수되었습니다.",view_feedback:"내 피드백 보기",close:"닫기"},error:{submit:"제출에 실패했습니다. 다시 시도해 주세요."},pet:{bubble:"도움이 필요하신가요?"},frustration:{prompt:"문제가 있으신가요? 알려 주세요.",action:"주석",dismiss:"닫기"},annotation:{drawing:"그리기",element:"요소"},record:{stop:"중지",timer_label:"녹화 중",max_reached:"최대 녹화 시간에 도달했습니다"},clarify:{thinking:"생각 중...",placeholder:"답변을 입력하세요...",send:"보내기",skip:"건너뛰기"}},Qe={tab:"Comentarios",toolbar:{markup:"Anotar",record:"Grabar",hint:"Haz clic en cualquier elemento para anotar · arrastra para dibujar",hintRecord:"Grabando tu pantalla",exit:"Salir"},popup:{about:"Acerca de",placeholder:"Describe el problema o sugerencia...",submit:"Enviar",cancel:"Cancelar",quickOptions:[{emoji:"🐛",label:"Algo no funciona"},{emoji:"💡",label:"Me gustaría que funcionara diferente"},{emoji:"🤔",label:"No entiendo esto"},{emoji:"✨",label:"Tengo una idea"}]},success:{title:"¡Gracias!",message:"Tu comentario ha sido recibido.",view_feedback:"Ver mis comentarios",close:"Cerrar"},error:{submit:"Error al enviar. Por favor, inténtalo de nuevo."},pet:{bubble:"¿Necesitas ayuda?"},frustration:{prompt:"¿Algo no funciona? Cuéntanos.",action:"Anotar",dismiss:"Cerrar"},annotation:{drawing:"Dibujo",element:"elemento"},record:{stop:"Detener",timer_label:"Grabando",max_reached:"Se alcanzó el tiempo máximo de grabación"},clarify:{thinking:"Pensando...",placeholder:"Escribe tu respuesta...",send:"Enviar",skip:"Omitir"}},Ze={tab:"Avis",toolbar:{markup:"Annoter",record:"Enregistrer",hint:"Cliquez sur un élément pour l'annoter · glissez pour dessiner",hintRecord:"Enregistrement de l'écran en cours",exit:"Quitter"},popup:{about:"À propos",placeholder:"Décrivez le problème ou votre suggestion...",submit:"Envoyer",cancel:"Annuler",quickOptions:[{emoji:"🐛",label:"Quelque chose ne fonctionne pas"},{emoji:"💡",label:"J'aimerais que cela fonctionne autrement"},{emoji:"🤔",label:"Je ne comprends pas ceci"},{emoji:"✨",label:"J'ai une idée"}]},success:{title:"Merci !",message:"Votre avis a bien été reçu.",view_feedback:"Voir mes avis",close:"Fermer"},error:{submit:"Échec de l'envoi. Veuillez réessayer."},pet:{bubble:"Besoin d'aide ?"},frustration:{prompt:"Un problème ? Dites-le-nous.",action:"Annoter",dismiss:"Fermer"},annotation:{drawing:"Dessin",element:"élément"},record:{stop:"Arrêter",timer_label:"Enregistrement",max_reached:"Durée maximale d'enregistrement atteinte"},clarify:{thinking:"Réflexion...",placeholder:"Tapez votre réponse...",send:"Envoyer",skip:"Passer"}},ti={tab:"Feedback",toolbar:{markup:"Markieren",record:"Aufnehmen",hint:"Klicken Sie auf ein Element zum Kommentieren · ziehen Sie zum Zeichnen",hintRecord:"Bildschirmaufnahme läuft",exit:"Beenden"},popup:{about:"Info",placeholder:"Beschreiben Sie das Problem oder Ihren Vorschlag...",submit:"Absenden",cancel:"Abbrechen",quickOptions:[{emoji:"🐛",label:"Etwas funktioniert nicht"},{emoji:"💡",label:"Ich wünsche mir das anders"},{emoji:"🤔",label:"Das verstehe ich nicht"},{emoji:"✨",label:"Ich habe eine Idee"}]},success:{title:"Vielen Dank!",message:"Ihr Feedback wurde empfangen.",view_feedback:"Mein Feedback ansehen",close:"Schließen"},error:{submit:"Senden fehlgeschlagen. Bitte versuchen Sie es erneut."},pet:{bubble:"Brauchen Sie Hilfe?"},frustration:{prompt:"Etwas funktioniert nicht? Sagen Sie es uns.",action:"Kommentieren",dismiss:"Schließen"},annotation:{drawing:"Zeichnung",element:"Element"},record:{stop:"Stopp",timer_label:"Aufnahme",max_reached:"Maximale Aufnahmezeit erreicht"},clarify:{thinking:"Einen Moment...",placeholder:"Antwort eingeben...",send:"Senden",skip:"Überspringen"}},w={en:Xe,"zh-CN":Ge,ja:Ke,ko:Je,es:Qe,fr:Ze,de:ti};function ei(i){if(w[i])return w[i];const t=i.split("-")[0];return w[t]?w[t]:w.en}const ii=60,si="https://cdn.jsdelivr.net/npm/rrweb@2.1.0/dist/rrweb.min.js",ri="sha384-6qZKf9GE/E2uhA8IdLwXsQiLN/jVx8mhA0i04rQ1aHLrs2URo3ivHlSbaccG59zt";let v=null;function ni(){return v||(v=oi().catch(()=>ai()),v)}async function oi(){return(await import("rrweb")).record}function ai(){return new Promise((i,t)=>{const e=globalThis;if(e.rrweb?.record){i(e.rrweb.record);return}const s=document.createElement("script");s.src=si,s.integrity=ri,s.crossOrigin="anonymous",s.onload=()=>{const r=globalThis;r.rrweb?.record?i(r.rrweb.record):t(new Error("rrweb global not found after script load"))},s.onerror=()=>t(new Error("Failed to load rrweb from CDN")),document.head.appendChild(s)})}class li{constructor(t,e){this.events=[],this.stopFn=null,this.startedAt=0,this.timer=null,this.clickHandler=null,this.stopped=!1,this.shadow=t,this.onMaxReached=e}async start(){const t=await ni();this.startedAt=Date.now(),this.stopped=!1,this.stopFn=t({emit:e=>{this.stopped||this.events.push(e)}}),this.clickHandler=e=>{this.showClickRipple(e.clientX,e.clientY),t.addCustomEvent?.("mtb-click",{x:e.clientX,y:e.clientY,target:e.target instanceof HTMLElement?e.target.tagName:""})},document.addEventListener("click",this.clickHandler,!0),this.timer=setTimeout(()=>{this.onMaxReached?.()},ii*1e3)}stop(){return this.stopped=!0,this.stopFn?.(),this.stopFn=null,this.cleanupTimer(),this.cleanupClickHandler(),{events:this.events,duration:this.getDuration()}}getDuration(){return this.startedAt===0?0:Math.round((Date.now()-this.startedAt)/1e3)}destroy(){this.stopped=!0,this.stopFn?.(),this.stopFn=null,this.cleanupTimer(),this.cleanupClickHandler(),this.events=[],this.startedAt=0}cleanupTimer(){this.timer&&(clearTimeout(this.timer),this.timer=null)}cleanupClickHandler(){this.clickHandler&&(document.removeEventListener("click",this.clickHandler,!0),this.clickHandler=null)}showClickRipple(t,e){const s=this.shadow.el("div","mtb-click-ripple");s.style.left=`${t}px`,s.style.top=`${e}px`,this.shadow.append(s),s.addEventListener("animationend",()=>s.remove())}}class ci{constructor(t,e,s,r){this.intervalId=null,this.getDuration=s,this.el=t.el("div","mtb-record-bar"),this.el.innerHTML=`
79
+ `,t.append(this.el),this.el.querySelector(".mtb-close-link").addEventListener("click",s),r&&this.el.querySelector(".mtb-view-feedback-link").addEventListener("click",r),setTimeout(()=>s(),Dt)}destroy(){this.el.remove()}}function Pt(i,t){if(i.match(/^[a-z]+:\/\//i))return i;if(i.match(/^\/\//))return window.location.protocol+i;if(i.match(/^[a-z]+:/i))return i;const e=document.implementation.createHTMLDocument(),s=e.createElement("base"),r=e.createElement("a");return e.head.appendChild(s),e.body.appendChild(r),t&&(s.href=t),r.href=i,r.href}const Rt=(()=>{let i=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(i+=1,`u${t()}${i}`)})();function p(i){const t=[];for(let e=0,s=i.length;e<s;e++)t.push(i[e]);return t}let b=null;function X(i={}){return b||(i.includeStyleProperties?(b=i.includeStyleProperties,b):(b=p(window.getComputedStyle(document.documentElement)),b))}function S(i,t){const s=(i.ownerDocument.defaultView||window).getComputedStyle(i).getPropertyValue(t);return s?parseFloat(s.replace("px","")):0}function Ht(i){const t=S(i,"border-left-width"),e=S(i,"border-right-width");return i.clientWidth+t+e}function $t(i){const t=S(i,"border-top-width"),e=S(i,"border-bottom-width");return i.clientHeight+t+e}function G(i,t={}){const e=t.width||Ht(i),s=t.height||$t(i);return{width:e,height:s}}function It(){let i,t;try{t=process}catch{}const e=t&&t.env?t.env.devicePixelRatio:null;return e&&(i=parseInt(e,10),Number.isNaN(i)&&(i=1)),i||window.devicePixelRatio||1}const d=16384;function Ot(i){(i.width>d||i.height>d)&&(i.width>d&&i.height>d?i.width>i.height?(i.height*=d/i.width,i.width=d):(i.width*=d/i.height,i.height=d):i.width>d?(i.height*=d/i.width,i.width=d):(i.width*=d/i.height,i.height=d))}function E(i){return new Promise((t,e)=>{const s=new Image;s.onload=()=>{s.decode().then(()=>{requestAnimationFrame(()=>t(s))})},s.onerror=e,s.crossOrigin="anonymous",s.decoding="async",s.src=i})}async function Ft(i){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(i)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function jt(i,t,e){const s="http://www.w3.org/2000/svg",r=document.createElementNS(s,"svg"),n=document.createElementNS(s,"foreignObject");return r.setAttribute("width",`${t}`),r.setAttribute("height",`${e}`),r.setAttribute("viewBox",`0 0 ${t} ${e}`),n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("externalResourcesRequired","true"),r.appendChild(n),n.appendChild(i),Ft(r)}const h=(i,t)=>{if(i instanceof t)return!0;const e=Object.getPrototypeOf(i);return e===null?!1:e.constructor.name===t.name||h(e,t)};function Ut(i){const t=i.getPropertyValue("content");return`${i.cssText} content: '${t.replace(/'|"/g,"")}';`}function zt(i,t){return X(t).map(e=>{const s=i.getPropertyValue(e),r=i.getPropertyPriority(e);return`${e}: ${s}${r?" !important":""};`}).join(" ")}function Bt(i,t,e,s){const r=`.${i}:${t}`,n=e.cssText?Ut(e):zt(e,s);return document.createTextNode(`${r}{${n}}`)}function O(i,t,e,s){const r=window.getComputedStyle(i,e),n=r.getPropertyValue("content");if(n===""||n==="none")return;const o=Rt();try{t.className=`${t.className} ${o}`}catch{return}const a=document.createElement("style");a.appendChild(Bt(o,e,r,s)),t.appendChild(a)}function qt(i,t,e){O(i,t,":before",e),O(i,t,":after",e)}const F="application/font-woff",j="image/jpeg",Wt={woff:F,woff2:F,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:j,jpeg:j,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Nt(i){const t=/\.([^./]*?)$/g.exec(i);return t?t[1]:""}function P(i){const t=Nt(i).toLowerCase();return Wt[t]||""}function Vt(i){return i.split(/,/)[1]}function _(i){return i.search(/^(data:)/)!==-1}function Yt(i,t){return`data:${t};base64,${i}`}async function K(i,t,e){const s=await fetch(i,t);if(s.status===404)throw new Error(`Resource "${s.url}" not found`);const r=await s.blob();return new Promise((n,o)=>{const a=new FileReader;a.onerror=o,a.onloadend=()=>{try{n(e({res:s,result:a.result}))}catch(l){o(l)}},a.readAsDataURL(r)})}const L={};function Xt(i,t,e){let s=i.replace(/\?.*/,"");return e&&(s=i),/ttf|otf|eot|woff2?/i.test(s)&&(s=s.replace(/.*\//,"")),t?`[${t}]${s}`:s}async function R(i,t,e){const s=Xt(i,t,e.includeQueryParams);if(L[s]!=null)return L[s];e.cacheBust&&(i+=(/\?/.test(i)?"&":"?")+new Date().getTime());let r;try{const n=await K(i,e.fetchRequestInit,({res:o,result:a})=>(t||(t=o.headers.get("Content-Type")||""),Vt(a)));r=Yt(n,t)}catch(n){r=e.imagePlaceholder||"";let o=`Failed to fetch resource: ${i}`;n&&(o=typeof n=="string"?n:n.message),o&&console.warn(o)}return L[s]=r,r}async function Gt(i){const t=i.toDataURL();return t==="data:,"?i.cloneNode(!1):E(t)}async function Kt(i,t){if(i.currentSrc){const n=document.createElement("canvas"),o=n.getContext("2d");n.width=i.clientWidth,n.height=i.clientHeight,o?.drawImage(i,0,0,n.width,n.height);const a=n.toDataURL();return E(a)}const e=i.poster,s=P(e),r=await R(e,s,t);return E(r)}async function Jt(i,t){var e;try{if(!((e=i?.contentDocument)===null||e===void 0)&&e.body)return await C(i.contentDocument.body,t,!0)}catch{}return i.cloneNode(!1)}async function Qt(i,t){return h(i,HTMLCanvasElement)?Gt(i):h(i,HTMLVideoElement)?Kt(i,t):h(i,HTMLIFrameElement)?Jt(i,t):i.cloneNode(J(i))}const Zt=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SLOT",J=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SVG";async function te(i,t,e){var s,r;if(J(t))return t;let n=[];return Zt(i)&&i.assignedNodes?n=p(i.assignedNodes()):h(i,HTMLIFrameElement)&&(!((s=i.contentDocument)===null||s===void 0)&&s.body)?n=p(i.contentDocument.body.childNodes):n=p(((r=i.shadowRoot)!==null&&r!==void 0?r:i).childNodes),n.length===0||h(i,HTMLVideoElement)||await n.reduce((o,a)=>o.then(()=>C(a,e)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function ee(i,t,e){const s=t.style;if(!s)return;const r=window.getComputedStyle(i);r.cssText?(s.cssText=r.cssText,s.transformOrigin=r.transformOrigin):X(e).forEach(n=>{let o=r.getPropertyValue(n);n==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),h(i,HTMLIFrameElement)&&n==="display"&&o==="inline"&&(o="block"),n==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),s.setProperty(n,o,r.getPropertyPriority(n))})}function ie(i,t){h(i,HTMLTextAreaElement)&&(t.innerHTML=i.value),h(i,HTMLInputElement)&&t.setAttribute("value",i.value)}function se(i,t){if(h(i,HTMLSelectElement)){const e=t,s=Array.from(e.children).find(r=>i.value===r.getAttribute("value"));s&&s.setAttribute("selected","")}}function re(i,t,e){return h(t,Element)&&(ee(i,t,e),qt(i,t,e),ie(i,t),se(i,t)),t}async function ne(i,t){const e=i.querySelectorAll?i.querySelectorAll("use"):[];if(e.length===0)return i;const s={};for(let n=0;n<e.length;n++){const a=e[n].getAttribute("xlink:href");if(a){const l=i.querySelector(a),c=document.querySelector(a);!l&&c&&!s[a]&&(s[a]=await C(c,t,!0))}}const r=Object.values(s);if(r.length){const n="http://www.w3.org/1999/xhtml",o=document.createElementNS(n,"svg");o.setAttribute("xmlns",n),o.style.position="absolute",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.display="none";const a=document.createElementNS(n,"defs");o.appendChild(a);for(let l=0;l<r.length;l++)a.appendChild(r[l]);i.appendChild(o)}return i}async function C(i,t,e){return!e&&t.filter&&!t.filter(i)?null:Promise.resolve(i).then(s=>Qt(s,t)).then(s=>te(i,s,t)).then(s=>re(i,s,t)).then(s=>ne(s,t))}const Q=/url\((['"]?)([^'"]+?)\1\)/g,oe=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ae=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function le(i){const t=i.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function ce(i){const t=[];return i.replace(Q,(e,s,r)=>(t.push(r),e)),t.filter(e=>!_(e))}async function he(i,t,e,s,r){try{const n=e?Pt(t,e):t,o=P(t);let a;return r||(a=await R(n,o,s)),i.replace(le(t),`$1${a}$3`)}catch{}return i}function de(i,{preferredFontFormat:t}){return t?i.replace(ae,e=>{for(;;){const[s,,r]=oe.exec(e)||[];if(!r)return"";if(r===t)return`src: ${s};`}}):i}function Z(i){return i.search(Q)!==-1}async function tt(i,t,e){if(!Z(i))return i;const s=de(i,e);return ce(s).reduce((n,o)=>n.then(a=>he(a,o,t,e)),Promise.resolve(s))}async function g(i,t,e){var s;const r=(s=t.style)===null||s===void 0?void 0:s.getPropertyValue(i);if(r){const n=await tt(r,null,e);return t.style.setProperty(i,n,t.style.getPropertyPriority(i)),!0}return!1}async function ue(i,t){await g("background",i,t)||await g("background-image",i,t),await g("mask",i,t)||await g("-webkit-mask",i,t)||await g("mask-image",i,t)||await g("-webkit-mask-image",i,t)}async function pe(i,t){const e=h(i,HTMLImageElement);if(!(e&&!_(i.src))&&!(h(i,SVGImageElement)&&!_(i.href.baseVal)))return;const s=e?i.src:i.href.baseVal,r=await R(s,P(s),t);await new Promise((n,o)=>{i.onload=n,i.onerror=t.onImageErrorHandler?(...l)=>{try{n(t.onImageErrorHandler(...l))}catch(c){o(c)}}:o;const a=i;a.decode&&(a.decode=n),a.loading==="lazy"&&(a.loading="eager"),e?(i.srcset="",i.src=r):i.href.baseVal=r})}async function me(i,t){const s=p(i.childNodes).map(r=>et(r,t));await Promise.all(s).then(()=>i)}async function et(i,t){h(i,Element)&&(await ue(i,t),await pe(i,t),await me(i,t))}function fe(i,t){const{style:e}=i;t.backgroundColor&&(e.backgroundColor=t.backgroundColor),t.width&&(e.width=`${t.width}px`),t.height&&(e.height=`${t.height}px`);const s=t.style;return s!=null&&Object.keys(s).forEach(r=>{e[r]=s[r]}),i}const U={};async function z(i){let t=U[i];if(t!=null)return t;const s=await(await fetch(i)).text();return t={url:i,cssText:s},U[i]=t,t}async function B(i,t){let e=i.cssText;const s=/url\(["']?([^"')]+)["']?\)/g,n=(e.match(/url\([^)]+\)/g)||[]).map(async o=>{let a=o.replace(s,"$1");return a.startsWith("https://")||(a=new URL(a,i.url).href),K(a,t.fetchRequestInit,({result:l})=>(e=e.replace(o,`url(${l})`),[o,l]))});return Promise.all(n).then(()=>e)}function q(i){if(i==null)return[];const t=[],e=/(\/\*[\s\S]*?\*\/)/gi;let s=i.replace(e,"");const r=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=r.exec(s);if(l===null)break;t.push(l[0])}s=s.replace(r,"");const n=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(o,"gi");for(;;){let l=n.exec(s);if(l===null){if(l=a.exec(s),l===null)break;n.lastIndex=a.lastIndex}else a.lastIndex=n.lastIndex;t.push(l[0])}return t}async function be(i,t){const e=[],s=[];return i.forEach(r=>{if("cssRules"in r)try{p(r.cssRules||[]).forEach((n,o)=>{if(n.type===CSSRule.IMPORT_RULE){let a=o+1;const l=n.href,c=z(l).then(u=>B(u,t)).then(u=>q(u).forEach(M=>{try{r.insertRule(M,M.startsWith("@import")?a+=1:r.cssRules.length)}catch(nt){console.error("Error inserting rule from remote css",{rule:M,error:nt})}})).catch(u=>{console.error("Error loading remote css",u.toString())});s.push(c)}})}catch(n){const o=i.find(a=>a.href==null)||document.styleSheets[0];r.href!=null&&s.push(z(r.href).then(a=>B(a,t)).then(a=>q(a).forEach(l=>{o.insertRule(l,o.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",n)}}),Promise.all(s).then(()=>(i.forEach(r=>{if("cssRules"in r)try{p(r.cssRules||[]).forEach(n=>{e.push(n)})}catch(n){console.error(`Error while reading CSS rules from ${r.href}`,n)}}),e))}function ge(i){return i.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>Z(t.style.getPropertyValue("src")))}async function ye(i,t){if(i.ownerDocument==null)throw new Error("Provided element is not within a Document");const e=p(i.ownerDocument.styleSheets),s=await be(e,t);return ge(s)}function it(i){return i.trim().replace(/["']/g,"")}function xe(i){const t=new Set;function e(s){(s.style.fontFamily||getComputedStyle(s).fontFamily).split(",").forEach(n=>{t.add(it(n))}),Array.from(s.children).forEach(n=>{n instanceof HTMLElement&&e(n)})}return e(i),t}async function we(i,t){const e=await ye(i,t),s=xe(i);return(await Promise.all(e.filter(n=>s.has(it(n.style.fontFamily))).map(n=>{const o=n.parentStyleSheet?n.parentStyleSheet.href:null;return tt(n.cssText,o,t)}))).join(`
80
+ `)}async function ke(i,t){const e=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await we(i,t);if(e){const s=document.createElement("style"),r=document.createTextNode(e);s.appendChild(r),i.firstChild?i.insertBefore(s,i.firstChild):i.appendChild(s)}}async function ve(i,t={}){const{width:e,height:s}=G(i,t),r=await C(i,t,!0);return await ke(r,t),await et(r,t),fe(r,t),await jt(r,e,s)}async function Se(i,t={}){const{width:e,height:s}=G(i,t),r=await ve(i,t),n=await E(r),o=document.createElement("canvas"),a=o.getContext("2d"),l=t.pixelRatio||It(),c=t.canvasWidth||e,u=t.canvasHeight||s;return o.width=c*l,o.height=u*l,t.skipAutoScale||Ot(o),o.style.width=`${c}`,o.style.height=`${u}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,o.width,o.height)),a.drawImage(n,0,0,o.width,o.height),o}async function Ee(i,t={}){return(await Se(i,t)).toDataURL()}async function Ce(i=[]){const t=Me(i);try{const e=await Ee(document.body,{cacheBust:!0,skipAutoScale:!1,filter:s=>!(s instanceof HTMLElement&&s.id==="mtb-widget-host")});return _e(e)}catch{return null}finally{t?.remove()}}function Me(i){if(i.length===0)return null;const t=document.createElement("div");t.setAttribute("data-mtb-capture-annotations","true"),t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;inset:0;pointer-events:none;z-index:2147483645;";for(const[e,s]of i.entries())s.type==="pin"?t.appendChild(Te(s,e+1)):s.type==="draw"&&s.drawPath&&t.appendChild(Le(s.drawPath));return document.body.appendChild(t),t}function Te(i,t){const e=document.createElement("div");return e.textContent=String(t),e.style.cssText=["position:fixed",`left:${i.x}px`,`top:${i.y}px`,"width:22px","height:22px","border-radius:50% 50% 50% 2px","background:#059669","border:2px solid #fff","display:flex","align-items:center","justify-content:center",'font:700 10px -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',"color:#fff","box-shadow:0 2px 8px rgba(5,150,105,0.45)","transform:translate(-50%,-50%)"].join(";"),e}function Le(i){const t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("width","100%"),t.setAttribute("height","100%"),t.setAttribute("viewBox",`0 0 ${window.innerWidth} ${window.innerHeight}`),t.style.cssText="position:fixed;inset:0;width:100%;height:100%;overflow:visible;";const e=document.createElementNS("http://www.w3.org/2000/svg","path");return e.setAttribute("d",i),e.setAttribute("fill","none"),e.setAttribute("stroke","#059669"),e.setAttribute("stroke-width","3.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("filter","drop-shadow(0 1px 2px rgba(5,150,105,0.35))"),t.appendChild(e),t}function _e(i){const[t,e]=i.split(","),s=t.match(/:(.*?);/)?.[1]??"image/png",r=atob(e),n=new Uint8Array(r.length);for(let o=0;o<r.length;o++)n[o]=r.charCodeAt(o);return new Blob([n],{type:s})}class De{constructor(){this.listeners=new Set,this.originalOnError=null,this.installedOnError=null,this.rejectionHandler=null,this.hooked=!1}subscribe(t){return this.listeners.add(t),this.hook(),()=>{this.listeners.delete(t),this.listeners.size===0&&this.unhook()}}hook(){this.hooked||(this.hooked=!0,this.originalOnError=window.onerror,this.installedOnError=(t,e,s,r,n)=>(this.emit({message:String(t),source:e,line:s,col:r,error:n}),this.originalOnError?this.originalOnError.call(window,t,e,s,r,n):!1),window.onerror=this.installedOnError,this.rejectionHandler=t=>{const e=t.reason instanceof Error?t.reason.message:String(t.reason);this.emit({message:`Unhandled rejection: ${e}`})},window.addEventListener("unhandledrejection",this.rejectionHandler))}unhook(){this.hooked&&(this.hooked=!1,window.onerror===this.installedOnError&&(window.onerror=this.originalOnError),this.installedOnError=null,this.originalOnError=null,this.rejectionHandler&&(window.removeEventListener("unhandledrejection",this.rejectionHandler),this.rejectionHandler=null))}emit(t){for(const e of this.listeners)e(t)}}const st=new De,Ae=20;class Pe{constructor(){this.errors=[],this.unsubscribe=null}start(){this.unsubscribe||(this.unsubscribe=st.subscribe(t=>this.record(t)))}record(t){const e=t.line!=null?` (${t.line}:${t.col??0})`:"";this.addError(`${t.message}${e}`)}addError(t){this.errors.length>=Ae||this.errors.includes(t)||this.errors.push(t)}getErrors(){return[...this.errors]}stop(){this.unsubscribe?.(),this.unsubscribe=null}}const Re=3,He=1e3,$e=3,Ie=5e3,Oe=500,Fe=500,je=300,Ue=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA","LABEL","SUMMARY","DETAILS"]),ze=new Set(["button","link","checkbox","radio","tab","menuitem","option","switch","textbox","combobox","listbox","slider","spinbutton"]),W=["404","500","not found","page not found","server error","internal server error"],k=class k{constructor(t){this.clickHistory=[],this.unsubscribeErrors=null,this.active=!1,this.errorCount=0,this.deadClickCount=0,this.cooldownUntil=0,this.navTimestamps=[],this.boundPopstateHandler=null,this.originalPushState=null,this.originalReplaceState=null,this.installedPushState=null,this.installedReplaceState=null,this.boundSubmitHandler=null,this.boundInvalidHandler=null,this.errorPageUrls=new Set,this.domObserver=null,this.pendingDomChecks=0,this.lastMutationAt=-1,this.onFrustration=t,this.boundClickHandler=e=>this.handleClick(e)}start(){this.active||(this.active=!0,document.addEventListener("click",this.boundClickHandler,!0),this.unsubscribeErrors=st.subscribe(t=>{this.errorCount++}),this.startNavigationTracking(),this.startFormTracking(),this.checkErrorPage())}stop(){this.active&&(this.active=!1,document.removeEventListener("click",this.boundClickHandler,!0),this.unsubscribeErrors?.(),this.unsubscribeErrors=null,this.clickHistory=[],this.stopNavigationTracking(),this.stopFormTracking(),this.errorPageUrls.clear(),this.disconnectDomObserver())}startNavigationTracking(){this.boundPopstateHandler=()=>this.handleNavigation(),window.addEventListener("popstate",this.boundPopstateHandler),this.originalPushState=history.pushState.bind(history),this.originalReplaceState=history.replaceState.bind(history);const t=this.originalPushState,e=this.originalReplaceState,s=()=>this.handleNavigation();this.installedPushState=function(r,n,o){t(r,n,o),s()},this.installedReplaceState=function(r,n,o){e(r,n,o),s()},history.pushState=this.installedPushState,history.replaceState=this.installedReplaceState}stopNavigationTracking(){this.boundPopstateHandler&&(window.removeEventListener("popstate",this.boundPopstateHandler),this.boundPopstateHandler=null),this.originalPushState&&history.pushState===this.installedPushState&&(history.pushState=this.originalPushState),this.originalReplaceState&&history.replaceState===this.installedReplaceState&&(history.replaceState=this.originalReplaceState),this.originalPushState=null,this.originalReplaceState=null,this.installedPushState=null,this.installedReplaceState=null,this.navTimestamps=[]}startFormTracking(){this.boundSubmitHandler=t=>this.handleFormSubmit(t),this.boundInvalidHandler=t=>this.handleFormInvalid(t),document.addEventListener("submit",this.boundSubmitHandler,!0),document.addEventListener("invalid",this.boundInvalidHandler,!0)}stopFormTracking(){this.boundSubmitHandler&&(document.removeEventListener("submit",this.boundSubmitHandler,!0),this.boundSubmitHandler=null),this.boundInvalidHandler&&(document.removeEventListener("invalid",this.boundInvalidHandler,!0),this.boundInvalidHandler=null)}handleClick(t){const e=t.target;if(!e||this.isWidgetElement(e))return;const s=Date.now();this.clickHistory.push({target:e,time:s});const r=s-He;if(this.clickHistory=this.clickHistory.filter(o=>o.time>r),this.clickHistory.filter(o=>o.target===e).length>=Re){this.clickHistory=[],this.emitHighPriority({signal:"rage_click",target:y(e),timestamp:s});return}this.isInteractive(e)||(this.deadClickCount++,this.deadClickCount>=3&&this.errorCount>0&&(this.deadClickCount=0,this.errorCount=0,this.emitIfReady({signal:"dead_click",target:y(e),timestamp:s}))),this.checkDeadClickDom(e,s)}handleNavigation(){const t=Date.now();this.navTimestamps.push(t);const e=t-Ie;this.navTimestamps=this.navTimestamps.filter(s=>s>e),this.navTimestamps.length>=$e&&(this.navTimestamps=[],this.emitIfReady({signal:"rapid_navigation",timestamp:t})),setTimeout(()=>{this.active&&this.checkErrorPage()},je)}handleFormSubmit(t){const e=t.target;e instanceof HTMLFormElement&&(this.isWidgetElement(e)||setTimeout(()=>{this.active&&e.querySelector('[aria-invalid="true"], .is-invalid')&&this.emitIfReady({signal:"form_failure",target:y(e),timestamp:Date.now()})},Oe))}handleFormInvalid(t){const e=t.target;if(!e||this.isWidgetElement(e))return;const s=e.closest("form");this.emitIfReady({signal:"form_failure",target:y(s||e),timestamp:Date.now()})}checkErrorPage(){const t=location.href;if(this.errorPageUrls.has(t))return;const e=document.title.toLowerCase();if(W.some(r=>e.includes(r))){this.errorPageUrls.add(t),this.emitHighPriority({signal:"error_page",detail:document.title,timestamp:Date.now()});return}const s=document.querySelectorAll('h1, h2, [class*="error"], [class*="not-found"], [id*="error"], [id*="not-found"]');for(const r of s){const n=r.textContent??"";if(n.length<200&&W.some(o=>n.toLowerCase().includes(o))){this.errorPageUrls.add(t),this.emitHighPriority({signal:"error_page",detail:n.trim().slice(0,60),timestamp:Date.now()});return}}}checkDeadClickDom(t,e){this.looksInteractive(t)&&(this.pendingDomChecks++,this.ensureDomObserver(),setTimeout(()=>{this.pendingDomChecks--;const s=this.lastMutationAt>=e;this.pendingDomChecks===0&&this.disconnectDomObserver(),!s&&this.active&&this.emitIfReady({signal:"dead_click_dom",target:y(t),timestamp:e})},Fe))}ensureDomObserver(){this.domObserver||(this.domObserver=new MutationObserver(()=>{this.lastMutationAt=Date.now()}),this.domObserver.observe(document.body,{childList:!0,subtree:!0,attributes:!0,characterData:!0}))}disconnectDomObserver(){this.domObserver?.disconnect(),this.domObserver=null}looksInteractive(t){if(window.getComputedStyle(t).cursor==="pointer")return!0;if(t.classList)for(const s of t.classList){const r=s.toLowerCase();if(r.includes("btn")||r.includes("button"))return!0}return!1}isInteractive(t){if(Ue.has(t.tagName))return!0;const e=t.getAttribute("role");return!!(e&&ze.has(e)||t.hasAttribute("onclick")||t.hasAttribute("tabindex")||t.contentEditable==="true"||window.getComputedStyle(t).cursor==="pointer"||t.closest('a, button, [role="button"], [role="link"], label'))}isWidgetElement(t){const e=document.getElementById("mtb-widget-host");return e?e===t||e.contains(t):!1}emitIfReady(t){const e=Date.now();e<this.cooldownUntil||(this.cooldownUntil=e+k.COOLDOWN_MS,this.onFrustration(t))}emitHighPriority(t){this.cooldownUntil=Date.now()+k.COOLDOWN_MS,this.onFrustration(t)}};k.COOLDOWN_MS=6e4;let D=k;function y(i){const t=i.tagName.toLowerCase(),e=i.id?`#${i.id}`:"",s=i.className&&typeof i.className=="string"?"."+i.className.trim().split(/\s+/).slice(0,2).join("."):"",r=i.textContent?.trim().slice(0,30)??"";return`<${t}${e}${s}>${r?` "${r}"`:""}`}function Be(){return{page_url:window.location.href,user_agent:navigator.userAgent,browser:qe(),os:We(),screen_width:window.screen.width,screen_height:window.screen.height}}function qe(){const i=navigator.userAgent;return/Edg\//.test(i)?`Edge ${i.match(/Edg\/(\S+)/)?.[1]??""}`:/OPR\//.test(i)?`Opera ${i.match(/OPR\/(\S+)/)?.[1]??""}`:/Chrome\//.test(i)?`Chrome ${i.match(/Chrome\/(\S+)/)?.[1]??""}`:/Safari\//.test(i)&&/Version\//.test(i)?`Safari ${i.match(/Version\/(\S+)/)?.[1]??""}`:/Firefox\//.test(i)?`Firefox ${i.match(/Firefox\/(\S+)/)?.[1]??""}`:"Unknown"}function We(){const i=navigator.userAgent;return/Windows NT 10/.test(i)?"Windows 10/11":/Windows NT/.test(i)?"Windows":/Mac OS X 10_15|macOS 1[56789]/.test(i)||/Mac OS X/.test(i)?"macOS":/Android/.test(i)?`Android ${i.match(/Android (\d+)/)?.[1]??""}`:/iPhone|iPad|iPod/.test(i)?"iOS":/Linux/.test(i)?"Linux":"Unknown"}const Ne="https://makethisbetter.dev/api/v1";class Ve{constructor(t,e,s=1e3,r,n){this.projectKey=t,this.apiUrl=(e??Ne).replace(/\/$/,""),this.retryDelayMs=s,this.userToken=r,this.userTokenFn=n}async resolveUserToken(){return this.userTokenFn?this.userTokenFn():this.userToken}async authHeaders(t){const e={"X-Project-Key":this.projectKey},s=await this.resolveUserToken();return s&&(e["X-User-Token"]=s),t&&(e["Content-Type"]=t),e}async submitFeedback(t,e){const s=new FormData;if(s.append("feedback[description]",t.description),s.append("feedback[page_url]",t.page_url),s.append("feedback[user_agent]",t.user_agent),s.append("feedback[browser]",t.browser),s.append("feedback[os]",t.os),s.append("feedback[screen_width]",String(t.screen_width)),s.append("feedback[screen_height]",String(t.screen_height)),s.append("feedback[console_errors]",JSON.stringify(t.console_errors)),s.append("feedback[annotations]",JSON.stringify(t.annotations)),t.target_element&&s.append("feedback[target_element]",JSON.stringify(t.target_element)),t.user_id&&s.append("feedback[user_id]",t.user_id),t.user_email&&s.append("feedback[user_email]",t.user_email),t.user_name&&s.append("feedback[user_name]",t.user_name),t.recording_events&&t.recording_events.length>0){const o=JSON.stringify(t.recording_events),a=new Blob([o],{type:"application/json"});s.append("feedback[recording]",a,"recording.json"),s.append("feedback[recording_duration]",String(t.recording_duration??0))}e&&s.append("feedback[screenshot]",e,"screenshot.png");const r=await this.authHeaders();return r["X-Idempotency-Key"]=Ye(),(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks`,{method:"POST",headers:r,body:s})).json()}async startClarification(t,e){const s={};e&&(s.message=e);const r=await this.authHeaders("application/json");return(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/clarify`,{method:"POST",headers:r,body:JSON.stringify(s)})).json()}async getClarification(t){const e=await this.authHeaders();return(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/clarify`,{method:"GET",headers:e})).json()}async fetchWithRetry(t,e,s=1){let r;try{r=await fetch(t,e)}catch(n){if(s>0)return await N(this.retryDelayMs),this.fetchWithRetry(t,e,s-1);throw n}if(r.ok)return r;if(r.status>=500&&s>0)return await N(this.retryDelayMs),this.fetchWithRetry(t,e,s-1);throw new Error(`HTTP ${r.status}`)}}function N(i){return i<=0?Promise.resolve():new Promise(t=>setTimeout(t,i))}function Ye(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function Xe(i,t,e,s,r,n){return{description:i,...t,console_errors:e,annotations:s?[s]:[],target_element:s?.targetSelector?{selector:s.targetSelector,text:s.targetText??"",name:s.targetName??""}:void 0,user_id:r?.id,user_email:r?.email,user_name:r?.name,recording_events:n?.events,recording_duration:n?.duration}}const Ge={tab:"Feedback",toolbar:{markup:"Mark up",record:"Record",hint:"Click any element to annotate · drag to draw",hintRecord:"Recording your screen",exit:"Exit"},popup:{about:"About",placeholder:"Describe the issue or suggestion...",submit:"Submit",cancel:"Cancel",quickOptions:[{emoji:"🐛",label:"Something is broken"},{emoji:"💡",label:"I wish this worked differently"},{emoji:"🤔",label:"I don't understand this"},{emoji:"✨",label:"I have an idea"}]},success:{title:"Thanks!",message:"Your feedback has been received.",title_no_ai:"Sent — thanks!",message_no_ai:"We'll take it from here. You'll hear back when it's resolved.",view_feedback:"View my feedback",close:"Close"},error:{submit:"Failed to submit. Please try again."},pet:{bubble:"Need help?"},frustration:{prompt:"Something not working? Tell us.",action:"Annotate",dismiss:"Dismiss"},annotation:{drawing:"Drawing",element:"element"},record:{stop:"Stop",timer_label:"Recording",max_reached:"Maximum recording time reached"},clarify:{thinking:"Thinking...",placeholder:"Type your response...",send:"Send",skip:"Skip"}},Ke={tab:"反馈",toolbar:{markup:"标注",record:"录屏",hint:"点击任意元素进行标注 · 拖拽可自由绘制",hintRecord:"正在录制屏幕",exit:"退出"},popup:{about:"关于",placeholder:"描述问题或建议...",submit:"提交",cancel:"取消",quickOptions:[{emoji:"🐛",label:"这里有问题"},{emoji:"💡",label:"我希望它能更好用"},{emoji:"🤔",label:"我看不懂这里"},{emoji:"✨",label:"我有个想法"}]},success:{title:"感谢!",message:"您的反馈已收到。",title_no_ai:"已发送,感谢!",message_no_ai:"我们会跟进处理,解决后会通知您。",view_feedback:"查看我的反馈",close:"关闭"},error:{submit:"提交失败,请重试。"},pet:{bubble:"需要帮助吗?"},frustration:{prompt:"遇到问题了?告诉我们。",action:"标注",dismiss:"关闭"},annotation:{drawing:"绘制",element:"元素"},record:{stop:"停止",timer_label:"录制中",max_reached:"已达到最大录制时长"},clarify:{thinking:"思考中...",placeholder:"输入你的回复...",send:"发送",skip:"跳过"}},Je={tab:"フィードバック",toolbar:{markup:"マークアップ",record:"録画",hint:"要素をクリックして注釈 · ドラッグで描画",hintRecord:"画面を録画中",exit:"終了"},popup:{about:"概要",placeholder:"問題や提案を入力してください...",submit:"送信",cancel:"キャンセル",quickOptions:[{emoji:"🐛",label:"不具合があります"},{emoji:"💡",label:"もっと使いやすくしてほしい"},{emoji:"🤔",label:"ここがわかりにくい"},{emoji:"✨",label:"アイデアがあります"}]},success:{title:"ありがとうございます!",message:"フィードバックを受け付けました。",title_no_ai:"送信しました!",message_no_ai:"チームが対応します。解決次第お知らせします。",view_feedback:"フィードバックを確認",close:"閉じる"},error:{submit:"送信に失敗しました。もう一度お試しください。"},pet:{bubble:"お困りですか?"},frustration:{prompt:"うまくいかないことがありますか?お知らせください。",action:"注釈",dismiss:"閉じる"},annotation:{drawing:"描画",element:"要素"},record:{stop:"停止",timer_label:"録画中",max_reached:"最大録画時間に達しました"},clarify:{thinking:"考え中...",placeholder:"回答を入力...",send:"送信",skip:"スキップ"}},Qe={tab:"피드백",toolbar:{markup:"마크업",record:"녹화",hint:"요소를 클릭하여 주석 · 드래그하여 그리기",hintRecord:"화면을 녹화 중입니다",exit:"나가기"},popup:{about:"정보",placeholder:"문제 또는 제안 사항을 설명해 주세요...",submit:"제출",cancel:"취소",quickOptions:[{emoji:"🐛",label:"오류가 있어요"},{emoji:"💡",label:"이 기능을 개선해 주세요"},{emoji:"🤔",label:"이 부분을 모르겠어요"},{emoji:"✨",label:"아이디어가 있어요"}]},success:{title:"감사합니다!",message:"피드백이 접수되었습니다.",title_no_ai:"전송 완료!",message_no_ai:"팀에서 처리 후 알려드리겠습니다.",view_feedback:"내 피드백 보기",close:"닫기"},error:{submit:"제출에 실패했습니다. 다시 시도해 주세요."},pet:{bubble:"도움이 필요하신가요?"},frustration:{prompt:"문제가 있으신가요? 알려 주세요.",action:"주석",dismiss:"닫기"},annotation:{drawing:"그리기",element:"요소"},record:{stop:"중지",timer_label:"녹화 중",max_reached:"최대 녹화 시간에 도달했습니다"},clarify:{thinking:"생각 중...",placeholder:"답변을 입력하세요...",send:"보내기",skip:"건너뛰기"}},Ze={tab:"Comentarios",toolbar:{markup:"Anotar",record:"Grabar",hint:"Haz clic en cualquier elemento para anotar · arrastra para dibujar",hintRecord:"Grabando tu pantalla",exit:"Salir"},popup:{about:"Acerca de",placeholder:"Describe el problema o sugerencia...",submit:"Enviar",cancel:"Cancelar",quickOptions:[{emoji:"🐛",label:"Algo no funciona"},{emoji:"💡",label:"Me gustaría que funcionara diferente"},{emoji:"🤔",label:"No entiendo esto"},{emoji:"✨",label:"Tengo una idea"}]},success:{title:"¡Gracias!",message:"Tu comentario ha sido recibido.",title_no_ai:"¡Enviado!",message_no_ai:"Nos encargamos. Te avisaremos cuando se resuelva.",view_feedback:"Ver mis comentarios",close:"Cerrar"},error:{submit:"Error al enviar. Por favor, inténtalo de nuevo."},pet:{bubble:"¿Necesitas ayuda?"},frustration:{prompt:"¿Algo no funciona? Cuéntanos.",action:"Anotar",dismiss:"Cerrar"},annotation:{drawing:"Dibujo",element:"elemento"},record:{stop:"Detener",timer_label:"Grabando",max_reached:"Se alcanzó el tiempo máximo de grabación"},clarify:{thinking:"Pensando...",placeholder:"Escribe tu respuesta...",send:"Enviar",skip:"Omitir"}},ti={tab:"Avis",toolbar:{markup:"Annoter",record:"Enregistrer",hint:"Cliquez sur un élément pour l'annoter · glissez pour dessiner",hintRecord:"Enregistrement de l'écran en cours",exit:"Quitter"},popup:{about:"À propos",placeholder:"Décrivez le problème ou votre suggestion...",submit:"Envoyer",cancel:"Annuler",quickOptions:[{emoji:"🐛",label:"Quelque chose ne fonctionne pas"},{emoji:"💡",label:"J'aimerais que cela fonctionne autrement"},{emoji:"🤔",label:"Je ne comprends pas ceci"},{emoji:"✨",label:"J'ai une idée"}]},success:{title:"Merci !",message:"Votre avis a bien été reçu.",title_no_ai:"Envoyé !",message_no_ai:"On s'en occupe. Vous serez informé(e) dès que ce sera résolu.",view_feedback:"Voir mes avis",close:"Fermer"},error:{submit:"Échec de l'envoi. Veuillez réessayer."},pet:{bubble:"Besoin d'aide ?"},frustration:{prompt:"Un problème ? Dites-le-nous.",action:"Annoter",dismiss:"Fermer"},annotation:{drawing:"Dessin",element:"élément"},record:{stop:"Arrêter",timer_label:"Enregistrement",max_reached:"Durée maximale d'enregistrement atteinte"},clarify:{thinking:"Réflexion...",placeholder:"Tapez votre réponse...",send:"Envoyer",skip:"Passer"}},ei={tab:"Feedback",toolbar:{markup:"Markieren",record:"Aufnehmen",hint:"Klicken Sie auf ein Element zum Kommentieren · ziehen Sie zum Zeichnen",hintRecord:"Bildschirmaufnahme läuft",exit:"Beenden"},popup:{about:"Info",placeholder:"Beschreiben Sie das Problem oder Ihren Vorschlag...",submit:"Absenden",cancel:"Abbrechen",quickOptions:[{emoji:"🐛",label:"Etwas funktioniert nicht"},{emoji:"💡",label:"Ich wünsche mir das anders"},{emoji:"🤔",label:"Das verstehe ich nicht"},{emoji:"✨",label:"Ich habe eine Idee"}]},success:{title:"Vielen Dank!",message:"Ihr Feedback wurde empfangen.",title_no_ai:"Gesendet!",message_no_ai:"Wir kümmern uns darum. Sie werden benachrichtigt, sobald es gelöst ist.",view_feedback:"Mein Feedback ansehen",close:"Schließen"},error:{submit:"Senden fehlgeschlagen. Bitte versuchen Sie es erneut."},pet:{bubble:"Brauchen Sie Hilfe?"},frustration:{prompt:"Etwas funktioniert nicht? Sagen Sie es uns.",action:"Kommentieren",dismiss:"Schließen"},annotation:{drawing:"Zeichnung",element:"Element"},record:{stop:"Stopp",timer_label:"Aufnahme",max_reached:"Maximale Aufnahmezeit erreicht"},clarify:{thinking:"Einen Moment...",placeholder:"Antwort eingeben...",send:"Senden",skip:"Überspringen"}},w={en:Ge,"zh-CN":Ke,ja:Je,ko:Qe,es:Ze,fr:ti,de:ei};function ii(i){if(w[i])return w[i];const t=i.split("-")[0];return w[t]?w[t]:w.en}const si=60,ri="https://cdn.jsdelivr.net/npm/@rrweb/record@2.1.0/umd/record.min.js",ni="sha384-MrD66HBNSykaP2N95+6hQCFlF5oH2tvL3TD/zyvHNkP/sAFWZx98DX9MEDy8MdVT";let v=null;function oi(){return v||(v=ai().catch(()=>li()),v)}async function ai(){return(await import("rrweb")).record}function V(){const i=globalThis;return i.rrwebRecord?.record??i.rrweb?.record}function li(){return new Promise((i,t)=>{const e=V();if(e){i(e);return}const s=document.createElement("script");s.src=ri,s.integrity=ni,s.crossOrigin="anonymous",s.onload=()=>{const r=V();r?i(r):t(new Error("rrweb record global not found after script load"))},s.onerror=()=>t(new Error("Failed to load rrweb from CDN")),document.head.appendChild(s)})}class ci{constructor(t,e){this.events=[],this.stopFn=null,this.startedAt=0,this.timer=null,this.clickHandler=null,this.stopped=!1,this.shadow=t,this.onMaxReached=e}async start(){const t=await oi();this.startedAt=Date.now(),this.stopped=!1,this.stopFn=t({emit:e=>{this.stopped||this.events.push(e)}}),this.clickHandler=e=>{this.showClickRipple(e.clientX,e.clientY),t.addCustomEvent?.("mtb-click",{x:e.clientX,y:e.clientY,target:e.target instanceof HTMLElement?e.target.tagName:""})},document.addEventListener("click",this.clickHandler,!0),this.timer=setTimeout(()=>{this.onMaxReached?.()},si*1e3)}stop(){return this.stopped=!0,this.stopFn?.(),this.stopFn=null,this.cleanupTimer(),this.cleanupClickHandler(),{events:this.events,duration:this.getDuration()}}getDuration(){return this.startedAt===0?0:Math.round((Date.now()-this.startedAt)/1e3)}destroy(){this.stopped=!0,this.stopFn?.(),this.stopFn=null,this.cleanupTimer(),this.cleanupClickHandler(),this.events=[],this.startedAt=0}cleanupTimer(){this.timer&&(clearTimeout(this.timer),this.timer=null)}cleanupClickHandler(){this.clickHandler&&(document.removeEventListener("click",this.clickHandler,!0),this.clickHandler=null)}showClickRipple(t,e){const s=this.shadow.el("div","mtb-click-ripple");s.style.left=`${t}px`,s.style.top=`${e}px`,this.shadow.append(s),s.addEventListener("animationend",()=>s.remove())}}class hi{constructor(t,e,s,r){this.intervalId=null,this.getDuration=s,this.el=t.el("div","mtb-record-bar"),this.el.innerHTML=`
81
81
  <span class="mtb-record-dot"></span>
82
82
  <span class="mtb-record-timer">00:00</span>
83
83
  <button class="mtb-record-stop" type="button">${e.record.stop}</button>
84
- `,t.append(this.el),this.timerEl=this.el.querySelector(".mtb-record-timer"),this.el.querySelector(".mtb-record-stop").addEventListener("click",r),this.intervalId=setInterval(()=>this.updateTimer(),1e3)}updateTimer(){const t=this.getDuration(),e=String(Math.floor(t/60)).padStart(2,"0"),s=String(t%60).padStart(2,"0");this.timerEl.textContent=`${e}:${s}`}destroy(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.el.remove()}}class hi{constructor(){this.session=null,this.bar=null,this.result=null}async start(t,e,s){this.session=new li(t,s),this.bar=new ci(t,e,()=>this.session?.getDuration()??0,s),await this.session.start()}stop(){return this.session?(this.result=this.session.stop(),this.teardownUI(),this.result):null}getRecording(){return this.result}destroy(){this.teardownUI(),this.result=null}teardownUI(){this.session?.destroy(),this.session=null,this.bar?.destroy(),this.bar=null}}class V{constructor(t){this.tab=null,this.toolbar=null,this.session=null,this.popup=null,this.clarify=null,this.success=null,this.frustrationPrompt=null,this.frustrationDetector=null,this.mode="idle",this.currentAnnotation=null,this.recordingManager=null,this.config=t,this.messages=ei(t.locale??"en"),this.apiClient=new Ne(t.projectKey,t.apiUrl,void 0,t.userToken,t.userTokenFn),this.consoleCollector=new Re,this.consoleCollector.start(),this.buildUI(),t.frustrationDetection!==!1&&(this.frustrationDetector=new P(()=>this.handleFrustration()),this.frustrationDetector.start())}buildUI(){this.shadow=new pt(this.config.theme??"auto"),this.tab=new ft(this.shadow,this.messages,this.config.position??"right",()=>this.handleTabClick(),this.config.tabText)}handleTabClick(){this.mode==="idle"?(this.dismissFrustrationPrompt(),this.enterAnnotationMode()):this.exitAll()}handleFrustration(){this.mode!=="idle"||this.frustrationPrompt||(this.frustrationPrompt=new bt(this.shadow,this.messages,{onTell:()=>{this.dismissFrustrationPrompt(),this.enterAnnotationMode()},onDismiss:()=>this.dismissFrustrationPrompt()}))}dismissFrustrationPrompt(){this.frustrationPrompt?.destroy(),this.frustrationPrompt=null}enterAnnotationMode(){this.mode="annotating",this.tab?.setActive(!0),this.toolbar=new gt(this.shadow,this.messages,()=>this.exitAll(),t=>this.handleToolbarModeChange(t)),this.session=new $(this.shadow,this.messages,(t,e)=>{this.currentAnnotation=t,this.showPopup(t.x,t.y,e)})}handleToolbarModeChange(t){t==="record"?(this.mode="recording",this.session?.destroy(),this.session=null,this.recordingManager=new hi,this.recordingManager.start(this.shadow,this.messages,()=>{this.recordingManager&&(this.recordingManager.stop(),this.showPopup(window.innerWidth/2,window.innerHeight/2,this.messages.record.timer_label))}).catch(()=>{this.mode==="recording"&&(this.toolbar?.setMode("markup"),this.handleToolbarModeChange("markup"))})):(this.recordingManager?.destroy(),this.recordingManager=null,this.session||(this.session=new $(this.shadow,this.messages,(e,s)=>{this.currentAnnotation=e,this.showPopup(e.x,e.y,s)})),this.mode="annotating")}showPopup(t,e,s){this.mode="popup",this.session?.dismissInteraction(),this.popup=new Ct(this.shadow,{targetName:s,x:t,y:e,messages:this.messages,onSubmit:r=>this.handleSubmit(r),onClose:()=>this.exitAll()})}async handleSubmit(t){if(!this.popup)return;this.popup.setLoading(!0);const e=this.currentAnnotation,s=this.recordingManager?.getRecording()??void 0,[r,n]=await Promise.all([Ee(e?[e]:[]),Promise.resolve(ze())]),o=Ye(t,n,this.consoleCollector.getErrors(),e,this.config.user,s);try{const a=await this.apiClient.submitFeedback(o,r);this.popup?.destroy(),this.popup=null,this.session?.destroy(),this.session=null,this.recordingManager?.destroy(),this.recordingManager=null,a.ai_clarify_available===!1?this.showSuccess(a.project_id):this.showClarify(a.id,a.project_id)}catch{this.popup?.setLoading(!1),this.popup?.setError(this.messages.error.submit)}}showClarify(t,e){this.mode="idle",this.tab?.setActive(!1),this.clarify=new Lt(this.shadow,{feedbackId:t,apiClient:this.apiClient,messages:this.messages,onDone:()=>{this.clarify?.destroy(),this.clarify=null,this.showSuccess(e)}})}showSuccess(t){this.mode="idle",this.tab?.setActive(!1);const s=`${this.config.apiUrl?this.config.apiUrl.replace(/\/api\/v1\/?$/,""):"https://makethisbetter.dev"}/board/projects/${t}/feedbacks`,r=!!(this.config.userToken||this.config.userTokenFn);this.success=new Pt(this.shadow,this.messages,()=>{this.success?.destroy(),this.success=null},r?async()=>{const n=await this.apiClient.resolveUserToken();n&&window.open(`${s}?identity=${encodeURIComponent(n)}`,"_blank")}:void 0)}exitAll(){this.mode="idle",this.tab?.setActive(!1),this.toolbar?.destroy(),this.toolbar=null,this.session?.destroy(),this.session=null,this.popup?.destroy(),this.popup=null,this.clarify?.destroy(),this.clarify=null,this.currentAnnotation=null,this.recordingManager?.destroy(),this.recordingManager=null}destroy(){this.exitAll(),this.consoleCollector.stop(),this.frustrationDetector?.stop(),this.dismissFrustrationPrompt(),this.clarify?.destroy(),this.success?.destroy(),this.tab?.destroy(),this.recordingManager?.destroy(),this.shadow.destroy()}}let f=null;const st={init(i){f&&(f.destroy(),f=null),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{f=new V(i)}):f=new V(i)},destroy(){f?.destroy(),f=null}};typeof window<"u"&&(window.MakeThisBetter=st);exports.MakeThisBetter=st;
84
+ `,t.append(this.el),this.timerEl=this.el.querySelector(".mtb-record-timer"),this.el.querySelector(".mtb-record-stop").addEventListener("click",r),this.intervalId=setInterval(()=>this.updateTimer(),1e3)}updateTimer(){const t=this.getDuration(),e=String(Math.floor(t/60)).padStart(2,"0"),s=String(t%60).padStart(2,"0");this.timerEl.textContent=`${e}:${s}`}destroy(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.el.remove()}}class di{constructor(){this.session=null,this.bar=null,this.result=null}async start(t,e,s){this.session=new ci(t,s),this.bar=new hi(t,e,()=>this.session?.getDuration()??0,s),await this.session.start()}stop(){return this.session?(this.result=this.session.stop(),this.teardownUI(),this.result):null}getRecording(){return this.result}destroy(){this.teardownUI(),this.result=null}teardownUI(){this.session?.destroy(),this.session=null,this.bar?.destroy(),this.bar=null}}class Y{constructor(t){this.tab=null,this.toolbar=null,this.session=null,this.popup=null,this.clarify=null,this.success=null,this.frustrationPrompt=null,this.frustrationDetector=null,this.mode="idle",this.currentAnnotation=null,this.recordingManager=null,this.config=t,this.messages=ii(t.locale??"en"),this.apiClient=new Ve(t.projectKey,t.apiUrl,void 0,t.userToken,t.userTokenFn),this.consoleCollector=new Pe,this.consoleCollector.start(),this.buildUI(),t.frustrationDetection!==!1&&(this.frustrationDetector=new D(()=>this.handleFrustration()),this.frustrationDetector.start())}buildUI(){this.shadow=new mt(this.config.theme??"auto"),this.tab=new ft(this.shadow,this.messages,this.config.position??"right",()=>this.handleTabClick(),this.config.tabText)}handleTabClick(){this.mode==="idle"?(this.dismissFrustrationPrompt(),this.enterAnnotationMode()):this.exitAll()}handleFrustration(){this.mode!=="idle"||this.frustrationPrompt||(this.frustrationPrompt=new gt(this.shadow,this.messages,{onTell:()=>{this.dismissFrustrationPrompt(),this.enterAnnotationMode()},onDismiss:()=>this.dismissFrustrationPrompt()}))}dismissFrustrationPrompt(){this.frustrationPrompt?.destroy(),this.frustrationPrompt=null}enterAnnotationMode(){this.mode="annotating",this.tab?.setActive(!0),this.toolbar=new yt(this.shadow,this.messages,()=>this.exitAll(),t=>this.handleToolbarModeChange(t)),this.session=new $(this.shadow,this.messages,(t,e)=>{this.currentAnnotation=t,this.showPopup(t.x,t.y,e)})}handleToolbarModeChange(t){t==="record"?(this.mode="recording",this.session?.destroy(),this.session=null,this.recordingManager=new di,this.recordingManager.start(this.shadow,this.messages,()=>{this.recordingManager&&(this.recordingManager.stop(),this.showPopup(window.innerWidth/2,window.innerHeight/2,this.messages.record.timer_label))}).catch(e=>{console.warn("[MakeThisBetter] Screen recording unavailable, falling back to markup:",e),this.mode==="recording"&&(this.toolbar?.setMode("markup"),this.handleToolbarModeChange("markup"))})):(this.recordingManager?.destroy(),this.recordingManager=null,this.session||(this.session=new $(this.shadow,this.messages,(e,s)=>{this.currentAnnotation=e,this.showPopup(e.x,e.y,s)})),this.mode="annotating")}showPopup(t,e,s){this.mode="popup",this.session?.dismissInteraction(),this.popup=new Mt(this.shadow,{targetName:s,x:t,y:e,messages:this.messages,onSubmit:r=>this.handleSubmit(r),onClose:()=>this.exitAll()})}async handleSubmit(t){if(!this.popup)return;this.popup.setLoading(!0);const e=this.currentAnnotation,s=this.recordingManager?.getRecording()??void 0,[r,n]=await Promise.all([Ce(e?[e]:[]),Promise.resolve(Be())]),o=Xe(t,n,this.consoleCollector.getErrors(),e,this.config.user,s);try{const a=await this.apiClient.submitFeedback(o,r);this.popup?.destroy(),this.popup=null,this.session?.destroy(),this.session=null,this.recordingManager?.destroy(),this.recordingManager=null,a.skip_followup===!0||a.ai_clarify_available===!1?this.showSuccess(a.project_id,{skipFollowup:!0}):this.showClarify(a.id,a.project_id)}catch{this.popup?.setLoading(!1),this.popup?.setError(this.messages.error.submit)}}showClarify(t,e){this.mode="idle",this.tab?.setActive(!1),this.clarify=new _t(this.shadow,{feedbackId:t,apiClient:this.apiClient,messages:this.messages,onDone:()=>{this.clarify?.destroy(),this.clarify=null,this.showSuccess(e)}})}showSuccess(t,e){this.mode="idle",this.tab?.setActive(!1);const r=`${this.config.apiUrl?this.config.apiUrl.replace(/\/api\/v1\/?$/,""):"https://makethisbetter.dev"}/board/projects/${t}/feedbacks`,n=!!(this.config.userToken||this.config.userTokenFn);this.success=new At(this.shadow,this.messages,()=>{this.success?.destroy(),this.success=null},n?async()=>{const o=await this.apiClient.resolveUserToken();o&&window.open(`${r}?identity=${encodeURIComponent(o)}`,"_blank")}:void 0,e)}exitAll(){this.mode="idle",this.tab?.setActive(!1),this.toolbar?.destroy(),this.toolbar=null,this.session?.destroy(),this.session=null,this.popup?.destroy(),this.popup=null,this.clarify?.destroy(),this.clarify=null,this.currentAnnotation=null,this.recordingManager?.destroy(),this.recordingManager=null}destroy(){this.exitAll(),this.consoleCollector.stop(),this.frustrationDetector?.stop(),this.dismissFrustrationPrompt(),this.clarify?.destroy(),this.success?.destroy(),this.tab?.destroy(),this.recordingManager?.destroy(),this.shadow.destroy()}}let m=null;const rt={init(i){m&&(m.destroy(),m=null),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{m=new Y(i)}):m=new Y(i)},destroy(){m?.destroy(),m=null}};typeof window<"u"&&(window.MakeThisBetter=rt);exports.MakeThisBetter=rt;
85
85
  //# sourceMappingURL=makethisbetter.cjs.js.map