blocfeed 0.8.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import {m as m$1,n,q,o,r,a,l,j,i,b}from'./chunk-KJRV7PRA.js';import {createContext,forwardRef,useState,useEffect,useRef,useMemo,useImperativeHandle,useCallback,useContext}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {createPortal}from'react-dom';import {AnimatePresence,motion}from'framer-motion';var V=createContext(null);function ee(e){let t=useMemo(()=>l({...e.config??{},blocfeed_id:e.blocfeed_id}),[]),[i,o]=useState(()=>t.getState());return useEffect(()=>t.subscribe(o),[t]),useEffect(()=>t.setConfig({...e.config??{},blocfeed_id:e.blocfeed_id}),[t,e.config,e.blocfeed_id]),useEffect(()=>()=>t.destroy(),[t]),jsx(V.Provider,{value:{controller:t,state:i},children:e.children})}var ke="blocfeed-styles-v1",kt=`
2
+ import {r,s,v,t,w,j,a,q,l,n,i,b}from'./chunk-X6GNKKUZ.js';import {createContext,forwardRef,useState,useEffect,useRef,useMemo,useImperativeHandle,useCallback,useContext}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {createPortal}from'react-dom';import {AnimatePresence,motion}from'framer-motion';var X=createContext(null);function oe(t){let e=useMemo(()=>q({...t.config??{},blocfeed_id:t.blocfeed_id}),[]),[a,r]=useState(()=>e.getState());return useEffect(()=>e.subscribe(r),[e]),useEffect(()=>e.setConfig({...t.config??{},blocfeed_id:t.blocfeed_id}),[e,t.config,t.blocfeed_id]),useEffect(()=>()=>e.destroy(),[e]),jsx(X.Provider,{value:{controller:e,state:a},children:t.children})}var Ce="blocfeed-styles-v1",Bt=`
3
3
  :where([data-blocfeed-ui-root]),
4
4
  :where([data-blocfeed-ui-root]) * {
5
5
  box-sizing: border-box;
@@ -637,6 +637,45 @@ import {m as m$1,n,q,o,r,a,l,j,i,b}from'./chunk-KJRV7PRA.js';import {createConte
637
637
  cursor: not-allowed;
638
638
  }
639
639
 
640
+ /* ---- Voice feedback button ---- */
641
+
642
+ :where([data-blocfeed-ui-root]) .bf-voice-btn {
643
+ display: inline-flex;
644
+ align-items: center;
645
+ gap: 6px;
646
+ padding: 6px 12px;
647
+ border-radius: 6px;
648
+ border: 1px solid var(--bf-border);
649
+ background: transparent;
650
+ color: var(--bf-panel-fg);
651
+ font-size: 13px;
652
+ cursor: pointer;
653
+ transition: background 0.15s, border-color 0.15s;
654
+ }
655
+
656
+ :where([data-blocfeed-ui-root]) .bf-voice-btn:hover {
657
+ background: rgba(128,128,128,0.1);
658
+ }
659
+
660
+ :where([data-blocfeed-ui-root]) .bf-voice-btn:focus-visible {
661
+ outline: 2px solid var(--bf-accent);
662
+ outline-offset: 2px;
663
+ }
664
+
665
+ :where([data-blocfeed-ui-root]) .bf-voice-btn[disabled] {
666
+ opacity: 0.6;
667
+ cursor: not-allowed;
668
+ }
669
+
670
+ :where([data-blocfeed-ui-root]) .bf-voice-btn-active {
671
+ border-color: var(--bf-danger);
672
+ color: var(--bf-danger);
673
+ }
674
+
675
+ :where([data-blocfeed-ui-root]) .bf-mic-icon {
676
+ flex-shrink: 0;
677
+ }
678
+
640
679
  :where([data-blocfeed-ui-root]) .bf-recording-indicator {
641
680
  display: flex;
642
681
  align-items: center;
@@ -803,5 +842,5 @@ import {m as m$1,n,q,o,r,a,l,j,i,b}from'./chunk-KJRV7PRA.js';import {createConte
803
842
  animation: none;
804
843
  }
805
844
  }
806
- `;function Te(){if(!a()||document.getElementById(ke))return;let e=document.createElement("style");e.id=ke,e.textContent=kt,document.head.appendChild(e);}var Se={triggerLabel:"Feedback",panelTitle:"Feedback",hintText:"Click an element to attach your feedback. Press Esc to cancel.",cancelButton:"Cancel",rePickButton:"Re-pick",closeButton:"Close",textareaPlaceholder:"What's happening? What did you expect?",screenshotElement:"Screenshot element",screenshotFullPage:"Full page",capturingText:"Capturing screenshots\u2026",submittingText:"Submitting\u2026",successText:"Sent. Thank you!",toastText:"Feedback sent",sendButton:"Send",categoryBug:"Bug",categoryFeature:"Feature",categoryUx:"UX",categoryGeneral:"General",recordButton:"Record",stopRecordButton:"Stop",recordingText:"Recording\u2026",recordingDeniedText:"Screen share was denied",videoPreviewLabel:"Video attached",removeVideoButton:"Remove"};function Pe(e){return e?{...Se,...e}:Se}function te(){let e=useContext(V);if(!e)throw new Error("useBlocFeed must be used within a <BlocFeedProvider />");return {state:e.state,controller:e.controller,start:e.controller.start,stop:e.controller.stop,clearSelection:e.controller.clearSelection,submit:e.controller.submit,startRecording:e.controller.startRecording,stopRecording:e.controller.stopRecording,removeVideo:e.controller.removeVideo}}function v(e){switch(e){case "bottom-left":return "bf-trigger bf-trigger-bl";case "top-right":return "bf-trigger bf-trigger-tr";case "top-left":return "bf-trigger bf-trigger-tl";default:return "bf-trigger"}}function g({size:e=14}){return jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:jsx("path",{d:"M20 6L9 17l-5-5",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Ce({size:e=14}){return jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:jsx("path",{d:"M21 11.5a8.38 8.38 0 01-.9 3.8 8.5 8.5 0 01-7.6 4.7 8.38 8.38 0 01-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 01-.9-3.8 8.5 8.5 0 014.7-7.6 8.38 8.38 0 013.8-.9h.5a8.48 8.48 0 018 8v.5z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function Ee({size:e=16}){return jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[jsx("path",{d:"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),jsx("path",{d:"M22 6l-10 7L2 6",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}function Fe({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){return i?jsxs("button",{className:v(e),type:"button",onClick:t,"aria-label":o,children:[l?jsx("span",{style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})}):jsxs(Fragment,{children:[jsx("span",{className:"bf-dot","aria-hidden":"true"}),o]}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]}):null}function m(){let[e,t]=useState(()=>typeof window>"u"?false:window.matchMedia("(prefers-reduced-motion: reduce)").matches);return useEffect(()=>{let i=window.matchMedia("(prefers-reduced-motion: reduce)"),o=a=>t(a.matches);return i.addEventListener("change",o),()=>i.removeEventListener("change",o)},[]),e}var Ft={duration:.18,ease:"easeOut"},Nt={duration:0};function Re({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=m(),s=r?Nt:Ft;return jsx(AnimatePresence,{mode:"wait",children:i&&jsx(motion.button,{className:v(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.92},style:{overflow:"hidden"},children:l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsx(motion.span,{className:"bf-dot","aria-hidden":"true",animate:r?{}:{scale:n?1:[1,1.2,1],boxShadow:n?"0 0 0 4px rgba(99, 102, 241, 0.18)":["0 0 0 4px rgba(99, 102, 241, 0.18)","0 0 0 8px rgba(99, 102, 241, 0.28)","0 0 0 4px rgba(99, 102, 241, 0.18)"]},transition:n||r?s:{duration:2,repeat:1/0,ease:"easeInOut"}}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:r?0:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:r?0:-6},transition:s,style:{whiteSpace:"nowrap"},children:o},"label")}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]})},"dot")})}var Lt={duration:.18,ease:"easeOut"},ze={duration:0};function Ae({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=m(),s=r?ze:Lt;return jsx(AnimatePresence,{mode:"wait",children:i&&jsxs(motion.div,{className:v(e),initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{y:8,opacity:0},transition:s,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),style:{background:"transparent",border:"none",boxShadow:"none",padding:0},children:[jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.div,{initial:{opacity:0,y:r?0:4},animate:{opacity:1,y:0},exit:{opacity:0,y:r?0:4},transition:s,style:{position:"absolute",bottom:"calc(100% + 8px)",left:"50%",transform:"translateX(-50%)",padding:"6px 12px",borderRadius:"8px",background:"var(--bf-panel-bg)",border:"1px solid var(--bf-border)",boxShadow:"var(--bf-shadow)",whiteSpace:"nowrap",fontSize:"12px",color:"var(--bf-panel-fg)",pointerEvents:"none"},children:o},"tooltip")}),jsxs(motion.button,{type:"button",onClick:t,"aria-label":o,style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",width:"40px",height:"40px",borderRadius:"50%",border:"1px solid var(--bf-border)",background:"var(--bf-panel-bg)",color:"var(--bf-panel-fg)",boxShadow:"var(--bf-shadow)",cursor:"pointer",padding:0},animate:r?{}:{y:[0,-3,0]},transition:r?ze:{y:{duration:3,repeat:1/0,ease:"easeInOut"}},whileHover:{scale:1.1,borderColor:"var(--bf-accent)"},whileTap:{scale:.9},children:[l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:16})},"success"):jsx(Ce,{size:16}),a>0&&jsx("span",{className:"bf-badge bf-badge-float","aria-label":`${a} queued`,children:a})]})]},"bubble")})}var Wt={duration:.2,ease:"easeOut"},_t={duration:0};function We(e){return e==="bottom-left"||e==="top-left"}function Ht(e){return `bf-trigger-edge ${We(e)?"bf-trigger-edge-left":"bf-trigger-edge-right"}`}function _e({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=We(e),s=m(),h=s?_t:Wt;return jsx(AnimatePresence,{mode:"wait",children:i&&jsx(motion.button,{className:Ht(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{opacity:0,width:0},animate:{opacity:1,width:n?140:22,height:n?40:90},exit:{width:0,opacity:0},transition:h,whileTap:{scale:.97},style:{top:"50%",translateY:"-50%"},children:l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:h,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsxs(motion.span,{animate:{rotate:s||n?0:r?-90:90,opacity:n?1:.6},transition:h,style:{display:"flex",alignItems:"center",gap:"8px",whiteSpace:"nowrap",fontSize:"12px",letterSpacing:"0.5px",textTransform:"uppercase"},children:[n&&jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:{duration:.12},style:{width:"6px",height:"6px",borderRadius:"50%",background:"var(--bf-accent)",flexShrink:0}}),o]}),jsx(motion.span,{"aria-hidden":"true",animate:{opacity:n?1:0},transition:{duration:.12},style:{position:"absolute",top:0,bottom:0,[r?"left":"right"]:0,width:"2px",background:"var(--bf-accent)"}}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]})},"edge-tab")})}var $t={duration:.18,ease:"easeOut"},Kt={duration:0};function Oe({delay:e,hovered:t,reduced:i}){return i?null:jsx(motion.span,{"aria-hidden":"true",style:{position:"absolute",width:"10px",height:"10px",borderRadius:"50%",border:"2px solid var(--bf-accent)",pointerEvents:"none"},animate:t?{scale:1,opacity:0}:{scale:[1,1.8],opacity:[.5,0]},transition:t?{duration:.15}:{duration:2,repeat:1/0,delay:e,ease:"easeOut"}})}function $e({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=m(),s=r?Kt:$t;return jsx(AnimatePresence,{mode:"wait",children:i&&jsx(motion.button,{className:v(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.92},style:{overflow:"hidden"},children:l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsxs("span",{style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",width:"10px",height:"10px",flexShrink:0},children:[jsx(Oe,{delay:0,hovered:n,reduced:r}),jsx(Oe,{delay:.7,hovered:n,reduced:r}),jsx(motion.span,{className:"bf-dot","aria-hidden":"true",style:{position:"relative",zIndex:1}})]}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:r?0:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:r?0:-6},transition:s,style:{whiteSpace:"nowrap"},children:o},"label")}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]})},"pulse-ring")})}var Yt={duration:.18,ease:"easeOut"},Gt={duration:0};function jt(e){switch(e){case "bottom-left":return "bf-trigger-minimal bf-trigger-bl";case "top-right":return "bf-trigger-minimal bf-trigger-tr";case "top-left":return "bf-trigger-minimal bf-trigger-tl";default:return "bf-trigger-minimal"}}function Ue({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=m(),s=r?Gt:Yt;return jsx(AnimatePresence,{mode:"wait",children:i&&jsxs(motion.button,{className:jt(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{opacity:0,y:r?0:5},animate:{opacity:n?1:.65,y:0},exit:{opacity:0,y:r?0:5},transition:s,whileTap:{scale:.95},children:[l?jsx("span",{style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})}):jsxs(Fragment,{children:[jsx("span",{children:o}),a>0&&jsx("span",{className:"bf-badge",style:{marginLeft:"4px"},"aria-label":`${a} queued`,children:a})]}),!r&&jsx(motion.span,{"aria-hidden":"true",style:{position:"absolute",bottom:4,left:4,right:4,height:"2px",background:"var(--bf-accent)",borderRadius:"1px",transformOrigin:"left"},initial:false,animate:{scaleX:n?1:0},transition:s})]},"minimal")})}var Jt={duration:.18,ease:"easeOut"},Zt={duration:0};function Ye({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=m(),s=r?Zt:Jt;return jsx(AnimatePresence,{mode:"wait",children:i&&jsx(motion.button,{className:v(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.9},style:{overflow:"hidden"},children:l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsx(motion.span,{style:{display:"inline-flex",flexShrink:0},animate:r?{}:n?{scale:1.2,rotate:0}:{rotate:[-5,5,-5]},transition:n||r?s:{duration:3,repeat:1/0,ease:"easeInOut"},children:jsx(Ee,{size:16})}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:r?0:-8},animate:{opacity:1,x:0},exit:{opacity:0,x:r?0:-8},transition:s,style:{whiteSpace:"nowrap"},children:o},"label")}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]})},"icon-pop")})}var ro={duration:.18,ease:"easeOut"},ao={duration:0};function Qe({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),r=m(),s=r?ao:ro;return jsx(AnimatePresence,{mode:"wait",children:i&&jsx(motion.button,{className:v(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.92},style:{overflow:"hidden"},children:l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsxs("span",{style:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:"10px",height:"10px",flexShrink:0},children:[jsx(motion.span,{"aria-hidden":"true",style:{width:"10px",height:"10px",borderRadius:"50%",background:"var(--bf-accent)",position:"relative",zIndex:1},animate:r?{}:{opacity:n?1:[.5,1,.5],boxShadow:n?"0 0 8px 2px var(--bf-accent)":["0 0 4px 1px var(--bf-accent)","0 0 12px 4px var(--bf-accent)","0 0 4px 1px var(--bf-accent)"]},transition:n||r?s:{duration:2,repeat:1/0,ease:"easeInOut"}}),!n&&!r&&jsx(motion.span,{"aria-hidden":"true",style:{position:"absolute",width:"18px",height:"2px",background:"linear-gradient(90deg, var(--bf-accent), transparent)",transformOrigin:"left center",left:"5px",top:"4px"},animate:{rotate:[0,360]},transition:{duration:4,repeat:1/0,ease:"linear"}})]}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:r?0:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:r?0:-6},transition:s,style:{whiteSpace:"nowrap"},children:o},"label")}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]})},"beacon")})}var lo={duration:.18,ease:"easeOut"},po={duration:0};function et({position:e,onClick:t,isVisible:i,label:o,queueCount:a,showSuccess:l}){let[n,c]=useState(false),[r,s]=useState(0),h=m(),M=h?po:lo,f=useRef(null);useEffect(()=>{if(f.current&&(clearInterval(f.current),f.current=null),!i||n||h){s(n||h?o.length:0);return}let u=8,C=o.length*2+u*2,y=0;return f.current=setInterval(()=>{y=(y+1)%C,y<=o.length?s(y):y<=o.length+u?s(o.length):y<=o.length*2+u?s(o.length*2+u-y):s(0);},100),()=>{f.current&&(clearInterval(f.current),f.current=null);}},[i,n,h,o]);let S=o.slice(0,r);return jsx(AnimatePresence,{mode:"wait",children:i&&jsx(motion.button,{className:v(e),type:"button",onClick:t,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":o,initial:{opacity:0,y:h?0:5},animate:{opacity:1,y:0},exit:{opacity:0,y:h?0:5},transition:M,whileTap:{scale:.95},style:{minWidth:"44px"},children:l?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:M,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsx("span",{className:"bf-dot","aria-hidden":"true"}),jsxs("span",{style:{whiteSpace:"nowrap",minWidth:"1ch"},children:[S,jsx("span",{className:"bf-cursor","aria-hidden":"true"})]}),a>0&&jsx("span",{className:"bf-badge","aria-label":`${a} queued`,children:a})]})},"typewriter")})}function tt(e){switch(e){case "dot":return Re;case "bubble":return Ae;case "edge-tab":return _e;case "pulse-ring":return $e;case "minimal":return Ue;case "icon-pop":return Ye;case "beacon":return Qe;case "typewriter":return et;default:return Fe}}function rt(e,t,i){return Math.max(t,Math.min(i,e))}function mo(e,t,i="bottom-right"){let a=window.innerWidth,l=window.innerHeight,n;n=rt(e.x,12,Math.max(12,a-t-12));let c=e.y+e.height+12,r=Math.max(12,e.y-240);return {top:c+240<=l?c:r,left:n}}function ho(e){let{rect:t}=e,i={left:`${t.x}px`,top:`${t.y}px`,width:`${Math.max(0,t.width)}px`,height:`${Math.max(0,t.height)}px`};return jsx("div",{className:"bf-highlight",style:i,"aria-hidden":"true"})}function xo(e){let t=useRef(null);return useEffect(()=>{if(!e||!t.current)return;t.current.querySelector(".bf-textarea")?.focus();let o=a=>{if(a.key!=="Tab"||!t.current)return;let l=t.current.querySelectorAll('button:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])');if(l.length===0)return;let n=l[0],c=l[l.length-1];a.shiftKey&&document.activeElement===n?(a.preventDefault(),c.focus()):!a.shiftKey&&document.activeElement===c&&(a.preventDefault(),n.focus());};return document.addEventListener("keydown",o,{capture:true}),()=>document.removeEventListener("keydown",o,{capture:true})},[e]),t}function yo(e,t){return e?typeof e=="function"?e(t):e.some(i=>i.endsWith("*")?t.startsWith(i.slice(0,-1)):t===i):true}function vo(e){let[t,i]=useState(()=>typeof window<"u"?window.location.pathname:"/");return useEffect(()=>{if(typeof window>"u")return;let o=()=>i(window.location.pathname);window.addEventListener("popstate",o);let a=history.pushState,l=history.replaceState;return history.pushState=function(...n){a.apply(this,n),o();},history.replaceState=function(...n){l.apply(this,n),o();},()=>{window.removeEventListener("popstate",o),history.pushState=a,history.replaceState=l;}},[]),yo(e,t)}function wo(e){let[t,i]=useState(()=>!e||e==="dark"?"dark":e==="light"?"light":typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");return useEffect(()=>{if(e!=="auto"){i(e==="light"?"light":"dark");return}let o=window.matchMedia("(prefers-color-scheme: dark)"),a=l=>i(l.matches?"dark":"light");return i(o.matches?"dark":"light"),o.addEventListener("change",a),()=>o.removeEventListener("change",a)},[e]),t}var ko=["bug","feature","ux","general"],To={bug:"categoryBug",feature:"categoryFeature",ux:"categoryUx",general:"categoryGeneral"};function oe(e){let t=Math.floor(e/1e3),i=Math.floor(t/60),o=t%60;return `${i}:${String(o).padStart(2,"0")}`}function So(e){return e<1024*1024?`${Math.round(e/1024)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Po(e){let{state:t,controller:i$1,start:o,stop:a,clearSelection:l,submit:n}=te(),c=e.config.ui?.position,r$1=Pe(e.config.ui?.strings),s=e.config.ui?.branding!==false,[h,M]=useState(null),[f,S]=useState(""),[u,C]=useState(e.config.capture?.element??true),[y,ae]=useState(e.config.capture?.fullPage??false),[it,ie]=useState(null),[O,ne]=useState(void 0),se=e.config.ui?.categories??ko,nt=e.config.recording?.enabled===true&&j(),st=e.config.recording?.maxDurationMs??3e4,[ct,lt]=useState(false),[j$1,dt]=useState(0);useEffect(()=>{let d=window.setTimeout(()=>{let N=r();dt(N.findings.length);},500);return ()=>window.clearTimeout(d)},[]),useImperativeHandle(e.handleRef,()=>({open:o,close:a,submit:d=>n(d),startRecording:()=>i$1.startRecording(),stopRecording:()=>i$1.stopRecording(),get isOpen(){return t.phase!=="idle"}}),[o,a,n,i$1,t.phase]);let ce=t.phase==="review"||t.phase==="capturing"||t.phase==="submitting"||t.phase==="error"||t.phase==="success",pt=xo(ce),[ft,ut]=useState(0);useEffect(()=>{t.phase==="idle"&&ut(i());},[t.phase]);let[bt,le]=useState(false),de=useRef(t.phase);useEffect(()=>{if(de.current==="success"&&t.phase==="idle"){le(true);let d=window.setTimeout(()=>le(false),1500);return ()=>window.clearTimeout(d)}de.current=t.phase;},[t.phase]),useEffect(()=>{let d=e.config.ui?.shortcut;if(!d)return;let N=d.toLowerCase().split("+").map(P=>P.trim()),W=N[N.length-1]||"",z=new Set(N.slice(0,-1)),fe=P=>{let ht=/Mac|iPod|iPhone|iPad/.test(navigator.platform);if(z.has("mod")){if(ht?!P.metaKey:!P.ctrlKey)return}else if(z.has("ctrl")&&!P.ctrlKey||(z.has("meta")||z.has("cmd"))&&!P.metaKey)return;z.has("shift")&&!P.shiftKey||(z.has("alt")||z.has("option"))&&!P.altKey||P.key.toLowerCase()===W&&(P.preventDefault(),t.phase==="idle"?o():a());};return document.addEventListener("keydown",fe),()=>document.removeEventListener("keydown",fe)},[e.config.ui?.shortcut,t.phase,o,a]),useEffect(()=>i$1.subscribeHover(M),[i$1]),useEffect(()=>{let d=i$1.__unsafeGetSelectedElement();if(!d||t.phase==="idle"||t.phase==="picking"){ie(null);return}let N=()=>{ie(b(d.getBoundingClientRect()));};N();let W=()=>N();return window.addEventListener("scroll",W,{capture:true,passive:true}),window.addEventListener("resize",W,{passive:true}),()=>{window.removeEventListener("scroll",W,{capture:true}),window.removeEventListener("resize",W);}},[i$1,t.phase,t.selection?.selector]),useEffect(()=>{t.phase==="review"&&(S(""),C(e.config.capture?.element??true),ae(e.config.capture?.fullPage??false),ne(void 0));},[t.phase,t.selection?.selector,e.config.capture?.element,e.config.capture?.fullPage]),useEffect(()=>{if(t.phase!=="success")return;let d=window.setTimeout(()=>a(),1200);return ()=>window.clearTimeout(d)},[t.phase,a]);let k=t.phase==="capturing"||t.phase==="submitting",F=t.phase==="picking"?h?.rect??null:it??t.selection?.rect??null,Q=useMemo(()=>F?mo(F,360,c):null,[F?.x,F?.y,F?.width,F?.height,c]),pe=t.lastError?.message,q=useCallback(()=>{let d={capture:{element:u,fullPage:y}};O&&(d.category=O),n(f,d);},[n,f,u,y,O]),gt=useCallback(d=>{(d.metaKey||d.ctrlKey)&&d.key==="Enter"&&f.trim().length>0&&!k&&(d.preventDefault(),q());},[q,f,k]),mt=tt(e.config.ui?.triggerStyle);return jsxs(Fragment,{children:[jsx(mt,{position:c,onClick:()=>o(),isVisible:t.phase==="idle",label:e.config.ui?.triggerLabel??r$1.triggerLabel,queueCount:ft,showSuccess:bt}),t.phase!=="idle"&&t.phase!=="recording"&&jsxs("div",{className:"bf-overlay",role:"presentation",children:[t.phase!=="picking"&&jsx("div",{className:"bf-blocker",role:"presentation",onClick:()=>a()}),F&&jsx(ho,{rect:F}),t.phase==="picking"&&jsxs("div",{className:"bf-hint",role:"status","aria-live":"polite",children:[jsx("p",{id:"bf-hint-text",children:r$1.hintText}),jsx("button",{type:"button",className:"bf-btn",onClick:()=>a(),"aria-label":r$1.cancelButton,children:r$1.cancelButton})]}),ce&&Q&&jsxs("div",{ref:pt,className:"bf-panel",style:{left:Q.left,top:Q.top},role:"dialog","aria-modal":"true","aria-label":"Feedback form",children:[jsxs("div",{className:"bf-panelHeader",children:[jsx("div",{className:"bf-title",id:"bf-panel-title",children:r$1.panelTitle}),jsxs("div",{className:"bf-row",style:{justifyContent:"flex-end"},children:[jsx("button",{type:"button",className:"bf-btn",onClick:()=>l(),disabled:k,"aria-label":r$1.rePickButton,children:r$1.rePickButton}),jsx("button",{type:"button",className:"bf-btn",onClick:()=>a(),disabled:k,"aria-label":r$1.closeButton,children:r$1.closeButton})]})]}),jsxs("div",{className:"bf-panelBody",children:[jsx("textarea",{className:"bf-textarea",placeholder:r$1.textareaPlaceholder,value:f,onChange:d=>S(d.target.value),onKeyDown:gt,disabled:k,"aria-label":r$1.panelTitle}),se.length>0&&jsx("div",{className:"bf-pills",role:"group","aria-label":"Feedback category",children:se.map(d=>jsx("button",{type:"button",className:`bf-pill${O===d?" bf-pill-active":""}`,onClick:()=>ne(O===d?void 0:d),disabled:k,children:r$1[To[d]]},d))}),jsxs("div",{className:"bf-row",role:"group","aria-label":r$1.screenshotElement,children:[jsxs("label",{children:[jsx("input",{type:"checkbox",checked:u,onChange:d=>C(d.target.checked),disabled:k}),r$1.screenshotElement]}),jsxs("label",{children:[jsx("input",{type:"checkbox",checked:y,onChange:d=>ae(d.target.checked),disabled:k}),r$1.screenshotFullPage]})]}),nt&&t.phase==="review"&&!t.video&&jsxs("button",{type:"button",className:"bf-record-btn",onClick:()=>i$1.startRecording(),disabled:k,"aria-label":r$1.recordButton,children:[jsx("span",{className:"bf-rec-dot","aria-hidden":"true"}),r$1.recordButton]}),t.video&&t.phase==="review"&&jsxs("div",{className:"bf-video-preview",children:[jsx("video",{src:t.video.blobUrl,controls:true,muted:true,playsInline:true}),jsx("button",{type:"button",className:"bf-video-remove",onClick:()=>i$1.removeVideo(),"aria-label":r$1.removeVideoButton,children:"\xD7"}),jsxs("div",{className:"bf-video-meta",children:[r$1.videoPreviewLabel," (",oe(t.video.durationMs),", ",So(t.video.sizeBytes),")"]})]}),t.phase==="capturing"&&jsxs("div",{className:"bf-status",role:"status","aria-live":"polite",children:[jsx("span",{className:"bf-spinner","aria-hidden":"true"}),r$1.capturingText]}),t.phase==="submitting"&&jsxs("div",{className:"bf-status",role:"status","aria-live":"polite",children:[jsx("span",{className:"bf-spinner","aria-hidden":"true"}),r$1.submittingText]}),t.phase==="success"&&jsx("div",{className:"bf-status",role:"status","aria-live":"polite",children:r$1.successText}),t.phase==="error"&&pe&&jsx("div",{className:"bf-error",role:"alert",children:pe}),jsxs("div",{className:"bf-actions",children:[jsx("button",{type:"button",className:"bf-btn",onClick:()=>a(),disabled:k,"aria-label":r$1.cancelButton,children:r$1.cancelButton}),jsx("button",{type:"button",className:"bf-btn bf-btnPrimary",onClick:q,disabled:k||f.trim().length===0,"aria-label":r$1.sendButton,children:r$1.sendButton})]})]}),s&&jsx("div",{className:"bf-watermark",children:jsx("a",{href:"https://blocfeed.com",target:"_blank",rel:"noopener noreferrer",children:"Powered by BlocFeed"})})]})]}),t.phase==="recording"&&jsxs("div",{className:`bf-recording-bar bf-pos-${c}`,role:"status","aria-live":"polite","data-blocfeed-ui":"true",children:[jsx("span",{className:"bf-rec-dot bf-rec-dot-pulse","aria-hidden":"true"}),jsxs("span",{className:"bf-recording-bar-timer",children:[r$1.recordingText," ",oe(t.recordingElapsedMs??0)," / ",oe(st)]}),jsx("button",{type:"button",className:"bf-recording-bar-stop",onClick:()=>i$1.stopRecording(),"aria-label":r$1.stopRecordButton,children:r$1.stopRecordButton})]}),t.phase==="success"&&jsx("div",{className:"bf-toast",role:"status","aria-live":"polite",children:r$1.toastText}),j$1>0&&!ct&&jsxs("div",{className:"bf-security-banner",role:"alert",children:[jsx("button",{type:"button",className:"bf-security-banner-dismiss",onClick:()=>lt(true),"aria-label":"Dismiss",children:"\xD7"}),jsx("strong",{children:"Security Warning"}),j$1," potential secret",j$1>1?"s":""," exposed in client code. Check your environment variables."]})]})}var Co=forwardRef(function(t,i){let o$1={...t.config??{},blocfeed_id:t.blocfeed_id},[a,l]=useState(null),n$1=vo(o$1.ui?.showOn),c=wo(o$1.ui?.theme?.mode),r$1=!!o$1.diagnostics;useEffect(()=>{if(r$1)return m$1(o$1.diagnostics),()=>n()},[r$1]);let s=!!o$1.security;useEffect(()=>{s&&q(o$1.security);},[s]);let h=useRef(t.config?.metadata?.enrich);h.current=t.config?.metadata?.enrich;let M=useMemo(()=>{if(t.config)return {...t.config,metadata:{...t.config.metadata,enrich:async f=>{let S=h.current,u=S?await S(f):{},C=o(),y=r();return {...u,...C.consoleLogs.length>0?{_consoleLogs:C.consoleLogs}:{},...C.networkErrors.length>0?{_networkErrors:C.networkErrors}:{},...y.findings.length>0?{_securityFindings:y.findings}:{}}}}}},[]);return useEffect(()=>{Te();let f=document.createElement("div");f.setAttribute("data-blocfeed-ui-root","true"),f.setAttribute("data-blocfeed-ui","true"),f.setAttribute("data-bf-theme",c);let S=o$1.ui?.zIndex;typeof S=="number"&&f.style.setProperty("--bf-z",String(S));let u=o$1.ui?.theme;return u&&(u.accentColor&&f.style.setProperty("--bf-accent",u.accentColor),u.panelBackground&&f.style.setProperty("--bf-panel-bg",u.panelBackground),u.panelForeground&&f.style.setProperty("--bf-panel-fg",u.panelForeground),u.fontFamily&&f.style.setProperty("--bf-font",u.fontFamily)),document.body.appendChild(f),l(f),()=>{f.remove(),l(null);}},[o$1.ui?.zIndex,o$1.ui?.theme?.accentColor,o$1.ui?.theme?.panelBackground,o$1.ui?.theme?.panelForeground,o$1.ui?.theme?.fontFamily,c]),useEffect(()=>{a&&a.setAttribute("data-bf-theme",c);},[a,c]),!n$1||!a?null:createPortal(jsx(ee,{blocfeed_id:o$1.blocfeed_id,...M?{config:M}:{},children:jsx(Po,{config:o$1,handleRef:i})}),a)});
807
- export{ee as BlocFeedProvider,Co as BlocFeedWidget,te as useBlocFeed};
845
+ `;function Pe(){if(!a()||document.getElementById(Ce))return;let t=document.createElement("style");t.id=Ce,t.textContent=Bt,document.head.appendChild(t);}var Be={triggerLabel:"Feedback",panelTitle:"Feedback",hintText:"Click an element to attach your feedback. Press Esc to cancel.",cancelButton:"Cancel",rePickButton:"Re-pick",closeButton:"Close",textareaPlaceholder:"What's happening? What did you expect?",screenshotElement:"Screenshot element",screenshotFullPage:"Full page",capturingText:"Capturing screenshots\u2026",submittingText:"Submitting\u2026",successText:"Sent. Thank you!",toastText:"Feedback sent",sendButton:"Send",categoryBug:"Bug",categoryFeature:"Feature",categoryUx:"UX",categoryGeneral:"General",recordButton:"Record",stopRecordButton:"Stop",recordingText:"Recording\u2026",recordingDeniedText:"Screen share was denied",videoPreviewLabel:"Video attached",removeVideoButton:"Remove",voiceButton:"Voice",voiceStopButton:"Stop",voiceRecordingText:"Recording\u2026",voiceTranscribingText:"Transcribing\u2026",voiceDeniedText:"Microphone access was denied",voiceErrorText:"Voice transcription failed. Please type instead.",voiceEmptyText:"No speech detected. Try again or type instead."};function Ne(t){return t?{...Be,...t}:Be}function re(){let t=useContext(X);if(!t)throw new Error("useBlocFeed must be used within a <BlocFeedProvider />");return {state:t.state,controller:t.controller,start:t.controller.start,stop:t.controller.stop,clearSelection:t.controller.clearSelection,submit:t.controller.submit,startRecording:t.controller.startRecording,stopRecording:t.controller.stopRecording,removeVideo:t.controller.removeVideo}}function y(t){switch(t){case "bottom-left":return "bf-trigger bf-trigger-bl";case "top-right":return "bf-trigger bf-trigger-tr";case "top-left":return "bf-trigger bf-trigger-tl";default:return "bf-trigger"}}function g({size:t=14}){return jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:jsx("path",{d:"M20 6L9 17l-5-5",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Fe({size:t=14}){return jsx("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:jsx("path",{d:"M21 11.5a8.38 8.38 0 01-.9 3.8 8.5 8.5 0 01-7.6 4.7 8.38 8.38 0 01-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 01-.9-3.8 8.5 8.5 0 014.7-7.6 8.38 8.38 0 013.8-.9h.5a8.48 8.48 0 018 8v.5z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function Re({size:t=16}){return jsxs("svg",{width:t,height:t,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[jsx("path",{d:"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),jsx("path",{d:"M22 6l-10 7L2 6",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})}function ze({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){return a?jsxs("button",{className:y(t),type:"button",onClick:e,"aria-label":r,children:[p?jsx("span",{style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})}):jsxs(Fragment,{children:[jsx("span",{className:"bf-dot","aria-hidden":"true"}),r]}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]}):null}function m(){let[t,e]=useState(()=>typeof window>"u"?false:window.matchMedia("(prefers-reduced-motion: reduce)").matches);return useEffect(()=>{let a=window.matchMedia("(prefers-reduced-motion: reduce)"),r=i=>e(i.matches);return a.addEventListener("change",r),()=>a.removeEventListener("change",r)},[]),t}var At={duration:.18,ease:"easeOut"},It={duration:0};function Ae({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=m(),s=o?It:At;return jsx(AnimatePresence,{mode:"wait",children:a&&jsx(motion.button,{className:y(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.92},style:{overflow:"hidden"},children:p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsx(motion.span,{className:"bf-dot","aria-hidden":"true",animate:o?{}:{scale:n?1:[1,1.2,1],boxShadow:n?"0 0 0 4px rgba(99, 102, 241, 0.18)":["0 0 0 4px rgba(99, 102, 241, 0.18)","0 0 0 8px rgba(99, 102, 241, 0.28)","0 0 0 4px rgba(99, 102, 241, 0.18)"]},transition:n||o?s:{duration:2,repeat:1/0,ease:"easeInOut"}}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:o?0:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:o?0:-6},transition:s,style:{whiteSpace:"nowrap"},children:r},"label")}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]})},"dot")})}var Ot={duration:.18,ease:"easeOut"},We={duration:0};function He({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=m(),s=o?We:Ot;return jsx(AnimatePresence,{mode:"wait",children:a&&jsxs(motion.div,{className:y(t),initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{y:8,opacity:0},transition:s,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),style:{background:"transparent",border:"none",boxShadow:"none",padding:0},children:[jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.div,{initial:{opacity:0,y:o?0:4},animate:{opacity:1,y:0},exit:{opacity:0,y:o?0:4},transition:s,style:{position:"absolute",bottom:"calc(100% + 8px)",left:"50%",transform:"translateX(-50%)",padding:"6px 12px",borderRadius:"8px",background:"var(--bf-panel-bg)",border:"1px solid var(--bf-border)",boxShadow:"var(--bf-shadow)",whiteSpace:"nowrap",fontSize:"12px",color:"var(--bf-panel-fg)",pointerEvents:"none"},children:r},"tooltip")}),jsxs(motion.button,{type:"button",onClick:e,"aria-label":r,style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",width:"40px",height:"40px",borderRadius:"50%",border:"1px solid var(--bf-border)",background:"var(--bf-panel-bg)",color:"var(--bf-panel-fg)",boxShadow:"var(--bf-shadow)",cursor:"pointer",padding:0},animate:o?{}:{y:[0,-3,0]},transition:o?We:{y:{duration:3,repeat:1/0,ease:"easeInOut"}},whileHover:{scale:1.1,borderColor:"var(--bf-accent)"},whileTap:{scale:.9},children:[p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:16})},"success"):jsx(Fe,{size:16}),i>0&&jsx("span",{className:"bf-badge bf-badge-float","aria-label":`${i} queued`,children:i})]})]},"bubble")})}var $t={duration:.2,ease:"easeOut"},Kt={duration:0};function De(t){return t==="bottom-left"||t==="top-left"}function Ut(t){return `bf-trigger-edge ${De(t)?"bf-trigger-edge-left":"bf-trigger-edge-right"}`}function Ve({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=De(t),s=m(),h=s?Kt:$t;return jsx(AnimatePresence,{mode:"wait",children:a&&jsx(motion.button,{className:Ut(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{opacity:0,width:0},animate:{opacity:1,width:n?140:22,height:n?40:90},exit:{width:0,opacity:0},transition:h,whileTap:{scale:.97},style:{top:"50%",translateY:"-50%"},children:p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:h,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsxs(motion.span,{animate:{rotate:s||n?0:o?-90:90,opacity:n?1:.6},transition:h,style:{display:"flex",alignItems:"center",gap:"8px",whiteSpace:"nowrap",fontSize:"12px",letterSpacing:"0.5px",textTransform:"uppercase"},children:[n&&jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:{duration:.12},style:{width:"6px",height:"6px",borderRadius:"50%",background:"var(--bf-accent)",flexShrink:0}}),r]}),jsx(motion.span,{"aria-hidden":"true",animate:{opacity:n?1:0},transition:{duration:.12},style:{position:"absolute",top:0,bottom:0,[o?"left":"right"]:0,width:"2px",background:"var(--bf-accent)"}}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]})},"edge-tab")})}var Gt={duration:.18,ease:"easeOut"},jt={duration:0};function Ke({delay:t,hovered:e,reduced:a}){return a?null:jsx(motion.span,{"aria-hidden":"true",style:{position:"absolute",width:"10px",height:"10px",borderRadius:"50%",border:"2px solid var(--bf-accent)",pointerEvents:"none"},animate:e?{scale:1,opacity:0}:{scale:[1,1.8],opacity:[.5,0]},transition:e?{duration:.15}:{duration:2,repeat:1/0,delay:t,ease:"easeOut"}})}function Xe({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=m(),s=o?jt:Gt;return jsx(AnimatePresence,{mode:"wait",children:a&&jsx(motion.button,{className:y(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.92},style:{overflow:"hidden"},children:p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsxs("span",{style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center",width:"10px",height:"10px",flexShrink:0},children:[jsx(Ke,{delay:0,hovered:n,reduced:o}),jsx(Ke,{delay:.7,hovered:n,reduced:o}),jsx(motion.span,{className:"bf-dot","aria-hidden":"true",style:{position:"relative",zIndex:1}})]}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:o?0:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:o?0:-6},transition:s,style:{whiteSpace:"nowrap"},children:r},"label")}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]})},"pulse-ring")})}var Zt={duration:.18,ease:"easeOut"},eo={duration:0};function to(t){switch(t){case "bottom-left":return "bf-trigger-minimal bf-trigger-bl";case "top-right":return "bf-trigger-minimal bf-trigger-tr";case "top-left":return "bf-trigger-minimal bf-trigger-tl";default:return "bf-trigger-minimal"}}function je({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=m(),s=o?eo:Zt;return jsx(AnimatePresence,{mode:"wait",children:a&&jsxs(motion.button,{className:to(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{opacity:0,y:o?0:5},animate:{opacity:n?1:.65,y:0},exit:{opacity:0,y:o?0:5},transition:s,whileTap:{scale:.95},children:[p?jsx("span",{style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})}):jsxs(Fragment,{children:[jsx("span",{children:r}),i>0&&jsx("span",{className:"bf-badge",style:{marginLeft:"4px"},"aria-label":`${i} queued`,children:i})]}),!o&&jsx(motion.span,{"aria-hidden":"true",style:{position:"absolute",bottom:4,left:4,right:4,height:"2px",background:"var(--bf-accent)",borderRadius:"1px",transformOrigin:"left"},initial:false,animate:{scaleX:n?1:0},transition:s})]},"minimal")})}var io={duration:.18,ease:"easeOut"},ao={duration:0};function qe({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=m(),s=o?ao:io;return jsx(AnimatePresence,{mode:"wait",children:a&&jsx(motion.button,{className:y(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.9},style:{overflow:"hidden"},children:p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsx(motion.span,{style:{display:"inline-flex",flexShrink:0},animate:o?{}:n?{scale:1.2,rotate:0}:{rotate:[-5,5,-5]},transition:n||o?s:{duration:3,repeat:1/0,ease:"easeInOut"},children:jsx(Re,{size:16})}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:o?0:-8},animate:{opacity:1,x:0},exit:{opacity:0,x:o?0:-8},transition:s,style:{whiteSpace:"nowrap"},children:r},"label")}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]})},"icon-pop")})}var lo={duration:.18,ease:"easeOut"},po={duration:0};function et({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),o=m(),s=o?po:lo;return jsx(AnimatePresence,{mode:"wait",children:a&&jsx(motion.button,{className:y(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:s,whileTap:{scale:.92},style:{overflow:"hidden"},children:p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:s,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsxs("span",{style:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:"10px",height:"10px",flexShrink:0},children:[jsx(motion.span,{"aria-hidden":"true",style:{width:"10px",height:"10px",borderRadius:"50%",background:"var(--bf-accent)",position:"relative",zIndex:1},animate:o?{}:{opacity:n?1:[.5,1,.5],boxShadow:n?"0 0 8px 2px var(--bf-accent)":["0 0 4px 1px var(--bf-accent)","0 0 12px 4px var(--bf-accent)","0 0 4px 1px var(--bf-accent)"]},transition:n||o?s:{duration:2,repeat:1/0,ease:"easeInOut"}}),!n&&!o&&jsx(motion.span,{"aria-hidden":"true",style:{position:"absolute",width:"18px",height:"2px",background:"linear-gradient(90deg, var(--bf-accent), transparent)",transformOrigin:"left center",left:"5px",top:"4px"},animate:{rotate:[0,360]},transition:{duration:4,repeat:1/0,ease:"linear"}})]}),jsx(AnimatePresence,{mode:"wait",children:n&&jsx(motion.span,{initial:{opacity:0,x:o?0:-6},animate:{opacity:1,x:0},exit:{opacity:0,x:o?0:-6},transition:s,style:{whiteSpace:"nowrap"},children:r},"label")}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]})},"beacon")})}var mo={duration:.18,ease:"easeOut"},ho={duration:0};function it({position:t,onClick:e,isVisible:a,label:r,queueCount:i,showSuccess:p}){let[n,c]=useState(false),[o,s]=useState(0),h=m(),M=h?ho:mo,f=useRef(null);useEffect(()=>{if(f.current&&(clearInterval(f.current),f.current=null),!a||n||h){s(n||h?r.length:0);return}let b=8,P=r.length*2+b*2,v=0;return f.current=setInterval(()=>{v=(v+1)%P,v<=r.length?s(v):v<=r.length+b?s(r.length):v<=r.length*2+b?s(r.length*2+b-v):s(0);},100),()=>{f.current&&(clearInterval(f.current),f.current=null);}},[a,n,h,r]);let T=r.slice(0,o);return jsx(AnimatePresence,{mode:"wait",children:a&&jsx(motion.button,{className:y(t),type:"button",onClick:e,onMouseEnter:()=>c(true),onMouseLeave:()=>c(false),"aria-label":r,initial:{opacity:0,y:h?0:5},animate:{opacity:1,y:0},exit:{opacity:0,y:h?0:5},transition:M,whileTap:{scale:.95},style:{minWidth:"44px"},children:p?jsx(motion.span,{initial:{scale:0},animate:{scale:1},transition:M,style:{display:"inline-flex",color:"var(--bf-accent)"},children:jsx(g,{size:14})},"success"):jsxs(Fragment,{children:[jsx("span",{className:"bf-dot","aria-hidden":"true"}),jsxs("span",{style:{whiteSpace:"nowrap",minWidth:"1ch"},children:[T,jsx("span",{className:"bf-cursor","aria-hidden":"true"})]}),i>0&&jsx("span",{className:"bf-badge","aria-label":`${i} queued`,children:i})]})},"typewriter")})}function at(t){switch(t){case "dot":return Ae;case "bubble":return He;case "edge-tab":return Ve;case "pulse-ring":return Xe;case "minimal":return je;case "icon-pop":return qe;case "beacon":return et;case "typewriter":return it;default:return ze}}function nt(t,e,a){return Math.max(e,Math.min(a,t))}function ko(t,e,a="bottom-right"){let i=window.innerWidth,p=window.innerHeight,n;n=nt(t.x,12,Math.max(12,i-e-12));let c=t.y+t.height+12,o=Math.max(12,t.y-240);return {top:c+240<=p?c:o,left:n}}function To(t){let{rect:e}=t,a={left:`${e.x}px`,top:`${e.y}px`,width:`${Math.max(0,e.width)}px`,height:`${Math.max(0,e.height)}px`};return jsx("div",{className:"bf-highlight",style:a,"aria-hidden":"true"})}function So(t){let e=useRef(null);return useEffect(()=>{if(!t||!e.current)return;e.current.querySelector(".bf-textarea")?.focus();let r=i=>{if(i.key!=="Tab"||!e.current)return;let p=e.current.querySelectorAll('button:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])');if(p.length===0)return;let n=p[0],c=p[p.length-1];i.shiftKey&&document.activeElement===n?(i.preventDefault(),c.focus()):!i.shiftKey&&document.activeElement===c&&(i.preventDefault(),n.focus());};return document.addEventListener("keydown",r,{capture:true}),()=>document.removeEventListener("keydown",r,{capture:true})},[t]),e}function Eo(t,e){return t?typeof t=="function"?t(e):t.some(a=>a.endsWith("*")?e.startsWith(a.slice(0,-1)):e===a):true}function Co(t){let[e,a]=useState(()=>typeof window<"u"?window.location.pathname:"/");return useEffect(()=>{if(typeof window>"u")return;let r=()=>a(window.location.pathname);window.addEventListener("popstate",r);let i=history.pushState,p=history.replaceState;return history.pushState=function(...n){i.apply(this,n),r();},history.replaceState=function(...n){p.apply(this,n),r();},()=>{window.removeEventListener("popstate",r),history.pushState=i,history.replaceState=p;}},[]),Eo(t,e)}function Po(t){let[e,a]=useState(()=>!t||t==="dark"?"dark":t==="light"?"light":typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");return useEffect(()=>{if(t!=="auto"){a(t==="light"?"light":"dark");return}let r=window.matchMedia("(prefers-color-scheme: dark)"),i=p=>a(p.matches?"dark":"light");return a(r.matches?"dark":"light"),r.addEventListener("change",i),()=>r.removeEventListener("change",i)},[t]),e}var Bo=["bug","feature","ux","general"],No={bug:"categoryBug",feature:"categoryFeature",ux:"categoryUx",general:"categoryGeneral"};function U(t){let e=Math.floor(t/1e3),a=Math.floor(e/60),r=e%60;return `${a}:${String(r).padStart(2,"0")}`}function Fo(t){return t<1024*1024?`${Math.round(t/1024)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function Ro(t){let{state:e,controller:a,start:r,stop:i$1,clearSelection:p,submit:n$1}=re(),c=t.config.ui?.position,o=Ne(t.config.ui?.strings),s=t.config.ui?.branding!==false,[h,M]=useState(null),[f,T]=useState(""),[b$1,P]=useState(t.config.capture?.element??true),[v,O]=useState(t.config.capture?.fullPage??false),[ct,se]=useState(null),[D,ce]=useState(void 0),le=t.config.ui?.categories??Bo,lt=t.config.recording?.enabled===true&&l(),dt=t.config.recording?.maxDurationMs??3e4,pt=t.config.voice?.enabled===true&&n(),ft=t.config.voice?.maxDurationMs??6e4,[ut,bt]=useState(false),[q,gt]=useState(0);useEffect(()=>{let d=window.setTimeout(()=>{let S=w();gt(S.findings.length);},500);return ()=>window.clearTimeout(d)},[]),useImperativeHandle(t.handleRef,()=>({open:r,close:i$1,submit:d=>n$1(d),startRecording:()=>a.startRecording(),stopRecording:()=>a.stopRecording(),get isOpen(){return e.phase!=="idle"}}),[r,i$1,n$1,a,e.phase]);let de=e.phase==="review"||e.phase==="capturing"||e.phase==="submitting"||e.phase==="error"||e.phase==="success",mt=So(de),[ht,xt]=useState(0);useEffect(()=>{e.phase==="idle"&&xt(i());},[e.phase]);let[vt,pe]=useState(false),fe=useRef(e.phase);useEffect(()=>{if(fe.current==="success"&&e.phase==="idle"){pe(true);let d=window.setTimeout(()=>pe(false),1500);return ()=>window.clearTimeout(d)}fe.current=e.phase;},[e.phase]),useEffect(()=>{let d=t.config.ui?.shortcut;if(!d)return;let S=d.toLowerCase().split("+").map(C=>C.trim()),W=S[S.length-1]||"",z=new Set(S.slice(0,-1)),be=C=>{let Tt=/Mac|iPod|iPhone|iPad/.test(navigator.platform);if(z.has("mod")){if(Tt?!C.metaKey:!C.ctrlKey)return}else if(z.has("ctrl")&&!C.ctrlKey||(z.has("meta")||z.has("cmd"))&&!C.metaKey)return;z.has("shift")&&!C.shiftKey||(z.has("alt")||z.has("option"))&&!C.altKey||C.key.toLowerCase()===W&&(C.preventDefault(),e.phase==="idle"?r():i$1());};return document.addEventListener("keydown",be),()=>document.removeEventListener("keydown",be)},[t.config.ui?.shortcut,e.phase,r,i$1]),useEffect(()=>a.subscribeHover(M),[a]),useEffect(()=>{let d=a.__unsafeGetSelectedElement();if(!d||e.phase==="idle"||e.phase==="picking"){se(null);return}let S=()=>{se(b(d.getBoundingClientRect()));};S();let W=()=>S();return window.addEventListener("scroll",W,{capture:true,passive:true}),window.addEventListener("resize",W,{passive:true}),()=>{window.removeEventListener("scroll",W,{capture:true}),window.removeEventListener("resize",W);}},[a,e.phase,e.selection?.selector]),useEffect(()=>{e.phase==="review"&&(T(""),P(t.config.capture?.element??true),O(t.config.capture?.fullPage??false),ce(void 0));},[e.phase,e.selection?.selector,t.config.capture?.element,t.config.capture?.fullPage]),useEffect(()=>{if(e.phase!=="success")return;let d=window.setTimeout(()=>i$1(),1200);return ()=>window.clearTimeout(d)},[e.phase,i$1]);let k=e.phase==="capturing"||e.phase==="submitting",F=e.phase==="picking"?h?.rect??null:ct??e.selection?.rect??null,J=useMemo(()=>F?ko(F,360,c):null,[F?.x,F?.y,F?.width,F?.height,c]),ue=e.lastError?.message,Z=useCallback(()=>{let d={capture:{element:b$1,fullPage:v}};D&&(d.category=D),n$1(f,d);},[n$1,f,b$1,v,D]),yt=useCallback(d=>{(d.metaKey||d.ctrlKey)&&d.key==="Enter"&&f.trim().length>0&&!k&&(d.preventDefault(),Z());},[Z,f,k]),wt=useCallback(async()=>{if(e.voiceRecording){a.stopVoice();return}try{let d=await a.startVoice();d?.text&&T(S=>S?S+" "+d.text:d.text);}catch{}},[e.voiceRecording,a]),kt=at(t.config.ui?.triggerStyle);return jsxs(Fragment,{children:[jsx(kt,{position:c,onClick:()=>r(),isVisible:e.phase==="idle",label:t.config.ui?.triggerLabel??o.triggerLabel,queueCount:ht,showSuccess:vt}),e.phase!=="idle"&&e.phase!=="recording"&&jsxs("div",{className:"bf-overlay",role:"presentation",children:[e.phase!=="picking"&&jsx("div",{className:"bf-blocker",role:"presentation",onClick:()=>i$1()}),F&&jsx(To,{rect:F}),e.phase==="picking"&&jsxs("div",{className:"bf-hint",role:"status","aria-live":"polite",children:[jsx("p",{id:"bf-hint-text",children:o.hintText}),jsx("button",{type:"button",className:"bf-btn",onClick:()=>i$1(),"aria-label":o.cancelButton,children:o.cancelButton})]}),de&&J&&jsxs("div",{ref:mt,className:"bf-panel",style:{left:J.left,top:J.top},role:"dialog","aria-modal":"true","aria-label":"Feedback form",children:[jsxs("div",{className:"bf-panelHeader",children:[jsx("div",{className:"bf-title",id:"bf-panel-title",children:o.panelTitle}),jsxs("div",{className:"bf-row",style:{justifyContent:"flex-end"},children:[jsx("button",{type:"button",className:"bf-btn",onClick:()=>p(),disabled:k,"aria-label":o.rePickButton,children:o.rePickButton}),jsx("button",{type:"button",className:"bf-btn",onClick:()=>i$1(),disabled:k,"aria-label":o.closeButton,children:o.closeButton})]})]}),jsxs("div",{className:"bf-panelBody",children:[jsx("textarea",{className:"bf-textarea",placeholder:o.textareaPlaceholder,value:f,onChange:d=>T(d.target.value),onKeyDown:yt,disabled:k,"aria-label":o.panelTitle}),le.length>0&&jsx("div",{className:"bf-pills",role:"group","aria-label":"Feedback category",children:le.map(d=>jsx("button",{type:"button",className:`bf-pill${D===d?" bf-pill-active":""}`,onClick:()=>ce(D===d?void 0:d),disabled:k,children:o[No[d]]},d))}),jsxs("div",{className:"bf-row",role:"group","aria-label":o.screenshotElement,children:[jsxs("label",{children:[jsx("input",{type:"checkbox",checked:b$1,onChange:d=>P(d.target.checked),disabled:k}),o.screenshotElement]}),jsxs("label",{children:[jsx("input",{type:"checkbox",checked:v,onChange:d=>O(d.target.checked),disabled:k}),o.screenshotFullPage]})]}),pt&&e.phase==="review"&&!e.voiceTranscribing&&jsx("button",{type:"button",className:`bf-voice-btn${e.voiceRecording?" bf-voice-btn-active":""}`,onClick:wt,disabled:k,"aria-label":e.voiceRecording?o.voiceStopButton:o.voiceButton,children:e.voiceRecording?jsxs(Fragment,{children:[jsx("span",{className:"bf-rec-dot bf-rec-dot-pulse","aria-hidden":"true"}),o.voiceRecordingText," ",U(e.voiceElapsedMs??0)," / ",U(ft)," \u2014 ",o.voiceStopButton]}):jsxs(Fragment,{children:[jsxs("svg",{className:"bf-mic-icon",viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[jsx("rect",{x:"9",y:"1",width:"6",height:"11",rx:"3"}),jsx("path",{d:"M19 10v1a7 7 0 0 1-14 0v-1"}),jsx("line",{x1:"12",y1:"19",x2:"12",y2:"23"}),jsx("line",{x1:"8",y1:"23",x2:"16",y2:"23"})]}),o.voiceButton]})}),e.voiceTranscribing&&jsxs("div",{className:"bf-status",role:"status","aria-live":"polite",children:[jsx("span",{className:"bf-spinner","aria-hidden":"true"}),o.voiceTranscribingText]}),lt&&e.phase==="review"&&!e.video&&jsxs("button",{type:"button",className:"bf-record-btn",onClick:()=>a.startRecording(),disabled:k,"aria-label":o.recordButton,children:[jsx("span",{className:"bf-rec-dot","aria-hidden":"true"}),o.recordButton]}),e.video&&e.phase==="review"&&jsxs("div",{className:"bf-video-preview",children:[jsx("video",{src:e.video.blobUrl,controls:true,muted:true,playsInline:true}),jsx("button",{type:"button",className:"bf-video-remove",onClick:()=>a.removeVideo(),"aria-label":o.removeVideoButton,children:"\xD7"}),jsxs("div",{className:"bf-video-meta",children:[o.videoPreviewLabel," (",U(e.video.durationMs),", ",Fo(e.video.sizeBytes),")"]})]}),e.phase==="capturing"&&jsxs("div",{className:"bf-status",role:"status","aria-live":"polite",children:[jsx("span",{className:"bf-spinner","aria-hidden":"true"}),o.capturingText]}),e.phase==="submitting"&&jsxs("div",{className:"bf-status",role:"status","aria-live":"polite",children:[jsx("span",{className:"bf-spinner","aria-hidden":"true"}),o.submittingText]}),e.phase==="success"&&jsx("div",{className:"bf-status",role:"status","aria-live":"polite",children:o.successText}),e.phase==="error"&&ue&&jsx("div",{className:"bf-error",role:"alert",children:ue}),jsxs("div",{className:"bf-actions",children:[jsx("button",{type:"button",className:"bf-btn",onClick:()=>i$1(),disabled:k,"aria-label":o.cancelButton,children:o.cancelButton}),jsx("button",{type:"button",className:"bf-btn bf-btnPrimary",onClick:Z,disabled:k||f.trim().length===0,"aria-label":o.sendButton,children:o.sendButton})]})]}),s&&jsx("div",{className:"bf-watermark",children:jsx("a",{href:"https://blocfeed.com",target:"_blank",rel:"noopener noreferrer",children:"Powered by BlocFeed"})})]})]}),e.phase==="recording"&&jsxs("div",{className:`bf-recording-bar bf-pos-${c}`,role:"status","aria-live":"polite","data-blocfeed-ui":"true",children:[jsx("span",{className:"bf-rec-dot bf-rec-dot-pulse","aria-hidden":"true"}),jsxs("span",{className:"bf-recording-bar-timer",children:[o.recordingText," ",U(e.recordingElapsedMs??0)," / ",U(dt)]}),jsx("button",{type:"button",className:"bf-recording-bar-stop",onClick:()=>a.stopRecording(),"aria-label":o.stopRecordButton,children:o.stopRecordButton})]}),e.phase==="success"&&jsx("div",{className:"bf-toast",role:"status","aria-live":"polite",children:o.toastText}),q>0&&!ut&&jsxs("div",{className:"bf-security-banner",role:"alert",children:[jsx("button",{type:"button",className:"bf-security-banner-dismiss",onClick:()=>bt(true),"aria-label":"Dismiss",children:"\xD7"}),jsx("strong",{children:"Security Warning"}),q," potential secret",q>1?"s":""," exposed in client code. Check your environment variables."]})]})}var Mo=forwardRef(function(e,a){let r$1={...e.config??{},blocfeed_id:e.blocfeed_id},[i,p]=useState(null),n=Co(r$1.ui?.showOn),c=Po(r$1.ui?.theme?.mode),o=!!r$1.diagnostics;useEffect(()=>{if(o)return r(r$1.diagnostics),()=>s()},[o]);let s$1=!!r$1.security;useEffect(()=>{s$1&&v(r$1.security);},[s$1]);let h=useRef(e.config?.metadata?.enrich);h.current=e.config?.metadata?.enrich;let M=useMemo(()=>{if(e.config)return {...e.config,metadata:{...e.config.metadata,enrich:async f=>{let T=h.current,b=T?await T(f):{},P=t(),v=w(),O=j();return {...b,...P.consoleLogs.length>0?{_consoleLogs:P.consoleLogs}:{},...P.networkErrors.length>0?{_networkErrors:P.networkErrors}:{},...v.findings.length>0?{_securityFindings:v.findings}:{},...O.length>0?{_clickEvents:O}:{}}}}}},[]);return useEffect(()=>{Pe();let f=document.createElement("div");f.setAttribute("data-blocfeed-ui-root","true"),f.setAttribute("data-blocfeed-ui","true"),f.setAttribute("data-bf-theme",c);let T=r$1.ui?.zIndex;typeof T=="number"&&f.style.setProperty("--bf-z",String(T));let b=r$1.ui?.theme;return b&&(b.accentColor&&f.style.setProperty("--bf-accent",b.accentColor),b.panelBackground&&f.style.setProperty("--bf-panel-bg",b.panelBackground),b.panelForeground&&f.style.setProperty("--bf-panel-fg",b.panelForeground),b.fontFamily&&f.style.setProperty("--bf-font",b.fontFamily)),document.body.appendChild(f),p(f),()=>{f.remove(),p(null);}},[r$1.ui?.zIndex,r$1.ui?.theme?.accentColor,r$1.ui?.theme?.panelBackground,r$1.ui?.theme?.panelForeground,r$1.ui?.theme?.fontFamily,c]),useEffect(()=>{i&&i.setAttribute("data-bf-theme",c);},[i,c]),!n||!i?null:createPortal(jsx(oe,{blocfeed_id:r$1.blocfeed_id,...M?{config:M}:{},children:jsx(Ro,{config:r$1,handleRef:a})}),i)});
846
+ export{oe as BlocFeedProvider,Mo as BlocFeedWidget,re as useBlocFeed};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "blocfeed",
3
- "version": "0.8.1",
4
- "description": "Drop-in feedback widget for React — element picking, screenshots, and video recording.",
3
+ "version": "0.10.0",
4
+ "description": "Drop-in feedback widget for React — element picking, screenshots, video recording, and voice feedback.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "sideEffects": false,
@@ -15,7 +15,10 @@
15
15
  "screen-capture",
16
16
  "bug-report",
17
17
  "product-feedback",
18
- "element-picker"
18
+ "element-picker",
19
+ "voice-feedback",
20
+ "speech-to-text",
21
+ "transcription"
19
22
  ],
20
23
  "publishConfig": {
21
24
  "access": "public"
@@ -1,2 +0,0 @@
1
- function E(){return typeof window<"u"&&typeof document<"u"}function he(e){let t=globalThis.CSS;return typeof t?.escape=="function"?t.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,n=>{let r=n.codePointAt(0);return r===void 0?"":`\\${r.toString(16)} `})}function te(e){return {x:e.x,y:e.y,width:e.width,height:e.height}}function $e(e){return {x:e.x+window.scrollX,y:e.y+window.scrollY,width:e.width,height:e.height}}function je(e){return e.replace(/\s+/g," ").trim()}function Ve(e,t=140){let n=e.textContent;if(!n)return;let r=je(n);if(r)return r.length<=t?r:`${r.slice(0,t-1)}\u2026`}function Xe(e){let t=1;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)n.tagName===e.tagName&&(t+=1);return t}var Ee=["data-testid","data-test-id","data-test","data-qa","data-cy"],we="data-blocfeed-component";function Ze(e){let t=e.closest(`[${we}]`);if(!t)return;let r=t.getAttribute(we)?.trim();return r||void 0}function We(e){for(let t of Ee){let n=e.closest(`[${t}]`);if(!n)continue;let o=n.getAttribute(t)?.trim();if(o)return o}}function be(e){try{let t=e,n=Object.getOwnPropertyNames(t);for(let r of n)if(r.startsWith("__reactFiber$")||r.startsWith("__reactInternalInstance$")){let o=t[r];if(o&&typeof o=="object")return o}}catch{}return null}function B(e){if(e.length<=1||e.length===2&&e[0]===e[0].toLowerCase())return true;let t=e[0];return t>="a"&&t<="z"}function q(e){if(e){for(let t of e)if(typeof t.name=="string"&&t.name&&!B(t.name))return t.name}}function A(e){if(e&&typeof e!="string"){if(typeof e=="function"){let t=e;return typeof t.displayName=="string"&&t.displayName?t.displayName:typeof t.name=="string"&&t.name?t.name:void 0}if(typeof e=="object"){let t=e,n=t.displayName;if(typeof n=="string"&&n)return n;let r=t.render;if(typeof r=="function"){let i=r;if(typeof i.displayName=="string"&&i.displayName)return i.displayName;if(typeof i.name=="string"&&i.name)return i.name}let o=t.type;return A(o)}}}function Ke(e){let t=be(e);if(!t)return;let n=q(t._debugInfo);if(n)return n;let r=t._debugOwner!==void 0;if(r){let s=t._debugOwner;for(let c=0;s&&c<50;c+=1){let h=q(s._debugInfo);if(h)return h;let p=A(s.type)??A(s.elementType);if(p&&!B(p))return p;s=s._debugOwner;}}if(t._owner!==void 0&&t._owner!==t._debugOwner){let s=t._owner;for(let c=0;s&&c<50;c+=1){let h=q(s._debugInfo);if(h)return h;let p=A(s.type)??A(s.elementType);if(p&&!B(p))return p;s=s._owner;}}let i=t,l=r?80:25;for(let s=0;i&&s<l;s+=1){let c=q(i._debugInfo);if(c)return c;let h=A(i.type)??A(i.elementType);if(h&&!B(h))return h;i=i.return;}let a=e.parentElement;for(let s=0;a&&s<15;s+=1){let c=be(a);if(c){let h=q(c._debugInfo);if(h)return h;let p=A(c.type)??A(c.elementType);if(p&&!B(p))return p;if(c._debugOwner){let m=A(c._debugOwner.type)??A(c._debugOwner.elementType);if(m&&!B(m))return m}if(c._owner&&c._owner!==c._debugOwner){let m=A(c._owner.type)??A(c._owner.elementType);if(m&&!B(m))return m}}a=a.parentElement;}}function Qe(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("id");if(n)return `#${he(n)}`;for(let r of Ee){let o=e.getAttribute(r);if(o)return `${t}[${r}="${he(o)}"]`}return `${t}:nth-of-type(${Xe(e)})`}function Ye(e,t=10){let n=[],r=e;for(;r&&n.length<t;){let o=Qe(r);if(n.unshift(o),o.startsWith("#"))break;r=r.parentElement;}return n.join(" > ")}function ye(e,t){if(!t||t.length===0)return false;for(let n of t)if(e.closest(n))return true;return false}function ne(e,t){if(!e||ye(e,t.ignoreSelectors))return null;let n=e;for(;n;){if(ye(n,t.ignoreSelectors))return null;if(t.isSelectable?.(n)??Ge(n))return n;n=n.parentElement;}return null}function Ge(e){let t=e.tagName;return !(t==="HTML"||t==="BODY")}function Se(e){let t=e.getBoundingClientRect(),n={selector:Ye(e),tagName:e.tagName.toLowerCase(),rect:te(t),pageRect:$e(t)},r=e.getAttribute("id");r&&(n.id=r);let o=e.className;typeof o=="string"&&o.trim()&&(n.className=o);let i=Ve(e);i&&(n.textSnippet=i);let l=Ze(e)??Ke(e);l&&(n.componentName=l);let a=We(e);return a&&(n.testId=a),n}var re=null;async function ke(){return re||(re=import('html-to-image')),re}async function Je(e){return await new Promise((t,n)=>{let r=new Image;r.onload=()=>t({width:r.naturalWidth,height:r.naturalHeight}),r.onerror=()=>n(new Error("Failed to load generated screenshot")),r.src=e;})}async function _e(e,t){let{width:n,height:r}=await Je(e);return {dataUrl:e,mime:t,width:n,height:r}}function O(e){if(e?.aborted)throw new Error("Aborted")}function ve(){return {async captureElement(e,t){if(!E())throw new Error("captureElement can only run in the browser");O(t.signal);let n=await ke();O(t.signal);let r=t.mime==="image/jpeg"?await n.toJpeg(e,{quality:t.quality??.92,pixelRatio:t.pixelRatio}):await n.toPng(e,{pixelRatio:t.pixelRatio});return O(t.signal),await _e(r,t.mime)},async captureFullPage(e){if(!E())throw new Error("captureFullPage can only run in the browser");O(e.signal);let t=document.documentElement,n=Math.max(t.scrollWidth,t.clientWidth),r=Math.max(t.scrollHeight,t.clientHeight),o=Math.min(1,e.maxDimension/Math.max(n,r)),i=Math.max(1,Math.round(n*o)),l=Math.max(1,Math.round(r*o)),a=await ke();O(e.signal);let s=e.mime==="image/jpeg"?await a.toJpeg(t,{width:i,height:l,quality:e.quality??.92,pixelRatio:e.pixelRatio}):await a.toPng(t,{width:i,height:l,pixelRatio:e.pixelRatio});return O(e.signal),await _e(s,e.mime)}}}function et(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return "Unknown error"}}function w(e,t,n){let r={kind:e,message:et(t)};return n&&(r.detail=n),r}var tt=12e3,nt=2048,rt=.92;function Re(){return Date.now()}function ot(e){return new Promise((t,n)=>{let r=()=>n(new Error("Aborted"));if(e.aborted){r();return}e.addEventListener("abort",r,{once:true});})}async function Ae(e,t,n){let r=new Promise((i,l)=>{let a=setTimeout(()=>l(new Error("Timeout")),t);typeof a.unref=="function"&&a.unref();}),o=[e,r];return n&&o.push(ot(n)),await Promise.race(o)}function it(e){if(!E())return 1;let t=window.devicePixelRatio||1,n=e?.pixelRatio??Math.min(t,2);return Math.max(.1,n)}function at(e){return !!(e?.element||e?.fullPage)}function Te(e){let t={mime:e.mime,pixelRatio:e.pixelRatio,maxDimension:e.maxDimension};return e.includeQuality&&(t.quality=e.quality),e.signal&&(t.signal=e.signal),t}async function Pe(e){let{selectionElement:t,capture:n,signal:r}=e;if(!E()||!at(n))return;let o=Re(),i=[],l=n?.timeoutMs??tt,a=n?.maxDimension??nt,s=n?.mime??"image/png",c=n?.quality??rt,h=n?.adapter??ve(),p={},m=it(n);if(n?.element&&t)try{let f=t.getBoundingClientRect(),g=Math.min(1,a/Math.max(f.width,f.height)),k=Math.min(m,m*g),v=await Ae(Promise.resolve(h.captureElement(t,{...Te({mime:s,quality:c,pixelRatio:k,maxDimension:a,includeQuality:s==="image/jpeg",...r?{signal:r}:{}})})),l,r);p.element=v;}catch(f){if(r?.aborted)throw f;i.push(w("capture_failed",f,{target:"element"}));}if(n?.fullPage)try{let f=await Ae(Promise.resolve(h.captureFullPage(Te({mime:s,quality:c,pixelRatio:m,maxDimension:a,includeQuality:s==="image/jpeg",...r?{signal:r}:{}}))),l,r);p.fullPage=f;}catch(f){if(r?.aborted)throw f;i.push(w("capture_failed",f,{target:"fullPage"}));}let b=Re(),u={startedAt:o,finishedAt:b,durationMs:Math.max(0,b-o)};return i.length>0&&(u.errors=i),{...p,diagnostics:u}}function st(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function ct(){return E()?{url:window.location.href,title:document.title,referrer:document.referrer||void 0,userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,viewport:{width:window.innerWidth,height:window.innerHeight},screen:{width:window.screen.width,height:window.screen.height},scroll:{x:window.scrollX,y:window.scrollY},devicePixelRatio:window.devicePixelRatio||1,timezone:st()}:{}}function lt(e){if(!e)return {};let t={};return e.id&&(t.userId=e.id),e.email&&(t.userEmail=e.email),e.name&&(t.userName=e.name),t}async function xe(e){let{config:t,context:n,user:r}=e;if(t?.enabled===false)return {};let o={...ct(),...lt(r)},i=t?.enrich;if(!i)return o;try{let l=await i(n);return {...o,...l}}catch(l){let a=w("unknown",l);return {...o,blocfeedMetadataError:a.message}}}var oe="blocfeed-queue",ut=50;function ie(){if(!E())return [];try{let e=localStorage.getItem(oe);if(!e)return [];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return []}}function ae(e){if(E())try{e.length===0?localStorage.removeItem(oe):localStorage.setItem(oe,JSON.stringify(e));}catch{}}function dt(e){let t={...e};if(t.screenshots){let n={...t.screenshots};n.element&&(n.element={...n.element,dataUrl:""}),n.fullPage&&(n.fullPage={...n.fullPage,dataUrl:""}),t.screenshots=n;}return delete t.video,t}function se(e){let t=ie(),n=dt(e);for(n.metadata={...n.metadata,_queued:true},t.push({payload:n,timestamp:Date.now()});t.length>ut;)t.shift();ae(t);}function Fe(){let e=ie();return e.length===0?[]:(ae([]),e.map(t=>t.payload))}function Jt(){ae([]);}function en(){return ie().length}var ft=3e4,mt=25e5,Ce="video/webm",pt=250,gt=1e3,ht=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function Me(){if(typeof MediaRecorder>"u")return null;for(let e of ht)if(MediaRecorder.isTypeSupported(e))return e;return null}function wt(){return !E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function"?false:Me()!==null}async function ce(e){let{config:t,signal:n}=e;if(!E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function")throw w("recording_failed",new Error("Screen recording is not supported in this browser"));let r=Me();if(!r)throw w("recording_failed",new Error("No supported video codec found (WebM required)"));if(n?.aborted)throw w("aborted",new Error("Recording aborted before start"));let o;try{o=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1});}catch(g){let k=g instanceof DOMException&&g.name==="NotAllowedError"?"Screen share permission denied":"Failed to start screen share";throw w("recording_failed",new Error(k))}if(n?.aborted)throw o.getTracks().forEach(g=>g.stop()),w("aborted",new Error("Recording aborted after permission"));let i=t?.maxDurationMs??ft,l=t?.videoBitsPerSecond??mt,a=new MediaRecorder(o,{mimeType:r,videoBitsPerSecond:l}),s=[],c=[],h=0,p=null,m=null,b=false,u=()=>{p!==null&&(clearInterval(p),p=null),m!==null&&(clearTimeout(m),m=null),o.getTracks().forEach(g=>g.stop());},f=new Promise((g,k)=>{a.ondataavailable=y=>{y.data.size>0&&s.push(y.data);},a.onstop=()=>{if(b)return;b=true,u();let y=Date.now()-h,P=new Blob(s,{type:Ce}),M=URL.createObjectURL(P);g({mime:Ce,blobUrl:M,blob:P,durationMs:y,sizeBytes:P.size});},a.onerror=()=>{b||(b=true,u(),k(w("recording_failed",new Error("MediaRecorder error"))));};let v=o.getVideoTracks()[0];if(v&&v.addEventListener("ended",()=>{a.state!=="inactive"&&a.stop();}),n){let y=()=>{b||(b=true,a.state!=="inactive"&&a.stop(),u(),k(w("aborted",new Error("Recording aborted"))));};n.addEventListener("abort",y,{once:true});}});return a.start(gt),h=Date.now(),p=setInterval(()=>{let g=Date.now()-h;for(let k of c)k(g);},pt),m=setTimeout(()=>{!b&&a.state!=="inactive"&&a.stop();},i),{result:f,stop(){!b&&a.state!=="inactive"&&a.stop();},onTick(g){c.push(g);},abort(){b||(b=true,a.state!=="inactive"&&a.stop(),u());}}}function le(e){let t=null,n=null,r=(...o)=>{n=o,t===null&&(t=requestAnimationFrame(()=>{if(t=null,!n)return;let i=n;n=null,e(...i);}));};return r.cancel=()=>{t!==null&&cancelAnimationFrame(t),t=null,n=null;},r}function K(e){return e instanceof Element?!!e.closest("[data-blocfeed-ui]"):false}function Q(e){e.stopPropagation(),e.stopImmediatePropagation?.();}function Le(e,t){if(!E())throw new Error("BlocFeed picker can only run in a browser environment.");let n=e.ignoreSelectors,r=e.isSelectable,o={};n&&n.length>0&&(o.ignoreSelectors=n),r&&(o.isSelectable=r);let i=null,l=null,a=(u,f=false)=>{if(!u){i=null,l=null,t.onHover(null);return}let g=te(u.getBoundingClientRect()),k=`${Math.round(g.x)}:${Math.round(g.y)}:${Math.round(g.width)}:${Math.round(g.height)}`;!f&&u===i&&k===l||(i=u,l=k,t.onHover({element:u,rect:g}));},s=le(u=>{if(K(u.target))return;let f=document.elementFromPoint(u.clientX,u.clientY),g=ne(f,o);a(g);}),c=le(()=>{i&&a(i,true);}),h=u=>{K(u.target)||(Q(u),u.pointerType==="mouse"&&u.preventDefault());},p=u=>{K(u.target)||(Q(u),u.pointerType==="mouse"&&u.preventDefault());},m=u=>{if(K(u.target))return;Q(u),u.preventDefault();let f=document.elementFromPoint(u.clientX,u.clientY),g=ne(f,o);g&&t.onSelect({element:g,descriptor:Se(g)});},b=u=>{u.key==="Escape"&&(Q(u),u.preventDefault(),t.onCancel());};return window.addEventListener("pointermove",s,{capture:true,passive:true}),window.addEventListener("pointerdown",h,{capture:true}),window.addEventListener("pointerup",p,{capture:true}),window.addEventListener("click",m,{capture:true}),window.addEventListener("keydown",b,{capture:true}),window.addEventListener("scroll",c,{capture:true,passive:true}),window.addEventListener("resize",c,{passive:true}),{stop(){window.removeEventListener("pointermove",s,{capture:true}),window.removeEventListener("pointerdown",h,{capture:true}),window.removeEventListener("pointerup",p,{capture:true}),window.removeEventListener("click",m,{capture:true}),window.removeEventListener("keydown",b,{capture:true}),window.removeEventListener("scroll",c,{capture:true}),window.removeEventListener("resize",c),s.cancel(),c.cancel(),t.onHover(null);}}}var bt=12e3,yt=2,Et=500,St=2e3,ue="https://blocfeed.com/api/feedback",De=0;function Be(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new Error("Aborted"));return}let o=setTimeout(n,e),i=()=>{clearTimeout(o),r(new Error("Aborted"));};t?.addEventListener("abort",i,{once:true});})}function kt(e){return e>=500&&e<=599}function _t(e){let[t,n]=e.split(",",2);if(!t||!n)throw new Error("Invalid data URL");let o=/data:(.*?);base64/.exec(t)?.[1]||"application/octet-stream",i=atob(n),l=new Uint8Array(i.length);for(let a=0;a<i.length;a+=1)l[a]=i.charCodeAt(a);return new Blob([l],{type:o})}function vt(e){let t={},n={},r={...e};if(r.screenshots){let o={},i={...r.screenshots};i.element&&(t.element=i.element.dataUrl,o.element={mime:i.element.mime,width:i.element.width,height:i.element.height},i.element={...i.element,dataUrl:""}),i.fullPage&&(t.fullPage=i.fullPage.dataUrl,o.fullPage={mime:i.fullPage.mime,width:i.fullPage.width,height:i.fullPage.height},i.fullPage={...i.fullPage,dataUrl:""}),r.screenshots=i,(o.element||o.fullPage)&&(r.screenshot_intent=o);}return r.video&&(n.blob=r.video.blob,r.video_intent={mime:r.video.mime,durationMs:r.video.durationMs,sizeBytes:r.video.sizeBytes},delete r.video),{lean:r,extracted:t,extractedVideo:n}}async function Ie(e,t,n){let r=_t(t);await fetch(e,{method:"PUT",body:r,headers:{"content-type":r.type},...n?{signal:n}:{}});}async function Rt(e){let{feedbackId:t,extracted:n,screenshots:r,signal:o}=e,i={};n.element&&r?.element&&(i.element={dataUrl:n.element,mime:r.element.mime,width:r.element.width,height:r.element.height}),n.fullPage&&r?.fullPage&&(i.fullPage={dataUrl:n.fullPage,mime:r.fullPage.mime,width:r.fullPage.width,height:r.fullPage.height}),Object.keys(i).length!==0&&await fetch(`${ue}/${t}/screenshots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i),...o?{signal:o}:{}});}async function At(e){await fetch(`${ue}/${e.feedbackId}/video`,{method:"POST",body:e.blob,headers:{"content-type":e.blob.type},...e.signal?{signal:e.signal}:{}});}async function Ne(e){let{signal:t,transport:n}=e;if(Date.now()-De<St)return {ok:false,error:w("configuration",new Error("Please wait before submitting again"))};let o=n?.timeoutMs??bt,i=n?.maxAttempts??yt,l=n?.backoffMs??Et,a=!!(e.payload.screenshots?.element?.dataUrl||e.payload.screenshots?.fullPage?.dataUrl),s=!!e.payload.video?.blob,c=a||s,{lean:h,extracted:p,extractedVideo:m}=c?vt(e.payload):{lean:e.payload,extracted:{},extractedVideo:{}},b={...p,...e.screenshotDataUrls};for(let u=1;u<=i;u+=1){let f=new AbortController,g=setTimeout(()=>f.abort(),o),k=()=>f.abort();t&&t.addEventListener("abort",k,{once:true});try{let v=await fetch(ue,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(h),signal:f.signal});if(v.ok){De=Date.now();let y;try{y=await v.json();}catch{}if((b.element||b.fullPage)&&y){let d=y.upload_urls;if(d){let S=[];b.element&&d.element&&S.push(Ie(d.element,b.element,t)),b.fullPage&&d.fullPage&&S.push(Ie(d.fullPage,b.fullPage,t));try{await Promise.all(S);}catch{}}else if(y.feedback_id)try{await Rt({feedbackId:y.feedback_id,extracted:b,screenshots:e.payload.screenshots,...t?{signal:t}:{}});}catch{}}if(m.blob&&y){let d=y.upload_urls;if(d?.video)try{await fetch(d.video,{method:"PUT",body:m.blob,headers:{"content-type":m.blob.type},...t?{signal:t}:{}});}catch{}else if(y.feedback_id)try{await At({feedbackId:y.feedback_id,blob:m.blob,...t?{signal:t}:{}});}catch{}}let M={ok:!0,status:v.status};return y&&(M.apiResponse=y),M}if(u<i&&kt(v.status)){let y=.85+Math.random()*.3,P=Math.round(l*2**(u-1)*y);await Be(P,t);continue}return {ok:!1,status:v.status,error:w("api_failed",new Error(`HTTP ${v.status}`))}}catch(v){if(f.signal.aborted||t?.aborted)return {ok:false,error:w("aborted",v)};if(u<i){let y=.85+Math.random()*.3,P=Math.round(l*2**(u-1)*y);await Be(P,t);continue}return {ok:false,error:w("api_failed",v)}}finally{clearTimeout(g),t&&t.removeEventListener("abort",k);}}return {ok:false,error:w("api_failed",new Error("Failed"))}}async function de(e){let{signal:t,transport:n}=e,r={ok:false};try{let o={payload:e.payload,...t?{signal:t}:{},...n?{transport:n}:{}};r.api=await Ne(o),r.ok=!!r.api?.ok;}catch(o){r.api={ok:false,error:w("api_failed",o)},r.ok=false;}return {payload:e.payload,result:r}}var Tt=["[data-blocfeed-ui]","[data-blocfeed-ignore]"];function Pt(e){let t=[...Tt,...e?.ignoreSelectors??[]],n=Array.from(new Set(t));return {...e,ignoreSelectors:n}}function Oe(){return {phase:"idle"}}function xt(e){if(e.ok)return false;let t=e.api;return t?t.status&&t.status>=400&&t.status<500||t.error?.kind==="aborted"||t.error?.kind==="configuration"?false:!t.ok:true}function Rn(e){let t=e,n=Oe(),r=new Set,o=new Set,i=null,l=null,a=null,s=null,c=0,h=null,p=null,m=null,b=()=>{for(let d of r)d(n);},u=d=>{for(let S of o)S(d);},f=d=>{n=d,b();},g=()=>{c+=1,s?.abort(),s=null;},k=()=>{i?.stop(),i=null,u(null),a!==null&&E()&&(document.documentElement.style.cursor=a,a=null);},v=()=>{p&&(p.abort(),p=null),m&&(URL.revokeObjectURL(m.blobUrl),m=null);},y=()=>{g(),k(),v(),l=null,f(Oe());},P=()=>{if(!E())return;k(),l=null;let d=Pt(t.picker);a=document.documentElement.style.cursor,document.documentElement.style.cursor="crosshair",f({phase:"picking"}),i=Le(d,{onHover:u,onSelect:({element:S,descriptor:x})=>{l=S,k(),f({phase:"review",selection:x});},onCancel:()=>{y();}});},M=()=>{let d=Fe();if(d.length!==0)for(let S of d)de({payload:S,...t.transport?{transport:t.transport}:{}}).catch(()=>{se(S);});};if(E()){setTimeout(M,1e3);let d=()=>M();window.addEventListener("online",d),h=()=>window.removeEventListener("online",d);}return {getState:()=>n,subscribe(d){return r.add(d),()=>r.delete(d)},subscribeHover(d){return o.add(d),()=>o.delete(d)},start(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||n.phase!=="picking"&&P();},stop(){y();},clearSelection(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||P();},setConfig(d){t=d;},async submit(d,S){if(!E()){let R=w("configuration",new Error("BlocFeed submit can only run in the browser"));return f({phase:"error",lastError:R}),{ok:false}}let x=t.blocfeed_id?.trim?.()??"";if(!x){let L={phase:"error",lastError:w("configuration",new Error("Missing blocfeed_id. Create a project in BlocFeed and pass its blocfeed_id."))};return n.selection&&(L.selection=n.selection),f(L),{ok:false}}if(n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording")return {ok:false};let F=c+1;c=F,s?.abort(),s=new AbortController;let T=s.signal,_=n.selection,U=S?.capture?{...t.capture,...S.capture}:t.capture,H=!!(U?.element||U?.fullPage),ge={phase:H?"capturing":"submitting"};_&&(ge.selection=_),f(ge);try{let R=H?await Pe({selectionElement:l,capture:U,signal:T}):void 0;if(T.aborted||c!==F)return {ok:!1};let L={phase:"submitting"};_&&(L.selection=_),R&&(L.capture=R),f(L);let N={};_&&(N.selection=_),R&&(N.capture=R);let qe=await xe({config:t.metadata,context:N,...t.user?{user:t.user}:{}}),D={version:1,createdAt:new Date().toISOString(),blocfeed_id:x,message:d,metadata:qe};S?.category&&(D.category=S.category),t.user&&(D.user=t.user),_&&(D.selection=_),R&&(D.screenshots=R),m&&(D.video=m);let{result:C}=await de({payload:D,signal:T,...t.transport?{transport:t.transport}:{}});if(T.aborted||c!==F)return C;if(C.ok){m&&(URL.revokeObjectURL(m.blobUrl),m=null);let ee={phase:"success",lastSubmit:C};return _&&(ee.selection=_),R&&(ee.capture=R),f(ee),C}xt(C)&&se(D);let ze=C.api?.error??w("unknown",new Error("Submission failed")),J={phase:"error",lastSubmit:C,lastError:ze};return _&&(J.selection=_),R&&(J.capture=R),f(J),C}catch(R){if(T.aborted||c!==F)return {ok:false};let N={phase:"error",lastError:T.aborted?w("aborted",R):w("unknown",R)};return _&&(N.selection=_),f(N),{ok:false}}finally{c===F&&(s=null);}},async startRecording(){if(n.phase!=="review"||!t.recording?.enabled)return;let d=n.selection,S={phase:"recording",recordingElapsedMs:0};d&&(S.selection=d),f(S);try{let x={config:t.recording};s&&(x.signal=s.signal);let F=await ce(x);p=F,F.onTick(U=>{if(n.phase==="recording"){let H={phase:"recording",recordingElapsedMs:U};d&&(H.selection=d),f(H);}});let T=await F.result;p=null,m=T;let _={phase:"review",video:T};d&&(_.selection=d),f(_);}catch(x){p=null;let T={phase:"review",lastError:x?.kind?x:w("recording_failed",x)};d&&(T.selection=d),f(T);}},stopRecording(){n.phase!=="recording"||!p||p.stop();},removeVideo(){m&&(URL.revokeObjectURL(m.blobUrl),m=null);let d=n.selection,S={phase:"review"};d&&(S.selection=d),f(S);},__unsafeGetSelectedElement(){return l},destroy(){y(),r.clear(),o.clear(),h?.(),h=null;}}}var z=[],$=[],Ue=20,He=15,Y=[],j={},V=null,X=null,Z=null,G=false,Ft=["blocfeed.com","google-analytics.com","googletagmanager.com","analytics.google.com","googleads.g.doubleclick.net","googlesyndication.com","googleadservices.com","google.com/pagead","google.com/ads","facebook.net","facebook.com/tr","connect.facebook.net","graph.facebook.com","api.mixpanel.com","api-js.mixpanel.com","api.amplitude.com","api2.amplitude.com","api.segment.io","cdn.segment.com","vars.hotjar.com","in.hotjar.com","script.hotjar.com","heapanalytics.com","fullstory.com/s/fs.js","rs.fullstory.com","app.posthog.com","us.posthog.com","eu.posthog.com","api-iam.intercom.io","widget.intercom.io","sentry.io/api","browser.sentry-cdn.com","browser-intake-datadoghq.com","clarity.ms","js.hs-analytics.net","api.hubapi.com","forms.hubspot.com","plausible.io/api","client.crisp.chat","js.driftt.com","r.logrocket.com","app.pendo.io","events.launchdarkly.com","app.launchdarkly.com","grammarly.com","gnar.grammarly.com","capi.grammarly.com","api.languagetool.org","api.languagetoolplus.com","fonts.googleapis.com","fonts.gstatic.com","cdn.cookielaw.org","consent.cookiebot.com","js.stripe.com","api.stripe.com/v1/tokens","google.com/recaptcha","hcaptcha.com","bam.nr-data.net","rec.smartlook.com","o2.mouseflow.com","api.luckyorange.com","static.zdassets.com","ekr.zdassets.com"];function Ct(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Mt(e,t){let n=t.map(Ct).join(" "),r=t.find(i=>i instanceof Error),o={level:e,message:n.slice(0,2e3),timestamp:Date.now()};for(r?.stack&&(o.stack=r.stack.slice(0,2e3)),z.push(o);z.length>Ue;)z.shift();}function fe(e){let t=e.url.toLowerCase();for(let n of Y)if(t.includes(n))return;for($.push(e);$.length>He;)$.shift();}function Pn(e={}){if(G||!E())return;G=true,Ue=e.consoleLimit??20,He=e.networkLimit??15;let t=e.ignoreUrls;if(t!==void 0?Y=t.map(n=>n.toLowerCase()):Y=[...Ft],e.console!==false){let n=e.consoleLevels??["error","warn"];for(let r of n)j[r]=console[r],console[r]=(...o)=>{Mt(r,o),j[r]?.apply(console,o);};}if(e.network!==false&&typeof window.fetch=="function"){V=window.fetch;let n=V;window.fetch=async function(o,i){let l=typeof o=="string"?o:o instanceof URL?o.toString():o.url,a=(i?.method??"GET").toUpperCase(),s=Date.now();try{let c=await n.call(window,o,i);return c.ok||fe({url:l.slice(0,500),method:a,status:c.status,statusText:c.statusText,timestamp:s,durationMs:Date.now()-s}),c}catch(c){throw fe({url:l.slice(0,500),method:a,status:0,statusText:c instanceof Error?c.message:"Network error",timestamp:s,durationMs:Date.now()-s}),c}};}if(e.network!==false&&typeof XMLHttpRequest<"u"){X=XMLHttpRequest.prototype.open,Z=XMLHttpRequest.prototype.send;let n=X,r=Z;XMLHttpRequest.prototype.open=function(o,i,...l){return this.__bf_method=o.toUpperCase(),this.__bf_url=String(i),n.apply(this,[o,i,...l])},XMLHttpRequest.prototype.send=function(...o){let i=this.__bf_method||"GET",l=this.__bf_url||"",a=Date.now();return this.addEventListener("loadend",function(){if(this.status>=400||this.status===0){let s={url:l.slice(0,500),method:i,status:this.status,timestamp:a,durationMs:Date.now()-a};this.statusText&&(s.statusText=this.statusText),fe(s);}}),r.apply(this,o)};}}function xn(){if(G){for(let[e,t]of Object.entries(j))console[e]=t;for(let e of Object.keys(j))delete j[e];V&&(window.fetch=V,V=null),X&&(XMLHttpRequest.prototype.open=X,X=null),Z&&(XMLHttpRequest.prototype.send=Z,Z=null),Y=[],G=false;}}function Fn(){return {consoleLogs:[...z],networkErrors:[...$]}}function Cn(){z=[],$=[];}var Lt=[{name:"supabase_service_role_key",pattern:/SUPABASE_SERVICE_ROLE_KEY["'=:\s]+[A-Za-z0-9_.=-]{30,}/},{name:"supabase_db_password",pattern:/SUPABASE_DB_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"postgres_password",pattern:/POSTGRES_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"database_url_with_creds",pattern:/(?:postgres|postgresql|mysql|mongodb|redis|amqp):\/\/[^:]+:[^@\s"']+@/},{name:"aws_access_key",pattern:/AKIA[0-9A-Z]{16}/},{name:"aws_secret_key",pattern:/AWS_SECRET_ACCESS_KEY["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"aws_session_token",pattern:/AWS_SESSION_TOKEN["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"stripe_secret_key",pattern:/sk_live_[a-zA-Z0-9]{10,}/},{name:"stripe_secret_key_test",pattern:/sk_test_[a-zA-Z0-9]{10,}/},{name:"stripe_restricted_key",pattern:/rk_(?:live|test)_[a-zA-Z0-9]{10,}/},{name:"github_pat",pattern:/ghp_[A-Za-z0-9_]{36,}/},{name:"github_oauth",pattern:/gho_[A-Za-z0-9_]{36,}/},{name:"github_user_token",pattern:/ghu_[A-Za-z0-9_]{36,}/},{name:"github_server_token",pattern:/ghs_[A-Za-z0-9_]{36,}/},{name:"github_fine_grained",pattern:/github_pat_[A-Za-z0-9_]{22,}/},{name:"openai_api_key",pattern:/sk-[a-zA-Z0-9]{20,}(?![a-zA-Z0-9_])/},{name:"anthropic_api_key",pattern:/sk-ant-[a-zA-Z0-9\-_]{20,}/},{name:"private_key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/},{name:"sendgrid_api_key",pattern:/SG\.[a-zA-Z0-9_-]{22,}\.[a-zA-Z0-9_-]{22,}/},{name:"twilio_auth_token",pattern:/TWILIO_AUTH_TOKEN["'=:\s]+[a-f0-9]{32}/},{name:"generic_secret_key",pattern:/[A-Z_]{2,}_SECRET_KEY["'=:\s]+[^\s"']{8,}/},{name:"generic_secret",pattern:/[A-Z_]{2,}_SECRET["'=:\s]+[^\s"']{8,}/},{name:"generic_password",pattern:/[A-Z_]{2,}_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"generic_private_key_var",pattern:/[A-Z_]{2,}_PRIVATE_KEY["'=:\s]+[^\s"']{8,}/}],I=[],pe=0,me=false;function Dt(e){let t=e.slice(0,80);return t.length<=6?"***":t.slice(0,6)+"***"}function Bt(e,t,n,r){if(I.some(l=>l.rule===e&&l.source===t))return;let i={rule:e,source:t,hint:Dt(n),timestamp:Date.now()};r&&(i.location=r),I.push(i);}function W(e,t,n,r){for(let{name:o,pattern:i}of n){let l=i.exec(e);l&&Bt(o,t,l[0],r);}}function It(e){try{let t=window;if(t.__NEXT_DATA__){let n=JSON.stringify(t.__NEXT_DATA__);W(n,"hydration",e,"__NEXT_DATA__");}if(t.__NUXT__){let n=JSON.stringify(t.__NUXT__);W(n,"hydration",e,"__NUXT__");}}catch{}}function Nt(e){try{document.querySelectorAll("script:not([src])").forEach((n,r)=>{let o=n.textContent;o&&o.length>0&&W(o,"scripts",e,`inline-script[${r}]`);});}catch{}}function Ot(e){try{document.querySelectorAll("meta[content]").forEach(n=>{let r=n.getAttribute("content"),o=n.getAttribute("name")||n.getAttribute("property")||"";r&&r.length>10&&W(r,"meta",e,o?`meta[${o}]`:void 0);});}catch{}}function Ut(e){try{document.querySelectorAll("[data-api-key], [data-secret], [data-token], [data-password]").forEach(n=>{let r=n.attributes;for(let o=0;o<r.length;o++){let i=r[o];i.name.startsWith("data-")&&i.value.length>10&&W(i.value,"dom",e,`${n.tagName.toLowerCase()}[${i.name}]`);}});}catch{}}function Dn(e={}){if(me||!E()||(me=true,e.secretScan===false))return;let t=[...Lt,...e.customPatterns??[]],n=e.scanTargets??["hydration","scripts","meta","dom"];setTimeout(()=>{pe=Date.now(),n.includes("hydration")&&It(t),n.includes("scripts")&&Nt(t),n.includes("meta")&&Ot(t),n.includes("dom")&&Ut(t);let r=e.notify??"both";I.length>0&&(r==="console"||r==="both")&&console.warn(`[BlocFeed Security] Found ${I.length} potential secret(s) exposed in client code:`,I.map(o=>`${o.rule} (${o.source}${o.location?`: ${o.location}`:""})`));},100);}function Bn(){return {findings:[...I],scannedAt:pe}}function In(){I=[],pe=0,me=false;}
2
- export{E as a,te as b,ve as c,Pe as d,xe as e,se as f,Fe as g,Jt as h,en as i,wt as j,ce as k,Rn as l,Pn as m,xn as n,Fn as o,Cn as p,Dn as q,Bn as r,In as s};
@@ -1,2 +0,0 @@
1
- 'use strict';function E(){return typeof window<"u"&&typeof document<"u"}function he(e){let t=globalThis.CSS;return typeof t?.escape=="function"?t.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,n=>{let r=n.codePointAt(0);return r===void 0?"":`\\${r.toString(16)} `})}function te(e){return {x:e.x,y:e.y,width:e.width,height:e.height}}function $e(e){return {x:e.x+window.scrollX,y:e.y+window.scrollY,width:e.width,height:e.height}}function je(e){return e.replace(/\s+/g," ").trim()}function Ve(e,t=140){let n=e.textContent;if(!n)return;let r=je(n);if(r)return r.length<=t?r:`${r.slice(0,t-1)}\u2026`}function Xe(e){let t=1;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)n.tagName===e.tagName&&(t+=1);return t}var Ee=["data-testid","data-test-id","data-test","data-qa","data-cy"],we="data-blocfeed-component";function Ze(e){let t=e.closest(`[${we}]`);if(!t)return;let r=t.getAttribute(we)?.trim();return r||void 0}function We(e){for(let t of Ee){let n=e.closest(`[${t}]`);if(!n)continue;let o=n.getAttribute(t)?.trim();if(o)return o}}function be(e){try{let t=e,n=Object.getOwnPropertyNames(t);for(let r of n)if(r.startsWith("__reactFiber$")||r.startsWith("__reactInternalInstance$")){let o=t[r];if(o&&typeof o=="object")return o}}catch{}return null}function B(e){if(e.length<=1||e.length===2&&e[0]===e[0].toLowerCase())return true;let t=e[0];return t>="a"&&t<="z"}function q(e){if(e){for(let t of e)if(typeof t.name=="string"&&t.name&&!B(t.name))return t.name}}function A(e){if(e&&typeof e!="string"){if(typeof e=="function"){let t=e;return typeof t.displayName=="string"&&t.displayName?t.displayName:typeof t.name=="string"&&t.name?t.name:void 0}if(typeof e=="object"){let t=e,n=t.displayName;if(typeof n=="string"&&n)return n;let r=t.render;if(typeof r=="function"){let i=r;if(typeof i.displayName=="string"&&i.displayName)return i.displayName;if(typeof i.name=="string"&&i.name)return i.name}let o=t.type;return A(o)}}}function Ke(e){let t=be(e);if(!t)return;let n=q(t._debugInfo);if(n)return n;let r=t._debugOwner!==void 0;if(r){let s=t._debugOwner;for(let c=0;s&&c<50;c+=1){let h=q(s._debugInfo);if(h)return h;let p=A(s.type)??A(s.elementType);if(p&&!B(p))return p;s=s._debugOwner;}}if(t._owner!==void 0&&t._owner!==t._debugOwner){let s=t._owner;for(let c=0;s&&c<50;c+=1){let h=q(s._debugInfo);if(h)return h;let p=A(s.type)??A(s.elementType);if(p&&!B(p))return p;s=s._owner;}}let i=t,l=r?80:25;for(let s=0;i&&s<l;s+=1){let c=q(i._debugInfo);if(c)return c;let h=A(i.type)??A(i.elementType);if(h&&!B(h))return h;i=i.return;}let a=e.parentElement;for(let s=0;a&&s<15;s+=1){let c=be(a);if(c){let h=q(c._debugInfo);if(h)return h;let p=A(c.type)??A(c.elementType);if(p&&!B(p))return p;if(c._debugOwner){let m=A(c._debugOwner.type)??A(c._debugOwner.elementType);if(m&&!B(m))return m}if(c._owner&&c._owner!==c._debugOwner){let m=A(c._owner.type)??A(c._owner.elementType);if(m&&!B(m))return m}}a=a.parentElement;}}function Qe(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("id");if(n)return `#${he(n)}`;for(let r of Ee){let o=e.getAttribute(r);if(o)return `${t}[${r}="${he(o)}"]`}return `${t}:nth-of-type(${Xe(e)})`}function Ye(e,t=10){let n=[],r=e;for(;r&&n.length<t;){let o=Qe(r);if(n.unshift(o),o.startsWith("#"))break;r=r.parentElement;}return n.join(" > ")}function ye(e,t){if(!t||t.length===0)return false;for(let n of t)if(e.closest(n))return true;return false}function ne(e,t){if(!e||ye(e,t.ignoreSelectors))return null;let n=e;for(;n;){if(ye(n,t.ignoreSelectors))return null;if(t.isSelectable?.(n)??Ge(n))return n;n=n.parentElement;}return null}function Ge(e){let t=e.tagName;return !(t==="HTML"||t==="BODY")}function Se(e){let t=e.getBoundingClientRect(),n={selector:Ye(e),tagName:e.tagName.toLowerCase(),rect:te(t),pageRect:$e(t)},r=e.getAttribute("id");r&&(n.id=r);let o=e.className;typeof o=="string"&&o.trim()&&(n.className=o);let i=Ve(e);i&&(n.textSnippet=i);let l=Ze(e)??Ke(e);l&&(n.componentName=l);let a=We(e);return a&&(n.testId=a),n}var re=null;async function ke(){return re||(re=import('html-to-image')),re}async function Je(e){return await new Promise((t,n)=>{let r=new Image;r.onload=()=>t({width:r.naturalWidth,height:r.naturalHeight}),r.onerror=()=>n(new Error("Failed to load generated screenshot")),r.src=e;})}async function _e(e,t){let{width:n,height:r}=await Je(e);return {dataUrl:e,mime:t,width:n,height:r}}function O(e){if(e?.aborted)throw new Error("Aborted")}function ve(){return {async captureElement(e,t){if(!E())throw new Error("captureElement can only run in the browser");O(t.signal);let n=await ke();O(t.signal);let r=t.mime==="image/jpeg"?await n.toJpeg(e,{quality:t.quality??.92,pixelRatio:t.pixelRatio}):await n.toPng(e,{pixelRatio:t.pixelRatio});return O(t.signal),await _e(r,t.mime)},async captureFullPage(e){if(!E())throw new Error("captureFullPage can only run in the browser");O(e.signal);let t=document.documentElement,n=Math.max(t.scrollWidth,t.clientWidth),r=Math.max(t.scrollHeight,t.clientHeight),o=Math.min(1,e.maxDimension/Math.max(n,r)),i=Math.max(1,Math.round(n*o)),l=Math.max(1,Math.round(r*o)),a=await ke();O(e.signal);let s=e.mime==="image/jpeg"?await a.toJpeg(t,{width:i,height:l,quality:e.quality??.92,pixelRatio:e.pixelRatio}):await a.toPng(t,{width:i,height:l,pixelRatio:e.pixelRatio});return O(e.signal),await _e(s,e.mime)}}}function et(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return "Unknown error"}}function w(e,t,n){let r={kind:e,message:et(t)};return n&&(r.detail=n),r}var tt=12e3,nt=2048,rt=.92;function Re(){return Date.now()}function ot(e){return new Promise((t,n)=>{let r=()=>n(new Error("Aborted"));if(e.aborted){r();return}e.addEventListener("abort",r,{once:true});})}async function Ae(e,t,n){let r=new Promise((i,l)=>{let a=setTimeout(()=>l(new Error("Timeout")),t);typeof a.unref=="function"&&a.unref();}),o=[e,r];return n&&o.push(ot(n)),await Promise.race(o)}function it(e){if(!E())return 1;let t=window.devicePixelRatio||1,n=e?.pixelRatio??Math.min(t,2);return Math.max(.1,n)}function at(e){return !!(e?.element||e?.fullPage)}function Te(e){let t={mime:e.mime,pixelRatio:e.pixelRatio,maxDimension:e.maxDimension};return e.includeQuality&&(t.quality=e.quality),e.signal&&(t.signal=e.signal),t}async function Pe(e){let{selectionElement:t,capture:n,signal:r}=e;if(!E()||!at(n))return;let o=Re(),i=[],l=n?.timeoutMs??tt,a=n?.maxDimension??nt,s=n?.mime??"image/png",c=n?.quality??rt,h=n?.adapter??ve(),p={},m=it(n);if(n?.element&&t)try{let f=t.getBoundingClientRect(),g=Math.min(1,a/Math.max(f.width,f.height)),k=Math.min(m,m*g),v=await Ae(Promise.resolve(h.captureElement(t,{...Te({mime:s,quality:c,pixelRatio:k,maxDimension:a,includeQuality:s==="image/jpeg",...r?{signal:r}:{}})})),l,r);p.element=v;}catch(f){if(r?.aborted)throw f;i.push(w("capture_failed",f,{target:"element"}));}if(n?.fullPage)try{let f=await Ae(Promise.resolve(h.captureFullPage(Te({mime:s,quality:c,pixelRatio:m,maxDimension:a,includeQuality:s==="image/jpeg",...r?{signal:r}:{}}))),l,r);p.fullPage=f;}catch(f){if(r?.aborted)throw f;i.push(w("capture_failed",f,{target:"fullPage"}));}let b=Re(),u={startedAt:o,finishedAt:b,durationMs:Math.max(0,b-o)};return i.length>0&&(u.errors=i),{...p,diagnostics:u}}function st(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function ct(){return E()?{url:window.location.href,title:document.title,referrer:document.referrer||void 0,userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,viewport:{width:window.innerWidth,height:window.innerHeight},screen:{width:window.screen.width,height:window.screen.height},scroll:{x:window.scrollX,y:window.scrollY},devicePixelRatio:window.devicePixelRatio||1,timezone:st()}:{}}function lt(e){if(!e)return {};let t={};return e.id&&(t.userId=e.id),e.email&&(t.userEmail=e.email),e.name&&(t.userName=e.name),t}async function xe(e){let{config:t,context:n,user:r}=e;if(t?.enabled===false)return {};let o={...ct(),...lt(r)},i=t?.enrich;if(!i)return o;try{let l=await i(n);return {...o,...l}}catch(l){let a=w("unknown",l);return {...o,blocfeedMetadataError:a.message}}}var oe="blocfeed-queue",ut=50;function ie(){if(!E())return [];try{let e=localStorage.getItem(oe);if(!e)return [];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return []}}function ae(e){if(E())try{e.length===0?localStorage.removeItem(oe):localStorage.setItem(oe,JSON.stringify(e));}catch{}}function dt(e){let t={...e};if(t.screenshots){let n={...t.screenshots};n.element&&(n.element={...n.element,dataUrl:""}),n.fullPage&&(n.fullPage={...n.fullPage,dataUrl:""}),t.screenshots=n;}return delete t.video,t}function se(e){let t=ie(),n=dt(e);for(n.metadata={...n.metadata,_queued:true},t.push({payload:n,timestamp:Date.now()});t.length>ut;)t.shift();ae(t);}function Fe(){let e=ie();return e.length===0?[]:(ae([]),e.map(t=>t.payload))}function Jt(){ae([]);}function en(){return ie().length}var ft=3e4,mt=25e5,Ce="video/webm",pt=250,gt=1e3,ht=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function Me(){if(typeof MediaRecorder>"u")return null;for(let e of ht)if(MediaRecorder.isTypeSupported(e))return e;return null}function wt(){return !E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function"?false:Me()!==null}async function ce(e){let{config:t,signal:n}=e;if(!E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function")throw w("recording_failed",new Error("Screen recording is not supported in this browser"));let r=Me();if(!r)throw w("recording_failed",new Error("No supported video codec found (WebM required)"));if(n?.aborted)throw w("aborted",new Error("Recording aborted before start"));let o;try{o=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1});}catch(g){let k=g instanceof DOMException&&g.name==="NotAllowedError"?"Screen share permission denied":"Failed to start screen share";throw w("recording_failed",new Error(k))}if(n?.aborted)throw o.getTracks().forEach(g=>g.stop()),w("aborted",new Error("Recording aborted after permission"));let i=t?.maxDurationMs??ft,l=t?.videoBitsPerSecond??mt,a=new MediaRecorder(o,{mimeType:r,videoBitsPerSecond:l}),s=[],c=[],h=0,p=null,m=null,b=false,u=()=>{p!==null&&(clearInterval(p),p=null),m!==null&&(clearTimeout(m),m=null),o.getTracks().forEach(g=>g.stop());},f=new Promise((g,k)=>{a.ondataavailable=y=>{y.data.size>0&&s.push(y.data);},a.onstop=()=>{if(b)return;b=true,u();let y=Date.now()-h,P=new Blob(s,{type:Ce}),M=URL.createObjectURL(P);g({mime:Ce,blobUrl:M,blob:P,durationMs:y,sizeBytes:P.size});},a.onerror=()=>{b||(b=true,u(),k(w("recording_failed",new Error("MediaRecorder error"))));};let v=o.getVideoTracks()[0];if(v&&v.addEventListener("ended",()=>{a.state!=="inactive"&&a.stop();}),n){let y=()=>{b||(b=true,a.state!=="inactive"&&a.stop(),u(),k(w("aborted",new Error("Recording aborted"))));};n.addEventListener("abort",y,{once:true});}});return a.start(gt),h=Date.now(),p=setInterval(()=>{let g=Date.now()-h;for(let k of c)k(g);},pt),m=setTimeout(()=>{!b&&a.state!=="inactive"&&a.stop();},i),{result:f,stop(){!b&&a.state!=="inactive"&&a.stop();},onTick(g){c.push(g);},abort(){b||(b=true,a.state!=="inactive"&&a.stop(),u());}}}function le(e){let t=null,n=null,r=(...o)=>{n=o,t===null&&(t=requestAnimationFrame(()=>{if(t=null,!n)return;let i=n;n=null,e(...i);}));};return r.cancel=()=>{t!==null&&cancelAnimationFrame(t),t=null,n=null;},r}function K(e){return e instanceof Element?!!e.closest("[data-blocfeed-ui]"):false}function Q(e){e.stopPropagation(),e.stopImmediatePropagation?.();}function Le(e,t){if(!E())throw new Error("BlocFeed picker can only run in a browser environment.");let n=e.ignoreSelectors,r=e.isSelectable,o={};n&&n.length>0&&(o.ignoreSelectors=n),r&&(o.isSelectable=r);let i=null,l=null,a=(u,f=false)=>{if(!u){i=null,l=null,t.onHover(null);return}let g=te(u.getBoundingClientRect()),k=`${Math.round(g.x)}:${Math.round(g.y)}:${Math.round(g.width)}:${Math.round(g.height)}`;!f&&u===i&&k===l||(i=u,l=k,t.onHover({element:u,rect:g}));},s=le(u=>{if(K(u.target))return;let f=document.elementFromPoint(u.clientX,u.clientY),g=ne(f,o);a(g);}),c=le(()=>{i&&a(i,true);}),h=u=>{K(u.target)||(Q(u),u.pointerType==="mouse"&&u.preventDefault());},p=u=>{K(u.target)||(Q(u),u.pointerType==="mouse"&&u.preventDefault());},m=u=>{if(K(u.target))return;Q(u),u.preventDefault();let f=document.elementFromPoint(u.clientX,u.clientY),g=ne(f,o);g&&t.onSelect({element:g,descriptor:Se(g)});},b=u=>{u.key==="Escape"&&(Q(u),u.preventDefault(),t.onCancel());};return window.addEventListener("pointermove",s,{capture:true,passive:true}),window.addEventListener("pointerdown",h,{capture:true}),window.addEventListener("pointerup",p,{capture:true}),window.addEventListener("click",m,{capture:true}),window.addEventListener("keydown",b,{capture:true}),window.addEventListener("scroll",c,{capture:true,passive:true}),window.addEventListener("resize",c,{passive:true}),{stop(){window.removeEventListener("pointermove",s,{capture:true}),window.removeEventListener("pointerdown",h,{capture:true}),window.removeEventListener("pointerup",p,{capture:true}),window.removeEventListener("click",m,{capture:true}),window.removeEventListener("keydown",b,{capture:true}),window.removeEventListener("scroll",c,{capture:true}),window.removeEventListener("resize",c),s.cancel(),c.cancel(),t.onHover(null);}}}var bt=12e3,yt=2,Et=500,St=2e3,ue="https://blocfeed.com/api/feedback",De=0;function Be(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new Error("Aborted"));return}let o=setTimeout(n,e),i=()=>{clearTimeout(o),r(new Error("Aborted"));};t?.addEventListener("abort",i,{once:true});})}function kt(e){return e>=500&&e<=599}function _t(e){let[t,n]=e.split(",",2);if(!t||!n)throw new Error("Invalid data URL");let o=/data:(.*?);base64/.exec(t)?.[1]||"application/octet-stream",i=atob(n),l=new Uint8Array(i.length);for(let a=0;a<i.length;a+=1)l[a]=i.charCodeAt(a);return new Blob([l],{type:o})}function vt(e){let t={},n={},r={...e};if(r.screenshots){let o={},i={...r.screenshots};i.element&&(t.element=i.element.dataUrl,o.element={mime:i.element.mime,width:i.element.width,height:i.element.height},i.element={...i.element,dataUrl:""}),i.fullPage&&(t.fullPage=i.fullPage.dataUrl,o.fullPage={mime:i.fullPage.mime,width:i.fullPage.width,height:i.fullPage.height},i.fullPage={...i.fullPage,dataUrl:""}),r.screenshots=i,(o.element||o.fullPage)&&(r.screenshot_intent=o);}return r.video&&(n.blob=r.video.blob,r.video_intent={mime:r.video.mime,durationMs:r.video.durationMs,sizeBytes:r.video.sizeBytes},delete r.video),{lean:r,extracted:t,extractedVideo:n}}async function Ie(e,t,n){let r=_t(t);await fetch(e,{method:"PUT",body:r,headers:{"content-type":r.type},...n?{signal:n}:{}});}async function Rt(e){let{feedbackId:t,extracted:n,screenshots:r,signal:o}=e,i={};n.element&&r?.element&&(i.element={dataUrl:n.element,mime:r.element.mime,width:r.element.width,height:r.element.height}),n.fullPage&&r?.fullPage&&(i.fullPage={dataUrl:n.fullPage,mime:r.fullPage.mime,width:r.fullPage.width,height:r.fullPage.height}),Object.keys(i).length!==0&&await fetch(`${ue}/${t}/screenshots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i),...o?{signal:o}:{}});}async function At(e){await fetch(`${ue}/${e.feedbackId}/video`,{method:"POST",body:e.blob,headers:{"content-type":e.blob.type},...e.signal?{signal:e.signal}:{}});}async function Ne(e){let{signal:t,transport:n}=e;if(Date.now()-De<St)return {ok:false,error:w("configuration",new Error("Please wait before submitting again"))};let o=n?.timeoutMs??bt,i=n?.maxAttempts??yt,l=n?.backoffMs??Et,a=!!(e.payload.screenshots?.element?.dataUrl||e.payload.screenshots?.fullPage?.dataUrl),s=!!e.payload.video?.blob,c=a||s,{lean:h,extracted:p,extractedVideo:m}=c?vt(e.payload):{lean:e.payload,extracted:{},extractedVideo:{}},b={...p,...e.screenshotDataUrls};for(let u=1;u<=i;u+=1){let f=new AbortController,g=setTimeout(()=>f.abort(),o),k=()=>f.abort();t&&t.addEventListener("abort",k,{once:true});try{let v=await fetch(ue,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(h),signal:f.signal});if(v.ok){De=Date.now();let y;try{y=await v.json();}catch{}if((b.element||b.fullPage)&&y){let d=y.upload_urls;if(d){let S=[];b.element&&d.element&&S.push(Ie(d.element,b.element,t)),b.fullPage&&d.fullPage&&S.push(Ie(d.fullPage,b.fullPage,t));try{await Promise.all(S);}catch{}}else if(y.feedback_id)try{await Rt({feedbackId:y.feedback_id,extracted:b,screenshots:e.payload.screenshots,...t?{signal:t}:{}});}catch{}}if(m.blob&&y){let d=y.upload_urls;if(d?.video)try{await fetch(d.video,{method:"PUT",body:m.blob,headers:{"content-type":m.blob.type},...t?{signal:t}:{}});}catch{}else if(y.feedback_id)try{await At({feedbackId:y.feedback_id,blob:m.blob,...t?{signal:t}:{}});}catch{}}let M={ok:!0,status:v.status};return y&&(M.apiResponse=y),M}if(u<i&&kt(v.status)){let y=.85+Math.random()*.3,P=Math.round(l*2**(u-1)*y);await Be(P,t);continue}return {ok:!1,status:v.status,error:w("api_failed",new Error(`HTTP ${v.status}`))}}catch(v){if(f.signal.aborted||t?.aborted)return {ok:false,error:w("aborted",v)};if(u<i){let y=.85+Math.random()*.3,P=Math.round(l*2**(u-1)*y);await Be(P,t);continue}return {ok:false,error:w("api_failed",v)}}finally{clearTimeout(g),t&&t.removeEventListener("abort",k);}}return {ok:false,error:w("api_failed",new Error("Failed"))}}async function de(e){let{signal:t,transport:n}=e,r={ok:false};try{let o={payload:e.payload,...t?{signal:t}:{},...n?{transport:n}:{}};r.api=await Ne(o),r.ok=!!r.api?.ok;}catch(o){r.api={ok:false,error:w("api_failed",o)},r.ok=false;}return {payload:e.payload,result:r}}var Tt=["[data-blocfeed-ui]","[data-blocfeed-ignore]"];function Pt(e){let t=[...Tt,...e?.ignoreSelectors??[]],n=Array.from(new Set(t));return {...e,ignoreSelectors:n}}function Oe(){return {phase:"idle"}}function xt(e){if(e.ok)return false;let t=e.api;return t?t.status&&t.status>=400&&t.status<500||t.error?.kind==="aborted"||t.error?.kind==="configuration"?false:!t.ok:true}function Rn(e){let t=e,n=Oe(),r=new Set,o=new Set,i=null,l=null,a=null,s=null,c=0,h=null,p=null,m=null,b=()=>{for(let d of r)d(n);},u=d=>{for(let S of o)S(d);},f=d=>{n=d,b();},g=()=>{c+=1,s?.abort(),s=null;},k=()=>{i?.stop(),i=null,u(null),a!==null&&E()&&(document.documentElement.style.cursor=a,a=null);},v=()=>{p&&(p.abort(),p=null),m&&(URL.revokeObjectURL(m.blobUrl),m=null);},y=()=>{g(),k(),v(),l=null,f(Oe());},P=()=>{if(!E())return;k(),l=null;let d=Pt(t.picker);a=document.documentElement.style.cursor,document.documentElement.style.cursor="crosshair",f({phase:"picking"}),i=Le(d,{onHover:u,onSelect:({element:S,descriptor:x})=>{l=S,k(),f({phase:"review",selection:x});},onCancel:()=>{y();}});},M=()=>{let d=Fe();if(d.length!==0)for(let S of d)de({payload:S,...t.transport?{transport:t.transport}:{}}).catch(()=>{se(S);});};if(E()){setTimeout(M,1e3);let d=()=>M();window.addEventListener("online",d),h=()=>window.removeEventListener("online",d);}return {getState:()=>n,subscribe(d){return r.add(d),()=>r.delete(d)},subscribeHover(d){return o.add(d),()=>o.delete(d)},start(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||n.phase!=="picking"&&P();},stop(){y();},clearSelection(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||P();},setConfig(d){t=d;},async submit(d,S){if(!E()){let R=w("configuration",new Error("BlocFeed submit can only run in the browser"));return f({phase:"error",lastError:R}),{ok:false}}let x=t.blocfeed_id?.trim?.()??"";if(!x){let L={phase:"error",lastError:w("configuration",new Error("Missing blocfeed_id. Create a project in BlocFeed and pass its blocfeed_id."))};return n.selection&&(L.selection=n.selection),f(L),{ok:false}}if(n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording")return {ok:false};let F=c+1;c=F,s?.abort(),s=new AbortController;let T=s.signal,_=n.selection,U=S?.capture?{...t.capture,...S.capture}:t.capture,H=!!(U?.element||U?.fullPage),ge={phase:H?"capturing":"submitting"};_&&(ge.selection=_),f(ge);try{let R=H?await Pe({selectionElement:l,capture:U,signal:T}):void 0;if(T.aborted||c!==F)return {ok:!1};let L={phase:"submitting"};_&&(L.selection=_),R&&(L.capture=R),f(L);let N={};_&&(N.selection=_),R&&(N.capture=R);let qe=await xe({config:t.metadata,context:N,...t.user?{user:t.user}:{}}),D={version:1,createdAt:new Date().toISOString(),blocfeed_id:x,message:d,metadata:qe};S?.category&&(D.category=S.category),t.user&&(D.user=t.user),_&&(D.selection=_),R&&(D.screenshots=R),m&&(D.video=m);let{result:C}=await de({payload:D,signal:T,...t.transport?{transport:t.transport}:{}});if(T.aborted||c!==F)return C;if(C.ok){m&&(URL.revokeObjectURL(m.blobUrl),m=null);let ee={phase:"success",lastSubmit:C};return _&&(ee.selection=_),R&&(ee.capture=R),f(ee),C}xt(C)&&se(D);let ze=C.api?.error??w("unknown",new Error("Submission failed")),J={phase:"error",lastSubmit:C,lastError:ze};return _&&(J.selection=_),R&&(J.capture=R),f(J),C}catch(R){if(T.aborted||c!==F)return {ok:false};let N={phase:"error",lastError:T.aborted?w("aborted",R):w("unknown",R)};return _&&(N.selection=_),f(N),{ok:false}}finally{c===F&&(s=null);}},async startRecording(){if(n.phase!=="review"||!t.recording?.enabled)return;let d=n.selection,S={phase:"recording",recordingElapsedMs:0};d&&(S.selection=d),f(S);try{let x={config:t.recording};s&&(x.signal=s.signal);let F=await ce(x);p=F,F.onTick(U=>{if(n.phase==="recording"){let H={phase:"recording",recordingElapsedMs:U};d&&(H.selection=d),f(H);}});let T=await F.result;p=null,m=T;let _={phase:"review",video:T};d&&(_.selection=d),f(_);}catch(x){p=null;let T={phase:"review",lastError:x?.kind?x:w("recording_failed",x)};d&&(T.selection=d),f(T);}},stopRecording(){n.phase!=="recording"||!p||p.stop();},removeVideo(){m&&(URL.revokeObjectURL(m.blobUrl),m=null);let d=n.selection,S={phase:"review"};d&&(S.selection=d),f(S);},__unsafeGetSelectedElement(){return l},destroy(){y(),r.clear(),o.clear(),h?.(),h=null;}}}var z=[],$=[],Ue=20,He=15,Y=[],j={},V=null,X=null,Z=null,G=false,Ft=["blocfeed.com","google-analytics.com","googletagmanager.com","analytics.google.com","googleads.g.doubleclick.net","googlesyndication.com","googleadservices.com","google.com/pagead","google.com/ads","facebook.net","facebook.com/tr","connect.facebook.net","graph.facebook.com","api.mixpanel.com","api-js.mixpanel.com","api.amplitude.com","api2.amplitude.com","api.segment.io","cdn.segment.com","vars.hotjar.com","in.hotjar.com","script.hotjar.com","heapanalytics.com","fullstory.com/s/fs.js","rs.fullstory.com","app.posthog.com","us.posthog.com","eu.posthog.com","api-iam.intercom.io","widget.intercom.io","sentry.io/api","browser.sentry-cdn.com","browser-intake-datadoghq.com","clarity.ms","js.hs-analytics.net","api.hubapi.com","forms.hubspot.com","plausible.io/api","client.crisp.chat","js.driftt.com","r.logrocket.com","app.pendo.io","events.launchdarkly.com","app.launchdarkly.com","grammarly.com","gnar.grammarly.com","capi.grammarly.com","api.languagetool.org","api.languagetoolplus.com","fonts.googleapis.com","fonts.gstatic.com","cdn.cookielaw.org","consent.cookiebot.com","js.stripe.com","api.stripe.com/v1/tokens","google.com/recaptcha","hcaptcha.com","bam.nr-data.net","rec.smartlook.com","o2.mouseflow.com","api.luckyorange.com","static.zdassets.com","ekr.zdassets.com"];function Ct(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Mt(e,t){let n=t.map(Ct).join(" "),r=t.find(i=>i instanceof Error),o={level:e,message:n.slice(0,2e3),timestamp:Date.now()};for(r?.stack&&(o.stack=r.stack.slice(0,2e3)),z.push(o);z.length>Ue;)z.shift();}function fe(e){let t=e.url.toLowerCase();for(let n of Y)if(t.includes(n))return;for($.push(e);$.length>He;)$.shift();}function Pn(e={}){if(G||!E())return;G=true,Ue=e.consoleLimit??20,He=e.networkLimit??15;let t=e.ignoreUrls;if(t!==void 0?Y=t.map(n=>n.toLowerCase()):Y=[...Ft],e.console!==false){let n=e.consoleLevels??["error","warn"];for(let r of n)j[r]=console[r],console[r]=(...o)=>{Mt(r,o),j[r]?.apply(console,o);};}if(e.network!==false&&typeof window.fetch=="function"){V=window.fetch;let n=V;window.fetch=async function(o,i){let l=typeof o=="string"?o:o instanceof URL?o.toString():o.url,a=(i?.method??"GET").toUpperCase(),s=Date.now();try{let c=await n.call(window,o,i);return c.ok||fe({url:l.slice(0,500),method:a,status:c.status,statusText:c.statusText,timestamp:s,durationMs:Date.now()-s}),c}catch(c){throw fe({url:l.slice(0,500),method:a,status:0,statusText:c instanceof Error?c.message:"Network error",timestamp:s,durationMs:Date.now()-s}),c}};}if(e.network!==false&&typeof XMLHttpRequest<"u"){X=XMLHttpRequest.prototype.open,Z=XMLHttpRequest.prototype.send;let n=X,r=Z;XMLHttpRequest.prototype.open=function(o,i,...l){return this.__bf_method=o.toUpperCase(),this.__bf_url=String(i),n.apply(this,[o,i,...l])},XMLHttpRequest.prototype.send=function(...o){let i=this.__bf_method||"GET",l=this.__bf_url||"",a=Date.now();return this.addEventListener("loadend",function(){if(this.status>=400||this.status===0){let s={url:l.slice(0,500),method:i,status:this.status,timestamp:a,durationMs:Date.now()-a};this.statusText&&(s.statusText=this.statusText),fe(s);}}),r.apply(this,o)};}}function xn(){if(G){for(let[e,t]of Object.entries(j))console[e]=t;for(let e of Object.keys(j))delete j[e];V&&(window.fetch=V,V=null),X&&(XMLHttpRequest.prototype.open=X,X=null),Z&&(XMLHttpRequest.prototype.send=Z,Z=null),Y=[],G=false;}}function Fn(){return {consoleLogs:[...z],networkErrors:[...$]}}function Cn(){z=[],$=[];}var Lt=[{name:"supabase_service_role_key",pattern:/SUPABASE_SERVICE_ROLE_KEY["'=:\s]+[A-Za-z0-9_.=-]{30,}/},{name:"supabase_db_password",pattern:/SUPABASE_DB_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"postgres_password",pattern:/POSTGRES_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"database_url_with_creds",pattern:/(?:postgres|postgresql|mysql|mongodb|redis|amqp):\/\/[^:]+:[^@\s"']+@/},{name:"aws_access_key",pattern:/AKIA[0-9A-Z]{16}/},{name:"aws_secret_key",pattern:/AWS_SECRET_ACCESS_KEY["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"aws_session_token",pattern:/AWS_SESSION_TOKEN["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"stripe_secret_key",pattern:/sk_live_[a-zA-Z0-9]{10,}/},{name:"stripe_secret_key_test",pattern:/sk_test_[a-zA-Z0-9]{10,}/},{name:"stripe_restricted_key",pattern:/rk_(?:live|test)_[a-zA-Z0-9]{10,}/},{name:"github_pat",pattern:/ghp_[A-Za-z0-9_]{36,}/},{name:"github_oauth",pattern:/gho_[A-Za-z0-9_]{36,}/},{name:"github_user_token",pattern:/ghu_[A-Za-z0-9_]{36,}/},{name:"github_server_token",pattern:/ghs_[A-Za-z0-9_]{36,}/},{name:"github_fine_grained",pattern:/github_pat_[A-Za-z0-9_]{22,}/},{name:"openai_api_key",pattern:/sk-[a-zA-Z0-9]{20,}(?![a-zA-Z0-9_])/},{name:"anthropic_api_key",pattern:/sk-ant-[a-zA-Z0-9\-_]{20,}/},{name:"private_key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/},{name:"sendgrid_api_key",pattern:/SG\.[a-zA-Z0-9_-]{22,}\.[a-zA-Z0-9_-]{22,}/},{name:"twilio_auth_token",pattern:/TWILIO_AUTH_TOKEN["'=:\s]+[a-f0-9]{32}/},{name:"generic_secret_key",pattern:/[A-Z_]{2,}_SECRET_KEY["'=:\s]+[^\s"']{8,}/},{name:"generic_secret",pattern:/[A-Z_]{2,}_SECRET["'=:\s]+[^\s"']{8,}/},{name:"generic_password",pattern:/[A-Z_]{2,}_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"generic_private_key_var",pattern:/[A-Z_]{2,}_PRIVATE_KEY["'=:\s]+[^\s"']{8,}/}],I=[],pe=0,me=false;function Dt(e){let t=e.slice(0,80);return t.length<=6?"***":t.slice(0,6)+"***"}function Bt(e,t,n,r){if(I.some(l=>l.rule===e&&l.source===t))return;let i={rule:e,source:t,hint:Dt(n),timestamp:Date.now()};r&&(i.location=r),I.push(i);}function W(e,t,n,r){for(let{name:o,pattern:i}of n){let l=i.exec(e);l&&Bt(o,t,l[0],r);}}function It(e){try{let t=window;if(t.__NEXT_DATA__){let n=JSON.stringify(t.__NEXT_DATA__);W(n,"hydration",e,"__NEXT_DATA__");}if(t.__NUXT__){let n=JSON.stringify(t.__NUXT__);W(n,"hydration",e,"__NUXT__");}}catch{}}function Nt(e){try{document.querySelectorAll("script:not([src])").forEach((n,r)=>{let o=n.textContent;o&&o.length>0&&W(o,"scripts",e,`inline-script[${r}]`);});}catch{}}function Ot(e){try{document.querySelectorAll("meta[content]").forEach(n=>{let r=n.getAttribute("content"),o=n.getAttribute("name")||n.getAttribute("property")||"";r&&r.length>10&&W(r,"meta",e,o?`meta[${o}]`:void 0);});}catch{}}function Ut(e){try{document.querySelectorAll("[data-api-key], [data-secret], [data-token], [data-password]").forEach(n=>{let r=n.attributes;for(let o=0;o<r.length;o++){let i=r[o];i.name.startsWith("data-")&&i.value.length>10&&W(i.value,"dom",e,`${n.tagName.toLowerCase()}[${i.name}]`);}});}catch{}}function Dn(e={}){if(me||!E()||(me=true,e.secretScan===false))return;let t=[...Lt,...e.customPatterns??[]],n=e.scanTargets??["hydration","scripts","meta","dom"];setTimeout(()=>{pe=Date.now(),n.includes("hydration")&&It(t),n.includes("scripts")&&Nt(t),n.includes("meta")&&Ot(t),n.includes("dom")&&Ut(t);let r=e.notify??"both";I.length>0&&(r==="console"||r==="both")&&console.warn(`[BlocFeed Security] Found ${I.length} potential secret(s) exposed in client code:`,I.map(o=>`${o.rule} (${o.source}${o.location?`: ${o.location}`:""})`));},100);}function Bn(){return {findings:[...I],scannedAt:pe}}function In(){I=[],pe=0,me=false;}
2
- exports.a=E;exports.b=te;exports.c=ve;exports.d=Pe;exports.e=xe;exports.f=se;exports.g=Fe;exports.h=Jt;exports.i=en;exports.j=wt;exports.k=ce;exports.l=Rn;exports.m=Pn;exports.n=xn;exports.o=Fn;exports.p=Cn;exports.q=Dn;exports.r=Bn;exports.s=In;