@qaiddev/thumbs-embed 1.5.1 → 1.6.1
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/annotate.d.ts +9 -1
- package/dist/chunks/{annotate-BNibaDg3.js → annotate-NeITyYNe.js} +151 -104
- package/dist/chunks/annotate-NeITyYNe.js.map +1 -0
- package/dist/chunks/{bootstrap-U4yiPm5-.js → loader-DnJ3MHkt.js} +309 -273
- package/dist/chunks/loader-DnJ3MHkt.js.map +1 -0
- package/dist/chunks/{modal-BX5wqy4s.js → modal-C8Ca7E5j.js} +30 -30
- package/dist/chunks/modal-C8Ca7E5j.js.map +1 -0
- package/dist/chunks/{recording--IwOtRL2.js → recording-DhRZ6-tW.js} +133 -74
- package/dist/chunks/recording-DhRZ6-tW.js.map +1 -0
- package/dist/chunks/{targeting-DwdDr9Cm.js → targeting-BEQU2Ogo.js} +2 -2
- package/dist/chunks/targeting-BEQU2Ogo.js.map +1 -0
- package/dist/icons.d.ts +2 -0
- package/dist/index.js +2569 -19
- package/dist/index.js.map +1 -1
- package/dist/loader.js +2 -4
- package/dist/loader.js.map +1 -1
- package/dist/qaid.umd.cjs +19 -17
- package/dist/qaid.umd.cjs.map +1 -1
- package/dist/targeting.d.ts +3 -3
- package/dist/types.d.ts +39 -2
- package/package.json +2 -2
- package/dist/chunks/annotate-BNibaDg3.js.map +0 -1
- package/dist/chunks/bootstrap-U4yiPm5-.js.map +0 -1
- package/dist/chunks/modal-BX5wqy4s.js.map +0 -1
- package/dist/chunks/network-capture-DMbMwwwR.js +0 -63
- package/dist/chunks/network-capture-DMbMwwwR.js.map +0 -1
- package/dist/chunks/recording--IwOtRL2.js.map +0 -1
- package/dist/chunks/targeting-DwdDr9Cm.js.map +0 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { i as
|
|
2
|
-
const lt = "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-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{padding:0}button.qaid-annotate-tool svg,button.qaid-annotate-action svg{width:20px;height:20px}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}}", ct = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
|
|
3
|
-
let
|
|
4
|
-
const
|
|
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 = {
|
|
5
5
|
small: 36,
|
|
6
6
|
medium: 48,
|
|
7
7
|
large: 64
|
|
8
|
-
},
|
|
8
|
+
}, yt = {
|
|
9
9
|
small: 18,
|
|
10
10
|
medium: 24,
|
|
11
11
|
large: 32
|
|
12
12
|
};
|
|
13
|
-
function
|
|
14
|
-
const [o,
|
|
15
|
-
return 0.2126 * o + 0.7152 *
|
|
13
|
+
function wt(e, t, i) {
|
|
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
|
+
return 0.2126 * o + 0.7152 * r + 0.0722 * n;
|
|
16
16
|
}
|
|
17
|
-
function
|
|
17
|
+
function qt(e) {
|
|
18
18
|
if (e.startsWith("#")) {
|
|
19
|
-
const i = e.slice(1), o = i.length === 3 ? i.split("").map((
|
|
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 {
|
|
21
|
-
r:
|
|
22
|
-
g:
|
|
23
|
-
b:
|
|
21
|
+
r: r >> 16 & 255,
|
|
22
|
+
g: r >> 8 & 255,
|
|
23
|
+
b: r & 255
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
const t = e.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
|
|
@@ -30,50 +30,50 @@ function bt(e) {
|
|
|
30
30
|
b: parseInt(t[3])
|
|
31
31
|
} : null;
|
|
32
32
|
}
|
|
33
|
-
function
|
|
34
|
-
const t =
|
|
35
|
-
return t &&
|
|
33
|
+
function xt(e) {
|
|
34
|
+
const t = qt(e);
|
|
35
|
+
return t && wt(t.r, t.g, t.b) > 0.4 ? "black" : "white";
|
|
36
36
|
}
|
|
37
|
-
function
|
|
37
|
+
function kt(e = {}) {
|
|
38
38
|
const {
|
|
39
39
|
positiveColor: t = "rgb(0, 200, 83)",
|
|
40
40
|
negativeColor: i = "rgb(255, 0, 0)",
|
|
41
41
|
markerColor: o = "#6366f1",
|
|
42
|
-
buttonSize:
|
|
43
|
-
modalWidth:
|
|
44
|
-
backdropOpacity:
|
|
42
|
+
buttonSize: r = "medium",
|
|
43
|
+
modalWidth: n = 400,
|
|
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 = vt[r], s = yt[r], u = xt(o);
|
|
48
48
|
return {
|
|
49
49
|
"--qaid-positive": t,
|
|
50
50
|
"--qaid-negative": i,
|
|
51
51
|
"--qaid-marker": o,
|
|
52
|
-
"--qaid-marker-text":
|
|
52
|
+
"--qaid-marker-text": u,
|
|
53
53
|
"--qaid-btn-size": `${d}px`,
|
|
54
|
-
"--qaid-icon-size": `${
|
|
55
|
-
"--qaid-modal-width": `${
|
|
56
|
-
"--qaid-backdrop-opacity": String(
|
|
54
|
+
"--qaid-icon-size": `${s}px`,
|
|
55
|
+
"--qaid-modal-width": `${n}px`,
|
|
56
|
+
"--qaid-backdrop-opacity": String(a),
|
|
57
57
|
"--qaid-font-family": l,
|
|
58
58
|
"--qaid-font-size": `${c}px`
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
function
|
|
61
|
+
function St(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 R() {
|
|
66
|
+
return ft + gt;
|
|
67
67
|
}
|
|
68
|
-
function
|
|
69
|
-
if (
|
|
68
|
+
function Ct() {
|
|
69
|
+
if (f++, f > 1) return;
|
|
70
70
|
const e = document.createElement("style");
|
|
71
|
-
e.id = "qaid-styles", e.textContent =
|
|
71
|
+
e.id = "qaid-styles", e.textContent = mt, document.head.appendChild(e);
|
|
72
72
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
73
|
+
function At() {
|
|
74
|
+
f <= 0 || (f--, f === 0 && document.getElementById("qaid-styles").remove());
|
|
75
75
|
}
|
|
76
|
-
const
|
|
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 = [
|
|
77
77
|
"a[href]",
|
|
78
78
|
"button",
|
|
79
79
|
"input",
|
|
@@ -81,25 +81,25 @@ const B = "data-qaid-a11y-live", qt = "position:absolute;width:1px;height:1px;ma
|
|
|
81
81
|
"select",
|
|
82
82
|
"[tabindex]"
|
|
83
83
|
].join(",");
|
|
84
|
-
function
|
|
84
|
+
function It(e) {
|
|
85
85
|
return e.ownerDocument || document;
|
|
86
86
|
}
|
|
87
|
-
function
|
|
87
|
+
function Dt(e, t) {
|
|
88
88
|
const i = t ? "assertive" : "polite", o = e.querySelector(
|
|
89
|
-
`[${
|
|
89
|
+
`[${P}="${i}"]`
|
|
90
90
|
);
|
|
91
91
|
if (o) return o;
|
|
92
|
-
const
|
|
93
|
-
return
|
|
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;
|
|
94
94
|
}
|
|
95
|
-
function
|
|
96
|
-
const o =
|
|
95
|
+
function Ht(e, t, i = {}) {
|
|
96
|
+
const o = Dt(e, !!i.assertive);
|
|
97
97
|
o.textContent = "", o.textContent = t;
|
|
98
98
|
}
|
|
99
|
-
function
|
|
99
|
+
function zt(e) {
|
|
100
100
|
return e.hasAttribute("disabled") ? !0 : e.disabled === !0;
|
|
101
101
|
}
|
|
102
|
-
function
|
|
102
|
+
function Lt(e) {
|
|
103
103
|
let t = e;
|
|
104
104
|
for (; t; ) {
|
|
105
105
|
if (t.hasAttribute("hidden")) return !0;
|
|
@@ -110,52 +110,52 @@ function Tt(e) {
|
|
|
110
110
|
}
|
|
111
111
|
return !1;
|
|
112
112
|
}
|
|
113
|
-
function
|
|
113
|
+
function F(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(Et)
|
|
116
|
+
).filter((i) => !(i.getAttribute("tabindex") === "-1" || i instanceof HTMLInputElement && i.type === "hidden" || i instanceof HTMLAnchorElement && !i.getAttribute("href") || zt(i) || Lt(i)));
|
|
117
117
|
}
|
|
118
|
-
function
|
|
118
|
+
function K(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 Mt(e) {
|
|
125
125
|
const t = e.ownerDocument || document;
|
|
126
126
|
let i = !1;
|
|
127
|
-
const o = (
|
|
128
|
-
if (
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
131
|
-
|
|
127
|
+
const o = (n) => {
|
|
128
|
+
if (n.key !== "Tab") return;
|
|
129
|
+
const a = F(e);
|
|
130
|
+
if (a.length === 0) {
|
|
131
|
+
n.preventDefault(), e.focus();
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
|
-
const l =
|
|
135
|
-
|
|
134
|
+
const l = a[0], c = a[a.length - 1], d = K(t), s = d ? a.indexOf(d) !== -1 : !1;
|
|
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
|
|
139
|
-
return
|
|
138
|
+
const r = F(e);
|
|
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 Bt() {
|
|
146
|
+
return K(document);
|
|
147
147
|
}
|
|
148
|
-
function
|
|
148
|
+
function Ot(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 Rt(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 Pt(e, t) {
|
|
159
159
|
let i = e;
|
|
160
160
|
for (; i && i !== t; ) {
|
|
161
161
|
const o = i.parentNode;
|
|
@@ -169,117 +169,117 @@ function zt(e, t) {
|
|
|
169
169
|
}
|
|
170
170
|
return null;
|
|
171
171
|
}
|
|
172
|
-
function
|
|
172
|
+
function Ft(e) {
|
|
173
173
|
const i = (e.ownerDocument || document).body;
|
|
174
174
|
if (!i) return () => {
|
|
175
175
|
};
|
|
176
|
-
const o =
|
|
177
|
-
return Array.from(i.children).forEach((
|
|
178
|
-
if (!(
|
|
179
|
-
const
|
|
180
|
-
|
|
176
|
+
const o = Pt(e, i), r = [];
|
|
177
|
+
return Array.from(i.children).forEach((n) => {
|
|
178
|
+
if (!(n instanceof HTMLElement) || o && n === o) return;
|
|
179
|
+
const a = n.inert === !0, l = n.getAttribute("aria-hidden");
|
|
180
|
+
a && l === "true" || (n.inert = !0, n.setAttribute("aria-hidden", "true"), r.push({ el: n, prevInert: a, prevAriaHidden: l }));
|
|
181
181
|
}), function() {
|
|
182
|
-
for (;
|
|
183
|
-
const
|
|
184
|
-
|
|
182
|
+
for (; r.length; ) {
|
|
183
|
+
const a = r.pop();
|
|
184
|
+
a.el.inert = a.prevInert, a.prevAriaHidden === null ? a.el.removeAttribute("aria-hidden") : a.el.setAttribute("aria-hidden", a.prevAriaHidden);
|
|
185
185
|
}
|
|
186
186
|
};
|
|
187
187
|
}
|
|
188
|
-
const
|
|
188
|
+
const N = {
|
|
189
189
|
width: 400,
|
|
190
190
|
height: 280,
|
|
191
191
|
arrowHeight: 12,
|
|
192
192
|
gap: 8,
|
|
193
193
|
viewportPadding: 16
|
|
194
194
|
};
|
|
195
|
-
function
|
|
196
|
-
const
|
|
197
|
-
if (
|
|
195
|
+
function Ut(e, t, i, o, r) {
|
|
196
|
+
const n = e.y, a = t - (e.y + e.height);
|
|
197
|
+
if (a >= i + o)
|
|
198
198
|
return {
|
|
199
199
|
top: e.y + e.height + o,
|
|
200
200
|
position: "below"
|
|
201
201
|
};
|
|
202
|
-
if (
|
|
202
|
+
if (n >= i + o)
|
|
203
203
|
return {
|
|
204
204
|
top: e.y - i - o,
|
|
205
205
|
position: "above"
|
|
206
206
|
};
|
|
207
|
-
const l =
|
|
207
|
+
const l = a > n ? "below" : "above";
|
|
208
208
|
let c;
|
|
209
209
|
return l === "below" ? c = Math.min(
|
|
210
210
|
e.y + e.height + o,
|
|
211
|
-
t - i -
|
|
212
|
-
) : c = Math.max(
|
|
211
|
+
t - i - r
|
|
212
|
+
) : c = Math.max(r, e.y - i - o), { top: c, position: l };
|
|
213
213
|
}
|
|
214
|
-
function
|
|
215
|
-
let
|
|
216
|
-
return
|
|
214
|
+
function Vt(e, t, i, o) {
|
|
215
|
+
let n = e.x + e.width / 2 - i / 2;
|
|
216
|
+
return n = Math.max(o, Math.min(n, t - i - o)), n;
|
|
217
217
|
}
|
|
218
|
-
function
|
|
219
|
-
const
|
|
220
|
-
return Math.max(o, Math.min(
|
|
218
|
+
function _t(e, t, i, o = 24, r = 24) {
|
|
219
|
+
const a = e.clickX - t - r / 2;
|
|
220
|
+
return Math.max(o, Math.min(a, i - o - r / 2));
|
|
221
221
|
}
|
|
222
|
-
function
|
|
223
|
-
const
|
|
222
|
+
function Kt(e, t, i, o = N) {
|
|
223
|
+
const r = o.height + o.arrowHeight, n = Ut(
|
|
224
224
|
e,
|
|
225
225
|
i,
|
|
226
|
-
|
|
226
|
+
r,
|
|
227
227
|
o.gap,
|
|
228
228
|
o.viewportPadding
|
|
229
|
-
),
|
|
229
|
+
), a = Vt(
|
|
230
230
|
e,
|
|
231
231
|
t,
|
|
232
232
|
o.width,
|
|
233
233
|
o.viewportPadding
|
|
234
234
|
);
|
|
235
235
|
return {
|
|
236
|
-
top:
|
|
237
|
-
left:
|
|
238
|
-
position:
|
|
236
|
+
top: n.top,
|
|
237
|
+
left: a,
|
|
238
|
+
position: n.position
|
|
239
239
|
};
|
|
240
240
|
}
|
|
241
|
-
function
|
|
242
|
-
const
|
|
243
|
-
let
|
|
244
|
-
|
|
245
|
-
let
|
|
246
|
-
return
|
|
241
|
+
function Nt(e, t, i, o = {}) {
|
|
242
|
+
const r = o.gap ?? 8;
|
|
243
|
+
let n = e.bottom + r;
|
|
244
|
+
n + t.height > i.height - r && (n = e.top - t.height - r);
|
|
245
|
+
let a = e.left;
|
|
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
|
|
248
|
+
function se(e, t, i, o = N) {
|
|
249
|
+
const r = Kt(e, t, i, o), n = _t(
|
|
250
250
|
e,
|
|
251
|
-
|
|
251
|
+
r.left,
|
|
252
252
|
o.width
|
|
253
253
|
);
|
|
254
254
|
return {
|
|
255
|
-
modal:
|
|
256
|
-
arrow: { left:
|
|
255
|
+
modal: r,
|
|
256
|
+
arrow: { left: n }
|
|
257
257
|
};
|
|
258
258
|
}
|
|
259
|
-
const
|
|
260
|
-
function
|
|
261
|
-
const t = [], i = console.error, o = console.warn,
|
|
259
|
+
const $t = 20;
|
|
260
|
+
function jt(e) {
|
|
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
|
-
level:
|
|
265
|
+
level: a
|
|
266
266
|
};
|
|
267
|
-
t.length >=
|
|
267
|
+
t.length >= $t && t.shift(), t.push(c), e && e(c);
|
|
268
268
|
};
|
|
269
|
-
return console.error = function(...
|
|
270
|
-
|
|
271
|
-
}, console.warn = function(...
|
|
272
|
-
|
|
273
|
-
}, console.log = function(...
|
|
274
|
-
|
|
269
|
+
return console.error = function(...a) {
|
|
270
|
+
n("error", a), i.apply(console, a);
|
|
271
|
+
}, console.warn = function(...a) {
|
|
272
|
+
n("warn", a), o.apply(console, a);
|
|
273
|
+
}, console.log = function(...a) {
|
|
274
|
+
n("log", a), r.apply(console, a);
|
|
275
275
|
}, {
|
|
276
276
|
errors: t,
|
|
277
277
|
restore: () => {
|
|
278
|
-
console.error = i, console.warn = o, console.log =
|
|
278
|
+
console.error = i, console.warn = o, console.log = r;
|
|
279
279
|
}
|
|
280
280
|
};
|
|
281
281
|
}
|
|
282
|
-
const
|
|
282
|
+
const Qt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Wt = (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 Vt = "https://unpkg.com/@qaiddev/quests-embed@1/dist/qaid-quests.js", Kt =
|
|
|
287
287
|
e
|
|
288
288
|
)
|
|
289
289
|
);
|
|
290
|
-
let
|
|
291
|
-
function
|
|
292
|
-
return
|
|
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) => {
|
|
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 b = null, x = null, t;
|
|
299
|
+
})), b;
|
|
300
300
|
}
|
|
301
|
-
async function
|
|
302
|
-
const t = await
|
|
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;
|
|
303
303
|
return new t.QaidQuests({
|
|
304
304
|
endpoint: `${i}/responses`,
|
|
305
305
|
configUrl: `${i}/${encodeURIComponent(e.questId)}/definition`,
|
|
@@ -308,35 +308,42 @@ async function Nt(e) {
|
|
|
308
308
|
onClose: e.onClose
|
|
309
309
|
});
|
|
310
310
|
}
|
|
311
|
-
const
|
|
312
|
-
|
|
311
|
+
const U = "qaid_visitor_id", V = "qaid_hide_feedback", Jt = [
|
|
312
|
+
"#ef4444",
|
|
313
|
+
"#f59e0b",
|
|
314
|
+
"#22c55e",
|
|
315
|
+
"#3b82f6",
|
|
316
|
+
"#111827",
|
|
317
|
+
"#ffffff"
|
|
318
|
+
];
|
|
319
|
+
function Zt() {
|
|
313
320
|
return typeof window.matchMedia == "function" && window.matchMedia("(pointer: coarse)").matches;
|
|
314
321
|
}
|
|
315
|
-
function
|
|
316
|
-
return e ? `${
|
|
322
|
+
function k(e) {
|
|
323
|
+
return e ? `${V}_${e}` : V;
|
|
317
324
|
}
|
|
318
|
-
function
|
|
325
|
+
function te(e) {
|
|
319
326
|
try {
|
|
320
|
-
return localStorage.getItem(
|
|
327
|
+
return localStorage.getItem(k(e)) === "1";
|
|
321
328
|
} catch {
|
|
322
329
|
return !1;
|
|
323
330
|
}
|
|
324
331
|
}
|
|
325
|
-
function
|
|
332
|
+
function _(e, t = !0) {
|
|
326
333
|
try {
|
|
327
|
-
t ? localStorage.setItem(
|
|
334
|
+
t ? localStorage.setItem(k(e), "1") : localStorage.removeItem(k(e));
|
|
328
335
|
} catch {
|
|
329
336
|
}
|
|
330
337
|
}
|
|
331
|
-
function
|
|
338
|
+
function ee() {
|
|
332
339
|
try {
|
|
333
|
-
let e = localStorage.getItem(
|
|
334
|
-
return e || (e = crypto.randomUUID(), localStorage.setItem(
|
|
340
|
+
let e = localStorage.getItem(U);
|
|
341
|
+
return e || (e = crypto.randomUUID(), localStorage.setItem(U, e)), e;
|
|
335
342
|
} catch {
|
|
336
343
|
return crypto.randomUUID();
|
|
337
344
|
}
|
|
338
345
|
}
|
|
339
|
-
class
|
|
346
|
+
class ie {
|
|
340
347
|
config;
|
|
341
348
|
state = "IDLE";
|
|
342
349
|
feedbackData = {
|
|
@@ -420,6 +427,8 @@ class Yt {
|
|
|
420
427
|
},
|
|
421
428
|
zIndex: t.zIndex ?? 50,
|
|
422
429
|
skipTargeting: t.skipTargeting ?? !1,
|
|
430
|
+
singleButton: t.singleButton ?? !1,
|
|
431
|
+
feedbackMode: t.feedbackMode ?? "target",
|
|
423
432
|
colors: {
|
|
424
433
|
positive: t.colors?.positive ?? "rgb(0, 200, 83)",
|
|
425
434
|
negative: t.colors?.negative ?? "rgb(255, 0, 0)",
|
|
@@ -436,7 +445,8 @@ class Yt {
|
|
|
436
445
|
positiveLabel: t.text?.positiveLabel ?? "Send positive feedback",
|
|
437
446
|
negativeLabel: t.text?.negativeLabel ?? "Send negative feedback",
|
|
438
447
|
recordLabel: t.text?.recordLabel ?? "Record a screen recording",
|
|
439
|
-
dismissLabel: t.text?.dismissLabel ?? "Hide Feedback"
|
|
448
|
+
dismissLabel: t.text?.dismissLabel ?? "Hide Feedback",
|
|
449
|
+
feedbackLabel: t.text?.feedbackLabel ?? "Send feedback"
|
|
440
450
|
},
|
|
441
451
|
modalWidth: t.modalWidth ?? 400,
|
|
442
452
|
backdropOpacity: t.backdropOpacity ?? 0.3,
|
|
@@ -444,6 +454,8 @@ class Yt {
|
|
|
444
454
|
fontSize: t.fontSize ?? 16,
|
|
445
455
|
captureScreenshot: t.captureScreenshot ?? !1,
|
|
446
456
|
annotate: t.annotate ?? !0,
|
|
457
|
+
annotationColor: t.annotationColor ?? t.colors?.marker ?? "#6366f1",
|
|
458
|
+
annotationPalette: t.annotationPalette ?? Jt,
|
|
447
459
|
screenshotMethod: t.screenshotMethod ?? "permission",
|
|
448
460
|
screenshotOptions: {
|
|
449
461
|
quality: t.screenshotOptions?.quality ?? 0.8,
|
|
@@ -454,6 +466,7 @@ class Yt {
|
|
|
454
466
|
hideDismiss: t.hideDismiss ?? !1,
|
|
455
467
|
positiveIcon: t.positiveIcon ?? "",
|
|
456
468
|
negativeIcon: t.negativeIcon ?? "",
|
|
469
|
+
feedbackIcon: t.feedbackIcon ?? "",
|
|
457
470
|
hideThumbs: t.hideThumbs ?? !1,
|
|
458
471
|
css: t.css ?? "",
|
|
459
472
|
captureVideo: t.captureVideo ?? !1,
|
|
@@ -469,12 +482,12 @@ class Yt {
|
|
|
469
482
|
video: t.quests?.video ?? "",
|
|
470
483
|
// Quest service reuses the feedback API key unless overridden.
|
|
471
484
|
apiKey: t.quests?.apiKey ?? t.apiKey ?? "",
|
|
472
|
-
moduleUrl: t.quests?.moduleUrl ??
|
|
485
|
+
moduleUrl: t.quests?.moduleUrl ?? Qt
|
|
473
486
|
}
|
|
474
|
-
}, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId =
|
|
487
|
+
}, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = ee(), this.init();
|
|
475
488
|
}
|
|
476
489
|
applyVars(t) {
|
|
477
|
-
|
|
490
|
+
St(t, this.cssVars);
|
|
478
491
|
}
|
|
479
492
|
/**
|
|
480
493
|
* Announce a message via the shared visually-hidden live regions.
|
|
@@ -484,7 +497,7 @@ class Yt {
|
|
|
484
497
|
*/
|
|
485
498
|
announceMsg(t, i = !1) {
|
|
486
499
|
const o = this.overlayShadowRoot ?? this.shadowRoot;
|
|
487
|
-
o &&
|
|
500
|
+
o && Ht(o, t, { assertive: i });
|
|
488
501
|
}
|
|
489
502
|
/**
|
|
490
503
|
* Turn a transient surface into an accessible modal dialog: save the
|
|
@@ -492,16 +505,16 @@ class Yt {
|
|
|
492
505
|
* background. Paired with closeDialogA11y() on every close path.
|
|
493
506
|
*/
|
|
494
507
|
openDialogA11y(t, i) {
|
|
495
|
-
this.dialogTrigger =
|
|
508
|
+
this.dialogTrigger = Bt(), Rt(t, i), this.dialogTrap = Mt(t), this.dialogRestoreInert = Ft(t);
|
|
496
509
|
}
|
|
497
510
|
closeDialogA11y() {
|
|
498
|
-
this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null),
|
|
511
|
+
this.dialogTrap?.release(), this.dialogTrap = null, this.dialogRestoreInert && (this.dialogRestoreInert(), this.dialogRestoreInert = null), Ot(this.dialogTrigger), this.dialogTrigger = null;
|
|
499
512
|
}
|
|
500
513
|
clearActiveThumb() {
|
|
501
514
|
this.activeThumbBtn && (this.activeThumbBtn.setAttribute("aria-pressed", "false"), this.activeThumbBtn = null);
|
|
502
515
|
}
|
|
503
516
|
init() {
|
|
504
|
-
|
|
517
|
+
Ct(), this.cssVars = kt({
|
|
505
518
|
positiveColor: this.config.colors.positive,
|
|
506
519
|
negativeColor: this.config.colors.negative,
|
|
507
520
|
markerColor: this.config.colors.marker,
|
|
@@ -510,7 +523,7 @@ class Yt {
|
|
|
510
523
|
backdropOpacity: this.config.backdropOpacity,
|
|
511
524
|
fontFamily: this.config.fontFamily,
|
|
512
525
|
fontSize: this.config.fontSize
|
|
513
|
-
}), !this.config.hideDismiss &&
|
|
526
|
+
}), !this.config.hideDismiss && te(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = jt((t) => {
|
|
514
527
|
this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
|
|
515
528
|
}), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom(), (this.config.captureVideo && this.videoSupported() || this.config.captureScreenshot) && this.schedulePrewarm(() => {
|
|
516
529
|
this.config.captureVideo && this.videoSupported() && this.prewarmVideo(), this.config.captureScreenshot && this.prewarmScreenshot();
|
|
@@ -523,13 +536,13 @@ class Yt {
|
|
|
523
536
|
* swallowed — a failed preload just falls back to an on-demand load.
|
|
524
537
|
*/
|
|
525
538
|
prewarmVideo() {
|
|
526
|
-
this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording
|
|
539
|
+
this.videoPrewarmed || (this.videoPrewarmed = !0, import("./recording-DhRZ6-tW.js").catch(() => {
|
|
527
540
|
}), import("./video-BOYqf2Im.js").catch(() => {
|
|
528
541
|
}));
|
|
529
542
|
}
|
|
530
543
|
prewarmScreenshot() {
|
|
531
544
|
this.screenshotPrewarmed || (this.screenshotPrewarmed = !0, (this.shouldCaptureViaDom() ? import("./screenshot-dom-CME7tYRE.js") : import("./screenshot-BkOCLuS2.js")).catch(() => {
|
|
532
|
-
}), this.config.annotate && import("./annotate-
|
|
545
|
+
}), this.config.annotate && import("./annotate-NeITyYNe.js").then((t) => t.d).catch(() => {
|
|
533
546
|
}));
|
|
534
547
|
}
|
|
535
548
|
/** Run fn when the main thread is idle; cancelled by destroy(). */
|
|
@@ -558,7 +571,7 @@ class Yt {
|
|
|
558
571
|
}), this.domObserver.observe(document.body, { childList: !0 });
|
|
559
572
|
}
|
|
560
573
|
checkMobile() {
|
|
561
|
-
this.isMobile =
|
|
574
|
+
this.isMobile = ct();
|
|
562
575
|
}
|
|
563
576
|
handleResize() {
|
|
564
577
|
this.checkMobile();
|
|
@@ -568,7 +581,7 @@ class Yt {
|
|
|
568
581
|
let t = null;
|
|
569
582
|
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" });
|
|
570
583
|
const i = document.createElement("style");
|
|
571
|
-
if (i.textContent =
|
|
584
|
+
if (i.textContent = R(), this.shadowRoot.appendChild(i), this.config.css) {
|
|
572
585
|
const d = document.createElement("style");
|
|
573
586
|
d.textContent = this.config.css, this.shadowRoot.appendChild(d);
|
|
574
587
|
}
|
|
@@ -577,8 +590,8 @@ class Yt {
|
|
|
577
590
|
this.buttonsContainer = document.createElement("div"), this.buttonsContainer.className = `qaid-buttons qaid-${this.config.position} ${o}`.trim(), this.config.incognito && this.buttonsContainer.classList.add("qaid-incognito");
|
|
578
591
|
else {
|
|
579
592
|
this.buttonsContainer = document.createElement("div"), this.buttonsContainer.className = `qaid-buttons qaid-auto-container qaid-${this.config.position} ${o}${this.config.incognito ? " qaid-incognito" : ""}`.trim(), this.buttonsContainer.style.pointerEvents = "auto";
|
|
580
|
-
const { x: d, y:
|
|
581
|
-
this.config.position.includes("right") ? this.buttonsContainer.style.right = `${d}px` : this.buttonsContainer.style.left = `${d}px`, this.config.position.includes("bottom") ? this.buttonsContainer.style.bottom = `${
|
|
593
|
+
const { x: d, y: s } = this.config.offset;
|
|
594
|
+
this.config.position.includes("right") ? this.buttonsContainer.style.right = `${d}px` : this.buttonsContainer.style.left = `${d}px`, this.config.position.includes("bottom") ? this.buttonsContainer.style.bottom = `${s}px` : this.buttonsContainer.style.top = `${s}px`;
|
|
582
595
|
}
|
|
583
596
|
this.applyVars(this.buttonsContainer), this.shadowRoot.appendChild(this.buttonsContainer), this.buttonsContainer.addEventListener("keydown", (d) => {
|
|
584
597
|
(d.key === "Enter" || d.key === " " || d.key === "Spacebar") && (this.keyboardActivation = !0);
|
|
@@ -587,34 +600,41 @@ class Yt {
|
|
|
587
600
|
}), this.buttonsContainer.addEventListener("pointerdown", () => {
|
|
588
601
|
this.keyboardActivation = !1;
|
|
589
602
|
});
|
|
590
|
-
const
|
|
591
|
-
if (c.className = "qaid-tooltip-text", c.textContent = l, this.applyVars(c), this.shadowRoot.appendChild(c), this.tooltipElement = c,
|
|
603
|
+
const r = !!this.config.buttonClass, n = r ? `qaid-btn-structural ${this.config.buttonClass}` : "qaid-btn", l = this.config.text.tooltip || "Feedback for us?", c = document.createElement("div");
|
|
604
|
+
if (c.className = "qaid-tooltip-text", c.textContent = l, this.applyVars(c), this.shadowRoot.appendChild(c), this.tooltipElement = c, this.config.singleButton) {
|
|
592
605
|
const d = document.createElement("div");
|
|
593
606
|
d.className = "qaid-tooltip-wrapper";
|
|
594
|
-
const
|
|
595
|
-
|
|
596
|
-
this.prewarmTargeting(), this.showTooltip(
|
|
597
|
-
}),
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
607
|
+
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", () => {
|
|
609
|
+
this.prewarmTargeting(), this.showTooltip(s);
|
|
610
|
+
}), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s), this.buttonsContainer.appendChild(d);
|
|
611
|
+
} else if (!this.config.hideThumbs) {
|
|
612
|
+
const d = document.createElement("div");
|
|
613
|
+
d.className = "qaid-tooltip-wrapper";
|
|
614
|
+
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", () => {
|
|
616
|
+
this.prewarmTargeting(), this.showTooltip(s);
|
|
617
|
+
}), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s);
|
|
618
|
+
const u = document.createElement("div");
|
|
619
|
+
u.className = "qaid-tooltip-wrapper";
|
|
620
|
+
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", () => {
|
|
622
|
+
this.prewarmTargeting(), this.showTooltip(h);
|
|
623
|
+
}), h.addEventListener("mouseleave", () => this.hideTooltip()), u.appendChild(h), this.buttonsContainer.appendChild(d), this.buttonsContainer.appendChild(u);
|
|
604
624
|
}
|
|
605
625
|
if (this.config.captureVideo && this.videoSupported()) {
|
|
606
626
|
const d = document.createElement("div");
|
|
607
627
|
d.className = "qaid-tooltip-wrapper";
|
|
608
|
-
const
|
|
609
|
-
|
|
628
|
+
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", () => {
|
|
610
630
|
this.ensureRecording().then(
|
|
611
|
-
(
|
|
631
|
+
(h) => this.config.videoOptions.redaction ? h.startPicking() : h.startRecording()
|
|
612
632
|
);
|
|
613
633
|
});
|
|
614
|
-
const
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
}),
|
|
634
|
+
const u = () => this.prewarmVideo();
|
|
635
|
+
s.addEventListener("mouseenter", () => {
|
|
636
|
+
u(), this.showTooltip(s);
|
|
637
|
+
}), s.addEventListener("focus", u), s.addEventListener("touchstart", u, { passive: !0 }), s.addEventListener("mouseleave", () => this.hideTooltip()), d.appendChild(s), this.buttonsContainer.appendChild(d);
|
|
618
638
|
}
|
|
619
639
|
this.config.hideDismiss || (this.dismissBtn = document.createElement("button"), this.dismissBtn.type = "button", this.dismissBtn.className = "qaid-dismiss-btn", this.dismissBtn.setAttribute("aria-label", this.config.text.dismissLabel), this.dismissBtn.title = this.config.text.dismissLabel, this.dismissBtn.innerHTML = '<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 2l8 8M10 2l-8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>', this.dismissBtn.addEventListener("click", (d) => {
|
|
620
640
|
d.stopPropagation(), this.handleDismiss();
|
|
@@ -630,7 +650,7 @@ class Yt {
|
|
|
630
650
|
if (this.overlayShadowRoot) return this.overlayShadowRoot;
|
|
631
651
|
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" });
|
|
632
652
|
const t = document.createElement("style");
|
|
633
|
-
if (t.textContent =
|
|
653
|
+
if (t.textContent = R(), this.overlayShadowRoot.appendChild(t), this.config.css) {
|
|
634
654
|
const i = document.createElement("style");
|
|
635
655
|
i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
|
|
636
656
|
}
|
|
@@ -640,27 +660,27 @@ class Yt {
|
|
|
640
660
|
showTooltip(t) {
|
|
641
661
|
const i = this.tooltipElement;
|
|
642
662
|
i.style.visibility = "hidden", i.classList.add("qaid-tooltip-visible");
|
|
643
|
-
const o = t.getBoundingClientRect(),
|
|
663
|
+
const o = t.getBoundingClientRect(), r = i.getBoundingClientRect(), { top: n, left: a } = Nt(
|
|
644
664
|
o,
|
|
645
|
-
|
|
665
|
+
r,
|
|
646
666
|
{ width: window.innerWidth, height: window.innerHeight }
|
|
647
667
|
);
|
|
648
|
-
i.style.top = `${
|
|
668
|
+
i.style.top = `${n}px`, i.style.left = `${a}px`, i.style.visibility = "visible";
|
|
649
669
|
}
|
|
650
670
|
hideTooltip() {
|
|
651
671
|
this.tooltipElement.classList.remove("qaid-tooltip-visible");
|
|
652
672
|
}
|
|
653
673
|
handleDismiss() {
|
|
654
|
-
this.buttonsContainer.classList.add("qaid-dismissed"),
|
|
674
|
+
this.buttonsContainer.classList.add("qaid-dismissed"), _(this.config.apiKey, !0);
|
|
655
675
|
}
|
|
656
676
|
handleThumbClick(t, i, o) {
|
|
657
|
-
if (this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"),
|
|
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")
|
|
658
678
|
this.submitDirectFeedback(t, i);
|
|
659
679
|
else {
|
|
660
680
|
this.activeThumbBtn = i, i.setAttribute("aria-pressed", "true");
|
|
661
|
-
const
|
|
662
|
-
this.keyboardActivation = !1, this.ensureTargeting().then((
|
|
663
|
-
this.destroyed || (
|
|
681
|
+
const r = this.keyboardActivation;
|
|
682
|
+
this.keyboardActivation = !1, this.ensureTargeting().then((n) => {
|
|
683
|
+
this.destroyed || (r ? n.startKeyboard(t) : n.startPointer(t, o));
|
|
664
684
|
});
|
|
665
685
|
}
|
|
666
686
|
}
|
|
@@ -687,7 +707,7 @@ class Yt {
|
|
|
687
707
|
* instead of the permission-based Screen Capture API. Explicit "dom" wins;
|
|
688
708
|
* otherwise DOM is used on touch devices to avoid the getDisplayMedia prompt. */
|
|
689
709
|
shouldCaptureViaDom() {
|
|
690
|
-
return this.config.screenshotMethod === "dom" ||
|
|
710
|
+
return this.config.screenshotMethod === "dom" || Zt();
|
|
691
711
|
}
|
|
692
712
|
/**
|
|
693
713
|
* Open the full-screen annotation editor over the captured screenshot,
|
|
@@ -697,43 +717,49 @@ class Yt {
|
|
|
697
717
|
* enabled while the editor is open and restored on close.
|
|
698
718
|
*/
|
|
699
719
|
async openAnnotationEditor(t) {
|
|
700
|
-
const i = this.ensureOverlayHost(), o = this.overlayShadowHost,
|
|
720
|
+
const i = this.ensureOverlayHost(), o = this.overlayShadowHost, r = o.style.pointerEvents;
|
|
701
721
|
o.style.pointerEvents = "auto";
|
|
702
722
|
try {
|
|
703
|
-
const { openAnnotationEditor:
|
|
704
|
-
return await
|
|
723
|
+
const { openAnnotationEditor: n } = await import("./annotate-NeITyYNe.js").then((a) => a.d);
|
|
724
|
+
return await n({
|
|
705
725
|
dataUrl: t,
|
|
706
726
|
root: i,
|
|
707
727
|
quality: this.config.screenshotOptions.quality,
|
|
708
|
-
color: this.config.
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
728
|
+
color: this.config.annotationColor,
|
|
729
|
+
palette: this.config.annotationPalette,
|
|
730
|
+
applyVars: (a) => this.applyVars(a),
|
|
731
|
+
announce: (a, l) => this.announceMsg(a, l),
|
|
732
|
+
openDialog: (a, l) => this.openDialogA11y(a, l),
|
|
712
733
|
closeDialog: () => this.closeDialogA11y()
|
|
713
734
|
});
|
|
735
|
+
} catch (n) {
|
|
736
|
+
return console.error("Annotation editor failed to open:", n), null;
|
|
714
737
|
} finally {
|
|
715
|
-
o.style.pointerEvents =
|
|
738
|
+
o.style.pointerEvents = r;
|
|
716
739
|
}
|
|
717
740
|
}
|
|
718
741
|
async submitFeedback() {
|
|
719
742
|
let t = null;
|
|
720
|
-
if (this.config.captureScreenshot)
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
743
|
+
if (this.config.captureScreenshot || this.config.feedbackMode === "annotate")
|
|
744
|
+
try {
|
|
745
|
+
if (this.shouldCaptureViaDom()) {
|
|
746
|
+
const { captureDomScreenshot: a } = await import("./screenshot-dom-CME7tYRE.js");
|
|
747
|
+
t = await a(this.config.screenshotOptions);
|
|
748
|
+
} else {
|
|
749
|
+
const { captureScreenshot: a } = await import("./screenshot-BkOCLuS2.js");
|
|
750
|
+
t = await a(this.config.screenshotOptions);
|
|
751
|
+
}
|
|
752
|
+
t && this.announceMsg("Screenshot captured");
|
|
753
|
+
} catch (a) {
|
|
754
|
+
console.error("Screenshot capture failed:", a), t = null;
|
|
727
755
|
}
|
|
728
|
-
t && this.announceMsg("Screenshot captured");
|
|
729
|
-
}
|
|
730
756
|
t && this.config.annotate && (t = await this.openAnnotationEditor(t) ?? t);
|
|
731
|
-
const
|
|
757
|
+
const o = this.feedbackData.elementSelector ? {
|
|
732
758
|
x: this.selectedBounds.x,
|
|
733
759
|
y: this.selectedBounds.y,
|
|
734
760
|
width: this.selectedBounds.width,
|
|
735
761
|
height: this.selectedBounds.height
|
|
736
|
-
} : null,
|
|
762
|
+
} : null, r = {
|
|
737
763
|
feedbackType: this.feedbackData.feedbackType,
|
|
738
764
|
pageUrl: window.location.href,
|
|
739
765
|
apiKey: this.config.apiKey || void 0,
|
|
@@ -749,30 +775,35 @@ class Yt {
|
|
|
749
775
|
screenshot: t,
|
|
750
776
|
visitorId: this.visitorId,
|
|
751
777
|
// Include element bounds and user agent for server-side screenshot fallback
|
|
752
|
-
elementBounds:
|
|
778
|
+
elementBounds: o,
|
|
753
779
|
userAgent: navigator.userAgent
|
|
754
780
|
};
|
|
755
781
|
try {
|
|
756
|
-
const
|
|
782
|
+
const a = await fetch(this.config.endpoint, {
|
|
757
783
|
method: "POST",
|
|
758
784
|
headers: { "Content-Type": "application/json" },
|
|
759
|
-
body: JSON.stringify(
|
|
785
|
+
body: JSON.stringify(r)
|
|
760
786
|
});
|
|
761
|
-
if (
|
|
762
|
-
const l = await
|
|
787
|
+
if (a.ok) {
|
|
788
|
+
const l = await a.json();
|
|
763
789
|
this.feedbackId = l.id, this.announceMsg("Feedback sent");
|
|
764
790
|
}
|
|
765
|
-
} catch (
|
|
766
|
-
console.error("Failed to submit feedback:",
|
|
791
|
+
} catch (a) {
|
|
792
|
+
console.error("Failed to submit feedback:", a), this.announceMsg("Failed to send feedback", !0);
|
|
767
793
|
}
|
|
768
|
-
const
|
|
769
|
-
if (
|
|
794
|
+
const n = this.feedbackData.feedbackType;
|
|
795
|
+
if (n && n !== "neutral" && await this.tryLaunchQuest(n, this.feedbackId)) {
|
|
770
796
|
this.resetFeedbackUi();
|
|
771
797
|
return;
|
|
772
798
|
}
|
|
773
799
|
this.state = "MODAL_OPEN";
|
|
774
|
-
|
|
775
|
-
|
|
800
|
+
try {
|
|
801
|
+
const a = await this.ensureModal();
|
|
802
|
+
if (this.destroyed) return;
|
|
803
|
+
a.open(), this.overlayShadowHost && (this.overlayShadowHost.style.pointerEvents = "auto");
|
|
804
|
+
} catch (a) {
|
|
805
|
+
console.error("Failed to open the feedback modal:", a), this.announceMsg("Thank you for your feedback!", !0), this.resetFeedbackUi();
|
|
806
|
+
}
|
|
776
807
|
}
|
|
777
808
|
/**
|
|
778
809
|
* Quest id linked to `type`, or "" when quest launching is disabled
|
|
@@ -793,7 +824,7 @@ class Yt {
|
|
|
793
824
|
const o = this.questIdFor(t);
|
|
794
825
|
if (!o) return !1;
|
|
795
826
|
try {
|
|
796
|
-
return this.activeQuest?.destroy(), this.activeQuest = await
|
|
827
|
+
return this.activeQuest?.destroy(), this.activeQuest = await Gt({
|
|
797
828
|
questId: o,
|
|
798
829
|
base: this.config.quests.base,
|
|
799
830
|
apiKey: this.config.quests.apiKey || void 0,
|
|
@@ -803,8 +834,8 @@ class Yt {
|
|
|
803
834
|
this.activeQuest = null;
|
|
804
835
|
}
|
|
805
836
|
}), !0;
|
|
806
|
-
} catch (
|
|
807
|
-
return console.error("Failed to launch quest:",
|
|
837
|
+
} catch (r) {
|
|
838
|
+
return console.error("Failed to launch quest:", r), this.activeQuest = null, !1;
|
|
808
839
|
}
|
|
809
840
|
}
|
|
810
841
|
/**
|
|
@@ -822,7 +853,7 @@ class Yt {
|
|
|
822
853
|
*/
|
|
823
854
|
async ensureModal() {
|
|
824
855
|
if (!this.modal) {
|
|
825
|
-
const { ModalController: t } = await import("./modal-
|
|
856
|
+
const { ModalController: t } = await import("./modal-C8Ca7E5j.js");
|
|
826
857
|
this.modal = new t(this.makeModalHost());
|
|
827
858
|
}
|
|
828
859
|
return this.modal;
|
|
@@ -868,7 +899,7 @@ class Yt {
|
|
|
868
899
|
}
|
|
869
900
|
/** Warm the modal chunk while the user is targeting, so it opens instantly. */
|
|
870
901
|
prewarmModal() {
|
|
871
|
-
this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-
|
|
902
|
+
this.modalPrewarmed || (this.modalPrewarmed = !0, import("./modal-C8Ca7E5j.js").catch(() => {
|
|
872
903
|
}));
|
|
873
904
|
}
|
|
874
905
|
/**
|
|
@@ -878,7 +909,7 @@ class Yt {
|
|
|
878
909
|
*/
|
|
879
910
|
async ensureTargeting() {
|
|
880
911
|
if (!this.targeting) {
|
|
881
|
-
const { TargetingController: t } = await import("./targeting-
|
|
912
|
+
const { TargetingController: t } = await import("./targeting-BEQU2Ogo.js");
|
|
882
913
|
this.targeting = new t(this.makeTargetingHost());
|
|
883
914
|
}
|
|
884
915
|
return this.targeting;
|
|
@@ -923,7 +954,7 @@ class Yt {
|
|
|
923
954
|
}
|
|
924
955
|
/** Warm the targeting chunk on thumb-button hover, before the click. */
|
|
925
956
|
prewarmTargeting() {
|
|
926
|
-
this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-
|
|
957
|
+
this.targetingPrewarmed || this.config.skipTargeting || (this.targetingPrewarmed = !0, import("./targeting-BEQU2Ogo.js").catch(() => {
|
|
927
958
|
}));
|
|
928
959
|
}
|
|
929
960
|
// ==================== Video Recording ====================
|
|
@@ -942,7 +973,7 @@ class Yt {
|
|
|
942
973
|
*/
|
|
943
974
|
async ensureRecording() {
|
|
944
975
|
if (!this.recording) {
|
|
945
|
-
const { RecordingController: t } = await import("./recording
|
|
976
|
+
const { RecordingController: t } = await import("./recording-DhRZ6-tW.js");
|
|
946
977
|
this.recording = new t(this.makeRecordingHost());
|
|
947
978
|
}
|
|
948
979
|
return this.recording;
|
|
@@ -998,13 +1029,13 @@ class Yt {
|
|
|
998
1029
|
const t = window;
|
|
999
1030
|
this.prewarmIsTimeout ? clearTimeout(this.prewarmHandle) : t.cancelIdleCallback?.(this.prewarmHandle), this.prewarmHandle = null;
|
|
1000
1031
|
}
|
|
1001
|
-
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,
|
|
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();
|
|
1002
1033
|
}
|
|
1003
1034
|
}
|
|
1004
|
-
function
|
|
1035
|
+
function $(e) {
|
|
1005
1036
|
return document.querySelector(e)?.textContent?.trim() ?? "";
|
|
1006
1037
|
}
|
|
1007
|
-
function
|
|
1038
|
+
function oe() {
|
|
1008
1039
|
const e = document.querySelector(
|
|
1009
1040
|
'script[type="application/json"][data-feedback-config]'
|
|
1010
1041
|
);
|
|
@@ -1013,87 +1044,92 @@ function Xt() {
|
|
|
1013
1044
|
if (!t) return null;
|
|
1014
1045
|
try {
|
|
1015
1046
|
const i = JSON.parse(t);
|
|
1016
|
-
return i.cssSelector && !i.css && (i.css =
|
|
1047
|
+
return i.cssSelector && !i.css && (i.css = $(i.cssSelector), delete i.cssSelector), i;
|
|
1017
1048
|
} catch {
|
|
1018
1049
|
return null;
|
|
1019
1050
|
}
|
|
1020
1051
|
}
|
|
1021
|
-
function
|
|
1052
|
+
function ae(e) {
|
|
1022
1053
|
const t = e.getAttribute("data-endpoint");
|
|
1023
1054
|
if (!t) return null;
|
|
1024
|
-
const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"),
|
|
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");
|
|
1025
1056
|
return {
|
|
1026
1057
|
endpoint: t,
|
|
1027
|
-
css:
|
|
1028
|
-
apiKey:
|
|
1029
|
-
captureScreenshot:
|
|
1058
|
+
css: B ? $(B) : void 0,
|
|
1059
|
+
apiKey: X ?? void 0,
|
|
1060
|
+
captureScreenshot: G === "true" ? !0 : void 0,
|
|
1030
1061
|
// Annotation is on by default; only an explicit "false" disables it.
|
|
1031
|
-
annotate:
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1062
|
+
annotate: J === "false" ? !1 : void 0,
|
|
1063
|
+
annotationColor: Z ?? void 0,
|
|
1064
|
+
screenshotOptions: v || y || w ? {
|
|
1065
|
+
quality: v ? parseFloat(v) : void 0,
|
|
1066
|
+
maxWidth: y ? parseInt(y, 10) : void 0,
|
|
1067
|
+
maxHeight: w ? parseInt(w, 10) : void 0
|
|
1036
1068
|
} : void 0,
|
|
1037
1069
|
container: l ?? void 0,
|
|
1038
1070
|
buttonClass: c ?? void 0,
|
|
1039
|
-
direction:
|
|
1071
|
+
direction: at ?? void 0,
|
|
1040
1072
|
position: i ?? void 0,
|
|
1041
1073
|
zIndex: o ? parseInt(o, 10) : void 0,
|
|
1042
1074
|
skipTargeting: d === "true" ? !0 : void 0,
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1075
|
+
singleButton: s === "true" ? !0 : void 0,
|
|
1076
|
+
feedbackMode: u ?? void 0,
|
|
1077
|
+
incognito: h === "true" ? !0 : void 0,
|
|
1078
|
+
buttonSize: p ?? void 0,
|
|
1079
|
+
offset: m || g ? {
|
|
1080
|
+
x: m ? parseInt(m, 10) : void 0,
|
|
1081
|
+
y: g ? parseInt(g, 10) : void 0
|
|
1048
1082
|
} : void 0,
|
|
1049
|
-
modalWidth:
|
|
1050
|
-
backdropOpacity:
|
|
1051
|
-
fontFamily:
|
|
1052
|
-
fontSize:
|
|
1083
|
+
modalWidth: S ? parseInt(S, 10) : void 0,
|
|
1084
|
+
backdropOpacity: C ? parseFloat(C) : void 0,
|
|
1085
|
+
fontFamily: j ?? void 0,
|
|
1086
|
+
fontSize: A ? parseInt(A, 10) : void 0,
|
|
1053
1087
|
colors: {
|
|
1054
|
-
positive:
|
|
1055
|
-
negative:
|
|
1056
|
-
marker:
|
|
1088
|
+
positive: r ?? void 0,
|
|
1089
|
+
negative: n ?? void 0,
|
|
1090
|
+
marker: a ?? void 0
|
|
1057
1091
|
},
|
|
1058
|
-
text:
|
|
1059
|
-
tooltip:
|
|
1060
|
-
modalTitle:
|
|
1061
|
-
modalSubtitle:
|
|
1092
|
+
text: T || E || I || D || H || z || L ? {
|
|
1093
|
+
tooltip: T ?? void 0,
|
|
1094
|
+
modalTitle: E ?? void 0,
|
|
1095
|
+
modalSubtitle: I ?? void 0,
|
|
1062
1096
|
placeholder: D ?? void 0,
|
|
1063
|
-
submitButton:
|
|
1064
|
-
skipButton:
|
|
1097
|
+
submitButton: H ?? void 0,
|
|
1098
|
+
skipButton: z ?? void 0,
|
|
1099
|
+
feedbackLabel: L ?? void 0
|
|
1065
1100
|
} : void 0,
|
|
1066
|
-
positiveIcon:
|
|
1067
|
-
negativeIcon:
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
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
|
|
1075
1111
|
} : void 0,
|
|
1076
|
-
quests:
|
|
1077
|
-
base:
|
|
1078
|
-
up:
|
|
1079
|
-
down:
|
|
1080
|
-
video:
|
|
1081
|
-
apiKey:
|
|
1082
|
-
moduleUrl:
|
|
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
|
|
1083
1119
|
} : void 0
|
|
1084
1120
|
};
|
|
1085
1121
|
}
|
|
1086
|
-
function
|
|
1122
|
+
function ne() {
|
|
1087
1123
|
if (typeof document > "u") return;
|
|
1088
1124
|
const e = () => {
|
|
1089
|
-
const t = document.currentScript ?? document.querySelector("script[data-endpoint]"), i =
|
|
1090
|
-
|
|
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);
|
|
1091
1127
|
};
|
|
1092
1128
|
document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
|
|
1093
1129
|
}
|
|
1130
|
+
ne();
|
|
1094
1131
|
export {
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
Zt as c
|
|
1132
|
+
ie as Q,
|
|
1133
|
+
se as c
|
|
1098
1134
|
};
|
|
1099
|
-
//# sourceMappingURL=
|
|
1135
|
+
//# sourceMappingURL=loader-DnJ3MHkt.js.map
|