@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/README.md +10 -10
- package/dist/embed.d.ts +1 -0
- package/dist/qaid.js +130 -124
- package/dist/qaid.js.map +1 -1
- package/dist/qaid.umd.cjs +3 -3
- package/dist/qaid.umd.cjs.map +1 -1
- package/dist/types.d.ts +3 -0
- package/package.json +1 -1
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>`, 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
|
|
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
|
-
},
|
|
13
|
+
}, rt = {
|
|
14
14
|
small: 18,
|
|
15
15
|
medium: 24,
|
|
16
16
|
large: 32
|
|
17
17
|
};
|
|
18
|
-
function
|
|
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
|
|
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
|
|
39
|
-
const t =
|
|
40
|
-
return t &&
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
71
|
-
return
|
|
70
|
+
function P() {
|
|
71
|
+
return ot + st;
|
|
72
72
|
}
|
|
73
|
-
function
|
|
73
|
+
function pt() {
|
|
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 = nt, document.head.appendChild(e);
|
|
77
77
|
}
|
|
78
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
116
|
+
function yt(e) {
|
|
117
117
|
return e.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
|
|
118
118
|
}
|
|
119
|
-
function
|
|
119
|
+
function wt(e) {
|
|
120
120
|
const t = U(e);
|
|
121
|
-
return t ? `[${t}]` : e.id ? `#${
|
|
121
|
+
return t ? `[${t}]` : e.id ? `#${yt(e.id)}` : vt(e);
|
|
122
122
|
}
|
|
123
|
-
function
|
|
124
|
-
const t =
|
|
125
|
-
return { selector:
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
181
|
-
const n =
|
|
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
|
|
192
|
-
function
|
|
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 >=
|
|
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
|
|
215
|
-
function
|
|
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 >
|
|
218
|
+
return t.length > A ? t.slice(0, A) + "…[truncated]" : t;
|
|
219
219
|
}
|
|
220
220
|
function O(e, t) {
|
|
221
|
-
e.length >=
|
|
221
|
+
e.length >= Lt && e.shift(), e.push(t);
|
|
222
222
|
}
|
|
223
|
-
async function
|
|
223
|
+
async function Dt(e) {
|
|
224
224
|
try {
|
|
225
225
|
const t = await e.clone().text();
|
|
226
|
-
return
|
|
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 =
|
|
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
|
|
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 ?
|
|
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:
|
|
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
|
|
275
|
+
function Mt() {
|
|
276
276
|
return typeof navigator < "u" && !!navigator.mediaDevices && typeof navigator.mediaDevices.getDisplayMedia == "function" && typeof MediaRecorder < "u";
|
|
277
277
|
}
|
|
278
|
-
function
|
|
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
|
|
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 =
|
|
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((
|
|
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
|
|
350
|
+
function zt(e = 640) {
|
|
351
351
|
return typeof window < "u" && window.innerWidth < e;
|
|
352
352
|
}
|
|
353
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
400
|
+
const V = "https://qaid.dev/lib/html2canvas.min.js", Ot = 1e4, $t = 50;
|
|
401
401
|
let y = null;
|
|
402
|
-
function
|
|
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
|
|
408
|
+
function Nt() {
|
|
409
409
|
return window.html2canvas ? Promise.resolve(!0) : y || (y = new Promise((e) => {
|
|
410
410
|
if (!document.querySelector(
|
|
411
|
-
`script[src="${
|
|
411
|
+
`script[src="${V}"]`
|
|
412
412
|
)) {
|
|
413
413
|
const n = document.createElement("script");
|
|
414
|
-
n.src =
|
|
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,
|
|
425
|
+
setTimeout(o, $t);
|
|
426
426
|
};
|
|
427
427
|
o();
|
|
428
428
|
}), y);
|
|
429
429
|
}
|
|
430
|
-
async function
|
|
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
|
|
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
|
|
459
|
-
function
|
|
460
|
-
return e ? `${
|
|
458
|
+
const _ = "qaid_visitor_id", F = "qaid_hide_feedback";
|
|
459
|
+
function L(e) {
|
|
460
|
+
return e ? `${F}_${e}` : F;
|
|
461
461
|
}
|
|
462
|
-
function
|
|
462
|
+
function _t(e) {
|
|
463
463
|
try {
|
|
464
|
-
return localStorage.getItem(
|
|
464
|
+
return localStorage.getItem(L(e)) === "1";
|
|
465
465
|
} catch {
|
|
466
466
|
return !1;
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
|
-
function
|
|
469
|
+
function I(e, t = !0) {
|
|
470
470
|
try {
|
|
471
|
-
t ? localStorage.setItem(
|
|
471
|
+
t ? localStorage.setItem(L(e), "1") : localStorage.removeItem(L(e));
|
|
472
472
|
} catch {
|
|
473
473
|
}
|
|
474
474
|
}
|
|
475
|
-
function
|
|
475
|
+
function Ft() {
|
|
476
476
|
try {
|
|
477
|
-
let e = localStorage.getItem(
|
|
478
|
-
return e || (e = crypto.randomUUID(), localStorage.setItem(
|
|
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
|
|
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 =
|
|
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
|
-
|
|
600
|
+
ut(t, this.cssVars);
|
|
598
601
|
}
|
|
599
602
|
init() {
|
|
600
|
-
|
|
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
|
-
}),
|
|
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 =
|
|
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 =
|
|
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 &&
|
|
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 ||
|
|
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.
|
|
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 =
|
|
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-
|
|
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"),
|
|
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 =
|
|
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 &&
|
|
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 =
|
|
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 ||
|
|
768
|
+
if (!o || N(o))
|
|
764
769
|
return;
|
|
765
|
-
const n =
|
|
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 } =
|
|
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
|
|
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 } =
|
|
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 =
|
|
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,
|
|
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
|
|
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
|
|
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"),
|
|
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:
|
|
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:
|
|
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 ||
|
|
1100
|
+
text: b || q || D || H || M || B ? {
|
|
1096
1101
|
tooltip: b ?? void 0,
|
|
1097
|
-
modalTitle:
|
|
1098
|
-
modalSubtitle:
|
|
1102
|
+
modalTitle: q ?? void 0,
|
|
1103
|
+
modalSubtitle: D ?? void 0,
|
|
1099
1104
|
placeholder: H ?? void 0,
|
|
1100
|
-
submitButton:
|
|
1101
|
-
skipButton:
|
|
1105
|
+
submitButton: M ?? void 0,
|
|
1106
|
+
skipButton: B ?? void 0
|
|
1102
1107
|
} : void 0,
|
|
1103
|
-
positiveIcon:
|
|
1104
|
-
negativeIcon:
|
|
1105
|
-
screenshotMethod:
|
|
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
|
-
|
|
1109
|
-
|
|
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 =
|
|
1116
|
-
n?.endpoint && new
|
|
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
|
-
|
|
1122
|
-
|
|
1127
|
+
Ut as QaidFeedback,
|
|
1128
|
+
Vt as captureDomScreenshot,
|
|
1123
1129
|
Ht as captureNetworkErrors,
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1130
|
+
Rt as createVideoRecorder,
|
|
1131
|
+
Bt as getSupportedMimeType,
|
|
1132
|
+
Kt as isDomScreenshotSupported,
|
|
1133
|
+
Mt as isVideoRecordingSupported
|
|
1128
1134
|
};
|
|
1129
1135
|
//# sourceMappingURL=qaid.js.map
|