"use strict";var Rn=Object.create;var v=Object.defineProperty;var Sn=Object.getOwnPropertyDescriptor;var Pn=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 Pn(n))!Un.call(t,r)&&r!==e&&v(t,r,{get:()=>n[r],enumerable:!(o=Sn(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)),In=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=In(mt);var P=Bn(require("./opencvAdapter")),Mn=require("@shopify/react-native-skia"),S=require("./maskSemanticPalette"),U=require("./maskSegmentRuntime"),L=require("./maskOutlinePaths"),An=require("./maskSemanticPalette");function M(){return(0,U.getMaskSegmentRuntimeConfig)().mask}const an=5,Cn=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<=Cn?t.polygons:[un(t.bbox)]}function Nn(t){return t.name===S.BASEBOARD_SEMANTIC_NAME}function En(t,n,e){const o=new Uint8Array(t),r=M().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/M().quantStep)*M().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,S.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(M().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=M().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,c),r.lineTo(o.x+g*o.w,c),r.lineTo(o.x+g*o.w,l),r.lineTo(o.x+f*o.w,l),r.close()}a=-1}}}}function Fn(t,n,e,o,r,i,u=M().baseboardMinRunPx){for(let a=0;a=0){if(f-s>=u){const p=s/e,A=f/e;i.moveTo(r.x+p*r.w,b),i.lineTo(r.x+A*r.w,b),i.lineTo(r.x+A*r.w,y),i.lineTo(r.x+p*r.w,y),i.close()}s=-1}}}}function fn(t,n,e,o,r,i,u,a){if(n-tp.name===f.name);g>=0&&(m[g]=f.id)}const l=s.length,b=M().baseboardMinRunPx;for(let f=0;f0;h&&g<0&&(g=x),!h&&g>=0&&(fn(g,x,f,i,u,e,a.get(c),b),g=-1)}let d=-1;if(x=0&&(d=h)}if(d!==A){if(A>=0&&p>=0){const h=m[A];fn(p,x,f,i,u,e,a.get(h),b)}A=d,p=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 c=0;cr&&(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+M().baseboardJunctionRowMarginPx)return!1;const a=M().kickBridgeHalfWPx;for(let s=-M().baseboardJunctionVReachPx;s<=M().baseboardJunctionVReachPx;s++){const m=u+s;if(m<0||m>=o)continue;const c=m*e;for(let l=-a;l<=a;l++){const b=i+l;if(!(b<0||b>=e)&&n[c+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,S.isStrictBaseboardPixel)(a,s,m))return!0;const c=F(a,s,m);return(0,S.getBaseboardStripQuantKeys)().has(c)?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,S.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=M().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,S.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),c=m.length,l=M().blackThreshold,b=_n(),y=vn(),f=new Int32Array(c),g=new Int32Array(c),p=new Int32Array(c),A=new Int32Array(c),k=new Uint8Array(c),x=new Int32Array(c),d=[],h=new Uint8Array(o);let B=0;const I=s.get(S.BASEBOARD_SEMANTIC_NAME);f.fill(n),g.fill(e),p.fill(-1),A.fill(-1);const N=t;for(let R=0;Rp[w]&&(p[w]=T),RA[w]&&(A[w]=R))}}const C=1/n,Y=1/e;for(let R=0;R0&&(a[b]=l),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]=l;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,M().maxRegionColors)}async function at(t,n,e,o,r){const i=await P.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]=p.pop();if(g+=1,l=Math.min(l,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,p.push([x-1,d]))}if(x+10){const h=(d-1)*n+x;t[h]&&!r[h]&&(r[h]=1,p.push([x,d-1]))}if(d+1x.name),b=m.map(x=>{const{label:d,name:h,hex:B,color:I}=x,N=Nn(x);try{const C=N?jn(a,n,e):r.bboxes.get(h);if(!C)return __DEV__&&console.warn(`[MaskSegment] ${h} no valid contour, skipped`),null;const Y=[un(C)];return{id:d,name:h,hex:B,color:I,area:r.counts.get(h)??0,bbox:C,polygons:Y,outlinePolygons:Y,thinStrip:N}}catch(C){return __DEV__&&console.warn(`[MaskSegment] Color #${d} extraction failed:`,C instanceof Error?C.message:String(C)),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,M().maxRegionColors),f=new Map(y.map(x=>[x.name,x.id])),g=__DEV__?performance.now():0,{pick:p,workAreas:A}=rt(r.labels,c,f,a,n,e),k=ot(p,n,e);for(const x of y){const d=A.get(x.name);d!=null&&(x.area=d)}return{regions:y,pickMap:{buffer:k,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}=P.default.matToBuffer(t);return Z(e,o,r,n).regions}