@qaiddev/thumbs-embed 1.6.2 → 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 (37) hide show
  1. package/README.md +32 -21
  2. package/dist/bootstrap.d.ts +6 -0
  3. package/dist/chunks/{annotate-NeITyYNe.js → annotate-D-o8xCV9.js} +24 -17
  4. package/dist/chunks/annotate-D-o8xCV9.js.map +1 -0
  5. package/dist/chunks/dom-DvdtcUS8.js +17 -0
  6. package/dist/chunks/dom-DvdtcUS8.js.map +1 -0
  7. package/dist/chunks/{loader-DnJ3MHkt.js → loader-DHtXHt1z.js} +187 -163
  8. package/dist/chunks/loader-DHtXHt1z.js.map +1 -0
  9. package/dist/chunks/modal-CTbqN-h9.js +213 -0
  10. package/dist/chunks/modal-CTbqN-h9.js.map +1 -0
  11. package/dist/chunks/{recording-DhRZ6-tW.js → recording-Dx8AX-BC.js} +104 -98
  12. package/dist/chunks/recording-Dx8AX-BC.js.map +1 -0
  13. package/dist/chunks/{screenshot-BkOCLuS2.js → screenshot-DYOKg2bS.js} +2 -2
  14. package/dist/chunks/{screenshot-BkOCLuS2.js.map → screenshot-DYOKg2bS.js.map} +1 -1
  15. package/dist/chunks/{targeting-BEQU2Ogo.js → targeting-Dz6z1BYl.js} +3 -2
  16. package/dist/chunks/{targeting-BEQU2Ogo.js.map → targeting-Dz6z1BYl.js.map} +1 -1
  17. package/dist/chunks/{video-BOYqf2Im.js → video-Bd_29-rK.js} +76 -71
  18. package/dist/chunks/video-Bd_29-rK.js.map +1 -0
  19. package/dist/embed.d.ts +11 -0
  20. package/dist/icons.d.ts +2 -0
  21. package/dist/index.js +597 -451
  22. package/dist/index.js.map +1 -1
  23. package/dist/loader.js +1 -1
  24. package/dist/modal.d.ts +19 -1
  25. package/dist/qaid.umd.cjs +14 -31
  26. package/dist/qaid.umd.cjs.map +1 -1
  27. package/dist/recording.d.ts +6 -0
  28. package/dist/screenshot.d.ts +1 -1
  29. package/dist/types.d.ts +33 -2
  30. package/dist/video-capture.d.ts +6 -0
  31. package/package.json +1 -1
  32. package/dist/chunks/annotate-NeITyYNe.js.map +0 -1
  33. package/dist/chunks/loader-DnJ3MHkt.js.map +0 -1
  34. package/dist/chunks/modal-C8Ca7E5j.js +0 -119
  35. package/dist/chunks/modal-C8Ca7E5j.js.map +0 -1
  36. package/dist/chunks/recording-DhRZ6-tW.js.map +0 -1
  37. package/dist/chunks/video-BOYqf2Im.js.map +0 -1
@@ -1,20 +1,20 @@
1
- import { i as ct, F as ut, T as ht, a as pt, R as bt } from "./annotate-NeITyYNe.js";
2
- const ft = "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}}", mt = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
3
- let f = 0;
4
- const gt = "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)}", vt = {
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
+ let b = 0;
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
- }, yt = {
8
+ }, At = {
9
9
  small: 18,
10
10
  medium: 24,
11
11
  large: 32
12
12
  };
13
- function wt(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 qt(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 qt(e) {
30
30
  b: parseInt(t[3])
31
31
  } : null;
32
32
  }
33
- function xt(e) {
34
- const t = qt(e);
35
- return t && wt(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 kt(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 = vt[r], s = yt[r], u = xt(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 kt(e = {}) {
58
58
  "--qaid-font-size": `${c}px`
59
59
  };
60
60
  }
61
- function St(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 R() {
66
- return ft + gt;
65
+ function _() {
66
+ return wt + Ct;
67
67
  }
68
- function Ct() {
69
- if (f++, f > 1) return;
68
+ function Ht() {
69
+ if (b++, b > 1) return;
70
70
  const e = document.createElement("style");
71
- e.id = "qaid-styles", e.textContent = mt, document.head.appendChild(e);
71
+ e.id = "qaid-styles", e.textContent = kt, document.head.appendChild(e);
72
72
  }
73
- function At() {
74
- f <= 0 || (f--, f === 0 && document.getElementById("qaid-styles").remove());
73
+ function Lt() {
74
+ b <= 0 || (b--, b === 0 && document.getElementById("qaid-styles")?.remove());
75
75
  }
76
- const P = "data-qaid-a11y-live", Tt = "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;", Et = [
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 P = "data-qaid-a11y-live", Tt = "position:absolute;width:1px;height:1px;ma
81
81
  "select",
82
82
  "[tabindex]"
83
83
  ].join(",");
84
- function It(e) {
84
+ function Ot(e) {
85
85
  return e.ownerDocument || document;
86
86
  }
87
- function Dt(e, t) {
87
+ function Rt(e, t) {
88
88
  const i = t ? "assertive" : "polite", o = e.querySelector(
89
- `[${P}="${i}"]`
89
+ `[${K}="${i}"]`
90
90
  );
91
91
  if (o) return o;
92
- const n = It(e).createElement("div");
93
- return n.setAttribute(P, i), n.setAttribute("role", t ? "alert" : "status"), n.setAttribute("aria-live", t ? "assertive" : "polite"), n.setAttribute("aria-atomic", "true"), n.style.cssText = Tt, 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 Ht(e, t, i = {}) {
96
- const o = Dt(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 zt(e) {
99
+ function Ft(e) {
100
100
  return e.hasAttribute("disabled") ? !0 : e.disabled === !0;
101
101
  }
102
- function Lt(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 Lt(e) {
110
110
  }
111
111
  return !1;
112
112
  }
113
- function F(e) {
113
+ function $(e) {
114
114
  return Array.from(
115
- e.querySelectorAll(Et)
116
- ).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") || zt(i) || Lt(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 K(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 Mt(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 = F(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 = K(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 = F(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 Bt() {
146
- return K(document);
145
+ function _t() {
146
+ return Y(document);
147
147
  }
148
- function Ot(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 Rt(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 Pt(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 Pt(e, t) {
169
169
  }
170
170
  return null;
171
171
  }
172
- function Ft(e) {
172
+ function jt(e) {
173
173
  const i = (e.ownerDocument || document).body;
174
174
  if (!i) return () => {
175
175
  };
176
- const o = Pt(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 Ft(e) {
185
185
  }
186
186
  };
187
187
  }
188
- const N = {
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 Ut(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 Ut(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 Vt(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 _t(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 Kt(e, t, i, o = N) {
223
- const r = o.height + o.arrowHeight, n = Ut(
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 = Vt(
229
+ ), a = Wt(
230
230
  e,
231
231
  t,
232
232
  o.width,
@@ -238,15 +238,15 @@ function Kt(e, t, i, o = N) {
238
238
  position: n.position
239
239
  };
240
240
  }
241
- function Nt(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 se(e, t, i, o = N) {
249
- const r = Kt(e, t, i, o), n = _t(
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 se(e, t, i, o = N) {
256
256
  arrow: { left: n }
257
257
  };
258
258
  }
259
- const $t = 20;
260
- function jt(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 >= $t && 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 jt(e) {
279
279
  }
280
280
  };
281
281
  }
282
- const Qt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Wt = (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 Qt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Wt =
287
287
  e
288
288
  )
289
289
  );
290
- let Yt = Wt, b = null, x = null;
291
- function Xt(e) {
292
- return b && x === e || (x = e, b = Promise.resolve(Yt(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 b = null, x = null, t;
299
- })), b;
298
+ throw p = null, w = null, t;
299
+ })), p;
300
300
  }
301
- async function Gt(e) {
302
- const t = await Xt(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 Gt(e) {
308
308
  onClose: e.onClose
309
309
  });
310
310
  }
311
- const U = "qaid_visitor_id", V = "qaid_hide_feedback", Jt = [
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 U = "qaid_visitor_id", V = "qaid_hide_feedback", Jt = [
316
316
  "#111827",
317
317
  "#ffffff"
318
318
  ];
319
- function Zt() {
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 ? `${V}_${e}` : V;
323
+ return e ? `${j}_${e}` : j;
324
324
  }
325
- function te(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 ee() {
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(U);
341
- return e || (e = crypto.randomUUID(), localStorage.setItem(U, 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 ie {
358
+ class le {
347
359
  config;
348
360
  state = "IDLE";
349
361
  feedbackData = {
@@ -432,7 +444,7 @@ class ie {
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: {
@@ -446,16 +458,22 @@ class ie {
446
458
  negativeLabel: t.text?.negativeLabel ?? "Send negative feedback",
447
459
  recordLabel: t.text?.recordLabel ?? "Record a screen recording",
448
460
  dismissLabel: t.text?.dismissLabel ?? "Hide Feedback",
449
- feedbackLabel: t.text?.feedbackLabel ?? "Send feedback"
461
+ feedbackLabel: t.text?.feedbackLabel ?? "Send feedback",
462
+ confirmationTitle: t.text?.confirmationTitle ?? "Thank you!",
463
+ confirmationMessage: t.text?.confirmationMessage ?? "Your feedback has been received.",
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."
450
467
  },
468
+ hideConfirmation: t.hideConfirmation ?? !1,
451
469
  modalWidth: t.modalWidth ?? 400,
452
470
  backdropOpacity: t.backdropOpacity ?? 0.3,
453
471
  fontFamily: t.fontFamily ?? "system-ui, -apple-system, sans-serif",
454
472
  fontSize: t.fontSize ?? 16,
455
473
  captureScreenshot: t.captureScreenshot ?? !1,
456
474
  annotate: t.annotate ?? !0,
457
- annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6366f1",
458
- annotationPalette: t.annotationPalette ?? Jt,
475
+ annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6365f1",
476
+ annotationPalette: t.annotationPalette ?? ne,
459
477
  screenshotMethod: t.screenshotMethod ?? "permission",
460
478
  screenshotOptions: {
461
479
  quality: t.screenshotOptions?.quality ?? 0.8,
@@ -482,12 +500,12 @@ class ie {
482
500
  video: t.quests?.video ?? "",
483
501
  // Quest service reuses the feedback API key unless overridden.
484
502
  apiKey: t.quests?.apiKey ?? t.apiKey ?? "",
485
- moduleUrl: t.quests?.moduleUrl ?? Qt
503
+ moduleUrl: t.quests?.moduleUrl ?? te
486
504
  }
487
- }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = ee(), this.init();
505
+ }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = de(), this.init();
488
506
  }
489
507
  applyVars(t) {
490
- St(t, this.cssVars);
508
+ Dt(t, this.cssVars);
491
509
  }
492
510
  /**
493
511
  * Announce a message via the shared visually-hidden live regions.
@@ -497,7 +515,7 @@ class ie {
497
515
  */
498
516
  announceMsg(t, i = !1) {
499
517
  const o = this.overlayShadowRoot ?? this.shadowRoot;
500
- o && Ht(o, t, { assertive: i });
518
+ o && Pt(o, t, { assertive: i });
501
519
  }
502
520
  /**
503
521
  * Turn a transient surface into an accessible modal dialog: save the
@@ -505,16 +523,16 @@ class ie {
505
523
  * background. Paired with closeDialogA11y() on every close path.
506
524
  */
507
525
  openDialogA11y(t, i) {
508
- this.dialogTrigger = Bt(), Rt(t, i), this.dialogTrap = Mt(t), this.dialogRestoreInert = Ft(t);
526
+ this.dialogTrigger = _t(), $t(t, i), this.dialogTrap = Vt(t), this.dialogRestoreInert = jt(t);
509
527
  }
510
528
  closeDialogA11y() {
511
- this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Ot(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;
512
530
  }
513
531
  clearActiveThumb() {
514
532
  this.activeThumbBtn && (this.activeThumbBtn.setAttribute("aria-pressed", "false"), this.activeThumbBtn = null);
515
533
  }
516
534
  init() {
517
- Ct(), this.cssVars = kt({
535
+ Ht(), this.cssVars = zt({
518
536
  positiveColor: this.config.colors.positive,
519
537
  negativeColor: this.config.colors.negative,
520
538
  markerColor: this.config.colors.marker,
@@ -523,7 +541,7 @@ class ie {
523
541
  backdropOpacity: this.config.backdropOpacity,
524
542
  fontFamily: this.config.fontFamily,
525
543
  fontSize: this.config.fontSize
526
- }), !this.config.hideDismiss && te(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = jt((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) => {
527
545
  this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
528
546
  }), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom(), (this.config.captureVideo && this.videoSupported() || this.config.captureScreenshot) && this.schedulePrewarm(() => {
529
547
  this.config.captureVideo && this.videoSupported() && this.prewarmVideo(), this.config.captureScreenshot && this.prewarmScreenshot();
@@ -536,13 +554,13 @@ class ie {
536
554
  * swallowed — a failed preload just falls back to an on-demand load.
537
555
  */
538
556
  prewarmVideo() {
539
- this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-DhRZ6-tW.js").catch(() => {
540
- }), 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(() => {
541
559
  }));
542
560
  }
543
561
  prewarmScreenshot() {
544
- this.screenshotPrewarmed || (this.screenshotPrewarmed = !0, (this.shouldCaptureViaDom() ? import("./screenshot-dom-CME7tYRE.js") : import("./screenshot-BkOCLuS2.js")).catch(() => {
545
- }), this.config.annotate && import("./annotate-NeITyYNe.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(() => {
546
564
  }));
547
565
  }
548
566
  /** Run fn when the main thread is idle; cancelled by destroy(). */
@@ -571,7 +589,7 @@ class ie {
571
589
  }), this.domObserver.observe(document.body, { childList: !0 });
572
590
  }
573
591
  checkMobile() {
574
- this.isMobile = ct();
592
+ this.isMobile = gt();
575
593
  }
576
594
  handleResize() {
577
595
  this.checkMobile();
@@ -581,7 +599,7 @@ class ie {
581
599
  let t = null;
582
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" });
583
601
  const i = document.createElement("style");
584
- if (i.textContent = R(), this.shadowRoot.appendChild(i), this.config.css) {
602
+ if (i.textContent = _(), this.shadowRoot.appendChild(i), this.config.css) {
585
603
  const d = document.createElement("style");
586
604
  d.textContent = this.config.css, this.shadowRoot.appendChild(d);
587
605
  }
@@ -605,20 +623,20 @@ class ie {
605
623
  const d = document.createElement("div");
606
624
  d.className = "qaid-tooltip-wrapper";
607
625
  const s = document.createElement("button");
608
- 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 || ut, 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", () => {
609
627
  this.prewarmTargeting(), this.showTooltip(s);
610
628
  }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s), this.buttonsContainer.appendChild(d);
611
629
  } else if (!this.config.hideThumbs) {
612
630
  const d = document.createElement("div");
613
631
  d.className = "qaid-tooltip-wrapper";
614
632
  const s = document.createElement("button");
615
- 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 || ht, s.addEventListener("click", (p) => this.handleThumbClick("up", p.currentTarget, p)), 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", () => {
616
634
  this.prewarmTargeting(), this.showTooltip(s);
617
635
  }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s);
618
636
  const u = document.createElement("div");
619
637
  u.className = "qaid-tooltip-wrapper";
620
638
  const h = document.createElement("button");
621
- 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 || pt, h.addEventListener("click", (p) => this.handleThumbClick("down", p.currentTarget, p)), 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", () => {
622
640
  this.prewarmTargeting(), this.showTooltip(h);
623
641
  }), h.addEventListener("mouseleave", () => this.hideTooltip()), u.appendChild(h), this.buttonsContainer.appendChild(d), this.buttonsContainer.appendChild(u);
624
642
  }
@@ -626,7 +644,7 @@ class ie {
626
644
  const d = document.createElement("div");
627
645
  d.className = "qaid-tooltip-wrapper";
628
646
  const s = document.createElement("button");
629
- 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 || bt, 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", () => {
630
648
  this.ensureRecording().then(
631
649
  (h) => this.config.videoOptions.redaction ? h.startPicking() : h.startRecording()
632
650
  );
@@ -650,7 +668,7 @@ class ie {
650
668
  if (this.overlayShadowRoot) return this.overlayShadowRoot;
651
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" });
652
670
  const t = document.createElement("style");
653
- if (t.textContent = R(), this.overlayShadowRoot.appendChild(t), this.config.css) {
671
+ if (t.textContent = _(), this.overlayShadowRoot.appendChild(t), this.config.css) {
654
672
  const i = document.createElement("style");
655
673
  i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
656
674
  }
@@ -660,7 +678,7 @@ class ie {
660
678
  showTooltip(t) {
661
679
  const i = this.tooltipElement;
662
680
  i.style.visibility = "hidden", i.classList.add("qaid-tooltip-visible");
663
- const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Nt(
681
+ const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Gt(
664
682
  o,
665
683
  r,
666
684
  { width: window.innerWidth, height: window.innerHeight }
@@ -671,10 +689,10 @@ class ie {
671
689
  this.tooltipElement.classList.remove("qaid-tooltip-visible");
672
690
  }
673
691
  handleDismiss() {
674
- this.buttonsContainer.classList.add("qaid-dismissed"), _(this.config.apiKey, !0);
692
+ this.buttonsContainer.classList.add("qaid-dismissed"), Q(this.config.apiKey, !0);
675
693
  }
676
694
  handleThumbClick(t, i, o) {
677
- 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")
678
696
  this.submitDirectFeedback(t, i);
679
697
  else {
680
698
  this.activeThumbBtn = i, i.setAttribute("aria-pressed", "true");
@@ -707,7 +725,7 @@ class ie {
707
725
  * instead of the permission-based Screen Capture API. Explicit "dom" wins;
708
726
  * otherwise DOM is used on touch devices to avoid the getDisplayMedia prompt. */
709
727
  shouldCaptureViaDom() {
710
- return this.config.screenshotMethod === "dom" || Zt();
728
+ return this.config.screenshotMethod === "dom" || re();
711
729
  }
712
730
  /**
713
731
  * Open the full-screen annotation editor over the captured screenshot,
@@ -720,7 +738,7 @@ class ie {
720
738
  const i = this.ensureOverlayHost(), o = this.overlayShadowHost, r = o.style.pointerEvents;
721
739
  o.style.pointerEvents = "auto";
722
740
  try {
723
- const { openAnnotationEditor: n } = await import("./annotate-NeITyYNe.js").then((a) => a.d);
741
+ const { openAnnotationEditor: n } = await import("./annotate-D-o8xCV9.js").then((a) => a.d);
724
742
  return await n({
725
743
  dataUrl: t,
726
744
  root: i,
@@ -746,7 +764,7 @@ class ie {
746
764
  const { captureDomScreenshot: a } = await import("./screenshot-dom-CME7tYRE.js");
747
765
  t = await a(this.config.screenshotOptions);
748
766
  } else {
749
- const { captureScreenshot: a } = await import("./screenshot-BkOCLuS2.js");
767
+ const { captureScreenshot: a } = await import("./screenshot-DYOKg2bS.js");
750
768
  t = await a(this.config.screenshotOptions);
751
769
  }
752
770
  t && this.announceMsg("Screenshot captured");
@@ -824,7 +842,7 @@ class ie {
824
842
  const o = this.questIdFor(t);
825
843
  if (!o) return !1;
826
844
  try {
827
- return this.activeQuest?.destroy(), this.activeQuest = await Gt({
845
+ return this.activeQuest?.destroy(), this.activeQuest = await ae({
828
846
  questId: o,
829
847
  base: this.config.quests.base,
830
848
  apiKey: this.config.quests.apiKey || void 0,
@@ -853,7 +871,7 @@ class ie {
853
871
  */
854
872
  async ensureModal() {
855
873
  if (!this.modal) {
856
- const { ModalController: t } = await import("./modal-C8Ca7E5j.js");
874
+ const { ModalController: t } = await import("./modal-CTbqN-h9.js");
857
875
  this.modal = new t(this.makeModalHost());
858
876
  }
859
877
  return this.modal;
@@ -899,7 +917,7 @@ class ie {
899
917
  }
900
918
  /** Warm the modal chunk while the user is targeting, so it opens instantly. */
901
919
  prewarmModal() {
902
- this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-C8Ca7E5j.js").catch(() => {
920
+ this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-CTbqN-h9.js").catch(() => {
903
921
  }));
904
922
  }
905
923
  /**
@@ -909,7 +927,7 @@ class ie {
909
927
  */
910
928
  async ensureTargeting() {
911
929
  if (!this.targeting) {
912
- const { TargetingController: t } = await import("./targeting-BEQU2Ogo.js");
930
+ const { TargetingController: t } = await import("./targeting-Dz6z1BYl.js");
913
931
  this.targeting = new t(this.makeTargetingHost());
914
932
  }
915
933
  return this.targeting;
@@ -954,7 +972,7 @@ class ie {
954
972
  }
955
973
  /** Warm the targeting chunk on thumb-button hover, before the click. */
956
974
  prewarmTargeting() {
957
- this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-BEQU2Ogo.js").catch(() => {
975
+ this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-Dz6z1BYl.js").catch(() => {
958
976
  }));
959
977
  }
960
978
  // ==================== Video Recording ====================
@@ -973,7 +991,7 @@ class ie {
973
991
  */
974
992
  async ensureRecording() {
975
993
  if (!this.recording) {
976
- const { RecordingController: t } = await import("./recording-DhRZ6-tW.js");
994
+ const { RecordingController: t } = await import("./recording-Dx8AX-BC.js");
977
995
  this.recording = new t(this.makeRecordingHost());
978
996
  }
979
997
  return this.recording;
@@ -1029,13 +1047,13 @@ class ie {
1029
1047
  const t = window;
1030
1048
  this.prewarmIsTimeout ? clearTimeout(this.prewarmHandle) : t.cancelIdleCallback?.(this.prewarmHandle), this.prewarmHandle = null;
1031
1049
  }
1032
- 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, At();
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();
1033
1051
  }
1034
1052
  }
1035
- function $(e) {
1053
+ function G(e) {
1036
1054
  return document.querySelector(e)?.textContent?.trim() ?? "";
1037
1055
  }
1038
- function oe() {
1056
+ function ce() {
1039
1057
  const e = document.querySelector(
1040
1058
  'script[type="application/json"][data-feedback-config]'
1041
1059
  );
@@ -1044,92 +1062,98 @@ function oe() {
1044
1062
  if (!t) return null;
1045
1063
  try {
1046
1064
  const i = JSON.parse(t);
1047
- return i.cssSelector && !i.css && (i.css = $(i.cssSelector), delete i.cssSelector), i;
1065
+ return i.cssSelector && !i.css && (i.css = G(i.cssSelector), delete i.cssSelector), i;
1048
1066
  } catch {
1049
1067
  return null;
1050
1068
  }
1051
1069
  }
1052
- function ae(e) {
1070
+ function ue(e) {
1053
1071
  const t = e.getAttribute("data-endpoint");
1054
1072
  if (!t) return null;
1055
- 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-single-button"), u = e.getAttribute("data-feedback-mode"), h = e.getAttribute("data-incognito"), p = e.getAttribute("data-button-size"), m = e.getAttribute("data-offset-x"), g = e.getAttribute("data-offset-y"), S = e.getAttribute("data-modal-width"), C = e.getAttribute("data-backdrop-opacity"), j = 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-modal-subtitle"), D = e.getAttribute("data-placeholder"), H = e.getAttribute("data-submit-button"), z = e.getAttribute("data-skip-button"), Q = e.getAttribute("data-positive-icon"), W = e.getAttribute("data-negative-icon"), Y = e.getAttribute("data-feedback-icon"), L = e.getAttribute("data-feedback-label"), X = e.getAttribute("data-api-key"), G = e.getAttribute("data-capture-screenshot"), J = e.getAttribute("data-annotate"), Z = 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"), tt = e.getAttribute("data-capture-video"), M = e.getAttribute("data-video-redaction"), et = e.getAttribute("data-hide-thumbs"), it = e.getAttribute("data-hide-dismiss"), q = e.getAttribute("data-video-max-duration"), ot = e.getAttribute("data-screenshot-method"), at = e.getAttribute("data-direction"), B = e.getAttribute("data-css-selector"), O = e.getAttribute("data-quest-base"), nt = e.getAttribute("data-quest-up"), rt = e.getAttribute("data-quest-down"), st = e.getAttribute("data-quest-video"), dt = e.getAttribute("data-quest-api-key"), lt = 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");
1056
1074
  return {
1057
1075
  endpoint: t,
1058
- css: B ? $(B) : void 0,
1059
- apiKey: X ?? void 0,
1060
- captureScreenshot: G === "true" ? !0 : void 0,
1076
+ css: U ? G(U) : void 0,
1077
+ apiKey: ot ?? void 0,
1078
+ captureScreenshot: at === "true" ? !0 : void 0,
1061
1079
  // Annotation is on by default; only an explicit "false" disables it.
1062
- annotate: J === "false" ? !1 : void 0,
1063
- annotationColor: Z ?? void 0,
1064
- screenshotOptions: v || y || w ? {
1080
+ annotate: nt === "false" ? !1 : void 0,
1081
+ annotationColor: rt ?? void 0,
1082
+ screenshotOptions: v || y || q ? {
1065
1083
  quality: v ? parseFloat(v) : void 0,
1066
1084
  maxWidth: y ? parseInt(y, 10) : void 0,
1067
- maxHeight: w ? parseInt(w, 10) : void 0
1085
+ maxHeight: q ? parseInt(q, 10) : void 0
1068
1086
  } : void 0,
1069
1087
  container: l ?? void 0,
1070
1088
  buttonClass: c ?? void 0,
1071
- direction: at ?? void 0,
1089
+ direction: ut ?? void 0,
1072
1090
  position: i ?? void 0,
1073
1091
  zIndex: o ? parseInt(o, 10) : void 0,
1074
1092
  skipTargeting: d === "true" ? !0 : void 0,
1075
- singleButton: s === "true" ? !0 : void 0,
1076
- feedbackMode: u ?? void 0,
1077
- incognito: h === "true" ? !0 : void 0,
1078
- buttonSize: p ?? void 0,
1093
+ hideConfirmation: s === "true" ? !0 : void 0,
1094
+ singleButton: u === "true" ? !0 : void 0,
1095
+ feedbackMode: h ?? void 0,
1096
+ incognito: f === "true" ? !0 : void 0,
1097
+ buttonSize: J ?? void 0,
1079
1098
  offset: m || g ? {
1080
1099
  x: m ? parseInt(m, 10) : void 0,
1081
1100
  y: g ? parseInt(g, 10) : void 0
1082
1101
  } : void 0,
1083
- modalWidth: S ? parseInt(S, 10) : void 0,
1084
- backdropOpacity: C ? parseFloat(C) : void 0,
1085
- fontFamily: j ?? void 0,
1102
+ modalWidth: C ? parseInt(C, 10) : void 0,
1103
+ backdropOpacity: S ? parseFloat(S) : void 0,
1104
+ fontFamily: Z ?? void 0,
1086
1105
  fontSize: A ? parseInt(A, 10) : void 0,
1087
1106
  colors: {
1088
1107
  positive: r ?? void 0,
1089
1108
  negative: n ?? void 0,
1090
1109
  marker: a ?? void 0
1091
1110
  },
1092
- text: T || E || I || D || H || z || L ? {
1111
+ text: T || E || M || B || O || R || P || I || z || D || H || L ? {
1093
1112
  tooltip: T ?? void 0,
1094
1113
  modalTitle: E ?? void 0,
1095
- modalSubtitle: I ?? void 0,
1096
- placeholder: D ?? void 0,
1097
- submitButton: H ?? void 0,
1098
- skipButton: z ?? void 0,
1099
- feedbackLabel: L ?? 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,
1119
+ confirmationTitle: I ?? void 0,
1120
+ confirmationMessage: z ?? void 0,
1121
+ confirmationClose: D ?? void 0,
1122
+ errorTitle: H ?? void 0,
1123
+ errorMessage: L ?? void 0
1100
1124
  } : void 0,
1101
- positiveIcon: Q ?? void 0,
1102
- negativeIcon: W ?? void 0,
1103
- feedbackIcon: Y ?? void 0,
1104
- screenshotMethod: ot ?? void 0,
1105
- captureVideo: tt === "true" ? !0 : void 0,
1106
- hideThumbs: et === "true" ? !0 : void 0,
1107
- hideDismiss: it === "true" ? !0 : void 0,
1108
- videoOptions: q || M ? {
1109
- maxDuration: q ? parseInt(q, 10) : void 0,
1110
- redaction: M === "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
1111
1135
  } : void 0,
1112
- quests: O ? {
1113
- base: O,
1114
- up: nt ?? void 0,
1115
- down: rt ?? void 0,
1116
- video: st ?? void 0,
1117
- apiKey: dt ?? void 0,
1118
- moduleUrl: lt ?? 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
1119
1143
  } : void 0
1120
1144
  };
1121
1145
  }
1122
- function ne() {
1146
+ function he() {
1123
1147
  if (typeof document > "u") return;
1124
1148
  const e = () => {
1125
- const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i = oe(), o = t ? ae(t) : null, r = i ?? o;
1126
- r?.endpoint && new ie(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);
1127
1151
  };
1128
1152
  document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
1129
1153
  }
1130
- ne();
1154
+ he();
1131
1155
  export {
1132
- ie as Q,
1133
- se as c
1156
+ le as Q,
1157
+ pe as c
1134
1158
  };
1135
- //# sourceMappingURL=loader-DnJ3MHkt.js.map
1159
+ //# sourceMappingURL=loader-DHtXHt1z.js.map