"use strict";var Rn=Object.create;var v=Object.defineProperty;var Pn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var kn=Object.getPrototypeOf,Un=Object.prototype.hasOwnProperty;var wn=(t,n)=>{for(var e in n)v(t,e,{get:n[e],enumerable:!0})},on=(t,n,e,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Sn(n))!Un.call(t,r)&&r!==e&&v(t,r,{get:()=>n[r],enumerable:!(o=Pn(n,r))||o.enumerable});return t};var Bn=(t,n,e)=>(e=t!=null?Rn(kn(t)):{},on(n||!t||!t.__esModule?v(e,"default",{value:t,enumerable:!0}):e,t)),Cn=t=>on(v({},"__esModule",{value:!0}),t);var mt={};wn(mt,{appendLabelMaskToPathBuilder:()=>Fn,appendMaskBinaryToPathBuilder:()=>On,buildAllRegionMaskPaths:()=>Wn,buildAllRegionOutlinePaths:()=>L.buildAllRegionOutlinePaths,buildBaseboardBinaryFromMask:()=>Kn,buildRegionOutlinePathForRegion:()=>L.buildRegionOutlinePathForRegion,buildRegionOutlinePolygons:()=>Tn,downsampleMaskDataForPaths:()=>Qn,extractRegionsFromMask:()=>st,extractRegionsFromMaskBuffer:()=>ut,extractRegionsFromMaskBufferSync:()=>Z,getMaskQuantKey:()=>zn,isBaseboardMaskPixel:()=>$n,isBaseboardPixel:()=>An.isStrictBaseboardPixel,isKickPlatePixel:()=>Gn,upscaleBinaryMask:()=>Jn});module.exports=Cn(mt);var k=Bn(require("./opencvAdapter")),Mn=require("@shopify/react-native-skia"),P=require("./maskSemanticPalette"),U=require("./maskSegmentRuntime"),L=require("./maskOutlinePaths"),An=require("./maskSemanticPalette");function p(){return(0,U.getMaskSegmentRuntimeConfig)().mask}const an=5,In=10;function un(t){return[{x:t.x,y:t.y},{x:t.x+t.w,y:t.y},{x:t.x+t.w,y:t.y+t.h},{x:t.x,y:t.y+t.h}]}function Tn(t){return t.outlinePolygons&&t.outlinePolygons.length>0?t.outlinePolygons:t.thinStrip||t.polygons.length<=In?t.polygons:[un(t.bbox)]}function Nn(t){return t.name===P.BASEBOARD_SEMANTIC_NAME}function En(t,n,e){const o=new Uint8Array(t),r=p().kickBridgeHalfWPx;for(let i=0;i=n||(o[i*n+s]=255)}return o}function H(t,n,e){return t.map(o=>[{x:o.minX/n,y:o.y/e},{x:(o.maxX+1)/n,y:o.y/e},{x:(o.maxX+1)/n,y:(o.y+1)/e},{x:o.minX/n,y:(o.y+1)/e}])}function q(t){const n=Math.min(255,Math.round(t/p().quantStep)*p().quantStep);return n>=192?n===255?4:3:n>=128?2:n>=64?1:0}function sn(t,n,e){return q(t)*25+q(n)*5+q(e)}function Ln(){const t=(0,U.getMaskRuntimeRevision)();return mn===t&&j||(j=new Set([...(0,P.getBaseboardStripQuantKeys)()].map(n=>{const[e,o,r]=n.split(",").map(i=>Number(i));return sn(e,o,r)})),mn=t),j}let mn=-1,j=null,ln=-1,O=null;function Yn(t){const n=new Uint8Array(256);for(let e=0;e<256;e++){const o=Math.min(255,Math.round(e/t)*t);o>=192?n[e]=o===255?4:3:o>=128?n[e]=2:o>=64?n[e]=1:n[e]=0}return n}function _n(){const t=(0,U.getMaskRuntimeRevision)();return ln===t&&O||(O=Yn(p().quantStep),ln=t),O}function V(t){return t>=4?255:t>=3?192:t>=2?128:t>=1?64:0}function Xn(t){const n=t/25|0,e=t%25/5|0,o=t%5;return[V(n),V(e),V(o)]}let cn=-1,K=null,J=null,bn=-1;function vn(){const t=(0,U.getMaskRuntimeRevision)();if(bn===t&&J)return J;const n=new Uint8Array(125);for(const e of Ln())n[e]=1;return J=n,bn=t,n}function jn(t,n,e){let o=n,r=e,i=-1,u=-1;for(let a=0;ai&&(i=m),au&&(u=a))}return i<0?null:{x:o/n,y:r/e,w:(i-o+1)/n,h:(u-r+1)/e}}function On(t,n,e,o,r,i=p().baseboardMinRunPx){for(let u=0;u0;if(y&&a<0&&(a=b),!y&&a>=0){if(b-a>=i){const f=a/n,g=b/n;r.moveTo(o.x+f*o.w,l),r.lineTo(o.x+g*o.w,l),r.lineTo(o.x+g*o.w,c),r.lineTo(o.x+f*o.w,c),r.close()}a=-1}}}}function Fn(t,n,e,o,r,i,u=p().baseboardMinRunPx){for(let a=0;a=0){if(f-s>=u){const M=s/e,A=f/e;i.moveTo(r.x+M*r.w,b),i.lineTo(r.x+A*r.w,b),i.lineTo(r.x+A*r.w,y),i.lineTo(r.x+M*r.w,y),i.close()}s=-1}}}}function fn(t,n,e,o,r,i,u,a){if(n-tM.name===f.name);g>=0&&(m[g]=f.id)}const c=s.length,b=p().baseboardMinRunPx;for(let f=0;f0;h&&g<0&&(g=x),!h&&g>=0&&(fn(g,x,f,i,u,e,a.get(l),b),g=-1)}let d=-1;if(x=0&&(d=h)}if(d!==A){if(A>=0&&M>=0){const h=m[A];fn(M,x,f,i,u,e,a.get(h),b)}A=d,M=d>=0?x:-1}}}const y=new Map;for(const[f,g]of a)y.set(f,g);return y}function $(t,n,e,o){const r=[];for(let i=0;i0;s&&u<0&&(u=a),!s&&u>=0&&(a-u>=o&&r.push({minX:u,maxX:a-1,y:i}),u=-1)}}return r}function Dn(t){if(t.length===0)return null;let n=1,e=1,o=0,r=0;for(const i of t)for(const u of i)n=Math.min(n,u.x),e=Math.min(e,u.y),o=Math.max(o,u.x),r=Math.max(r,u.y);return{x:n,y:e,w:o-n,h:r-e}}function bt(t,n,e){let o=0;for(let l=0;lr&&(r=i))}return r<0?null:{minY:o,maxY:r}}function dn(t,n,e,o,r){if(!r)return!1;const i=t%e,u=(t-i)/e;if(ur.maxY+p().baseboardJunctionRowMarginPx)return!1;const a=p().kickBridgeHalfWPx;for(let s=-p().baseboardJunctionVReachPx;s<=p().baseboardJunctionVReachPx;s++){const m=u+s;if(m<0||m>=o)continue;const l=m*e;for(let c=-a;c<=a;c++){const b=i+c;if(!(b<0||b>=e)&&n[l+b])return!0}}return!1}function Vn(t,n,e,o){const r=new Uint8Array(n*e),i=o??xn(t,n,e);for(let a=0;a=n||r>=e)return!1;if(i)return i[r*n+o]>0;const u=(r*n+o)*3,a=t[u],s=t[u+1],m=t[u+2];if(Q(a,s,m))return!1;if((0,P.isStrictBaseboardPixel)(a,s,m))return!0;const l=F(a,s,m);return(0,P.getBaseboardStripQuantKeys)().has(l)?xn(t,n,e)[r*n+o]>0:!1}function zn(t,n,e){return F(t,n,e)}function Gn(t,n,e){return(0,P.isStrictBaseboardPixel)(t,n,e)}function hn(t,n){const e=Math.min(t.x,n.x),o=Math.min(t.y,n.y),r=Math.max(t.x+t.w,n.x+n.w),i=Math.max(t.y+t.h,n.y+n.h);return{x:e,y:o,w:r-e,h:i-o}}function Q(t,n,e){const o=p().blackThreshold;return t[e.name,o])),pn=t,W}function Zn(){const t=(0,U.getMaskRuntimeRevision)();if(cn===t&&K)return K;const n=new Uint8Array(125);n.fill(E);const e=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors,o=G();for(const r of e){const i=o.get(r.name);if(i===void 0)continue;const{b:u,g:a,r:s}=r.bgr;n[sn(u,a,s)]=i}for(let r=0;r<125;r++){if(n[r]!==E)continue;const[i,u,a]=Xn(r),s=(0,P.classifyBgrPixelToSemantic)(i,u,a);n[r]=o.get(s)??E}return K=n,cn=t,n}function nt(t,n,e){const o=n*e,r=new Uint8Array(o);r.fill(E);const i=new Map,u=new Map,a=Zn(),s=G(),m=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors.map(R=>R.name),l=m.length,c=p().blackThreshold,b=_n(),y=vn(),f=new Int32Array(l),g=new Int32Array(l),M=new Int32Array(l),A=new Int32Array(l),S=new Uint8Array(l),x=new Int32Array(l),d=[],h=new Uint8Array(o);let C=0;const T=s.get(P.BASEBOARD_SEMANTIC_NAME);f.fill(n),g.fill(e),M.fill(-1),A.fill(-1);const N=t;for(let R=0;RM[w]&&(M[w]=I),RA[w]&&(A[w]=R))}}const B=1/n,Y=1/e;for(let R=0;R0&&(a[b]=c),s.set(m,(s.get(m)??0)+1);continue}const y=t[b];if(y===E)continue;const f=n[y];if(!f)continue;const g=e.get(f);g!==void 0&&(a[b]=g+1),s.set(f,(s.get(f)??0)+1)}return{pick:a,workAreas:s}}function ot(t,n,e){const o=n*e,r=new Uint8Array(o);r.set(t);for(let i=1;i=4){r[a]=c;break}}}return r}function it(t,n,e){const o=(0,U.getMaskSegmentRuntimeConfig)().mask.semanticColors.map(r=>r.name);return o.map(r=>{if((t.get(r)??0)r!=null).sort((r,i)=>(t.get(i.name)??0)-(t.get(r.name)??0)).slice(0,p().maxRegionColors)}async function at(t,n,e,o,r){const i=await k.default.contourArea(t);if(i(b=Math.min(b,A.x),f=Math.max(f,A.x),y=Math.min(y,A.y),g=Math.max(g,A.y),{x:A.x/n,y:A.y/e})),area:i,bbox:{x:b/n,y:y/e,w:(f-b+1)/n,h:(g-y+1)/e}}}function dt(t,n,e,o){const r=new Uint8Array(n*e),i=[];let u=0,a=null;for(let s=0;s0;){const[x,d]=M.pop();if(g+=1,c=Math.min(c,x),b=Math.max(b,x),y=Math.min(y,d),f=Math.max(f,d),x>0){const h=d*n+(x-1);t[h]&&!r[h]&&(r[h]=1,M.push([x-1,d]))}if(x+10){const h=(d-1)*n+x;t[h]&&!r[h]&&(r[h]=1,M.push([x,d-1]))}if(d+1x.name),b=m.map(x=>{const{label:d,name:h,hex:C,color:T}=x,N=Nn(x);try{const B=N?jn(a,n,e):r.bboxes.get(h);if(!B)return __DEV__&&console.warn(`[MaskSegment] ${h} no valid contour, skipped`),null;const Y=[un(B)];return{id:d,name:h,hex:C,color:T,area:r.counts.get(h)??0,bbox:B,polygons:Y,outlinePolygons:Y,thinStrip:N}}catch(B){return __DEV__&&console.warn(`[MaskSegment] Color #${d} extraction failed:`,B instanceof Error?B.message:String(B)),null}}).filter(x=>x!=null);b.sort((x,d)=>d.area-x.area),b.forEach((x,d)=>{x.id=d});const y=b.slice(0,p().maxRegionColors),f=new Map(y.map(x=>[x.name,x.id])),g=__DEV__?performance.now():0,{pick:M,workAreas:A}=rt(r.labels,l,f,a,n,e),S=ot(M,n,e);for(const x of y){const d=A.get(x.name);d!=null&&(x.area=d)}return{regions:y,pickMap:{buffer:S,cols:n,rows:e},labels:r.labels,baseboardBinary:a,segCols:n,segRows:e}}async function st(t,n){const{buffer:e,cols:o,rows:r}=k.default.matToBuffer(t);return Z(e,o,r,n).regions}