@qaiddev/thumbs-embed 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap.d.ts +6 -0
- package/dist/chunks/{annotate-NeITyYNe.js → annotate-CMq95aXG.js} +2 -1
- package/dist/chunks/{annotate-NeITyYNe.js.map → annotate-CMq95aXG.js.map} +1 -1
- package/dist/chunks/{loader-DnJ3MHkt.js → loader-CYM1rxDH.js} +161 -153
- package/dist/chunks/loader-CYM1rxDH.js.map +1 -0
- package/dist/chunks/{modal-C8Ca7E5j.js → modal-Br5x7m6f.js} +52 -21
- package/dist/chunks/modal-Br5x7m6f.js.map +1 -0
- package/dist/chunks/{recording-DhRZ6-tW.js → recording-BVFd_ryf.js} +3 -2
- package/dist/chunks/{recording-DhRZ6-tW.js.map → recording-BVFd_ryf.js.map} +1 -1
- package/dist/chunks/{targeting-BEQU2Ogo.js → targeting-1pK6nJI9.js} +3 -2
- package/dist/chunks/{targeting-BEQU2Ogo.js.map → targeting-1pK6nJI9.js.map} +1 -1
- package/dist/index.js +422 -381
- package/dist/index.js.map +1 -1
- package/dist/loader.js +1 -1
- package/dist/modal.d.ts +8 -0
- package/dist/qaid.umd.cjs +20 -13
- package/dist/qaid.umd.cjs.map +1 -1
- package/dist/types.d.ts +19 -0
- package/package.json +1 -1
- package/dist/chunks/loader-DnJ3MHkt.js.map +0 -1
- package/dist/chunks/modal-C8Ca7E5j.js.map +0 -1
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { i as
|
|
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
|
|
4
|
-
const
|
|
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}";
|
|
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 = {
|
|
5
5
|
small: 36,
|
|
6
6
|
medium: 48,
|
|
7
7
|
large: 64
|
|
8
|
-
},
|
|
8
|
+
}, kt = {
|
|
9
9
|
small: 18,
|
|
10
10
|
medium: 24,
|
|
11
11
|
large: 32
|
|
12
12
|
};
|
|
13
|
-
function
|
|
13
|
+
function Ct(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
|
|
17
|
+
function St(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,11 +30,11 @@ function qt(e) {
|
|
|
30
30
|
b: parseInt(t[3])
|
|
31
31
|
} : null;
|
|
32
32
|
}
|
|
33
|
-
function
|
|
34
|
-
const t =
|
|
35
|
-
return t &&
|
|
33
|
+
function At(e) {
|
|
34
|
+
const t = St(e);
|
|
35
|
+
return t && Ct(t.r, t.g, t.b) > 0.4 ? "black" : "white";
|
|
36
36
|
}
|
|
37
|
-
function
|
|
37
|
+
function Tt(e = {}) {
|
|
38
38
|
const {
|
|
39
39
|
positiveColor: t = "rgb(0, 200, 83)",
|
|
40
40
|
negativeColor: i = "rgb(255, 0, 0)",
|
|
@@ -44,7 +44,7 @@ function kt(e = {}) {
|
|
|
44
44
|
backdropOpacity: a = 0.3,
|
|
45
45
|
fontFamily: l = "system-ui, -apple-system, sans-serif",
|
|
46
46
|
fontSize: c = 16
|
|
47
|
-
} = e, d =
|
|
47
|
+
} = e, d = xt[r], s = kt[r], u = At(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
|
|
61
|
+
function Et(e, t) {
|
|
62
62
|
for (const [i, o] of Object.entries(t))
|
|
63
63
|
e.style.setProperty(i, o);
|
|
64
64
|
}
|
|
65
|
-
function
|
|
66
|
-
return
|
|
65
|
+
function U() {
|
|
66
|
+
return yt + qt;
|
|
67
67
|
}
|
|
68
|
-
function
|
|
69
|
-
if (
|
|
68
|
+
function It() {
|
|
69
|
+
if (b++, b > 1) return;
|
|
70
70
|
const e = document.createElement("style");
|
|
71
|
-
e.id = "qaid-styles", e.textContent =
|
|
71
|
+
e.id = "qaid-styles", e.textContent = wt, document.head.appendChild(e);
|
|
72
72
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
73
|
+
function Dt() {
|
|
74
|
+
b <= 0 || (b--, b === 0 && document.getElementById("qaid-styles")?.remove());
|
|
75
75
|
}
|
|
76
|
-
const
|
|
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 = [
|
|
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
|
|
84
|
+
function Lt(e) {
|
|
85
85
|
return e.ownerDocument || document;
|
|
86
86
|
}
|
|
87
|
-
function
|
|
87
|
+
function Mt(e, t) {
|
|
88
88
|
const i = t ? "assertive" : "polite", o = e.querySelector(
|
|
89
|
-
`[${
|
|
89
|
+
`[${V}="${i}"]`
|
|
90
90
|
);
|
|
91
91
|
if (o) return o;
|
|
92
|
-
const n =
|
|
93
|
-
return n.setAttribute(
|
|
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;
|
|
94
94
|
}
|
|
95
|
-
function
|
|
96
|
-
const o =
|
|
95
|
+
function Bt(e, t, i = {}) {
|
|
96
|
+
const o = Mt(e, !!i.assertive);
|
|
97
97
|
o.textContent = "", o.textContent = t;
|
|
98
98
|
}
|
|
99
|
-
function
|
|
99
|
+
function Ot(e) {
|
|
100
100
|
return e.hasAttribute("disabled") ? !0 : e.disabled === !0;
|
|
101
101
|
}
|
|
102
|
-
function
|
|
102
|
+
function Rt(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
|
|
113
|
+
function _(e) {
|
|
114
114
|
return Array.from(
|
|
115
|
-
e.querySelectorAll(
|
|
116
|
-
).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") ||
|
|
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)));
|
|
117
117
|
}
|
|
118
|
-
function
|
|
118
|
+
function j(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
|
|
124
|
+
function Pt(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 =
|
|
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 =
|
|
134
|
+
const l = a[0], c = a[a.length - 1], d = j(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 =
|
|
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
|
|
146
|
-
return
|
|
145
|
+
function Ft() {
|
|
146
|
+
return j(document);
|
|
147
147
|
}
|
|
148
|
-
function
|
|
148
|
+
function Ut(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
|
|
155
|
+
function Vt(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
|
|
158
|
+
function _t(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
|
|
172
|
+
function Kt(e) {
|
|
173
173
|
const i = (e.ownerDocument || document).body;
|
|
174
174
|
if (!i) return () => {
|
|
175
175
|
};
|
|
176
|
-
const o =
|
|
176
|
+
const o = _t(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
|
|
188
|
+
const Q = {
|
|
189
189
|
width: 400,
|
|
190
190
|
height: 280,
|
|
191
191
|
arrowHeight: 12,
|
|
192
192
|
gap: 8,
|
|
193
193
|
viewportPadding: 16
|
|
194
194
|
};
|
|
195
|
-
function
|
|
195
|
+
function Nt(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
|
|
214
|
+
function $t(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
|
|
218
|
+
function jt(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
|
|
223
|
-
const r = o.height + o.arrowHeight, n =
|
|
222
|
+
function Qt(e, t, i, o = Q) {
|
|
223
|
+
const r = o.height + o.arrowHeight, n = Nt(
|
|
224
224
|
e,
|
|
225
225
|
i,
|
|
226
226
|
r,
|
|
227
227
|
o.gap,
|
|
228
228
|
o.viewportPadding
|
|
229
|
-
), a =
|
|
229
|
+
), a = $t(
|
|
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
|
|
241
|
+
function Wt(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
|
|
249
|
-
const r =
|
|
248
|
+
function ue(e, t, i, o = Q) {
|
|
249
|
+
const r = Qt(e, t, i, o), n = jt(
|
|
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
|
|
260
|
-
function
|
|
259
|
+
const Yt = 20;
|
|
260
|
+
function Xt(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 >=
|
|
267
|
+
t.length >= Yt && 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
|
|
282
|
+
const Gt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Jt = (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
|
|
291
|
-
function
|
|
292
|
-
return
|
|
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) => {
|
|
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
|
|
299
|
-
})),
|
|
298
|
+
throw p = null, x = null, t;
|
|
299
|
+
})), p;
|
|
300
300
|
}
|
|
301
|
-
async function
|
|
302
|
-
const t = await
|
|
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;
|
|
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
|
|
311
|
+
const K = "qaid_visitor_id", N = "qaid_hide_feedback", ie = [
|
|
312
312
|
"#ef4444",
|
|
313
313
|
"#f59e0b",
|
|
314
314
|
"#22c55e",
|
|
@@ -316,34 +316,34 @@ const U = "qaid_visitor_id", V = "qaid_hide_feedback", Jt = [
|
|
|
316
316
|
"#111827",
|
|
317
317
|
"#ffffff"
|
|
318
318
|
];
|
|
319
|
-
function
|
|
319
|
+
function oe() {
|
|
320
320
|
return typeof window.matchMedia == "function" && window.matchMedia("(pointer: coarse)").matches;
|
|
321
321
|
}
|
|
322
322
|
function k(e) {
|
|
323
|
-
return e ? `${
|
|
323
|
+
return e ? `${N}_${e}` : N;
|
|
324
324
|
}
|
|
325
|
-
function
|
|
325
|
+
function ae(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
|
|
332
|
+
function $(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
|
|
338
|
+
function ne() {
|
|
339
339
|
try {
|
|
340
|
-
let e = localStorage.getItem(
|
|
341
|
-
return e || (e = crypto.randomUUID(), localStorage.setItem(
|
|
340
|
+
let e = localStorage.getItem(K);
|
|
341
|
+
return e || (e = crypto.randomUUID(), localStorage.setItem(K, e)), e;
|
|
342
342
|
} catch {
|
|
343
343
|
return crypto.randomUUID();
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
|
-
class
|
|
346
|
+
class re {
|
|
347
347
|
config;
|
|
348
348
|
state = "IDLE";
|
|
349
349
|
feedbackData = {
|
|
@@ -446,8 +446,12 @@ class ie {
|
|
|
446
446
|
negativeLabel: t.text?.negativeLabel ?? "Send negative feedback",
|
|
447
447
|
recordLabel: t.text?.recordLabel ?? "Record a screen recording",
|
|
448
448
|
dismissLabel: t.text?.dismissLabel ?? "Hide Feedback",
|
|
449
|
-
feedbackLabel: t.text?.feedbackLabel ?? "Send feedback"
|
|
449
|
+
feedbackLabel: t.text?.feedbackLabel ?? "Send feedback",
|
|
450
|
+
confirmationTitle: t.text?.confirmationTitle ?? "Thank you!",
|
|
451
|
+
confirmationMessage: t.text?.confirmationMessage ?? "Your feedback has been received.",
|
|
452
|
+
confirmationClose: t.text?.confirmationClose ?? "Close"
|
|
450
453
|
},
|
|
454
|
+
hideConfirmation: t.hideConfirmation ?? !1,
|
|
451
455
|
modalWidth: t.modalWidth ?? 400,
|
|
452
456
|
backdropOpacity: t.backdropOpacity ?? 0.3,
|
|
453
457
|
fontFamily: t.fontFamily ?? "system-ui, -apple-system, sans-serif",
|
|
@@ -455,7 +459,7 @@ class ie {
|
|
|
455
459
|
captureScreenshot: t.captureScreenshot ?? !1,
|
|
456
460
|
annotate: t.annotate ?? !0,
|
|
457
461
|
annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6366f1",
|
|
458
|
-
annotationPalette: t.annotationPalette ??
|
|
462
|
+
annotationPalette: t.annotationPalette ?? ie,
|
|
459
463
|
screenshotMethod: t.screenshotMethod ?? "permission",
|
|
460
464
|
screenshotOptions: {
|
|
461
465
|
quality: t.screenshotOptions?.quality ?? 0.8,
|
|
@@ -482,12 +486,12 @@ class ie {
|
|
|
482
486
|
video: t.quests?.video ?? "",
|
|
483
487
|
// Quest service reuses the feedback API key unless overridden.
|
|
484
488
|
apiKey: t.quests?.apiKey ?? t.apiKey ?? "",
|
|
485
|
-
moduleUrl: t.quests?.moduleUrl ??
|
|
489
|
+
moduleUrl: t.quests?.moduleUrl ?? Gt
|
|
486
490
|
}
|
|
487
|
-
}, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId =
|
|
491
|
+
}, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = ne(), this.init();
|
|
488
492
|
}
|
|
489
493
|
applyVars(t) {
|
|
490
|
-
|
|
494
|
+
Et(t, this.cssVars);
|
|
491
495
|
}
|
|
492
496
|
/**
|
|
493
497
|
* Announce a message via the shared visually-hidden live regions.
|
|
@@ -497,7 +501,7 @@ class ie {
|
|
|
497
501
|
*/
|
|
498
502
|
announceMsg(t, i = !1) {
|
|
499
503
|
const o = this.overlayShadowRoot ?? this.shadowRoot;
|
|
500
|
-
o &&
|
|
504
|
+
o && Bt(o, t, { assertive: i });
|
|
501
505
|
}
|
|
502
506
|
/**
|
|
503
507
|
* Turn a transient surface into an accessible modal dialog: save the
|
|
@@ -505,16 +509,16 @@ class ie {
|
|
|
505
509
|
* background. Paired with closeDialogA11y() on every close path.
|
|
506
510
|
*/
|
|
507
511
|
openDialogA11y(t, i) {
|
|
508
|
-
this.dialogTrigger =
|
|
512
|
+
this.dialogTrigger = Ft(), Vt(t, i), this.dialogTrap = Pt(t), this.dialogRestoreInert = Kt(t);
|
|
509
513
|
}
|
|
510
514
|
closeDialogA11y() {
|
|
511
|
-
this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null),
|
|
515
|
+
this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Ut(this.dialogTrigger), this.dialogTrigger = null;
|
|
512
516
|
}
|
|
513
517
|
clearActiveThumb() {
|
|
514
518
|
this.activeThumbBtn && (this.activeThumbBtn.setAttribute("aria-pressed", "false"), this.activeThumbBtn = null);
|
|
515
519
|
}
|
|
516
520
|
init() {
|
|
517
|
-
|
|
521
|
+
It(), this.cssVars = Tt({
|
|
518
522
|
positiveColor: this.config.colors.positive,
|
|
519
523
|
negativeColor: this.config.colors.negative,
|
|
520
524
|
markerColor: this.config.colors.marker,
|
|
@@ -523,7 +527,7 @@ class ie {
|
|
|
523
527
|
backdropOpacity: this.config.backdropOpacity,
|
|
524
528
|
fontFamily: this.config.fontFamily,
|
|
525
529
|
fontSize: this.config.fontSize
|
|
526
|
-
}), !this.config.hideDismiss &&
|
|
530
|
+
}), !this.config.hideDismiss && ae(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = Xt((t) => {
|
|
527
531
|
this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
|
|
528
532
|
}), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom(), (this.config.captureVideo && this.videoSupported() || this.config.captureScreenshot) && this.schedulePrewarm(() => {
|
|
529
533
|
this.config.captureVideo && this.videoSupported() && this.prewarmVideo(), this.config.captureScreenshot && this.prewarmScreenshot();
|
|
@@ -536,13 +540,13 @@ class ie {
|
|
|
536
540
|
* swallowed — a failed preload just falls back to an on-demand load.
|
|
537
541
|
*/
|
|
538
542
|
prewarmVideo() {
|
|
539
|
-
this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-
|
|
543
|
+
this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-BVFd_ryf.js").catch(() => {
|
|
540
544
|
}), import("./video-BOYqf2Im.js").catch(() => {
|
|
541
545
|
}));
|
|
542
546
|
}
|
|
543
547
|
prewarmScreenshot() {
|
|
544
548
|
this.screenshotPrewarmed || (this.screenshotPrewarmed = !0, (this.shouldCaptureViaDom() ? import("./screenshot-dom-CME7tYRE.js") : import("./screenshot-BkOCLuS2.js")).catch(() => {
|
|
545
|
-
}), this.config.annotate && import("./annotate-
|
|
549
|
+
}), this.config.annotate && import("./annotate-CMq95aXG.js").then((t) => t.d).catch(() => {
|
|
546
550
|
}));
|
|
547
551
|
}
|
|
548
552
|
/** Run fn when the main thread is idle; cancelled by destroy(). */
|
|
@@ -571,7 +575,7 @@ class ie {
|
|
|
571
575
|
}), this.domObserver.observe(document.body, { childList: !0 });
|
|
572
576
|
}
|
|
573
577
|
checkMobile() {
|
|
574
|
-
this.isMobile =
|
|
578
|
+
this.isMobile = pt();
|
|
575
579
|
}
|
|
576
580
|
handleResize() {
|
|
577
581
|
this.checkMobile();
|
|
@@ -581,7 +585,7 @@ class ie {
|
|
|
581
585
|
let t = null;
|
|
582
586
|
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
587
|
const i = document.createElement("style");
|
|
584
|
-
if (i.textContent =
|
|
588
|
+
if (i.textContent = U(), this.shadowRoot.appendChild(i), this.config.css) {
|
|
585
589
|
const d = document.createElement("style");
|
|
586
590
|
d.textContent = this.config.css, this.shadowRoot.appendChild(d);
|
|
587
591
|
}
|
|
@@ -605,20 +609,20 @@ class ie {
|
|
|
605
609
|
const d = document.createElement("div");
|
|
606
610
|
d.className = "qaid-tooltip-wrapper";
|
|
607
611
|
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 ||
|
|
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", () => {
|
|
609
613
|
this.prewarmTargeting(), this.showTooltip(s);
|
|
610
614
|
}), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s), this.buttonsContainer.appendChild(d);
|
|
611
615
|
} else if (!this.config.hideThumbs) {
|
|
612
616
|
const d = document.createElement("div");
|
|
613
617
|
d.className = "qaid-tooltip-wrapper";
|
|
614
618
|
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 ||
|
|
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", () => {
|
|
616
620
|
this.prewarmTargeting(), this.showTooltip(s);
|
|
617
621
|
}), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s);
|
|
618
622
|
const u = document.createElement("div");
|
|
619
623
|
u.className = "qaid-tooltip-wrapper";
|
|
620
624
|
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 ||
|
|
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", () => {
|
|
622
626
|
this.prewarmTargeting(), this.showTooltip(h);
|
|
623
627
|
}), h.addEventListener("mouseleave", () => this.hideTooltip()), u.appendChild(h), this.buttonsContainer.appendChild(d), this.buttonsContainer.appendChild(u);
|
|
624
628
|
}
|
|
@@ -626,7 +630,7 @@ class ie {
|
|
|
626
630
|
const d = document.createElement("div");
|
|
627
631
|
d.className = "qaid-tooltip-wrapper";
|
|
628
632
|
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 ||
|
|
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", () => {
|
|
630
634
|
this.ensureRecording().then(
|
|
631
635
|
(h) => this.config.videoOptions.redaction ? h.startPicking() : h.startRecording()
|
|
632
636
|
);
|
|
@@ -650,7 +654,7 @@ class ie {
|
|
|
650
654
|
if (this.overlayShadowRoot) return this.overlayShadowRoot;
|
|
651
655
|
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
656
|
const t = document.createElement("style");
|
|
653
|
-
if (t.textContent =
|
|
657
|
+
if (t.textContent = U(), this.overlayShadowRoot.appendChild(t), this.config.css) {
|
|
654
658
|
const i = document.createElement("style");
|
|
655
659
|
i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
|
|
656
660
|
}
|
|
@@ -660,7 +664,7 @@ class ie {
|
|
|
660
664
|
showTooltip(t) {
|
|
661
665
|
const i = this.tooltipElement;
|
|
662
666
|
i.style.visibility = "hidden", i.classList.add("qaid-tooltip-visible");
|
|
663
|
-
const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } =
|
|
667
|
+
const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Wt(
|
|
664
668
|
o,
|
|
665
669
|
r,
|
|
666
670
|
{ width: window.innerWidth, height: window.innerHeight }
|
|
@@ -671,10 +675,10 @@ class ie {
|
|
|
671
675
|
this.tooltipElement.classList.remove("qaid-tooltip-visible");
|
|
672
676
|
}
|
|
673
677
|
handleDismiss() {
|
|
674
|
-
this.buttonsContainer.classList.add("qaid-dismissed"),
|
|
678
|
+
this.buttonsContainer.classList.add("qaid-dismissed"), $(this.config.apiKey, !0);
|
|
675
679
|
}
|
|
676
680
|
handleThumbClick(t, i, o) {
|
|
677
|
-
if (this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"),
|
|
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")
|
|
678
682
|
this.submitDirectFeedback(t, i);
|
|
679
683
|
else {
|
|
680
684
|
this.activeThumbBtn = i, i.setAttribute("aria-pressed", "true");
|
|
@@ -707,7 +711,7 @@ class ie {
|
|
|
707
711
|
* instead of the permission-based Screen Capture API. Explicit "dom" wins;
|
|
708
712
|
* otherwise DOM is used on touch devices to avoid the getDisplayMedia prompt. */
|
|
709
713
|
shouldCaptureViaDom() {
|
|
710
|
-
return this.config.screenshotMethod === "dom" ||
|
|
714
|
+
return this.config.screenshotMethod === "dom" || oe();
|
|
711
715
|
}
|
|
712
716
|
/**
|
|
713
717
|
* Open the full-screen annotation editor over the captured screenshot,
|
|
@@ -720,7 +724,7 @@ class ie {
|
|
|
720
724
|
const i = this.ensureOverlayHost(), o = this.overlayShadowHost, r = o.style.pointerEvents;
|
|
721
725
|
o.style.pointerEvents = "auto";
|
|
722
726
|
try {
|
|
723
|
-
const { openAnnotationEditor: n } = await import("./annotate-
|
|
727
|
+
const { openAnnotationEditor: n } = await import("./annotate-CMq95aXG.js").then((a) => a.d);
|
|
724
728
|
return await n({
|
|
725
729
|
dataUrl: t,
|
|
726
730
|
root: i,
|
|
@@ -824,7 +828,7 @@ class ie {
|
|
|
824
828
|
const o = this.questIdFor(t);
|
|
825
829
|
if (!o) return !1;
|
|
826
830
|
try {
|
|
827
|
-
return this.activeQuest?.destroy(), this.activeQuest = await
|
|
831
|
+
return this.activeQuest?.destroy(), this.activeQuest = await ee({
|
|
828
832
|
questId: o,
|
|
829
833
|
base: this.config.quests.base,
|
|
830
834
|
apiKey: this.config.quests.apiKey || void 0,
|
|
@@ -853,7 +857,7 @@ class ie {
|
|
|
853
857
|
*/
|
|
854
858
|
async ensureModal() {
|
|
855
859
|
if (!this.modal) {
|
|
856
|
-
const { ModalController: t } = await import("./modal-
|
|
860
|
+
const { ModalController: t } = await import("./modal-Br5x7m6f.js");
|
|
857
861
|
this.modal = new t(this.makeModalHost());
|
|
858
862
|
}
|
|
859
863
|
return this.modal;
|
|
@@ -899,7 +903,7 @@ class ie {
|
|
|
899
903
|
}
|
|
900
904
|
/** Warm the modal chunk while the user is targeting, so it opens instantly. */
|
|
901
905
|
prewarmModal() {
|
|
902
|
-
this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-
|
|
906
|
+
this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-Br5x7m6f.js").catch(() => {
|
|
903
907
|
}));
|
|
904
908
|
}
|
|
905
909
|
/**
|
|
@@ -909,7 +913,7 @@ class ie {
|
|
|
909
913
|
*/
|
|
910
914
|
async ensureTargeting() {
|
|
911
915
|
if (!this.targeting) {
|
|
912
|
-
const { TargetingController: t } = await import("./targeting-
|
|
916
|
+
const { TargetingController: t } = await import("./targeting-1pK6nJI9.js");
|
|
913
917
|
this.targeting = new t(this.makeTargetingHost());
|
|
914
918
|
}
|
|
915
919
|
return this.targeting;
|
|
@@ -954,7 +958,7 @@ class ie {
|
|
|
954
958
|
}
|
|
955
959
|
/** Warm the targeting chunk on thumb-button hover, before the click. */
|
|
956
960
|
prewarmTargeting() {
|
|
957
|
-
this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-
|
|
961
|
+
this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-1pK6nJI9.js").catch(() => {
|
|
958
962
|
}));
|
|
959
963
|
}
|
|
960
964
|
// ==================== Video Recording ====================
|
|
@@ -973,7 +977,7 @@ class ie {
|
|
|
973
977
|
*/
|
|
974
978
|
async ensureRecording() {
|
|
975
979
|
if (!this.recording) {
|
|
976
|
-
const { RecordingController: t } = await import("./recording-
|
|
980
|
+
const { RecordingController: t } = await import("./recording-BVFd_ryf.js");
|
|
977
981
|
this.recording = new t(this.makeRecordingHost());
|
|
978
982
|
}
|
|
979
983
|
return this.recording;
|
|
@@ -1029,13 +1033,13 @@ class ie {
|
|
|
1029
1033
|
const t = window;
|
|
1030
1034
|
this.prewarmIsTimeout ? clearTimeout(this.prewarmHandle) : t.cancelIdleCallback?.(this.prewarmHandle), this.prewarmHandle = null;
|
|
1031
1035
|
}
|
|
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,
|
|
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();
|
|
1033
1037
|
}
|
|
1034
1038
|
}
|
|
1035
|
-
function
|
|
1039
|
+
function W(e) {
|
|
1036
1040
|
return document.querySelector(e)?.textContent?.trim() ?? "";
|
|
1037
1041
|
}
|
|
1038
|
-
function
|
|
1042
|
+
function se() {
|
|
1039
1043
|
const e = document.querySelector(
|
|
1040
1044
|
'script[type="application/json"][data-feedback-config]'
|
|
1041
1045
|
);
|
|
@@ -1044,23 +1048,23 @@ function oe() {
|
|
|
1044
1048
|
if (!t) return null;
|
|
1045
1049
|
try {
|
|
1046
1050
|
const i = JSON.parse(t);
|
|
1047
|
-
return i.cssSelector && !i.css && (i.css =
|
|
1051
|
+
return i.cssSelector && !i.css && (i.css = W(i.cssSelector), delete i.cssSelector), i;
|
|
1048
1052
|
} catch {
|
|
1049
1053
|
return null;
|
|
1050
1054
|
}
|
|
1051
1055
|
}
|
|
1052
|
-
function
|
|
1056
|
+
function de(e) {
|
|
1053
1057
|
const t = e.getAttribute("data-endpoint");
|
|
1054
1058
|
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"),
|
|
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");
|
|
1056
1060
|
return {
|
|
1057
1061
|
endpoint: t,
|
|
1058
|
-
css:
|
|
1059
|
-
apiKey:
|
|
1060
|
-
captureScreenshot:
|
|
1062
|
+
css: P ? W(P) : void 0,
|
|
1063
|
+
apiKey: tt ?? void 0,
|
|
1064
|
+
captureScreenshot: et === "true" ? !0 : void 0,
|
|
1061
1065
|
// Annotation is on by default; only an explicit "false" disables it.
|
|
1062
|
-
annotate:
|
|
1063
|
-
annotationColor:
|
|
1066
|
+
annotate: it === "false" ? !1 : void 0,
|
|
1067
|
+
annotationColor: ot ?? void 0,
|
|
1064
1068
|
screenshotOptions: v || y || w ? {
|
|
1065
1069
|
quality: v ? parseFloat(v) : void 0,
|
|
1066
1070
|
maxWidth: y ? parseInt(y, 10) : void 0,
|
|
@@ -1068,68 +1072,72 @@ function ae(e) {
|
|
|
1068
1072
|
} : void 0,
|
|
1069
1073
|
container: l ?? void 0,
|
|
1070
1074
|
buttonClass: c ?? void 0,
|
|
1071
|
-
direction:
|
|
1075
|
+
direction: dt ?? void 0,
|
|
1072
1076
|
position: i ?? void 0,
|
|
1073
1077
|
zIndex: o ? parseInt(o, 10) : void 0,
|
|
1074
1078
|
skipTargeting: d === "true" ? !0 : void 0,
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
+
hideConfirmation: s === "true" ? !0 : void 0,
|
|
1080
|
+
singleButton: u === "true" ? !0 : void 0,
|
|
1081
|
+
feedbackMode: h ?? void 0,
|
|
1082
|
+
incognito: f === "true" ? !0 : void 0,
|
|
1083
|
+
buttonSize: Y ?? void 0,
|
|
1079
1084
|
offset: m || g ? {
|
|
1080
1085
|
x: m ? parseInt(m, 10) : void 0,
|
|
1081
1086
|
y: g ? parseInt(g, 10) : void 0
|
|
1082
1087
|
} : void 0,
|
|
1083
|
-
modalWidth:
|
|
1084
|
-
backdropOpacity:
|
|
1085
|
-
fontFamily:
|
|
1088
|
+
modalWidth: C ? parseInt(C, 10) : void 0,
|
|
1089
|
+
backdropOpacity: S ? parseFloat(S) : void 0,
|
|
1090
|
+
fontFamily: X ?? void 0,
|
|
1086
1091
|
fontSize: A ? parseInt(A, 10) : void 0,
|
|
1087
1092
|
colors: {
|
|
1088
1093
|
positive: r ?? void 0,
|
|
1089
1094
|
negative: n ?? void 0,
|
|
1090
1095
|
marker: a ?? void 0
|
|
1091
1096
|
},
|
|
1092
|
-
text: T || E ||
|
|
1097
|
+
text: T || E || z || L || M || B || O || I || D || H ? {
|
|
1093
1098
|
tooltip: T ?? void 0,
|
|
1094
1099
|
modalTitle: E ?? void 0,
|
|
1095
|
-
modalSubtitle:
|
|
1096
|
-
placeholder:
|
|
1097
|
-
submitButton:
|
|
1098
|
-
skipButton:
|
|
1099
|
-
feedbackLabel:
|
|
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,
|
|
1105
|
+
confirmationTitle: I ?? void 0,
|
|
1106
|
+
confirmationMessage: D ?? void 0,
|
|
1107
|
+
confirmationClose: H ?? void 0
|
|
1100
1108
|
} : void 0,
|
|
1101
|
-
positiveIcon:
|
|
1102
|
-
negativeIcon:
|
|
1103
|
-
feedbackIcon:
|
|
1104
|
-
screenshotMethod:
|
|
1105
|
-
captureVideo:
|
|
1106
|
-
hideThumbs:
|
|
1107
|
-
hideDismiss:
|
|
1108
|
-
videoOptions: q ||
|
|
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 ? {
|
|
1109
1117
|
maxDuration: q ? parseInt(q, 10) : void 0,
|
|
1110
|
-
redaction:
|
|
1118
|
+
redaction: R === "true" ? !0 : void 0
|
|
1111
1119
|
} : void 0,
|
|
1112
|
-
quests:
|
|
1113
|
-
base:
|
|
1114
|
-
up:
|
|
1115
|
-
down:
|
|
1116
|
-
video:
|
|
1117
|
-
apiKey:
|
|
1118
|
-
moduleUrl:
|
|
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
|
|
1119
1127
|
} : void 0
|
|
1120
1128
|
};
|
|
1121
1129
|
}
|
|
1122
|
-
function
|
|
1130
|
+
function le() {
|
|
1123
1131
|
if (typeof document > "u") return;
|
|
1124
1132
|
const e = () => {
|
|
1125
|
-
const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i =
|
|
1126
|
-
r?.endpoint && new
|
|
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);
|
|
1127
1135
|
};
|
|
1128
1136
|
document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
|
|
1129
1137
|
}
|
|
1130
|
-
|
|
1138
|
+
le();
|
|
1131
1139
|
export {
|
|
1132
|
-
|
|
1133
|
-
|
|
1140
|
+
re as Q,
|
|
1141
|
+
ue as c
|
|
1134
1142
|
};
|
|
1135
|
-
//# sourceMappingURL=loader-
|
|
1143
|
+
//# sourceMappingURL=loader-CYM1rxDH.js.map
|