@qaiddev/thumbs-embed 1.0.10 → 1.0.12
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/console-capture.d.ts +20 -0
- package/dist/dom-utils.d.ts +37 -0
- package/dist/element-selector.d.ts +33 -0
- package/dist/embed.d.ts +109 -0
- package/dist/icons.d.ts +6 -0
- package/dist/index.d.ts +38 -425
- package/dist/modal-positioning.d.ts +46 -0
- package/dist/network-capture.d.ts +13 -0
- package/dist/qaid.js +145 -122
- package/dist/qaid.js.map +1 -1
- package/dist/qaid.umd.cjs +5 -5
- package/dist/qaid.umd.cjs.map +1 -1
- package/dist/screenshot-dom.d.ts +27 -0
- package/dist/screenshot.d.ts +17 -0
- package/dist/styles.d.ts +44 -0
- package/dist/types.d.ts +237 -0
- package/dist/video-capture.d.ts +34 -0
- package/package.json +2 -3
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>`,
|
|
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">
|
|
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>`, Q = "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}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)}", tt = "body.qaid-targeting,body.qaid-targeting *{cursor:none!important}";
|
|
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}";
|
|
8
8
|
let w = 0;
|
|
9
|
-
const
|
|
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 = {
|
|
10
10
|
small: 36,
|
|
11
11
|
medium: 48,
|
|
12
12
|
large: 64
|
|
13
|
-
},
|
|
13
|
+
}, at = {
|
|
14
14
|
small: 18,
|
|
15
15
|
medium: 24,
|
|
16
16
|
large: 32
|
|
17
17
|
};
|
|
18
|
-
function
|
|
18
|
+
function rt(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
|
|
22
|
+
function dt(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 st(e) {
|
|
|
35
35
|
b: parseInt(t[3])
|
|
36
36
|
} : null;
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
const t =
|
|
40
|
-
return t &&
|
|
38
|
+
function ct(e) {
|
|
39
|
+
const t = dt(e);
|
|
40
|
+
return t && rt(t.r, t.g, t.b) > 0.4 ? "black" : "white";
|
|
41
41
|
}
|
|
42
|
-
function
|
|
42
|
+
function lt(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 rt(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 =
|
|
52
|
+
} = e, a = st[n], c = at[n], h = ct(o);
|
|
53
53
|
return {
|
|
54
54
|
"--qaid-positive": t,
|
|
55
55
|
"--qaid-negative": i,
|
|
@@ -63,29 +63,29 @@ function rt(e = {}) {
|
|
|
63
63
|
"--qaid-font-size": `${d}px`
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
|
-
function
|
|
66
|
+
function ht(e, t) {
|
|
67
67
|
for (const [i, o] of Object.entries(t))
|
|
68
68
|
e.style.setProperty(i, o);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
71
|
-
return
|
|
70
|
+
function z() {
|
|
71
|
+
return it + nt;
|
|
72
72
|
}
|
|
73
|
-
function
|
|
73
|
+
function ut() {
|
|
74
74
|
if (w++, w > 1) return;
|
|
75
75
|
const e = document.createElement("style");
|
|
76
|
-
e.id = "qaid-styles", e.textContent =
|
|
76
|
+
e.id = "qaid-styles", e.textContent = ot, document.head.appendChild(e);
|
|
77
77
|
}
|
|
78
|
-
function
|
|
78
|
+
function pt() {
|
|
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
|
|
85
|
-
function
|
|
84
|
+
const mt = ["data-comp", "data-qa", "data-testid", "data-id"];
|
|
85
|
+
function U(e, t = document.body) {
|
|
86
86
|
let i = e;
|
|
87
87
|
for (; i && i !== t; ) {
|
|
88
|
-
for (const o of
|
|
88
|
+
for (const o of mt) {
|
|
89
89
|
const n = i.getAttribute(o);
|
|
90
90
|
if (n)
|
|
91
91
|
return `${o}="${n}"`;
|
|
@@ -94,44 +94,44 @@ function V(e, t = document.body) {
|
|
|
94
94
|
}
|
|
95
95
|
return null;
|
|
96
96
|
}
|
|
97
|
-
function
|
|
97
|
+
function ft(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
|
|
101
|
+
function bt(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
|
|
107
|
+
function gt(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 =
|
|
111
|
+
const o = i.tagName.toLowerCase(), n = bt(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
|
|
116
|
+
function vt(e) {
|
|
117
117
|
return e.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
|
|
118
118
|
}
|
|
119
|
-
function
|
|
120
|
-
const t =
|
|
121
|
-
return t ? `[${t}]` : e.id ? `#${
|
|
119
|
+
function yt(e) {
|
|
120
|
+
const t = U(e);
|
|
121
|
+
return t ? `[${t}]` : e.id ? `#${vt(e.id)}` : gt(e);
|
|
122
122
|
}
|
|
123
|
-
function
|
|
124
|
-
const t =
|
|
125
|
-
return { selector:
|
|
123
|
+
function wt(e) {
|
|
124
|
+
const t = ft(e), i = U(e);
|
|
125
|
+
return { selector: yt(e), text: t, dataAttr: i };
|
|
126
126
|
}
|
|
127
|
-
const
|
|
127
|
+
const W = {
|
|
128
128
|
width: 400,
|
|
129
129
|
height: 280,
|
|
130
130
|
arrowHeight: 12,
|
|
131
131
|
gap: 8,
|
|
132
132
|
viewportPadding: 16
|
|
133
133
|
};
|
|
134
|
-
function
|
|
134
|
+
function xt(e, t, i, o, n) {
|
|
135
135
|
const s = e.y, r = t - (e.y + e.height);
|
|
136
136
|
if (r >= i + o)
|
|
137
137
|
return {
|
|
@@ -150,22 +150,22 @@ function vt(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
|
|
153
|
+
function qt(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
|
|
157
|
+
function kt(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
|
|
162
|
-
const n = o.height + o.arrowHeight, s =
|
|
161
|
+
function Ct(e, t, i, o = W) {
|
|
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 =
|
|
168
|
+
), r = qt(
|
|
169
169
|
e,
|
|
170
170
|
t,
|
|
171
171
|
o.width,
|
|
@@ -177,8 +177,8 @@ function xt(e, t, i, o = U) {
|
|
|
177
177
|
position: s.position
|
|
178
178
|
};
|
|
179
179
|
}
|
|
180
|
-
function
|
|
181
|
-
const n =
|
|
180
|
+
function St(e, t, i, o = W) {
|
|
181
|
+
const n = Ct(e, t, i, o), s = kt(
|
|
182
182
|
e,
|
|
183
183
|
n.left,
|
|
184
184
|
o.width
|
|
@@ -188,15 +188,15 @@ function qt(e, t, i, o = U) {
|
|
|
188
188
|
arrow: { left: s }
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
|
-
const
|
|
192
|
-
function
|
|
191
|
+
const Et = 20;
|
|
192
|
+
function Tt(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 >=
|
|
199
|
+
t.length >= Et && 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,16 +211,16 @@ function Ct(e) {
|
|
|
211
211
|
}
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
|
-
const
|
|
214
|
+
const It = 20, P = 4096;
|
|
215
215
|
function q(e) {
|
|
216
216
|
if (e == null) return;
|
|
217
217
|
const t = typeof e == "string" ? e : JSON.stringify(e);
|
|
218
|
-
return t.length >
|
|
218
|
+
return t.length > P ? t.slice(0, P) + "…[truncated]" : t;
|
|
219
219
|
}
|
|
220
220
|
function O(e, t) {
|
|
221
|
-
e.length >=
|
|
221
|
+
e.length >= It && e.shift(), e.push(t);
|
|
222
222
|
}
|
|
223
|
-
async function
|
|
223
|
+
async function Lt(e) {
|
|
224
224
|
try {
|
|
225
225
|
const t = await e.clone().text();
|
|
226
226
|
return q(t);
|
|
@@ -228,7 +228,7 @@ async function Et(e) {
|
|
|
228
228
|
return;
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
|
-
function
|
|
231
|
+
function Ht() {
|
|
232
232
|
const e = [], t = window.fetch;
|
|
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");
|
|
@@ -236,7 +236,7 @@ function Tt() {
|
|
|
236
236
|
s?.body && (d = q(s.body));
|
|
237
237
|
const a = await t.apply(window, [n, s]);
|
|
238
238
|
if (a.status >= 400) {
|
|
239
|
-
const c = await
|
|
239
|
+
const c = await Lt(a);
|
|
240
240
|
O(e, {
|
|
241
241
|
url: r,
|
|
242
242
|
method: l.toUpperCase(),
|
|
@@ -272,10 +272,10 @@ function Tt() {
|
|
|
272
272
|
}
|
|
273
273
|
};
|
|
274
274
|
}
|
|
275
|
-
function
|
|
275
|
+
function Dt() {
|
|
276
276
|
return typeof navigator < "u" && !!navigator.mediaDevices && typeof navigator.mediaDevices.getDisplayMedia == "function" && typeof MediaRecorder < "u";
|
|
277
277
|
}
|
|
278
|
-
function
|
|
278
|
+
function Mt() {
|
|
279
279
|
if (typeof MediaRecorder > "u") return "";
|
|
280
280
|
const e = [
|
|
281
281
|
"video/webm;codecs=vp9",
|
|
@@ -288,7 +288,7 @@ function Lt() {
|
|
|
288
288
|
return t;
|
|
289
289
|
return "";
|
|
290
290
|
}
|
|
291
|
-
function
|
|
291
|
+
function Bt(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 Rt(e = {}) {
|
|
|
300
300
|
return {
|
|
301
301
|
async start() {
|
|
302
302
|
u = !1, s = [];
|
|
303
|
-
const m =
|
|
303
|
+
const m = Mt();
|
|
304
304
|
if (!m)
|
|
305
305
|
throw new Error("No supported video MIME type found");
|
|
306
306
|
o = await navigator.mediaDevices.getDisplayMedia({
|
|
@@ -347,19 +347,19 @@ function Rt(e = {}) {
|
|
|
347
347
|
}
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
|
-
function
|
|
350
|
+
function Rt(e = 640) {
|
|
351
351
|
return typeof window < "u" && window.innerWidth < e;
|
|
352
352
|
}
|
|
353
|
-
function
|
|
353
|
+
function A(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
|
|
359
|
+
function $(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
|
|
362
|
+
function zt(e, t = 0) {
|
|
363
363
|
const i = e.getBoundingClientRect();
|
|
364
364
|
return {
|
|
365
365
|
x: i.left - t,
|
|
@@ -368,7 +368,7 @@ function Mt(e, t = 0) {
|
|
|
368
368
|
height: i.height + t * 2
|
|
369
369
|
};
|
|
370
370
|
}
|
|
371
|
-
async function
|
|
371
|
+
async function Pt(e = {}) {
|
|
372
372
|
const { quality: t = 1, maxWidth: i = 1280, maxHeight: o = 800 } = e;
|
|
373
373
|
try {
|
|
374
374
|
if (!navigator.mediaDevices?.getDisplayMedia)
|
|
@@ -397,40 +397,40 @@ async function Dt(e = {}) {
|
|
|
397
397
|
return console.warn("Screenshot capture failed:", n), null;
|
|
398
398
|
}
|
|
399
399
|
}
|
|
400
|
-
const
|
|
400
|
+
const N = "https://qaid.dev/lib/html2canvas.min.js", Ot = 1e4, At = 50;
|
|
401
401
|
let y = null;
|
|
402
|
-
function
|
|
402
|
+
function Xt() {
|
|
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
|
|
408
|
+
function $t() {
|
|
409
409
|
return window.html2canvas ? Promise.resolve(!0) : y || (y = new Promise((e) => {
|
|
410
410
|
if (!document.querySelector(
|
|
411
|
-
`script[src="${
|
|
411
|
+
`script[src="${N}"]`
|
|
412
412
|
)) {
|
|
413
413
|
const n = document.createElement("script");
|
|
414
|
-
n.src =
|
|
414
|
+
n.src = N, n.async = !0, document.head.appendChild(n);
|
|
415
415
|
}
|
|
416
416
|
const i = Date.now(), o = () => {
|
|
417
417
|
if (window.html2canvas) {
|
|
418
418
|
e(!0);
|
|
419
419
|
return;
|
|
420
420
|
}
|
|
421
|
-
if (Date.now() - i >
|
|
421
|
+
if (Date.now() - i > Ot) {
|
|
422
422
|
y = null, e(!1);
|
|
423
423
|
return;
|
|
424
424
|
}
|
|
425
|
-
setTimeout(o,
|
|
425
|
+
setTimeout(o, At);
|
|
426
426
|
};
|
|
427
427
|
o();
|
|
428
428
|
}), y);
|
|
429
429
|
}
|
|
430
|
-
async function
|
|
430
|
+
async function Nt(e = {}) {
|
|
431
431
|
const { quality: t = 0.8, maxWidth: i = 1280, maxHeight: o = 800 } = e;
|
|
432
432
|
try {
|
|
433
|
-
if (!await
|
|
433
|
+
if (!await $t() || !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,16 +455,32 @@ async function Pt(e = {}) {
|
|
|
455
455
|
return console.warn("DOM screenshot capture failed:", n), null;
|
|
456
456
|
}
|
|
457
457
|
}
|
|
458
|
-
const
|
|
459
|
-
function
|
|
458
|
+
const V = "qaid_visitor_id", _ = "qaid_hide_feedback";
|
|
459
|
+
function I(e) {
|
|
460
|
+
return e ? `${_}_${e}` : _;
|
|
461
|
+
}
|
|
462
|
+
function Vt(e) {
|
|
460
463
|
try {
|
|
461
|
-
|
|
462
|
-
|
|
464
|
+
return localStorage.getItem(I(e)) === "1";
|
|
465
|
+
} catch {
|
|
466
|
+
return !1;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
function F(e, t = !0) {
|
|
470
|
+
try {
|
|
471
|
+
t ? localStorage.setItem(I(e), "1") : localStorage.removeItem(I(e));
|
|
472
|
+
} catch {
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
function _t() {
|
|
476
|
+
try {
|
|
477
|
+
let e = localStorage.getItem(V);
|
|
478
|
+
return e || (e = crypto.randomUUID(), localStorage.setItem(V, e)), e;
|
|
463
479
|
} catch {
|
|
464
480
|
return crypto.randomUUID();
|
|
465
481
|
}
|
|
466
482
|
}
|
|
467
|
-
class
|
|
483
|
+
class Ft {
|
|
468
484
|
config;
|
|
469
485
|
state = "IDLE";
|
|
470
486
|
feedbackData = {
|
|
@@ -514,6 +530,7 @@ class $t {
|
|
|
514
530
|
marker = null;
|
|
515
531
|
modalContainer = null;
|
|
516
532
|
backdrop = null;
|
|
533
|
+
dismissBtn = null;
|
|
517
534
|
// Per-instance CSS variables
|
|
518
535
|
cssVars = {};
|
|
519
536
|
// Bound event handlers
|
|
@@ -574,13 +591,13 @@ class $t {
|
|
|
574
591
|
maxDuration: t.videoOptions?.maxDuration ?? 15
|
|
575
592
|
},
|
|
576
593
|
recordIcon: t.recordIcon ?? ""
|
|
577
|
-
}, 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 =
|
|
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();
|
|
578
595
|
}
|
|
579
596
|
applyVars(t) {
|
|
580
|
-
|
|
597
|
+
ht(t, this.cssVars);
|
|
581
598
|
}
|
|
582
599
|
init() {
|
|
583
|
-
|
|
600
|
+
ut(), this.cssVars = lt({
|
|
584
601
|
positiveColor: this.config.colors.positive,
|
|
585
602
|
negativeColor: this.config.colors.negative,
|
|
586
603
|
markerColor: this.config.colors.marker,
|
|
@@ -589,7 +606,7 @@ class $t {
|
|
|
589
606
|
backdropOpacity: this.config.backdropOpacity,
|
|
590
607
|
fontFamily: this.config.fontFamily,
|
|
591
608
|
fontSize: this.config.fontSize
|
|
592
|
-
}), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture =
|
|
609
|
+
}), Vt(this.config.apiKey) && (this.config.incognito = !0), this.checkMobile(), window.addEventListener("resize", this.boundResize), this.createEmbed(), this.consoleCapture = Tt((t) => {
|
|
593
610
|
this.feedbackData.consoleErrors = this.consoleCapture?.errors ?? [];
|
|
594
611
|
}), this.feedbackData.consoleErrors = this.consoleCapture.errors, this.observeDom();
|
|
595
612
|
}
|
|
@@ -612,7 +629,7 @@ class $t {
|
|
|
612
629
|
}), this.domObserver.observe(document.body, { childList: !0 });
|
|
613
630
|
}
|
|
614
631
|
checkMobile() {
|
|
615
|
-
this.isMobile =
|
|
632
|
+
this.isMobile = Rt();
|
|
616
633
|
}
|
|
617
634
|
handleResize() {
|
|
618
635
|
this.checkMobile();
|
|
@@ -622,7 +639,7 @@ class $t {
|
|
|
622
639
|
let t = null;
|
|
623
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" });
|
|
624
641
|
const i = document.createElement("style");
|
|
625
|
-
if (i.textContent =
|
|
642
|
+
if (i.textContent = z(), this.shadowRoot.appendChild(i), this.config.css) {
|
|
626
643
|
const a = document.createElement("style");
|
|
627
644
|
a.textContent = this.config.css, this.shadowRoot.appendChild(a);
|
|
628
645
|
}
|
|
@@ -646,12 +663,15 @@ class $t {
|
|
|
646
663
|
const u = document.createElement("button");
|
|
647
664
|
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);
|
|
648
665
|
}
|
|
649
|
-
if (this.config.captureVideo &&
|
|
666
|
+
if (this.config.captureVideo && Dt()) {
|
|
650
667
|
const a = document.createElement("div");
|
|
651
668
|
a.className = "qaid-tooltip-wrapper";
|
|
652
669
|
const c = document.createElement("button");
|
|
653
|
-
c.type = "button", c.className = n ? `${s} qaid-btn-record` : "qaid-btn qaid-btn-record", c.innerHTML = this.config.recordIcon ||
|
|
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);
|
|
654
671
|
}
|
|
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) => {
|
|
673
|
+
a.stopPropagation(), this.handleDismiss();
|
|
674
|
+
}), this.buttonsContainer.appendChild(this.dismissBtn);
|
|
655
675
|
}
|
|
656
676
|
/**
|
|
657
677
|
* Lazily create a separate overlay shadow host on document.body.
|
|
@@ -663,7 +683,7 @@ class $t {
|
|
|
663
683
|
if (this.overlayShadowRoot) return this.overlayShadowRoot;
|
|
664
684
|
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" });
|
|
665
685
|
const t = document.createElement("style");
|
|
666
|
-
if (t.textContent =
|
|
686
|
+
if (t.textContent = z(), this.overlayShadowRoot.appendChild(t), this.config.css) {
|
|
667
687
|
const i = document.createElement("style");
|
|
668
688
|
i.textContent = this.config.css, this.overlayShadowRoot.appendChild(i);
|
|
669
689
|
}
|
|
@@ -681,8 +701,11 @@ class $t {
|
|
|
681
701
|
hideTooltip() {
|
|
682
702
|
this.tooltipElement && this.tooltipElement.classList.remove("qaid-tooltip-visible");
|
|
683
703
|
}
|
|
704
|
+
handleDismiss() {
|
|
705
|
+
this.buttonsContainer && this.buttonsContainer.classList.add("qaid-incognito"), F(this.config.apiKey, !0);
|
|
706
|
+
}
|
|
684
707
|
handleThumbClick(t, i, o) {
|
|
685
|
-
this.config.skipTargeting ? this.submitDirectFeedback(t, i) : this.startTargeting(t, 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);
|
|
686
709
|
}
|
|
687
710
|
submitDirectFeedback(t, i) {
|
|
688
711
|
this.feedbackData.feedbackType = t, this.feedbackData.elementSelector = null, this.feedbackData.elementText = null;
|
|
@@ -715,12 +738,12 @@ class $t {
|
|
|
715
738
|
}
|
|
716
739
|
handleMouseMove(t) {
|
|
717
740
|
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) {
|
|
718
|
-
const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o =
|
|
741
|
+
const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o = A(
|
|
719
742
|
t.clientX,
|
|
720
743
|
t.clientY,
|
|
721
744
|
i
|
|
722
745
|
);
|
|
723
|
-
if (o &&
|
|
746
|
+
if (o && !$(o)) {
|
|
724
747
|
if (this.highlightBox) {
|
|
725
748
|
const n = o.getBoundingClientRect();
|
|
726
749
|
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";
|
|
@@ -732,21 +755,21 @@ class $t {
|
|
|
732
755
|
handleClick(t) {
|
|
733
756
|
if (this.state !== "TARGETING" || !this.shadowHost) return;
|
|
734
757
|
t.preventDefault(), t.stopPropagation();
|
|
735
|
-
const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o =
|
|
758
|
+
const i = [this.shadowHost, this.overlayShadowHost].filter(Boolean), o = A(
|
|
736
759
|
t.clientX,
|
|
737
760
|
t.clientY,
|
|
738
761
|
i
|
|
739
762
|
);
|
|
740
|
-
if (!o ||
|
|
763
|
+
if (!o || $(o))
|
|
741
764
|
return;
|
|
742
|
-
const n =
|
|
765
|
+
const n = zt(o, 8);
|
|
743
766
|
this.selectedBounds = {
|
|
744
767
|
...n,
|
|
745
768
|
clickX: t.clientX,
|
|
746
769
|
clickY: t.clientY,
|
|
747
770
|
visible: !0
|
|
748
771
|
};
|
|
749
|
-
const { selector: s, text: r } =
|
|
772
|
+
const { selector: s, text: r } = wt(o);
|
|
750
773
|
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();
|
|
751
774
|
}
|
|
752
775
|
cancelTargeting() {
|
|
@@ -766,7 +789,7 @@ class $t {
|
|
|
766
789
|
async submitFeedback() {
|
|
767
790
|
if (!this.feedbackData.feedbackType) return;
|
|
768
791
|
let t = null;
|
|
769
|
-
this.config.captureScreenshot && (this.config.screenshotMethod === "dom" ? t = await
|
|
792
|
+
this.config.captureScreenshot && (this.config.screenshotMethod === "dom" ? t = await Nt(this.config.screenshotOptions) : t = await Pt(this.config.screenshotOptions));
|
|
770
793
|
const i = this.feedbackData.elementSelector ? {
|
|
771
794
|
x: this.selectedBounds.x,
|
|
772
795
|
y: this.selectedBounds.y,
|
|
@@ -820,7 +843,7 @@ class $t {
|
|
|
820
843
|
`, this.applyVars(i), t.appendChild(i), this.modalContainer = i, this.setupModalInteractions();
|
|
821
844
|
}
|
|
822
845
|
showPositionedModal() {
|
|
823
|
-
const t = this.ensureOverlayHost(), { modal: i, arrow: o } =
|
|
846
|
+
const t = this.ensureOverlayHost(), { modal: i, arrow: o } = St(
|
|
824
847
|
this.selectedBounds,
|
|
825
848
|
window.innerWidth,
|
|
826
849
|
window.innerHeight,
|
|
@@ -903,7 +926,7 @@ class $t {
|
|
|
903
926
|
async startRecording() {
|
|
904
927
|
if (!(this.isRecording || this.state !== "IDLE"))
|
|
905
928
|
try {
|
|
906
|
-
this.networkCapture =
|
|
929
|
+
this.networkCapture = Ht(), this.videoRecorder = Bt({
|
|
907
930
|
maxDuration: this.config.videoOptions.maxDuration
|
|
908
931
|
}), this.videoRecorder.onTick((t) => {
|
|
909
932
|
this.updateRecordingTimer(t);
|
|
@@ -1014,13 +1037,13 @@ class $t {
|
|
|
1014
1037
|
* Destroy the embed and clean up all resources
|
|
1015
1038
|
*/
|
|
1016
1039
|
destroy() {
|
|
1017
|
-
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.tooltipElement = null,
|
|
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();
|
|
1018
1041
|
}
|
|
1019
1042
|
}
|
|
1020
|
-
function
|
|
1043
|
+
function X(e) {
|
|
1021
1044
|
return document.querySelector(e)?.textContent?.trim() ?? "";
|
|
1022
1045
|
}
|
|
1023
|
-
function
|
|
1046
|
+
function Ut() {
|
|
1024
1047
|
const e = document.querySelector(
|
|
1025
1048
|
'script[type="application/json"][data-feedback-config]'
|
|
1026
1049
|
);
|
|
@@ -1029,20 +1052,20 @@ function Nt() {
|
|
|
1029
1052
|
if (!t) return null;
|
|
1030
1053
|
try {
|
|
1031
1054
|
const i = JSON.parse(t);
|
|
1032
|
-
return i.cssSelector && !i.css && (i.css =
|
|
1055
|
+
return i.cssSelector && !i.css && (i.css = X(i.cssSelector), delete i.cssSelector), i;
|
|
1033
1056
|
} catch {
|
|
1034
1057
|
return null;
|
|
1035
1058
|
}
|
|
1036
1059
|
}
|
|
1037
|
-
function
|
|
1060
|
+
function Wt(e) {
|
|
1038
1061
|
const t = e.getAttribute("data-endpoint");
|
|
1039
1062
|
if (!t) return null;
|
|
1040
|
-
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"),
|
|
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");
|
|
1041
1064
|
return {
|
|
1042
1065
|
endpoint: t,
|
|
1043
|
-
css:
|
|
1044
|
-
apiKey:
|
|
1045
|
-
captureScreenshot:
|
|
1066
|
+
css: R ? X(R) : void 0,
|
|
1067
|
+
apiKey: Y ?? void 0,
|
|
1068
|
+
captureScreenshot: J === "true" ? !0 : void 0,
|
|
1046
1069
|
screenshotOptions: k || C || S ? {
|
|
1047
1070
|
quality: k ? parseFloat(k) : void 0,
|
|
1048
1071
|
maxWidth: C ? parseInt(C, 10) : void 0,
|
|
@@ -1050,7 +1073,7 @@ function Vt(e) {
|
|
|
1050
1073
|
} : void 0,
|
|
1051
1074
|
container: l ?? void 0,
|
|
1052
1075
|
buttonClass: d ?? void 0,
|
|
1053
|
-
direction:
|
|
1076
|
+
direction: tt ?? void 0,
|
|
1054
1077
|
position: i ?? void 0,
|
|
1055
1078
|
zIndex: o ? parseInt(o, 10) : void 0,
|
|
1056
1079
|
skipTargeting: a === "true" ? !0 : void 0,
|
|
@@ -1069,38 +1092,38 @@ function Vt(e) {
|
|
|
1069
1092
|
negative: s ?? void 0,
|
|
1070
1093
|
marker: r ?? void 0
|
|
1071
1094
|
},
|
|
1072
|
-
text: b || x ||
|
|
1095
|
+
text: b || x || L || H || D || M ? {
|
|
1073
1096
|
tooltip: b ?? void 0,
|
|
1074
1097
|
modalTitle: x ?? void 0,
|
|
1075
|
-
modalSubtitle:
|
|
1076
|
-
placeholder:
|
|
1077
|
-
submitButton:
|
|
1078
|
-
skipButton:
|
|
1098
|
+
modalSubtitle: L ?? void 0,
|
|
1099
|
+
placeholder: H ?? void 0,
|
|
1100
|
+
submitButton: D ?? void 0,
|
|
1101
|
+
skipButton: M ?? void 0
|
|
1079
1102
|
} : void 0,
|
|
1080
|
-
positiveIcon:
|
|
1081
|
-
negativeIcon:
|
|
1082
|
-
screenshotMethod:
|
|
1083
|
-
captureVideo:
|
|
1084
|
-
hideThumbs:
|
|
1085
|
-
videoOptions:
|
|
1086
|
-
maxDuration: parseInt(
|
|
1103
|
+
positiveIcon: j ?? void 0,
|
|
1104
|
+
negativeIcon: K ?? void 0,
|
|
1105
|
+
screenshotMethod: Q ?? void 0,
|
|
1106
|
+
captureVideo: G === "true" ? !0 : void 0,
|
|
1107
|
+
hideThumbs: Z === "true" ? !0 : void 0,
|
|
1108
|
+
videoOptions: B ? {
|
|
1109
|
+
maxDuration: parseInt(B, 10)
|
|
1087
1110
|
} : void 0
|
|
1088
1111
|
};
|
|
1089
1112
|
}
|
|
1090
1113
|
if (typeof document < "u") {
|
|
1091
1114
|
const e = () => {
|
|
1092
|
-
const t = document.currentScript, i =
|
|
1093
|
-
n?.endpoint && new
|
|
1115
|
+
const t = document.currentScript, i = Ut(), o = t ? Wt(t) : null, n = i ?? o;
|
|
1116
|
+
n?.endpoint && new Ft(n);
|
|
1094
1117
|
};
|
|
1095
1118
|
document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", e) : e();
|
|
1096
1119
|
}
|
|
1097
1120
|
export {
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1121
|
+
Ft as QaidFeedback,
|
|
1122
|
+
Nt as captureDomScreenshot,
|
|
1123
|
+
Ht as captureNetworkErrors,
|
|
1124
|
+
Bt as createVideoRecorder,
|
|
1125
|
+
Mt as getSupportedMimeType,
|
|
1126
|
+
Xt as isDomScreenshotSupported,
|
|
1127
|
+
Dt as isVideoRecordingSupported
|
|
1105
1128
|
};
|
|
1106
1129
|
//# sourceMappingURL=qaid.js.map
|