seg-cam 1.2.0 → 1.3.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/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/jersey-detector-worker.js +355 -355
- package/package.json +1 -1
- package/public/jersey-detector-worker.js +49 -28
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Se=Object.create;var V=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames,he=Object.getOwnPropertySymbols,Ne=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable;var Te=(e,r,t)=>r in e?V(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,be=(e,r)=>{for(var t in r||(r={}))Ee.call(r,t)&&Te(e,t,r[t]);if(he)for(var t of he(r))He.call(r,t)&&Te(e,t,r[t]);return e};var Je=(e,r)=>{for(var t in r)V(e,t,{get:r[t],enumerable:!0})},De=(e,r,t,E)=>{if(r&&typeof r=="object"||typeof r=="function")for(let c of Ae(r))!Ee.call(e,c)&&c!==t&&V(e,c,{get:()=>r[c],enumerable:!(E=Oe(r,c))||E.enumerable});return e};var Pe=(e,r,t)=>(t=e!=null?Se(Ne(e)):{},De(r||!e||!e.__esModule?V(t,"default",{value:e,enumerable:!0}):t,e)),Ue=e=>De(V({},"__esModule",{value:!0}),e);var B=(e,r,t)=>new Promise((E,c)=>{var S=f=>{try{I(t.next(f))}catch(k){c(k)}},R=f=>{try{I(t.throw(f))}catch(k){c(k)}},I=f=>f.done?E(f.value):Promise.resolve(f.value).then(S,R);I((t=t.apply(e,r)).next())});var je={};Je(je,{DEFAULT_CONFIG:()=>l,JerseyDetector:()=>me,useJerseyWorker:()=>te});module.exports=Ue(je);var s=require("react");var h=require("react");var y=null,x=!1,G=null,fe=0,de=null,D=new Map,Le=0,re=new Map;function te(e,r){let t=(0,h.useRef)(!1),[E,c]=(0,h.useState)(!1),[S,R]=(0,h.useState)(null),I=(0,h.useRef)(!0),f=(0,h.useRef)(!1),k=(0,h.useRef)(`instance_${Math.random().toString(36).substr(2,9)}`),O=(0,h.useRef)(0);(0,h.useEffect)(()=>{var C;if(!e)return;I.current=!0,O.current++;let v=O.current,M=k.current,A=(C=re.get(M))!=null?C:0;return v>A&&(fe++,re.set(M,v)),B(null,null,function*(){var m;if(!y||!Fe(de,e)){y&&(y.terminate(),y=null,x=!1,console.log("[v0 useJerseyWorker] Worker terminated because of change in config"));try{f.current=(m=e.verbose)!=null?m:f.current;let g=r||"/jersey-detector-worker.js";y=new Worker(g),de=e,x=!1,G=null,c(!1),R(null),y.onmessage=d=>{let a=d.data;switch(a.type){case"ready":x=!0,c(!0),f.current&&console.log("[v0 useJerseyWorker] Worker Ready",{device:a.device,dtype:a.dtype,config:a.config});break;case"loading_progress":f.current&&console.log(`[v0 useJerseyWorker] Loaded ${a.progress}% of ${a.file}`);break;case"debug":f.current&&console.log(a.debug_message);break;case"error":let b=a.error_message||"Unknown worker error";console.error("[v0 useJerseyWorker] Worker sent error message:",b),x=!1,G=b,c(!1),R(b);break;case"detect_response":if(a.requestId&&D.has(a.requestId)){let W=D.get(a.requestId);W&&(W.resolve(a),D.delete(a.requestId))}else if(D.size>0){let W=D.entries().next();if(!W.done){let[ne,p]=W.value;p.resolve(a),D.delete(ne)}}break}},y.onerror=d=>{let a=d.message||"Worker initialization error";console.error("[useJerseyWorker] Worker error:",a),x=!1,G=a,c(!1),R(a)},y.postMessage({type:"init",config:e})}catch(g){let d=(g==null?void 0:g.message)||String(g);console.error("[useJerseyWorker] Failed to create worker:",d),c(!1),R(d)}}else c(x),R(G)}),()=>{I.current=!1;let m=k.current,g=re.get(m),d=O.current;g===d&&(fe--,re.delete(m),fe<=0&&y&&(y.terminate(),y=null,x=!1,G=null,de=null,D.clear()))}},[]);let Y=(0,h.useCallback)((v,M,A=.5,P=!0,C)=>B(null,null,function*(){if(!y||!x)throw new Error("Worker not ready");if(t.current)return null;let m=`req_${++Le}_${Date.now()}`;return new Promise((g,d)=>{D.set(m,{resolve:g,reject:d});try{t.current=!0,y.postMessage({type:"detect",requestId:m,dimensions:M,bitmap:v,threshold:A,includeSegmentedImages:P,lastJerseyCount:C},[v])}catch(a){D.delete(m);let b=`Failed to send detect: ${a==null?void 0:a.message}`;d(new Error(b))}finally{t.current=!1}setTimeout(()=>{D.has(m)&&(D.delete(m),d(new Error("Detection timeout")))},1e4)})}),[E]);return{isReady:E,workerReady:E,lastError:S,detect:Y}}function Fe(e,r){return e?JSON.stringify(e)===JSON.stringify(r):!1}var l={TASK:"image-segmentation",MODEL:"BodyPix",BODYPIX_ARCHITECTURE:"MobileNetV1",BODYPIX_MULTIPLIER:.75,BODYPIX_QUANT_BYTES:2,BODYPIX_STRIDE:16,MULTI_SEGMENTATION:!0,SEGMENT_BODY_PARTS:!0,BACKGROUND_SHADE:0,SHIRT_SHADE:170,DETECTION_THRESHOLD:.5,TARGET_PART_ID:12,IMAGES_TO_RETURN:"mask",VERBOSE:!1,MIN_DETECTION_AREA:1e4};var Re=Pe(require("p-limit"));var Ie=require("react/jsx-runtime"),me=(0,s.forwardRef)(({videoRef:e,onWorkerReady:r,onWorkerError:t,onStatsUpdate:E,onSegmentedImage:c,task:S=l.TASK,model:R=l.MODEL,verbose:I=l.VERBOSE,bodyPixArchitecture:f=l.BODYPIX_ARCHITECTURE,bodyPixMultiplier:k=l.BODYPIX_MULTIPLIER,bodyPixQuantBytes:O=l.BODYPIX_QUANT_BYTES,bodyPixStride:Y=l.BODYPIX_STRIDE,multiSegmentation:v=l.MULTI_SEGMENTATION,segmentBodyParts:M=l.SEGMENT_BODY_PARTS,backgroundShade:A=l.BACKGROUND_SHADE,shirtShade:P=l.SHIRT_SHADE,threshold:C=l.DETECTION_THRESHOLD,targetPartId:m=l.TARGET_PART_ID,imagesToReturn:g=l.IMAGES_TO_RETURN,minDetectionArea:d=l.MIN_DETECTION_AREA,throttleMs:a=1e3,onImageSegmentedLimit:b=2,workerUrl:W,className:ne,style:p},ke)=>{let q=(0,s.useRef)(null),oe=(0,s.useRef)(null),U=(0,s.useRef)(null),X=(0,s.useRef)(!1),L=(0,s.useRef)(null),se=(0,s.useRef)(!1),$=(0,s.useRef)([]),we=(0,s.useRef)(null),F=(0,s.useRef)(!1),z=(0,s.useRef)(void 0);z.current=t;let K=(0,s.useRef)({jerseyCount:0,confidence:0,fps:0,processingTime:0}),ae=(0,s.useRef)(0),ie=(0,s.useMemo)(()=>(0,Re.default)(b),[b]),Q=(0,s.useMemo)(()=>({task:S,model:R,verbose:I,bodyPixArchitecture:f,bodyPixMultiplier:k,bodyPixQuantBytes:O,bodyPixStride:Y,multiSegmentation:v,segmentBodyParts:M,backgroundShade:A,shirtShade:P,threshold:C,targetPartId:m,imagesToReturn:g,minDetectionArea:d,mirror:(p==null?void 0:p.transform)==="scaleX(-1)"||typeof(p==null?void 0:p.transform)=="string"&&p.transform.includes("scaleX(-1)")}),[S,R,I,f,k,O,Y,v,M,A,P,C,m,g,d,p==null?void 0:p.transform]),ve=()=>{var n,i;return{width:((n=e.current)==null?void 0:n.videoWidth)||0,height:((i=e.current)==null?void 0:i.videoHeight)||0}},{isReady:N,workerReady:_,lastError:j,detect:Ce}=te(Q,W);(0,s.useEffect)(()=>{_&&console.log("[JerseyDetector] Worker Ready with config:",Q),r==null||r(_)},[_,r,Q]),(0,s.useEffect)(()=>{var n;j&&(F.current=!0,(n=z.current)==null||n.call(z,j))},[j]);let _e=(0,s.useCallback)((n,i)=>{if(ie.activeCount>=b){n.forEach(o=>{var u;return(u=o==null?void 0:o.close)==null?void 0:u.call(o)}),console.warn(`[JerseyDetector] Dropped new segmented images \u2014 max ${b} classifications running`);return}ie(()=>B(null,null,function*(){try{c==null||c(n,i)}catch(o){console.error("[JerseyDetector] Classification error:",o)}finally{n.forEach(o=>{var u;return(u=o==null?void 0:o.close)==null?void 0:u.call(o)})}}))},[c,b,ie]),xe=()=>B(null,null,function*(){var H,ce,ge;let n=e.current,i=q.current;if(F.current||!N||!_||!n||!i||se.current||n.readyState<2||n.paused||n.ended||n.videoWidth===0||n.videoHeight===0)return;!U.current&&!oe.current&&(U.current=i.getContext("bitmaprenderer"),X.current=!!U.current,X.current||(oe.current=i.getContext("2d")));let o=oe.current;if(!X.current&&!o||i.width<=0||i.height<=0)return;let u=null,w=null;try{se.current=!0;let Z=n.videoWidth,ue=n.videoHeight;we.current={width:Z,height:ue},u=yield createImageBitmap(n);let Me=ve(),le=Date.now(),We=le-ae.current>a,Be=K.current.jerseyCount,T=yield Ce(u,Me,C,We,Be);if((T==null?void 0:T.type)==="detect_response"){if(g!=="none"&&((i.width!==Z||i.height!==ue)&&(i.width=Z,i.height=ue),T.bitmap)){let J=T.bitmap;X.current&&U.current?U.current.transferFromImageBitmap(J):(o&&o.drawImage(J,0,0),J.close())}$.current.push(Date.now()),$.current=$.current.filter(J=>Date.now()-J<1e3);let ee={jerseyCount:((H=T.stats)==null?void 0:H.jerseyCount)||0,confidence:((ce=T.stats)==null?void 0:ce.confidence)||0,fps:$.current.length,processingTime:((ge=T.stats)==null?void 0:ge.processingTime)||0},pe=K.current;K.current=ee;let ye=le-ae.current>a||ee.jerseyCount!==pe.jerseyCount||ee.confidence!==pe.confidence;ye&&E&&(E(ee),ae.current=le),ye&&T.segmentedImages&&T.segmentedImages.length>0&&c&&_e(T.segmentedImages,T.bboxes)}}catch(Z){F.current=!0}finally{u==null||u.close(),se.current=!1}});return(0,s.useImperativeHandle)(ke,()=>({get isReady(){return N},get lastError(){return j},get stats(){return K.current},capture:(n="image/jpeg",i=.92)=>{let o=e.current,u=q.current;if(!o||o.videoWidth<=0||o.videoHeight<=0)throw new Error("Video not ready for capture");let w=document.createElement("canvas");w.width=o.videoWidth,w.height=o.videoHeight;let H=w.getContext("2d");if(!H)throw new Error("Failed to get context for capture canvas");let ce=Q.mirror;return H.drawImage(o,0,0,w.width,w.height),u&&u.width>0&&u.height>0&&H.drawImage(u,0,0,w.width,w.height),w.toDataURL(n,i)}}),[N,j,_]),(0,s.useEffect)(()=>{if(!_||!N||F.current)return;let n=e.current,i=q.current;if(!n||!i||n.videoWidth===0||n.videoHeight===0){let u=setTimeout(()=>{L.current=requestAnimationFrame(()=>{})},100);return()=>clearTimeout(u)}(i.width!==n.videoWidth||i.height!==n.videoHeight)&&(i.width=n.videoWidth,i.height=n.videoHeight);let o=()=>B(null,null,function*(){!_||!N||F.current||(yield xe(),L.current=requestAnimationFrame(o))});return L.current=requestAnimationFrame(o),()=>{L.current&&cancelAnimationFrame(L.current)}},[_,N]),(0,Ie.jsx)("canvas",{ref:q,className:`absolute inset-0 pointer-events-none ${ne||""}`,style:be({zIndex:10,width:"100%",height:"100%"},p)})});me.displayName="JerseyDetector";0&&(module.exports={DEFAULT_CONFIG,JerseyDetector,useJerseyWorker});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var We=Object.defineProperty;var ye=Object.getOwnPropertySymbols;var Be=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable;var he=(n,s,a)=>s in n?We(n,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):n[s]=a,Te=(n,s)=>{for(var a in s||(s={}))Be.call(s,a)&&he(n,a,s[a]);if(ye)for(var a of ye(s))Se.call(s,a)&&he(n,a,s[a]);return n};var W=(n,s,a)=>new Promise((k,l)=>{var B=c=>{try{D(a.next(c))}catch(R){l(R)}},b=c=>{try{D(a.throw(c))}catch(R){l(R)}},D=c=>c.done?k(c.value):Promise.resolve(c.value).then(B,b);D((a=a.apply(n,s)).next())});import{forwardRef as Je,useImperativeHandle as Pe,useRef as h,useEffect as de,useMemo as be,useCallback as Ue}from"react";import{useEffect as Oe,useState as Ee,useCallback as Ae,useRef as j}from"react";var p=null,_=!1,V=null,ue=0,le=null,E=new Map,Ne=0,ee=new Map;function fe(n,s){let a=j(!1),[k,l]=Ee(!1),[B,b]=Ee(null),D=j(!0),c=j(!1),R=j(`instance_${Math.random().toString(36).substr(2,9)}`),S=j(0);Oe(()=>{var v;if(!n)return;D.current=!0,S.current++;let w=S.current,x=R.current,O=(v=ee.get(x))!=null?v:0;return w>O&&(ue++,ee.set(x,w)),W(null,null,function*(){var d;if(!p||!He(le,n)){p&&(p.terminate(),p=null,_=!1,console.log("[v0 useJerseyWorker] Worker terminated because of change in config"));try{c.current=(d=n.verbose)!=null?d:c.current;let m=s||"/jersey-detector-worker.js";p=new Worker(m),le=n,_=!1,V=null,l(!1),b(null),p.onmessage=f=>{let t=f.data;switch(t.type){case"ready":_=!0,l(!0),c.current&&console.log("[v0 useJerseyWorker] Worker Ready",{device:t.device,dtype:t.dtype,config:t.config});break;case"loading_progress":c.current&&console.log(`[v0 useJerseyWorker] Loaded ${t.progress}% of ${t.file}`);break;case"debug":c.current&&console.log(t.debug_message);break;case"error":let T=t.error_message||"Unknown worker error";console.error("[v0 useJerseyWorker] Worker sent error message:",T),_=!1,V=T,l(!1),b(T);break;case"detect_response":if(t.requestId&&E.has(t.requestId)){let M=E.get(t.requestId);M&&(M.resolve(t),E.delete(t.requestId))}else if(E.size>0){let M=E.entries().next();if(!M.done){let[re,g]=M.value;g.resolve(t),E.delete(re)}}break}},p.onerror=f=>{let t=f.message||"Worker initialization error";console.error("[useJerseyWorker] Worker error:",t),_=!1,V=t,l(!1),b(t)},p.postMessage({type:"init",config:n})}catch(m){let f=(m==null?void 0:m.message)||String(m);console.error("[useJerseyWorker] Failed to create worker:",f),l(!1),b(f)}}else l(_),b(V)}),()=>{D.current=!1;let d=R.current,m=ee.get(d),f=S.current;m===f&&(ue--,ee.delete(d),ue<=0&&p&&(p.terminate(),p=null,_=!1,V=null,le=null,E.clear()))}},[]);let G=Ae((w,x,O=.5,J=!0,v)=>W(null,null,function*(){if(!p||!_)throw new Error("Worker not ready");if(a.current)return null;let d=`req_${++Ne}_${Date.now()}`;return new Promise((m,f)=>{E.set(d,{resolve:m,reject:f});try{a.current=!0,p.postMessage({type:"detect",requestId:d,dimensions:x,bitmap:w,threshold:O,includeSegmentedImages:J,lastJerseyCount:v},[w])}catch(t){E.delete(d);let T=`Failed to send detect: ${t==null?void 0:t.message}`;f(new Error(T))}finally{a.current=!1}setTimeout(()=>{E.has(d)&&(E.delete(d),f(new Error("Detection timeout")))},1e4)})}),[k]);return{isReady:k,workerReady:k,lastError:B,detect:G}}function He(n,s){return n?JSON.stringify(n)===JSON.stringify(s):!1}var u={TASK:"image-segmentation",MODEL:"BodyPix",BODYPIX_ARCHITECTURE:"MobileNetV1",BODYPIX_MULTIPLIER:.75,BODYPIX_QUANT_BYTES:2,BODYPIX_STRIDE:16,MULTI_SEGMENTATION:!0,SEGMENT_BODY_PARTS:!0,BACKGROUND_SHADE:0,SHIRT_SHADE:170,DETECTION_THRESHOLD:.5,TARGET_PART_ID:12,IMAGES_TO_RETURN:"mask",VERBOSE:!1,MIN_DETECTION_AREA:1e4};import Le from"p-limit";import{jsx as Fe}from"react/jsx-runtime";var De=Je(({videoRef:n,onWorkerReady:s,onWorkerError:a,onStatsUpdate:k,onSegmentedImage:l,task:B=u.TASK,model:b=u.MODEL,verbose:D=u.VERBOSE,bodyPixArchitecture:c=u.BODYPIX_ARCHITECTURE,bodyPixMultiplier:R=u.BODYPIX_MULTIPLIER,bodyPixQuantBytes:S=u.BODYPIX_QUANT_BYTES,bodyPixStride:G=u.BODYPIX_STRIDE,multiSegmentation:w=u.MULTI_SEGMENTATION,segmentBodyParts:x=u.SEGMENT_BODY_PARTS,backgroundShade:O=u.BACKGROUND_SHADE,shirtShade:J=u.SHIRT_SHADE,threshold:v=u.DETECTION_THRESHOLD,targetPartId:d=u.TARGET_PART_ID,imagesToReturn:m=u.IMAGES_TO_RETURN,minDetectionArea:f=u.MIN_DETECTION_AREA,throttleMs:t=1e3,onImageSegmentedLimit:T=2,workerUrl:M,className:re,style:g},Re)=>{let Y=h(null),te=h(null),P=h(null),q=h(!1),U=h(null),ne=h(!1),X=h([]),Ie=h(null),L=h(!1),$=h(void 0);$.current=a;let z=h({jerseyCount:0,confidence:0,fps:0,processingTime:0}),oe=h(0),se=be(()=>Le(T),[T]),K=be(()=>({task:B,model:b,verbose:D,bodyPixArchitecture:c,bodyPixMultiplier:R,bodyPixQuantBytes:S,bodyPixStride:G,multiSegmentation:w,segmentBodyParts:x,backgroundShade:O,shirtShade:J,threshold:v,targetPartId:d,imagesToReturn:m,minDetectionArea:f,mirror:(g==null?void 0:g.transform)==="scaleX(-1)"||typeof(g==null?void 0:g.transform)=="string"&&g.transform.includes("scaleX(-1)")}),[B,b,D,c,R,S,G,w,x,O,J,v,d,m,f,g==null?void 0:g.transform]),ke=()=>{var e,o;return{width:((e=n.current)==null?void 0:e.videoWidth)||0,height:((o=n.current)==null?void 0:o.videoHeight)||0}},{isReady:A,workerReady:C,lastError:F,detect:we}=fe(K,M);de(()=>{C&&console.log("[JerseyDetector] Worker Ready with config:",K),s==null||s(C)},[C,s,K]),de(()=>{var e;F&&(L.current=!0,(e=$.current)==null||e.call($,F))},[F]);let ve=Ue((e,o)=>{if(se.activeCount>=T){e.forEach(r=>{var i;return(i=r==null?void 0:r.close)==null?void 0:i.call(r)}),console.warn(`[JerseyDetector] Dropped new segmented images \u2014 max ${T} classifications running`);return}se(()=>W(null,null,function*(){try{l==null||l(e,o)}catch(r){console.error("[JerseyDetector] Classification error:",r)}finally{e.forEach(r=>{var i;return(i=r==null?void 0:r.close)==null?void 0:i.call(r)})}}))},[l,T,se]),Ce=()=>W(null,null,function*(){var N,ae,me;let e=n.current,o=Y.current;if(L.current||!A||!C||!e||!o||ne.current||e.readyState<2||e.paused||e.ended||e.videoWidth===0||e.videoHeight===0)return;!P.current&&!te.current&&(P.current=o.getContext("bitmaprenderer"),q.current=!!P.current,q.current||(te.current=o.getContext("2d")));let r=te.current;if(!q.current&&!r||o.width<=0||o.height<=0)return;let i=null,I=null;try{ne.current=!0;let Q=e.videoWidth,ie=e.videoHeight;Ie.current={width:Q,height:ie},i=yield createImageBitmap(e);let _e=ke(),ce=Date.now(),xe=ce-oe.current>t,Me=z.current.jerseyCount,y=yield we(i,_e,v,xe,Me);if((y==null?void 0:y.type)==="detect_response"){if(m!=="none"&&((o.width!==Q||o.height!==ie)&&(o.width=Q,o.height=ie),y.bitmap)){let H=y.bitmap;q.current&&P.current?P.current.transferFromImageBitmap(H):(r&&r.drawImage(H,0,0),H.close())}X.current.push(Date.now()),X.current=X.current.filter(H=>Date.now()-H<1e3);let Z={jerseyCount:((N=y.stats)==null?void 0:N.jerseyCount)||0,confidence:((ae=y.stats)==null?void 0:ae.confidence)||0,fps:X.current.length,processingTime:((me=y.stats)==null?void 0:me.processingTime)||0},ge=z.current;z.current=Z;let pe=ce-oe.current>t||Z.jerseyCount!==ge.jerseyCount||Z.confidence!==ge.confidence;pe&&k&&(k(Z),oe.current=ce),pe&&y.segmentedImages&&y.segmentedImages.length>0&&l&&ve(y.segmentedImages,y.bboxes)}}catch(Q){L.current=!0}finally{i==null||i.close(),ne.current=!1}});return Pe(Re,()=>({get isReady(){return A},get lastError(){return F},get stats(){return z.current},capture:(e="image/jpeg",o=.92)=>{let r=n.current,i=Y.current;if(!r||r.videoWidth<=0||r.videoHeight<=0)throw new Error("Video not ready for capture");let I=document.createElement("canvas");I.width=r.videoWidth,I.height=r.videoHeight;let N=I.getContext("2d");if(!N)throw new Error("Failed to get context for capture canvas");let ae=K.mirror;return N.drawImage(r,0,0,I.width,I.height),i&&i.width>0&&i.height>0&&N.drawImage(i,0,0,I.width,I.height),I.toDataURL(e,o)}}),[A,F,C]),de(()=>{if(!C||!A||L.current)return;let e=n.current,o=Y.current;if(!e||!o||e.videoWidth===0||e.videoHeight===0){let i=setTimeout(()=>{U.current=requestAnimationFrame(()=>{})},100);return()=>clearTimeout(i)}(o.width!==e.videoWidth||o.height!==e.videoHeight)&&(o.width=e.videoWidth,o.height=e.videoHeight);let r=()=>W(null,null,function*(){!C||!A||L.current||(yield Ce(),U.current=requestAnimationFrame(r))});return U.current=requestAnimationFrame(r),()=>{U.current&&cancelAnimationFrame(U.current)}},[C,A]),Fe("canvas",{ref:Y,className:`absolute inset-0 pointer-events-none ${re||""}`,style:Te({zIndex:10,width:"100%",height:"100%"},g)})});De.displayName="JerseyDetector";export{u as DEFAULT_CONFIG,De as JerseyDetector,fe as useJerseyWorker};
|