@qaiddev/thumbs-embed 1.7.0 → 1.8.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 (36) hide show
  1. package/README.md +32 -21
  2. package/dist/chunks/{annotate-CMq95aXG.js → annotate-D-o8xCV9.js} +23 -17
  3. package/dist/chunks/annotate-D-o8xCV9.js.map +1 -0
  4. package/dist/chunks/dom-DvdtcUS8.js +17 -0
  5. package/dist/chunks/dom-DvdtcUS8.js.map +1 -0
  6. package/dist/chunks/{loader-CYM1rxDH.js → loader-DHtXHt1z.js} +172 -156
  7. package/dist/chunks/loader-DHtXHt1z.js.map +1 -0
  8. package/dist/chunks/modal-CTbqN-h9.js +213 -0
  9. package/dist/chunks/modal-CTbqN-h9.js.map +1 -0
  10. package/dist/chunks/{recording-BVFd_ryf.js → recording-Dx8AX-BC.js} +103 -98
  11. package/dist/chunks/recording-Dx8AX-BC.js.map +1 -0
  12. package/dist/chunks/{screenshot-BkOCLuS2.js → screenshot-DYOKg2bS.js} +2 -2
  13. package/dist/chunks/{screenshot-BkOCLuS2.js.map → screenshot-DYOKg2bS.js.map} +1 -1
  14. package/dist/chunks/{targeting-1pK6nJI9.js → targeting-Dz6z1BYl.js} +2 -2
  15. package/dist/chunks/{targeting-1pK6nJI9.js.map → targeting-Dz6z1BYl.js.map} +1 -1
  16. package/dist/chunks/{video-BOYqf2Im.js → video-Bd_29-rK.js} +76 -71
  17. package/dist/chunks/video-Bd_29-rK.js.map +1 -0
  18. package/dist/embed.d.ts +11 -0
  19. package/dist/icons.d.ts +2 -0
  20. package/dist/index.js +523 -418
  21. package/dist/index.js.map +1 -1
  22. package/dist/loader.js +1 -1
  23. package/dist/modal.d.ts +14 -4
  24. package/dist/qaid.umd.cjs +12 -36
  25. package/dist/qaid.umd.cjs.map +1 -1
  26. package/dist/recording.d.ts +6 -0
  27. package/dist/screenshot.d.ts +1 -1
  28. package/dist/types.d.ts +14 -2
  29. package/dist/video-capture.d.ts +6 -0
  30. package/package.json +1 -1
  31. package/dist/chunks/annotate-CMq95aXG.js.map +0 -1
  32. package/dist/chunks/loader-CYM1rxDH.js.map +0 -1
  33. package/dist/chunks/modal-Br5x7m6f.js +0 -150
  34. package/dist/chunks/modal-Br5x7m6f.js.map +0 -1
  35. package/dist/chunks/recording-BVFd_ryf.js.map +0 -1
  36. package/dist/chunks/video-BOYqf2Im.js.map +0 -1
@@ -1,20 +1,20 @@
1
- import { i as pt, F as bt, T as mt, a as gt, R as vt } from "./annotate-CMq95aXG.js";
2
- const yt = "button{cursor:pointer}.qaid-buttons{display:flex;gap:.5rem}.qaid-buttons.qaid-vertical{flex-direction:column}.qaid-buttons.qaid-auto-container{position:fixed;z-index:50}.qaid-buttons.qaid-auto-container.qaid-bottom-right{bottom:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-bottom-left{bottom:1rem;left:1rem}.qaid-buttons.qaid-auto-container.qaid-top-right{top:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-top-left{top:1rem;left:1rem}.qaid-buttons.qaid-incognito{opacity:0;transition:opacity .2s ease-in-out}.qaid-buttons.qaid-incognito:hover{opacity:1}.qaid-buttons.qaid-dismissed{display:none!important}.qaid-dismiss-btn{width:20px;height:20px;padding:0;border:none;border-radius:50%;background:#0006;color:#fff;display:flex;align-items:center;justify-content:center;align-self:center;opacity:0;transition:opacity .15s,background .15s;cursor:pointer;pointer-events:auto;-webkit-appearance:none;appearance:none}.qaid-dismiss-btn:hover{background:#0009}.qaid-buttons:hover .qaid-dismiss-btn{opacity:1}button.qaid-btn-structural{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;-webkit-appearance:none;appearance:none}.qaid-icon{width:24px;height:24px}.qaid-btn-structural:not(:has(svg)),.qaid-btn:not(:has(svg)){font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-emoji-icon{font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-buttons,.qaid-buttons *,.qaid-modal-container,.qaid-modal-container *{cursor:pointer!important}.qaid-tooltip-wrapper{position:relative}.qaid-tooltip-text{position:fixed;padding:.5rem .75rem;background:#1f2937;color:#fff;font-size:1rem;font-weight:600;border-radius:.5rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:99999}.qaid-tooltip-text.qaid-tooltip-visible{opacity:1}.qaid-targeting-overlay{position:fixed;inset:0;z-index:40;pointer-events:none}.qaid-capture-layer{position:fixed;inset:0;pointer-events:none;z-index:9999}@keyframes qaid-slideDown{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.qaid-vignette{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 30%,rgba(0,0,0,.3) 70%,rgba(0,0,0,.6) 100%);z-index:41}.qaid-crosshair-h,.qaid-crosshair-v{position:fixed;pointer-events:none;z-index:42}.qaid-crosshair-h{left:0;right:0;height:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-crosshair-v{top:0;bottom:0;width:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-type-up .qaid-crosshair-h,.qaid-type-up .qaid-crosshair-v{background:color-mix(in srgb,var(--qaid-positive) 60%,transparent)}.qaid-highlight-box{position:fixed;top:0;left:0;pointer-events:none;z-index:41;display:none;border:3px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:2px;background:color-mix(in srgb,var(--qaid-negative) 8%,transparent);will-change:transform,width,height}.qaid-type-up .qaid-highlight-box{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent);background:color-mix(in srgb,var(--qaid-positive) 8%,transparent)}.qaid-scope{position:fixed;width:80px;height:80px;pointer-events:none;z-index:43;transform:translate(-50%,-50%)}.qaid-scope-ring{position:absolute;inset:10px;border:2px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent)}.qaid-scope-ring-inner{position:absolute;inset:20px;border:1px solid color-mix(in srgb,var(--qaid-negative) 50%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring-inner{border-color:color-mix(in srgb,var(--qaid-positive) 50%,transparent)}.qaid-scope-dot{position:absolute;top:50%;left:50%;width:4px;height:4px;background:var(--qaid-negative);border-radius:50%;transform:translate(-50%,-50%)}.qaid-type-up .qaid-scope-dot{background:var(--qaid-positive)}.qaid-selected-marker{position:fixed;border:3px solid var(--qaid-marker, #6366f1);border-radius:50%;pointer-events:none;z-index:44;animation:qaid-markerPulse 1.5s ease-in-out infinite}@keyframes qaid-markerPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.qaid-backdrop{position:fixed;inset:0;z-index:45;background:#0000004d}.qaid-modal-container{position:fixed;z-index:50;display:flex;flex-direction:column;align-items:flex-start;max-height:calc(100vh - 32px);font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-modal-container.qaid-above{flex-direction:column-reverse}.qaid-modal-arrow{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;position:relative;align-self:flex-start}.qaid-modal-container.qaid-below .qaid-modal-arrow{border-bottom:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-container.qaid-above .qaid-modal-arrow{border-top:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5));width:var(--qaid-modal-width, 400px);max-width:calc(100vw - 32px);max-height:calc(100vh - 60px);overflow-y:auto}.qaid-modal-header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1rem}button.qaid-type-toggle{border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;flex-shrink:0;-webkit-appearance:none;appearance:none}button.qaid-type-toggle:hover{transform:scale(1.1)}button.qaid-type-toggle:not(.qaid-type-toggle-custom){width:2.5rem;height:2.5rem;border-radius:50%}button.qaid-type-toggle:not(.qaid-type-toggle-custom) svg{width:1.25rem;height:1.25rem}button.qaid-type-toggle.qaid-type-up{background:var(--qaid-positive);color:#fff}button.qaid-type-toggle.qaid-type-down{background:var(--qaid-negative);color:#fff}.qaid-type-static{width:2.5rem;height:2.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--qaid-marker, #6366f1);color:var(--qaid-marker-text, white)}.qaid-type-static svg{width:1.25rem;height:1.25rem}.qaid-modal-header-text{flex:1;min-width:0}.qaid-modal-title{font-size:1.125rem;font-weight:700;margin:0 0 .25rem;color:light-dark(#1f2937,#f9fafb)}.qaid-modal-subtitle{color:light-dark(#6b7280,#9ca3af);margin:0;font-size:.875rem}.qaid-textarea{width:100%;height:6rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:1rem;resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-btn-row{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-btn-submit{padding:.5rem 1rem;background:var(--qaid-marker);color:var(--qaid-marker-text, white);border:none;border-radius:.5rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-btn-submit:hover{filter:brightness(.85)}button.qaid-btn-submit:focus{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 30%,transparent)}.qaid-bottom-sheet{position:fixed;bottom:0;left:0;right:0;z-index:50;animation:qaid-slideUpSheet .3s ease-out;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-bottom-sheet-content{background:light-dark(#ffffff,#1f2937);border-radius:1rem 1rem 0 0;padding:1.5rem;padding-bottom:max(1.5rem,env(safe-area-inset-bottom))}.qaid-bottom-sheet-handle{width:36px;height:4px;background:light-dark(rgba(0,0,0,.2),rgba(255,255,255,.2));border-radius:2px;margin:0 auto 1rem}@keyframes qaid-slideUpSheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}button.qaid-btn-record:hover{background:#dc2626;color:#fff}.qaid-recording-indicator{position:fixed;top:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:light-dark(#1f2937,#374151);color:#fff;border-radius:9999px;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:.875rem;font-weight:500;box-shadow:0 4px 12px #0000004d;z-index:99999;animation:qaid-slideDown .2s ease-out}.qaid-recording-dot{width:10px;height:10px;background:#dc2626;border-radius:50%;animation:qaid-dotPulse 1.5s ease-in-out infinite}@keyframes qaid-dotPulse{0%,to{opacity:1}50%{opacity:.3}}.qaid-recording-time{font-variant-numeric:tabular-nums;min-width:2.5rem;text-align:center}button.qaid-recording-stop{padding:.25rem .75rem;background:#dc2626;color:#fff;border:none;border-radius:9999px;font-size:.75rem;font-weight:600;cursor:pointer;transition:background-color .2s;-webkit-appearance:none;appearance:none}button.qaid-recording-stop:hover{background:#b91c1c}.qaid-video-preview{position:fixed;inset:0 0 auto;height:100vh;height:100dvh;display:flex;align-items:center;justify-content:center;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#0009;z-index:99998;animation:qaid-fadeIn .2s ease-out}@keyframes qaid-fadeIn{0%{opacity:0}to{opacity:1}}.qaid-video-preview-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px #00000080;width:560px;max-width:100%;max-height:100%;overflow-y:auto;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-video-preview-box h3{font-size:1.125rem;font-weight:700;margin:0 0 1rem;color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box video{width:100%;max-height:50vh;max-height:50dvh;object-fit:contain;border-radius:.5rem;background:#000;margin-bottom:1rem}.qaid-video-preview-box textarea{width:100%;height:4rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:.875rem;resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-video-preview-actions{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-video-btn{padding:.5rem 1rem;border:none;border-radius:.5rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-video-btn-cancel{background:light-dark(#f3f4f6,#374151);color:light-dark(#374151,#d1d5db)}button.qaid-video-btn-cancel:hover{background:light-dark(#e5e7eb,#4b5563)}button.qaid-video-btn-rerecord{background:light-dark(#fef3c7,#78350f);color:light-dark(#92400e,#fde68a)}button.qaid-video-btn-rerecord:hover{filter:brightness(.9)}button.qaid-video-btn-send{background:var(--qaid-marker);color:var(--qaid-marker-text, white)}button.qaid-video-btn-send:hover{filter:brightness(.85)}button.qaid-video-btn-send:disabled{opacity:.5;cursor:not-allowed}.qaid-video-sending{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:light-dark(#6b7280,#9ca3af)}.qaid-annotate{position:fixed;inset:0;z-index:2147483000;display:flex;flex-direction:column;gap:.75rem;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#000000d9;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px);animation:qaid-fadeIn .2s ease-out}.qaid-annotate-title{margin:0;font-size:1rem;font-weight:700;text-align:center;color:#f9fafb}.qaid-annotate-desc{margin:0;font-size:.8125rem;line-height:1.4;text-align:center;color:#f9fafbbf}.qaid-annotate-stage{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;overflow:auto}.qaid-annotate-canvas{max-width:100%;max-height:100%;object-fit:contain;background:light-dark(#ffffff,#111827);border-radius:.5rem;box-shadow:0 10px 30px #00000080;touch-action:none;cursor:crosshair}.qaid-annotate-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:center;padding:.5rem .75rem;background:light-dark(#ffffff,#1f2937);border-radius:.75rem;box-shadow:0 10px 30px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5))}.qaid-annotate-tools,.qaid-annotate-actions{display:flex;gap:.375rem;align-items:center}button.qaid-annotate-tool,button.qaid-annotate-action{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;min-width:44px;min-height:44px;padding:0 .75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;background:light-dark(#f9fafb,#111827);color:light-dark(#1f2937,#f9fafb);font-family:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;-webkit-appearance:none;appearance:none;transition:background-color .15s,color .15s,border-color .15s,filter .15s}button.qaid-annotate-tool svg,button.qaid-annotate-action svg{width:20px;height:20px}.qaid-annotate-colors{display:flex;gap:.25rem;align-items:center}button.qaid-annotate-swatch{width:28px;height:28px;min-width:28px;padding:0;border-radius:9999px;border:2px solid light-dark(#d1d5db,#4b5563);background:var(--qaid-swatch, #000);cursor:pointer;-webkit-appearance:none;appearance:none;transition:transform .1s,box-shadow .15s,border-color .15s}button.qaid-annotate-swatch:hover{transform:scale(1.12)}button.qaid-annotate-swatch[aria-pressed=true]{border-color:light-dark(#111827,#f9fafb);box-shadow:0 0 0 2px var(--qaid-swatch)}@media(forced-colors:active){button.qaid-annotate-swatch[aria-pressed=true]{outline:2px solid Highlight;outline-offset:1px}}button.qaid-annotate-tool:hover,button.qaid-annotate-action:hover{background:light-dark(#eef2ff,#312e81)}button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{background:var(--qaid-marker, #6366f1);color:var(--qaid-marker-text, #fff);border-color:var(--qaid-marker, #6366f1)}button.qaid-annotate-done:hover{filter:brightness(.9);background:var(--qaid-marker, #6366f1)}button.qaid-annotate-action:disabled{opacity:.45;cursor:not-allowed}@media(forced-colors:active){button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{border:2px solid Highlight}.qaid-annotate-canvas{border:1px solid CanvasText}}button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible{outline:2px solid var(--qaid-marker, #6366f1);outline-offset:2px}.qaid-textarea:focus-visible,button.qaid-btn-submit:focus-visible,.qaid-video-preview-box textarea:focus-visible{outline:2px solid var(--qaid-marker, #6366f1);outline-offset:2px}.qaid-buttons.qaid-incognito:focus-within{opacity:1}.qaid-buttons:focus-within .qaid-dismiss-btn,.qaid-dismiss-btn:focus-visible{opacity:1}.qaid-dismiss-btn{min-width:24px;min-height:24px}button.qaid-recording-stop{min-height:24px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media(forced-colors:active){button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible,.qaid-textarea:focus,button.qaid-btn-submit:focus,.qaid-video-preview-box textarea:focus{outline:2px solid CanvasText;outline-offset:2px}.qaid-selected-marker,.qaid-highlight-box{border-color:Highlight}}.qaid-confirm{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.5rem;padding:.5rem 0}.qaid-confirm-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:9999px;color:#fff;background:var(--qaid-success, #22c55e);margin-bottom:.25rem;animation:qaid-confirm-pop .28s cubic-bezier(.34,1.56,.64,1)}.qaid-confirm-icon .qaid-icon{width:24px;height:24px}.qaid-confirm-title{margin:0;font-size:1rem;font-weight:600;color:var(--qaid-text, #111827)}.qaid-confirm-title:focus-visible{outline:2px solid var(--qaid-primary, #6366f1);outline-offset:3px;border-radius:4px}.qaid-confirm-message{margin:0;font-size:.875rem;color:var(--qaid-text-muted, #6b7280)}.qaid-confirm .qaid-confirm-close{margin-top:.5rem;min-width:96px}@keyframes qaid-confirm-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.qaid-confirm-icon{animation:none}}", wt = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
1
+ import { i as gt, F as vt, T as yt, a as qt, R as xt } from "./annotate-D-o8xCV9.js";
2
+ const wt = "button{cursor:pointer}.qaid-buttons{display:flex;gap:.5rem}.qaid-buttons.qaid-vertical{flex-direction:column}.qaid-buttons.qaid-auto-container{position:fixed;z-index:50}.qaid-buttons.qaid-auto-container.qaid-bottom-right{bottom:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-bottom-left{bottom:1rem;left:1rem}.qaid-buttons.qaid-auto-container.qaid-top-right{top:1rem;right:1rem}.qaid-buttons.qaid-auto-container.qaid-top-left{top:1rem;left:1rem}.qaid-buttons.qaid-incognito{opacity:0;transition:opacity .2s ease-in-out}.qaid-buttons.qaid-incognito:hover{opacity:1}.qaid-buttons.qaid-dismissed{display:none!important}.qaid-dismiss-btn{width:20px;height:20px;padding:0;border:none;border-radius:50%;background:#0006;color:#fff;display:flex;align-items:center;justify-content:center;align-self:center;opacity:0;transition:opacity .15s,background .15s;cursor:pointer;pointer-events:auto;-webkit-appearance:none;appearance:none}.qaid-dismiss-btn:hover{background:#0009}.qaid-buttons:hover .qaid-dismiss-btn{opacity:1}button.qaid-btn-structural{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;-webkit-appearance:none;appearance:none}.qaid-icon{width:24px;height:24px}:where(button.qaid-btn-structural)>svg:where(:not(.qaid-icon):not([width])){width:var(--qaid-icon-size, 24px);height:var(--qaid-icon-size, 24px)}.qaid-btn-structural:not(:has(svg)),.qaid-btn:not(:has(svg)){font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-emoji-icon{font-size:var(--qaid-icon-size, 24px);line-height:1}.qaid-buttons,.qaid-buttons *,.qaid-modal-container,.qaid-modal-container *{cursor:pointer!important}.qaid-tooltip-wrapper{position:relative}.qaid-tooltip-text{position:fixed;padding:.5rem .75rem;background:#1f2937;color:#fff;font-size:var(--qaid-font-size, 16px);font-weight:600;border-radius:.5rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:99999}.qaid-tooltip-text.qaid-tooltip-visible{opacity:1}.qaid-targeting-overlay{position:fixed;inset:0;z-index:40;pointer-events:none}.qaid-capture-layer{position:fixed;inset:0;pointer-events:none;z-index:9999}@keyframes qaid-slideDown{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.qaid-vignette{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 30%,rgba(0,0,0,.3) 70%,rgba(0,0,0,.6) 100%);z-index:41}.qaid-crosshair-h,.qaid-crosshair-v{position:fixed;pointer-events:none;z-index:42}.qaid-crosshair-h{left:0;right:0;height:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-crosshair-v{top:0;bottom:0;width:1px;background:color-mix(in srgb,var(--qaid-negative) 60%,transparent)}.qaid-type-up .qaid-crosshair-h,.qaid-type-up .qaid-crosshair-v{background:color-mix(in srgb,var(--qaid-positive) 60%,transparent)}.qaid-highlight-box{position:fixed;top:0;left:0;pointer-events:none;z-index:41;display:none;border:3px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:2px;background:color-mix(in srgb,var(--qaid-negative) 8%,transparent);will-change:transform,width,height}.qaid-type-up .qaid-highlight-box{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent);background:color-mix(in srgb,var(--qaid-positive) 8%,transparent)}.qaid-scope{position:fixed;width:80px;height:80px;pointer-events:none;z-index:43;transform:translate(-50%,-50%)}.qaid-scope-ring{position:absolute;inset:10px;border:2px solid color-mix(in srgb,var(--qaid-negative) 80%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring{border-color:color-mix(in srgb,var(--qaid-positive) 80%,transparent)}.qaid-scope-ring-inner{position:absolute;inset:20px;border:1px solid color-mix(in srgb,var(--qaid-negative) 50%,transparent);border-radius:50%}.qaid-type-up .qaid-scope-ring-inner{border-color:color-mix(in srgb,var(--qaid-positive) 50%,transparent)}.qaid-scope-dot{position:absolute;top:50%;left:50%;width:4px;height:4px;background:var(--qaid-negative);border-radius:50%;transform:translate(-50%,-50%)}.qaid-type-up .qaid-scope-dot{background:var(--qaid-positive)}.qaid-selected-marker{position:fixed;border:3px solid var(--qaid-marker, #6365f1);border-radius:50%;pointer-events:none;z-index:44;animation:qaid-markerPulse 1.5s ease-in-out infinite}@keyframes qaid-markerPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.qaid-backdrop{position:fixed;inset:0;z-index:45;background:#0000004d}.qaid-modal-container{position:fixed;z-index:50;display:flex;flex-direction:column;align-items:flex-start;max-height:calc(100vh - 32px);font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-modal-container.qaid-above{flex-direction:column-reverse}.qaid-modal-arrow{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;position:relative;align-self:flex-start}.qaid-modal-container.qaid-below .qaid-modal-arrow{border-bottom:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-container.qaid-above .qaid-modal-arrow{border-top:12px solid light-dark(#ffffff,#1f2937)}.qaid-modal-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5));width:var(--qaid-modal-width, 400px);max-width:calc(100vw - 32px);max-height:calc(100vh - 60px);overflow-y:auto}.qaid-modal-header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1rem}button.qaid-type-toggle{border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;flex-shrink:0;-webkit-appearance:none;appearance:none}button.qaid-type-toggle:hover{transform:scale(1.1)}button.qaid-type-toggle:not(.qaid-type-toggle-custom){width:2.5rem;height:2.5rem;border-radius:50%}button.qaid-type-toggle:not(.qaid-type-toggle-custom) svg{width:1.25rem;height:1.25rem}button.qaid-type-toggle.qaid-type-up{background:var(--qaid-positive);color:#fff}button.qaid-type-toggle.qaid-type-down{background:var(--qaid-negative);color:#fff}.qaid-type-static{width:2.5rem;height:2.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--qaid-marker, #6365f1);color:var(--qaid-marker-text, white)}.qaid-type-static svg{width:1.25rem;height:1.25rem}.qaid-modal-header-text{flex:1;min-width:0}.qaid-modal-title{font-size:calc(var(--qaid-font-size, 16px) * 1.125);font-weight:700;margin:0 0 .25rem;color:light-dark(#1f2937,#f9fafb)}.qaid-modal-subtitle{color:light-dark(#6b7280,#9ca3af);margin:0;font-size:calc(var(--qaid-font-size, 16px) * .875)}.qaid-textarea{width:100%;height:6rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:var(--qaid-font-size, 16px);resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-btn-row{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-btn-submit{padding:.5rem 1rem;background:var(--qaid-marker);color:var(--qaid-marker-text, white);border:none;border-radius:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-btn-submit:hover{filter:brightness(.85)}button.qaid-btn-submit:focus{outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 30%,transparent)}.qaid-bottom-sheet{position:fixed;bottom:0;left:0;right:0;z-index:50;animation:qaid-slideUpSheet .3s ease-out;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-bottom-sheet-content{background:light-dark(#ffffff,#1f2937);border-radius:1rem 1rem 0 0;padding:1.5rem;padding-bottom:max(1.5rem,env(safe-area-inset-bottom))}.qaid-bottom-sheet-handle{width:36px;height:4px;background:light-dark(rgba(0,0,0,.2),rgba(255,255,255,.2));border-radius:2px;margin:0 auto 1rem}@keyframes qaid-slideUpSheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}button.qaid-btn-record:hover{background:#dc2626;color:#fff}.qaid-recording-indicator{position:fixed;top:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:light-dark(#1f2937,#374151);color:#fff;border-radius:9999px;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;box-shadow:0 4px 12px #0000004d;z-index:99999;animation:qaid-slideDown .2s ease-out}.qaid-recording-dot{width:10px;height:10px;background:#dc2626;border-radius:50%;animation:qaid-dotPulse 1.5s ease-in-out infinite}@keyframes qaid-dotPulse{0%,to{opacity:1}50%{opacity:.3}}.qaid-recording-time{font-variant-numeric:tabular-nums;min-width:2.5rem;text-align:center}button.qaid-recording-stop{padding:.25rem .75rem;background:#dc2626;color:#fff;border:none;border-radius:9999px;font-size:calc(var(--qaid-font-size, 16px) * .75);font-weight:600;cursor:pointer;transition:background-color .2s;-webkit-appearance:none;appearance:none}button.qaid-recording-stop:hover{background:#b91c1c}.qaid-video-preview{position:fixed;inset:0 0 auto;height:100vh;height:100dvh;display:flex;align-items:center;justify-content:center;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#0009;z-index:99998;animation:qaid-fadeIn .2s ease-out}@keyframes qaid-fadeIn{0%{opacity:0}to{opacity:1}}.qaid-video-preview-box{color-scheme:inherit;background:light-dark(#ffffff,#1f2937);border-radius:1rem;padding:1.5rem;box-shadow:0 25px 50px -12px #00000080;width:560px;max-width:100%;max-height:100%;overflow-y:auto;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px)}.qaid-video-preview-box h3{font-size:calc(var(--qaid-font-size, 16px) * 1.125);font-weight:700;margin:0 0 1rem;color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box video{width:100%;max-height:50vh;max-height:50dvh;object-fit:contain;border-radius:.5rem;background:#000;margin-bottom:1rem}.qaid-video-preview-box textarea{width:100%;height:4rem;padding:.75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;font-family:inherit;font-size:calc(var(--qaid-font-size, 16px) * .875);resize:vertical;margin-bottom:1rem;box-sizing:border-box;background:light-dark(#ffffff,#111827);color:light-dark(#1f2937,#f9fafb)}.qaid-video-preview-box textarea:focus{outline:none;border-color:var(--qaid-marker);box-shadow:0 0 0 3px color-mix(in srgb,var(--qaid-marker) 20%,transparent)}.qaid-video-error{margin:0 0 .75rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;color:light-dark(#b91c1c,#fca5a5)}.qaid-video-preview-actions{display:flex;gap:.5rem;justify-content:flex-end}button.qaid-video-btn{padding:.5rem 1rem;border:none;border-radius:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);font-weight:500;cursor:pointer;transition:background-color .2s,filter .2s;-webkit-appearance:none;appearance:none}button.qaid-video-btn-cancel{background:light-dark(#f3f4f6,#374151);color:light-dark(#374151,#d1d5db)}button.qaid-video-btn-cancel:hover{background:light-dark(#e5e7eb,#4b5563)}button.qaid-video-btn-rerecord{background:light-dark(#fef3c7,#78350f);color:light-dark(#92400e,#fde68a)}button.qaid-video-btn-rerecord:hover{filter:brightness(.9)}button.qaid-video-btn-send{background:var(--qaid-marker);color:var(--qaid-marker-text, white)}button.qaid-video-btn-send:hover{filter:brightness(.85)}button.qaid-video-btn-send:disabled{opacity:.5;cursor:not-allowed}.qaid-video-sending{display:flex;align-items:center;gap:.5rem;font-size:calc(var(--qaid-font-size, 16px) * .875);color:light-dark(#6b7280,#9ca3af)}.qaid-annotate{position:fixed;inset:0;z-index:2147483000;display:flex;flex-direction:column;gap:.75rem;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));box-sizing:border-box;background:#000000d9;font-family:var(--qaid-font-family, system-ui, -apple-system, sans-serif);font-size:var(--qaid-font-size, 16px);animation:qaid-fadeIn .2s ease-out}.qaid-annotate-title{margin:0;font-size:var(--qaid-font-size, 16px);font-weight:700;text-align:center;color:#f9fafb}.qaid-annotate-desc{margin:0;font-size:calc(var(--qaid-font-size, 16px) * .8125);line-height:1.4;text-align:center;color:#f9fafbbf}.qaid-annotate-stage{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;overflow:auto}.qaid-annotate-canvas{max-width:100%;max-height:100%;object-fit:contain;background:light-dark(#ffffff,#111827);border-radius:.5rem;box-shadow:0 10px 30px #00000080;touch-action:none;cursor:crosshair}.qaid-annotate-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:center;padding:.5rem .75rem;background:light-dark(#ffffff,#1f2937);border-radius:.75rem;box-shadow:0 10px 30px light-dark(rgba(0,0,0,.25),rgba(0,0,0,.5))}.qaid-annotate-tools,.qaid-annotate-actions{display:flex;gap:.375rem;align-items:center}button.qaid-annotate-tool,button.qaid-annotate-action{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;min-width:44px;min-height:44px;padding:0 .75rem;border:1px solid light-dark(#d1d5db,#374151);border-radius:.5rem;background:light-dark(#f9fafb,#111827);color:light-dark(#1f2937,#f9fafb);font-family:inherit;font-size:calc(var(--qaid-font-size, 16px) * .8125);font-weight:600;cursor:pointer;-webkit-appearance:none;appearance:none;transition:background-color .15s,color .15s,border-color .15s,filter .15s}button.qaid-annotate-tool svg,button.qaid-annotate-action svg{width:20px;height:20px}.qaid-annotate-colors{display:flex;gap:.25rem;align-items:center}button.qaid-annotate-swatch{width:28px;height:28px;min-width:28px;padding:0;border-radius:9999px;border:2px solid light-dark(#d1d5db,#4b5563);background:var(--qaid-swatch, #000);cursor:pointer;-webkit-appearance:none;appearance:none;transition:transform .1s,box-shadow .15s,border-color .15s}button.qaid-annotate-swatch:hover{transform:scale(1.12)}button.qaid-annotate-swatch[aria-pressed=true]{border-color:light-dark(#111827,#f9fafb);box-shadow:0 0 0 2px var(--qaid-swatch)}@media(forced-colors:active){button.qaid-annotate-swatch[aria-pressed=true]{outline:2px solid Highlight;outline-offset:1px}}button.qaid-annotate-tool:hover,button.qaid-annotate-action:hover{background:light-dark(#eef2ff,#312e81)}button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{background:var(--qaid-marker, #6365f1);color:var(--qaid-marker-text, #fff);border-color:var(--qaid-marker, #6365f1)}button.qaid-annotate-done:hover{filter:brightness(.9);background:var(--qaid-marker, #6365f1)}button.qaid-annotate-action:disabled{opacity:.45;cursor:not-allowed}@media(forced-colors:active){button.qaid-annotate-tool[aria-pressed=true],button.qaid-annotate-done{border:2px solid Highlight}.qaid-annotate-canvas{border:1px solid CanvasText}}button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible{outline:2px solid var(--qaid-marker, #6365f1);outline-offset:2px}.qaid-textarea:focus-visible,button.qaid-btn-submit:focus-visible,.qaid-video-preview-box textarea:focus-visible{outline:2px solid var(--qaid-marker, #6365f1);outline-offset:2px}.qaid-buttons.qaid-incognito:focus-within{opacity:1}.qaid-buttons:focus-within .qaid-dismiss-btn,.qaid-dismiss-btn:focus-visible{opacity:1}.qaid-dismiss-btn{min-width:24px;min-height:24px}button.qaid-recording-stop{min-height:24px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media(forced-colors:active){button:focus-visible,textarea:focus-visible,a:focus-visible,[tabindex]:focus-visible,[role=button]:focus-visible,.qaid-textarea:focus,button.qaid-btn-submit:focus,.qaid-video-preview-box textarea:focus{outline:2px solid CanvasText;outline-offset:2px}.qaid-selected-marker,.qaid-highlight-box{border-color:Highlight}}.qaid-confirm{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.5rem;padding:.5rem 0}.qaid-confirm-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:9999px;color:#fff;background:var(--qaid-success, #22c55e);margin-bottom:.25rem;animation:qaid-confirm-pop .28s cubic-bezier(.34,1.56,.64,1)}.qaid-confirm-icon .qaid-icon{width:24px;height:24px}.qaid-confirm-error .qaid-confirm-icon{background:var(--qaid-error, #dc2626)}.qaid-confirm-title{margin:0;font-size:var(--qaid-font-size, 16px);font-weight:600;color:var(--qaid-text, light-dark(#111827, #f9fafb))}.qaid-confirm-title:focus-visible{outline:2px solid var(--qaid-primary, #6365f1);outline-offset:3px;border-radius:4px}.qaid-confirm-message{margin:0;font-size:calc(var(--qaid-font-size, 16px) * .875);color:var(--qaid-text-muted, light-dark(#6b7280, #9ca3af))}.qaid-confirm .qaid-confirm-close{margin-top:.5rem;min-width:96px}@keyframes qaid-confirm-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.qaid-confirm-icon{animation:none}}", kt = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
3
3
  let b = 0;
4
- const qt = "button.qaid-btn{width:var(--qaid-btn-size);height:var(--qaid-btn-size);border-radius:50%;border:none;background:#f3f4f6;color:#374151;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);transition:background-color .2s,color .2s,transform .2s;-webkit-appearance:none;appearance:none;--qaid-hover-up-bg:var(--qaid-positive);--qaid-hover-up-color:#fff;--qaid-hover-down-bg:var(--qaid-negative);--qaid-hover-down-color:#fff}button.qaid-btn:hover{transform:scale(1.05)}button.qaid-btn-up:hover{background:var(--qaid-hover-up-bg);color:var(--qaid-hover-up-color)}button.qaid-btn-down:hover{background:var(--qaid-hover-down-bg);color:var(--qaid-hover-down-color)}button.qaid-btn-feedback:hover{background:var(--qaid-marker,#6366f1);color:var(--qaid-marker-text,#fff)}button.qaid-btn svg{width:var(--qaid-icon-size);height:var(--qaid-icon-size)}", xt = {
4
+ const Ct = "button.qaid-btn{width:var(--qaid-btn-size);height:var(--qaid-btn-size);border-radius:50%;border:none;background:#f3f4f6;color:#374151;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);transition:background-color .2s,color .2s,transform .2s;-webkit-appearance:none;appearance:none;--qaid-hover-up-bg:var(--qaid-positive);--qaid-hover-up-color:#fff;--qaid-hover-down-bg:var(--qaid-negative);--qaid-hover-down-color:#fff}button.qaid-btn:hover{transform:scale(1.05)}button.qaid-btn-up:hover{background:var(--qaid-hover-up-bg);color:var(--qaid-hover-up-color)}button.qaid-btn-down:hover{background:var(--qaid-hover-down-bg);color:var(--qaid-hover-down-color)}button.qaid-btn-feedback:hover{background:var(--qaid-marker,#6365f1);color:var(--qaid-marker-text,#fff)}button.qaid-btn svg{width:var(--qaid-icon-size);height:var(--qaid-icon-size)}", St = {
5
5
  small: 36,
6
6
  medium: 48,
7
7
  large: 64
8
- }, kt = {
8
+ }, At = {
9
9
  small: 18,
10
10
  medium: 24,
11
11
  large: 32
12
12
  };
13
- function Ct(e, t, i) {
13
+ function Tt(e, t, i) {
14
14
  const [o, r, n] = [e, t, i].map((a) => (a = a / 255, a <= 0.03928 ? a / 12.92 : Math.pow((a + 0.055) / 1.055, 2.4)));
15
15
  return 0.2126 * o + 0.7152 * r + 0.0722 * n;
16
16
  }
17
- function St(e) {
17
+ function Et(e) {
18
18
  if (e.startsWith("#")) {
19
19
  const i = e.slice(1), o = i.length === 3 ? i.split("").map((n) => n + n).join("") : i, r = parseInt(o, 16);
20
20
  return {
@@ -30,21 +30,21 @@ function St(e) {
30
30
  b: parseInt(t[3])
31
31
  } : null;
32
32
  }
33
- function At(e) {
34
- const t = St(e);
35
- return t && Ct(t.r, t.g, t.b) > 0.4 ? "black" : "white";
33
+ function It(e) {
34
+ const t = Et(e);
35
+ return t && Tt(t.r, t.g, t.b) > 0.4 ? "black" : "white";
36
36
  }
37
- function Tt(e = {}) {
37
+ function zt(e = {}) {
38
38
  const {
39
39
  positiveColor: t = "rgb(0, 200, 83)",
40
40
  negativeColor: i = "rgb(255, 0, 0)",
41
- markerColor: o = "#6366f1",
41
+ markerColor: o = "#6365f1",
42
42
  buttonSize: r = "medium",
43
43
  modalWidth: n = 400,
44
44
  backdropOpacity: a = 0.3,
45
45
  fontFamily: l = "system-ui, -apple-system, sans-serif",
46
46
  fontSize: c = 16
47
- } = e, d = xt[r], s = kt[r], u = At(o);
47
+ } = e, d = St[r], s = At[r], u = It(o);
48
48
  return {
49
49
  "--qaid-positive": t,
50
50
  "--qaid-negative": i,
@@ -58,22 +58,22 @@ function Tt(e = {}) {
58
58
  "--qaid-font-size": `${c}px`
59
59
  };
60
60
  }
61
- function Et(e, t) {
61
+ function Dt(e, t) {
62
62
  for (const [i, o] of Object.entries(t))
63
63
  e.style.setProperty(i, o);
64
64
  }
65
- function U() {
66
- return yt + qt;
65
+ function _() {
66
+ return wt + Ct;
67
67
  }
68
- function It() {
68
+ function Ht() {
69
69
  if (b++, b > 1) return;
70
70
  const e = document.createElement("style");
71
- e.id = "qaid-styles", e.textContent = wt, document.head.appendChild(e);
71
+ e.id = "qaid-styles", e.textContent = kt, document.head.appendChild(e);
72
72
  }
73
- function Dt() {
73
+ function Lt() {
74
74
  b <= 0 || (b--, b === 0 && document.getElementById("qaid-styles")?.remove());
75
75
  }
76
- const V = "data-qaid-a11y-live", Ht = "position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;", zt = [
76
+ const K = "data-qaid-a11y-live", Mt = "position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;", Bt = [
77
77
  "a[href]",
78
78
  "button",
79
79
  "input",
@@ -81,25 +81,25 @@ const V = "data-qaid-a11y-live", Ht = "position:absolute;width:1px;height:1px;ma
81
81
  "select",
82
82
  "[tabindex]"
83
83
  ].join(",");
84
- function Lt(e) {
84
+ function Ot(e) {
85
85
  return e.ownerDocument || document;
86
86
  }
87
- function Mt(e, t) {
87
+ function Rt(e, t) {
88
88
  const i = t ? "assertive" : "polite", o = e.querySelector(
89
- `[${V}="${i}"]`
89
+ `[${K}="${i}"]`
90
90
  );
91
91
  if (o) return o;
92
- const n = Lt(e).createElement("div");
93
- return n.setAttribute(V, i), n.setAttribute("role", t ? "alert" : "status"), n.setAttribute("aria-live", t ? "assertive" : "polite"), n.setAttribute("aria-atomic", "true"), n.style.cssText = Ht, e.appendChild(n), n;
92
+ const n = Ot(e).createElement("div");
93
+ return n.setAttribute(K, i), n.setAttribute("role", t ? "alert" : "status"), n.setAttribute("aria-live", t ? "assertive" : "polite"), n.setAttribute("aria-atomic", "true"), n.style.cssText = Mt, e.appendChild(n), n;
94
94
  }
95
- function Bt(e, t, i = {}) {
96
- const o = Mt(e, !!i.assertive);
95
+ function Pt(e, t, i = {}) {
96
+ const o = Rt(e, !!i.assertive);
97
97
  o.textContent = "", o.textContent = t;
98
98
  }
99
- function Ot(e) {
99
+ function Ft(e) {
100
100
  return e.hasAttribute("disabled") ? !0 : e.disabled === !0;
101
101
  }
102
- function Rt(e) {
102
+ function Ut(e) {
103
103
  let t = e;
104
104
  for (; t; ) {
105
105
  if (t.hasAttribute("hidden")) return !0;
@@ -110,52 +110,52 @@ function Rt(e) {
110
110
  }
111
111
  return !1;
112
112
  }
113
- function _(e) {
113
+ function $(e) {
114
114
  return Array.from(
115
- e.querySelectorAll(zt)
116
- ).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") || Ot(i) || Rt(i)));
115
+ e.querySelectorAll(Bt)
116
+ ).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") || Ft(i) || Ut(i)));
117
117
  }
118
- function j(e) {
118
+ function Y(e) {
119
119
  let t = e.activeElement;
120
120
  for (; t && t.shadowRoot && t.shadowRoot.activeElement; )
121
121
  t = t.shadowRoot.activeElement;
122
122
  return t instanceof HTMLElement ? t : null;
123
123
  }
124
- function Pt(e) {
124
+ function Vt(e) {
125
125
  const t = e.ownerDocument || document;
126
126
  let i = !1;
127
127
  const o = (n) => {
128
128
  if (n.key !== "Tab") return;
129
- const a = _(e);
129
+ const a = $(e);
130
130
  if (a.length === 0) {
131
131
  n.preventDefault(), e.focus();
132
132
  return;
133
133
  }
134
- const l = a[0], c = a[a.length - 1], d = j(t), s = d ? a.indexOf(d) !== -1 : !1;
134
+ const l = a[0], c = a[a.length - 1], d = Y(t), s = d ? a.indexOf(d) !== -1 : !1;
135
135
  n.shiftKey ? (!s || d === l) && (n.preventDefault(), c.focus()) : (!s || d === c) && (n.preventDefault(), l.focus());
136
136
  };
137
137
  e.addEventListener("keydown", o);
138
- const r = _(e);
138
+ const r = $(e);
139
139
  return r.length > 0 ? r[0].focus() : (e.hasAttribute("tabindex") || (e.setAttribute("tabindex", "-1"), i = !0), e.focus()), {
140
140
  release() {
141
141
  e.removeEventListener("keydown", o), i && (e.removeAttribute("tabindex"), i = !1);
142
142
  }
143
143
  };
144
144
  }
145
- function Ft() {
146
- return j(document);
145
+ function _t() {
146
+ return Y(document);
147
147
  }
148
- function Ut(e) {
148
+ function Kt(e) {
149
149
  if (!(!e || typeof e.focus != "function"))
150
150
  try {
151
151
  e.focus();
152
152
  } catch {
153
153
  }
154
154
  }
155
- function Vt(e, t = {}) {
155
+ function $t(e, t = {}) {
156
156
  e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "true"), t.labelledbyId && e.setAttribute("aria-labelledby", t.labelledbyId), t.describedbyId && e.setAttribute("aria-describedby", t.describedbyId), t.label && e.setAttribute("aria-label", t.label);
157
157
  }
158
- function _t(e, t) {
158
+ function Nt(e, t) {
159
159
  let i = e;
160
160
  for (; i && i !== t; ) {
161
161
  const o = i.parentNode;
@@ -169,11 +169,11 @@ function _t(e, t) {
169
169
  }
170
170
  return null;
171
171
  }
172
- function Kt(e) {
172
+ function jt(e) {
173
173
  const i = (e.ownerDocument || document).body;
174
174
  if (!i) return () => {
175
175
  };
176
- const o = _t(e, i), r = [];
176
+ const o = Nt(e, i), r = [];
177
177
  return Array.from(i.children).forEach((n) => {
178
178
  if (!(n instanceof HTMLElement) || o && n === o) return;
179
179
  const a = n.inert === !0, l = n.getAttribute("aria-hidden");
@@ -185,14 +185,14 @@ function Kt(e) {
185
185
  }
186
186
  };
187
187
  }
188
- const Q = {
188
+ const X = {
189
189
  width: 400,
190
190
  height: 280,
191
191
  arrowHeight: 12,
192
192
  gap: 8,
193
193
  viewportPadding: 16
194
194
  };
195
- function Nt(e, t, i, o, r) {
195
+ function Qt(e, t, i, o, r) {
196
196
  const n = e.y, a = t - (e.y + e.height);
197
197
  if (a >= i + o)
198
198
  return {
@@ -211,22 +211,22 @@ function Nt(e, t, i, o, r) {
211
211
  t - i - r
212
212
  ) : c = Math.max(r, e.y - i - o), { top: c, position: l };
213
213
  }
214
- function $t(e, t, i, o) {
214
+ function Wt(e, t, i, o) {
215
215
  let n = e.x + e.width / 2 - i / 2;
216
216
  return n = Math.max(o, Math.min(n, t - i - o)), n;
217
217
  }
218
- function jt(e, t, i, o = 24, r = 24) {
218
+ function Yt(e, t, i, o = 24, r = 24) {
219
219
  const a = e.clickX - t - r / 2;
220
220
  return Math.max(o, Math.min(a, i - o - r / 2));
221
221
  }
222
- function Qt(e, t, i, o = Q) {
223
- const r = o.height + o.arrowHeight, n = Nt(
222
+ function Xt(e, t, i, o = X) {
223
+ const r = o.height + o.arrowHeight, n = Qt(
224
224
  e,
225
225
  i,
226
226
  r,
227
227
  o.gap,
228
228
  o.viewportPadding
229
- ), a = $t(
229
+ ), a = Wt(
230
230
  e,
231
231
  t,
232
232
  o.width,
@@ -238,15 +238,15 @@ function Qt(e, t, i, o = Q) {
238
238
  position: n.position
239
239
  };
240
240
  }
241
- function Wt(e, t, i, o = {}) {
241
+ function Gt(e, t, i, o = {}) {
242
242
  const r = o.gap ?? 8;
243
243
  let n = e.bottom + r;
244
244
  n + t.height > i.height - r && (n = e.top - t.height - r);
245
245
  let a = e.left;
246
246
  return a < r ? a = r : a + t.width > i.width - r && (a = i.width - t.width - r), n < r ? n = r : n + t.height > i.height - r && (n = i.height - t.height - r), { top: n, left: a };
247
247
  }
248
- function ue(e, t, i, o = Q) {
249
- const r = Qt(e, t, i, o), n = jt(
248
+ function pe(e, t, i, o = X) {
249
+ const r = Xt(e, t, i, o), n = Yt(
250
250
  e,
251
251
  r.left,
252
252
  o.width
@@ -256,15 +256,15 @@ function ue(e, t, i, o = Q) {
256
256
  arrow: { left: n }
257
257
  };
258
258
  }
259
- const Yt = 20;
260
- function Xt(e) {
259
+ const Jt = 20;
260
+ function Zt(e) {
261
261
  const t = [], i = console.error, o = console.warn, r = console.log, n = (a, l) => {
262
262
  const c = {
263
263
  message: l.map((d) => String(d)).join(" "),
264
264
  timestamp: Date.now(),
265
265
  level: a
266
266
  };
267
- t.length >= Yt && t.shift(), t.push(c), e && e(c);
267
+ t.length >= Jt && t.shift(), t.push(c), e && e(c);
268
268
  };
269
269
  return console.error = function(...a) {
270
270
  n("error", a), i.apply(console, a);
@@ -279,7 +279,7 @@ function Xt(e) {
279
279
  }
280
280
  };
281
281
  }
282
- const Gt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Jt = (e) => (
282
+ const te = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", ee = (e) => (
283
283
  // The URL is a runtime value, not a static specifier — keep Vite from
284
284
  // trying to analyze/bundle it.
285
285
  import(
@@ -287,19 +287,19 @@ const Gt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Jt =
287
287
  e
288
288
  )
289
289
  );
290
- let Zt = Jt, p = null, x = null;
291
- function te(e) {
292
- return p && x === e || (x = e, p = Promise.resolve(Zt(e)).then((t) => {
290
+ let ie = ee, p = null, w = null;
291
+ function oe(e) {
292
+ return p && w === e || (w = e, p = Promise.resolve(ie(e)).then((t) => {
293
293
  const i = t;
294
294
  if (!i || typeof i.QaidQuests != "function")
295
295
  throw new Error("quests module has no QaidQuests export");
296
296
  return i;
297
297
  }).catch((t) => {
298
- throw p = null, x = null, t;
298
+ throw p = null, w = null, t;
299
299
  })), p;
300
300
  }
301
- async function ee(e) {
302
- const t = await te(e.moduleUrl), i = e.base.replace(/\/+$/, ""), o = e.feedbackId != null ? { feedbackId: e.feedbackId } : void 0;
301
+ async function ae(e) {
302
+ const t = await oe(e.moduleUrl), i = e.base.replace(/\/+$/, ""), o = e.feedbackId != null ? { feedbackId: e.feedbackId } : void 0;
303
303
  return new t.QaidQuests({
304
304
  endpoint: `${i}/responses`,
305
305
  configUrl: `${i}/${encodeURIComponent(e.questId)}/definition`,
@@ -308,7 +308,7 @@ async function ee(e) {
308
308
  onClose: e.onClose
309
309
  });
310
310
  }
311
- const K = "qaid_visitor_id", N = "qaid_hide_feedback", ie = [
311
+ const N = "qaid_visitor_id", j = "qaid_hide_feedback", ne = [
312
312
  "#ef4444",
313
313
  "#f59e0b",
314
314
  "#22c55e",
@@ -316,34 +316,46 @@ const K = "qaid_visitor_id", N = "qaid_hide_feedback", ie = [
316
316
  "#111827",
317
317
  "#ffffff"
318
318
  ];
319
- function oe() {
319
+ function re() {
320
320
  return typeof window.matchMedia == "function" && window.matchMedia("(pointer: coarse)").matches;
321
321
  }
322
322
  function k(e) {
323
- return e ? `${N}_${e}` : N;
323
+ return e ? `${j}_${e}` : j;
324
324
  }
325
- function ae(e) {
325
+ function se(e) {
326
326
  try {
327
327
  return localStorage.getItem(k(e)) === "1";
328
328
  } catch {
329
329
  return !1;
330
330
  }
331
331
  }
332
- function $(e, t = !0) {
332
+ function Q(e, t = !0) {
333
333
  try {
334
334
  t ? localStorage.setItem(k(e), "1") : localStorage.removeItem(k(e));
335
335
  } catch {
336
336
  }
337
337
  }
338
- function ne() {
338
+ function W() {
339
+ const e = typeof crypto < "u" ? crypto : void 0;
340
+ if (e && typeof e.randomUUID == "function") return e.randomUUID();
341
+ const t = new Uint8Array(16);
342
+ if (e && typeof e.getRandomValues == "function")
343
+ e.getRandomValues(t);
344
+ else
345
+ for (let o = 0; o < t.length; o++) t[o] = Math.floor(Math.random() * 256);
346
+ t[6] = t[6] & 15 | 64, t[8] = t[8] & 63 | 128;
347
+ const i = Array.from(t, (o) => o.toString(16).padStart(2, "0")).join("");
348
+ return `${i.slice(0, 8)}-${i.slice(8, 12)}-${i.slice(12, 16)}-${i.slice(16, 20)}-${i.slice(20)}`;
349
+ }
350
+ function de() {
339
351
  try {
340
- let e = localStorage.getItem(K);
341
- return e || (e = crypto.randomUUID(), localStorage.setItem(K, e)), e;
352
+ let e = localStorage.getItem(N);
353
+ return e || (e = W(), localStorage.setItem(N, e)), e;
342
354
  } catch {
343
- return crypto.randomUUID();
355
+ return W();
344
356
  }
345
357
  }
346
- class re {
358
+ class le {
347
359
  config;
348
360
  state = "IDLE";
349
361
  feedbackData = {
@@ -432,7 +444,7 @@ class re {
432
444
  colors: {
433
445
  positive: t.colors?.positive ?? "rgb(0, 200, 83)",
434
446
  negative: t.colors?.negative ?? "rgb(255, 0, 0)",
435
- marker: t.colors?.marker ?? "#6366f1"
447
+ marker: t.colors?.marker ?? "#6365f1"
436
448
  },
437
449
  buttonSize: t.buttonSize ?? "medium",
438
450
  text: {
@@ -449,7 +461,9 @@ class re {
449
461
  feedbackLabel: t.text?.feedbackLabel ?? "Send feedback",
450
462
  confirmationTitle: t.text?.confirmationTitle ?? "Thank you!",
451
463
  confirmationMessage: t.text?.confirmationMessage ?? "Your feedback has been received.",
452
- confirmationClose: t.text?.confirmationClose ?? "Close"
464
+ confirmationClose: t.text?.confirmationClose ?? "Close",
465
+ errorTitle: t.text?.errorTitle ?? "Message not sent",
466
+ errorMessage: t.text?.errorMessage ?? "Something went wrong, so we did not get your message. Please try again later."
453
467
  },
454
468
  hideConfirmation: t.hideConfirmation ?? !1,
455
469
  modalWidth: t.modalWidth ?? 400,
@@ -458,8 +472,8 @@ class re {
458
472
  fontSize: t.fontSize ?? 16,
459
473
  captureScreenshot: t.captureScreenshot ?? !1,
460
474
  annotate: t.annotate ?? !0,
461
- annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6366f1",
462
- annotationPalette: t.annotationPalette ?? ie,
475
+ annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6365f1",
476
+ annotationPalette: t.annotationPalette ?? ne,
463
477
  screenshotMethod: t.screenshotMethod ?? "permission",
464
478
  screenshotOptions: {
465
479
  quality: t.screenshotOptions?.quality ?? 0.8,
@@ -486,12 +500,12 @@ class re {
486
500
  video: t.quests?.video ?? "",
487
501
  // Quest service reuses the feedback API key unless overridden.
488
502
  apiKey: t.quests?.apiKey ?? t.apiKey ?? "",
489
- moduleUrl: t.quests?.moduleUrl ?? Gt
503
+ moduleUrl: t.quests?.moduleUrl ?? te
490
504
  }
491
- }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = ne(), this.init();
505
+ }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = de(), this.init();
492
506
  }
493
507
  applyVars(t) {
494
- Et(t, this.cssVars);
508
+ Dt(t, this.cssVars);
495
509
  }
496
510
  /**
497
511
  * Announce a message via the shared visually-hidden live regions.
@@ -501,7 +515,7 @@ class re {
501
515
  */
502
516
  announceMsg(t, i = !1) {
503
517
  const o = this.overlayShadowRoot ?? this.shadowRoot;
504
- o && Bt(o, t, { assertive: i });
518
+ o && Pt(o, t, { assertive: i });
505
519
  }
506
520
  /**
507
521
  * Turn a transient surface into an accessible modal dialog: save the
@@ -509,16 +523,16 @@ class re {
509
523
  * background. Paired with closeDialogA11y() on every close path.
510
524
  */
511
525
  openDialogA11y(t, i) {
512
- this.dialogTrigger = Ft(), Vt(t, i), this.dialogTrap = Pt(t), this.dialogRestoreInert = Kt(t);
526
+ this.dialogTrigger = _t(), $t(t, i), this.dialogTrap = Vt(t), this.dialogRestoreInert = jt(t);
513
527
  }
514
528
  closeDialogA11y() {
515
- this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Ut(this.dialogTrigger), this.dialogTrigger = null;
529
+ this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Kt(this.dialogTrigger), this.dialogTrigger = null;
516
530
  }
517
531
  clearActiveThumb() {
518
532
  this.activeThumbBtn && (this.activeThumbBtn.setAttribute("aria-pressed", "false"), this.activeThumbBtn = null);
519
533
  }
520
534
  init() {
521
- It(), this.cssVars = Tt({
535
+ Ht(), this.cssVars = zt({
522
536
  positiveColor: this.config.colors.positive,
523
537
  negativeColor: this.config.colors.negative,
524
538
  markerColor: this.config.colors.marker,
@@ -527,7 +541,7 @@ class re {
527
541
  backdropOpacity: this.config.backdropOpacity,
528
542
  fontFamily: this.config.fontFamily,
529
543
  fontSize: this.config.fontSize
530
- }), !this.config.hideDismiss && ae(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = Xt((t) => {
544
+ }), !this.config.hideDismiss && se(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = Zt((t) => {
531
545
  this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
532
546
  }), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom(), (this.config.captureVideo && this.videoSupported() || this.config.captureScreenshot) && this.schedulePrewarm(() => {
533
547
  this.config.captureVideo && this.videoSupported() && this.prewarmVideo(), this.config.captureScreenshot && this.prewarmScreenshot();
@@ -540,13 +554,13 @@ class re {
540
554
  * swallowed — a failed preload just falls back to an on-demand load.
541
555
  */
542
556
  prewarmVideo() {
543
- this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-BVFd_ryf.js").catch(() => {
544
- }), import("./video-BOYqf2Im.js").catch(() => {
557
+ this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-Dx8AX-BC.js").catch(() => {
558
+ }), import("./video-Bd_29-rK.js").catch(() => {
545
559
  }));
546
560
  }
547
561
  prewarmScreenshot() {
548
- this.screenshotPrewarmed || (this.screenshotPrewarmed = !0, (this.shouldCaptureViaDom() ? import("./screenshot-dom-CME7tYRE.js") : import("./screenshot-BkOCLuS2.js")).catch(() => {
549
- }), this.config.annotate && import("./annotate-CMq95aXG.js").then((t) => t.d).catch(() => {
562
+ this.screenshotPrewarmed || (this.screenshotPrewarmed = !0, (this.shouldCaptureViaDom() ? import("./screenshot-dom-CME7tYRE.js") : import("./screenshot-DYOKg2bS.js")).catch(() => {
563
+ }), this.config.annotate && import("./annotate-D-o8xCV9.js").then((t) => t.d).catch(() => {
550
564
  }));
551
565
  }
552
566
  /** Run fn when the main thread is idle; cancelled by destroy(). */
@@ -575,7 +589,7 @@ class re {
575
589
  }), this.domObserver.observe(document.body, { childList: !0 });
576
590
  }
577
591
  checkMobile() {
578
- this.isMobile = pt();
592
+ this.isMobile = gt();
579
593
  }
580
594
  handleResize() {
581
595
  this.checkMobile();
@@ -585,7 +599,7 @@ class re {
585
599
  let t = null;
586
600
  this.config.container && (t = document.querySelector(this.config.container)), t ? (t.appendChild(this.shadowHost), this.isUserProvidedContainer = !0, this.config.hideDismiss = !0) : (this.shadowHost.style.position = "fixed", this.shadowHost.style.display = "block", this.shadowHost.style.inset = "0", this.shadowHost.style.pointerEvents = "none", this.shadowHost.style.zIndex = String(this.config.zIndex), document.body.appendChild(this.shadowHost)), this.shadowRoot = this.shadowHost.attachShadow({ mode: "open" });
587
601
  const i = document.createElement("style");
588
- if (i.textContent = U(), this.shadowRoot.appendChild(i), this.config.css) {
602
+ if (i.textContent = _(), this.shadowRoot.appendChild(i), this.config.css) {
589
603
  const d = document.createElement("style");
590
604
  d.textContent = this.config.css, this.shadowRoot.appendChild(d);
591
605
  }
@@ -609,20 +623,20 @@ class re {
609
623
  const d = document.createElement("div");
610
624
  d.className = "qaid-tooltip-wrapper";
611
625
  const s = document.createElement("button");
612
- s.type = "button", s.className = r ? `${n} qaid-btn-feedback` : "qaid-btn qaid-btn-feedback", s.setAttribute("aria-label", this.config.text.feedbackLabel), s.innerHTML = this.config.feedbackIcon || bt, s.addEventListener("click", (u) => this.handleThumbClick("neutral", u.currentTarget, u)), s.addEventListener("mouseenter", () => {
626
+ s.type = "button", s.className = r ? `${n} qaid-btn-feedback` : "qaid-btn qaid-btn-feedback", s.setAttribute("aria-label", this.config.text.feedbackLabel), s.innerHTML = this.config.feedbackIcon || vt, s.addEventListener("click", (u) => this.handleThumbClick("neutral", u.currentTarget, u)), s.addEventListener("mouseenter", () => {
613
627
  this.prewarmTargeting(), this.showTooltip(s);
614
628
  }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s), this.buttonsContainer.appendChild(d);
615
629
  } else if (!this.config.hideThumbs) {
616
630
  const d = document.createElement("div");
617
631
  d.className = "qaid-tooltip-wrapper";
618
632
  const s = document.createElement("button");
619
- s.type = "button", s.className = r ? `${n} qaid-btn-up` : "qaid-btn qaid-btn-up", s.setAttribute("aria-label", this.config.text.positiveLabel), s.innerHTML = this.config.positiveIcon || mt, s.addEventListener("click", (f) => this.handleThumbClick("up", f.currentTarget, f)), s.addEventListener("mouseenter", () => {
633
+ s.type = "button", s.className = r ? `${n} qaid-btn-up` : "qaid-btn qaid-btn-up", s.setAttribute("aria-label", this.config.text.positiveLabel), s.innerHTML = this.config.positiveIcon || yt, s.addEventListener("click", (f) => this.handleThumbClick("up", f.currentTarget, f)), s.addEventListener("mouseenter", () => {
620
634
  this.prewarmTargeting(), this.showTooltip(s);
621
635
  }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s);
622
636
  const u = document.createElement("div");
623
637
  u.className = "qaid-tooltip-wrapper";
624
638
  const h = document.createElement("button");
625
- h.type = "button", h.className = r ? `${n} qaid-btn-down` : "qaid-btn qaid-btn-down", h.setAttribute("aria-label", this.config.text.negativeLabel), h.innerHTML = this.config.negativeIcon || gt, h.addEventListener("click", (f) => this.handleThumbClick("down", f.currentTarget, f)), h.addEventListener("mouseenter", () => {
639
+ h.type = "button", h.className = r ? `${n} qaid-btn-down` : "qaid-btn qaid-btn-down", h.setAttribute("aria-label", this.config.text.negativeLabel), h.innerHTML = this.config.negativeIcon || qt, h.addEventListener("click", (f) => this.handleThumbClick("down", f.currentTarget, f)), h.addEventListener("mouseenter", () => {
626
640
  this.prewarmTargeting(), this.showTooltip(h);
627
641
  }), h.addEventListener("mouseleave", () => this.hideTooltip()), u.appendChild(h), this.buttonsContainer.appendChild(d), this.buttonsContainer.appendChild(u);
628
642
  }
@@ -630,7 +644,7 @@ class re {
630
644
  const d = document.createElement("div");
631
645
  d.className = "qaid-tooltip-wrapper";
632
646
  const s = document.createElement("button");
633
- s.type = "button", s.className = r ? `${n} qaid-btn-record` : "qaid-btn qaid-btn-record", s.setAttribute("aria-label", this.config.text.recordLabel), s.innerHTML = this.config.recordIcon || vt, s.addEventListener("click", () => {
647
+ s.type = "button", s.className = r ? `${n} qaid-btn-record` : "qaid-btn qaid-btn-record", s.setAttribute("aria-label", this.config.text.recordLabel), s.innerHTML = this.config.recordIcon || xt, s.addEventListener("click", () => {
634
648
  this.ensureRecording().then(
635
649
  (h) => this.config.videoOptions.redaction ? h.startPicking() : h.startRecording()
636
650
  );
@@ -654,7 +668,7 @@ class re {
654
668
  if (this.overlayShadowRoot) return this.overlayShadowRoot;
655
669
  this.overlayShadowHost = document.createElement("div"), this.overlayShadowHost.setAttribute("data-qaid-embed-overlay", ""), this.overlayShadowHost.style.position = "fixed", this.overlayShadowHost.style.inset = "0", this.overlayShadowHost.style.pointerEvents = "none", this.overlayShadowHost.style.zIndex = String(this.config.zIndex), document.body.appendChild(this.overlayShadowHost), this.overlayShadowRoot = this.overlayShadowHost.attachShadow({ mode: "open" });
656
670
  const t = document.createElement("style");
657
- if (t.textContent = U(), this.overlayShadowRoot.appendChild(t), this.config.css) {
671
+ if (t.textContent = _(), this.overlayShadowRoot.appendChild(t), this.config.css) {
658
672
  const i = document.createElement("style");
659
673
  i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
660
674
  }
@@ -664,7 +678,7 @@ class re {
664
678
  showTooltip(t) {
665
679
  const i = this.tooltipElement;
666
680
  i.style.visibility = "hidden", i.classList.add("qaid-tooltip-visible");
667
- const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Wt(
681
+ const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Gt(
668
682
  o,
669
683
  r,
670
684
  { width: window.innerWidth, height: window.innerHeight }
@@ -675,10 +689,10 @@ class re {
675
689
  this.tooltipElement.classList.remove("qaid-tooltip-visible");
676
690
  }
677
691
  handleDismiss() {
678
- this.buttonsContainer.classList.add("qaid-dismissed"), $(this.config.apiKey, !0);
692
+ this.buttonsContainer.classList.add("qaid-dismissed"), Q(this.config.apiKey, !0);
679
693
  }
680
694
  handleThumbClick(t, i, o) {
681
- if (this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"), $(this.config.apiKey, !1)), this.prewarmModal(), this.config.skipTargeting || this.config.feedbackMode === "annotate")
695
+ if (this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"), Q(this.config.apiKey, !1)), this.prewarmModal(), this.config.skipTargeting || this.config.feedbackMode === "annotate")
682
696
  this.submitDirectFeedback(t, i);
683
697
  else {
684
698
  this.activeThumbBtn = i, i.setAttribute("aria-pressed", "true");
@@ -711,7 +725,7 @@ class re {
711
725
  * instead of the permission-based Screen Capture API. Explicit "dom" wins;
712
726
  * otherwise DOM is used on touch devices to avoid the getDisplayMedia prompt. */
713
727
  shouldCaptureViaDom() {
714
- return this.config.screenshotMethod === "dom" || oe();
728
+ return this.config.screenshotMethod === "dom" || re();
715
729
  }
716
730
  /**
717
731
  * Open the full-screen annotation editor over the captured screenshot,
@@ -724,7 +738,7 @@ class re {
724
738
  const i = this.ensureOverlayHost(), o = this.overlayShadowHost, r = o.style.pointerEvents;
725
739
  o.style.pointerEvents = "auto";
726
740
  try {
727
- const { openAnnotationEditor: n } = await import("./annotate-CMq95aXG.js").then((a) => a.d);
741
+ const { openAnnotationEditor: n } = await import("./annotate-D-o8xCV9.js").then((a) => a.d);
728
742
  return await n({
729
743
  dataUrl: t,
730
744
  root: i,
@@ -750,7 +764,7 @@ class re {
750
764
  const { captureDomScreenshot: a } = await import("./screenshot-dom-CME7tYRE.js");
751
765
  t = await a(this.config.screenshotOptions);
752
766
  } else {
753
- const { captureScreenshot: a } = await import("./screenshot-BkOCLuS2.js");
767
+ const { captureScreenshot: a } = await import("./screenshot-DYOKg2bS.js");
754
768
  t = await a(this.config.screenshotOptions);
755
769
  }
756
770
  t && this.announceMsg("Screenshot captured");
@@ -828,7 +842,7 @@ class re {
828
842
  const o = this.questIdFor(t);
829
843
  if (!o) return !1;
830
844
  try {
831
- return this.activeQuest?.destroy(), this.activeQuest = await ee({
845
+ return this.activeQuest?.destroy(), this.activeQuest = await ae({
832
846
  questId: o,
833
847
  base: this.config.quests.base,
834
848
  apiKey: this.config.quests.apiKey || void 0,
@@ -857,7 +871,7 @@ class re {
857
871
  */
858
872
  async ensureModal() {
859
873
  if (!this.modal) {
860
- const { ModalController: t } = await import("./modal-Br5x7m6f.js");
874
+ const { ModalController: t } = await import("./modal-CTbqN-h9.js");
861
875
  this.modal = new t(this.makeModalHost());
862
876
  }
863
877
  return this.modal;
@@ -903,7 +917,7 @@ class re {
903
917
  }
904
918
  /** Warm the modal chunk while the user is targeting, so it opens instantly. */
905
919
  prewarmModal() {
906
- this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-Br5x7m6f.js").catch(() => {
920
+ this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-CTbqN-h9.js").catch(() => {
907
921
  }));
908
922
  }
909
923
  /**
@@ -913,7 +927,7 @@ class re {
913
927
  */
914
928
  async ensureTargeting() {
915
929
  if (!this.targeting) {
916
- const { TargetingController: t } = await import("./targeting-1pK6nJI9.js");
930
+ const { TargetingController: t } = await import("./targeting-Dz6z1BYl.js");
917
931
  this.targeting = new t(this.makeTargetingHost());
918
932
  }
919
933
  return this.targeting;
@@ -958,7 +972,7 @@ class re {
958
972
  }
959
973
  /** Warm the targeting chunk on thumb-button hover, before the click. */
960
974
  prewarmTargeting() {
961
- this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-1pK6nJI9.js").catch(() => {
975
+ this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-Dz6z1BYl.js").catch(() => {
962
976
  }));
963
977
  }
964
978
  // ==================== Video Recording ====================
@@ -977,7 +991,7 @@ class re {
977
991
  */
978
992
  async ensureRecording() {
979
993
  if (!this.recording) {
980
- const { RecordingController: t } = await import("./recording-BVFd_ryf.js");
994
+ const { RecordingController: t } = await import("./recording-Dx8AX-BC.js");
981
995
  this.recording = new t(this.makeRecordingHost());
982
996
  }
983
997
  return this.recording;
@@ -1033,13 +1047,13 @@ class re {
1033
1047
  const t = window;
1034
1048
  this.prewarmIsTimeout ? clearTimeout(this.prewarmHandle) : t.cancelIdleCallback?.(this.prewarmHandle), this.prewarmHandle = null;
1035
1049
  }
1036
- this.recording?.destroy(), this.recording = null, this.modal?.destroy(), this.modal = null, this.activeQuest?.destroy(), this.activeQuest = null, this.consoleCapture && (this.consoleCapture.restore(), this.consoleCapture = null), window.removeEventListener("resize", this.boundResize), document.removeEventListener("keydown", this.boundKeyDown), document.body.classList.remove("qaid-targeting", "qaid-type-up"), document.body.style.removeProperty("--qaid-positive"), document.body.style.removeProperty("--qaid-negative"), this.shadowHost && (this.shadowHost.remove(), this.shadowHost = null, this.shadowRoot = null), this.overlayShadowHost && (this.overlayShadowHost.remove(), this.overlayShadowHost = null, this.overlayShadowRoot = null), this.buttonsContainer = null, this.dismissBtn = null, this.tooltipElement = null, Dt();
1050
+ this.recording?.destroy(), this.recording = null, this.modal?.destroy(), this.modal = null, this.activeQuest?.destroy(), this.activeQuest = null, this.consoleCapture && (this.consoleCapture.restore(), this.consoleCapture = null), window.removeEventListener("resize", this.boundResize), document.removeEventListener("keydown", this.boundKeyDown), document.body.classList.remove("qaid-targeting", "qaid-type-up"), document.body.style.removeProperty("--qaid-positive"), document.body.style.removeProperty("--qaid-negative"), this.shadowHost && (this.shadowHost.remove(), this.shadowHost = null, this.shadowRoot = null), this.overlayShadowHost && (this.overlayShadowHost.remove(), this.overlayShadowHost = null, this.overlayShadowRoot = null), this.buttonsContainer = null, this.dismissBtn = null, this.tooltipElement = null, Lt();
1037
1051
  }
1038
1052
  }
1039
- function W(e) {
1053
+ function G(e) {
1040
1054
  return document.querySelector(e)?.textContent?.trim() ?? "";
1041
1055
  }
1042
- function se() {
1056
+ function ce() {
1043
1057
  const e = document.querySelector(
1044
1058
  'script[type="application/json"][data-feedback-config]'
1045
1059
  );
@@ -1048,31 +1062,31 @@ function se() {
1048
1062
  if (!t) return null;
1049
1063
  try {
1050
1064
  const i = JSON.parse(t);
1051
- return i.cssSelector && !i.css && (i.css = W(i.cssSelector), delete i.cssSelector), i;
1065
+ return i.cssSelector && !i.css && (i.css = G(i.cssSelector), delete i.cssSelector), i;
1052
1066
  } catch {
1053
1067
  return null;
1054
1068
  }
1055
1069
  }
1056
- function de(e) {
1070
+ function ue(e) {
1057
1071
  const t = e.getAttribute("data-endpoint");
1058
1072
  if (!t) return null;
1059
- const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"), r = e.getAttribute("data-positive-color"), n = e.getAttribute("data-negative-color"), a = e.getAttribute("data-marker-color"), l = e.getAttribute("data-container"), c = e.getAttribute("data-button-class"), d = e.getAttribute("data-skip-targeting"), s = e.getAttribute("data-hide-confirmation"), u = e.getAttribute("data-single-button"), h = e.getAttribute("data-feedback-mode"), f = e.getAttribute("data-incognito"), Y = e.getAttribute("data-button-size"), m = e.getAttribute("data-offset-x"), g = e.getAttribute("data-offset-y"), C = e.getAttribute("data-modal-width"), S = e.getAttribute("data-backdrop-opacity"), X = e.getAttribute("data-font-family"), A = e.getAttribute("data-font-size"), T = e.getAttribute("data-tooltip"), E = e.getAttribute("data-modal-title"), I = e.getAttribute("data-confirmation-title"), D = e.getAttribute("data-confirmation-message"), H = e.getAttribute("data-confirmation-close"), z = e.getAttribute("data-modal-subtitle"), L = e.getAttribute("data-placeholder"), M = e.getAttribute("data-submit-button"), B = e.getAttribute("data-skip-button"), G = e.getAttribute("data-positive-icon"), J = e.getAttribute("data-negative-icon"), Z = e.getAttribute("data-feedback-icon"), O = e.getAttribute("data-feedback-label"), tt = e.getAttribute("data-api-key"), et = e.getAttribute("data-capture-screenshot"), it = e.getAttribute("data-annotate"), ot = e.getAttribute("data-annotation-color"), v = e.getAttribute("data-screenshot-quality"), y = e.getAttribute("data-screenshot-max-width"), w = e.getAttribute("data-screenshot-max-height"), at = e.getAttribute("data-capture-video"), R = e.getAttribute("data-video-redaction"), nt = e.getAttribute("data-hide-thumbs"), rt = e.getAttribute("data-hide-dismiss"), q = e.getAttribute("data-video-max-duration"), st = e.getAttribute("data-screenshot-method"), dt = e.getAttribute("data-direction"), P = e.getAttribute("data-css-selector"), F = e.getAttribute("data-quest-base"), lt = e.getAttribute("data-quest-up"), ct = e.getAttribute("data-quest-down"), ut = e.getAttribute("data-quest-video"), ht = e.getAttribute("data-quest-api-key"), ft = e.getAttribute("data-quest-module-url");
1073
+ const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"), r = e.getAttribute("data-positive-color"), n = e.getAttribute("data-negative-color"), a = e.getAttribute("data-marker-color"), l = e.getAttribute("data-container"), c = e.getAttribute("data-button-class"), d = e.getAttribute("data-skip-targeting"), s = e.getAttribute("data-hide-confirmation"), u = e.getAttribute("data-single-button"), h = e.getAttribute("data-feedback-mode"), f = e.getAttribute("data-incognito"), J = e.getAttribute("data-button-size"), m = e.getAttribute("data-offset-x"), g = e.getAttribute("data-offset-y"), C = e.getAttribute("data-modal-width"), S = e.getAttribute("data-backdrop-opacity"), Z = e.getAttribute("data-font-family"), A = e.getAttribute("data-font-size"), T = e.getAttribute("data-tooltip"), E = e.getAttribute("data-modal-title"), I = e.getAttribute("data-confirmation-title"), z = e.getAttribute("data-confirmation-message"), D = e.getAttribute("data-confirmation-close"), H = e.getAttribute("data-error-title"), L = e.getAttribute("data-error-message"), M = e.getAttribute("data-modal-subtitle"), B = e.getAttribute("data-placeholder"), O = e.getAttribute("data-submit-button"), R = e.getAttribute("data-skip-button"), tt = e.getAttribute("data-positive-icon"), et = e.getAttribute("data-negative-icon"), it = e.getAttribute("data-feedback-icon"), P = e.getAttribute("data-feedback-label"), ot = e.getAttribute("data-api-key"), at = e.getAttribute("data-capture-screenshot"), nt = e.getAttribute("data-annotate"), rt = e.getAttribute("data-annotation-color"), v = e.getAttribute("data-screenshot-quality"), y = e.getAttribute("data-screenshot-max-width"), q = e.getAttribute("data-screenshot-max-height"), st = e.getAttribute("data-capture-video"), F = e.getAttribute("data-video-redaction"), dt = e.getAttribute("data-hide-thumbs"), lt = e.getAttribute("data-hide-dismiss"), x = e.getAttribute("data-video-max-duration"), ct = e.getAttribute("data-screenshot-method"), ut = e.getAttribute("data-direction"), U = e.getAttribute("data-css-selector"), V = e.getAttribute("data-quest-base"), ht = e.getAttribute("data-quest-up"), ft = e.getAttribute("data-quest-down"), pt = e.getAttribute("data-quest-video"), bt = e.getAttribute("data-quest-api-key"), mt = e.getAttribute("data-quest-module-url");
1060
1074
  return {
1061
1075
  endpoint: t,
1062
- css: P ? W(P) : void 0,
1063
- apiKey: tt ?? void 0,
1064
- captureScreenshot: et === "true" ? !0 : void 0,
1076
+ css: U ? G(U) : void 0,
1077
+ apiKey: ot ?? void 0,
1078
+ captureScreenshot: at === "true" ? !0 : void 0,
1065
1079
  // Annotation is on by default; only an explicit "false" disables it.
1066
- annotate: it === "false" ? !1 : void 0,
1067
- annotationColor: ot ?? void 0,
1068
- screenshotOptions: v || y || w ? {
1080
+ annotate: nt === "false" ? !1 : void 0,
1081
+ annotationColor: rt ?? void 0,
1082
+ screenshotOptions: v || y || q ? {
1069
1083
  quality: v ? parseFloat(v) : void 0,
1070
1084
  maxWidth: y ? parseInt(y, 10) : void 0,
1071
- maxHeight: w ? parseInt(w, 10) : void 0
1085
+ maxHeight: q ? parseInt(q, 10) : void 0
1072
1086
  } : void 0,
1073
1087
  container: l ?? void 0,
1074
1088
  buttonClass: c ?? void 0,
1075
- direction: dt ?? void 0,
1089
+ direction: ut ?? void 0,
1076
1090
  position: i ?? void 0,
1077
1091
  zIndex: o ? parseInt(o, 10) : void 0,
1078
1092
  skipTargeting: d === "true" ? !0 : void 0,
@@ -1080,64 +1094,66 @@ function de(e) {
1080
1094
  singleButton: u === "true" ? !0 : void 0,
1081
1095
  feedbackMode: h ?? void 0,
1082
1096
  incognito: f === "true" ? !0 : void 0,
1083
- buttonSize: Y ?? void 0,
1097
+ buttonSize: J ?? void 0,
1084
1098
  offset: m || g ? {
1085
1099
  x: m ? parseInt(m, 10) : void 0,
1086
1100
  y: g ? parseInt(g, 10) : void 0
1087
1101
  } : void 0,
1088
1102
  modalWidth: C ? parseInt(C, 10) : void 0,
1089
1103
  backdropOpacity: S ? parseFloat(S) : void 0,
1090
- fontFamily: X ?? void 0,
1104
+ fontFamily: Z ?? void 0,
1091
1105
  fontSize: A ? parseInt(A, 10) : void 0,
1092
1106
  colors: {
1093
1107
  positive: r ?? void 0,
1094
1108
  negative: n ?? void 0,
1095
1109
  marker: a ?? void 0
1096
1110
  },
1097
- text: T || E || z || L || M || B || O || I || D || H ? {
1111
+ text: T || E || M || B || O || R || P || I || z || D || H || L ? {
1098
1112
  tooltip: T ?? void 0,
1099
1113
  modalTitle: E ?? void 0,
1100
- modalSubtitle: z ?? void 0,
1101
- placeholder: L ?? void 0,
1102
- submitButton: M ?? void 0,
1103
- skipButton: B ?? void 0,
1104
- feedbackLabel: O ?? void 0,
1114
+ modalSubtitle: M ?? void 0,
1115
+ placeholder: B ?? void 0,
1116
+ submitButton: O ?? void 0,
1117
+ skipButton: R ?? void 0,
1118
+ feedbackLabel: P ?? void 0,
1105
1119
  confirmationTitle: I ?? void 0,
1106
- confirmationMessage: D ?? void 0,
1107
- confirmationClose: H ?? void 0
1120
+ confirmationMessage: z ?? void 0,
1121
+ confirmationClose: D ?? void 0,
1122
+ errorTitle: H ?? void 0,
1123
+ errorMessage: L ?? void 0
1108
1124
  } : void 0,
1109
- positiveIcon: G ?? void 0,
1110
- negativeIcon: J ?? void 0,
1111
- feedbackIcon: Z ?? void 0,
1112
- screenshotMethod: st ?? void 0,
1113
- captureVideo: at === "true" ? !0 : void 0,
1114
- hideThumbs: nt === "true" ? !0 : void 0,
1115
- hideDismiss: rt === "true" ? !0 : void 0,
1116
- videoOptions: q || R ? {
1117
- maxDuration: q ? parseInt(q, 10) : void 0,
1118
- redaction: R === "true" ? !0 : void 0
1125
+ positiveIcon: tt ?? void 0,
1126
+ negativeIcon: et ?? void 0,
1127
+ feedbackIcon: it ?? void 0,
1128
+ screenshotMethod: ct ?? void 0,
1129
+ captureVideo: st === "true" ? !0 : void 0,
1130
+ hideThumbs: dt === "true" ? !0 : void 0,
1131
+ hideDismiss: lt === "true" ? !0 : void 0,
1132
+ videoOptions: x || F ? {
1133
+ maxDuration: x ? parseInt(x, 10) : void 0,
1134
+ redaction: F === "true" ? !0 : void 0
1119
1135
  } : void 0,
1120
- quests: F ? {
1121
- base: F,
1122
- up: lt ?? void 0,
1123
- down: ct ?? void 0,
1124
- video: ut ?? void 0,
1125
- apiKey: ht ?? void 0,
1126
- moduleUrl: ft ?? void 0
1136
+ quests: V ? {
1137
+ base: V,
1138
+ up: ht ?? void 0,
1139
+ down: ft ?? void 0,
1140
+ video: pt ?? void 0,
1141
+ apiKey: bt ?? void 0,
1142
+ moduleUrl: mt ?? void 0
1127
1143
  } : void 0
1128
1144
  };
1129
1145
  }
1130
- function le() {
1146
+ function he() {
1131
1147
  if (typeof document > "u") return;
1132
1148
  const e = () => {
1133
- const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i = se(), o = t ? de(t) : null, r = i ?? o;
1134
- r?.endpoint && new re(r);
1149
+ const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i = ce(), o = t ? ue(t) : null, r = i ?? o;
1150
+ r?.endpoint && new le(r);
1135
1151
  };
1136
1152
  document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
1137
1153
  }
1138
- le();
1154
+ he();
1139
1155
  export {
1140
- re as Q,
1141
- ue as c
1156
+ le as Q,
1157
+ pe as c
1142
1158
  };
1143
- //# sourceMappingURL=loader-CYM1rxDH.js.map
1159
+ //# sourceMappingURL=loader-DHtXHt1z.js.map