@qaiddev/thumbs-embed 1.0.12 → 1.0.14

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/qaid.js CHANGED
@@ -2,24 +2,24 @@ const E = `<svg xmlns="http://www.w3.org/2000/svg" class="qaid-icon" fill="none"
2
2
  <path stroke-linecap="round" stroke-linejoin="round" d="M14 10h4.764a2 2 0 011.789 2.894l-3.5 7A2 2 0 0115.263 21h-4.017c-.163 0-.326-.02-.485-.06L7 20m7-10V5a2 2 0 00-2-2h-.095c-.5 0-.905.405-.905.905 0 .714-.211 1.412-.608 2.006L7 11v9m7-10h-2M7 20H5a2 2 0 01-2-2v-6a2 2 0 012-2h2.5"/>
3
3
  </svg>`, T = `<svg xmlns="http://www.w3.org/2000/svg" class="qaid-icon" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
4
4
  <path stroke-linecap="round" stroke-linejoin="round" d="M10 14H5.236a2 2 0 01-1.789-2.894l3.5-7A2 2 0 018.737 3h4.018a2 2 0 01.485.06l3.76.94m-7 10v5a2 2 0 002 2h.095c.5 0 .905-.405.905-.905 0-.714.211-1.412.608-2.006L17 13V4m-7 10h2m5-10h2a2 2 0 012 2v6a2 2 0 01-2 2h-2.5"/>
5
- </svg>`, et = `<svg xmlns="http://www.w3.org/2000/svg" class="qaid-icon" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
5
+ </svg>`, it = `<svg xmlns="http://www.w3.org/2000/svg" class="qaid-icon" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
6
6
  <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 10.5l4.72-4.72a.75.75 0 011.28.53v11.38a.75.75 0 01-1.28.53l-4.72-4.72M4.5 18.75h9a2.25 2.25 0 002.25-2.25v-9a2.25 2.25 0 00-2.25-2.25h-9A2.25 2.25 0 002.25 7.5v9a2.25 2.25 0 002.25 2.25z"/>
7
- </svg>`, it = "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{position:relative}.qaid-dismiss-btn{position:absolute;width:20px;height:20px;padding:0;border:none;border-radius:50%;background:#0006;color:#fff;display:flex;align-items:center;justify-content: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}.qaid-bottom-right .qaid-dismiss-btn{bottom:100%;right:0;margin-bottom:4px}.qaid-bottom-left .qaid-dismiss-btn{bottom:100%;left:0;margin-bottom:4px}.qaid-top-right .qaid-dismiss-btn{top:100%;right:0;margin-top:4px}.qaid-top-left .qaid-dismiss-btn{top:100%;left:0;margin-top:4px}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;display:flex;align-items:center;justify-content:center;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:calc(100vw - 32px);max-height:calc(100vh - 32px);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%;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)}", ot = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
7
+ </svg>`, ot = "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{transition:transform .3s ease-in-out}.qaid-buttons.qaid-dismissed.qaid-bottom-right,.qaid-buttons.qaid-dismissed.qaid-top-right{transform:translate(calc(100% + 2rem))}.qaid-buttons.qaid-dismissed.qaid-bottom-left,.qaid-buttons.qaid-dismissed.qaid-top-left{transform:translate(calc(-100% - 2rem))}.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;display:flex;align-items:center;justify-content:center;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:calc(100vw - 32px);max-height:calc(100vh - 32px);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%;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)}", nt = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
8
8
  let w = 0;
9
- const nt = "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 svg{width:var(--qaid-icon-size);height:var(--qaid-icon-size)}", st = {
9
+ const st = "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 svg{width:var(--qaid-icon-size);height:var(--qaid-icon-size)}", at = {
10
10
  small: 36,
11
11
  medium: 48,
12
12
  large: 64
13
- }, at = {
13
+ }, rt = {
14
14
  small: 18,
15
15
  medium: 24,
16
16
  large: 32
17
17
  };
18
- function rt(e, t, i) {
18
+ function dt(e, t, i) {
19
19
  const [o, n, s] = [e, t, i].map((r) => (r = r / 255, r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4)));
20
20
  return 0.2126 * o + 0.7152 * n + 0.0722 * s;
21
21
  }
22
- function dt(e) {
22
+ function ct(e) {
23
23
  if (e.startsWith("#")) {
24
24
  const i = e.slice(1), o = i.length === 3 ? i.split("").map((s) => s + s).join("") : i, n = parseInt(o, 16);
25
25
  return {
@@ -35,11 +35,11 @@ function dt(e) {
35
35
  b: parseInt(t[3])
36
36
  } : null;
37
37
  }
38
- function ct(e) {
39
- const t = dt(e);
40
- return t && rt(t.r, t.g, t.b) > 0.4 ? "black" : "white";
38
+ function lt(e) {
39
+ const t = ct(e);
40
+ return t && dt(t.r, t.g, t.b) > 0.4 ? "black" : "white";
41
41
  }
42
- function lt(e = {}) {
42
+ function ht(e = {}) {
43
43
  const {
44
44
  positiveColor: t = "rgb(0, 200, 83)",
45
45
  negativeColor: i = "rgb(255, 0, 0)",
@@ -49,7 +49,7 @@ function lt(e = {}) {
49
49
  backdropOpacity: r = 0.3,
50
50
  fontFamily: l = "system-ui, -apple-system, sans-serif",
51
51
  fontSize: d = 16
52
- } = e, a = st[n], c = at[n], h = ct(o);
52
+ } = e, a = at[n], c = rt[n], h = lt(o);
53
53
  return {
54
54
  "--qaid-positive": t,
55
55
  "--qaid-negative": i,
@@ -63,29 +63,29 @@ function lt(e = {}) {
63
63
  "--qaid-font-size": `${d}px`
64
64
  };
65
65
  }
66
- function ht(e, t) {
66
+ function ut(e, t) {
67
67
  for (const [i, o] of Object.entries(t))
68
68
  e.style.setProperty(i, o);
69
69
  }
70
- function z() {
71
- return it + nt;
70
+ function P() {
71
+ return ot + st;
72
72
  }
73
- function ut() {
73
+ function pt() {
74
74
  if (w++, w > 1) return;
75
75
  const e = document.createElement("style");
76
- e.id = "qaid-styles", e.textContent = ot, document.head.appendChild(e);
76
+ e.id = "qaid-styles", e.textContent = nt, document.head.appendChild(e);
77
77
  }
78
- function pt() {
78
+ function mt() {
79
79
  if (!(w <= 0) && (w--, w === 0)) {
80
80
  const e = document.getElementById("qaid-styles");
81
81
  e && e.remove();
82
82
  }
83
83
  }
84
- const mt = ["data-comp", "data-qa", "data-testid", "data-id"];
84
+ const ft = ["data-comp", "data-qa", "data-testid", "data-id"];
85
85
  function U(e, t = document.body) {
86
86
  let i = e;
87
87
  for (; i && i !== t; ) {
88
- for (const o of mt) {
88
+ for (const o of ft) {
89
89
  const n = i.getAttribute(o);
90
90
  if (n)
91
91
  return `${o}="${n}"`;
@@ -94,35 +94,35 @@ function U(e, t = document.body) {
94
94
  }
95
95
  return null;
96
96
  }
97
- function ft(e, t = 100) {
97
+ function bt(e, t = 100) {
98
98
  const i = e.textContent?.trim().slice(0, t) || "";
99
99
  return i.length === t ? i + "..." : i;
100
100
  }
101
- function bt(e) {
101
+ function gt(e) {
102
102
  let t = 1, i = e.previousElementSibling;
103
103
  for (; i; )
104
104
  t++, i = i.previousElementSibling;
105
105
  return t;
106
106
  }
107
- function gt(e) {
107
+ function vt(e) {
108
108
  const t = [];
109
109
  let i = e;
110
110
  for (; i && i !== document.body && i !== document.documentElement; ) {
111
- const o = i.tagName.toLowerCase(), n = bt(i);
111
+ const o = i.tagName.toLowerCase(), n = gt(i);
112
112
  t.unshift(`${o}:nth-child(${n})`), i = i.parentElement;
113
113
  }
114
114
  return t.length > 0 ? `body > ${t.join(" > ")}` : "body";
115
115
  }
116
- function vt(e) {
116
+ function yt(e) {
117
117
  return e.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
118
118
  }
119
- function yt(e) {
119
+ function wt(e) {
120
120
  const t = U(e);
121
- return t ? `[${t}]` : e.id ? `#${vt(e.id)}` : gt(e);
121
+ return t ? `[${t}]` : e.id ? `#${yt(e.id)}` : vt(e);
122
122
  }
123
- function wt(e) {
124
- const t = ft(e), i = U(e);
125
- return { selector: yt(e), text: t, dataAttr: i };
123
+ function qt(e) {
124
+ const t = bt(e), i = U(e);
125
+ return { selector: wt(e), text: t, dataAttr: i };
126
126
  }
127
127
  const W = {
128
128
  width: 400,
@@ -150,22 +150,22 @@ function xt(e, t, i, o, n) {
150
150
  t - i - n
151
151
  ) : d = Math.max(n, e.y - i - o), { top: d, position: l };
152
152
  }
153
- function qt(e, t, i, o) {
153
+ function kt(e, t, i, o) {
154
154
  let s = e.x + e.width / 2 - i / 2;
155
155
  return s = Math.max(o, Math.min(s, t - i - o)), s;
156
156
  }
157
- function kt(e, t, i, o = 24, n = 24) {
157
+ function Ct(e, t, i, o = 24, n = 24) {
158
158
  const r = e.clickX - t - n / 2;
159
159
  return Math.max(o, Math.min(r, i - o - n / 2));
160
160
  }
161
- function Ct(e, t, i, o = W) {
161
+ function St(e, t, i, o = W) {
162
162
  const n = o.height + o.arrowHeight, s = xt(
163
163
  e,
164
164
  i,
165
165
  n,
166
166
  o.gap,
167
167
  o.viewportPadding
168
- ), r = qt(
168
+ ), r = kt(
169
169
  e,
170
170
  t,
171
171
  o.width,
@@ -177,8 +177,8 @@ function Ct(e, t, i, o = W) {
177
177
  position: s.position
178
178
  };
179
179
  }
180
- function St(e, t, i, o = W) {
181
- const n = Ct(e, t, i, o), s = kt(
180
+ function Et(e, t, i, o = W) {
181
+ const n = St(e, t, i, o), s = Ct(
182
182
  e,
183
183
  n.left,
184
184
  o.width
@@ -188,15 +188,15 @@ function St(e, t, i, o = W) {
188
188
  arrow: { left: s }
189
189
  };
190
190
  }
191
- const Et = 20;
192
- function Tt(e) {
191
+ const Tt = 20;
192
+ function It(e) {
193
193
  const t = [], i = console.error, o = console.warn, n = console.log, s = (r, l) => {
194
194
  const d = {
195
195
  message: l.map((a) => String(a)).join(" "),
196
196
  timestamp: Date.now(),
197
197
  level: r
198
198
  };
199
- t.length >= Et && t.shift(), t.push(d), e && e(d);
199
+ t.length >= Tt && t.shift(), t.push(d), e && e(d);
200
200
  };
201
201
  return console.error = function(...r) {
202
202
  s("error", r), i.apply(console, r);
@@ -211,19 +211,19 @@ function Tt(e) {
211
211
  }
212
212
  };
213
213
  }
214
- const It = 20, P = 4096;
215
- function q(e) {
214
+ const Lt = 20, A = 4096;
215
+ function x(e) {
216
216
  if (e == null) return;
217
217
  const t = typeof e == "string" ? e : JSON.stringify(e);
218
- return t.length > P ? t.slice(0, P) + "…[truncated]" : t;
218
+ return t.length > A ? t.slice(0, A) + "…[truncated]" : t;
219
219
  }
220
220
  function O(e, t) {
221
- e.length >= It && e.shift(), e.push(t);
221
+ e.length >= Lt && e.shift(), e.push(t);
222
222
  }
223
- async function Lt(e) {
223
+ async function Dt(e) {
224
224
  try {
225
225
  const t = await e.clone().text();
226
- return q(t);
226
+ return x(t);
227
227
  } catch {
228
228
  return;
229
229
  }
@@ -233,10 +233,10 @@ function Ht() {
233
233
  window.fetch = async function(n, s) {
234
234
  const r = typeof n == "string" ? n : n instanceof URL ? n.toString() : n.url, l = s?.method ?? (typeof n == "object" && "method" in n ? n.method : "GET");
235
235
  let d;
236
- s?.body && (d = q(s.body));
236
+ s?.body && (d = x(s.body));
237
237
  const a = await t.apply(window, [n, s]);
238
238
  if (a.status >= 400) {
239
- const c = await Lt(a);
239
+ const c = await Dt(a);
240
240
  O(e, {
241
241
  url: r,
242
242
  method: l.toUpperCase(),
@@ -253,7 +253,7 @@ function Ht() {
253
253
  return XMLHttpRequest.prototype.open = function(n, s, ...r) {
254
254
  return this._qaid_method = n, this._qaid_url = typeof s == "string" ? s : s.toString(), i.apply(this, [n, s, ...r]);
255
255
  }, XMLHttpRequest.prototype.send = function(n) {
256
- const s = this, r = n ? q(n) : void 0;
256
+ const s = this, r = n ? x(n) : void 0;
257
257
  return s.addEventListener("load", function() {
258
258
  s.status >= 400 && O(e, {
259
259
  url: s._qaid_url,
@@ -261,7 +261,7 @@ function Ht() {
261
261
  status: s.status,
262
262
  statusText: s.statusText,
263
263
  requestBody: r,
264
- responseBody: q(s.responseText),
264
+ responseBody: x(s.responseText),
265
265
  timestamp: Date.now()
266
266
  });
267
267
  }), o.apply(this, [n]);
@@ -272,10 +272,10 @@ function Ht() {
272
272
  }
273
273
  };
274
274
  }
275
- function Dt() {
275
+ function Mt() {
276
276
  return typeof navigator < "u" && !!navigator.mediaDevices && typeof navigator.mediaDevices.getDisplayMedia == "function" && typeof MediaRecorder < "u";
277
277
  }
278
- function Mt() {
278
+ function Bt() {
279
279
  if (typeof MediaRecorder > "u") return "";
280
280
  const e = [
281
281
  "video/webm;codecs=vp9",
@@ -288,7 +288,7 @@ function Mt() {
288
288
  return t;
289
289
  return "";
290
290
  }
291
- function Bt(e = {}) {
291
+ function Rt(e = {}) {
292
292
  const t = e.maxDuration ?? 15, i = e.videoBitsPerSecond ?? 8e5;
293
293
  let o = null, n = null, s = [], r = null, l = null, d = null, a = 0, c = null, h = null, u = !1, p = null;
294
294
  function g() {
@@ -300,7 +300,7 @@ function Bt(e = {}) {
300
300
  return {
301
301
  async start() {
302
302
  u = !1, s = [];
303
- const m = Mt();
303
+ const m = Bt();
304
304
  if (!m)
305
305
  throw new Error("No supported video MIME type found");
306
306
  o = await navigator.mediaDevices.getDisplayMedia({
@@ -321,7 +321,7 @@ function Bt(e = {}) {
321
321
  b.data.size > 0 && s.push(b.data);
322
322
  }, n.onstop = () => {
323
323
  const b = new Blob(s, { type: m });
324
- c && c(b), l && l(b), o && o.getTracks().forEach((x) => x.stop());
324
+ c && c(b), l && l(b), o && o.getTracks().forEach((q) => q.stop());
325
325
  }, n.onerror = () => {
326
326
  h && h(new Error("MediaRecorder error"));
327
327
  }, n.start(1e3), a = Date.now(), d = setInterval(() => {
@@ -347,19 +347,19 @@ function Bt(e = {}) {
347
347
  }
348
348
  };
349
349
  }
350
- function Rt(e = 640) {
350
+ function zt(e = 640) {
351
351
  return typeof window < "u" && window.innerWidth < e;
352
352
  }
353
- function A(e, t, i) {
353
+ function $(e, t, i) {
354
354
  const o = i.map((s) => s.style.visibility);
355
355
  i.forEach((s) => s.style.visibility = "hidden");
356
356
  const n = document.elementFromPoint(e, t);
357
357
  return i.forEach((s, r) => s.style.visibility = o[r]), n;
358
358
  }
359
- function $(e) {
359
+ function N(e) {
360
360
  return e ? e.hasAttribute("data-qaid-embed") || e.hasAttribute("data-qaid-embed-overlay") ? !0 : !!e.closest("[data-qaid-embed], [data-qaid-embed-overlay]") : !1;
361
361
  }
362
- function zt(e, t = 0) {
362
+ function Pt(e, t = 0) {
363
363
  const i = e.getBoundingClientRect();
364
364
  return {
365
365
  x: i.left - t,
@@ -368,7 +368,7 @@ function zt(e, t = 0) {
368
368
  height: i.height + t * 2
369
369
  };
370
370
  }
371
- async function Pt(e = {}) {
371
+ async function At(e = {}) {
372
372
  const { quality: t = 1, maxWidth: i = 1280, maxHeight: o = 800 } = e;
373
373
  try {
374
374
  if (!navigator.mediaDevices?.getDisplayMedia)
@@ -397,21 +397,21 @@ async function Pt(e = {}) {
397
397
  return console.warn("Screenshot capture failed:", n), null;
398
398
  }
399
399
  }
400
- const N = "https://qaid.dev/lib/html2canvas.min.js", Ot = 1e4, At = 50;
400
+ const V = "https://qaid.dev/lib/html2canvas.min.js", Ot = 1e4, $t = 50;
401
401
  let y = null;
402
- function Xt() {
402
+ function Kt() {
403
403
  if (typeof document > "u" || typeof window > "u")
404
404
  return !1;
405
405
  const e = document.createElement("canvas");
406
406
  return typeof e.getContext == "function" && !!e.getContext("2d");
407
407
  }
408
- function $t() {
408
+ function Nt() {
409
409
  return window.html2canvas ? Promise.resolve(!0) : y || (y = new Promise((e) => {
410
410
  if (!document.querySelector(
411
- `script[src="${N}"]`
411
+ `script[src="${V}"]`
412
412
  )) {
413
413
  const n = document.createElement("script");
414
- n.src = N, n.async = !0, document.head.appendChild(n);
414
+ n.src = V, n.async = !0, document.head.appendChild(n);
415
415
  }
416
416
  const i = Date.now(), o = () => {
417
417
  if (window.html2canvas) {
@@ -422,15 +422,15 @@ function $t() {
422
422
  y = null, e(!1);
423
423
  return;
424
424
  }
425
- setTimeout(o, At);
425
+ setTimeout(o, $t);
426
426
  };
427
427
  o();
428
428
  }), y);
429
429
  }
430
- async function Nt(e = {}) {
430
+ async function Vt(e = {}) {
431
431
  const { quality: t = 0.8, maxWidth: i = 1280, maxHeight: o = 800 } = e;
432
432
  try {
433
- if (!await $t() || !window.html2canvas)
433
+ if (!await Nt() || !window.html2canvas)
434
434
  return console.warn("html2canvas failed to load"), null;
435
435
  const s = await window.html2canvas(document.body, {
436
436
  useCORS: !0,
@@ -455,32 +455,32 @@ async function Nt(e = {}) {
455
455
  return console.warn("DOM screenshot capture failed:", n), null;
456
456
  }
457
457
  }
458
- const V = "qaid_visitor_id", _ = "qaid_hide_feedback";
459
- function I(e) {
460
- return e ? `${_}_${e}` : _;
458
+ const _ = "qaid_visitor_id", F = "qaid_hide_feedback";
459
+ function L(e) {
460
+ return e ? `${F}_${e}` : F;
461
461
  }
462
- function Vt(e) {
462
+ function _t(e) {
463
463
  try {
464
- return localStorage.getItem(I(e)) === "1";
464
+ return localStorage.getItem(L(e)) === "1";
465
465
  } catch {
466
466
  return !1;
467
467
  }
468
468
  }
469
- function F(e, t = !0) {
469
+ function I(e, t = !0) {
470
470
  try {
471
- t ? localStorage.setItem(I(e), "1") : localStorage.removeItem(I(e));
471
+ t ? localStorage.setItem(L(e), "1") : localStorage.removeItem(L(e));
472
472
  } catch {
473
473
  }
474
474
  }
475
- function _t() {
475
+ function Ft() {
476
476
  try {
477
- let e = localStorage.getItem(V);
478
- return e || (e = crypto.randomUUID(), localStorage.setItem(V, e)), e;
477
+ let e = localStorage.getItem(_);
478
+ return e || (e = crypto.randomUUID(), localStorage.setItem(_, e)), e;
479
479
  } catch {
480
480
  return crypto.randomUUID();
481
481
  }
482
482
  }
483
- class Ft {
483
+ class Ut {
484
484
  config;
485
485
  state = "IDLE";
486
486
  feedbackData = {
@@ -538,6 +538,8 @@ class Ft {
538
538
  boundMouseMove;
539
539
  boundClick;
540
540
  boundResize;
541
+ // Start with buttons slid off-screen (localStorage dismiss, no animation)
542
+ _startDismissed = !1;
541
543
  // DOM persistence (survives framework client-side navigation)
542
544
  destroyed = !1;
543
545
  domObserver = null;
@@ -582,6 +584,7 @@ class Ft {
582
584
  maxHeight: t.screenshotOptions?.maxHeight ?? 800
583
585
  },
584
586
  incognito: t.incognito ?? !1,
587
+ hideDismiss: t.hideDismiss ?? !1,
585
588
  positiveIcon: t.positiveIcon ?? "",
586
589
  negativeIcon: t.negativeIcon ?? "",
587
590
  hideThumbs: t.hideThumbs ?? !1,
@@ -591,13 +594,13 @@ class Ft {
591
594
  maxDuration: t.videoOptions?.maxDuration ?? 15
592
595
  },
593
596
  recordIcon: t.recordIcon ?? ""
594
- }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundMouseMove = this.handleMouseMove.bind(this), this.boundClick = this.handleClick.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = _t(), this.init();
597
+ }, this.boundKeyDown = this.handleKeyDown.bind(this), this.boundMouseMove = this.handleMouseMove.bind(this), this.boundClick = this.handleClick.bind(this), this.boundResize = this.handleResize.bind(this), this.visitorId = Ft(), this.init();
595
598
  }
596
599
  applyVars(t) {
597
- ht(t, this.cssVars);
600
+ ut(t, this.cssVars);
598
601
  }
599
602
  init() {
600
- ut(), this.cssVars = lt({
603
+ pt(), this.cssVars = ht({
601
604
  positiveColor: this.config.colors.positive,
602
605
  negativeColor: this.config.colors.negative,
603
606
  markerColor: this.config.colors.marker,
@@ -606,7 +609,7 @@ class Ft {
606
609
  backdropOpacity: this.config.backdropOpacity,
607
610
  fontFamily: this.config.fontFamily,
608
611
  fontSize: this.config.fontSize
609
- }), Vt(this.config.apiKey) && (this.config.incognito = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = Tt((t) => {
612
+ }), !this.config.hideDismiss && _t(this.config.apiKey) && (this._startDismissed = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = It((t) => {
610
613
  this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
611
614
  }), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom();
612
615
  }
@@ -629,7 +632,7 @@ class Ft {
629
632
  }), this.domObserver.observe(document.body, { childList: !0 });
630
633
  }
631
634
  checkMobile() {
632
- this.isMobile = Rt();
635
+ this.isMobile = zt();
633
636
  }
634
637
  handleResize() {
635
638
  this.checkMobile();
@@ -637,9 +640,9 @@ class Ft {
637
640
  createEmbed() {
638
641
  this.shadowHost = document.createElement("div"), this.shadowHost.setAttribute("data-qaid-embed", ""), this.shadowHost.style.position = "static", this.shadowHost.style.display = "contents";
639
642
  let t = null;
640
- this.config.container && (t = document.querySelector(this.config.container)), t ? (t.appendChild(this.shadowHost), this.isUserProvidedContainer = !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" });
643
+ 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" });
641
644
  const i = document.createElement("style");
642
- if (i.textContent = z(), this.shadowRoot.appendChild(i), this.config.css) {
645
+ if (i.textContent = P(), this.shadowRoot.appendChild(i), this.config.css) {
643
646
  const a = document.createElement("style");
644
647
  a.textContent = this.config.css, this.shadowRoot.appendChild(a);
645
648
  }
@@ -663,15 +666,17 @@ class Ft {
663
666
  const u = document.createElement("button");
664
667
  u.type = "button", u.className = n ? `${s} qaid-btn-down` : "qaid-btn qaid-btn-down", u.innerHTML = this.config.negativeIcon || T, u.addEventListener("click", (p) => this.handleThumbClick("down", p.currentTarget, p)), u.addEventListener("mouseenter", () => this.showTooltip(u)), u.addEventListener("mouseleave", () => this.hideTooltip()), h.appendChild(u), this.buttonsContainer.appendChild(a), this.buttonsContainer.appendChild(h);
665
668
  }
666
- if (this.config.captureVideo && Dt()) {
669
+ if (this.config.captureVideo && Mt()) {
667
670
  const a = document.createElement("div");
668
671
  a.className = "qaid-tooltip-wrapper";
669
672
  const c = document.createElement("button");
670
- c.type = "button", c.className = n ? `${s} qaid-btn-record` : "qaid-btn qaid-btn-record", c.innerHTML = this.config.recordIcon || et, c.addEventListener("click", () => this.startRecording()), c.addEventListener("mouseenter", () => this.showTooltip(c)), c.addEventListener("mouseleave", () => this.hideTooltip()), a.appendChild(c), this.buttonsContainer.appendChild(a);
673
+ c.type = "button", c.className = n ? `${s} qaid-btn-record` : "qaid-btn qaid-btn-record", c.innerHTML = this.config.recordIcon || it, c.addEventListener("click", () => this.startRecording()), c.addEventListener("mouseenter", () => this.showTooltip(c)), c.addEventListener("mouseleave", () => this.hideTooltip()), a.appendChild(c), this.buttonsContainer.appendChild(a);
671
674
  }
672
- this.dismissBtn = document.createElement("button"), this.dismissBtn.type = "button", this.dismissBtn.className = "qaid-dismiss-btn", this.dismissBtn.setAttribute("aria-label", "Hide Feedback"), this.dismissBtn.title = "Hide Feedback", 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", (a) => {
675
+ this.config.hideDismiss || (this.dismissBtn = document.createElement("button"), this.dismissBtn.type = "button", this.dismissBtn.className = "qaid-dismiss-btn", this.dismissBtn.setAttribute("aria-label", "Hide Feedback"), this.dismissBtn.title = "Hide Feedback", 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", (a) => {
673
676
  a.stopPropagation(), this.handleDismiss();
674
- }), this.buttonsContainer.appendChild(this.dismissBtn);
677
+ }), this.buttonsContainer.insertBefore(this.dismissBtn, this.buttonsContainer.firstChild), this._startDismissed && (this.buttonsContainer.style.transition = "none", this.buttonsContainer.classList.add("qaid-dismissed"), requestAnimationFrame(() => {
678
+ this.buttonsContainer && (this.buttonsContainer.style.transition = "");
679
+ })));
675
680
  }
676
681
  /**
677
682
  * Lazily create a separate overlay shadow host on document.body.
@@ -683,7 +688,7 @@ class Ft {
683
688
  if (this.overlayShadowRoot) return this.overlayShadowRoot;
684
689
  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" });
685
690
  const t = document.createElement("style");
686
- if (t.textContent = z(), this.overlayShadowRoot.appendChild(t), this.config.css) {
691
+ if (t.textContent = P(), this.overlayShadowRoot.appendChild(t), this.config.css) {
687
692
  const i = document.createElement("style");
688
693
  i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
689
694
  }
@@ -702,10 +707,10 @@ class Ft {
702
707
  this.tooltipElement && this.tooltipElement.classList.remove("qaid-tooltip-visible");
703
708
  }
704
709
  handleDismiss() {
705
- this.buttonsContainer && this.buttonsContainer.classList.add("qaid-incognito"), F(this.config.apiKey, !0);
710
+ this.buttonsContainer && this.buttonsContainer.classList.add("qaid-dismissed"), I(this.config.apiKey, !0);
706
711
  }
707
712
  handleThumbClick(t, i, o) {
708
- this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"), F(this.config.apiKey, !1)), this.config.skipTargeting ? this.submitDirectFeedback(t, i) : this.startTargeting(t, o);
713
+ this.buttonsContainer?.classList.contains("qaid-dismissed") ? (this.buttonsContainer.classList.remove("qaid-dismissed"), I(this.config.apiKey, !1)) : this.buttonsContainer?.classList.contains("qaid-incognito") && (this.buttonsContainer.classList.remove("qaid-incognito"), I(this.config.apiKey, !1)), this.config.skipTargeting ? this.submitDirectFeedback(t, i) : this.startTargeting(t, o);
709
714
  }
710
715
  submitDirectFeedback(t, i) {
711
716
  this.feedbackData.feedbackType = t, this.feedbackData.elementSelector = null, this.feedbackData.elementText = null;
@@ -738,12 +743,12 @@ class Ft {
738
743
  }
739
744
  handleMouseMove(t) {
740
745
  if (this.mousePos.x = t.clientX, this.mousePos.y = t.clientY, this.crosshairH && (this.crosshairH.style.top = `${t.clientY}px`), this.crosshairV && (this.crosshairV.style.left = `${t.clientX}px`), this.scope && (this.scope.style.left = `${t.clientX}px`, this.scope.style.top = `${t.clientY}px`), this.captureLayer && this.shadowHost) {
741
- const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o = A(
746
+ const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o = $(
742
747
  t.clientX,
743
748
  t.clientY,
744
749
  i
745
750
  );
746
- if (o && !$(o)) {
751
+ if (o && !N(o)) {
747
752
  if (this.highlightBox) {
748
753
  const n = o.getBoundingClientRect();
749
754
  this.highlightBox.style.transform = `translate(${n.left}px, ${n.top}px)`, this.highlightBox.style.width = `${n.width}px`, this.highlightBox.style.height = `${n.height}px`, this.highlightBox.style.display = "block";
@@ -755,21 +760,21 @@ class Ft {
755
760
  handleClick(t) {
756
761
  if (this.state !== "TARGETING" || !this.shadowHost) return;
757
762
  t.preventDefault(), t.stopPropagation();
758
- const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o = A(
763
+ const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o = $(
759
764
  t.clientX,
760
765
  t.clientY,
761
766
  i
762
767
  );
763
- if (!o || $(o))
768
+ if (!o || N(o))
764
769
  return;
765
- const n = zt(o, 8);
770
+ const n = Pt(o, 8);
766
771
  this.selectedBounds = {
767
772
  ...n,
768
773
  clickX: t.clientX,
769
774
  clickY: t.clientY,
770
775
  visible: !0
771
776
  };
772
- const { selector: s, text: r } = wt(o);
777
+ const { selector: s, text: r } = qt(o);
773
778
  this.feedbackData.elementSelector = s, this.feedbackData.elementText = r, this.removeTargetingOverlay(), document.removeEventListener("mousemove", this.boundMouseMove), document.removeEventListener("click", this.boundClick, !0), 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.state = "SELECTED", this.showSelectedMarker(), this.submitFeedback();
774
779
  }
775
780
  cancelTargeting() {
@@ -789,7 +794,7 @@ class Ft {
789
794
  async submitFeedback() {
790
795
  if (!this.feedbackData.feedbackType) return;
791
796
  let t = null;
792
- this.config.captureScreenshot && (this.config.screenshotMethod === "dom" ? t = await Nt(this.config.screenshotOptions) : t = await Pt(this.config.screenshotOptions));
797
+ this.config.captureScreenshot && (this.config.screenshotMethod === "dom" ? t = await Vt(this.config.screenshotOptions) : t = await At(this.config.screenshotOptions));
793
798
  const i = this.feedbackData.elementSelector ? {
794
799
  x: this.selectedBounds.x,
795
800
  y: this.selectedBounds.y,
@@ -843,7 +848,7 @@ class Ft {
843
848
  `, this.applyVars(i), t.appendChild(i), this.modalContainer = i, this.setupModalInteractions();
844
849
  }
845
850
  showPositionedModal() {
846
- const t = this.ensureOverlayHost(), { modal: i, arrow: o } = St(
851
+ const t = this.ensureOverlayHost(), { modal: i, arrow: o } = Et(
847
852
  this.selectedBounds,
848
853
  window.innerWidth,
849
854
  window.innerHeight,
@@ -926,7 +931,7 @@ class Ft {
926
931
  async startRecording() {
927
932
  if (!(this.isRecording || this.state !== "IDLE"))
928
933
  try {
929
- this.networkCapture = Ht(), this.videoRecorder = Bt({
934
+ this.networkCapture = Ht(), this.videoRecorder = Rt({
930
935
  maxDuration: this.config.videoOptions.maxDuration
931
936
  }), this.videoRecorder.onTick((t) => {
932
937
  this.updateRecordingTimer(t);
@@ -1037,13 +1042,13 @@ class Ft {
1037
1042
  * Destroy the embed and clean up all resources
1038
1043
  */
1039
1044
  destroy() {
1040
- this.destroyed = !0, this.domObserver && (this.domObserver.disconnect(), this.domObserver = null), this.boundBeforeSwap && (document.removeEventListener("astro:before-swap", this.boundBeforeSwap), this.boundBeforeSwap = null), this.cleanupRecording(), this.removeVideoPreview(), this.consoleCapture && (this.consoleCapture.restore(), this.consoleCapture = null), window.removeEventListener("resize", this.boundResize), document.removeEventListener("keydown", this.boundKeyDown), document.removeEventListener("mousemove", this.boundMouseMove), document.removeEventListener("click", this.boundClick, !0), 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.overlayContainer = null, this.captureLayer = null, this.crosshairH = null, this.crosshairV = null, this.scope = null, this.marker = null, this.modalContainer = null, this.backdrop = null, this.dismissBtn = null, this.tooltipElement = null, pt();
1045
+ this.destroyed = !0, this.domObserver && (this.domObserver.disconnect(), this.domObserver = null), this.boundBeforeSwap && (document.removeEventListener("astro:before-swap", this.boundBeforeSwap), this.boundBeforeSwap = null), this.cleanupRecording(), this.removeVideoPreview(), this.consoleCapture && (this.consoleCapture.restore(), this.consoleCapture = null), window.removeEventListener("resize", this.boundResize), document.removeEventListener("keydown", this.boundKeyDown), document.removeEventListener("mousemove", this.boundMouseMove), document.removeEventListener("click", this.boundClick, !0), 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.overlayContainer = null, this.captureLayer = null, this.crosshairH = null, this.crosshairV = null, this.scope = null, this.marker = null, this.modalContainer = null, this.backdrop = null, this.dismissBtn = null, this.tooltipElement = null, mt();
1041
1046
  }
1042
1047
  }
1043
1048
  function X(e) {
1044
1049
  return document.querySelector(e)?.textContent?.trim() ?? "";
1045
1050
  }
1046
- function Ut() {
1051
+ function Wt() {
1047
1052
  const e = document.querySelector(
1048
1053
  'script[type="application/json"][data-feedback-config]'
1049
1054
  );
@@ -1057,13 +1062,13 @@ function Ut() {
1057
1062
  return null;
1058
1063
  }
1059
1064
  }
1060
- function Wt(e) {
1065
+ function Xt(e) {
1061
1066
  const t = e.getAttribute("data-endpoint");
1062
1067
  if (!t) return null;
1063
- const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"), n = e.getAttribute("data-positive-color"), s = e.getAttribute("data-negative-color"), r = e.getAttribute("data-marker-color"), l = e.getAttribute("data-container"), d = e.getAttribute("data-button-class"), a = e.getAttribute("data-skip-targeting"), c = e.getAttribute("data-incognito"), h = e.getAttribute("data-button-size"), u = e.getAttribute("data-offset-x"), p = e.getAttribute("data-offset-y"), g = e.getAttribute("data-modal-width"), f = e.getAttribute("data-backdrop-opacity"), m = e.getAttribute("data-font-family"), v = e.getAttribute("data-font-size"), b = e.getAttribute("data-tooltip"), x = e.getAttribute("data-modal-title"), L = e.getAttribute("data-modal-subtitle"), H = e.getAttribute("data-placeholder"), D = e.getAttribute("data-submit-button"), M = e.getAttribute("data-skip-button"), j = e.getAttribute("data-positive-icon"), K = e.getAttribute("data-negative-icon"), Y = e.getAttribute("data-api-key"), J = e.getAttribute("data-capture-screenshot"), k = e.getAttribute("data-screenshot-quality"), C = e.getAttribute("data-screenshot-max-width"), S = e.getAttribute("data-screenshot-max-height"), G = e.getAttribute("data-capture-video"), Z = e.getAttribute("data-hide-thumbs"), B = e.getAttribute("data-video-max-duration"), Q = e.getAttribute("data-screenshot-method"), tt = e.getAttribute("data-direction"), R = e.getAttribute("data-css-selector");
1068
+ const i = e.getAttribute("data-position"), o = e.getAttribute("data-zindex"), n = e.getAttribute("data-positive-color"), s = e.getAttribute("data-negative-color"), r = e.getAttribute("data-marker-color"), l = e.getAttribute("data-container"), d = e.getAttribute("data-button-class"), a = e.getAttribute("data-skip-targeting"), c = e.getAttribute("data-incognito"), h = e.getAttribute("data-button-size"), u = e.getAttribute("data-offset-x"), p = e.getAttribute("data-offset-y"), g = e.getAttribute("data-modal-width"), f = e.getAttribute("data-backdrop-opacity"), m = e.getAttribute("data-font-family"), v = e.getAttribute("data-font-size"), b = e.getAttribute("data-tooltip"), q = e.getAttribute("data-modal-title"), D = e.getAttribute("data-modal-subtitle"), H = e.getAttribute("data-placeholder"), M = e.getAttribute("data-submit-button"), B = e.getAttribute("data-skip-button"), K = e.getAttribute("data-positive-icon"), j = e.getAttribute("data-negative-icon"), Y = e.getAttribute("data-api-key"), J = e.getAttribute("data-capture-screenshot"), k = e.getAttribute("data-screenshot-quality"), C = e.getAttribute("data-screenshot-max-width"), S = e.getAttribute("data-screenshot-max-height"), G = e.getAttribute("data-capture-video"), Z = e.getAttribute("data-hide-thumbs"), Q = e.getAttribute("data-hide-dismiss"), R = e.getAttribute("data-video-max-duration"), tt = e.getAttribute("data-screenshot-method"), et = e.getAttribute("data-direction"), z = e.getAttribute("data-css-selector");
1064
1069
  return {
1065
1070
  endpoint: t,
1066
- css: R ? X(R) : void 0,
1071
+ css: z ? X(z) : void 0,
1067
1072
  apiKey: Y ?? void 0,
1068
1073
  captureScreenshot: J === "true" ? !0 : void 0,
1069
1074
  screenshotOptions: k || C || S ? {
@@ -1073,7 +1078,7 @@ function Wt(e) {
1073
1078
  } : void 0,
1074
1079
  container: l ?? void 0,
1075
1080
  buttonClass: d ?? void 0,
1076
- direction: tt ?? void 0,
1081
+ direction: et ?? void 0,
1077
1082
  position: i ?? void 0,
1078
1083
  zIndex: o ? parseInt(o, 10) : void 0,
1079
1084
  skipTargeting: a === "true" ? !0 : void 0,
@@ -1092,38 +1097,39 @@ function Wt(e) {
1092
1097
  negative: s ?? void 0,
1093
1098
  marker: r ?? void 0
1094
1099
  },
1095
- text: b || x || L || H || D || M ? {
1100
+ text: b || q || D || H || M || B ? {
1096
1101
  tooltip: b ?? void 0,
1097
- modalTitle: x ?? void 0,
1098
- modalSubtitle: L ?? void 0,
1102
+ modalTitle: q ?? void 0,
1103
+ modalSubtitle: D ?? void 0,
1099
1104
  placeholder: H ?? void 0,
1100
- submitButton: D ?? void 0,
1101
- skipButton: M ?? void 0
1105
+ submitButton: M ?? void 0,
1106
+ skipButton: B ?? void 0
1102
1107
  } : void 0,
1103
- positiveIcon: j ?? void 0,
1104
- negativeIcon: K ?? void 0,
1105
- screenshotMethod: Q ?? void 0,
1108
+ positiveIcon: K ?? void 0,
1109
+ negativeIcon: j ?? void 0,
1110
+ screenshotMethod: tt ?? void 0,
1106
1111
  captureVideo: G === "true" ? !0 : void 0,
1107
1112
  hideThumbs: Z === "true" ? !0 : void 0,
1108
- videoOptions: B ? {
1109
- maxDuration: parseInt(B, 10)
1113
+ hideDismiss: Q === "true" ? !0 : void 0,
1114
+ videoOptions: R ? {
1115
+ maxDuration: parseInt(R, 10)
1110
1116
  } : void 0
1111
1117
  };
1112
1118
  }
1113
1119
  if (typeof document < "u") {
1114
1120
  const e = () => {
1115
- const t = document.currentScript, i = Ut(), o = t ? Wt(t) : null, n = i ?? o;
1116
- n?.endpoint && new Ft(n);
1121
+ const t = document.currentScript, i = Wt(), o = t ? Xt(t) : null, n = i ?? o;
1122
+ n?.endpoint && new Ut(n);
1117
1123
  };
1118
1124
  document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
1119
1125
  }
1120
1126
  export {
1121
- Ft as QaidFeedback,
1122
- Nt as captureDomScreenshot,
1127
+ Ut as QaidFeedback,
1128
+ Vt as captureDomScreenshot,
1123
1129
  Ht as captureNetworkErrors,
1124
- Bt as createVideoRecorder,
1125
- Mt as getSupportedMimeType,
1126
- Xt as isDomScreenshotSupported,
1127
- Dt as isVideoRecordingSupported
1130
+ Rt as createVideoRecorder,
1131
+ Bt as getSupportedMimeType,
1132
+ Kt as isDomScreenshotSupported,
1133
+ Mt as isVideoRecordingSupported
1128
1134
  };
1129
1135
  //# sourceMappingURL=qaid.js.map