makethisbetter 1.5.4 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +10 -10
  2. package/dist/annotate/draw-note-bar.d.ts +29 -0
  3. package/dist/annotate/draw-note-bar.d.ts.map +1 -0
  4. package/dist/annotate/draw-note-bar.test.d.ts +2 -0
  5. package/dist/annotate/draw-note-bar.test.d.ts.map +1 -0
  6. package/dist/annotate/draw.d.ts +15 -9
  7. package/dist/annotate/draw.d.ts.map +1 -1
  8. package/dist/annotate/highlighter.d.ts +2 -0
  9. package/dist/annotate/highlighter.d.ts.map +1 -1
  10. package/dist/annotate/session.d.ts +16 -2
  11. package/dist/annotate/session.d.ts.map +1 -1
  12. package/dist/api/client.d.ts +8 -5
  13. package/dist/api/client.d.ts.map +1 -1
  14. package/dist/context/breadcrumbs.d.ts +26 -0
  15. package/dist/context/breadcrumbs.d.ts.map +1 -0
  16. package/dist/context/breadcrumbs.test.d.ts +2 -0
  17. package/dist/context/breadcrumbs.test.d.ts.map +1 -0
  18. package/dist/context/dom-utils.d.ts +3 -0
  19. package/dist/context/dom-utils.d.ts.map +1 -0
  20. package/dist/context/frustration.d.ts +0 -1
  21. package/dist/context/frustration.d.ts.map +1 -1
  22. package/dist/i18n/de.d.ts +24 -0
  23. package/dist/i18n/de.d.ts.map +1 -1
  24. package/dist/i18n/en.d.ts +24 -0
  25. package/dist/i18n/en.d.ts.map +1 -1
  26. package/dist/i18n/es.d.ts +24 -0
  27. package/dist/i18n/es.d.ts.map +1 -1
  28. package/dist/i18n/fr.d.ts +24 -0
  29. package/dist/i18n/fr.d.ts.map +1 -1
  30. package/dist/i18n/ja.d.ts +24 -0
  31. package/dist/i18n/ja.d.ts.map +1 -1
  32. package/dist/i18n/ko.d.ts +24 -0
  33. package/dist/i18n/ko.d.ts.map +1 -1
  34. package/dist/i18n/zh-CN.d.ts +24 -0
  35. package/dist/i18n/zh-CN.d.ts.map +1 -1
  36. package/dist/makethisbetter.cjs +50 -25
  37. package/dist/makethisbetter.cjs.map +1 -1
  38. package/dist/makethisbetter.esm.js +1132 -590
  39. package/dist/makethisbetter.esm.js.map +1 -1
  40. package/dist/makethisbetter.js +49 -24
  41. package/dist/makethisbetter.js.map +1 -1
  42. package/dist/popup/clarify.d.ts +28 -7
  43. package/dist/popup/clarify.d.ts.map +1 -1
  44. package/dist/popup/comment.d.ts +1 -0
  45. package/dist/popup/comment.d.ts.map +1 -1
  46. package/dist/record/replay.d.ts +7 -0
  47. package/dist/record/replay.d.ts.map +1 -0
  48. package/dist/screenshot/capture.d.ts +1 -0
  49. package/dist/screenshot/capture.d.ts.map +1 -1
  50. package/dist/styles.d.ts +1 -0
  51. package/dist/styles.d.ts.map +1 -1
  52. package/dist/types.d.ts +13 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/widget/controller.d.ts +18 -0
  55. package/dist/widget/controller.d.ts.map +1 -1
  56. package/dist/widget/dim-overlay.d.ts +8 -0
  57. package/dist/widget/dim-overlay.d.ts.map +1 -0
  58. package/dist/widget/dim-overlay.test.d.ts +2 -0
  59. package/dist/widget/dim-overlay.test.d.ts.map +1 -0
  60. package/dist/widget/payload.d.ts +2 -2
  61. package/dist/widget/payload.d.ts.map +1 -1
  62. package/dist/widget/tab.d.ts +3 -0
  63. package/dist/widget/tab.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/src/annotate/draw-note-bar.test.ts +90 -0
  66. package/src/annotate/draw-note-bar.ts +105 -0
  67. package/src/annotate/draw.test.ts +74 -84
  68. package/src/annotate/draw.ts +108 -65
  69. package/src/annotate/highlighter.test.ts +24 -1
  70. package/src/annotate/highlighter.ts +16 -2
  71. package/src/annotate/session.test.ts +112 -96
  72. package/src/annotate/session.ts +54 -10
  73. package/src/api/client.test.ts +69 -30
  74. package/src/api/client.ts +68 -20
  75. package/src/context/breadcrumbs.test.ts +154 -0
  76. package/src/context/breadcrumbs.ts +157 -0
  77. package/src/context/dom-utils.ts +16 -0
  78. package/src/context/frustration.ts +4 -8
  79. package/src/i18n/de.ts +34 -11
  80. package/src/i18n/en.ts +33 -10
  81. package/src/i18n/es.ts +34 -11
  82. package/src/i18n/fr.ts +33 -10
  83. package/src/i18n/index.test.ts +12 -0
  84. package/src/i18n/ja.ts +32 -9
  85. package/src/i18n/ko.ts +34 -11
  86. package/src/i18n/zh-CN.ts +35 -12
  87. package/src/popup/clarify.test.ts +132 -40
  88. package/src/popup/clarify.ts +154 -42
  89. package/src/popup/comment.test.ts +57 -0
  90. package/src/popup/comment.ts +15 -9
  91. package/src/record/replay.ts +115 -0
  92. package/src/record/session.test.ts +8 -1
  93. package/src/record/session.ts +1 -1
  94. package/src/screenshot/capture.test.ts +51 -23
  95. package/src/screenshot/capture.ts +101 -55
  96. package/src/styles/widget.css +347 -1
  97. package/src/styles.ts +2 -0
  98. package/src/types.ts +15 -0
  99. package/src/widget/controller.test.ts +476 -65
  100. package/src/widget/controller.ts +222 -40
  101. package/src/widget/dim-overlay.test.ts +27 -0
  102. package/src/widget/dim-overlay.ts +20 -0
  103. package/src/widget/payload.test.ts +26 -1
  104. package/src/widget/payload.ts +3 -1
  105. package/src/widget/pet.test.ts +2 -2
  106. package/src/widget/tab.test.ts +15 -0
  107. package/src/widget/tab.ts +11 -3
@@ -1,11 +1,11 @@
1
- "use strict";var yt=Object.create;var H=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var kt=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var St=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of wt(t))!vt.call(i,s)&&s!==e&&H(i,s,{get:()=>t[s],enumerable:!(r=xt(t,s))||r.enumerable});return i};var Et=(i,t,e)=>(e=i!=null?yt(kt(i)):{},St(t||!i||!i.__esModule?H(e,"default",{value:i,enumerable:!0}):e,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ct='*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{all:initial;font-family:Inter,-apple-system,BlinkMacSystemFont,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 #05966973}.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:16px;box-shadow:0 24px 64px #0000003d;overflow:hidden;animation:mtbSlideUp .28s cubic-bezier(.34,1.56,.64,1);font-family:Inter,-apple-system,BlinkMacSystemFont,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:10px;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 #10b98126}.mtb-textarea::placeholder{color:#00000057}.mtb-popup-error{margin-top:8px;color:#dc2626;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:32px;border:none;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0 12px;font-family:inherit;font-size:12.5px;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:332px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 24px 64px #0000003d;padding:24px 22px;text-align:center;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.mtb-success-icon{width:46px;height:46px;border-radius:50%;background:#05966917;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}.mtb-success-title{font-size:16px;font-weight:700;margin-bottom:5px;letter-spacing:-.01em;color:#191a1c}.mtb-success-msg{font-size:13px;color:#0000008c;margin-bottom:16px;line-height:1.6}.mtb-view-feedback-link{display:inline-flex;align-items:center;gap:5px;color:#047857;text-decoration:none;font-size:13px;font-weight:500;font-family:JetBrains Mono,monospace;background:none;border:none;cursor:pointer;transition:text-decoration .12s}.mtb-view-feedback-link:hover{text-decoration:underline}.mtb-close-link{margin-top:13px;background:none;border:none;cursor:pointer;font-size:12px;color:#0006;font-family:inherit;transition:color .12s}.mtb-close-link:hover{color:#000000b3}.mtb-email-capture{margin-bottom:14px;text-align:left}.mtb-email-prompt{font-size:12px;color:#0000008c;line-height:1.5;margin-bottom:8px}.mtb-email-row{display:flex;gap:6px}.mtb-email-input{flex:1;min-width:0;font-size:12.5px;font-family:inherit;padding:7px 10px;border:1px solid rgba(0,0,0,.14);border-radius:8px;outline:none}.mtb-email-input:focus{border-color:#059669}.mtb-email-input.mtb-email-invalid{border-color:#dc2626}.mtb-email-submit{font-size:12px;font-weight:600;font-family:inherit;color:#fff;background:#059669;border:none;border-radius:8px;padding:7px 12px;cursor:pointer;white-space:nowrap}.mtb-email-submit:disabled{opacity:.6;cursor:default}.mtb-email-error{font-size:11.5px;color:#dc2626;margin-top:6px}.mtb-email-saved{font-size:12px;color:#059669;line-height:1.5}.mtb-my-feedback{display:block;margin:8px auto 0;background:none;border:none;cursor:pointer;font-size:11.5px;font-family:inherit;color:#0006;text-decoration:underline;text-underline-offset:2px;transition:color .12s}.mtb-my-feedback:hover{color:#059669}.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:Inter,-apple-system,BlinkMacSystemFont,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:346px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 24px 64px #0000003d;display:flex;flex-direction:column;animation:mtbSlideUp .28s cubic-bezier(.34,1.56,.64,1);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;overflow:hidden}.mtb-clarify-header{padding:11px 13px 11px 14px;display:flex;align-items:center;gap:9px;border-bottom:1px solid rgba(0,0,0,.06)}.mtb-clarify-icon{width:24px;height:24px;border-radius:7px;background:linear-gradient(140deg,#10b981,#059669);box-shadow:0 1px 3px #05966966;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mtb-clarify-titles{flex:1;min-width:0}.mtb-clarify-title{font-size:12.5px;font-weight:650;line-height:1.2;color:#191a1c}.mtb-clarify-subtitle{font-size:10px;color:#0000006b}.mtb-clarify-close{background:none;border:none;cursor:pointer;padding:3px;color:#00000061;display:flex;transition:color .12s}.mtb-clarify-close:hover{color:#000000b3}.mtb-clarify-messages{flex:1;max-height:250px;overflow-y:auto;padding:13px 13px 5px;display:flex;flex-direction:column;gap:9px}.mtb-clarify-bubble{max-width:82%;padding:9px 12px;font-size:12.5px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.mtb-clarify-ai{align-self:flex-start;background:#fff;color:#191a1c;border:1px solid rgba(0,0,0,.09);border-radius:13px 13px 13px 4px}.mtb-clarify-user{align-self:flex-end;background:#059669;color:#fff;border:1px solid #059669;border-radius:13px 13px 4px}.mtb-clarify-thinking{display:flex;align-items:center;gap:4px;padding:11px 14px}.mtb-clarify-thinking .mtb-dot{width:6px;height:6px;background:#059669b3}.mtb-clarify-footer{padding:3px 13px 13px;display:flex;flex-direction:column}.mtb-clarify-input{width:100%;height:52px;padding:9px 11px;border:1px solid rgba(0,0,0,.12);border-radius:10px;font-family:inherit;font-size:13px;line-height:1.5;color:#191a1c;outline:none;background:#fafafa;resize:none;box-sizing:border-box;transition:border-color .12s,box-shadow .12s,background .12s}.mtb-clarify-input:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b98126;background:#fff}.mtb-clarify-input::placeholder{color:#00000057}.mtb-clarify-actions{display:flex;gap:8px;margin-top:9px}.mtb-clarify-skip{flex:0 0 auto;height:34px;padding:0 14px;border:1px solid rgba(0,0,0,.12);border-radius:10px;background:#fff;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:550;color:#0000008c;transition:background .12s}.mtb-clarify-skip:hover{background:#0000000a}.mtb-clarify-send{flex:1;height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:10px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;transition:background .12s}.mtb-clarify-send:not(:disabled):hover{background:#047857}.mtb-clarify-send:disabled{background:#00000026;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-title{color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-clarify-subtitle{color:#ffffff73}:host([data-mtb-theme="dark"]) .mtb-clarify-close{color:#ffffff73}:host([data-mtb-theme="dark"]) .mtb-clarify-close:hover{color:#ffffffbf}:host([data-mtb-theme="dark"]) .mtb-clarify-skip{background:#1f2327;border-color:#ffffff24;color:#ffffffb3}:host([data-mtb-theme="dark"]) .mtb-clarify-skip:hover{background:#ffffff0f}:host([data-mtb-theme="dark"]) .mtb-clarify-ai{background:#1f2327;border-color:#ffffff1f;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-title{color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-subtitle{color:#ffffff73}:host([data-mtb-theme="auto"]) .mtb-clarify-close{color:#ffffff73}:host([data-mtb-theme="auto"]) .mtb-clarify-close:hover{color:#ffffffbf}:host([data-mtb-theme="auto"]) .mtb-clarify-skip{background:#1f2327;border-color:#ffffff24;color:#ffffffb3}:host([data-mtb-theme="auto"]) .mtb-clarify-skip:hover{background:#ffffff0f}:host([data-mtb-theme="auto"]) .mtb-clarify-ai{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-input{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}}';class _t{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=Ct,this.root.appendChild(e)}el(t,e){const r=document.createElement(t);return e&&(r.className=e),r}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(){this.host.remove()}}class Mt{constructor(t,e,r,s,n){this.onClick=s,this.el=t.el("button","mtb-tab"),r==="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",s),t.append(this.el)}setActive(t){this.el.classList.toggle("active",t)}destroy(){this.el.removeEventListener("click",this.onClick),this.el.remove()}}const Tt=8e3;class Lt{constructor(t,e,r){this.el=t.el("div","mtb-frustration-prompt"),this.el.innerHTML=`
1
+ "use strict";var xt=Object.create;var z=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var kt=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var Ct=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of kt(t))!Et.call(i,s)&&s!==e&&z(i,s,{get:()=>t[s],enumerable:!(r=vt(t,s))||r.enumerable});return i};var _t=(i,t,e)=>(e=i!=null?xt(St(i)):{},Ct(t||!i||!i.__esModule?z(e,"default",{value:i,enumerable:!0}):e,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Tt='*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:host{all:initial;font-family:Inter,-apple-system,BlinkMacSystemFont,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 #05966973}.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}@media (max-width: 480px){.mtb-toolbar{max-width:calc(100vw - 16px);gap:6px}.mtb-toolbar-hint,.mtb-toolbar-sep{display:none}.mtb-toolbar-mode-btn,.mtb-exit-btn{padding-right:10px;padding-left:10px}}.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%,-100%);max-width:240px;overflow:hidden;text-overflow:ellipsis;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;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.mtb-highlight-tooltip.below{transform:translate(-50%)}.mtb-highlight-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:#064e3b}.mtb-highlight-tooltip.below:after{top:auto;bottom:100%;border-top-color:transparent;border-bottom-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;display:flex;flex-direction:column;width:320px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 24px 64px #0000003d;overflow:hidden;animation:mtbSlideUp .28s cubic-bezier(.34,1.56,.64,1);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}@keyframes mtbSlideUp{0%{transform:translateY(14px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.mtb-popup-header{flex-shrink:0;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{min-height:0;padding:13px;overflow-y:auto;overscroll-behavior:contain}.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:10px;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 #10b98126}.mtb-textarea::placeholder{color:#00000057}.mtb-popup-error{margin-top:8px;color:#dc2626;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:32px;border:none;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0 12px;font-family:inherit;font-size:12.5px;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:332px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 24px 64px #0000003d;padding:24px 22px;text-align:center;animation:mtbSlideUp .35s cubic-bezier(.34,1.56,.64,1);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.mtb-success-icon{width:46px;height:46px;border-radius:50%;background:#05966917;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}.mtb-success-title{font-size:16px;font-weight:700;margin-bottom:5px;letter-spacing:-.01em;color:#191a1c}.mtb-success-msg{font-size:13px;color:#0000008c;margin-bottom:16px;line-height:1.6}.mtb-view-feedback-link{display:inline-flex;align-items:center;gap:5px;color:#047857;text-decoration:none;font-size:13px;font-weight:500;font-family:JetBrains Mono,monospace;background:none;border:none;cursor:pointer;transition:text-decoration .12s}.mtb-view-feedback-link:hover{text-decoration:underline}.mtb-close-link{margin-top:13px;background:none;border:none;cursor:pointer;font-size:12px;color:#0006;font-family:inherit;transition:color .12s}.mtb-close-link:hover{color:#000000b3}.mtb-email-capture{margin-bottom:14px;text-align:left}.mtb-email-prompt{font-size:12px;color:#0000008c;line-height:1.5;margin-bottom:8px}.mtb-email-row{display:flex;gap:6px}.mtb-email-input{flex:1;min-width:0;font-size:12.5px;font-family:inherit;padding:7px 10px;border:1px solid rgba(0,0,0,.14);border-radius:8px;outline:none}.mtb-email-input:focus{border-color:#059669}.mtb-email-input.mtb-email-invalid{border-color:#dc2626}.mtb-email-submit{font-size:12px;font-weight:600;font-family:inherit;color:#fff;background:#059669;border:none;border-radius:8px;padding:7px 12px;cursor:pointer;white-space:nowrap}.mtb-email-submit:disabled{opacity:.6;cursor:default}.mtb-email-error{font-size:11.5px;color:#dc2626;margin-top:6px}.mtb-email-saved{font-size:12px;color:#059669;line-height:1.5}.mtb-my-feedback{display:block;margin:8px auto 0;background:none;border:none;cursor:pointer;font-size:11.5px;font-family:inherit;color:#0006;text-decoration:underline;text-underline-offset:2px;transition:color .12s}.mtb-my-feedback:hover{color:#059669}.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:Inter,-apple-system,BlinkMacSystemFont,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:346px;background:#fff;border:1px solid rgba(0,0,0,.1);border-radius:16px;box-shadow:0 24px 64px #0000003d;display:flex;flex-direction:column;animation:mtbSlideUp .28s cubic-bezier(.34,1.56,.64,1);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;overflow:hidden}.mtb-clarify-header{padding:11px 13px 11px 14px;display:flex;align-items:center;gap:9px;border-bottom:1px solid rgba(0,0,0,.06)}.mtb-clarify-icon{width:24px;height:24px;border-radius:7px;background:linear-gradient(140deg,#10b981,#059669);box-shadow:0 1px 3px #05966966;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mtb-clarify-titles{flex:1;min-width:0}.mtb-clarify-title{font-size:12.5px;font-weight:650;line-height:1.2;color:#191a1c}.mtb-clarify-subtitle{font-size:10px;color:#0000006b}.mtb-clarify-close{background:none;border:none;cursor:pointer;padding:3px;color:#00000061;display:flex;transition:color .12s}.mtb-clarify-close:hover{color:#000000b3}.mtb-clarify-messages{flex:1;max-height:250px;overflow-y:auto;padding:13px 13px 5px;display:flex;flex-direction:column;gap:9px}.mtb-clarify-bubble{max-width:82%;padding:9px 12px;font-size:12.5px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.mtb-clarify-ai{align-self:flex-start;background:#fff;color:#191a1c;border:1px solid rgba(0,0,0,.09);border-radius:13px 13px 13px 4px}.mtb-clarify-user{align-self:flex-end;background:#059669;color:#fff;border:1px solid #059669;border-radius:13px 13px 4px}.mtb-clarify-thinking{display:flex;align-items:center;gap:4px;padding:11px 14px}.mtb-clarify-thinking .mtb-dot{width:6px;height:6px;background:#059669b3}.mtb-clarify-footer{padding:3px 13px 13px;display:flex;flex-direction:column}.mtb-clarify-input{width:100%;height:52px;padding:9px 11px;border:1px solid rgba(0,0,0,.12);border-radius:10px;font-family:inherit;font-size:13px;line-height:1.5;color:#191a1c;outline:none;background:#fafafa;resize:none;box-sizing:border-box;transition:border-color .12s,box-shadow .12s,background .12s}.mtb-clarify-input:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b98126;background:#fff}.mtb-clarify-input::placeholder{color:#00000057}.mtb-clarify-actions{display:flex;gap:8px;margin-top:9px}.mtb-clarify-skip{flex:0 0 auto;height:34px;padding:0 14px;border:1px solid rgba(0,0,0,.12);border-radius:10px;background:#fff;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:550;color:#0000008c;white-space:nowrap;transition:background .12s}.mtb-clarify-skip:hover{background:#0000000a}.mtb-clarify-send{flex:1;height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:10px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;transition:background .12s}.mtb-clarify-send:not(:disabled):hover{background:#047857}.mtb-clarify-send:disabled{background:#00000026;cursor:not-allowed}.mtb-clarify-error{margin-bottom:8px;color:#dc2626;font-size:11.5px;line-height:1.4;text-align:center}: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-title{color:#f9fafb}:host([data-mtb-theme="dark"]) .mtb-clarify-subtitle{color:#ffffff73}:host([data-mtb-theme="dark"]) .mtb-clarify-close{color:#ffffff73}:host([data-mtb-theme="dark"]) .mtb-clarify-close:hover{color:#ffffffbf}:host([data-mtb-theme="dark"]) .mtb-clarify-skip{background:#1f2327;border-color:#ffffff24;color:#ffffffb3}:host([data-mtb-theme="dark"]) .mtb-clarify-skip:hover{background:#ffffff0f}:host([data-mtb-theme="dark"]) .mtb-clarify-ai{background:#1f2327;border-color:#ffffff1f;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-title{color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-subtitle{color:#ffffff73}:host([data-mtb-theme="auto"]) .mtb-clarify-close{color:#ffffff73}:host([data-mtb-theme="auto"]) .mtb-clarify-close:hover{color:#ffffffbf}:host([data-mtb-theme="auto"]) .mtb-clarify-skip{background:#1f2327;border-color:#ffffff24;color:#ffffffb3}:host([data-mtb-theme="auto"]) .mtb-clarify-skip:hover{background:#ffffff0f}:host([data-mtb-theme="auto"]) .mtb-clarify-ai{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}:host([data-mtb-theme="auto"]) .mtb-clarify-input{background:#1f2327;border-color:#ffffff1f;color:#f9fafb}}.mtb-dim-clickable{z-index:2147483643;pointer-events:auto;cursor:default;background:#0000001f}.mtb-draw-bar{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:2147483647;display:flex;align-items:center;gap:8px;height:46px;padding:0 8px 0 12px;border-radius:13px;background:#fff;border:1px solid rgba(0,0,0,.08);box-shadow:0 10px 30px #0f172a38;animation:mtbBarIn .2s ease;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.mtb-draw-input{width:220px;height:32px;padding:0 10px;border:1px solid rgba(0,0,0,.12);border-radius:8px;font-family:inherit;font-size:13px;color:#191a1c;outline:none;background:#fafafa;transition:border-color .12s,box-shadow .12s,background .12s}.mtb-draw-input:focus{border-color:#10b981;box-shadow:0 0 0 3px #10b98126;background:#fff}.mtb-draw-input::placeholder{color:#00000057}.mtb-draw-icon-btn{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:transparent;color:#374151;cursor:pointer;transition:background .12s,color .12s}.mtb-draw-icon-btn:hover:not(:disabled){background:#0000000f}.mtb-draw-icon-btn:disabled{color:#00000038;cursor:default}.mtb-draw-sep{width:1px;height:22px;background:#0000001a}.mtb-draw-cancel{height:32px;padding:0 12px;border:1px solid rgba(0,0,0,.12);border-radius:8px;background:#fff;color:#0000008c;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:550;transition:background .12s}.mtb-draw-cancel:hover{background:#0000000a}.mtb-draw-submit{height:32px;padding:0 14px;border:none;border-radius:8px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:12.5px;font-weight:600;transition:background .12s}.mtb-draw-submit:hover:not(:disabled){background:#047857}.mtb-draw-submit:disabled{opacity:.6;cursor:default}.mtb-draw-error{position:absolute;bottom:100%;left:12px;margin-bottom:6px;color:#dc2626;font-size:11.5px}.mtb-record-preview{margin-bottom:12px}.mtb-record-preview-stage{position:relative;width:100%;height:132px;border-radius:10px;overflow:hidden;background:#0f172a;display:flex;align-items:center;justify-content:center}.mtb-record-preview-stage.playing{align-items:flex-start;justify-content:flex-start}.mtb-record-preview-play{width:44px;height:44px;border-radius:50%;border:none;background:#ffffffeb;color:#059669;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .12s,background .12s}.mtb-record-preview-play:hover:not(:disabled){transform:scale(1.06);background:#fff}.mtb-record-preview-play:disabled{cursor:default;opacity:.6}.mtb-record-preview-badge{position:absolute;right:8px;bottom:8px;padding:2px 7px;border-radius:6px;background:#0009;color:#fff;font-size:11px;font-variant-numeric:tabular-nums;font-family:JetBrains Mono,SF Mono,monospace}.mtb-record-preview-fallback{color:#ffffffd9;font-size:12px}.mtb-record-preview-name{display:block;margin-top:5px;font-size:11px;color:#0000006b}.mtb-clarify-summary{align-self:stretch;border:1px solid rgba(5,150,105,.28);background:#0596690d;border-radius:12px;padding:11px 12px;display:flex;flex-direction:column;gap:9px}.mtb-summary-head{display:flex;align-items:center;gap:6px;color:#059669;font-size:12.5px;font-weight:650}.mtb-summary-section{display:flex;flex-direction:column;gap:3px}.mtb-summary-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#0006}.mtb-summary-quote{font-size:12.5px;color:#191a1c;line-height:1.45}.mtb-summary-qa{display:flex;flex-direction:column;gap:1px;font-size:12px;line-height:1.4}.mtb-summary-q{color:#00000080}.mtb-summary-a{color:#191a1c;font-weight:550}.mtb-summary-ctx{display:flex;justify-content:space-between;gap:10px;font-size:11.5px}.mtb-summary-ctx>span:first-child{color:#00000073}.mtb-summary-ctx>span:last-child{color:#191a1c;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:210px}.mtb-clarify-send-feedback{width:100%;height:36px;border:none;border-radius:10px;background:#059669;color:#fff;cursor:pointer;font-family:inherit;font-size:13px;font-weight:600;transition:background .12s}.mtb-clarify-send-feedback:hover{background:#047857}';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=Tt,this.root.appendChild(e)}el(t,e){const r=document.createElement(t);return e&&(r.className=e),r}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(){this.host.remove()}}class Lt{constructor(t,e,r,s,n){this.onClick=s,this.el=t.el("button","mtb-tab"),r==="left"&&this.el.classList.add("left"),this.idleLabel=n??e.tab,this.activeLabel=e.toolbar.exit,this.setLabel(this.idleLabel),this.el.addEventListener("click",s),t.append(this.el)}setLabel(t){this.el.textContent=t,this.el.setAttribute("aria-label",t)}setActive(t){this.el.classList.toggle("active",t),this.setLabel(t?this.activeLabel:this.idleLabel)}destroy(){this.el.removeEventListener("click",this.onClick),this.el.remove()}}const Pt=8e3;class At{constructor(t,e,r){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",r.onTell),this.el.querySelector(".mtb-frustration-dismiss").addEventListener("click",r.onDismiss),t.append(this.el),setTimeout(r.onDismiss,Tt)}destroy(){this.el.remove()}}class At{constructor(t,e,r,s){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"),s?.("markup")}),this.recordBtn.addEventListener("click",()=>{this.setMode("record"),s?.("record")}),this.el.querySelector(".mtb-exit-btn").addEventListener("click",r)}buildHTML(t){return`
8
+ `,this.el.querySelector(".mtb-frustration-tell").addEventListener("click",r.onTell),this.el.querySelector(".mtb-frustration-dismiss").addEventListener("click",r.onDismiss),t.append(this.el),setTimeout(r.onDismiss,Pt)}destroy(){this.el.remove()}}class Dt{constructor(t,e){this.onClick=e,this.el=t.el("div","mtb-dim mtb-dim-clickable"),this.el.addEventListener("click",this.onClick),t.append(this.el)}destroy(){this.el.removeEventListener("click",this.onClick),this.el.remove()}}class Rt{constructor(t,e,r,s){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"),s?.("markup")}),this.recordBtn.addEventListener("click",()=>{this.setMode("record"),s?.("record")}),this.el.querySelector(".mtb-exit-btn").addEventListener("click",r)}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,22 @@
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 Dt{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 Pt{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 Rt(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 r=i.textContent?.trim().slice(0,40);if(r)return r;const s=i.placeholder;if(s)return s;const n=i.alt;if(n)return n;const o=i.getAttribute("data-mark");if(o)return o}return i.tagName.toLowerCase()}function It(i){const t=[];let e=i;for(;e&&e!==document.body&&t.length<5;){let r=e.tagName.toLowerCase();if(e.id){r=`#${e.id}`,t.unshift(r);break}const s=Array.from(e.classList).filter(o=>!o.startsWith("mtb-")).slice(0,2).join(".");s&&(r+=`.${s}`);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;r+=`:nth-child(${a})`}}t.unshift(r),e=e.parentElement}return t.join(" > ")}class $t{constructor(t){this.pins=[],this.shadow=t}addPin(t,e,r){const s=this.shadow.el("div","mtb-pin");s.textContent=String(r),s.style.top=`${e}px`,s.style.left=`${t}px`,this.shadow.append(s),this.pins.push(s)}clearAll(){for(const t of this.pins)t.remove();this.pins=[]}destroy(){this.clearAll()}}const it="#059669",v={color:it,width:"3.5",linecap:"round",linejoin:"round",filter:"drop-shadow(0 1px 2px rgba(5,150,105,0.35))"};class Ht{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",v.color),this.path.setAttribute("stroke-width",v.width),this.path.setAttribute("stroke-linecap",v.linecap),this.path.setAttribute("stroke-linejoin",v.linejoin),this.path.setAttribute("style",`filter:${v.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(),r={type:"draw",x:t[0],y:t[1],drawPath:e};this.onDrawComplete(r)}buildPathD(){if(this.points.length===0)return"";const[t,e]=this.points[0];let r=`M ${t} ${e}`;for(let s=1;s<this.points.length;s++){const[n,o]=this.points[s];r+=` L ${n} ${o}`}return r}getCenter(){const t=this.points.map(n=>n[0]),e=this.points.map(n=>n[1]),r=(Math.min(...t)+Math.max(...t))/2,s=(Math.min(...e)+Math.max(...e))/2;return[r,s]}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 Ot=5;class O{constructor(t,e,r){this.messages=e,this.onReady=r,this.pinCount=0,this.interactionActive=!0,this.pendingHighlightFrame=null,this.lastMoveX=0,this.lastMoveY=0,this.highlighter=new Pt(t),this.pinMarker=new $t(t),this.drawLayer=new Ht(t,s=>{this.onReady(s,this.messages.annotation.drawing)}),this.overlay=new Dt(t,{onMouseDown:s=>this.handleMouseDown(s),onMouseMove:s=>this.handleMouseMove(s),onMouseUp:s=>this.handleMouseUp(s),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=F(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()>=Ot){this.drawLayer.endDraw();return}this.drawLayer.cancelCurrentDraw();const e=F(t.clientX,t.clientY),r=e?Rt(e):this.messages.annotation.element,s={type:"pin",x:t.clientX,y:t.clientY,targetSelector:e?It(e):void 0,targetText:e?.textContent?.trim().slice(0,200)??"",targetName:r};this.pinMarker.addPin(t.clientX,t.clientY,++this.pinCount),this.drawLayer.clearAll(),this.highlighter.hide(),this.onReady(s,r)}dismissInteraction(){this.interactionActive&&(this.interactionActive=!1,this.cancelPendingHighlight(),this.overlay.destroy(),this.highlighter.destroy())}destroy(){this.dismissInteraction(),this.pinMarker.destroy(),this.drawLayer.destroy()}}function F(i,t){return document.elementsFromPoint(i,t).find(e=>e.id!=="mtb-widget-host")??null}class Ft{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),e.onMyFeedback&&this.el.querySelector(".mtb-my-feedback").addEventListener("click",e.onMyFeedback),this.textarea.focus()}buildHTML(t){const e=t.messages,r=e.popup.quickOptions.map(s=>`
25
- <button class="mtb-quick-option" data-quick="${p(s.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 It{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 Ht{constructor(t){this.highlightEl=t.el("div","mtb-highlight"),this.tooltipEl=t.el("div","mtb-highlight-tooltip"),this.hide(),t.append(this.highlightEl,this.tooltipEl)}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",this.showTooltip(t,e)}showTooltip(t,e){this.tooltipEl.textContent=H(t);const r=e.top<30;this.tooltipEl.classList.toggle("below",r),this.tooltipEl.style.left=`${e.left+e.width/2}px`,this.tooltipEl.style.top=r?`${e.bottom+8}px`:`${e.top-8}px`,this.tooltipEl.style.display="block"}hide(){this.highlightEl.style.display="none",this.tooltipEl.style.display="none"}destroy(){this.highlightEl.remove(),this.tooltipEl.remove()}}function H(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 r=i.textContent?.trim().slice(0,40);if(r)return r;const s=i.placeholder;if(s)return s;const n=i.alt;if(n)return n;const o=i.getAttribute("data-mark");if(o)return o}return i.tagName.toLowerCase()}function nt(i){const t=[];let e=i;for(;e&&e!==document.body&&t.length<5;){let r=e.tagName.toLowerCase();if(e.id){r=`#${e.id}`,t.unshift(r);break}const s=Array.from(e.classList).filter(o=>!o.startsWith("mtb-")).slice(0,2).join(".");s&&(r+=`.${s}`);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;r+=`:nth-of-type(${a})`}}t.unshift(r),e=e.parentElement}return t.join(" > ")}class $t{constructor(t){this.pins=[],this.shadow=t}addPin(t,e,r){const s=this.shadow.el("div","mtb-pin");s.textContent=String(r),s.style.top=`${e}px`,s.style.left=`${t}px`,this.shadow.append(s),this.pins.push(s)}clearAll(){for(const t of this.pins)t.remove();this.pins=[]}destroy(){this.clearAll()}}const M="#059669",Bt='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',v={color:M,width:"3.5",linecap:"round",linejoin:"round",filter:"drop-shadow(0 1px 2px rgba(5,150,105,0.35))"};class Ft{constructor(t){this.currentPath=null,this.currentPoints=[],this.isDrawing=!1,this.committed=[],this.redoStack=[],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.currentPoints=[[t,e]],this.currentPath=this.createPath(),this.svg.appendChild(this.currentPath)}continueDraw(t,e){!this.isDrawing||!this.currentPath||(this.currentPoints.push([t,e]),this.currentPath.setAttribute("d",O(this.currentPoints)))}commitStroke(){return!this.isDrawing||!this.currentPath?!1:(this.isDrawing=!1,this.committed.push({path:this.currentPath,d:O(this.currentPoints),points:this.currentPoints}),this.redoStack=[],this.currentPath=null,this.currentPoints=[],!0)}cancelCurrentDraw(){this.currentPath?.remove(),this.currentPath=null,this.isDrawing=!1,this.currentPoints=[]}undo(){const t=this.committed.pop();return t?(t.path.remove(),this.redoStack.push({d:t.d,points:t.points}),!0):!1}redo(){const t=this.redoStack.pop();if(!t)return!1;const e=this.createPath();return e.setAttribute("d",t.d),this.svg.appendChild(e),this.committed.push({path:e,d:t.d,points:t.points}),!0}canUndo(){return this.committed.length>0}canRedo(){return this.redoStack.length>0}hasStrokes(){return this.committed.length>0}getAnnotation(){if(this.committed.length===0)return null;const t=this.committed.flatMap(s=>s.points),[e,r]=zt(t);return{type:"draw",x:e,y:r,drawPath:this.committed.map(s=>s.d).join(" ")}}clearAll(){for(;this.svg.firstChild;)this.svg.removeChild(this.svg.firstChild);this.currentPath=null,this.isDrawing=!1,this.currentPoints=[],this.committed=[],this.redoStack=[]}isCurrentlyDrawing(){return this.isDrawing}getCurrentPointCount(){return this.currentPoints.length}destroy(){this.svg.remove()}createPath(){const t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("fill","none"),t.setAttribute("stroke",v.color),t.setAttribute("stroke-width",v.width),t.setAttribute("stroke-linecap",v.linecap),t.setAttribute("stroke-linejoin",v.linejoin),t.setAttribute("style",`filter:${v.filter}`),t}}function O(i){if(i.length===0)return"";const[t,e]=i[0];let r=`M ${t} ${e}`;for(let s=1;s<i.length;s++){const[n,o]=i[s];r+=` L ${n} ${o}`}return r}function zt(i){const t=i.map(n=>n[0]),e=i.map(n=>n[1]),r=(Math.min(...t)+Math.max(...t))/2,s=(Math.min(...e)+Math.max(...e))/2;return[r,s]}const Ot=5;class Ut{constructor(t,e,r){this.messages=e,this.handlers=r,this.pinCount=0,this.interactionActive=!0,this.pendingHighlightFrame=null,this.lastMoveX=0,this.lastMoveY=0,this.highlighter=new Ht(t),this.pinMarker=new $t(t),this.drawLayer=new Ft(t),this.overlay=new It(t,{onMouseDown:s=>this.handleMouseDown(s),onMouseMove:s=>this.handleMouseMove(s),onMouseUp:s=>this.handleMouseUp(s),onMouseLeave:()=>{this.drawLayer.isCurrentlyDrawing()&&this.finishStroke(),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()||this.drawSessionActive())return;const t=U(this.lastMoveX,this.lastMoveY);t?this.highlighter.highlight(t):this.highlighter.hide()}cancelPendingHighlight(){this.pendingHighlightFrame!==null&&(cancelAnimationFrame(this.pendingHighlightFrame),this.pendingHighlightFrame=null)}handleMouseUp(t){this.drawLayer.isCurrentlyDrawing()&&this.finishStroke(t)}finishStroke(t){if(this.drawLayer.getCurrentPointCount()>=Ot){this.drawLayer.commitStroke(),this.highlighter.hide(),this.handlers.onDrawStroke();return}if(this.drawLayer.cancelCurrentDraw(),this.drawLayer.hasStrokes()||!t)return;const e=U(t.clientX,t.clientY),r=e?H(e):this.messages.annotation.element,s={type:"pin",x:t.clientX,y:t.clientY,targetSelector:e?nt(e):void 0,targetText:e?.textContent?.trim().slice(0,200)??"",targetName:r};this.pinMarker.addPin(t.clientX,t.clientY,++this.pinCount),this.highlighter.hide(),this.handlers.onPin(s,r)}undoDraw(){this.drawLayer.undo()}redoDraw(){this.drawLayer.redo()}canUndoDraw(){return this.drawLayer.canUndo()}canRedoDraw(){return this.drawLayer.canRedo()}hasDrawStrokes(){return this.drawLayer.hasStrokes()}drawSessionActive(){return this.drawLayer.hasStrokes()||this.drawLayer.canRedo()}getDrawAnnotation(){return this.drawLayer.getAnnotation()}clearDraw(){this.drawLayer.clearAll()}dismissInteraction(){this.interactionActive&&(this.interactionActive=!1,this.cancelPendingHighlight(),this.overlay.destroy(),this.highlighter.destroy())}destroy(){this.dismissInteraction(),this.pinMarker.destroy(),this.drawLayer.destroy()}}function U(i,t){return document.elementsFromPoint(i,t).find(e=>e.id!=="mtb-widget-host")??null}const jt="mtb-widget-host";function S(i){const t=document.getElementById(jt);return t?t===i||t.contains(i):!1}function d(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}class qt{constructor(t,e){this.loading=!1,this.onSubmit=e.onSubmit,this.submitLabel=e.messages.draw.submit,this.el=t.el("div","mtb-draw-bar"),this.el.innerHTML=this.buildHTML(e.messages),t.append(this.el),this.input=this.el.querySelector(".mtb-draw-input"),this.undoBtn=this.el.querySelector(".mtb-draw-undo"),this.redoBtn=this.el.querySelector(".mtb-draw-redo"),this.submitBtn=this.el.querySelector(".mtb-draw-submit"),this.errorEl=this.el.querySelector(".mtb-draw-error"),this.undoBtn.addEventListener("click",e.onUndo),this.redoBtn.addEventListener("click",e.onRedo),this.el.querySelector(".mtb-draw-cancel").addEventListener("click",e.onCancel),this.submitBtn.addEventListener("click",()=>this.submit()),this.input.addEventListener("keydown",r=>{r.isComposing||r.keyCode===229||r.key==="Enter"&&!r.shiftKey&&(r.preventDefault(),this.submit())}),this.input.focus()}buildHTML(t){return`
25
+ <input class="mtb-draw-input" type="text" placeholder="${d(t.draw.note_placeholder)}" />
26
+ <button class="mtb-draw-icon-btn mtb-draw-undo" type="button" title="${d(t.draw.undo)}" aria-label="${d(t.draw.undo)}" disabled>
27
+ <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 14L4 9l5-5"/><path d="M4 9h11a5 5 0 0 1 0 10h-1"/></svg>
28
+ </button>
29
+ <button class="mtb-draw-icon-btn mtb-draw-redo" type="button" title="${d(t.draw.redo)}" aria-label="${d(t.draw.redo)}" disabled>
30
+ <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 14l5-5-5-5"/><path d="M20 9H9a5 5 0 0 0 0 10h1"/></svg>
31
+ </button>
32
+ <span class="mtb-draw-sep"></span>
33
+ <button class="mtb-draw-cancel" type="button">${d(t.draw.cancel)}</button>
34
+ <button class="mtb-draw-submit" type="button">${d(t.draw.submit)}</button>
35
+ <div class="mtb-draw-error" role="alert" hidden></div>
36
+ `}setUndoRedo(t,e){this.undoBtn.disabled=!t||this.loading,this.redoBtn.disabled=!e||this.loading}setLoading(t){this.loading=t,this.input.disabled=t,this.submitBtn.disabled=t,this.undoBtn.disabled=t||this.undoBtn.disabled,this.redoBtn.disabled=t||this.redoBtn.disabled,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.errorEl.hidden=!0,this.errorEl.textContent=""):(this.submitBtn.classList.remove("loading"),this.submitBtn.textContent=this.submitLabel)}setError(t){this.errorEl.textContent=t,this.errorEl.hidden=!1}submit(){this.loading||this.onSubmit(this.input.value.trim())}destroy(){this.el.remove()}}class Nt{constructor(t,e){this.loading=!1,this.onSubmit=e.onSubmit,this.onClose=e.onClose,this.submitLabel=e.messages.popup.submit,this.messages=e.messages,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),e.onMyFeedback&&this.el.querySelector(".mtb-my-feedback").addEventListener("click",e.onMyFeedback),this.textarea.focus()}buildHTML(t){const e=t.messages,r=e.popup.quickOptions.map(s=>`
37
+ <button class="mtb-quick-option" data-quick="${d(s.label)}">
26
38
  <span class="mtb-quick-option-emoji">${s.emoji}</span>
27
- <span>${p(s.label)}</span>
39
+ <span>${d(s.label)}</span>
28
40
  </button>`).join("");return`
29
41
  <div class="mtb-popup-header">
30
42
  <div class="mtb-popup-icon">
@@ -32,7 +44,7 @@
32
44
  <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
45
  </svg>
34
46
  </div>
35
- <span class="mtb-popup-title">${e.popup.about} "${p(t.targetName)}"</span>
47
+ <span class="mtb-popup-title">${e.popup.about} "${d(t.targetName)}"</span>
36
48
  <button class="mtb-popup-close" aria-label="Close">
37
49
  <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
50
  <path d="M18 6L6 18M6 6l12 12"/>
@@ -44,16 +56,16 @@
44
56
  ${r}
45
57
  </div>
46
58
  <div class="mtb-textarea-wrap">
47
- <textarea class="mtb-textarea" placeholder="${p(e.popup.placeholder)}"></textarea>
59
+ <textarea class="mtb-textarea" placeholder="${d(e.popup.placeholder)}"></textarea>
48
60
  </div>
49
61
  <div class="mtb-popup-error" role="alert"></div>
50
62
  <div class="mtb-popup-actions">
51
- <button class="mtb-cancel-btn" type="button">${p(e.popup.cancel)}</button>
52
- <button class="mtb-submit-btn" type="button" disabled>${p(e.popup.submit)}</button>
63
+ <button class="mtb-cancel-btn" type="button">${d(e.popup.cancel)}</button>
64
+ <button class="mtb-submit-btn" type="button" disabled>${d(e.popup.submit)}</button>
53
65
  </div>
54
- ${t.onMyFeedback?`<button class="mtb-my-feedback" type="button">${p(e.popup.my_feedback)}</button>`:""}
66
+ ${t.onMyFeedback?`<button class="mtb-my-feedback" type="button">${d(e.popup.my_feedback)}</button>`:""}
55
67
  </div>
56
- `}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 r=e.dataset.quick??"";this.textarea.value=r,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 p(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}const jt=2e3,Bt=2e3,Ut=45e3,L=346,A=320;class zt{constructor(t,e){this.pollTimer=null,this.pollDeadline=0,this.doneTimer=null,this.streamingBubble=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.innerHTML=this.buildHTML(e.messages),this.positionCard(e.x,e.y),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()}positionCard(t,e){const r=window.innerWidth,s=window.innerHeight,n=12;if(t===void 0||e===void 0){this.el.style.left=`${Math.max(n,(r-L)/2)}px`,this.el.style.top=`${Math.max(n,(s-A)/2)}px`;return}let o=t+12,a=e+12;o+L>r-n&&(o=t-L-12),o<n&&(o=n),a+A>s-n&&(a=s-A-n),a<n&&(a=n),this.el.style.left=`${o}px`,this.el.style.top=`${a}px`}buildHTML(t){return`
68
+ `}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`,this.el.style.maxHeight=`${o-c-a}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 r=e.dataset.quick??"";this.textarea.value=r,this.updateSubmitState(),this.submit()})}),this.textarea.addEventListener("input",()=>this.updateSubmitState()),this.textarea.addEventListener("keydown",e=>{e.isComposing||e.keyCode===229||e.key==="Enter"&&!e.shiftKey&&(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()}}const Wt=2e3,Vt=45e3,P=346,A=320;class Yt{constructor(t,e){this.pollTimer=null,this.pollDeadline=0,this.streamingBubble=null,this.lastMessages=[],this.done=!1,this.sending=!1,this.finalizing=!1,this.destroyed=!1,this.submissionSessionId=e.submissionSessionId,this.submissionToken=e.submissionToken,this.apiClient=e.apiClient,this.onFinalize=e.onFinalize,this.i18n=e.messages,this.summaryCtx=e.summary,this.el=t.el("div","mtb-clarify"),this.el.innerHTML=this.buildHTML(e.messages),this.positionCard(e.x,e.y),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(),this.startConversation()}positionCard(t,e){const r=window.innerWidth,s=window.innerHeight,n=12;if(t===void 0||e===void 0){this.el.style.left=`${Math.max(n,(r-P)/2)}px`,this.el.style.top=`${Math.max(n,(s-A)/2)}px`;return}let o=t+12,a=e+12;o+P>r-n&&(o=t-P-12),o<n&&(o=n),a+A>s-n&&(a=s-A-n),a<n&&(a=n),this.el.style.left=`${o}px`,this.el.style.top=`${a}px`}buildHTML(t){return`
57
69
  <div class="mtb-clarify-header">
58
70
  <span class="mtb-clarify-icon">
59
71
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round">
@@ -61,10 +73,10 @@
61
73
  </svg>
62
74
  </span>
63
75
  <div class="mtb-clarify-titles">
64
- <div class="mtb-clarify-title">${b(t.clarify.title)}</div>
65
- <div class="mtb-clarify-subtitle">${b(t.clarify.subtitle)}</div>
76
+ <div class="mtb-clarify-title">${d(t.clarify.title)}</div>
77
+ <div class="mtb-clarify-subtitle">${d(t.clarify.subtitle)}</div>
66
78
  </div>
67
- <button class="mtb-clarify-close" type="button" title="${b(t.clarify.skip)}" aria-label="${b(t.clarify.skip)}">
79
+ <button class="mtb-clarify-close" type="button" title="${d(t.clarify.skip)}" aria-label="${d(t.clarify.skip)}">
68
80
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
69
81
  <path d="M18 6L6 18M6 6l12 12"/>
70
82
  </svg>
@@ -72,19 +84,32 @@
72
84
  </div>
73
85
  <div class="mtb-clarify-messages"></div>
74
86
  <div class="mtb-clarify-footer">
75
- <textarea class="mtb-clarify-input" rows="2" placeholder="${b(t.clarify.placeholder)}"></textarea>
87
+ <textarea class="mtb-clarify-input" rows="2" placeholder="${d(t.clarify.placeholder)}"></textarea>
76
88
  <div class="mtb-clarify-actions">
77
- <button class="mtb-clarify-skip" type="button">${b(t.clarify.skip)}</button>
89
+ <button class="mtb-clarify-skip" type="button">${d(t.clarify.skip)}</button>
78
90
  <button class="mtb-clarify-send" type="button" disabled>
79
91
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
80
92
  <line x1="22" y1="2" x2="11" y2="13"/>
81
93
  <polygon points="22 2 15 22 11 13 2 9 22 2"/>
82
94
  </svg>
83
- <span>${b(t.clarify.send)}</span>
95
+ <span>${d(t.clarify.send)}</span>
84
96
  </button>
85
97
  </div>
86
98
  </div>
87
- `}bindEvents(t){const e=()=>{this.stopPolling(),this.onDone()};this.el.querySelector(".mtb-clarify-skip").addEventListener("click",e),this.el.querySelector(".mtb-clarify-close").addEventListener("click",e),this.inputEl.addEventListener("input",()=>{this.sendBtn.disabled=!this.inputEl.value.trim()}),this.inputEl.addEventListener("keydown",r=>{r.isComposing||r.keyCode===229||r.key==="Enter"&&!r.shiftKey&&(r.preventDefault(),this.sendMessage(t))}),this.sendBtn.addEventListener("click",()=>this.sendMessage(t))}async startConversation(){this.showThinking(),await this.runTurn(void 0)}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{await this.runTurn(e)}finally{this.sending=!1,this.inputEl.disabled=!1,this.sendBtn.disabled=!this.inputEl.value.trim(),this.inputEl.focus()}}}async runTurn(t){try{const e=await this.apiClient.streamClarification(this.feedbackId,t,r=>this.appendStreamDelta(r));if(this.destroyed)return;this.endStreamingBubble(),this.renderConversation(e.messages,e.done),e.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.endStreamingBubble(),await this.runTurnViaPolling(t)}}async runTurnViaPolling(t){try{const e=await this.apiClient.startClarification(this.feedbackId,t);if(this.destroyed)return;this.renderConversation(e.messages,e.done),e.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.onDone()}}appendStreamDelta(t){this.streamingBubble||(this.removeThinking(),this.streamingBubble=document.createElement("div"),this.streamingBubble.className="mtb-clarify-bubble mtb-clarify-ai",this.messagesEl.appendChild(this.streamingBubble)),this.streamingBubble.textContent=(this.streamingBubble.textContent??"")+t,this.messagesEl.scrollTop=this.messagesEl.scrollHeight}endStreamingBubble(){this.streamingBubble=null}startPolling(){this.stopPolling(),this.pollDeadline=Date.now()+Ut,this.pollTimer=setInterval(()=>this.poll(),jt)}stopPolling(){this.pollTimer!==null&&(clearInterval(this.pollTimer),this.pollTimer=null)}async poll(){if(Date.now()>this.pollDeadline){this.stopPolling(),this.handleDone();return}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()},Bt)}renderConversation(t,e){this.renderMessages(t);const r=t[t.length-1];!e&&(!r||r.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(){if(this.messagesEl.querySelector(".mtb-clarify-thinking"))return;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}removeThinking(){this.messagesEl.querySelector(".mtb-clarify-thinking")?.remove()}destroy(){this.destroyed=!0,this.stopPolling(),this.doneTimer!==null&&(clearTimeout(this.doneTimer),this.doneTimer=null),this.el.remove()}}function b(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}const qt=5e3,Wt=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;class Nt{constructor(t,e,r,s,n){this.messages=e,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=s?`<button class="mtb-view-feedback-link">${e.success.view_feedback} <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg></button>`:"",c=n?.emailCapture?`
99
+ `}bindEvents(){const t=()=>{this.stopPolling(),this.finalize()};this.el.querySelector(".mtb-clarify-skip").addEventListener("click",t),this.el.querySelector(".mtb-clarify-close").addEventListener("click",t),this.inputEl.addEventListener("input",()=>{this.sendBtn.disabled=!this.inputEl.value.trim()}),this.inputEl.addEventListener("keydown",e=>{e.isComposing||e.keyCode===229||e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),this.sendMessage())}),this.sendBtn.addEventListener("click",()=>this.sendMessage())}async startConversation(){this.showThinking(),await this.runInitialTurn()}async sendMessage(){const t=this.inputEl.value.trim();if(!(!t||this.sending)){this.sending=!0,this.inputEl.disabled=!0,this.sendBtn.disabled=!0,this.stopPolling(),this.appendMessage({role:"user",content:t}),this.inputEl.value="",this.showThinking(),this.clearError();try{await this.runAnswerTurn(t)}catch{if(this.destroyed)return;this.renderConversation(this.lastMessages,!1),this.inputEl.value=t,this.showError()}finally{this.sending=!1,this.inputEl.disabled=!1,this.sendBtn.disabled=!this.inputEl.value.trim(),this.inputEl.focus()}}}async runInitialTurn(){try{const t=await this.apiClient.streamClarification(this.submissionSessionId,this.submissionToken,e=>this.appendStreamDelta(e));if(this.destroyed)return;this.endStreamingBubble(),this.renderConversation(t.messages,t.done),t.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.endStreamingBubble(),await this.runInitialTurnViaPolling()}}async runInitialTurnViaPolling(){try{const t=await this.apiClient.startClarification(this.submissionSessionId,this.submissionToken);if(this.destroyed)return;this.renderConversation(t.messages,t.done),t.done?this.handleDone():this.startPolling()}catch{if(this.destroyed)return;this.handleDone()}}async runAnswerTurn(t){const e=await this.apiClient.startClarification(this.submissionSessionId,this.submissionToken,t);this.destroyed||(this.renderConversation(e.messages,e.done),e.done?this.handleDone():this.startPolling())}showError(){const t=this.el.querySelector(".mtb-clarify-footer"),e=document.createElement("div");e.className="mtb-clarify-error",e.textContent=this.i18n.error.submit,t.prepend(e)}clearError(){this.el.querySelector(".mtb-clarify-error")?.remove()}appendStreamDelta(t){this.streamingBubble||(this.removeThinking(),this.streamingBubble=document.createElement("div"),this.streamingBubble.className="mtb-clarify-bubble mtb-clarify-ai",this.messagesEl.appendChild(this.streamingBubble)),this.streamingBubble.textContent=(this.streamingBubble.textContent??"")+t,this.messagesEl.scrollTop=this.messagesEl.scrollHeight}endStreamingBubble(){this.streamingBubble=null}startPolling(){this.stopPolling(),this.pollDeadline=Date.now()+Vt,this.pollTimer=setInterval(()=>this.poll(),Wt)}stopPolling(){this.pollTimer!==null&&(clearInterval(this.pollTimer),this.pollTimer=null)}async poll(){if(Date.now()>this.pollDeadline){this.stopPolling(),this.handleDone();return}try{const t=await this.apiClient.getClarification(this.submissionSessionId,this.submissionToken);if(this.destroyed)return;this.renderConversation(t.messages,t.done),t.done&&(this.stopPolling(),this.handleDone())}catch{if(this.destroyed)return;this.stopPolling(),this.handleDone()}}handleDone(){this.done||(this.done=!0,this.stopPolling(),this.removeThinking(),this.renderSummary())}renderSummary(){const t=this.i18n.clarify.summary,e=document.createElement("div");e.className="mtb-clarify-summary",e.innerHTML=this.buildSummaryHTML(t),this.messagesEl.appendChild(e),this.messagesEl.scrollTop=this.messagesEl.scrollHeight;const r=this.el.querySelector(".mtb-clarify-footer");r.innerHTML=`<button class="mtb-clarify-send-feedback" type="button">${d(t.send_feedback)}</button>`,r.querySelector(".mtb-clarify-send-feedback").addEventListener("click",()=>{this.destroyed||this.finalize()})}async finalize(){if(!(this.finalizing||this.destroyed)){this.finalizing=!0,this.el.querySelectorAll("button").forEach(t=>{t.disabled=!0});try{await this.onFinalize()}catch{if(this.destroyed)return;this.finalizing=!1,this.handleDone(),this.el.querySelectorAll("button").forEach(t=>{t.disabled=!1}),this.clearError(),this.showError()}}}buildSummaryHTML(t){const e=this.summaryCtx?.originalDescription?.trim(),r=e?`<div class="mtb-summary-section">
100
+ <div class="mtb-summary-label">${d(t.what_you_said)}</div>
101
+ <div class="mtb-summary-quote">${d(e)}</div>
102
+ </div>`:"",s=this.clarifiedPairs(),n=s.length?`<div class="mtb-summary-section">
103
+ <div class="mtb-summary-label">${d(t.clarified)}</div>
104
+ ${s.map(o=>`<div class="mtb-summary-qa"><span class="mtb-summary-q">${d(o.q)}</span><span class="mtb-summary-a">${d(o.a)}</span></div>`).join("")}
105
+ </div>`:"";return`
106
+ <div class="mtb-summary-head">
107
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
108
+ <span>${d(t.ready)}</span>
109
+ </div>
110
+ ${r}
111
+ ${n}
112
+ `}clarifiedPairs(){const t=[];for(let e=0;e<this.lastMessages.length-1;e++){const r=this.lastMessages[e],s=this.lastMessages[e+1];r.role!=="user"&&s.role==="user"&&t.push({q:r.content,a:s.content})}return t}renderConversation(t,e){this.lastMessages=t,this.renderMessages(t);const r=t[t.length-1];!e&&(!r||r.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(){if(this.messagesEl.querySelector(".mtb-clarify-thinking"))return;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}removeThinking(){this.messagesEl.querySelector(".mtb-clarify-thinking")?.remove()}destroy(){this.destroyed=!0,this.stopPolling(),this.el.remove()}}const Kt=5e3,Xt=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;class Gt{constructor(t,e,r,s,n){this.messages=e,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=s?`<button class="mtb-view-feedback-link">${e.success.view_feedback} <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg></button>`:"",c=n?.emailCapture?`
88
113
  <div class="mtb-email-capture">
89
114
  <div class="mtb-email-prompt">${e.success.email_prompt}</div>
90
115
  <div class="mtb-email-row">
@@ -94,7 +119,7 @@
94
119
  <div class="mtb-email-error" hidden>${e.success.email_error}</div>
95
120
  </div>`:"";this.el.innerHTML=`
96
121
  <div class="mtb-success-icon">
97
- <svg width="23" height="23" viewBox="0 0 24 24" fill="none" stroke="${it}" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round">
122
+ <svg width="23" height="23" viewBox="0 0 24 24" fill="none" stroke="${M}" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round">
98
123
  <polyline points="20 6 9 17 4 12"/>
99
124
  </svg>
100
125
  </div>
@@ -103,14 +128,14 @@
103
128
  ${c}
104
129
  ${l}
105
130
  <button class="mtb-close-link">${e.success.close}</button>
106
- `,t.append(this.el),this.el.querySelector(".mtb-close-link").addEventListener("click",r),s&&this.el.querySelector(".mtb-view-feedback-link").addEventListener("click",s),n?.emailCapture?this.bindEmailCapture(n.emailCapture.onSubmit):setTimeout(()=>r(),qt)}bindEmailCapture(t){const e=this.el.querySelector(".mtb-email-input"),r=this.el.querySelector(".mtb-email-submit"),s=this.el.querySelector(".mtb-email-error"),n=async()=>{const o=e.value.trim();if(!Wt.test(o)){e.classList.add("mtb-email-invalid");return}e.classList.remove("mtb-email-invalid"),s.hidden=!0,r.disabled=!0,await t(o)?this.el.querySelector(".mtb-email-capture").innerHTML=`<div class="mtb-email-saved">${this.messages.success.email_saved}</div>`:(s.hidden=!1,r.disabled=!1)};r.addEventListener("click",n),e.addEventListener("keydown",o=>{o.key==="Enter"&&n()})}destroy(){this.el.remove()}}function Vt(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(),r=e.createElement("base"),s=e.createElement("a");return e.head.appendChild(r),e.body.appendChild(s),t&&(r.href=t),s.href=i,s.href}const Yt=(()=>{let i=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(i+=1,`u${t()}${i}`)})();function f(i){const t=[];for(let e=0,r=i.length;e<r;e++)t.push(i[e]);return t}let y=null;function rt(i={}){return y||(i.includeStyleProperties?(y=i.includeStyleProperties,y):(y=f(window.getComputedStyle(document.documentElement)),y))}function _(i,t){const r=(i.ownerDocument.defaultView||window).getComputedStyle(i).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function Xt(i){const t=_(i,"border-left-width"),e=_(i,"border-right-width");return i.clientWidth+t+e}function Gt(i){const t=_(i,"border-top-width"),e=_(i,"border-bottom-width");return i.clientHeight+t+e}function st(i,t={}){const e=t.width||Xt(i),r=t.height||Gt(i);return{width:e,height:r}}function Kt(){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 u=16384;function Jt(i){(i.width>u||i.height>u)&&(i.width>u&&i.height>u?i.width>i.height?(i.height*=u/i.width,i.width=u):(i.width*=u/i.height,i.height=u):i.width>u?(i.height*=u/i.width,i.width=u):(i.width*=u/i.height,i.height=u))}function M(i){return new Promise((t,e)=>{const r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=e,r.crossOrigin="anonymous",r.decoding="async",r.src=i})}async function Qt(i){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(i)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function Zt(i,t,e){const r="http://www.w3.org/2000/svg",s=document.createElementNS(r,"svg"),n=document.createElementNS(r,"foreignObject");return s.setAttribute("width",`${t}`),s.setAttribute("height",`${e}`),s.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"),s.appendChild(n),n.appendChild(i),Qt(s)}const d=(i,t)=>{if(i instanceof t)return!0;const e=Object.getPrototypeOf(i);return e===null?!1:e.constructor.name===t.name||d(e,t)};function te(i){const t=i.getPropertyValue("content");return`${i.cssText} content: '${t.replace(/'|"/g,"")}';`}function ee(i,t){return rt(t).map(e=>{const r=i.getPropertyValue(e),s=i.getPropertyPriority(e);return`${e}: ${r}${s?" !important":""};`}).join(" ")}function ie(i,t,e,r){const s=`.${i}:${t}`,n=e.cssText?te(e):ee(e,r);return document.createTextNode(`${s}{${n}}`)}function j(i,t,e,r){const s=window.getComputedStyle(i,e),n=s.getPropertyValue("content");if(n===""||n==="none")return;const o=Yt();try{t.className=`${t.className} ${o}`}catch{return}const a=document.createElement("style");a.appendChild(ie(o,e,s,r)),t.appendChild(a)}function re(i,t,e){j(i,t,":before",e),j(i,t,":after",e)}const B="application/font-woff",U="image/jpeg",se={woff:B,woff2:B,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:U,jpeg:U,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function ne(i){const t=/\.([^./]*?)$/g.exec(i);return t?t[1]:""}function I(i){const t=ne(i).toLowerCase();return se[t]||""}function oe(i){return i.split(/,/)[1]}function P(i){return i.search(/^(data:)/)!==-1}function ae(i,t){return`data:${t};base64,${i}`}async function nt(i,t,e){const r=await fetch(i,t);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);const s=await r.blob();return new Promise((n,o)=>{const a=new FileReader;a.onerror=o,a.onloadend=()=>{try{n(e({res:r,result:a.result}))}catch(l){o(l)}},a.readAsDataURL(s)})}const D={};function le(i,t,e){let r=i.replace(/\?.*/,"");return e&&(r=i),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}async function $(i,t,e){const r=le(i,t,e.includeQueryParams);if(D[r]!=null)return D[r];e.cacheBust&&(i+=(/\?/.test(i)?"&":"?")+new Date().getTime());let s;try{const n=await nt(i,e.fetchRequestInit,({res:o,result:a})=>(t||(t=o.headers.get("Content-Type")||""),oe(a)));s=ae(n,t)}catch(n){s=e.imagePlaceholder||"";let o=`Failed to fetch resource: ${i}`;n&&(o=typeof n=="string"?n:n.message),o&&console.warn(o)}return D[r]=s,s}async function ce(i){const t=i.toDataURL();return t==="data:,"?i.cloneNode(!1):M(t)}async function de(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 M(a)}const e=i.poster,r=I(e),s=await $(e,r,t);return M(s)}async function he(i,t){var e;try{if(!((e=i?.contentDocument)===null||e===void 0)&&e.body)return await T(i.contentDocument.body,t,!0)}catch{}return i.cloneNode(!1)}async function ue(i,t){return d(i,HTMLCanvasElement)?ce(i):d(i,HTMLVideoElement)?de(i,t):d(i,HTMLIFrameElement)?he(i,t):i.cloneNode(ot(i))}const me=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SLOT",ot=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SVG";async function fe(i,t,e){var r,s;if(ot(t))return t;let n=[];return me(i)&&i.assignedNodes?n=f(i.assignedNodes()):d(i,HTMLIFrameElement)&&(!((r=i.contentDocument)===null||r===void 0)&&r.body)?n=f(i.contentDocument.body.childNodes):n=f(((s=i.shadowRoot)!==null&&s!==void 0?s:i).childNodes),n.length===0||d(i,HTMLVideoElement)||await n.reduce((o,a)=>o.then(()=>T(a,e)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function pe(i,t,e){const r=t.style;if(!r)return;const s=window.getComputedStyle(i);s.cssText?(r.cssText=s.cssText,r.transformOrigin=s.transformOrigin):rt(e).forEach(n=>{let o=s.getPropertyValue(n);n==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),d(i,HTMLIFrameElement)&&n==="display"&&o==="inline"&&(o="block"),n==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),r.setProperty(n,o,s.getPropertyPriority(n))})}function be(i,t){d(i,HTMLTextAreaElement)&&(t.innerHTML=i.value),d(i,HTMLInputElement)&&t.setAttribute("value",i.value)}function ge(i,t){if(d(i,HTMLSelectElement)){const e=t,r=Array.from(e.children).find(s=>i.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function ye(i,t,e){return d(t,Element)&&(pe(i,t,e),re(i,t,e),be(i,t),ge(i,t)),t}async function xe(i,t){const e=i.querySelectorAll?i.querySelectorAll("use"):[];if(e.length===0)return i;const r={};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&&!r[a]&&(r[a]=await T(c,t,!0))}}const s=Object.values(r);if(s.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<s.length;l++)a.appendChild(s[l]);i.appendChild(o)}return i}async function T(i,t,e){return!e&&t.filter&&!t.filter(i)?null:Promise.resolve(i).then(r=>ue(r,t)).then(r=>fe(i,r,t)).then(r=>ye(i,r,t)).then(r=>xe(r,t))}const at=/url\((['"]?)([^'"]+?)\1\)/g,we=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ke=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function ve(i){const t=i.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function Se(i){const t=[];return i.replace(at,(e,r,s)=>(t.push(s),e)),t.filter(e=>!P(e))}async function Ee(i,t,e,r,s){try{const n=e?Vt(t,e):t,o=I(t);let a;return s||(a=await $(n,o,r)),i.replace(ve(t),`$1${a}$3`)}catch{}return i}function Ce(i,{preferredFontFormat:t}){return t?i.replace(ke,e=>{for(;;){const[r,,s]=we.exec(e)||[];if(!s)return"";if(s===t)return`src: ${r};`}}):i}function lt(i){return i.search(at)!==-1}async function ct(i,t,e){if(!lt(i))return i;const r=Ce(i,e);return Se(r).reduce((n,o)=>n.then(a=>Ee(a,o,t,e)),Promise.resolve(r))}async function x(i,t,e){var r;const s=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(i);if(s){const n=await ct(s,null,e);return t.style.setProperty(i,n,t.style.getPropertyPriority(i)),!0}return!1}async function _e(i,t){await x("background",i,t)||await x("background-image",i,t),await x("mask",i,t)||await x("-webkit-mask",i,t)||await x("mask-image",i,t)||await x("-webkit-mask-image",i,t)}async function Me(i,t){const e=d(i,HTMLImageElement);if(!(e&&!P(i.src))&&!(d(i,SVGImageElement)&&!P(i.href.baseVal)))return;const r=e?i.src:i.href.baseVal,s=await $(r,I(r),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=s):i.href.baseVal=s})}async function Te(i,t){const r=f(i.childNodes).map(s=>dt(s,t));await Promise.all(r).then(()=>i)}async function dt(i,t){d(i,Element)&&(await _e(i,t),await Me(i,t),await Te(i,t))}function Le(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 r=t.style;return r!=null&&Object.keys(r).forEach(s=>{e[s]=r[s]}),i}const z={};async function q(i){let t=z[i];if(t!=null)return t;const r=await(await fetch(i)).text();return t={url:i,cssText:r},z[i]=t,t}async function W(i,t){let e=i.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,n=(e.match(/url\([^)]+\)/g)||[]).map(async o=>{let a=o.replace(r,"$1");return a.startsWith("https://")||(a=new URL(a,i.url).href),nt(a,t.fetchRequestInit,({result:l})=>(e=e.replace(o,`url(${l})`),[o,l]))});return Promise.all(n).then(()=>e)}function N(i){if(i==null)return[];const t=[],e=/(\/\*[\s\S]*?\*\/)/gi;let r=i.replace(e,"");const s=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=s.exec(r);if(l===null)break;t.push(l[0])}r=r.replace(s,"");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(r);if(l===null){if(l=a.exec(r),l===null)break;n.lastIndex=a.lastIndex}else a.lastIndex=n.lastIndex;t.push(l[0])}return t}async function Ae(i,t){const e=[],r=[];return i.forEach(s=>{if("cssRules"in s)try{f(s.cssRules||[]).forEach((n,o)=>{if(n.type===CSSRule.IMPORT_RULE){let a=o+1;const l=n.href,c=q(l).then(h=>W(h,t)).then(h=>N(h).forEach(m=>{try{s.insertRule(m,m.startsWith("@import")?a+=1:s.cssRules.length)}catch(k){console.error("Error inserting rule from remote css",{rule:m,error:k})}})).catch(h=>{console.error("Error loading remote css",h.toString())});r.push(c)}})}catch(n){const o=i.find(a=>a.href==null)||document.styleSheets[0];s.href!=null&&r.push(q(s.href).then(a=>W(a,t)).then(a=>N(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(r).then(()=>(i.forEach(s=>{if("cssRules"in s)try{f(s.cssRules||[]).forEach(n=>{e.push(n)})}catch(n){console.error(`Error while reading CSS rules from ${s.href}`,n)}}),e))}function De(i){return i.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>lt(t.style.getPropertyValue("src")))}async function Pe(i,t){if(i.ownerDocument==null)throw new Error("Provided element is not within a Document");const e=f(i.ownerDocument.styleSheets),r=await Ae(e,t);return De(r)}function ht(i){return i.trim().replace(/["']/g,"")}function Re(i){const t=new Set;function e(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(n=>{t.add(ht(n))}),Array.from(r.children).forEach(n=>{n instanceof HTMLElement&&e(n)})}return e(i),t}async function Ie(i,t){const e=await Pe(i,t),r=Re(i);return(await Promise.all(e.filter(n=>r.has(ht(n.style.fontFamily))).map(n=>{const o=n.parentStyleSheet?n.parentStyleSheet.href:null;return ct(n.cssText,o,t)}))).join(`
107
- `)}async function $e(i,t){const e=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await Ie(i,t);if(e){const r=document.createElement("style"),s=document.createTextNode(e);r.appendChild(s),i.firstChild?i.insertBefore(r,i.firstChild):i.appendChild(r)}}async function He(i,t={}){const{width:e,height:r}=st(i,t),s=await T(i,t,!0);return await $e(s,t),await dt(s,t),Le(s,t),await Zt(s,e,r)}async function Oe(i,t={}){const{width:e,height:r}=st(i,t),s=await He(i,t),n=await M(s),o=document.createElement("canvas"),a=o.getContext("2d"),l=t.pixelRatio||Kt(),c=t.canvasWidth||e,h=t.canvasHeight||r;return o.width=c*l,o.height=h*l,t.skipAutoScale||Jt(o),o.style.width=`${c}`,o.style.height=`${h}`,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 Fe(i,t={}){return(await Oe(i,t)).toDataURL("image/jpeg",t.quality||1)}async function je(i=[]){const t=Be(i);try{const e=await Fe(document.body,{quality:.85,pixelRatio:1,backgroundColor:"#ffffff",cacheBust:!0,skipAutoScale:!1,filter:r=>!(r instanceof HTMLElement&&r.id==="mtb-widget-host")});return qe(e)}catch{return null}finally{t?.remove()}}function Be(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,r]of i.entries())r.type==="pin"?t.appendChild(Ue(r,e+1)):r.type==="draw"&&r.drawPath&&t.appendChild(ze(r.drawPath));return document.body.appendChild(t),t}function Ue(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 ze(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 qe(i){const[t,e]=i.split(","),r=t.match(/:(.*?);/)?.[1]??"image/png",s=atob(e),n=new Uint8Array(s.length);for(let o=0;o<s.length;o++)n[o]=s.charCodeAt(o);return new Blob([n],{type:r})}class We{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,r,s,n)=>(this.emit({message:String(t),source:e,line:r,col:s,error:n}),this.originalOnError?this.originalOnError.call(window,t,e,r,s,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 ut=new We,Ne=20;class Ve{constructor(){this.errors=[],this.unsubscribe=null}start(){this.unsubscribe||(this.unsubscribe=ut.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>=Ne||this.errors.includes(t)||this.errors.push(t)}getErrors(){return[...this.errors]}stop(){this.unsubscribe?.(),this.unsubscribe=null}}const Ye=3,Xe=1e3,Ge=3,Ke=5e3,Je=500,Qe=500,Ze=300,ti=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA","LABEL","SUMMARY","DETAILS"]),ei=new Set(["button","link","checkbox","radio","tab","menuitem","option","switch","textbox","combobox","listbox","slider","spinbutton"]),V=["404","500","not found","page not found","server error","internal server error"],E=class E{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=ut.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,r=()=>this.handleNavigation();this.installedPushState=function(s,n,o){t(s,n,o),r()},this.installedReplaceState=function(s,n,o){e(s,n,o),r()},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 r=Date.now();this.clickHistory.push({target:e,time:r});const s=r-Xe;if(this.clickHistory=this.clickHistory.filter(o=>o.time>s),this.clickHistory.filter(o=>o.target===e).length>=Ye){this.clickHistory=[],this.emitHighPriority({signal:"rage_click",target:w(e),timestamp:r});return}this.isInteractive(e)||(this.deadClickCount++,this.deadClickCount>=3&&this.errorCount>0&&(this.deadClickCount=0,this.errorCount=0,this.emitIfReady({signal:"dead_click",target:w(e),timestamp:r}))),this.checkDeadClickDom(e,r)}handleNavigation(){const t=Date.now();this.navTimestamps.push(t);const e=t-Ke;this.navTimestamps=this.navTimestamps.filter(r=>r>e),this.navTimestamps.length>=Ge&&(this.navTimestamps=[],this.emitIfReady({signal:"rapid_navigation",timestamp:t})),setTimeout(()=>{this.active&&this.checkErrorPage()},Ze)}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:w(e),timestamp:Date.now()})},Je))}handleFormInvalid(t){const e=t.target;if(!e||this.isWidgetElement(e))return;const r=e.closest("form");this.emitIfReady({signal:"form_failure",target:w(r||e),timestamp:Date.now()})}checkErrorPage(){const t=location.href;if(this.errorPageUrls.has(t))return;const e=document.title.toLowerCase();if(V.some(s=>e.includes(s))){this.errorPageUrls.add(t),this.emitHighPriority({signal:"error_page",detail:document.title,timestamp:Date.now()});return}const r=document.querySelectorAll('h1, h2, [class*="error"], [class*="not-found"], [id*="error"], [id*="not-found"]');for(const s of r){const n=s.textContent??"";if(n.length<200&&V.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 r=this.lastMutationAt>=e;this.pendingDomChecks===0&&this.disconnectDomObserver(),!r&&this.active&&this.emitIfReady({signal:"dead_click_dom",target:w(t),timestamp:e})},Qe))}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 r of t.classList){const s=r.toLowerCase();if(s.includes("btn")||s.includes("button"))return!0}return!1}isInteractive(t){if(ti.has(t.tagName))return!0;const e=t.getAttribute("role");return!!(e&&ei.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+E.COOLDOWN_MS,this.onFrustration(t))}emitHighPriority(t){this.cooldownUntil=Date.now()+E.COOLDOWN_MS,this.onFrustration(t)}};E.COOLDOWN_MS=6e4;let R=E;function w(i){const t=i.tagName.toLowerCase(),e=i.id?`#${i.id}`:"",r=i.className&&typeof i.className=="string"?"."+i.className.trim().split(/\s+/).slice(0,2).join("."):"",s=i.textContent?.trim().slice(0,30)??"";return`<${t}${e}${r}>${s?` "${s}"`:""}`}function ii(){return{page_url:window.location.href,user_agent:navigator.userAgent,browser:ri(),os:si(),screen_width:window.screen.width,screen_height:window.screen.height}}function ri(){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 si(){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 ni="https://makethisbetter.dev/api/v1";class oi{constructor(t,e,r=1e3,s,n){this.projectKey=t,this.apiUrl=(e??ni).replace(/\/$/,""),this.retryDelayMs=r,this.userToken=s,this.userTokenFn=n}async resolveUserToken(){return this.userTokenFn?this.userTokenFn():this.userToken}async authHeaders(t){const e={"X-Project-Key":this.projectKey},r=await this.resolveUserToken();return r&&(e["X-User-Token"]=r),t&&(e["Content-Type"]=t),e}async submitFeedback(t,e){const r=new FormData;if(r.append("feedback[description]",t.description),r.append("feedback[page_url]",t.page_url),r.append("feedback[user_agent]",t.user_agent),r.append("feedback[browser]",t.browser),r.append("feedback[os]",t.os),r.append("feedback[screen_width]",String(t.screen_width)),r.append("feedback[screen_height]",String(t.screen_height)),r.append("feedback[console_errors]",JSON.stringify(t.console_errors)),r.append("feedback[annotations]",JSON.stringify(t.annotations)),t.target_element&&r.append("feedback[target_element]",JSON.stringify(t.target_element)),t.user_id&&r.append("feedback[user_id]",t.user_id),t.reporter_external_id&&r.append("feedback[reporter_external_id]",t.reporter_external_id),t.reporter_email&&r.append("feedback[reporter_email]",t.reporter_email),t.user_email&&r.append("feedback[user_email]",t.user_email),t.user_name&&r.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"});r.append("feedback[recording]",a,"recording.json"),r.append("feedback[recording_duration]",String(t.recording_duration??0))}if(e){const o=e.type==="image/jpeg"?"jpg":"png";r.append("feedback[screenshot]",e,`screenshot.${o}`)}const s=await this.authHeaders();return s["X-Idempotency-Key"]=li(),(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks`,{method:"POST",headers:s,body:r})).json()}async createIdentityToken(t){const e=await this.authHeaders("application/json");try{return await(await this.fetchWithRetry(`${this.apiUrl}/widget/identity_tokens`,{method:"POST",headers:e,body:JSON.stringify({reporter_external_id:t})})).json()}catch{return null}}async updateReporter(t,e,r){const s=await this.authHeaders("application/json");s["X-Identity-Token"]=r;try{return await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/reporter`,{method:"PATCH",headers:s,body:JSON.stringify({reporter:{email:e}})}),!0}catch{return!1}}async startClarification(t,e){const r={};e&&(r.message=e);const s=await this.authHeaders("application/json");return(await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/clarify`,{method:"POST",headers:s,body:JSON.stringify(r)})).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 streamClarification(t,e,r){const s={};e&&(s.message=e);const n=await this.authHeaders("application/json");n.Accept="text/event-stream";const o=await fetch(`${this.apiUrl}/widget/feedbacks/${t}/clarify`,{method:"POST",headers:n,body:JSON.stringify(s)}),a=o.headers.get("Content-Type")??"";if(!o.ok||!o.body||!a.includes("text/event-stream"))throw new Error("clarify stream unavailable");return ai(o.body,r)}async fetchWithRetry(t,e,r=1){let s;try{s=await fetch(t,e)}catch(n){if(r>0)return await Y(this.retryDelayMs),this.fetchWithRetry(t,e,r-1);throw n}if(s.ok)return s;if(s.status>=500&&r>0)return await Y(this.retryDelayMs),this.fetchWithRetry(t,e,r-1);throw new Error(`HTTP ${s.status}`)}}function Y(i){return i<=0?Promise.resolve():new Promise(t=>setTimeout(t,i))}async function ai(i,t){const e=i.getReader(),r=new TextDecoder;let s="",n={messages:[],done:!0};const o=a=>{const l=a.split(`
108
- `).find(k=>k.startsWith("event:")),c=a.split(`
109
- `).find(k=>k.startsWith("data:"));if(!c)return;const h=l?.slice(6).trim(),m=JSON.parse(c.slice(5).trim());h==="delta"&&typeof m.text=="string"?t(m.text):h==="done"&&(n={messages:Array.isArray(m.messages)?m.messages:[],done:m.done!==!1})};for(;;){const{done:a,value:l}=await e.read();if(a)break;s+=r.decode(l,{stream:!0});let c;for(;(c=s.indexOf(`
131
+ `,t.append(this.el),this.el.querySelector(".mtb-close-link").addEventListener("click",r),s&&this.el.querySelector(".mtb-view-feedback-link").addEventListener("click",s),n?.emailCapture?this.bindEmailCapture(n.emailCapture.onSubmit):setTimeout(()=>r(),Kt)}bindEmailCapture(t){const e=this.el.querySelector(".mtb-email-input"),r=this.el.querySelector(".mtb-email-submit"),s=this.el.querySelector(".mtb-email-error"),n=async()=>{const o=e.value.trim();if(!Xt.test(o)){e.classList.add("mtb-email-invalid");return}e.classList.remove("mtb-email-invalid"),s.hidden=!0,r.disabled=!0,await t(o)?this.el.querySelector(".mtb-email-capture").innerHTML=`<div class="mtb-email-saved">${this.messages.success.email_saved}</div>`:(s.hidden=!1,r.disabled=!1)};r.addEventListener("click",n),e.addEventListener("keydown",o=>{o.key==="Enter"&&n()})}destroy(){this.el.remove()}}function Jt(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(),r=e.createElement("base"),s=e.createElement("a");return e.head.appendChild(r),e.body.appendChild(s),t&&(r.href=t),s.href=i,s.href}const Qt=(()=>{let i=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(i+=1,`u${t()}${i}`)})();function f(i){const t=[];for(let e=0,r=i.length;e<r;e++)t.push(i[e]);return t}let g=null;function ot(i={}){return g||(i.includeStyleProperties?(g=i.includeStyleProperties,g):(g=f(window.getComputedStyle(document.documentElement)),g))}function _(i,t){const r=(i.ownerDocument.defaultView||window).getComputedStyle(i).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function Zt(i){const t=_(i,"border-left-width"),e=_(i,"border-right-width");return i.clientWidth+t+e}function te(i){const t=_(i,"border-top-width"),e=_(i,"border-bottom-width");return i.clientHeight+t+e}function at(i,t={}){const e=t.width||Zt(i),r=t.height||te(i);return{width:e,height:r}}function ee(){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 m=16384;function ie(i){(i.width>m||i.height>m)&&(i.width>m&&i.height>m?i.width>i.height?(i.height*=m/i.width,i.width=m):(i.width*=m/i.height,i.height=m):i.width>m?(i.height*=m/i.width,i.width=m):(i.width*=m/i.height,i.height=m))}function T(i){return new Promise((t,e)=>{const r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=e,r.crossOrigin="anonymous",r.decoding="async",r.src=i})}async function re(i){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(i)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function se(i,t,e){const r="http://www.w3.org/2000/svg",s=document.createElementNS(r,"svg"),n=document.createElementNS(r,"foreignObject");return s.setAttribute("width",`${t}`),s.setAttribute("height",`${e}`),s.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"),s.appendChild(n),n.appendChild(i),re(s)}const u=(i,t)=>{if(i instanceof t)return!0;const e=Object.getPrototypeOf(i);return e===null?!1:e.constructor.name===t.name||u(e,t)};function ne(i){const t=i.getPropertyValue("content");return`${i.cssText} content: '${t.replace(/'|"/g,"")}';`}function oe(i,t){return ot(t).map(e=>{const r=i.getPropertyValue(e),s=i.getPropertyPriority(e);return`${e}: ${r}${s?" !important":""};`}).join(" ")}function ae(i,t,e,r){const s=`.${i}:${t}`,n=e.cssText?ne(e):oe(e,r);return document.createTextNode(`${s}{${n}}`)}function j(i,t,e,r){const s=window.getComputedStyle(i,e),n=s.getPropertyValue("content");if(n===""||n==="none")return;const o=Qt();try{t.className=`${t.className} ${o}`}catch{return}const a=document.createElement("style");a.appendChild(ae(o,e,s,r)),t.appendChild(a)}function le(i,t,e){j(i,t,":before",e),j(i,t,":after",e)}const q="application/font-woff",N="image/jpeg",ce={woff:q,woff2:q,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:N,jpeg:N,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function de(i){const t=/\.([^./]*?)$/g.exec(i);return t?t[1]:""}function $(i){const t=de(i).toLowerCase();return ce[t]||""}function he(i){return i.split(/,/)[1]}function R(i){return i.search(/^(data:)/)!==-1}function ue(i,t){return`data:${t};base64,${i}`}async function lt(i,t,e){const r=await fetch(i,t);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);const s=await r.blob();return new Promise((n,o)=>{const a=new FileReader;a.onerror=o,a.onloadend=()=>{try{n(e({res:r,result:a.result}))}catch(l){o(l)}},a.readAsDataURL(s)})}const D={};function me(i,t,e){let r=i.replace(/\?.*/,"");return e&&(r=i),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}async function B(i,t,e){const r=me(i,t,e.includeQueryParams);if(D[r]!=null)return D[r];e.cacheBust&&(i+=(/\?/.test(i)?"&":"?")+new Date().getTime());let s;try{const n=await lt(i,e.fetchRequestInit,({res:o,result:a})=>(t||(t=o.headers.get("Content-Type")||""),he(a)));s=ue(n,t)}catch(n){s=e.imagePlaceholder||"";let o=`Failed to fetch resource: ${i}`;n&&(o=typeof n=="string"?n:n.message),o&&console.warn(o)}return D[r]=s,s}async function pe(i){const t=i.toDataURL();return t==="data:,"?i.cloneNode(!1):T(t)}async function fe(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 T(a)}const e=i.poster,r=$(e),s=await B(e,r,t);return T(s)}async function be(i,t){var e;try{if(!((e=i?.contentDocument)===null||e===void 0)&&e.body)return await L(i.contentDocument.body,t,!0)}catch{}return i.cloneNode(!1)}async function ge(i,t){return u(i,HTMLCanvasElement)?pe(i):u(i,HTMLVideoElement)?fe(i,t):u(i,HTMLIFrameElement)?be(i,t):i.cloneNode(ct(i))}const ye=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SLOT",ct=i=>i.tagName!=null&&i.tagName.toUpperCase()==="SVG";async function we(i,t,e){var r,s;if(ct(t))return t;let n=[];return ye(i)&&i.assignedNodes?n=f(i.assignedNodes()):u(i,HTMLIFrameElement)&&(!((r=i.contentDocument)===null||r===void 0)&&r.body)?n=f(i.contentDocument.body.childNodes):n=f(((s=i.shadowRoot)!==null&&s!==void 0?s:i).childNodes),n.length===0||u(i,HTMLVideoElement)||await n.reduce((o,a)=>o.then(()=>L(a,e)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function xe(i,t,e){const r=t.style;if(!r)return;const s=window.getComputedStyle(i);s.cssText?(r.cssText=s.cssText,r.transformOrigin=s.transformOrigin):ot(e).forEach(n=>{let o=s.getPropertyValue(n);n==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),u(i,HTMLIFrameElement)&&n==="display"&&o==="inline"&&(o="block"),n==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),r.setProperty(n,o,s.getPropertyPriority(n))})}function ve(i,t){u(i,HTMLTextAreaElement)&&(t.innerHTML=i.value),u(i,HTMLInputElement)&&t.setAttribute("value",i.value)}function ke(i,t){if(u(i,HTMLSelectElement)){const e=t,r=Array.from(e.children).find(s=>i.value===s.getAttribute("value"));r&&r.setAttribute("selected","")}}function Se(i,t,e){return u(t,Element)&&(xe(i,t,e),le(i,t,e),ve(i,t),ke(i,t)),t}async function Ee(i,t){const e=i.querySelectorAll?i.querySelectorAll("use"):[];if(e.length===0)return i;const r={};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&&!r[a]&&(r[a]=await L(c,t,!0))}}const s=Object.values(r);if(s.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<s.length;l++)a.appendChild(s[l]);i.appendChild(o)}return i}async function L(i,t,e){return!e&&t.filter&&!t.filter(i)?null:Promise.resolve(i).then(r=>ge(r,t)).then(r=>we(i,r,t)).then(r=>Se(i,r,t)).then(r=>Ee(r,t))}const dt=/url\((['"]?)([^'"]+?)\1\)/g,Ce=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,_e=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function Te(i){const t=i.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function Me(i){const t=[];return i.replace(dt,(e,r,s)=>(t.push(s),e)),t.filter(e=>!R(e))}async function Le(i,t,e,r,s){try{const n=e?Jt(t,e):t,o=$(t);let a;return s||(a=await B(n,o,r)),i.replace(Te(t),`$1${a}$3`)}catch{}return i}function Pe(i,{preferredFontFormat:t}){return t?i.replace(_e,e=>{for(;;){const[r,,s]=Ce.exec(e)||[];if(!s)return"";if(s===t)return`src: ${r};`}}):i}function ht(i){return i.search(dt)!==-1}async function ut(i,t,e){if(!ht(i))return i;const r=Pe(i,e);return Me(r).reduce((n,o)=>n.then(a=>Le(a,o,t,e)),Promise.resolve(r))}async function y(i,t,e){var r;const s=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(i);if(s){const n=await ut(s,null,e);return t.style.setProperty(i,n,t.style.getPropertyPriority(i)),!0}return!1}async function Ae(i,t){await y("background",i,t)||await y("background-image",i,t),await y("mask",i,t)||await y("-webkit-mask",i,t)||await y("mask-image",i,t)||await y("-webkit-mask-image",i,t)}async function De(i,t){const e=u(i,HTMLImageElement);if(!(e&&!R(i.src))&&!(u(i,SVGImageElement)&&!R(i.href.baseVal)))return;const r=e?i.src:i.href.baseVal,s=await B(r,$(r),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=s):i.href.baseVal=s})}async function Re(i,t){const r=f(i.childNodes).map(s=>mt(s,t));await Promise.all(r).then(()=>i)}async function mt(i,t){u(i,Element)&&(await Ae(i,t),await De(i,t),await Re(i,t))}function Ie(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 r=t.style;return r!=null&&Object.keys(r).forEach(s=>{e[s]=r[s]}),i}const W={};async function V(i){let t=W[i];if(t!=null)return t;const r=await(await fetch(i)).text();return t={url:i,cssText:r},W[i]=t,t}async function Y(i,t){let e=i.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,n=(e.match(/url\([^)]+\)/g)||[]).map(async o=>{let a=o.replace(r,"$1");return a.startsWith("https://")||(a=new URL(a,i.url).href),lt(a,t.fetchRequestInit,({result:l})=>(e=e.replace(o,`url(${l})`),[o,l]))});return Promise.all(n).then(()=>e)}function K(i){if(i==null)return[];const t=[],e=/(\/\*[\s\S]*?\*\/)/gi;let r=i.replace(e,"");const s=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=s.exec(r);if(l===null)break;t.push(l[0])}r=r.replace(s,"");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(r);if(l===null){if(l=a.exec(r),l===null)break;n.lastIndex=a.lastIndex}else a.lastIndex=n.lastIndex;t.push(l[0])}return t}async function He(i,t){const e=[],r=[];return i.forEach(s=>{if("cssRules"in s)try{f(s.cssRules||[]).forEach((n,o)=>{if(n.type===CSSRule.IMPORT_RULE){let a=o+1;const l=n.href,c=V(l).then(h=>Y(h,t)).then(h=>K(h).forEach(p=>{try{s.insertRule(p,p.startsWith("@import")?a+=1:s.cssRules.length)}catch(x){console.error("Error inserting rule from remote css",{rule:p,error:x})}})).catch(h=>{console.error("Error loading remote css",h.toString())});r.push(c)}})}catch(n){const o=i.find(a=>a.href==null)||document.styleSheets[0];s.href!=null&&r.push(V(s.href).then(a=>Y(a,t)).then(a=>K(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(r).then(()=>(i.forEach(s=>{if("cssRules"in s)try{f(s.cssRules||[]).forEach(n=>{e.push(n)})}catch(n){console.error(`Error while reading CSS rules from ${s.href}`,n)}}),e))}function $e(i){return i.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>ht(t.style.getPropertyValue("src")))}async function Be(i,t){if(i.ownerDocument==null)throw new Error("Provided element is not within a Document");const e=f(i.ownerDocument.styleSheets),r=await He(e,t);return $e(r)}function pt(i){return i.trim().replace(/["']/g,"")}function Fe(i){const t=new Set;function e(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(n=>{t.add(pt(n))}),Array.from(r.children).forEach(n=>{n instanceof HTMLElement&&e(n)})}return e(i),t}async function ze(i,t){const e=await Be(i,t),r=Fe(i);return(await Promise.all(e.filter(n=>r.has(pt(n.style.fontFamily))).map(n=>{const o=n.parentStyleSheet?n.parentStyleSheet.href:null;return ut(n.cssText,o,t)}))).join(`
132
+ `)}async function Oe(i,t){const e=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await ze(i,t);if(e){const r=document.createElement("style"),s=document.createTextNode(e);r.appendChild(s),i.firstChild?i.insertBefore(r,i.firstChild):i.appendChild(r)}}async function Ue(i,t={}){const{width:e,height:r}=at(i,t),s=await L(i,t,!0);return await Oe(s,t),await mt(s,t),Ie(s,t),await se(s,e,r)}async function je(i,t={}){const{width:e,height:r}=at(i,t),s=await Ue(i,t),n=await T(s),o=document.createElement("canvas"),a=o.getContext("2d"),l=t.pixelRatio||ee(),c=t.canvasWidth||e,h=t.canvasHeight||r;return o.width=c*l,o.height=h*l,t.skipAutoScale||ie(o),o.style.width=`${c}`,o.style.height=`${h}`,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 qe(i,t={}){return(await je(i,t)).toDataURL("image/jpeg",t.quality||1)}async function Ne(i=[]){try{const t=await qe(document.body,{quality:.85,pixelRatio:1,backgroundColor:"#ffffff",skipFonts:!0,skipAutoScale:!1,filter:e=>!(e instanceof HTMLElement&&e.id==="mtb-widget-host")});if(i.length>0){const e=await We(t,i);if(e)return e}return Je(t)}catch{return null}}async function We(i,t){const e=document.createElement("canvas"),r=e.getContext("2d");if(!r)return null;const s=await Xe(i);if(!s)return null;e.width=s.naturalWidth||window.innerWidth,e.height=s.naturalHeight||window.innerHeight,r.drawImage(s,0,0);const n=e.width/window.innerWidth,o=e.height/window.innerHeight;let a=0;for(const l of t)l.type==="draw"&&l.drawPath?Ve(r,l.drawPath,n,o):l.type==="pin"&&Ye(r,l.x*n,l.y*o,++a);return Ge(e)}function Ve(i,t,e,r){i.save(),i.strokeStyle=M,i.lineWidth=3.5,i.lineCap="round",i.lineJoin="round",i.shadowColor="rgba(5,150,105,0.35)",i.shadowOffsetY=1,i.shadowBlur=2;for(const s of Ke(t))if(s.length!==0){i.beginPath(),i.moveTo(s[0][0]*e,s[0][1]*r);for(let n=1;n<s.length;n++)i.lineTo(s[n][0]*e,s[n][1]*r);i.stroke()}i.restore()}function Ye(i,t,e,r){i.save(),i.shadowColor="rgba(5,150,105,0.45)",i.shadowOffsetY=2,i.shadowBlur=8,i.fillStyle=M,i.beginPath(),i.arc(t,e,11,0,Math.PI*2),i.fill(),i.shadowColor="transparent",i.lineWidth=2,i.strokeStyle="#ffffff",i.stroke(),i.fillStyle="#ffffff",i.font=`700 10px ${Bt}`,i.textAlign="center",i.textBaseline="middle",i.fillText(String(r),t,e),i.restore()}function Ke(i){const t=[];let e=null;const r=i.match(/[ML]\s*[-\d.]+\s+[-\d.]+/g)??[];for(const s of r){const[n,o]=s.slice(1).trim().split(/\s+/).map(Number);Number.isNaN(n)||Number.isNaN(o)||(s[0]==="M"?(e=[[n,o]],t.push(e)):e&&e.push([n,o]))}return t}function Xe(i){return new Promise(t=>{const e=new Image;e.onload=()=>t(e),e.onerror=()=>t(null),e.src=i})}function Ge(i){return new Promise(t=>{try{i.toBlob(e=>t(e),"image/jpeg",.85)}catch{t(null)}})}function Je(i){const[t,e]=i.split(","),r=t.match(/:(.*?);/)?.[1]??"image/png",s=atob(e),n=new Uint8Array(s.length);for(let o=0;o<s.length;o++)n[o]=s.charCodeAt(o);return new Blob([n],{type:r})}class Qe{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,r,s,n)=>(this.emit({message:String(t),source:e,line:r,col:s,error:n}),this.originalOnError?this.originalOnError.call(window,t,e,r,s,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 F=new Qe,Ze=20;class ti{constructor(){this.errors=[],this.unsubscribe=null}start(){this.unsubscribe||(this.unsubscribe=F.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>=Ze||this.errors.includes(t)||this.errors.push(t)}getErrors(){return[...this.errors]}stop(){this.unsubscribe?.(),this.unsubscribe=null}}const ei=20;class ii{constructor(){this.breadcrumbs=[],this.active=!1,this.unsubscribeErrors=null,this.boundPopstateHandler=null,this.originalPushState=null,this.originalReplaceState=null,this.installedPushState=null,this.installedReplaceState=null,this.lastUrl="",this.boundClickHandler=t=>this.handleClick(t),this.boundChangeHandler=t=>this.handleChange(t)}start(){this.active||(this.active=!0,this.lastUrl=location.href,document.addEventListener("click",this.boundClickHandler,{capture:!0,passive:!0}),document.addEventListener("change",this.boundChangeHandler,{capture:!0,passive:!0}),this.unsubscribeErrors=F.subscribe(t=>this.recordError(t)),this.startNavigationTracking())}stop(){this.active&&(this.active=!1,document.removeEventListener("click",this.boundClickHandler,!0),document.removeEventListener("change",this.boundChangeHandler,!0),this.unsubscribeErrors?.(),this.unsubscribeErrors=null,this.stopNavigationTracking())}getBreadcrumbs(){return[...this.breadcrumbs]}add(t){this.breadcrumbs.push(t),this.breadcrumbs.length>ei&&this.breadcrumbs.shift()}handleClick(t){const e=t.target;if(e&&!S(e))try{this.add({type:"ui",category:"ui.click",timestamp:Date.now(),message:H(e),data:{selector:nt(e)}})}catch{}}handleChange(t){const e=t.target;if(e&&!S(e))try{const r=e,s=r.name||r.placeholder||e.getAttribute("aria-label")||e.tagName;this.add({type:"ui",category:"ui.input",timestamp:Date.now(),message:s,data:{field:s}})}catch{}}recordError(t){this.add({type:"console",category:"console.error",timestamp:Date.now(),message:t.message,data:{message:t.message}})}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,r=()=>this.handleNavigation();this.installedPushState=function(s,n,o){t(s,n,o),r()},this.installedReplaceState=function(s,n,o){e(s,n,o),r()},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}handleNavigation(){if(!this.active)return;const t=this.lastUrl,e=location.href;t!==e&&(this.lastUrl=e,this.add({type:"navigation",category:"navigation",timestamp:Date.now(),message:`${t} → ${e}`,data:{from:t,to:e}}))}}const ri=3,si=1e3,ni=3,oi=5e3,ai=500,li=500,ci=300,di=new Set(["A","BUTTON","INPUT","SELECT","TEXTAREA","LABEL","SUMMARY","DETAILS"]),hi=new Set(["button","link","checkbox","radio","tab","menuitem","option","switch","textbox","combobox","listbox","slider","spinbutton"]),X=["404","500","not found","page not found","server error","internal server error"],E=class E{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=F.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,r=()=>this.handleNavigation();this.installedPushState=function(s,n,o){t(s,n,o),r()},this.installedReplaceState=function(s,n,o){e(s,n,o),r()},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||S(e))return;const r=Date.now();this.clickHistory.push({target:e,time:r});const s=r-si;if(this.clickHistory=this.clickHistory.filter(o=>o.time>s),this.clickHistory.filter(o=>o.target===e).length>=ri){this.clickHistory=[],this.emitHighPriority({signal:"rage_click",target:w(e),timestamp:r});return}this.isInteractive(e)||(this.deadClickCount++,this.deadClickCount>=3&&this.errorCount>0&&(this.deadClickCount=0,this.errorCount=0,this.emitIfReady({signal:"dead_click",target:w(e),timestamp:r}))),this.checkDeadClickDom(e,r)}handleNavigation(){const t=Date.now();this.navTimestamps.push(t);const e=t-oi;this.navTimestamps=this.navTimestamps.filter(r=>r>e),this.navTimestamps.length>=ni&&(this.navTimestamps=[],this.emitIfReady({signal:"rapid_navigation",timestamp:t})),setTimeout(()=>{this.active&&this.checkErrorPage()},ci)}handleFormSubmit(t){const e=t.target;e instanceof HTMLFormElement&&(S(e)||setTimeout(()=>{this.active&&e.querySelector('[aria-invalid="true"], .is-invalid')&&this.emitIfReady({signal:"form_failure",target:w(e),timestamp:Date.now()})},ai))}handleFormInvalid(t){const e=t.target;if(!e||S(e))return;const r=e.closest("form");this.emitIfReady({signal:"form_failure",target:w(r||e),timestamp:Date.now()})}checkErrorPage(){const t=location.href;if(this.errorPageUrls.has(t))return;const e=document.title.toLowerCase();if(X.some(s=>e.includes(s))){this.errorPageUrls.add(t),this.emitHighPriority({signal:"error_page",detail:document.title,timestamp:Date.now()});return}const r=document.querySelectorAll('h1, h2, [class*="error"], [class*="not-found"], [id*="error"], [id*="not-found"]');for(const s of r){const n=s.textContent??"";if(n.length<200&&X.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 r=this.lastMutationAt>=e;this.pendingDomChecks===0&&this.disconnectDomObserver(),!r&&this.active&&this.emitIfReady({signal:"dead_click_dom",target:w(t),timestamp:e})},li))}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 r of t.classList){const s=r.toLowerCase();if(s.includes("btn")||s.includes("button"))return!0}return!1}isInteractive(t){if(di.has(t.tagName))return!0;const e=t.getAttribute("role");return!!(e&&hi.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'))}emitIfReady(t){const e=Date.now();e<this.cooldownUntil||(this.cooldownUntil=e+E.COOLDOWN_MS,this.onFrustration(t))}emitHighPriority(t){this.cooldownUntil=Date.now()+E.COOLDOWN_MS,this.onFrustration(t)}};E.COOLDOWN_MS=6e4;let I=E;function w(i){const t=i.tagName.toLowerCase(),e=i.id?`#${i.id}`:"",r=i.className&&typeof i.className=="string"?"."+i.className.trim().split(/\s+/).slice(0,2).join("."):"",s=i.textContent?.trim().slice(0,30)??"";return`<${t}${e}${r}>${s?` "${s}"`:""}`}function ui(){return{page_url:window.location.href,user_agent:navigator.userAgent,browser:mi(),os:pi(),screen_width:window.screen.width,screen_height:window.screen.height}}function mi(){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 pi(){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 fi="https://makethisbetter.dev/api/v1";class bi{constructor(t,e,r=1e3,s,n){this.projectKey=t,this.apiUrl=(e??fi).replace(/\/$/,""),this.retryDelayMs=r,this.userToken=s,this.userTokenFn=n}async resolveUserToken(){return this.userTokenFn?this.userTokenFn():this.userToken}async authHeaders(t){const e={"X-Project-Key":this.projectKey},r=await this.resolveUserToken();return r&&(e["X-User-Token"]=r),t&&(e["Content-Type"]=t),e}async submissionHeaders(t,e){const r=await this.authHeaders(e);return r["X-Submission-Token"]=t,r}async createSubmissionSession(t,e){const r=wi(),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.reporter_external_id&&s.append("feedback[reporter_external_id]",t.reporter_external_id),t.reporter_email&&s.append("feedback[reporter_email]",t.reporter_email),t.user_email&&s.append("feedback[user_email]",t.user_email),t.user_name&&s.append("feedback[user_name]",t.user_name),t.breadcrumbs&&t.breadcrumbs.length>0&&s.append("feedback[breadcrumbs]",JSON.stringify(t.breadcrumbs)),t.recording_events&&t.recording_events.length>0){const l=JSON.stringify(t.recording_events),c=new Blob([l],{type:"application/json"});s.append("feedback[recording]",c,"interaction-replay.json"),s.append("feedback[recording_duration]",String(t.recording_duration??0))}if(e){const l=e.type==="image/jpeg"?"jpg":"png";s.append("feedback[screenshot]",e,`screenshot.${l}`)}const n=await this.authHeaders();return n["X-Submission-Token"]=r,n["X-Idempotency-Key"]=yi(),{...(await(await this.fetchWithRetry(`${this.apiUrl}/widget/feedback_submission_sessions`,{method:"POST",headers:n,body:s})).json()).submission_session,token:r}}async createIdentityToken(t){const e=await this.authHeaders("application/json");try{return await(await this.fetchWithRetry(`${this.apiUrl}/widget/identity_tokens`,{method:"POST",headers:e,body:JSON.stringify({reporter_external_id:t})})).json()}catch{return null}}async updateReporter(t,e,r){const s=await this.authHeaders("application/json");s["X-Identity-Token"]=r;try{return await this.fetchWithRetry(`${this.apiUrl}/widget/feedbacks/${t}/reporter`,{method:"PATCH",headers:s,body:JSON.stringify({reporter:{email:e}})}),!0}catch{return!1}}async startClarification(t,e,r){const s={};r&&(s.message=r);const n=await this.submissionHeaders(e,"application/json");return(await(await this.fetchWithRetry(`${this.apiUrl}/widget/feedback_submission_sessions/${t}/clarification`,{method:"POST",headers:n,body:JSON.stringify(s)})).json()).clarification}async getClarification(t,e){const r=await this.submissionHeaders(e);return(await(await this.fetchWithRetry(`${this.apiUrl}/widget/feedback_submission_sessions/${t}/clarification`,{method:"GET",headers:r})).json()).clarification}async streamClarification(t,e,r){const s=await this.submissionHeaders(e,"application/json");s.Accept="text/event-stream";const n=await fetch(`${this.apiUrl}/widget/feedback_submission_sessions/${t}/clarification`,{method:"POST",headers:s,body:JSON.stringify({})}),o=n.headers.get("Content-Type")??"";if(!n.ok||!n.body||!o.includes("text/event-stream"))throw new Error("clarify stream unavailable");return gi(n.body,r)}async finalizeSubmissionSession(t,e){const r=await this.submissionHeaders(e);return(await(await this.fetchWithRetry(`${this.apiUrl}/widget/feedback_submission_sessions/${t}/feedback`,{method:"POST",headers:r})).json()).feedback}async abandonSubmissionSession(t,e){const r=await this.submissionHeaders(e);await this.fetchWithRetry(`${this.apiUrl}/widget/feedback_submission_sessions/${t}`,{method:"DELETE",headers:r})}async fetchWithRetry(t,e,r=1){let s;try{s=await fetch(t,e)}catch(n){if(r>0)return await G(this.retryDelayMs),this.fetchWithRetry(t,e,r-1);throw n}if(s.ok)return s;if(s.status>=500&&r>0)return await G(this.retryDelayMs),this.fetchWithRetry(t,e,r-1);throw new Error(`HTTP ${s.status}`)}}function G(i){return i<=0?Promise.resolve():new Promise(t=>setTimeout(t,i))}async function gi(i,t){const e=i.getReader(),r=new TextDecoder;let s="",n={messages:[],done:!0};const o=a=>{const l=a.split(`
133
+ `).find(x=>x.startsWith("event:")),c=a.split(`
134
+ `).find(x=>x.startsWith("data:"));if(!c)return;const h=l?.slice(6).trim(),p=JSON.parse(c.slice(5).trim());h==="delta"&&typeof p.text=="string"?t(p.text):h==="done"&&(n={messages:Array.isArray(p.messages)?p.messages:[],done:p.done!==!1})};for(;;){const{done:a,value:l}=await e.read();if(a)break;s+=r.decode(l,{stream:!0});let c;for(;(c=s.indexOf(`
110
135
 
111
- `))!==-1;){const h=s.slice(0,c);s=s.slice(c+2);try{o(h)}catch{}}}return n}function li(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function ci(i,t,e,r,s,n,o,a){return{description:i,...t,console_errors:e,annotations:r?[r]:[],target_element:r?.targetSelector?{selector:r.targetSelector,text:r.targetText??"",name:r.targetName??""}:void 0,user_id:s?.id,user_email:s?.email,user_name:s?.name,reporter_external_id:s?void 0:o,reporter_email:s?void 0:a,recording_events:n?.events,recording_duration:n?.duration}}const X="mtb_anon_id",mt="mtb_reporter_email",ft="mtb_board_url";let G=null,pt=null,bt=null;function K(){try{const i=window.localStorage.getItem(X);if(i?.startsWith("anon_"))return i;const t=Z();return window.localStorage.setItem(X,t),t}catch{return G??(G=Z()),G}}function J(){try{return window.localStorage.getItem(mt)??void 0}catch{return pt??void 0}}function di(i){pt=i;try{window.localStorage.setItem(mt,i)}catch{}}function hi(){try{return window.localStorage.getItem(ft)??void 0}catch{return bt??void 0}}function Q(i){bt=i;try{window.localStorage.setItem(ft,i)}catch{}}function Z(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`anon_${crypto.randomUUID()}`:`anon_${`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}`}const ui={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",my_feedback:"My feedback",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",email_prompt:"Want updates? Leave your email and we'll let you know when it's resolved.",email_placeholder:"you@example.com",email_submit:"Notify me",email_saved:"You'll get an email when it's resolved.",email_error:"Couldn't save your email. Please try again."},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:{title:"Make This Better AI",subtitle:"Sharpening your feedback",thinking:"Thinking...",placeholder:"Type your answer — or Skip",send:"Send",skip:"Skip"}},mi={tab:"反馈",toolbar:{markup:"标注",record:"录屏",hint:"点击任意元素进行标注 · 拖拽可自由绘制",hintRecord:"正在录制屏幕",exit:"退出"},popup:{about:"关于",placeholder:"描述问题或建议...",submit:"提交",cancel:"取消",my_feedback:"我的反馈",quickOptions:[{emoji:"🐛",label:"这里有问题"},{emoji:"💡",label:"我希望它能更好用"},{emoji:"🤔",label:"我看不懂这里"},{emoji:"✨",label:"我有个想法"}]},success:{title:"感谢!",message:"您的反馈已收到。",title_no_ai:"已发送,感谢!",message_no_ai:"我们会跟进处理,解决后会通知您。",view_feedback:"查看我的反馈",close:"关闭",email_prompt:"想了解进展?留下邮箱,问题解决后我们会通知您。",email_placeholder:"you@example.com",email_submit:"通知我",email_saved:"问题解决后您会收到邮件通知。",email_error:"邮箱保存失败,请重试。"},error:{submit:"提交失败,请重试。"},pet:{bubble:"需要帮助吗?"},frustration:{prompt:"遇到问题了?告诉我们。",action:"标注",dismiss:"关闭"},annotation:{drawing:"绘制",element:"元素"},record:{stop:"停止",timer_label:"录制中",max_reached:"已达到最大录制时长"},clarify:{title:"让它更好 AI",subtitle:"正在完善你的反馈",thinking:"思考中...",placeholder:"输入你的回答 —— 或跳过",send:"发送",skip:"跳过"}},fi={tab:"フィードバック",toolbar:{markup:"マークアップ",record:"録画",hint:"要素をクリックして注釈 · ドラッグで描画",hintRecord:"画面を録画中",exit:"終了"},popup:{about:"概要",placeholder:"問題や提案を入力してください...",submit:"送信",cancel:"キャンセル",my_feedback:"自分のフィードバック",quickOptions:[{emoji:"🐛",label:"不具合があります"},{emoji:"💡",label:"もっと使いやすくしてほしい"},{emoji:"🤔",label:"ここがわかりにくい"},{emoji:"✨",label:"アイデアがあります"}]},success:{title:"ありがとうございます!",message:"フィードバックを受け付けました。",title_no_ai:"送信しました!",message_no_ai:"チームが対応します。解決次第お知らせします。",view_feedback:"フィードバックを確認",close:"閉じる",email_prompt:"進捗を知りたい場合は、メールアドレスをご記入ください。解決次第お知らせします。",email_placeholder:"you@example.com",email_submit:"通知を受け取る",email_saved:"解決次第メールでお知らせします。",email_error:"メールアドレスを保存できませんでした。もう一度お試しください。"},error:{submit:"送信に失敗しました。もう一度お試しください。"},pet:{bubble:"お困りですか?"},frustration:{prompt:"うまくいかないことがありますか?お知らせください。",action:"注釈",dismiss:"閉じる"},annotation:{drawing:"描画",element:"要素"},record:{stop:"停止",timer_label:"録画中",max_reached:"最大録画時間に達しました"},clarify:{title:"Make This Better AI",subtitle:"フィードバックを整えています",thinking:"考え中...",placeholder:"回答を入力 — またはスキップ",send:"送信",skip:"スキップ"}},pi={tab:"피드백",toolbar:{markup:"마크업",record:"녹화",hint:"요소를 클릭하여 주석 · 드래그하여 그리기",hintRecord:"화면을 녹화 중입니다",exit:"나가기"},popup:{about:"정보",placeholder:"문제 또는 제안 사항을 설명해 주세요...",submit:"제출",cancel:"취소",my_feedback:"내 피드백",quickOptions:[{emoji:"🐛",label:"오류가 있어요"},{emoji:"💡",label:"이 기능을 개선해 주세요"},{emoji:"🤔",label:"이 부분을 모르겠어요"},{emoji:"✨",label:"아이디어가 있어요"}]},success:{title:"감사합니다!",message:"피드백이 접수되었습니다.",title_no_ai:"전송 완료!",message_no_ai:"팀에서 처리 후 알려드리겠습니다.",view_feedback:"내 피드백 보기",close:"닫기",email_prompt:"진행 상황이 궁금하신가요? 이메일을 남겨주시면 해결 시 알려드립니다.",email_placeholder:"you@example.com",email_submit:"알림 받기",email_saved:"해결되면 이메일로 알려드립니다.",email_error:"이메일을 저장하지 못했습니다. 다시 시도해 주세요."},error:{submit:"제출에 실패했습니다. 다시 시도해 주세요."},pet:{bubble:"도움이 필요하신가요?"},frustration:{prompt:"문제가 있으신가요? 알려 주세요.",action:"주석",dismiss:"닫기"},annotation:{drawing:"그리기",element:"요소"},record:{stop:"중지",timer_label:"녹화 중",max_reached:"최대 녹화 시간에 도달했습니다"},clarify:{title:"Make This Better AI",subtitle:"피드백을 다듬는 중",thinking:"생각 중...",placeholder:"답변 입력 — 또는 건너뛰기",send:"보내기",skip:"건너뛰기"}},bi={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",my_feedback:"Mis comentarios",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",email_prompt:"¿Quieres novedades? Deja tu correo y te avisaremos cuando se resuelva.",email_placeholder:"tu@ejemplo.com",email_submit:"Avisarme",email_saved:"Recibirás un correo cuando se resuelva.",email_error:"No se pudo guardar tu correo. Inténtalo de nuevo."},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:{title:"Make This Better AI",subtitle:"Afinando tus comentarios",thinking:"Pensando...",placeholder:"Escribe tu respuesta — o Omitir",send:"Enviar",skip:"Omitir"}},gi={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",my_feedback:"Mes avis",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",email_prompt:"Envie de suivre l'avancement ? Laissez votre e-mail et nous vous préviendrons une fois résolu.",email_placeholder:"vous@exemple.com",email_submit:"Me prévenir",email_saved:"Vous recevrez un e-mail une fois résolu.",email_error:"Impossible d'enregistrer votre e-mail. Veuillez réessayer."},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:{title:"Make This Better AI",subtitle:"Affinement de votre retour",thinking:"Réflexion...",placeholder:"Saisissez votre réponse — ou Ignorer",send:"Envoyer",skip:"Passer"}},yi={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",my_feedback:"Mein Feedback",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",email_prompt:"Updates gewünscht? Hinterlassen Sie Ihre E-Mail und wir melden uns, sobald es gelöst ist.",email_placeholder:"sie@beispiel.de",email_submit:"Benachrichtigen",email_saved:"Sie erhalten eine E-Mail, sobald es gelöst ist.",email_error:"E-Mail konnte nicht gespeichert werden. Bitte versuchen Sie es erneut."},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:{title:"Make This Better AI",subtitle:"Wir schärfen dein Feedback",thinking:"Einen Moment...",placeholder:"Gib deine Antwort ein — oder Überspringen",send:"Senden",skip:"Überspringen"}},S={en:ui,"zh-CN":mi,ja:fi,ko:pi,es:bi,fr:gi,de:yi};function xi(i){if(S[i])return S[i];const t=i.split("-")[0];return S[t]?S[t]:S.en}const wi=60,ki="https://cdn.jsdelivr.net/npm/@rrweb/record@2.1.0/umd/record.min.js",vi="sha384-MrD66HBNSykaP2N95+6hQCFlF5oH2tvL3TD/zyvHNkP/sAFWZx98DX9MEDy8MdVT";let C=null;function Si(){return C||(C=Ei().catch(()=>Ci()),C)}async function Ei(){return(await import("@rrweb/record")).record}function tt(){const i=globalThis;return i.rrwebRecord?.record??i.rrweb?.record}function Ci(){return new Promise((i,t)=>{const e=tt();if(e){i(e);return}const r=document.createElement("script");r.src=ki,r.integrity=vi,r.crossOrigin="anonymous",r.onload=()=>{const s=tt();s?i(s):t(new Error("rrweb record global not found after script load"))},r.onerror=()=>t(new Error("Failed to load rrweb from CDN")),document.head.appendChild(r)})}class _i{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 Si();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?.()},wi*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 r=this.shadow.el("div","mtb-click-ripple");r.style.left=`${t}px`,r.style.top=`${e}px`,this.shadow.append(r),r.addEventListener("animationend",()=>r.remove())}}class Mi{constructor(t,e,r,s){this.intervalId=null,this.getDuration=r,this.el=t.el("div","mtb-record-bar"),this.el.innerHTML=`
136
+ `))!==-1;){const h=s.slice(0,c);s=s.slice(c+2);try{o(h)}catch{}}}return n}function yi(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function wi(){if(typeof crypto>"u"||typeof crypto.getRandomValues!="function")throw new Error("Secure random generation is unavailable");const i=crypto.getRandomValues(new Uint8Array(32));return Array.from(i,t=>t.toString(16).padStart(2,"0")).join("")}function xi(i,t,e,r,s,n,o,a,l){return{description:i,...t,console_errors:e,annotations:r?[r]:[],target_element:r?.targetSelector?{selector:r.targetSelector,text:r.targetText??"",name:r.targetName??""}:void 0,user_id:s?.id,user_email:s?.email,user_name:s?.name,reporter_external_id:s?void 0:o,reporter_email:s?void 0:a,recording_events:n?.events,recording_duration:n?.duration,breadcrumbs:l}}const J="mtb_anon_id",ft="mtb_reporter_email",bt="mtb_board_url";let Q=null,gt=null,yt=null;function Z(){try{const i=window.localStorage.getItem(J);if(i?.startsWith("anon_"))return i;const t=it();return window.localStorage.setItem(J,t),t}catch{return Q??(Q=it()),Q}}function tt(){try{return window.localStorage.getItem(ft)??void 0}catch{return gt??void 0}}function vi(i){gt=i;try{window.localStorage.setItem(ft,i)}catch{}}function ki(){try{return window.localStorage.getItem(bt)??void 0}catch{return yt??void 0}}function et(i){yt=i;try{window.localStorage.setItem(bt,i)}catch{}}function it(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`anon_${crypto.randomUUID()}`:`anon_${`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}`}const Si={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",my_feedback:"My feedback",quickOptions:[{emoji:"🐛",label:"Something's broken"},{emoji:"💡",label:"I have a suggestion"},{emoji:"🤔",label:"I'm confused"}]},success:{title:"Sent — thanks!",message:"Your note and captured technical context are on their way to the team. You’ll hear back when it’s resolved.",title_no_ai:"Thanks! We've received your feedback.",message_no_ai:"The team will take it from here. You'll hear back when it's resolved.",view_feedback:"View my feedback",close:"Close",email_prompt:"Want updates? Leave your email and we'll let you know when it's resolved.",email_placeholder:"you@example.com",email_submit:"Notify me",email_saved:"You'll get an email when it's resolved.",email_error:"Couldn't save your email. Please try again."},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"},draw:{note_placeholder:"Add a note to your drawing",undo:"Undo",redo:"Redo",cancel:"Cancel",submit:"Submit"},record:{stop:"Stop",timer_label:"Recording",max_reached:"Maximum recording time reached",replay_label:"screen-recording.json",play:"Play recording",close:"Close",preview_unavailable:"Preview unavailable"},clarify:{title:"Make This Better AI",subtitle:"Sharpening your feedback",thinking:"Thinking...",placeholder:"Type your answer — or skip the question",send:"Send",skip:"Skip & send",summary:{ready:"Ready to send",what_you_said:"What you said",clarified:"Clarified with AI",auto_captured:"Auto-captured",element:"Element",page:"Page",browser:"Browser",captured:"Captured",send_feedback:"Send feedback",screenshot:"Screenshot",recording:"Interaction replay"}}},Ei={tab:"反馈",toolbar:{markup:"标注",record:"录屏",hint:"点击任意元素进行标注 · 拖拽可自由绘制",hintRecord:"正在录制屏幕",exit:"退出"},popup:{about:"关于",placeholder:"描述问题或建议...",submit:"提交",cancel:"取消",my_feedback:"我的反馈",quickOptions:[{emoji:"🐛",label:"出问题了"},{emoji:"💡",label:"我有一个建议"},{emoji:"🤔",label:"我有点困惑"}]},success:{title:"已发送,感谢!",message:"您的反馈和采集到的技术上下文正在发送给团队。问题解决后,您会收到通知。",title_no_ai:"感谢!我们已收到您的反馈。",message_no_ai:"接下来由团队处理。问题解决后,您会收到通知。",view_feedback:"查看我的反馈",close:"关闭",email_prompt:"想了解进展?留下邮箱,问题解决后我们会通知您。",email_placeholder:"you@example.com",email_submit:"通知我",email_saved:"问题解决后您会收到邮件通知。",email_error:"邮箱保存失败,请重试。"},error:{submit:"提交失败,请重试。"},pet:{bubble:"需要帮助吗?"},frustration:{prompt:"遇到问题了?告诉我们。",action:"标注",dismiss:"关闭"},annotation:{drawing:"绘制",element:"元素"},draw:{note_placeholder:"给你的绘制添加说明",undo:"撤销",redo:"重做",cancel:"取消",submit:"提交"},record:{stop:"停止",timer_label:"录制中",max_reached:"已达到最长录制时间",replay_label:"screen-recording.json",play:"播放录屏",close:"关闭",preview_unavailable:"暂无法预览"},clarify:{title:"Make This Better AI",subtitle:"正在完善你的反馈",thinking:"思考中...",placeholder:"输入回答,或跳过问题",send:"发送",skip:"跳过并发送",summary:{ready:"准备发送",what_you_said:"你的描述",clarified:"AI 追问澄清",auto_captured:"自动采集",element:"元素",page:"页面",browser:"浏览器",captured:"已采集",send_feedback:"发送反馈",screenshot:"截图",recording:"交互回放"}}},Ci={tab:"フィードバック",toolbar:{markup:"マークアップ",record:"録画",hint:"要素をクリックして注釈 · ドラッグで描画",hintRecord:"画面を録画中",exit:"終了"},popup:{about:"概要",placeholder:"問題や提案を入力してください...",submit:"送信",cancel:"キャンセル",my_feedback:"自分のフィードバック",quickOptions:[{emoji:"🐛",label:"不具合があります"},{emoji:"💡",label:"提案があります"},{emoji:"🤔",label:"わかりにくいです"}]},success:{title:"送信しました。ありがとうございます!",message:"ご意見と取得した技術情報をチームに送信しました。解決次第お知らせします。",title_no_ai:"ありがとうございます!フィードバックを受け付けました。",message_no_ai:"チームが対応します。解決次第お知らせします。",view_feedback:"フィードバックを確認",close:"閉じる",email_prompt:"進捗を知りたい場合は、メールアドレスをご記入ください。解決次第お知らせします。",email_placeholder:"you@example.com",email_submit:"通知を受け取る",email_saved:"解決次第メールでお知らせします。",email_error:"メールアドレスを保存できませんでした。もう一度お試しください。"},error:{submit:"送信に失敗しました。もう一度お試しください。"},pet:{bubble:"お困りですか?"},frustration:{prompt:"うまくいかないことがありますか?お知らせください。",action:"注釈",dismiss:"閉じる"},annotation:{drawing:"描画",element:"要素"},draw:{note_placeholder:"描画にメモを追加",undo:"元に戻す",redo:"やり直す",cancel:"キャンセル",submit:"送信"},record:{stop:"停止",timer_label:"録画中",max_reached:"最大記録時間に達しました",replay_label:"screen-recording.json",play:"録画を再生",close:"閉じる",preview_unavailable:"プレビューは利用できません"},clarify:{title:"Make This Better AI",subtitle:"フィードバックを整えています",thinking:"考え中...",placeholder:"回答を入力、または質問をスキップ",send:"送信",skip:"スキップして送信",summary:{ready:"送信の準備ができました",what_you_said:"あなたの入力",clarified:"AI で明確化",auto_captured:"自動取得",element:"要素",page:"ページ",browser:"ブラウザ",captured:"取得済み",send_feedback:"フィードバックを送信",screenshot:"スクリーンショット",recording:"操作リプレイ"}}},_i={tab:"피드백",toolbar:{markup:"마크업",record:"녹화",hint:"요소를 클릭하여 주석 · 드래그하여 그리기",hintRecord:"화면 녹화 중",exit:"나가기"},popup:{about:"정보",placeholder:"문제 또는 제안 사항을 설명해 주세요...",submit:"제출",cancel:"취소",my_feedback:"내 피드백",quickOptions:[{emoji:"🐛",label:"문제가 있어요"},{emoji:"💡",label:"제안이 있어요"},{emoji:"🤔",label:"헷갈려요"}]},success:{title:"전송되었습니다. 감사합니다!",message:"피드백과 수집된 기술 정보가 팀에 전달되었습니다. 해결되면 알려드리겠습니다.",title_no_ai:"감사합니다! 피드백을 접수했습니다.",message_no_ai:"팀에서 처리합니다. 해결되면 알려드리겠습니다.",view_feedback:"내 피드백 보기",close:"닫기",email_prompt:"진행 상황이 궁금하신가요? 이메일을 남겨주시면 해결 시 알려드립니다.",email_placeholder:"you@example.com",email_submit:"알림 받기",email_saved:"해결되면 이메일로 알려드립니다.",email_error:"이메일을 저장하지 못했습니다. 다시 시도해 주세요."},error:{submit:"제출에 실패했습니다. 다시 시도해 주세요."},pet:{bubble:"도움이 필요하신가요?"},frustration:{prompt:"문제가 있으신가요? 알려 주세요.",action:"주석",dismiss:"닫기"},annotation:{drawing:"그리기",element:"요소"},draw:{note_placeholder:"그림에 메모 추가",undo:"실행 취소",redo:"다시 실행",cancel:"취소",submit:"보내기"},record:{stop:"중지",timer_label:"녹화 중",max_reached:"최대 녹화 시간에 도달했습니다",replay_label:"screen-recording.json",play:"녹화 재생",close:"닫기",preview_unavailable:"미리보기를 사용할 수 없습니다"},clarify:{title:"Make This Better AI",subtitle:"피드백을 다듬는 중",thinking:"생각 중...",placeholder:"답변을 입력하거나 질문을 건너뛰세요",send:"보내기",skip:"건너뛰고 보내기",summary:{ready:"보낼 준비 완료",what_you_said:"입력한 내용",clarified:"AI로 명확화",auto_captured:"자동 수집",element:"요소",page:"페이지",browser:"브라우저",captured:"수집됨",send_feedback:"피드백 보내기",screenshot:"스크린샷",recording:"상호작용 리플레이"}}},Ti={tab:"Comentarios",toolbar:{markup:"Anotar",record:"Grabar",hint:"Haz clic en cualquier elemento para anotar · arrastra para dibujar",hintRecord:"Grabando pantalla",exit:"Salir"},popup:{about:"Acerca de",placeholder:"Describe el problema o sugerencia...",submit:"Enviar",cancel:"Cancelar",my_feedback:"Mis comentarios",quickOptions:[{emoji:"🐛",label:"Algo no funciona"},{emoji:"💡",label:"Tengo una sugerencia"},{emoji:"🤔",label:"Estoy confundido"}]},success:{title:"Enviado, ¡gracias!",message:"Tu nota y el contexto técnico capturado se han enviado al equipo. Te avisaremos cuando se resuelva.",title_no_ai:"¡Gracias! Hemos recibido tu comentario.",message_no_ai:"El equipo se encargará a partir de aquí. Te avisaremos cuando se resuelva.",view_feedback:"Ver mis comentarios",close:"Cerrar",email_prompt:"¿Quieres novedades? Deja tu correo y te avisaremos cuando se resuelva.",email_placeholder:"tu@ejemplo.com",email_submit:"Avisarme",email_saved:"Recibirás un correo cuando se resuelva.",email_error:"No se pudo guardar tu correo. Inténtalo de nuevo."},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"},draw:{note_placeholder:"Añade una nota a tu dibujo",undo:"Deshacer",redo:"Rehacer",cancel:"Cancelar",submit:"Enviar"},record:{stop:"Detener",timer_label:"Grabando",max_reached:"Tiempo máximo de grabación alcanzado",replay_label:"screen-recording.json",play:"Reproducir grabación",close:"Cerrar",preview_unavailable:"Vista previa no disponible"},clarify:{title:"Make This Better AI",subtitle:"Afinando tus comentarios",thinking:"Pensando...",placeholder:"Escribe tu respuesta — u omite la pregunta",send:"Enviar",skip:"Omitir y enviar",summary:{ready:"Listo para enviar",what_you_said:"Lo que dijiste",clarified:"Aclarado con IA",auto_captured:"Capturado automáticamente",element:"Elemento",page:"Página",browser:"Navegador",captured:"Capturado",send_feedback:"Enviar comentario",screenshot:"Captura de pantalla",recording:"Repetición de interacción"}}},Mi={tab:"Avis",toolbar:{markup:"Annoter",record:"Enregistrer",hint:"Cliquez sur un élément pour l'annoter · glissez pour dessiner",hintRecord:"Enregistrement de l'écran",exit:"Quitter"},popup:{about:"À propos",placeholder:"Décrivez le problème ou votre suggestion...",submit:"Envoyer",cancel:"Annuler",my_feedback:"Mes avis",quickOptions:[{emoji:"🐛",label:"Quelque chose ne fonctionne pas"},{emoji:"💡",label:"J'ai une suggestion"},{emoji:"🤔",label:"Je suis perplexe"}]},success:{title:"Envoyé, merci !",message:"Votre message et le contexte technique collecté ont été transmis à l’équipe. Vous serez informé(e) dès que ce sera résolu.",title_no_ai:"Merci ! Nous avons bien reçu votre avis.",message_no_ai:"L’équipe prend le relais. Vous serez informé(e) dès que ce sera résolu.",view_feedback:"Voir mes avis",close:"Fermer",email_prompt:"Envie de suivre l'avancement ? Laissez votre e-mail et nous vous préviendrons une fois résolu.",email_placeholder:"vous@exemple.com",email_submit:"Me prévenir",email_saved:"Vous recevrez un e-mail une fois résolu.",email_error:"Impossible d'enregistrer votre e-mail. Veuillez réessayer."},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"},draw:{note_placeholder:"Ajoutez une note à votre dessin",undo:"Annuler",redo:"Rétablir",cancel:"Annuler",submit:"Envoyer"},record:{stop:"Arrêter",timer_label:"Enregistrement",max_reached:"Durée maximale d'enregistrement atteinte",replay_label:"screen-recording.json",play:"Lire l'enregistrement",close:"Fermer",preview_unavailable:"Aperçu indisponible"},clarify:{title:"Make This Better AI",subtitle:"Affinement de votre retour",thinking:"Réflexion...",placeholder:"Saisissez votre réponse — ou ignorez la question",send:"Envoyer",skip:"Ignorer et envoyer",summary:{ready:"Prêt à envoyer",what_you_said:"Ce que vous avez dit",clarified:"Clarifié avec l'IA",auto_captured:"Capturé automatiquement",element:"Élément",page:"Page",browser:"Navigateur",captured:"Capturé",send_feedback:"Envoyer le retour",screenshot:"Capture d'écran",recording:"Relecture des interactions"}}},Li={tab:"Feedback",toolbar:{markup:"Markieren",record:"Aufnehmen",hint:"Klicken Sie auf ein Element zum Kommentieren · ziehen Sie zum Zeichnen",hintRecord:"Bildschirm wird aufgenommen",exit:"Beenden"},popup:{about:"Info",placeholder:"Beschreiben Sie das Problem oder Ihren Vorschlag...",submit:"Absenden",cancel:"Abbrechen",my_feedback:"Mein Feedback",quickOptions:[{emoji:"🐛",label:"Etwas funktioniert nicht"},{emoji:"💡",label:"Ich habe einen Vorschlag"},{emoji:"🤔",label:"Ich bin verwirrt"}]},success:{title:"Gesendet, vielen Dank!",message:"Ihre Nachricht und der erfasste technische Kontext wurden an das Team gesendet. Sie werden benachrichtigt, sobald das Problem gelöst ist.",title_no_ai:"Vielen Dank! Wir haben Ihr Feedback erhalten.",message_no_ai:"Das Team übernimmt ab hier. Sie werden benachrichtigt, sobald das Problem gelöst ist.",view_feedback:"Mein Feedback ansehen",close:"Schließen",email_prompt:"Updates gewünscht? Hinterlassen Sie Ihre E-Mail und wir melden uns, sobald es gelöst ist.",email_placeholder:"sie@beispiel.de",email_submit:"Benachrichtigen",email_saved:"Sie erhalten eine E-Mail, sobald es gelöst ist.",email_error:"E-Mail konnte nicht gespeichert werden. Bitte versuchen Sie es erneut."},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"},draw:{note_placeholder:"Fügen Sie Ihrer Zeichnung eine Notiz hinzu",undo:"Rückgängig",redo:"Wiederholen",cancel:"Abbrechen",submit:"Absenden"},record:{stop:"Stopp",timer_label:"Aufnahme",max_reached:"Maximale Aufnahmedauer erreicht",replay_label:"screen-recording.json",play:"Aufnahme abspielen",close:"Schließen",preview_unavailable:"Vorschau nicht verfügbar"},clarify:{title:"Make This Better AI",subtitle:"Wir schärfen dein Feedback",thinking:"Einen Moment...",placeholder:"Antwort eingeben — oder Frage überspringen",send:"Senden",skip:"Überspringen & senden",summary:{ready:"Bereit zum Senden",what_you_said:"Was Sie gesagt haben",clarified:"Mit KI geklärt",auto_captured:"Automatisch erfasst",element:"Element",page:"Seite",browser:"Browser",captured:"Erfasst",send_feedback:"Feedback senden",screenshot:"Screenshot",recording:"Interaktions-Replay"}}},k={en:Si,"zh-CN":Ei,ja:Ci,ko:_i,es:Ti,fr:Mi,de:Li};function Pi(i){if(k[i])return k[i];const t=i.split("-")[0];return k[t]?k[t]:k.en}const Ai=60,Di="https://cdn.jsdelivr.net/npm/@rrweb/record@2.1.0/umd/record.min.js",Ri="sha384-MrD66HBNSykaP2N95+6hQCFlF5oH2tvL3TD/zyvHNkP/sAFWZx98DX9MEDy8MdVT";let C=null;function Ii(){return C||(C=Hi().catch(()=>$i()),C)}async function Hi(){return(await import("@rrweb/record")).record}function rt(){const i=globalThis;return i.rrwebRecord?.record??i.rrweb?.record}function $i(){return new Promise((i,t)=>{const e=rt();if(e){i(e);return}const r=document.createElement("script");r.src=Di,r.integrity=Ri,r.crossOrigin="anonymous",r.onload=()=>{const s=rt();s?i(s):t(new Error("rrweb record global not found after script load"))},r.onerror=()=>t(new Error("Failed to load rrweb from CDN")),document.head.appendChild(r)})}class Bi{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 Ii();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?.()},Ai*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.max(1,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 r=this.shadow.el("div","mtb-click-ripple");r.style.left=`${t}px`,r.style.top=`${e}px`,this.shadow.append(r),r.addEventListener("animationend",()=>r.remove())}}class Fi{constructor(t,e,r,s){this.intervalId=null,this.getDuration=r,this.el=t.el("div","mtb-record-bar"),this.el.innerHTML=`
112
137
  <span class="mtb-record-dot"></span>
113
138
  <span class="mtb-record-timer">00:00</span>
114
139
  <button class="mtb-record-stop" type="button">${e.record.stop}</button>
115
- `,t.append(this.el),this.timerEl=this.el.querySelector(".mtb-record-timer"),this.el.querySelector(".mtb-record-stop").addEventListener("click",s),this.intervalId=setInterval(()=>this.updateTimer(),1e3)}updateTimer(){const t=this.getDuration(),e=String(Math.floor(t/60)).padStart(2,"0"),r=String(t%60).padStart(2,"0");this.timerEl.textContent=`${e}:${r}`}destroy(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.el.remove()}}class Ti{constructor(){this.session=null,this.bar=null,this.result=null}async start(t,e,r){this.session=new _i(t,r),this.bar=new Mi(t,e,()=>this.session?.getDuration()??0,r),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 et{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.lastPopupPos=null,this.recordingManager=null,this.lastHandoff={},this.config=t,this.messages=xi(t.locale??"en"),this.apiClient=new oi(t.projectKey,t.apiUrl,void 0,t.userToken,t.userTokenFn),this.consoleCollector=new Ve,this.consoleCollector.start(),this.buildUI(),t.frustrationDetection!==!1&&(this.frustrationDetector=new R(()=>this.handleFrustration()),this.frustrationDetector.start())}buildUI(){this.shadow=new _t(this.config.theme??"auto"),this.tab=new Mt(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 Lt(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 At(this.shadow,this.messages,()=>this.exitAll(),t=>this.handleToolbarModeChange(t)),this.session=new O(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 Ti,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 O(this.shadow,this.messages,(e,r)=>{this.currentAnnotation=e,this.showPopup(e.x,e.y,r)})),this.mode="annotating")}showPopup(t,e,r){this.mode="popup",this.lastPopupPos={x:t,y:e},this.session?.dismissInteraction(),this.popup=new Ft(this.shadow,{targetName:r,x:t,y:e,messages:this.messages,onSubmit:s=>this.handleSubmit(s),onClose:()=>this.exitAll(),onMyFeedback:this.buildMyFeedbackHandler()})}buildMyFeedbackHandler(){if(!this.config.user&&hi())return async()=>{const t=await this.apiClient.createIdentityToken(K());!t?.identity_token||!t.board_url||(Q(t.board_url),window.open(`${t.board_url}?identity=${encodeURIComponent(t.identity_token)}`,"_blank"))}}async handleSubmit(t){if(!this.popup)return;this.popup.setLoading(!0),await new Promise(a=>requestAnimationFrame(()=>setTimeout(a,0)));const e=this.currentAnnotation,r=this.recordingManager?.getRecording()??void 0,[s,n]=await Promise.all([je(e?[e]:[]),Promise.resolve(ii())]),o=ci(t,n,this.consoleCollector.getErrors(),e,this.config.user,r,this.config.user?void 0:K(),this.config.user?void 0:J());try{const a=await this.apiClient.submitFeedback(o,s);this.lastHandoff={feedbackId:a.id,boardUrl:a.board_url,identityToken:a.identity_token},a.board_url&&Q(a.board_url),this.popup?.destroy(),this.popup=null,this.session?.destroy(),this.session=null,this.toolbar?.destroy(),this.toolbar=null,this.recordingManager?.destroy(),this.recordingManager=null,a.skip_followup===!0||a.ai_clarify_available===!1?this.showSuccess({skipFollowup:!0}):this.showClarify(a.id,this.lastPopupPos)}catch{this.popup?.setLoading(!1),this.popup?.setError(this.messages.error.submit)}}showClarify(t,e){this.mode="clarifying",this.tab?.setActive(!0),this.clarify=new zt(this.shadow,{feedbackId:t,apiClient:this.apiClient,messages:this.messages,x:e?.x,y:e?.y,onDone:()=>{this.clarify?.destroy(),this.clarify=null,this.showSuccess()}})}showSuccess(t){this.mode="idle",this.tab?.setActive(!1),this.success=new Nt(this.shadow,this.messages,()=>{this.success?.destroy(),this.success=null},this.buildViewFeedbackHandler(),{...t,emailCapture:this.buildEmailCapture()})}buildEmailCapture(){const{feedbackId:t,identityToken:e}=this.lastHandoff;if(!(!t||!e)&&!J())return{onSubmit:async r=>{const s=await this.apiClient.updateReporter(t,r,e);return s&&di(r),s}}}buildViewFeedbackHandler(){const{boardUrl:t,identityToken:e}=this.lastHandoff;if(t){if(e)return()=>{window.open(`${t}?identity=${encodeURIComponent(e)}`,"_blank")};if(this.config.userToken||this.config.userTokenFn)return async()=>{const r=await this.apiClient.resolveUserToken();r&&window.open(`${t}?identity=${encodeURIComponent(r)}`,"_blank")}}}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 g=null;const gt={init(i){g&&(g.destroy(),g=null),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{g=new et(i)}):g=new et(i)},destroy(){g?.destroy(),g=null}};typeof window<"u"&&(window.MakeThisBetter=gt);exports.MakeThisBetter=gt;
140
+ `,t.append(this.el),this.timerEl=this.el.querySelector(".mtb-record-timer"),this.el.querySelector(".mtb-record-stop").addEventListener("click",s),this.intervalId=setInterval(()=>this.updateTimer(),1e3)}updateTimer(){const t=this.getDuration(),e=String(Math.floor(t/60)).padStart(2,"0"),r=String(t%60).padStart(2,"0");this.timerEl.textContent=`${e}:${r}`}destroy(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.el.remove()}}class zi{constructor(){this.session=null,this.bar=null,this.result=null}async start(t,e,r){this.session=new Bi(t,r),this.bar=new Fi(t,e,()=>this.session?.getDuration()??0,r),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 st{constructor(t){this.tab=null,this.toolbar=null,this.session=null,this.drawBar=null,this.dim=null,this.popup=null,this.clarify=null,this.success=null,this.frustrationPrompt=null,this.frustrationDetector=null,this.mode="idle",this.via="pin",this.currentAnnotation=null,this.submittingUi=null,this.lastPopupPos=null,this.recordingManager=null,this.activeSubmission=null,this.submissionAttempt=0,this.lastHandoff={},this.handleKeydown=e=>{if(e.key==="Escape")switch(this.mode){case"annotating":case"popup":e.preventDefault(),e.stopPropagation(),this.exitAll();break;case"drawing":e.preventDefault(),e.stopPropagation(),this.cancelDraw();break;case"recording":e.preventDefault(),e.stopPropagation(),this.handleRecordStop();break}},this.handleRecordStop=()=>{this.recordingManager&&(this.recordingManager.stop(),this.via="record",this.showPopup(window.innerWidth/2,window.innerHeight/2,this.messages.record.timer_label))},this.config=t,this.messages=Pi(t.locale??"en"),this.apiClient=new bi(t.projectKey,t.apiUrl,void 0,t.userToken,t.userTokenFn),this.consoleCollector=new ti,this.consoleCollector.start(),this.breadcrumbCollector=new ii,this.breadcrumbCollector.start(),this.buildUI(),t.frustrationDetection!==!1&&(this.frustrationDetector=new I(()=>this.handleFrustration()),this.frustrationDetector.start()),document.addEventListener("keydown",this.handleKeydown,!0)}buildUI(){this.shadow=new Mt(this.config.theme??"auto"),this.tab=new Lt(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 At(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 Rt(this.shadow,this.messages,()=>this.exitAll(),t=>this.handleToolbarModeChange(t)),this.session=this.createSession()}createSession(){return new Ut(this.shadow,this.messages,{onPin:(t,e)=>{this.currentAnnotation=t,this.via="pin",this.showPopup(t.x,t.y,e)},onDrawStroke:()=>this.handleDrawStroke()})}handleToolbarModeChange(t){if(this.mode==="clarifying"){this.toolbar?.setMode(this.via==="record"?"record":"markup");return}if(t==="record"){if(this.mode==="recording")return;this.mode="recording",this.currentAnnotation=null,this.teardownDraw(),this.session?.destroy(),this.session=null,this.recordingManager=new zi,this.recordingManager.start(this.shadow,this.messages,this.handleRecordStop).catch(e=>{console.warn("[MakeThisBetter] Interaction replay unavailable, falling back to markup:",e),this.mode==="recording"&&(this.toolbar?.setMode("markup"),this.handleToolbarModeChange("markup"))})}else this.recordingManager?.destroy(),this.recordingManager=null,this.teardownDraw(),this.session||(this.session=this.createSession()),this.mode="annotating"}handleDrawStroke(){this.mode!=="drawing"&&(this.mode="drawing",this.drawBar=new qt(this.shadow,{messages:this.messages,onUndo:()=>this.handleDrawUndoRedo("undo"),onRedo:()=>this.handleDrawUndoRedo("redo"),onCancel:()=>this.cancelDraw(),onSubmit:t=>this.handleDrawSubmit(t)})),this.refreshDrawBar()}handleDrawUndoRedo(t){t==="undo"?this.session?.undoDraw():this.session?.redoDraw(),this.refreshDrawBar()}refreshDrawBar(){this.session&&this.drawBar?.setUndoRedo(this.session.canUndoDraw(),this.session.canRedoDraw())}cancelDraw(){this.session?.clearDraw(),this.teardownDraw(),this.mode="annotating"}teardownDraw(){this.drawBar?.destroy(),this.drawBar=null}handleDrawSubmit(t){const e=this.session?.getDrawAnnotation();if(!e){this.cancelDraw();return}this.currentAnnotation=e,this.via="draw",this.session?.dismissInteraction(),this.submittingUi=this.drawBar,this.handleSubmit(t||this.messages.annotation.drawing)}showPopup(t,e,r){this.mode="popup",this.lastPopupPos={x:t,y:e},this.teardownDraw(),this.session?.dismissInteraction(),this.popup?.destroy(),this.popup=null,this.dim?.destroy(),this.dim=null,this.dim=new Dt(this.shadow,()=>this.exitAll()),this.popup=new Nt(this.shadow,{targetName:r,x:t,y:e,messages:this.messages,onSubmit:s=>this.handleSubmit(s),onClose:()=>this.exitAll(),onMyFeedback:this.buildMyFeedbackHandler()}),this.submittingUi=this.popup}buildMyFeedbackHandler(){if(!this.config.user&&ki())return async()=>{const t=await this.apiClient.createIdentityToken(Z());!t?.identity_token||!t.board_url||(et(t.board_url),window.open(`${t.board_url}?identity=${encodeURIComponent(t.identity_token)}`,"_blank"))}}async handleSubmit(t){const e=this.submittingUi;if(!e)return;const r=++this.submissionAttempt;e.setLoading(!0),await Oi();const s=this.currentAnnotation,n=this.recordingManager?.getRecording()??void 0,[o,a]=await Promise.all([Ne(s?[s]:[]),Promise.resolve(ui())]),l=xi(t,a,this.consoleCollector.getErrors(),s,this.config.user,n,this.config.user?void 0:Z(),this.config.user?void 0:tt(),this.breadcrumbCollector.getBreadcrumbs());try{const c=await this.apiClient.createSubmissionSession(l,o);if(r!==this.submissionAttempt){await this.apiClient.abandonSubmissionSession(c.id,c.token).catch(()=>{});return}this.activeSubmission=c;const h=this.buildSummaryContext(t,a,s);this.teardownDraw(),this.popup?.destroy(),this.popup=null,this.dim?.destroy(),this.dim=null,this.session?.destroy(),this.session=null,this.recordingManager?.destroy(),this.recordingManager=null,this.submittingUi=null,this.showClarify(c,this.lastPopupPos,h)}catch{if(r!==this.submissionAttempt)return;e.setLoading(!1),e.setError(this.messages.error.submit)}}buildSummaryContext(t,e,r){const s=this.messages.clarify.summary;return{originalDescription:t,element:r?.targetName??this.messages.annotation.element,page:e.page_url,browser:`${e.browser} · ${e.os}`,captured:this.via==="record"?s.recording:s.screenshot}}showClarify(t,e,r){this.mode="clarifying",this.tab?.setActive(!0),this.clarify=new Yt(this.shadow,{submissionSessionId:t.id,submissionToken:t.token,apiClient:this.apiClient,messages:this.messages,summary:r,x:e?.x,y:e?.y,onFinalize:()=>this.finalizeSubmission()})}async finalizeSubmission(){const t=this.activeSubmission;if(!t)throw new Error("No active submission session");const e=this.submissionAttempt,r=await this.apiClient.finalizeSubmissionSession(t.id,t.token);e!==this.submissionAttempt||this.activeSubmission!==t||(this.activeSubmission=null,this.lastHandoff={feedbackId:r.id,boardUrl:r.board_url,identityToken:r.identity_token},r.board_url&&et(r.board_url),this.clarify?.destroy(),this.clarify=null,this.toolbar?.destroy(),this.toolbar=null,this.showSuccess({skipFollowup:t.ai_clarify_available===!1}))}showSuccess(t){this.mode="idle",this.tab?.setActive(!1),this.success=new Gt(this.shadow,this.messages,()=>{this.success?.destroy(),this.success=null},this.buildViewFeedbackHandler(),{...t,emailCapture:this.buildEmailCapture()})}buildEmailCapture(){const{feedbackId:t,identityToken:e}=this.lastHandoff;if(!(!t||!e)&&!tt())return{onSubmit:async r=>{const s=await this.apiClient.updateReporter(t,r,e);return s&&vi(r),s}}}buildViewFeedbackHandler(){const{boardUrl:t,identityToken:e}=this.lastHandoff;if(t){if(e)return()=>{window.open(`${t}?identity=${encodeURIComponent(e)}`,"_blank")};if(this.config.userToken||this.config.userTokenFn)return async()=>{const r=await this.apiClient.resolveUserToken();r&&window.open(`${t}?identity=${encodeURIComponent(r)}`,"_blank")}}}exitAll(){this.submissionAttempt+=1;const t=this.activeSubmission;this.activeSubmission=null,t&&this.apiClient.abandonSubmissionSession(t.id,t.token).catch(()=>{}),this.mode="idle",this.via="pin",this.tab?.setActive(!1),this.teardownDraw(),this.toolbar?.destroy(),this.toolbar=null,this.session?.destroy(),this.session=null,this.dim?.destroy(),this.dim=null,this.popup?.destroy(),this.popup=null,this.clarify?.destroy(),this.clarify=null,this.currentAnnotation=null,this.submittingUi=null,this.recordingManager?.destroy(),this.recordingManager=null}destroy(){document.removeEventListener("keydown",this.handleKeydown,!0),this.exitAll(),this.consoleCollector.stop(),this.breadcrumbCollector.stop(),this.frustrationDetector?.stop(),this.dismissFrustrationPrompt(),this.clarify?.destroy(),this.success?.destroy(),this.tab?.destroy(),this.recordingManager?.destroy(),this.shadow.destroy()}}function Oi(){return new Promise(i=>requestAnimationFrame(()=>setTimeout(i,0)))}let b=null;const wt={init(i){b&&(b.destroy(),b=null),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{b=new st(i)}):b=new st(i)},destroy(){b?.destroy(),b=null}};typeof window<"u"&&(window.MakeThisBetter=wt);exports.MakeThisBetter=wt;
116
141
  //# sourceMappingURL=makethisbetter.cjs.map