@crystaldesign/real-time-viewer-next 26.12.0-beta.2 → 26.12.0-beta.21

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.
Files changed (31) hide show
  1. package/build/esm/{DeckCutoutSubsystem-5d0fb500.js → DeckCutoutSubsystem-34516143.js} +3 -1
  2. package/build/esm/{SunLensflare-9cbd6d72.js → SunLensflare-55ce48ee.js} +1 -1
  3. package/build/esm/{WaterSurface-715ff751.js → WaterSurface-ff270e38.js} +1 -1
  4. package/build/esm/{index-cc012549.js → index-8c31a811.js} +162 -43
  5. package/build/esm/index.js +1 -1
  6. package/build/types/real-time-viewer-next/src/RealTimeRendererNext.d.ts +5 -0
  7. package/build/types/real-time-viewer-next/src/RealTimeRendererNext.d.ts.map +1 -1
  8. package/build/types/real-time-viewer-next/src/core/SceneRenderer.d.ts.map +1 -1
  9. package/build/types/real-time-viewer-next/src/core/camera/useMaterialFade.d.ts.map +1 -1
  10. package/build/types/real-time-viewer-next/src/core/environment/deckCutout/collectDeckTriangles.d.ts.map +1 -1
  11. package/build/types/real-time-viewer-next/src/core/materials/fadeState.d.ts +23 -0
  12. package/build/types/real-time-viewer-next/src/core/materials/fadeState.d.ts.map +1 -0
  13. package/build/types/real-time-viewer-next/src/core/materials/fadeState.test.d.ts +2 -0
  14. package/build/types/real-time-viewer-next/src/core/materials/fadeState.test.d.ts.map +1 -0
  15. package/build/types/real-time-viewer-next/src/core/useFrameloopVisibility.d.ts +2 -1
  16. package/build/types/real-time-viewer-next/src/core/useFrameloopVisibility.d.ts.map +1 -1
  17. package/build/types/real-time-viewer-next/src/core/water/CausticReceiver.d.ts.map +1 -1
  18. package/build/types/real-time-viewer-next/src/hooks/useAssembledScene.d.ts.map +1 -1
  19. package/build/types/real-time-viewer-next/src/hooks/useHostPropsSync.d.ts +2 -2
  20. package/build/types/real-time-viewer-next/src/hooks/useHostPropsSync.d.ts.map +1 -1
  21. package/build/types/real-time-viewer-next/src/loadingGates.d.ts +5 -3
  22. package/build/types/real-time-viewer-next/src/loadingGates.d.ts.map +1 -1
  23. package/build/types/real-time-viewer-next/src/store/slices/glGeneration.d.ts +7 -0
  24. package/build/types/real-time-viewer-next/src/store/slices/glGeneration.d.ts.map +1 -1
  25. package/build/types/real-time-viewer-next/src/utils/hashString.d.ts +6 -0
  26. package/build/types/real-time-viewer-next/src/utils/hashString.d.ts.map +1 -0
  27. package/build/types/real-time-viewer-next/src/utils/suspense.d.ts.map +1 -1
  28. package/build/umd/964.real-time-viewer-next.umd.min.js +1 -1
  29. package/build/umd/real-time-viewer-next.umd.min.js +1 -1
  30. package/build/umd/report.html +1 -1
  31. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"glGeneration.d.ts","sourceRoot":"","sources":["../../../../../../src/store/slices/glGeneration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,0FAA0F;IAC1F,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,8GAA8G;IAC9G,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kGAAkG;IAClG,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,mFAAmF;IACnF,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gGAAgG;IAChG,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAKD,eAAO,MAAM,uBAAuB,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAwB5H,CAAC"}
1
+ {"version":3,"file":"glGeneration.d.ts","sourceRoot":"","sources":["../../../../../../src/store/slices/glGeneration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,0FAA0F;IAC1F,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,8GAA8G;IAC9G,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kGAAkG;IAClG,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,mFAAmF;IACnF,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gGAAgG;IAChG,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAKD,eAAO,MAAM,uBAAuB,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,iBAAiB,CA4B5H,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Two independent 32-bit hashes (djb2 + sdbm) plus the length, for callers that keep a digest of a
3
+ * string instead of the string itself. A collision would have to hit all three at once.
4
+ */
5
+ export declare function hashString(text: string): string;
6
+ //# sourceMappingURL=hashString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashString.d.ts","sourceRoot":"","sources":["../../../../../src/utils/hashString.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../../../../src/utils/suspense.ts"],"names":[],"mappings":"AAgEA;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,CAAC,CAwC5E;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAEjE;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
1
+ {"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../../../../src/utils/suspense.ts"],"names":[],"mappings":"AAyDA;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,CAAC,CAwC5E;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAEjE;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see 964.real-time-viewer-next.umd.min.js.LICENSE.txt */
2
- "use strict";(self.webpackChunkCrystaldesignRealTimeViewerNext=self.webpackChunkCrystaldesignRealTimeViewerNext||[]).push([[964],{6964:(t,r,a)=>{a.r(r),a.d(r,{DeckCutoutSubsystem:()=>DeckCutoutSubsystem});var o=a(7363),i=a(7080),l=a(5150),u=a(7659),c=a(4088),m=a(7620),v=a(8683),h=a(6831),p=a(8141),y="Element#",g=new h.ZzF,x=new h.ZzF;function topLevelElements(t){return t.filter((function(t){for(var r=t.parent;r;r=r.parent)if(r.name.startsWith(y))return!1;return!0}))}var b=a(7534);function _createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return _arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function _arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var M=1e-9;function polygonSignedArea(t){for(var r=0,a=0;a<t.length;a++){var o=(0,i.Z)(t[a],2),l=o[0],u=o[1],c=(0,i.Z)(t[(a+1)%t.length],2),m=c[0];r+=l*c[1]-m*u}return r/2}function simplifyChain(t,r,a,o,l){for(var u=[r,a];u.length>0;){var c=u.pop(),m=u.pop();if(c-m<2)for(var v=m;v<c;v++)l.push(t[v]);else{for(var h=(0,i.Z)(t[m],2),p=h[0],y=h[1],g=(0,i.Z)(t[c],2),x=g[0],b=g[1],A=Math.hypot(x-p,b-y)||M,S=-1,w=-1,k=m+1;k<c;k++){var C=(0,i.Z)(t[k],2),Z=C[0],T=C[1],O=Math.abs((x-p)*(y-T)-(p-Z)*(b-y))/A;O>S&&(S=O,w=k)}S<=o?l.push(t[m]):u.push(w,c,m,w)}}}function simplifyClosedPolygon(t,r){if(t.length<4||r<=0)return(0,b.Z)(t);for(var a=(0,i.Z)(t[0],2),o=a[0],l=a[1],u=1,c=-1,m=1;m<t.length;m++){var v=Math.hypot(t[m][0]-o,t[m][1]-l);v>c&&(c=v,u=m)}var h=[];simplifyChain(t,0,u,r,h);var p=[].concat((0,b.Z)(t.slice(u)),[t[0]]);return simplifyChain(p,0,p.length-1,r,h),h}function segmentsCross(t,r,a,o,i,l,u,c){var m=function cross(t,r,a,o,i,l){return(a-t)*(l-r)-(o-r)*(i-t)},v=m(t,r,a,o,i,l),h=m(t,r,a,o,u,c),p=m(i,l,u,c,t,r),y=m(i,l,u,c,a,o);return(v>0&&h<0||v<0&&h>0)&&(p>0&&y<0||p<0&&y>0)}function ensureSimplePolygon(t){if(t.length<3)return null;if(function isSimplePolygon(t){var r=t.length;if(r<4)return!0;for(var a=0;a<r;a++)for(var o=(0,i.Z)(t[a],2),l=o[0],u=o[1],c=(0,i.Z)(t[(a+1)%r],2),m=c[0],v=c[1],h=a+1;h<r;h++)if(h!==a+1&&(0!==a||h!==r-1)){var p=(0,i.Z)(t[h],2),y=p[0],g=p[1],x=(0,i.Z)(t[(h+1)%r],2);if(segmentsCross(l,u,m,v,y,g,x[0],x[1]))return!1}return!0}(t))return Math.abs(polygonSignedArea(t))<=M?null:{points:(0,b.Z)(t),repaired:!1};var r=function convexHull(t){if(t.length<3)return(0,b.Z)(t);var r=(0,b.Z)(t).sort((function(t,r){return t[0]-r[0]||t[1]-r[1]})),a=function cross(t,r,a){return(r[0]-t[0])*(a[1]-t[1])-(r[1]-t[1])*(a[0]-t[0])},o=function build(t){var r,o=[],i=_createForOfIteratorHelper(t);try{for(i.s();!(r=i.n()).done;){for(var l=r.value;o.length>=2&&a(o[o.length-2],o[o.length-1],l)<=0;)o.pop();o.push(l)}}catch(t){i.e(t)}finally{i.f()}return o},i=o(r),l=o((0,b.Z)(r).reverse());return[].concat((0,b.Z)(i.slice(0,-1)),(0,b.Z)(l.slice(0,-1)))}(t);return r.length<3||Math.abs(polygonSignedArea(r))<=M?null:{points:r,repaired:!0}}function rasterMask_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function rasterMask_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return rasterMask_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?rasterMask_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function rasterMask_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var A=[new Uint8Array(0),new Uint8Array(0)];function pooledMaskBuffer(t,r){A[t].length<r&&(A[t]=new Uint8Array(r));var a=A[t].subarray(0,r);return a.fill(0),a}function closeMask(t,r,a,o){if(!(o<1)){var i=pooledMaskBuffer(1,t.length);boxPassX(t,i,r,a,o,!0),boxPassZ(i,t,r,a,o,!0),boxPassX(t,i,r,a,o,!1),boxPassZ(i,t,r,a,o,!1)}}function fillEnclosed(t,r,a){for(var o=pooledMaskBuffer(1,t.length),i=new Int32Array(t.length),l=0,u=function visit(r){0===t[r]&&0===o[r]&&(o[r]=1,i[l++]=r)},c=0;c<r;c++)u(c),u((a-1)*r+c);for(var m=0;m<a;m++)u(m*r),u(m*r+r-1);for(;l>0;){var v=i[--l],h=v%r,p=(v-h)/r;h>0&&u(v-1),h<r-1&&u(v+1),p>0&&u(v-r),p<a-1&&u(v+r)}for(var y=0,g=0;g<t.length;g++)0===t[g]&&0===o[g]&&(t[g]=1,y+=1);return y}function offsetMask(t,r,a,o,i){var l=pooledMaskBuffer(1,t.length);boxPassX(t,l,r,a,o,i),boxPassZ(l,t,r,a,o,i)}function windowSizes(t,r){for(var a=new Int32Array(r),o=0;o<r;o++)a[o]=Math.min(r-1,o+t)-Math.max(0,o-t)+1;return a}function boxPassX(t,r,a,o,i,l){for(var u=windowSizes(i,a),c=0;c<o;c++){for(var m=c*a,v=0,h=0;h<=i&&h<a;h++)v+=t[m+h];for(var p=0;p<a;p++){r[m+p]=(l?v>0:v===u[p])?1:0;var y=p-i,g=p+i+1;y>=0&&(v-=t[m+y]),g<a&&(v+=t[m+g])}}}function boxPassZ(t,r,a,o,i,l){for(var u=new Int32Array(a),c=windowSizes(i,o),m=0;m<=i&&m<o;m++)for(var v=m*a,h=0;h<a;h++)u[h]+=t[v+h];for(var p=0;p<o;p++){for(var y=p*a,g=c[p],x=0;x<a;x++)r[y+x]=(l?u[x]>0:u[x]===g)?1:0;var b=p-i,M=p+i+1;if(b>=0)for(var A=b*a,S=0;S<a;S++)u[S]-=t[A+S];if(M<o)for(var w=M*a,k=0;k<a;k++)u[k]+=t[w+k]}}var S=[[],[[3,0]],[[0,1]],[[3,1]],[[1,2]],[[3,0],[1,2]],[[0,2]],[[3,2]],[[2,3]],[[0,2]],[[0,1],[2,3]],[[1,2]],[[1,3]],[[0,1]],[[3,0]],[]];function marchingSquaresLoops(t,r,a,o,l,u){for(var c=function edgeKey(t,a,o){return 0===t?2*(o*r+a):2===t?2*((o+1)*r+a):3===t?2*(o*r+a)+1:2*(o*r+a+1)+1},m=function edgePoint(t){var a=Math.floor(t/2),i=a%r,c=Math.floor(a/r);return t%2==0?[o+(i+1)*u,l+(c+.5)*u]:[o+(i+.5)*u,l+(c+1)*u]},v=new Map,h=function link(t,r){var a=v.get(t);a?a.push(r):v.set(t,[r]);var o=v.get(r);o?o.push(t):v.set(r,[t])},p=0;p<a-1;p++)for(var y=0;y<r-1;y++){var g=t[p*r+y]|t[p*r+y+1]<<1|t[(p+1)*r+y+1]<<2|t[(p+1)*r+y]<<3;if(0!==g&&15!==g){var x,b=rasterMask_createForOfIteratorHelper(S[g]);try{for(b.s();!(x=b.n()).done;){var M=(0,i.Z)(x.value,2),A=M[0],w=M[1];h(c(A,y,p),c(w,y,p))}}catch(t){b.e(t)}finally{b.f()}}}var k,C=new Set,Z=[],T=rasterMask_createForOfIteratorHelper(v.keys());try{var O=function _loop(){var t=k.value;if(C.has(t))return 1;for(var r=[],a=t,o=-1;!C.has(a);){var i;C.add(a),r.push(m(a));var l=(null!==(i=v.get(a))&&void 0!==i?i:[]).find((function(t){return t!==o&&!C.has(t)}));if(void 0===l)break;o=a,a=l}r.length>=3&&Z.push(r)};for(T.s();!(k=T.n()).done;)O()}catch(t){T.e(t)}finally{T.f()}return Z}var w=16e6,k=4e6;function footprint_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function footprint_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return footprint_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?footprint_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function footprint_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}function matchArticleRule(t,r){var a,o=footprint_createForOfIteratorHelper(t);try{for(o.s();!(a=o.n()).done;){var i=a.value,l=i.match.trim();if(""===l||"*"===l)return i;if(void 0!==r)if(l.split(",").map((function(t){return t.trim()})).filter((function(t){return t.length>0})).some((function(t){return r.includes(t)})))return i}}catch(t){o.e(t)}finally{o.f()}return null}function articleFootprint_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function articleFootprint_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return articleFootprint_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?articleFootprint_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function articleFootprint_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var C=.6,Z=new h.yGw,T=new h.Pa4;function measuredRectFootprint(t,r){var a=t.minX-r,o=t.maxX+r,i=t.minZ-r,l=t.maxZ+r;return o-a<.1||l-i<.1?null:[[a,i],[o,i],[o,l],[a,l]]}function traceArticleFootprint(t,r,a,o,l,u,c,m){var v,h=[],p=[],y=articleFootprint_createForOfIteratorHelper(t);try{for(y.s();!(v=y.n()).done;){v.value.traverse((function(t){var r=t;if(r.isMesh&&r.visible){var a=r.geometry.getAttribute("position");a&&(h.push(r),p.push("".concat(r.name,":").concat(a.count)))}}))}}catch(t){y.e(t)}finally{y.f()}if(0===h.length)return null;var g=a.maxX-a.minX,x=a.maxY-a.minY,b=a.maxZ-a.minZ,M="".concat(o.toFixed(3),"|").concat((a.maxY+m).toFixed(3),"|").concat(l.toFixed(3),"|").concat(g.toFixed(3),"x").concat(x.toFixed(3),"x").concat(b.toFixed(3),"|").concat(p.join(","));if(!c.current||c.current.signature!==M){var A=performance.now(),S=0,C=h.map((function(t){var a=t.geometry.getAttribute("position");S+=a.count,Z.multiplyMatrices(r,t.matrixWorld);for(var o=new Float32Array(3*a.count),i=0;i<a.count;i++)T.set(a.getX(i),a.getY(i),a.getZ(i)).applyMatrix4(Z),o[3*i]=T.x,o[3*i+1]=T.y+m,o[3*i+2]=T.z;return o})),O=function forEachSliceTriangle(t){for(var r=0,a=0;a<h.length;a++)for(var i=h[a].geometry,l=i.getAttribute("position"),u=C[a],c=i.index,m=c?Math.floor(c.count/3):Math.floor(l.count/3),v=0;v<m;v++){var p=c?c.getX(3*v):3*v,y=c?c.getX(3*v+1):3*v+1,g=c?c.getX(3*v+2):3*v+2;u[3*p+1]<o&&u[3*y+1]<o&&u[3*g+1]<o||(r+=1,t&&t(u[3*p],u[3*p+2],u[3*y],u[3*y+2],u[3*g],u[3*g+2]))}return r},X=O(null),E=new Float32Array(6*X),I=0;O((function(t,r,a,o,i,l){E[I]=t,E[I+1]=r,E[I+2]=a,E[I+3]=o,E[I+4]=i,E[I+5]=l,I+=6}));var D=function traceFootprintFromTriangles(t){var r,a,o,l,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=null!==(r=u.cellSize)&&void 0!==r?r:.005,m=Math.floor(t.length/6);if(m<1||c<=0)return[];for(var v=1/0,h=-1/0,p=1/0,y=-1/0,g=0;g<6*m;g+=2){var x=t[g],b=t[g+1];x<v&&(v=x),x>h&&(h=x),b<p&&(p=b),b>y&&(y=b)}if(!Number.isFinite(v)||h-v<c||y-p<c)return[];var M=(Math.ceil((h-v)/c)+1)*(Math.ceil((y-p)/c)+1),A=M>k?c*Math.sqrt(M/k):c,S=null!==(a=u.simplifyTolerance)&&void 0!==a?a:A,C=null!==(o=u.closeGap)&&void 0!==o?o:.02,Z=C<=0?0:Math.max(1,Math.round(C/(2*A))),T=null!==(l=u.offset)&&void 0!==l?l:0,O=Math.round(Math.abs(T)/A),X=T>0,E=Z+(X?O:0)+1,I=v-E*A,D=p-E*A,_=Math.ceil((h-v)/A)+2*E+1,L=Math.ceil((y-p)/A)+2*E+1;if(_*L>w)return[];for(var j=pooledMaskBuffer(0,_*L),z=function cellOf(t,r,a){return Math.min(a-E-1,Math.max(E,Math.floor((t-r)/A)))},P=function mark(t,r){j[z(r,D,L)*_+z(t,I,_)]=1},Y=0;Y<m;Y++){var N=6*Y,R=t[N],B=t[N+1],H=t[N+2],U=t[N+3],W=t[N+4],V=t[N+5];P(R,B),P(H,U),P(W,V);var q=Math.abs((H-R)*(V-B)-(W-R)*(U-B)),G=Math.max(Math.hypot(H-R,U-B),Math.hypot(W-H,V-U),Math.hypot(R-W,B-V));if((G>1e-9?q/G:0)<1.5*A)for(var $=0,K=[[R,B,H,U],[H,U,W,V],[W,V,R,B]];$<K.length;$++)for(var J=(0,i.Z)(K[$],4),Q=J[0],ee=J[1],te=J[2],re=J[3],ne=Math.ceil(Math.hypot(te-Q,re-ee)/(.7*A)),ae=1;ae<ne;ae++){var oe=ae/ne;P(Q+(te-Q)*oe,ee+(re-ee)*oe)}for(var ie=z(Math.min(B,U,V),D,L),le=z(Math.max(B,U,V),D,L),ue=ie;ue<=le;ue++){for(var ce=D+(ue+.5)*A,fe=1/0,se=-1/0,me=0;me<3;me++){var ve=0===me?R:1===me?H:W,de=0===me?B:1===me?U:V,he=0===me?H:1===me?W:R,pe=0===me?U:1===me?V:B;if(de!==pe&&!(ce<Math.min(de,pe)||ce>=Math.max(de,pe))){var ye=ve+(ce-de)/(pe-de)*(he-ve);ye<fe&&(fe=ye),ye>se&&(se=ye)}}if(!(fe>se)){var ge=Math.max(E,Math.ceil((fe-I)/A-.5)),xe=Math.min(_-E-1,Math.floor((se-I)/A-.5));ge<=xe&&j.fill(1,ue*_+ge,ue*_+xe+1)}}}closeMask(j,_,L,Z);var be=fillEnclosed(j,_,L);O>=1&&offsetMask(j,_,L,O,X);var Me=u.diagnostics;if(Me){Me.enclosedFilled=be;for(var Ae=0,Se=0;Se<j.length;Se++)Ae+=j[Se];Me.filledCells=Ae}var Fe=marchingSquaresLoops(j,_,L,I,D,A);if(Me&&(Me.loops=Fe.length),0===Fe.length)return[];for(var we=Fe[0],ke=Math.abs(polygonSignedArea(we)),Ce=ke,Ze=1;Ze<Fe.length;Ze++){var Te=Math.abs(polygonSignedArea(Fe[Ze]));Ce+=Te,Te>ke&&(ke=Te,we=Fe[Ze])}var Oe=simplifyClosedPolygon(we,S);return Me&&(Me.chosenAreaShare=Ce>0?ke/Ce:0,Me.pointsBeforeSimplify=we.length,Me.pointsAfterSimplify=Oe.length),Oe.length>=3?Oe:[]}(E,{cellSize:.005,offset:l,diagnostics:u});return c.current={signature:M,relPoints:D.map((function(t){var r=(0,i.Z)(t,2),o=r[0],l=r[1];return[o-a.minX,l-a.minZ]})),triCount:X,vertexCount:S},{points:D,triCount:X,vertexCount:S,retraced:!0,traceMs:performance.now()-A}}var _=c.current,L=_.relPoints,j=_.triCount,z=_.vertexCount;return{points:L.map((function(t){var r=(0,i.Z)(t,2),o=r[0],l=r[1];return[o+a.minX,l+a.minZ]})),triCount:j,vertexCount:z,retraced:!1,traceMs:0}}function anchorElements_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function anchorElements_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return anchorElements_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?anchorElements_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function anchorElements_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var O=.001,X=new h.Pa4,E=new h.Pa4;function anchorDelta1D(t,r,a,o,i,l){return"min"===t?r-a+l-o:"max"===t?r+a-l-i:r+l-(o+i)/2}var I=new h.Vkp,D=new h.Pa4,_=new h.Pa4,L=new h.Pa4;function measureDiagnostics_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function measureDiagnostics_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return measureDiagnostics_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?measureDiagnostics_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function measureDiagnostics_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var j=a(4399);function ownKeys(t,r){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable}))),a.push.apply(a,o)}return a}function _objectSpread(t){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(a),!0).forEach((function(r){(0,l.Z)(t,r,a[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):ownKeys(Object(a)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(a,r))}))}return t}var z=(0,v.getLogger)("RealTimeViewer","DeckCutoutArticleSync");function DeckCutoutArticleSync(){var t=(0,c.D)((function(t){return t.scene})),r=(0,u.K)((function(t){return t.scene.deckCutout})),a=(0,m.tb)((function(t){return t.setWaterVolumeOverride})),l=(0,m.tb)((function(t){return t.setDeckCutoutFootprintOverride})),v=(0,o.useRef)(0),b=(0,o.useRef)(0),M=(0,o.useRef)(!1),A=(0,o.useRef)(null),S=(0,o.useRef)(null),w=(0,o.useRef)(!1),k=(0,o.useRef)(0),Z=r.enabled&&r.articleSync.enabled,T=Z&&r.elementAnchor.enabled,P=Z&&r.waterSync.enabled;(0,o.useEffect)((function(){return Z||l(null),function(){return l(null)}}),[Z,l]),(0,o.useEffect)((function(){var t=function clear(){Object.keys(m.tb.getState().elementAnchorOffsets).length>0&&m.tb.getState().setElementAnchorOffsets({})};return T||t(),t}),[T]),(0,o.useEffect)((function(){return P||a(null),function(){return a(null)}}),[P,a]);var Y=(0,o.useMemo)((function(){return r.nodeMatch.split(",").map((function(t){return t.trim()})).filter((function(t){return t.length>0}))}),[r.nodeMatch]),N=(0,m.tb)((function(t){return t.articleVersion})),R=(0,m.tb)((function(t){return t.decorVersion}));return(0,o.useEffect)((function(){Z&&(w.current=!0,k.current=0)}),[N,R,Z]),(0,c.F)((function(){if(Z&&0!==Y.length&&(v.current+=1,w.current||v.current%30==1)){var o=m.tb.getState(),u=o.waterVolumeOverride,c=o.deckCutoutFootprintOverride,N=!1,R=function finishMeasure(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t)return k.current=0,void(w.current=!1);var r=m.tb.getState(),a=N||r.waterVolumeOverride!==u||r.deckCutoutFootprintOverride!==c;if(a)return k.current=0,void(w.current=!0);k.current+=1,k.current>=3&&(w.current=!1)};b.current+=1;var B=function measureArticle(t,r,a){var o,i,l=[],u=[],c=[];if(x.makeEmpty(),t.traverse((function(t){var o;if(0===c.length){var i=t;i.isMesh&&r.some((function(t){return i.name.includes(t)}))&&c.push(i)}if(t.name.startsWith(y)&&(l.push(t),g.setFromObject(t),!g.isEmpty())){x.union(g);var m=null===(o=a.get((0,p.zs)(t.name)))||void 0===o?void 0:o.articleCodex;void 0!==m&&u.push({codex:m,area:(g.max.x-g.min.x)*(g.max.z-g.min.z)})}})),u.sort((function(t,r){return r.area-t.area})),x.isEmpty())return null;var m=c[0];if(!m)return null;var v=(new h.yGw).copy(m.matrixWorld).invert(),b=m.geometry;b.boundingBox||b.computeBoundingBox();var M=null!==(o=null===(i=b.boundingBox)||void 0===i?void 0:i.max.y)&&void 0!==o?o:0,A=x.min.y;return x.applyMatrix4(v),{rect:{minX:x.min.x,maxX:x.max.x,minY:x.min.y,maxY:x.max.y,minZ:x.min.z,maxZ:x.max.z},worldBottomY:A,elementObjects:l,codexesByArea:u,floorWorld:m.matrixWorld,floorLocal:v,floorTopY:M}}(t,Y,m.tb.getState().elementsInfo);if(!B)return a(null),l(null),void R(!0);var H=function pickArticleRule(t,r){var a,o,i=null===(a=r[0])||void 0===a?void 0:a.codex,l=matchArticleRule(t,void 0),u=articleFootprint_createForOfIteratorHelper(r);try{for(u.s();!(o=u.n()).done;){var c=o.value,m=matchArticleRule(t,c.codex);if(m){l=m,i=c.codex;break}}}catch(t){u.e(t)}finally{u.f()}return{rule:l,primaryCodex:i}}(r.articleRules,B.codexesByArea),U=H.rule,W=H.primaryCodex,V=r.elementAnchor,q=T?(V.alignTopToDeck?B.floorTopY-B.rect.maxY:0)+V.offsetY:0,G=function deriveArticleFootprint(t,r,a,o){var l,u,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,m={points:null,rim:null,sampledCount:0,source:"",repairNote:"",tracedBounds:"",trace:{filledCells:0,enclosedFilled:0,loops:0,chosenAreaShare:0,pointsBeforeSimplify:0,pointsAfterSimplify:0}};if(!r||!r.footprintFromGeometry)return m;var v=t.rect,h=t.floorLocal,p=t.floorTopY,y=t.elementObjects,g=v.maxX-v.minX,x=v.maxZ-v.minZ,b=traceArticleFootprint(topLevelElements(y),h,v,p-r.footprintSliceDepth,a,m.trace,o,c),M=1/0,A=-1/0,S=1/0,w=-1/0;if(b&&b.points.length>=3){var k,Z=articleFootprint_createForOfIteratorHelper(b.points);try{for(Z.s();!(k=Z.n()).done;){var T=(0,i.Z)(k.value,2),O=T[0],X=T[1];O<M&&(M=O),O>A&&(A=O),X<S&&(S=X),X>w&&(w=X)}}catch(t){Z.e(t)}finally{Z.f()}M+=a,A-=a,S+=a,w-=a,m.tracedBounds="X [".concat(M.toFixed(2),", ").concat(A.toFixed(2),"] Z [").concat(S.toFixed(2),", ").concat(w.toFixed(2),"]")}var E=A>M&&A-M>=g*C&&w-S>=x*C;if(b&&E){var I;m.rim={minX:M,maxX:A,minZ:S,maxZ:w};var D=ensureSimplePolygon(b.points);return null!=D&&D.repaired&&(m.repairNote=" | HULL-REPAIRED, traced outline self-intersects (concavities lost)"),null===D&&(m.repairNote=" | outline UNUSABLE even as a hull"),m.points=null!==(I=null==D?void 0:D.points)&&void 0!==I?I:null,m.sampledCount=b.points.length,m.source=b.retraced?"geometry traced in ".concat(b.traceMs.toFixed(1)," ms (").concat(b.vertexCount," verts, ").concat(b.triCount," tris in slice)"):"geometry cached (".concat(b.triCount," tris in slice)"),m}return m.points=measuredRectFootprint(v,a),m.sampledCount=null!==(l=null===(u=m.points)||void 0===u?void 0:u.length)&&void 0!==l?l:0,m.source=A>M?"geometry: TRACE COVERS ONLY ".concat(((A-M)/g*100).toFixed(0),"%×").concat(((w-S)/x*100).toFixed(0),"% of the article — fell back to the measured rect"):"geometry: NO TRIANGLES ABOVE THE SLICE PLANE — fell back to the measured rect",m}(B,U,r.articleSync.margin,S,q),$=G.rim?_objectSpread(_objectSpread({},B.rect),G.rim):B.rect,K=function measureLog(t){var r,a,o,l=t.measurement,u=t.rule,c=t.primaryCodex,m=t.footprint,v=t.hole,h=l.rect,p=l.floorTopY,y=m.points,g=1/0,x=-1/0,b=1/0,M=-1/0;if(y){var A,S=measureDiagnostics_createForOfIteratorHelper(y);try{for(S.s();!(A=S.n()).done;){var w=(0,i.Z)(A.value,2),k=w[0],C=w[1];k<g&&(g=k),k>x&&(x=k),C<b&&(b=C),C>M&&(M=C)}}catch(t){S.e(t)}finally{S.f()}}var Z=y?[g,x,b,M]:null;return{key:"".concat(null!=c?c:"","|").concat(null!==(r=null==u?void 0:u.match)&&void 0!==r?r:"","|").concat(m.sampledCount,"|").concat(null!==(a=null==y?void 0:y.length)&&void 0!==a?a:0,"|").concat(null!==(o=null==Z?void 0:Z.map((function(t){return t.toFixed(2)})).join(","))&&void 0!==o?o:""),message:function message(){var t,r=h.maxX-h.minX,a=h.maxZ-h.minZ,o=u&&u.footprintFromGeometry?" | Y: deck top ".concat(p.toFixed(2),", article [").concat(h.minY.toFixed(2),", ").concat(h.maxY.toFixed(2),"], slice keeps ≥ ").concat((p-u.footprintSliceDepth).toFixed(2)):"";if(""===m.source)t=" | NO outline rule matched this codex → NO COLLAR, the authored hole stays fully open";else if(Z&&y){var i=[Z[0]-(v.centerX-v.halfExtentX),v.centerX+v.halfExtentX-Z[1],Z[2]-(v.centerZ-v.halfExtentZ),v.centerZ+v.halfExtentZ-Z[3]].map((function(t){return t.toFixed(2)}));t=" | measured ".concat(r.toFixed(2),"×").concat(a.toFixed(2))+(""===m.tracedBounds?"":" | traced ".concat(m.sampledCount," pts ").concat(m.tracedBounds))+" | outline ".concat(y.length," pts X [").concat(Z[0].toFixed(2),", ").concat(Z[1].toFixed(2),"] Z [").concat(Z[2].toFixed(2),", ").concat(Z[3].toFixed(2),"]")+" | hole X [".concat((v.centerX-v.halfExtentX).toFixed(2),", ").concat((v.centerX+v.halfExtentX).toFixed(2),"] Z [").concat((v.centerZ-v.halfExtentZ).toFixed(2),", ").concat((v.centerZ+v.halfExtentZ).toFixed(2),"]")+" | slack X ".concat(i[0],"/").concat(i[1]," Z ").concat(i[2],"/").concat(i[3])+" | ".concat(m.source).concat(m.repairNote)+(m.trace.loops>0?" | trace: ".concat(m.trace.filledCells," cells (").concat(m.trace.enclosedFilled," filled in), ").concat(m.trace.loops," loop(s), kept ").concat((100*m.trace.chosenAreaShare).toFixed(0),"% of contour area, ").concat(m.trace.pointsBeforeSimplify," → ").concat(m.trace.pointsAfterSimplify," pts"):"")}else t=" | ".concat(m.source," produced NO usable outline (").concat(m.sampledCount," pts)").concat(m.repairNote," → NO COLLAR, the authored hole stays fully open");return"[DeckCutout] article codex: ".concat(null!=c?c:"(unknown)"," → rule: ").concat(u?"'".concat(u.match,"'"):"(none — articleSync globals)").concat(o).concat(t)}}}({measurement:B,rule:U,primaryCodex:W,footprint:G,hole:r.authoredHole});A.current!==K.key&&(A.current=K.key,z.debug(K.message()));var J=T?function deriveElementAnchor(t){var r=t.rect,a=t.hole,o=t.anchor,i=t.floorWorld,l=t.elementObjects,u=t.deckTopLocalY,c=t.currentOffsets,m=anchorDelta1D(o.anchorX,a.centerX,a.halfExtentX,r.minX,r.maxX,o.offsetX),v=anchorDelta1D(o.anchorZ,a.centerZ,a.halfExtentZ,r.minZ,r.maxZ,o.offsetZ),h=(r.minX+r.maxX)/2,y=(r.minZ+r.maxZ)/2,g=r.maxY,x=(o.alignTopToDeck?u-g:0)+o.offsetY;X.set(h+m,g+x,y+v).applyMatrix4(i),E.set(h,g,y).applyMatrix4(i);var b=X.x-E.x,M=X.y-E.y,A=X.z-E.z;if(Math.abs(b)<O&&Math.abs(M)<O&&Math.abs(A)<O)return null;var S=topLevelElements(l);if(0===S.length)return null;var w,k={},C=anchorElements_createForOfIteratorHelper(S);try{for(C.s();!(w=C.n()).done;){var Z,T=w.value,I=(0,p.zs)(T.name),D=null!==(Z=c[I])&&void 0!==Z?Z:[0,0,0];k[I]=[D[0]+b,D[1]+M,D[2]+A]}}catch(t){C.e(t)}finally{C.f()}return{delta:{dx:m,dy:x,dz:v},offsets:k}}({rect:$,hole:r.authoredHole,anchor:r.elementAnchor,floorWorld:B.floorWorld,elementObjects:B.elementObjects,deckTopLocalY:B.floorTopY,currentOffsets:m.tb.getState().elementAnchorOffsets}):null;N=null!==J,J&&m.tb.getState().setElementAnchorOffsets(J.offsets);var Q=J?function shiftRect(t,r){return{minX:t.minX+r.dx,maxX:t.maxX+r.dx,minY:t.minY+r.dy,maxY:t.maxY+r.dy,minZ:t.minZ+r.dz,maxZ:t.maxZ+r.dz}}($,J.delta):$;l(G.points&&J?G.points.map((function(t){var r=(0,i.Z)(t,2),a=r[0],o=r[1];return[a+J.delta.dx,o+J.delta.dz]})):G.points),M.current||null===m.tb.getState().deckCutoutFootprintOverride||(M.current=!0,(0,j._m)("deck: first footprint published",{measures:b.current})),P&&a(function deriveWaterVolume(t){var r=t.rect,a=t.waterSync,o=t.floorWorld,i=t.articleWorldBottomY,l=t.waterlineY,u=a.inset,c=Math.max(r.maxX-r.minX-2*u,.1),m=Math.max(r.maxZ-r.minZ-2*u,.1);D.set((r.minX+r.maxX)/2+a.offsetX,0,(r.minZ+r.maxZ)/2+a.offsetZ),D.applyMatrix4(o),I.setFromMatrix4(o),_.set(c,0,0).applyMatrix3(I),L.set(0,0,m).applyMatrix3(I);var v=Math.abs(_.x)+Math.abs(L.x),h=Math.abs(_.z)+Math.abs(L.z),p=Math.max(l-i,.5);return{center:[D.x,l,D.z],size:[v,p,h]}}({rect:Q,waterSync:r.waterSync,floorWorld:B.floorWorld,articleWorldBottomY:B.worldBottomY,waterlineY:m.tb.getState().resolvedEnvironment.water.volume.center[1]})),R()}})),null}var P=12,Y=1e-12;function solve3(t,r){var a=t[0]*(t[4]*t[8]-t[5]*t[7])-t[1]*(t[3]*t[8]-t[5]*t[6])+t[2]*(t[3]*t[7]-t[4]*t[6]);if(Math.abs(a)<Y)return null;return[function d(r,a,o){return r*(t[4]*t[8]-t[5]*t[7])-t[1]*(a*t[8]-t[5]*o)+t[2]*(a*t[7]-t[4]*o)}(r[0],r[1],r[2])/a,(t[0]*(r[1]*t[8]-t[5]*r[2])-r[0]*(t[3]*t[8]-t[5]*t[6])+t[2]*(t[3]*r[2]-r[1]*t[6]))/a,(t[0]*(t[4]*r[2]-r[1]*t[7])-t[1]*(t[3]*r[2]-r[1]*t[6])+r[0]*(t[3]*t[7]-t[4]*t[6]))/a]}function fitAffineUV(t,r){var a=3*r;if(a<3)return null;for(var o=0,i=0,l=0,u=0,c=0,m=0,v=0,h=0,p=0,y=0,g=0,x=0;x<a;x++){var b=4*x,M=t[b],A=t[b+1],S=t[b+2],w=t[b+3];o+=M*M,i+=M*A,l+=M,u+=A*A,c+=A,m+=M*S,v+=A*S,h+=S,p+=M*w,y+=A*w,g+=w}var k=[o,i,l,i,u,c,l,c,a],C=solve3(k,[m,v,h]),Z=solve3(k,[p,y,g]);if(!C||!Z)return null;for(var T=0,O=0;O<a;O++){var X=4*O,E=t[X],I=t[X+1],D=C[0]*E+C[1]*I+C[2]-t[X+2],_=Z[0]*E+Z[1]*I+Z[2]-t[X+3];T+=D*D+_*_}var L=(Math.hypot(C[0],C[1])+Math.hypot(Z[0],Z[1]))/2,j=Math.sqrt(T/a);return{ux:C[0],uz:C[1],u0:C[2],vx:Z[0],vz:Z[1],v0:Z[2],residualMetres:L>Y?j/L:1/0}}function segmentDistanceSq(t,r,a,o,i,l){var u=i-a,c=l-o,m=u*u+c*c,v=m<Y?0:Math.max(0,Math.min(1,((t-a)*u+(r-o)*c)/m)),h=a+v*u-t,p=o+v*c-r;return h*h+p*p}function triangleDistanceSq(t,r,a,o,i,l,u,c){if((i-a)*(c-o)-(u-a)*(l-o)==0)return 1/0;var m=(i-a)*(r-o)-(l-o)*(t-a),v=(u-i)*(r-l)-(c-l)*(t-i),h=(a-u)*(r-c)-(o-c)*(t-u);return m>=0&&v>=0&&h>=0||m<=0&&v<=0&&h<=0?0:Math.min(segmentDistanceSq(t,r,a,o,i,l),segmentDistanceSq(t,r,i,l,u,c),segmentDistanceSq(t,r,u,c,a,o))}function nearestTriangleLinear(t,r,a,o){for(var i=1/0,l=-1,u=0;u<r;u++){var c=u*P,m=triangleDistanceSq(a,o,t[c],t[c+1],t[c+4],t[c+5],t[c+8],t[c+9]);if(m<i&&(i=m,l=u,0===m))break}return l}var N=1e7;function isFiniteXZ(t,r,a,o,i,l){return Number.isFinite(t)&&Number.isFinite(r)&&Number.isFinite(a)&&Number.isFinite(o)&&Number.isFinite(i)&&Number.isFinite(l)}function gridDim(t,r){return Math.min(256,Math.max(1,Math.ceil(t/r)))}function cellOf(t,r,a,o){var i=Math.floor((t-r)/a);return i<0?0:i>=o?o-1:i}function buildTriangleGridIndex(t,r){if(r<64)return null;for(var a=1/0,o=-1/0,i=1/0,l=-1/0,u=0,c=0,m=0;m<r;m++){var v=m*P,h=t[v],p=t[v+1],y=t[v+4],g=t[v+5],x=t[v+8],b=t[v+9];if(isFiniteXZ(h,p,y,g,x,b)){var M=Math.min(h,y,x),A=Math.max(h,y,x),S=Math.min(p,g,b),w=Math.max(p,g,b);M<a&&(a=M),A>o&&(o=A),S<i&&(i=S),w>l&&(l=w),u+=Math.max(A-M,w-S),c+=1}}if(c<64||r-c>.25*r)return null;var k=o-a,C=l-i,Z=Math.max(k,C);if(!(Z>0))return null;var T=k*C/c,O=Math.max(u/c,T>0?Math.sqrt(T):0,Z/256),X=gridDim(k,O),E=gridDim(C,O),I=Math.max(1024,4*c);X*E>I&&(X=gridDim(k,O*=Math.sqrt(X*E/I)),E=gridDim(C,O));for(var D=X*E,_=new Int32Array(4*r),L=new Int32Array(D+1),j=[],z=0;z<r;z++){var Y=z*P,N=t[Y],R=t[Y+1],B=t[Y+4],H=t[Y+5],U=t[Y+8],W=t[Y+9];if(isFiniteXZ(N,R,B,H,U,W)&&(B-N)*(W-R)-(U-N)*(H-R)!=0){var V=cellOf(Math.min(N,B,U),a,O,X),q=cellOf(Math.max(N,B,U),a,O,X),G=cellOf(Math.min(R,H,W),i,O,E),$=cellOf(Math.max(R,H,W),i,O,E);if((q-V+1)*($-G+1)>64)_[4*z]=-1,j.push(z);else{_[4*z]=V,_[4*z+1]=q,_[4*z+2]=G,_[4*z+3]=$;for(var K=G;K<=$;K++)for(var J=V;J<=q;J++)L[K*X+J+1]+=1}}else _[4*z]=-1,j.push(z)}if(j.length>.25*r)return null;for(var Q=0;Q<D;Q++)L[Q+1]+=L[Q];for(var ee=new Int32Array(L[D]),te=L.slice(0,D),re=0;re<r;re++){var ne=_[4*re];if(!(ne<0))for(var ae=_[4*re+1],oe=_[4*re+2],ie=_[4*re+3],le=oe;le<=ie;le++)for(var ue=ne;ue<=ae;ue++){var ce=le*X+ue;ee[te[ce]]=re,te[ce]+=1}}return{triangleCount:r,minX:a,minZ:i,cellSize:O,cols:X,rows:E,cellStart:L,cellItems:ee,extras:Int32Array.from(j)}}function sampleNearestTriangleUV(t,r,a,o,i){var l=i&&i.triangleCount===r?function nearestTriangleIndexed(t,r,a,o){var i=o.minX,l=o.minZ,u=o.cellSize,c=o.cols,m=o.rows,v=o.cellStart,h=o.cellItems,p=o.extras,y=Math.floor((r-i)/u),g=Math.floor((a-l)/u);if(!Number.isFinite(y)||!Number.isFinite(g)||Math.abs(y)>N||Math.abs(g)>N)return nearestTriangleLinear(t,o.triangleCount,r,a);for(var x=1/0,b=-1,M=function consider(o){var i=o*P,l=triangleDistanceSq(r,a,t[i],t[i+1],t[i+4],t[i+5],t[i+8],t[i+9]);(l<x||l===x&&o<b)&&(x=l,b=o)},A=function scanCell(t){for(var r=v[t+1],a=v[t];a<r;a++)M(h[a])},S=0;S<p.length;S++)M(p[S]);for(var w=Math.max(0,-y,y-c+1,-g,g-m+1),k=Math.max(y,c-1-y,g,m-1-g),C=w;C<=k;C++){var Z=y-C,T=y+C,O=g-C,X=g+C,E=Math.max(0,Z),I=Math.min(c-1,T);if(O>=0&&O<m)for(var D=E;D<=I;D++)A(O*c+D);if(C>0){if(X>=0&&X<m)for(var _=E;_<=I;_++)A(X*c+_);var L=Math.max(0,O+1),j=Math.min(m-1,X-1);if(Z>=0&&Z<c)for(var z=L;z<=j;z++)A(z*c+Z);if(T>=0&&T<c)for(var Y=L;Y<=j;Y++)A(Y*c+T)}var R=Math.min(r-(i+Z*u),i+(T+1)*u-r,a-(l+O*u),l+(X+1)*u-a);if(R>0&&x<R*R*(1-1e-9))return b}return b}(t,a,o,i):nearestTriangleLinear(t,r,a,o);if(l<0)return null;var u=l*P,c=t[u],m=t[u+1],v=t[u+4],h=t[u+5],p=t[u+8],y=t[u+9],g=(h-y)*(c-p)+(p-v)*(m-y);if(Math.abs(g)<Y)return null;var x=((h-y)*(a-p)+(p-v)*(o-y))/g,b=((y-m)*(a-p)+(c-p)*(o-y))/g,M=1-x-b;return[x*t[u+2]+b*t[u+6]+M*t[u+10],x*t[u+3]+b*t[u+7]+M*t[u+11]]}function collectDeckTriangles_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function collectDeckTriangles_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return collectDeckTriangles_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?collectDeckTriangles_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function collectDeckTriangles_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var R=.005,B=new h.yGw,H=new h.Vkp,U=new h.Pa4,W=new h.Pa4;function sampleDeckSurface(t,r){var a,o,i,l,u,c=function meshesMatching(t,r){var a=[];return t.traverse((function(t){var o=t;o.isMesh&&r.some((function(t){return o.name.includes(t)}))&&a.push(o)})),a}(t,r),m=null!==(a=c[0])&&void 0!==a?a:null;if(!m)return{reference:null,surface:null};var v=m.geometry;v.boundingBox||v.computeBoundingBox();var p,y,g=function patternAttributeName(t){var r=Array.isArray(t)?t[0]:t;return r instanceof h.Wid&&r.map?0===r.map.channel?"uv":"uv".concat(r.map.channel):"uv"}(m.material),x=function collectDeckTriangles(t,r,a){var o,i=B.copy(r.matrixWorld).invert().clone(),l=[],u={minX:1/0,maxX:-1/0,minZ:1/0,maxZ:-1/0},c=collectDeckTriangles_createForOfIteratorHelper(t);try{for(c.s();!(o=c.n()).done;){var m,v=o.value,h=v.geometry,p=h.getAttribute("position"),y=null!==(m=h.getAttribute(a))&&void 0!==m?m:h.getAttribute("uv");if(p&&y){var g=h.getAttribute("normal");B.multiplyMatrices(i,v.matrixWorld);for(var x=new Float32Array(3*p.count),b=0;b<p.count;b++)U.set(p.getX(b),p.getY(b),p.getZ(b)).applyMatrix4(B),x[3*b]=U.x,x[3*b+1]=U.y,x[3*b+2]=U.z,U.x<u.minX&&(u.minX=U.x),U.x>u.maxX&&(u.maxX=U.x),U.z<u.minZ&&(u.minZ=U.z),U.z>u.maxZ&&(u.maxZ=U.z);var M=new Float32Array(g?g.count:0);if(g){H.getNormalMatrix(B);for(var A=0;A<g.count;A++)W.set(g.getX(A),g.getY(A),g.getZ(A)).applyMatrix3(H).normalize(),M[A]=W.y}var S=-1/0;if(!g){for(var w=1/0,k=-1/0,C=0;C<p.count;C++){var Z=x[3*C+1];Z<w&&(w=Z),Z>k&&(k=Z)}S=(w+k)/2}for(var T=h.index,O=T?Math.floor(T.count/3):Math.floor(p.count/3),X=0;X<O;X++){var E=T?T.getX(3*X):3*X,I=T?T.getX(3*X+1):3*X+1,D=T?T.getX(3*X+2):3*X+2;if(g?M[E]>=.9&&M[I]>=.9&&M[D]>=.9:x[3*E+1]>S&&x[3*I+1]>S&&x[3*D+1]>S)for(var _=0,L=[E,I,D];_<L.length;_++){var j=L[_];l.push(x[3*j],x[3*j+2],y.getX(j),y.getY(j))}}}}}catch(t){c.e(t)}finally{c.f()}var z=l.length/P;return z<1?null:{triangles:new Float32Array(l),triangleCount:z,extent:u}}(c,m,g),b=v.boundingBox;return{reference:m,surface:{meshName:m.name,topY:null!==(o=null==b?void 0:b.max.y)&&void 0!==o?o:0,slabThickness:b?b.max.y-b.min.y:0,material:x?(p=Array.isArray(m.material)?m.material[0]:m.material,y=p.clone(),y instanceof h.Wid&&(y.aoMap=null,y.lightMap=null),y.needsUpdate=!0,y):null,triangles:null!==(i=null==x?void 0:x.triangles)&&void 0!==i?i:null,triangleCount:null!==(l=null==x?void 0:x.triangleCount)&&void 0!==l?l:0,triangleIndex:x?buildTriangleGridIndex(x.triangles,x.triangleCount):null,attributeName:g,uvFit:x?fitAffineUV(x.triangles,x.triangleCount):null,extent:null!==(u=null==x?void 0:x.extent)&&void 0!==u?u:null}}}var V=.001;var q=(0,v.getLogger)("RealTimeViewer","DeckCutoutCollar"),G=new h.dpR;var $=a(7514);function DeckCutoutCollar_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function DeckCutoutCollar_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return DeckCutoutCollar_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?DeckCutoutCollar_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function DeckCutoutCollar_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var K=(0,v.getLogger)("RealTimeViewer","DeckCutoutCollar"),J=!1;function DeckCutoutCollar(){var t,r=(0,c.D)((function(t){return t.scene})),a=(0,u.K)((function(t){return t.scene.deckCutout})),l=(0,m.tb)((function(t){return t.deckCutoutFootprintOverride})),v=(0,m.tb)((function(t){return t.decorVersion})),p=function useCollarTextures(t){var r=t.mapUrl,a=t.normalMapUrl,l=t.roughnessMapUrl,u=(0,o.useState)(null),c=(0,i.Z)(u,2),m=c[0],v=c[1];return(0,o.useEffect)((function(){if(""!==r){var t=!0,o=[],u=function load(r){return""===r?Promise.resolve(null):G.loadAsync(r).then((function(r){return t?(o.push(r),r):(r.dispose(),null)}),(function(){return q.debug("[DeckCutoutCollar] collar texture failed to load: ".concat(r)),null}))};return Promise.all([u(r),u(a),u(l)]).then((function(r){var a=(0,i.Z)(r,3),o=a[0],l=a[1],u=a[2];if(t&&o){o.colorSpace=h.KI_;for(var c=0,m=[o,l,u];c<m.length;c++){var p=m[c];p&&(p.wrapS=h.rpg,p.wrapT=h.rpg,p.needsUpdate=!0)}v({map:o,normalMap:l,roughnessMap:u})}})),function(){t=!1;for(var r=0,a=o;r<a.length;r++)a[r].dispose();v(null)}}v(null)}),[r,a,l]),m}(a.collar.material),y=(0,o.useRef)(null),g=(0,o.useRef)(null),x=(0,o.useRef)(null),b=(0,o.useRef)(-1),M=(0,o.useState)(null),A=(0,i.Z)(M,2),S=A[0],w=A[1],k=(0,o.useMemo)((function(){return a.nodeMatch.split(",").map((function(t){return t.trim()})).filter((function(t){return t.length>0}))}),[a.nodeMatch]);(0,o.useEffect)((function(){g.current=null,x.current=null,w(null)}),[k]);var C=a.collar,Z=a.authoredHole,T=a.enabled,O=T&&null!==l&&l.length>=3;(0,o.useEffect)((function(){if(T&&!J)return m.tb.getState().beginSceneLoad(m.Wz,{timeoutMs:25e3,onTimeout:function onTimeout(){return J=!0}}),function(){return m.tb.getState().endSceneLoad(m.Wz)}}),[T]),(0,o.useEffect)((function(){O&&!J&&m.tb.getState().beginSceneLoad(m.Wz,{timeoutMs:8e3,onTimeout:function onTimeout(){return J=!0}})}),[O]);var X=(0,o.useCallback)((function(){var t=sampleDeckSurface(r,k),a=t.reference,o=t.surface;g.current=a;var i=function deckSurfaceKey(t){return t?"".concat(t.meshName,"|").concat(t.topY.toFixed(4),"|").concat(t.attributeName,"|").concat(t.triangleCount):"none"}(o);if(x.current!==i&&(x.current=i,w(o),o)){(0,j._m)("deck: surface sampled");var l,u=DeckCutoutCollar_createForOfIteratorHelper(function describeDeckSurface(t,r){var a=[],o=t.extent;return o&&a.push("[DeckCutoutCollar] matched deck meshes span X [".concat(o.minX.toFixed(3),", ").concat(o.maxX.toFixed(3),"] Z [").concat(o.minZ.toFixed(3),", ").concat(o.maxZ.toFixed(3),"]")),a.push("[DeckCutoutCollar] UV source: ".concat(r?"own material (declared world-planar tiling)":null===t.uvFit?"no fit possible (per-vertex sampling)":t.uvFit.residualMetres<=R?"one fitted mapping, residual ".concat((1e3*t.uvFit.residualMetres).toFixed(2)," mm"):"per-vertex sampling — fit residual ".concat((1e3*t.uvFit.residualMetres).toFixed(1)," mm exceeds ").concat(5," mm, deck unwrap is not one plane"))),a}(o,null!==p));try{for(u.s();!(l=u.n()).done;){var c=l.value;K.debug(c)}}catch(t){u.e(t)}finally{u.f()}}}),[r,k,p]);(0,o.useEffect)((function(){T&&(b.current=1)}),[T,v,X]),(0,o.useEffect)((function(){O&&null===S&&K.debug("[DeckCutoutCollar] footprint active but NO floor mesh matches '".concat(a.nodeMatch,"'"))}),[O,S,a.nodeMatch]),(0,c.F)((function(){if(T){b.current>=0&&(0===b.current&&X(),b.current-=1);var t=g.current;t&&!t.parent&&X();var r=y.current;t&&r&&(r.matrix.copy(t.matrixWorld),r.matrixWorldNeedsUpdate=!0)}}));var E=(0,o.useMemo)((function(){if(!T||null===S||null===l||l.length<3)return null;var t=function buildCollarGeometry(t){var r=t.footprint,a=t.hole,o=t.collar,i=t.deck,l=t.ownMaterial,u=new h.bnF,c=a.centerX-a.halfExtentX-o.overlap,m=a.centerX+a.halfExtentX+o.overlap,v=a.centerZ-a.halfExtentZ-o.overlap,p=a.centerZ+a.halfExtentZ+o.overlap;u.moveTo(c,v),u.lineTo(m,v),u.lineTo(m,p),u.lineTo(c,p),u.closePath();for(var y=0,g=1/0,x=-1/0,b=1/0,M=-1/0,A=new h.y$t,S=0;S<r.length;S++){var w=Math.min(m-V,Math.max(c+V,r[S][0])),k=Math.min(p-V,Math.max(v+V,r[S][1]));w===r[S][0]&&k===r[S][1]||(y+=1),w<g&&(g=w),w>x&&(x=w),k<b&&(b=k),k>M&&(M=k),0===S?A.moveTo(w,k):A.lineTo(w,k)}A.closePath(),u.holes.push(A);var C=(x-g)*(M-b)/((m-c)*(p-v)),Z="[DeckCutoutCollar] ring built: hole X [".concat(c.toFixed(2),", ").concat(m.toFixed(2),"] Z [").concat(v.toFixed(2),", ").concat(p.toFixed(2),"] | opening X [").concat(g.toFixed(2),", ").concat(x.toFixed(2),"] Z [").concat(b.toFixed(2),", ").concat(M.toFixed(2),"] = ").concat((100*C).toFixed(0),"% of it | ").concat(y,"/").concat(r.length," outline pts clamped").concat(y>0?" — THE ARTICLE IS LARGER THAN ITS HOLE":""),T=o.skirtDepth>0?o.skirtDepth:Math.max(i.slabThickness,.01),O=new h.O7d(u,{depth:T,bevelEnabled:!1});if(O.rotateX(Math.PI/2),O.translate(0,i.topY-o.recess,0),l){for(var X=l.textureScale,E=l.rotationDeg,I=l.offsetX,D=l.offsetZ,_=X>0?X:1,L=E*Math.PI/180,j=Math.cos(L),z=Math.sin(L),P=O.getAttribute("position"),Y=new Float32Array(2*P.count),N=0;N<P.count;N++){var B=P.getX(N)+I,H=P.getZ(N)+D;Y[2*N]=(B*j-H*z)/_,Y[2*N+1]=(B*z+H*j)/_}var U=new h.TlE(Y,2);O.setAttribute("uv",U),O.setAttribute("uv1",U)}else if(i.triangles){for(var W=i.uvFit&&i.uvFit.residualMetres<=R?i.uvFit:null,q=O.getAttribute("position"),G=new Float32Array(2*q.count),$=0;$<q.count;$++){var K=q.getX($),J=q.getZ($);if(W)G[2*$]=W.ux*K+W.uz*J+W.u0,G[2*$+1]=W.vx*K+W.vz*J+W.v0;else{var Q=sampleNearestTriangleUV(i.triangles,i.triangleCount,K,J,i.triangleIndex);Q&&(G[2*$]=Q[0],G[2*$+1]=Q[1])}}var ee=new h.TlE(G,2);O.setAttribute("uv",ee),O.setAttribute("uv1",ee)}return{geometry:O,diagnostic:Z}}({footprint:l,hole:Z,collar:C,deck:S,ownMaterial:p?C.material:null});return K.debug(t.diagnostic),t.geometry}),[T,l,Z.centerX,Z.centerZ,Z.halfExtentX,Z.halfExtentZ,C,S,p]);(0,o.useEffect)((function(){E&&!J&&(J=!0,(0,j._m)("deck: first collar geometry"),m.tb.getState().endSceneLoad(m.Wz))}),[E]),(0,o.useEffect)((function(){return function(){return null==E?void 0:E.dispose()}}),[E]);var I=null!==(t=null==S?void 0:S.material)&&void 0!==t?t:null;return(0,o.useEffect)((function(){return function(){return null==I?void 0:I.dispose()}}),[I]),E?p?(0,$.jsx)("mesh",{ref:y,geometry:E,matrixAutoUpdate:!1,receiveShadow:!0,castShadow:!0,children:(0,$.jsx)("meshStandardMaterial",{map:p.map,normalMap:p.normalMap,roughnessMap:p.roughnessMap,color:C.color,roughness:C.roughness,metalness:0})}):I?(0,$.jsx)("mesh",{ref:y,geometry:E,material:I,matrixAutoUpdate:!1,receiveShadow:!0,castShadow:!0}):(0,$.jsx)("mesh",{ref:y,geometry:E,matrixAutoUpdate:!1,receiveShadow:!0,castShadow:!0,children:(0,$.jsx)("meshStandardMaterial",{color:C.color,roughness:C.roughness,metalness:0})}):null}function DeckCutoutSubsystem(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(DeckCutoutArticleSync,{}),(0,$.jsx)(DeckCutoutCollar,{})]})}}}]);
2
+ "use strict";(self.webpackChunkCrystaldesignRealTimeViewerNext=self.webpackChunkCrystaldesignRealTimeViewerNext||[]).push([[964],{6964:(t,r,a)=>{a.r(r),a.d(r,{DeckCutoutSubsystem:()=>DeckCutoutSubsystem});var o=a(7363),i=a(7080),l=a(5150),u=a(7659),c=a(4088),m=a(7620),v=a(8683),h=a(6831),p=a(8141),y="Element#",g=new h.ZzF,x=new h.ZzF;function topLevelElements(t){return t.filter((function(t){for(var r=t.parent;r;r=r.parent)if(r.name.startsWith(y))return!1;return!0}))}var b=a(7534);function _createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return _arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function _arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var M=1e-9;function polygonSignedArea(t){for(var r=0,a=0;a<t.length;a++){var o=(0,i.Z)(t[a],2),l=o[0],u=o[1],c=(0,i.Z)(t[(a+1)%t.length],2),m=c[0];r+=l*c[1]-m*u}return r/2}function simplifyChain(t,r,a,o,l){for(var u=[r,a];u.length>0;){var c=u.pop(),m=u.pop();if(c-m<2)for(var v=m;v<c;v++)l.push(t[v]);else{for(var h=(0,i.Z)(t[m],2),p=h[0],y=h[1],g=(0,i.Z)(t[c],2),x=g[0],b=g[1],A=Math.hypot(x-p,b-y)||M,S=-1,w=-1,k=m+1;k<c;k++){var C=(0,i.Z)(t[k],2),Z=C[0],T=C[1],O=Math.abs((x-p)*(y-T)-(p-Z)*(b-y))/A;O>S&&(S=O,w=k)}S<=o?l.push(t[m]):u.push(w,c,m,w)}}}function simplifyClosedPolygon(t,r){if(t.length<4||r<=0)return(0,b.Z)(t);for(var a=(0,i.Z)(t[0],2),o=a[0],l=a[1],u=1,c=-1,m=1;m<t.length;m++){var v=Math.hypot(t[m][0]-o,t[m][1]-l);v>c&&(c=v,u=m)}var h=[];simplifyChain(t,0,u,r,h);var p=[].concat((0,b.Z)(t.slice(u)),[t[0]]);return simplifyChain(p,0,p.length-1,r,h),h}function segmentsCross(t,r,a,o,i,l,u,c){var m=function cross(t,r,a,o,i,l){return(a-t)*(l-r)-(o-r)*(i-t)},v=m(t,r,a,o,i,l),h=m(t,r,a,o,u,c),p=m(i,l,u,c,t,r),y=m(i,l,u,c,a,o);return(v>0&&h<0||v<0&&h>0)&&(p>0&&y<0||p<0&&y>0)}function ensureSimplePolygon(t){if(t.length<3)return null;if(function isSimplePolygon(t){var r=t.length;if(r<4)return!0;for(var a=0;a<r;a++)for(var o=(0,i.Z)(t[a],2),l=o[0],u=o[1],c=(0,i.Z)(t[(a+1)%r],2),m=c[0],v=c[1],h=a+1;h<r;h++)if(h!==a+1&&(0!==a||h!==r-1)){var p=(0,i.Z)(t[h],2),y=p[0],g=p[1],x=(0,i.Z)(t[(h+1)%r],2);if(segmentsCross(l,u,m,v,y,g,x[0],x[1]))return!1}return!0}(t))return Math.abs(polygonSignedArea(t))<=M?null:{points:(0,b.Z)(t),repaired:!1};var r=function convexHull(t){if(t.length<3)return(0,b.Z)(t);var r=(0,b.Z)(t).sort((function(t,r){return t[0]-r[0]||t[1]-r[1]})),a=function cross(t,r,a){return(r[0]-t[0])*(a[1]-t[1])-(r[1]-t[1])*(a[0]-t[0])},o=function build(t){var r,o=[],i=_createForOfIteratorHelper(t);try{for(i.s();!(r=i.n()).done;){for(var l=r.value;o.length>=2&&a(o[o.length-2],o[o.length-1],l)<=0;)o.pop();o.push(l)}}catch(t){i.e(t)}finally{i.f()}return o},i=o(r),l=o((0,b.Z)(r).reverse());return[].concat((0,b.Z)(i.slice(0,-1)),(0,b.Z)(l.slice(0,-1)))}(t);return r.length<3||Math.abs(polygonSignedArea(r))<=M?null:{points:r,repaired:!0}}function rasterMask_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function rasterMask_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return rasterMask_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?rasterMask_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function rasterMask_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var A=[new Uint8Array(0),new Uint8Array(0)];function pooledMaskBuffer(t,r){A[t].length<r&&(A[t]=new Uint8Array(r));var a=A[t].subarray(0,r);return a.fill(0),a}function closeMask(t,r,a,o){if(!(o<1)){var i=pooledMaskBuffer(1,t.length);boxPassX(t,i,r,a,o,!0),boxPassZ(i,t,r,a,o,!0),boxPassX(t,i,r,a,o,!1),boxPassZ(i,t,r,a,o,!1)}}function fillEnclosed(t,r,a){for(var o=pooledMaskBuffer(1,t.length),i=new Int32Array(t.length),l=0,u=function visit(r){0===t[r]&&0===o[r]&&(o[r]=1,i[l++]=r)},c=0;c<r;c++)u(c),u((a-1)*r+c);for(var m=0;m<a;m++)u(m*r),u(m*r+r-1);for(;l>0;){var v=i[--l],h=v%r,p=(v-h)/r;h>0&&u(v-1),h<r-1&&u(v+1),p>0&&u(v-r),p<a-1&&u(v+r)}for(var y=0,g=0;g<t.length;g++)0===t[g]&&0===o[g]&&(t[g]=1,y+=1);return y}function offsetMask(t,r,a,o,i){var l=pooledMaskBuffer(1,t.length);boxPassX(t,l,r,a,o,i),boxPassZ(l,t,r,a,o,i)}function windowSizes(t,r){for(var a=new Int32Array(r),o=0;o<r;o++)a[o]=Math.min(r-1,o+t)-Math.max(0,o-t)+1;return a}function boxPassX(t,r,a,o,i,l){for(var u=windowSizes(i,a),c=0;c<o;c++){for(var m=c*a,v=0,h=0;h<=i&&h<a;h++)v+=t[m+h];for(var p=0;p<a;p++){r[m+p]=(l?v>0:v===u[p])?1:0;var y=p-i,g=p+i+1;y>=0&&(v-=t[m+y]),g<a&&(v+=t[m+g])}}}function boxPassZ(t,r,a,o,i,l){for(var u=new Int32Array(a),c=windowSizes(i,o),m=0;m<=i&&m<o;m++)for(var v=m*a,h=0;h<a;h++)u[h]+=t[v+h];for(var p=0;p<o;p++){for(var y=p*a,g=c[p],x=0;x<a;x++)r[y+x]=(l?u[x]>0:u[x]===g)?1:0;var b=p-i,M=p+i+1;if(b>=0)for(var A=b*a,S=0;S<a;S++)u[S]-=t[A+S];if(M<o)for(var w=M*a,k=0;k<a;k++)u[k]+=t[w+k]}}var S=[[],[[3,0]],[[0,1]],[[3,1]],[[1,2]],[[3,0],[1,2]],[[0,2]],[[3,2]],[[2,3]],[[0,2]],[[0,1],[2,3]],[[1,2]],[[1,3]],[[0,1]],[[3,0]],[]];function marchingSquaresLoops(t,r,a,o,l,u){for(var c=function edgeKey(t,a,o){return 0===t?2*(o*r+a):2===t?2*((o+1)*r+a):3===t?2*(o*r+a)+1:2*(o*r+a+1)+1},m=function edgePoint(t){var a=Math.floor(t/2),i=a%r,c=Math.floor(a/r);return t%2==0?[o+(i+1)*u,l+(c+.5)*u]:[o+(i+.5)*u,l+(c+1)*u]},v=new Map,h=function link(t,r){var a=v.get(t);a?a.push(r):v.set(t,[r]);var o=v.get(r);o?o.push(t):v.set(r,[t])},p=0;p<a-1;p++)for(var y=0;y<r-1;y++){var g=t[p*r+y]|t[p*r+y+1]<<1|t[(p+1)*r+y+1]<<2|t[(p+1)*r+y]<<3;if(0!==g&&15!==g){var x,b=rasterMask_createForOfIteratorHelper(S[g]);try{for(b.s();!(x=b.n()).done;){var M=(0,i.Z)(x.value,2),A=M[0],w=M[1];h(c(A,y,p),c(w,y,p))}}catch(t){b.e(t)}finally{b.f()}}}var k,C=new Set,Z=[],T=rasterMask_createForOfIteratorHelper(v.keys());try{var O=function _loop(){var t=k.value;if(C.has(t))return 1;for(var r=[],a=t,o=-1;!C.has(a);){var i;C.add(a),r.push(m(a));var l=(null!==(i=v.get(a))&&void 0!==i?i:[]).find((function(t){return t!==o&&!C.has(t)}));if(void 0===l)break;o=a,a=l}r.length>=3&&Z.push(r)};for(T.s();!(k=T.n()).done;)O()}catch(t){T.e(t)}finally{T.f()}return Z}var w=16e6,k=4e6;function footprint_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function footprint_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return footprint_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?footprint_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function footprint_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}function matchArticleRule(t,r){var a,o=footprint_createForOfIteratorHelper(t);try{for(o.s();!(a=o.n()).done;){var i=a.value,l=i.match.trim();if(""===l||"*"===l)return i;if(void 0!==r)if(l.split(",").map((function(t){return t.trim()})).filter((function(t){return t.length>0})).some((function(t){return r.includes(t)})))return i}}catch(t){o.e(t)}finally{o.f()}return null}function articleFootprint_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function articleFootprint_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return articleFootprint_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?articleFootprint_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function articleFootprint_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var C=.6,Z=new h.yGw,T=new h.Pa4;function measuredRectFootprint(t,r){var a=t.minX-r,o=t.maxX+r,i=t.minZ-r,l=t.maxZ+r;return o-a<.1||l-i<.1?null:[[a,i],[o,i],[o,l],[a,l]]}function traceArticleFootprint(t,r,a,o,l,u,c,m){var v,h=[],p=[],y=articleFootprint_createForOfIteratorHelper(t);try{for(y.s();!(v=y.n()).done;){v.value.traverse((function(t){var r=t;if(r.isMesh&&r.visible){var a=r.geometry.getAttribute("position");a&&(h.push(r),p.push("".concat(r.name,":").concat(a.count)))}}))}}catch(t){y.e(t)}finally{y.f()}if(0===h.length)return null;var g=a.maxX-a.minX,x=a.maxY-a.minY,b=a.maxZ-a.minZ,M="".concat(o.toFixed(3),"|").concat((a.maxY+m).toFixed(3),"|").concat(l.toFixed(3),"|").concat(g.toFixed(3),"x").concat(x.toFixed(3),"x").concat(b.toFixed(3),"|").concat(p.join(","));if(!c.current||c.current.signature!==M){var A=performance.now(),S=0,C=h.map((function(t){var a=t.geometry.getAttribute("position");S+=a.count,Z.multiplyMatrices(r,t.matrixWorld);for(var o=new Float32Array(3*a.count),i=0;i<a.count;i++)T.set(a.getX(i),a.getY(i),a.getZ(i)).applyMatrix4(Z),o[3*i]=T.x,o[3*i+1]=T.y+m,o[3*i+2]=T.z;return o})),O=function forEachSliceTriangle(t){for(var r=0,a=0;a<h.length;a++)for(var i=h[a].geometry,l=i.getAttribute("position"),u=C[a],c=i.index,m=c?Math.floor(c.count/3):Math.floor(l.count/3),v=0;v<m;v++){var p=c?c.getX(3*v):3*v,y=c?c.getX(3*v+1):3*v+1,g=c?c.getX(3*v+2):3*v+2;u[3*p+1]<o&&u[3*y+1]<o&&u[3*g+1]<o||(r+=1,t&&t(u[3*p],u[3*p+2],u[3*y],u[3*y+2],u[3*g],u[3*g+2]))}return r},X=O(null),E=new Float32Array(6*X),I=0;O((function(t,r,a,o,i,l){E[I]=t,E[I+1]=r,E[I+2]=a,E[I+3]=o,E[I+4]=i,E[I+5]=l,I+=6}));var D=function traceFootprintFromTriangles(t){var r,a,o,l,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=null!==(r=u.cellSize)&&void 0!==r?r:.005,m=Math.floor(t.length/6);if(m<1||c<=0)return[];for(var v=1/0,h=-1/0,p=1/0,y=-1/0,g=0;g<6*m;g+=2){var x=t[g],b=t[g+1];x<v&&(v=x),x>h&&(h=x),b<p&&(p=b),b>y&&(y=b)}if(!Number.isFinite(v)||h-v<c||y-p<c)return[];var M=(Math.ceil((h-v)/c)+1)*(Math.ceil((y-p)/c)+1),A=M>k?c*Math.sqrt(M/k):c,S=null!==(a=u.simplifyTolerance)&&void 0!==a?a:A,C=null!==(o=u.closeGap)&&void 0!==o?o:.02,Z=C<=0?0:Math.max(1,Math.round(C/(2*A))),T=null!==(l=u.offset)&&void 0!==l?l:0,O=Math.round(Math.abs(T)/A),X=T>0,E=Z+(X?O:0)+1,I=v-E*A,D=p-E*A,_=Math.ceil((h-v)/A)+2*E+1,L=Math.ceil((y-p)/A)+2*E+1;if(_*L>w)return[];for(var j=pooledMaskBuffer(0,_*L),z=function cellOf(t,r,a){return Math.min(a-E-1,Math.max(E,Math.floor((t-r)/A)))},P=function mark(t,r){j[z(r,D,L)*_+z(t,I,_)]=1},N=0;N<m;N++){var Y=6*N,R=t[Y],B=t[Y+1],H=t[Y+2],U=t[Y+3],W=t[Y+4],V=t[Y+5];P(R,B),P(H,U),P(W,V);var q=Math.abs((H-R)*(V-B)-(W-R)*(U-B)),G=Math.max(Math.hypot(H-R,U-B),Math.hypot(W-H,V-U),Math.hypot(R-W,B-V));if((G>1e-9?q/G:0)<1.5*A)for(var $=0,K=[[R,B,H,U],[H,U,W,V],[W,V,R,B]];$<K.length;$++)for(var J=(0,i.Z)(K[$],4),Q=J[0],ee=J[1],te=J[2],re=J[3],ne=Math.ceil(Math.hypot(te-Q,re-ee)/(.7*A)),ae=1;ae<ne;ae++){var oe=ae/ne;P(Q+(te-Q)*oe,ee+(re-ee)*oe)}for(var ie=z(Math.min(B,U,V),D,L),le=z(Math.max(B,U,V),D,L),ue=ie;ue<=le;ue++){for(var ce=D+(ue+.5)*A,fe=1/0,se=-1/0,me=0;me<3;me++){var ve=0===me?R:1===me?H:W,de=0===me?B:1===me?U:V,he=0===me?H:1===me?W:R,pe=0===me?U:1===me?V:B;if(de!==pe&&!(ce<Math.min(de,pe)||ce>=Math.max(de,pe))){var ye=ve+(ce-de)/(pe-de)*(he-ve);ye<fe&&(fe=ye),ye>se&&(se=ye)}}if(!(fe>se)){var ge=Math.max(E,Math.ceil((fe-I)/A-.5)),xe=Math.min(_-E-1,Math.floor((se-I)/A-.5));ge<=xe&&j.fill(1,ue*_+ge,ue*_+xe+1)}}}closeMask(j,_,L,Z);var be=fillEnclosed(j,_,L);O>=1&&offsetMask(j,_,L,O,X);var Me=u.diagnostics;if(Me){Me.enclosedFilled=be;for(var Ae=0,Se=0;Se<j.length;Se++)Ae+=j[Se];Me.filledCells=Ae}var Fe=marchingSquaresLoops(j,_,L,I,D,A);if(Me&&(Me.loops=Fe.length),0===Fe.length)return[];for(var we=Fe[0],ke=Math.abs(polygonSignedArea(we)),Ce=ke,Ze=1;Ze<Fe.length;Ze++){var Te=Math.abs(polygonSignedArea(Fe[Ze]));Ce+=Te,Te>ke&&(ke=Te,we=Fe[Ze])}var Oe=simplifyClosedPolygon(we,S);return Me&&(Me.chosenAreaShare=Ce>0?ke/Ce:0,Me.pointsBeforeSimplify=we.length,Me.pointsAfterSimplify=Oe.length),Oe.length>=3?Oe:[]}(E,{cellSize:.005,offset:l,diagnostics:u});return c.current={signature:M,relPoints:D.map((function(t){var r=(0,i.Z)(t,2),o=r[0],l=r[1];return[o-a.minX,l-a.minZ]})),triCount:X,vertexCount:S},{points:D,triCount:X,vertexCount:S,retraced:!0,traceMs:performance.now()-A}}var _=c.current,L=_.relPoints,j=_.triCount,z=_.vertexCount;return{points:L.map((function(t){var r=(0,i.Z)(t,2),o=r[0],l=r[1];return[o+a.minX,l+a.minZ]})),triCount:j,vertexCount:z,retraced:!1,traceMs:0}}function anchorElements_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function anchorElements_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return anchorElements_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?anchorElements_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function anchorElements_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var O=.001,X=new h.Pa4,E=new h.Pa4;function anchorDelta1D(t,r,a,o,i,l){return"min"===t?r-a+l-o:"max"===t?r+a-l-i:r+l-(o+i)/2}var I=new h.Vkp,D=new h.Pa4,_=new h.Pa4,L=new h.Pa4;function measureDiagnostics_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function measureDiagnostics_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return measureDiagnostics_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?measureDiagnostics_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function measureDiagnostics_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var j=a(4399);function ownKeys(t,r){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable}))),a.push.apply(a,o)}return a}function _objectSpread(t){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(a),!0).forEach((function(r){(0,l.Z)(t,r,a[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):ownKeys(Object(a)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(a,r))}))}return t}var z=(0,v.getLogger)("RealTimeViewer","DeckCutoutArticleSync");function DeckCutoutArticleSync(){var t=(0,c.D)((function(t){return t.scene})),r=(0,u.K)((function(t){return t.scene.deckCutout})),a=(0,m.tb)((function(t){return t.setWaterVolumeOverride})),l=(0,m.tb)((function(t){return t.setDeckCutoutFootprintOverride})),v=(0,o.useRef)(0),b=(0,o.useRef)(0),M=(0,o.useRef)(!1),A=(0,o.useRef)(null),S=(0,o.useRef)(null),w=(0,o.useRef)(!1),k=(0,o.useRef)(0),Z=r.enabled&&r.articleSync.enabled,T=Z&&r.elementAnchor.enabled,P=Z&&r.waterSync.enabled;(0,o.useEffect)((function(){return Z||l(null),function(){return l(null)}}),[Z,l]),(0,o.useEffect)((function(){var t=function clear(){Object.keys(m.tb.getState().elementAnchorOffsets).length>0&&m.tb.getState().setElementAnchorOffsets({})};return T||t(),t}),[T]),(0,o.useEffect)((function(){return P||a(null),function(){return a(null)}}),[P,a]);var N=(0,o.useMemo)((function(){return r.nodeMatch.split(",").map((function(t){return t.trim()})).filter((function(t){return t.length>0}))}),[r.nodeMatch]),Y=(0,m.tb)((function(t){return t.articleVersion})),R=(0,m.tb)((function(t){return t.decorVersion}));return(0,o.useEffect)((function(){Z&&(w.current=!0,k.current=0)}),[Y,R,Z]),(0,c.F)((function(){if(Z&&0!==N.length&&(v.current+=1,w.current||v.current%30==1)){var o=m.tb.getState(),u=o.waterVolumeOverride,c=o.deckCutoutFootprintOverride,Y=!1,R=function finishMeasure(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t)return k.current=0,void(w.current=!1);var r=m.tb.getState(),a=Y||r.waterVolumeOverride!==u||r.deckCutoutFootprintOverride!==c;if(a)return k.current=0,void(w.current=!0);k.current+=1,k.current>=3&&(w.current=!1)};b.current+=1;var B=function measureArticle(t,r,a){var o,i,l=[],u=[],c=[];if(x.makeEmpty(),t.traverse((function(t){var o;if(0===c.length){var i=t;i.isMesh&&r.some((function(t){return i.name.includes(t)}))&&c.push(i)}if(t.name.startsWith(y)&&(l.push(t),g.setFromObject(t),!g.isEmpty())){x.union(g);var m=null===(o=a.get((0,p.zs)(t.name)))||void 0===o?void 0:o.articleCodex;void 0!==m&&u.push({codex:m,area:(g.max.x-g.min.x)*(g.max.z-g.min.z)})}})),u.sort((function(t,r){return r.area-t.area})),x.isEmpty())return null;var m=c[0];if(!m)return null;var v=(new h.yGw).copy(m.matrixWorld).invert(),b=m.geometry;b.boundingBox||b.computeBoundingBox();var M=null!==(o=null===(i=b.boundingBox)||void 0===i?void 0:i.max.y)&&void 0!==o?o:0,A=x.min.y;return x.applyMatrix4(v),{rect:{minX:x.min.x,maxX:x.max.x,minY:x.min.y,maxY:x.max.y,minZ:x.min.z,maxZ:x.max.z},worldBottomY:A,elementObjects:l,codexesByArea:u,floorWorld:m.matrixWorld,floorLocal:v,floorTopY:M}}(t,N,m.tb.getState().elementsInfo);if(!B)return a(null),l(null),void R(!0);var H=function pickArticleRule(t,r){var a,o,i=null===(a=r[0])||void 0===a?void 0:a.codex,l=matchArticleRule(t,void 0),u=articleFootprint_createForOfIteratorHelper(r);try{for(u.s();!(o=u.n()).done;){var c=o.value,m=matchArticleRule(t,c.codex);if(m){l=m,i=c.codex;break}}}catch(t){u.e(t)}finally{u.f()}return{rule:l,primaryCodex:i}}(r.articleRules,B.codexesByArea),U=H.rule,W=H.primaryCodex,V=r.elementAnchor,q=T?(V.alignTopToDeck?B.floorTopY-B.rect.maxY:0)+V.offsetY:0,G=function deriveArticleFootprint(t,r,a,o){var l,u,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,m={points:null,rim:null,sampledCount:0,source:"",repairNote:"",tracedBounds:"",trace:{filledCells:0,enclosedFilled:0,loops:0,chosenAreaShare:0,pointsBeforeSimplify:0,pointsAfterSimplify:0}};if(!r||!r.footprintFromGeometry)return m;var v=t.rect,h=t.floorLocal,p=t.floorTopY,y=t.elementObjects,g=v.maxX-v.minX,x=v.maxZ-v.minZ,b=traceArticleFootprint(topLevelElements(y),h,v,p-r.footprintSliceDepth,a,m.trace,o,c),M=1/0,A=-1/0,S=1/0,w=-1/0;if(b&&b.points.length>=3){var k,Z=articleFootprint_createForOfIteratorHelper(b.points);try{for(Z.s();!(k=Z.n()).done;){var T=(0,i.Z)(k.value,2),O=T[0],X=T[1];O<M&&(M=O),O>A&&(A=O),X<S&&(S=X),X>w&&(w=X)}}catch(t){Z.e(t)}finally{Z.f()}M+=a,A-=a,S+=a,w-=a,m.tracedBounds="X [".concat(M.toFixed(2),", ").concat(A.toFixed(2),"] Z [").concat(S.toFixed(2),", ").concat(w.toFixed(2),"]")}var E=A>M&&A-M>=g*C&&w-S>=x*C;if(b&&E){var I;m.rim={minX:M,maxX:A,minZ:S,maxZ:w};var D=ensureSimplePolygon(b.points);return null!=D&&D.repaired&&(m.repairNote=" | HULL-REPAIRED, traced outline self-intersects (concavities lost)"),null===D&&(m.repairNote=" | outline UNUSABLE even as a hull"),m.points=null!==(I=null==D?void 0:D.points)&&void 0!==I?I:null,m.sampledCount=b.points.length,m.source=b.retraced?"geometry traced in ".concat(b.traceMs.toFixed(1)," ms (").concat(b.vertexCount," verts, ").concat(b.triCount," tris in slice)"):"geometry cached (".concat(b.triCount," tris in slice)"),m}return m.points=measuredRectFootprint(v,a),m.sampledCount=null!==(l=null===(u=m.points)||void 0===u?void 0:u.length)&&void 0!==l?l:0,m.source=A>M?"geometry: TRACE COVERS ONLY ".concat(((A-M)/g*100).toFixed(0),"%×").concat(((w-S)/x*100).toFixed(0),"% of the article — fell back to the measured rect"):"geometry: NO TRIANGLES ABOVE THE SLICE PLANE — fell back to the measured rect",m}(B,U,r.articleSync.margin,S,q),$=G.rim?_objectSpread(_objectSpread({},B.rect),G.rim):B.rect,K=function measureLog(t){var r,a,o,l=t.measurement,u=t.rule,c=t.primaryCodex,m=t.footprint,v=t.hole,h=l.rect,p=l.floorTopY,y=m.points,g=1/0,x=-1/0,b=1/0,M=-1/0;if(y){var A,S=measureDiagnostics_createForOfIteratorHelper(y);try{for(S.s();!(A=S.n()).done;){var w=(0,i.Z)(A.value,2),k=w[0],C=w[1];k<g&&(g=k),k>x&&(x=k),C<b&&(b=C),C>M&&(M=C)}}catch(t){S.e(t)}finally{S.f()}}var Z=y?[g,x,b,M]:null;return{key:"".concat(null!=c?c:"","|").concat(null!==(r=null==u?void 0:u.match)&&void 0!==r?r:"","|").concat(m.sampledCount,"|").concat(null!==(a=null==y?void 0:y.length)&&void 0!==a?a:0,"|").concat(null!==(o=null==Z?void 0:Z.map((function(t){return t.toFixed(2)})).join(","))&&void 0!==o?o:""),message:function message(){var t,r=h.maxX-h.minX,a=h.maxZ-h.minZ,o=u&&u.footprintFromGeometry?" | Y: deck top ".concat(p.toFixed(2),", article [").concat(h.minY.toFixed(2),", ").concat(h.maxY.toFixed(2),"], slice keeps ≥ ").concat((p-u.footprintSliceDepth).toFixed(2)):"";if(""===m.source)t=" | NO outline rule matched this codex → NO COLLAR, the authored hole stays fully open";else if(Z&&y){var i=[Z[0]-(v.centerX-v.halfExtentX),v.centerX+v.halfExtentX-Z[1],Z[2]-(v.centerZ-v.halfExtentZ),v.centerZ+v.halfExtentZ-Z[3]].map((function(t){return t.toFixed(2)}));t=" | measured ".concat(r.toFixed(2),"×").concat(a.toFixed(2))+(""===m.tracedBounds?"":" | traced ".concat(m.sampledCount," pts ").concat(m.tracedBounds))+" | outline ".concat(y.length," pts X [").concat(Z[0].toFixed(2),", ").concat(Z[1].toFixed(2),"] Z [").concat(Z[2].toFixed(2),", ").concat(Z[3].toFixed(2),"]")+" | hole X [".concat((v.centerX-v.halfExtentX).toFixed(2),", ").concat((v.centerX+v.halfExtentX).toFixed(2),"] Z [").concat((v.centerZ-v.halfExtentZ).toFixed(2),", ").concat((v.centerZ+v.halfExtentZ).toFixed(2),"]")+" | slack X ".concat(i[0],"/").concat(i[1]," Z ").concat(i[2],"/").concat(i[3])+" | ".concat(m.source).concat(m.repairNote)+(m.trace.loops>0?" | trace: ".concat(m.trace.filledCells," cells (").concat(m.trace.enclosedFilled," filled in), ").concat(m.trace.loops," loop(s), kept ").concat((100*m.trace.chosenAreaShare).toFixed(0),"% of contour area, ").concat(m.trace.pointsBeforeSimplify," → ").concat(m.trace.pointsAfterSimplify," pts"):"")}else t=" | ".concat(m.source," produced NO usable outline (").concat(m.sampledCount," pts)").concat(m.repairNote," → NO COLLAR, the authored hole stays fully open");return"[DeckCutout] article codex: ".concat(null!=c?c:"(unknown)"," → rule: ").concat(u?"'".concat(u.match,"'"):"(none — articleSync globals)").concat(o).concat(t)}}}({measurement:B,rule:U,primaryCodex:W,footprint:G,hole:r.authoredHole});A.current!==K.key&&(A.current=K.key,z.debug(K.message()));var J=T?function deriveElementAnchor(t){var r=t.rect,a=t.hole,o=t.anchor,i=t.floorWorld,l=t.elementObjects,u=t.deckTopLocalY,c=t.currentOffsets,m=anchorDelta1D(o.anchorX,a.centerX,a.halfExtentX,r.minX,r.maxX,o.offsetX),v=anchorDelta1D(o.anchorZ,a.centerZ,a.halfExtentZ,r.minZ,r.maxZ,o.offsetZ),h=(r.minX+r.maxX)/2,y=(r.minZ+r.maxZ)/2,g=r.maxY,x=(o.alignTopToDeck?u-g:0)+o.offsetY;X.set(h+m,g+x,y+v).applyMatrix4(i),E.set(h,g,y).applyMatrix4(i);var b=X.x-E.x,M=X.y-E.y,A=X.z-E.z;if(Math.abs(b)<O&&Math.abs(M)<O&&Math.abs(A)<O)return null;var S=topLevelElements(l);if(0===S.length)return null;var w,k={},C=anchorElements_createForOfIteratorHelper(S);try{for(C.s();!(w=C.n()).done;){var Z,T=w.value,I=(0,p.zs)(T.name),D=null!==(Z=c[I])&&void 0!==Z?Z:[0,0,0];k[I]=[D[0]+b,D[1]+M,D[2]+A]}}catch(t){C.e(t)}finally{C.f()}return{delta:{dx:m,dy:x,dz:v},offsets:k}}({rect:$,hole:r.authoredHole,anchor:r.elementAnchor,floorWorld:B.floorWorld,elementObjects:B.elementObjects,deckTopLocalY:B.floorTopY,currentOffsets:m.tb.getState().elementAnchorOffsets}):null;Y=null!==J,J&&m.tb.getState().setElementAnchorOffsets(J.offsets);var Q=J?function shiftRect(t,r){return{minX:t.minX+r.dx,maxX:t.maxX+r.dx,minY:t.minY+r.dy,maxY:t.maxY+r.dy,minZ:t.minZ+r.dz,maxZ:t.maxZ+r.dz}}($,J.delta):$;l(G.points&&J?G.points.map((function(t){var r=(0,i.Z)(t,2),a=r[0],o=r[1];return[a+J.delta.dx,o+J.delta.dz]})):G.points),M.current||null===m.tb.getState().deckCutoutFootprintOverride||(M.current=!0,(0,j._m)("deck: first footprint published",{measures:b.current})),P&&a(function deriveWaterVolume(t){var r=t.rect,a=t.waterSync,o=t.floorWorld,i=t.articleWorldBottomY,l=t.waterlineY,u=a.inset,c=Math.max(r.maxX-r.minX-2*u,.1),m=Math.max(r.maxZ-r.minZ-2*u,.1);D.set((r.minX+r.maxX)/2+a.offsetX,0,(r.minZ+r.maxZ)/2+a.offsetZ),D.applyMatrix4(o),I.setFromMatrix4(o),_.set(c,0,0).applyMatrix3(I),L.set(0,0,m).applyMatrix3(I);var v=Math.abs(_.x)+Math.abs(L.x),h=Math.abs(_.z)+Math.abs(L.z),p=Math.max(l-i,.5);return{center:[D.x,l,D.z],size:[v,p,h]}}({rect:Q,waterSync:r.waterSync,floorWorld:B.floorWorld,articleWorldBottomY:B.worldBottomY,waterlineY:m.tb.getState().resolvedEnvironment.water.volume.center[1]})),R()}})),null}var P=12,N=1e-12;function solve3(t,r){var a=t[0]*(t[4]*t[8]-t[5]*t[7])-t[1]*(t[3]*t[8]-t[5]*t[6])+t[2]*(t[3]*t[7]-t[4]*t[6]);if(Math.abs(a)<N)return null;return[function d(r,a,o){return r*(t[4]*t[8]-t[5]*t[7])-t[1]*(a*t[8]-t[5]*o)+t[2]*(a*t[7]-t[4]*o)}(r[0],r[1],r[2])/a,(t[0]*(r[1]*t[8]-t[5]*r[2])-r[0]*(t[3]*t[8]-t[5]*t[6])+t[2]*(t[3]*r[2]-r[1]*t[6]))/a,(t[0]*(t[4]*r[2]-r[1]*t[7])-t[1]*(t[3]*r[2]-r[1]*t[6])+r[0]*(t[3]*t[7]-t[4]*t[6]))/a]}function fitAffineUV(t,r){var a=3*r;if(a<3)return null;for(var o=0,i=0,l=0,u=0,c=0,m=0,v=0,h=0,p=0,y=0,g=0,x=0;x<a;x++){var b=4*x,M=t[b],A=t[b+1],S=t[b+2],w=t[b+3];o+=M*M,i+=M*A,l+=M,u+=A*A,c+=A,m+=M*S,v+=A*S,h+=S,p+=M*w,y+=A*w,g+=w}var k=[o,i,l,i,u,c,l,c,a],C=solve3(k,[m,v,h]),Z=solve3(k,[p,y,g]);if(!C||!Z)return null;for(var T=0,O=0;O<a;O++){var X=4*O,E=t[X],I=t[X+1],D=C[0]*E+C[1]*I+C[2]-t[X+2],_=Z[0]*E+Z[1]*I+Z[2]-t[X+3];T+=D*D+_*_}var L=(Math.hypot(C[0],C[1])+Math.hypot(Z[0],Z[1]))/2,j=Math.sqrt(T/a);return{ux:C[0],uz:C[1],u0:C[2],vx:Z[0],vz:Z[1],v0:Z[2],residualMetres:L>N?j/L:1/0}}function segmentDistanceSq(t,r,a,o,i,l){var u=i-a,c=l-o,m=u*u+c*c,v=m<N?0:Math.max(0,Math.min(1,((t-a)*u+(r-o)*c)/m)),h=a+v*u-t,p=o+v*c-r;return h*h+p*p}function triangleDistanceSq(t,r,a,o,i,l,u,c){if((i-a)*(c-o)-(u-a)*(l-o)==0)return 1/0;var m=(i-a)*(r-o)-(l-o)*(t-a),v=(u-i)*(r-l)-(c-l)*(t-i),h=(a-u)*(r-c)-(o-c)*(t-u);return m>=0&&v>=0&&h>=0||m<=0&&v<=0&&h<=0?0:Math.min(segmentDistanceSq(t,r,a,o,i,l),segmentDistanceSq(t,r,i,l,u,c),segmentDistanceSq(t,r,u,c,a,o))}function nearestTriangleLinear(t,r,a,o){for(var i=1/0,l=-1,u=0;u<r;u++){var c=u*P,m=triangleDistanceSq(a,o,t[c],t[c+1],t[c+4],t[c+5],t[c+8],t[c+9]);if(m<i&&(i=m,l=u,0===m))break}return l}var Y=1e7;function isFiniteXZ(t,r,a,o,i,l){return Number.isFinite(t)&&Number.isFinite(r)&&Number.isFinite(a)&&Number.isFinite(o)&&Number.isFinite(i)&&Number.isFinite(l)}function gridDim(t,r){return Math.min(256,Math.max(1,Math.ceil(t/r)))}function cellOf(t,r,a,o){var i=Math.floor((t-r)/a);return i<0?0:i>=o?o-1:i}function buildTriangleGridIndex(t,r){if(r<64)return null;for(var a=1/0,o=-1/0,i=1/0,l=-1/0,u=0,c=0,m=0;m<r;m++){var v=m*P,h=t[v],p=t[v+1],y=t[v+4],g=t[v+5],x=t[v+8],b=t[v+9];if(isFiniteXZ(h,p,y,g,x,b)){var M=Math.min(h,y,x),A=Math.max(h,y,x),S=Math.min(p,g,b),w=Math.max(p,g,b);M<a&&(a=M),A>o&&(o=A),S<i&&(i=S),w>l&&(l=w),u+=Math.max(A-M,w-S),c+=1}}if(c<64||r-c>.25*r)return null;var k=o-a,C=l-i,Z=Math.max(k,C);if(!(Z>0))return null;var T=k*C/c,O=Math.max(u/c,T>0?Math.sqrt(T):0,Z/256),X=gridDim(k,O),E=gridDim(C,O),I=Math.max(1024,4*c);X*E>I&&(X=gridDim(k,O*=Math.sqrt(X*E/I)),E=gridDim(C,O));for(var D=X*E,_=new Int32Array(4*r),L=new Int32Array(D+1),j=[],z=0;z<r;z++){var N=z*P,Y=t[N],R=t[N+1],B=t[N+4],H=t[N+5],U=t[N+8],W=t[N+9];if(isFiniteXZ(Y,R,B,H,U,W)&&(B-Y)*(W-R)-(U-Y)*(H-R)!=0){var V=cellOf(Math.min(Y,B,U),a,O,X),q=cellOf(Math.max(Y,B,U),a,O,X),G=cellOf(Math.min(R,H,W),i,O,E),$=cellOf(Math.max(R,H,W),i,O,E);if((q-V+1)*($-G+1)>64)_[4*z]=-1,j.push(z);else{_[4*z]=V,_[4*z+1]=q,_[4*z+2]=G,_[4*z+3]=$;for(var K=G;K<=$;K++)for(var J=V;J<=q;J++)L[K*X+J+1]+=1}}else _[4*z]=-1,j.push(z)}if(j.length>.25*r)return null;for(var Q=0;Q<D;Q++)L[Q+1]+=L[Q];for(var ee=new Int32Array(L[D]),te=L.slice(0,D),re=0;re<r;re++){var ne=_[4*re];if(!(ne<0))for(var ae=_[4*re+1],oe=_[4*re+2],ie=_[4*re+3],le=oe;le<=ie;le++)for(var ue=ne;ue<=ae;ue++){var ce=le*X+ue;ee[te[ce]]=re,te[ce]+=1}}return{triangleCount:r,minX:a,minZ:i,cellSize:O,cols:X,rows:E,cellStart:L,cellItems:ee,extras:Int32Array.from(j)}}function sampleNearestTriangleUV(t,r,a,o,i){var l=i&&i.triangleCount===r?function nearestTriangleIndexed(t,r,a,o){var i=o.minX,l=o.minZ,u=o.cellSize,c=o.cols,m=o.rows,v=o.cellStart,h=o.cellItems,p=o.extras,y=Math.floor((r-i)/u),g=Math.floor((a-l)/u);if(!Number.isFinite(y)||!Number.isFinite(g)||Math.abs(y)>Y||Math.abs(g)>Y)return nearestTriangleLinear(t,o.triangleCount,r,a);for(var x=1/0,b=-1,M=function consider(o){var i=o*P,l=triangleDistanceSq(r,a,t[i],t[i+1],t[i+4],t[i+5],t[i+8],t[i+9]);(l<x||l===x&&o<b)&&(x=l,b=o)},A=function scanCell(t){for(var r=v[t+1],a=v[t];a<r;a++)M(h[a])},S=0;S<p.length;S++)M(p[S]);for(var w=Math.max(0,-y,y-c+1,-g,g-m+1),k=Math.max(y,c-1-y,g,m-1-g),C=w;C<=k;C++){var Z=y-C,T=y+C,O=g-C,X=g+C,E=Math.max(0,Z),I=Math.min(c-1,T);if(O>=0&&O<m)for(var D=E;D<=I;D++)A(O*c+D);if(C>0){if(X>=0&&X<m)for(var _=E;_<=I;_++)A(X*c+_);var L=Math.max(0,O+1),j=Math.min(m-1,X-1);if(Z>=0&&Z<c)for(var z=L;z<=j;z++)A(z*c+Z);if(T>=0&&T<c)for(var N=L;N<=j;N++)A(N*c+T)}var R=Math.min(r-(i+Z*u),i+(T+1)*u-r,a-(l+O*u),l+(X+1)*u-a);if(R>0&&x<R*R*(1-1e-9))return b}return b}(t,a,o,i):nearestTriangleLinear(t,r,a,o);if(l<0)return null;var u=l*P,c=t[u],m=t[u+1],v=t[u+4],h=t[u+5],p=t[u+8],y=t[u+9],g=(h-y)*(c-p)+(p-v)*(m-y);if(Math.abs(g)<N)return null;var x=((h-y)*(a-p)+(p-v)*(o-y))/g,b=((y-m)*(a-p)+(c-p)*(o-y))/g,M=1-x-b;return[x*t[u+2]+b*t[u+6]+M*t[u+10],x*t[u+3]+b*t[u+7]+M*t[u+11]]}var R=a(7831);function collectDeckTriangles_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function collectDeckTriangles_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return collectDeckTriangles_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?collectDeckTriangles_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function collectDeckTriangles_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var B=.005,H=new h.yGw,U=new h.Vkp,W=new h.Pa4,V=new h.Pa4;function sampleDeckSurface(t,r){var a,o,i,l,u,c=function meshesMatching(t,r){var a=[];return t.traverse((function(t){var o=t;o.isMesh&&r.some((function(t){return o.name.includes(t)}))&&a.push(o)})),a}(t,r),m=null!==(a=c[0])&&void 0!==a?a:null;if(!m)return{reference:null,surface:null};var v=m.geometry;v.boundingBox||v.computeBoundingBox();var p,y,g=function patternAttributeName(t){var r=Array.isArray(t)?t[0]:t;return r instanceof h.Wid&&r.map?0===r.map.channel?"uv":"uv".concat(r.map.channel):"uv"}(m.material),x=function collectDeckTriangles(t,r,a){var o,i=H.copy(r.matrixWorld).invert().clone(),l=[],u={minX:1/0,maxX:-1/0,minZ:1/0,maxZ:-1/0},c=collectDeckTriangles_createForOfIteratorHelper(t);try{for(c.s();!(o=c.n()).done;){var m,v=o.value,h=v.geometry,p=h.getAttribute("position"),y=null!==(m=h.getAttribute(a))&&void 0!==m?m:h.getAttribute("uv");if(p&&y){var g=h.getAttribute("normal");H.multiplyMatrices(i,v.matrixWorld);for(var x=new Float32Array(3*p.count),b=0;b<p.count;b++)W.set(p.getX(b),p.getY(b),p.getZ(b)).applyMatrix4(H),x[3*b]=W.x,x[3*b+1]=W.y,x[3*b+2]=W.z,W.x<u.minX&&(u.minX=W.x),W.x>u.maxX&&(u.maxX=W.x),W.z<u.minZ&&(u.minZ=W.z),W.z>u.maxZ&&(u.maxZ=W.z);var M=new Float32Array(g?g.count:0);if(g){U.getNormalMatrix(H);for(var A=0;A<g.count;A++)V.set(g.getX(A),g.getY(A),g.getZ(A)).applyMatrix3(U).normalize(),M[A]=V.y}var S=-1/0;if(!g){for(var w=1/0,k=-1/0,C=0;C<p.count;C++){var Z=x[3*C+1];Z<w&&(w=Z),Z>k&&(k=Z)}S=(w+k)/2}for(var T=h.index,O=T?Math.floor(T.count/3):Math.floor(p.count/3),X=0;X<O;X++){var E=T?T.getX(3*X):3*X,I=T?T.getX(3*X+1):3*X+1,D=T?T.getX(3*X+2):3*X+2;if(g?M[E]>=.9&&M[I]>=.9&&M[D]>=.9:x[3*E+1]>S&&x[3*I+1]>S&&x[3*D+1]>S)for(var _=0,L=[E,I,D];_<L.length;_++){var j=L[_];l.push(x[3*j],x[3*j+2],y.getX(j),y.getY(j))}}}}}catch(t){c.e(t)}finally{c.f()}var z=l.length/P;return z<1?null:{triangles:new Float32Array(l),triangleCount:z,extent:u}}(c,m,g),b=v.boundingBox;return{reference:m,surface:{meshName:m.name,topY:null!==(o=null==b?void 0:b.max.y)&&void 0!==o?o:0,slabThickness:b?b.max.y-b.min.y:0,material:x?(p=Array.isArray(m.material)?m.material[0]:m.material,y=p.clone(),(0,R.pN)(y),y instanceof h.Wid&&(y.aoMap=null,y.lightMap=null),y.needsUpdate=!0,y):null,triangles:null!==(i=null==x?void 0:x.triangles)&&void 0!==i?i:null,triangleCount:null!==(l=null==x?void 0:x.triangleCount)&&void 0!==l?l:0,triangleIndex:x?buildTriangleGridIndex(x.triangles,x.triangleCount):null,attributeName:g,uvFit:x?fitAffineUV(x.triangles,x.triangleCount):null,extent:null!==(u=null==x?void 0:x.extent)&&void 0!==u?u:null}}}var q=.001;var G=(0,v.getLogger)("RealTimeViewer","DeckCutoutCollar"),$=new h.dpR;var K=a(7514);function DeckCutoutCollar_createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function DeckCutoutCollar_unsupportedIterableToArray(t,r){if(t){if("string"==typeof t)return DeckCutoutCollar_arrayLikeToArray(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?DeckCutoutCollar_arrayLikeToArray(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,i=function F(){};return{s:i,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,u=!0,c=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){c=!0,l=t},f:function f(){try{u||null==a.return||a.return()}finally{if(c)throw l}}}}function DeckCutoutCollar_arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=Array(r);a<r;a++)o[a]=t[a];return o}var J=(0,v.getLogger)("RealTimeViewer","DeckCutoutCollar"),Q=!1;function DeckCutoutCollar(){var t,r=(0,c.D)((function(t){return t.scene})),a=(0,u.K)((function(t){return t.scene.deckCutout})),l=(0,m.tb)((function(t){return t.deckCutoutFootprintOverride})),v=(0,m.tb)((function(t){return t.decorVersion})),p=function useCollarTextures(t){var r=t.mapUrl,a=t.normalMapUrl,l=t.roughnessMapUrl,u=(0,o.useState)(null),c=(0,i.Z)(u,2),m=c[0],v=c[1];return(0,o.useEffect)((function(){if(""!==r){var t=!0,o=[],u=function load(r){return""===r?Promise.resolve(null):$.loadAsync(r).then((function(r){return t?(o.push(r),r):(r.dispose(),null)}),(function(){return G.debug("[DeckCutoutCollar] collar texture failed to load: ".concat(r)),null}))};return Promise.all([u(r),u(a),u(l)]).then((function(r){var a=(0,i.Z)(r,3),o=a[0],l=a[1],u=a[2];if(t&&o){o.colorSpace=h.KI_;for(var c=0,m=[o,l,u];c<m.length;c++){var p=m[c];p&&(p.wrapS=h.rpg,p.wrapT=h.rpg,p.needsUpdate=!0)}v({map:o,normalMap:l,roughnessMap:u})}})),function(){t=!1;for(var r=0,a=o;r<a.length;r++)a[r].dispose();v(null)}}v(null)}),[r,a,l]),m}(a.collar.material),y=(0,o.useRef)(null),g=(0,o.useRef)(null),x=(0,o.useRef)(null),b=(0,o.useRef)(-1),M=(0,o.useState)(null),A=(0,i.Z)(M,2),S=A[0],w=A[1],k=(0,o.useMemo)((function(){return a.nodeMatch.split(",").map((function(t){return t.trim()})).filter((function(t){return t.length>0}))}),[a.nodeMatch]);(0,o.useEffect)((function(){g.current=null,x.current=null,w(null)}),[k]);var C=a.collar,Z=a.authoredHole,T=a.enabled,O=T&&null!==l&&l.length>=3;(0,o.useEffect)((function(){if(T&&!Q)return m.tb.getState().beginSceneLoad(m.Wz,{timeoutMs:25e3,onTimeout:function onTimeout(){return Q=!0}}),function(){return m.tb.getState().endSceneLoad(m.Wz)}}),[T]),(0,o.useEffect)((function(){O&&!Q&&m.tb.getState().beginSceneLoad(m.Wz,{timeoutMs:8e3,onTimeout:function onTimeout(){return Q=!0}})}),[O]);var X=(0,o.useCallback)((function(){var t=sampleDeckSurface(r,k),a=t.reference,o=t.surface;g.current=a;var i=function deckSurfaceKey(t){return t?"".concat(t.meshName,"|").concat(t.topY.toFixed(4),"|").concat(t.attributeName,"|").concat(t.triangleCount):"none"}(o);if(x.current!==i&&(x.current=i,w(o),o)){(0,j._m)("deck: surface sampled");var l,u=DeckCutoutCollar_createForOfIteratorHelper(function describeDeckSurface(t,r){var a=[],o=t.extent;return o&&a.push("[DeckCutoutCollar] matched deck meshes span X [".concat(o.minX.toFixed(3),", ").concat(o.maxX.toFixed(3),"] Z [").concat(o.minZ.toFixed(3),", ").concat(o.maxZ.toFixed(3),"]")),a.push("[DeckCutoutCollar] UV source: ".concat(r?"own material (declared world-planar tiling)":null===t.uvFit?"no fit possible (per-vertex sampling)":t.uvFit.residualMetres<=B?"one fitted mapping, residual ".concat((1e3*t.uvFit.residualMetres).toFixed(2)," mm"):"per-vertex sampling — fit residual ".concat((1e3*t.uvFit.residualMetres).toFixed(1)," mm exceeds ").concat(5," mm, deck unwrap is not one plane"))),a}(o,null!==p));try{for(u.s();!(l=u.n()).done;){var c=l.value;J.debug(c)}}catch(t){u.e(t)}finally{u.f()}}}),[r,k,p]);(0,o.useEffect)((function(){T&&(b.current=1)}),[T,v,X]),(0,o.useEffect)((function(){O&&null===S&&J.debug("[DeckCutoutCollar] footprint active but NO floor mesh matches '".concat(a.nodeMatch,"'"))}),[O,S,a.nodeMatch]),(0,c.F)((function(){if(T){b.current>=0&&(0===b.current&&X(),b.current-=1);var t=g.current;t&&!t.parent&&X();var r=y.current;t&&r&&(r.matrix.copy(t.matrixWorld),r.matrixWorldNeedsUpdate=!0)}}));var E=(0,o.useMemo)((function(){if(!T||null===S||null===l||l.length<3)return null;var t=function buildCollarGeometry(t){var r=t.footprint,a=t.hole,o=t.collar,i=t.deck,l=t.ownMaterial,u=new h.bnF,c=a.centerX-a.halfExtentX-o.overlap,m=a.centerX+a.halfExtentX+o.overlap,v=a.centerZ-a.halfExtentZ-o.overlap,p=a.centerZ+a.halfExtentZ+o.overlap;u.moveTo(c,v),u.lineTo(m,v),u.lineTo(m,p),u.lineTo(c,p),u.closePath();for(var y=0,g=1/0,x=-1/0,b=1/0,M=-1/0,A=new h.y$t,S=0;S<r.length;S++){var w=Math.min(m-q,Math.max(c+q,r[S][0])),k=Math.min(p-q,Math.max(v+q,r[S][1]));w===r[S][0]&&k===r[S][1]||(y+=1),w<g&&(g=w),w>x&&(x=w),k<b&&(b=k),k>M&&(M=k),0===S?A.moveTo(w,k):A.lineTo(w,k)}A.closePath(),u.holes.push(A);var C=(x-g)*(M-b)/((m-c)*(p-v)),Z="[DeckCutoutCollar] ring built: hole X [".concat(c.toFixed(2),", ").concat(m.toFixed(2),"] Z [").concat(v.toFixed(2),", ").concat(p.toFixed(2),"] | opening X [").concat(g.toFixed(2),", ").concat(x.toFixed(2),"] Z [").concat(b.toFixed(2),", ").concat(M.toFixed(2),"] = ").concat((100*C).toFixed(0),"% of it | ").concat(y,"/").concat(r.length," outline pts clamped").concat(y>0?" — THE ARTICLE IS LARGER THAN ITS HOLE":""),T=o.skirtDepth>0?o.skirtDepth:Math.max(i.slabThickness,.01),O=new h.O7d(u,{depth:T,bevelEnabled:!1});if(O.rotateX(Math.PI/2),O.translate(0,i.topY-o.recess,0),l){for(var X=l.textureScale,E=l.rotationDeg,I=l.offsetX,D=l.offsetZ,_=X>0?X:1,L=E*Math.PI/180,j=Math.cos(L),z=Math.sin(L),P=O.getAttribute("position"),N=new Float32Array(2*P.count),Y=0;Y<P.count;Y++){var R=P.getX(Y)+I,H=P.getZ(Y)+D;N[2*Y]=(R*j-H*z)/_,N[2*Y+1]=(R*z+H*j)/_}var U=new h.TlE(N,2);O.setAttribute("uv",U),O.setAttribute("uv1",U)}else if(i.triangles){for(var W=i.uvFit&&i.uvFit.residualMetres<=B?i.uvFit:null,V=O.getAttribute("position"),G=new Float32Array(2*V.count),$=0;$<V.count;$++){var K=V.getX($),J=V.getZ($);if(W)G[2*$]=W.ux*K+W.uz*J+W.u0,G[2*$+1]=W.vx*K+W.vz*J+W.v0;else{var Q=sampleNearestTriangleUV(i.triangles,i.triangleCount,K,J,i.triangleIndex);Q&&(G[2*$]=Q[0],G[2*$+1]=Q[1])}}var ee=new h.TlE(G,2);O.setAttribute("uv",ee),O.setAttribute("uv1",ee)}return{geometry:O,diagnostic:Z}}({footprint:l,hole:Z,collar:C,deck:S,ownMaterial:p?C.material:null});return J.debug(t.diagnostic),t.geometry}),[T,l,Z.centerX,Z.centerZ,Z.halfExtentX,Z.halfExtentZ,C,S,p]);(0,o.useEffect)((function(){E&&!Q&&(Q=!0,(0,j._m)("deck: first collar geometry"),m.tb.getState().endSceneLoad(m.Wz))}),[E]),(0,o.useEffect)((function(){return function(){return null==E?void 0:E.dispose()}}),[E]);var I=null!==(t=null==S?void 0:S.material)&&void 0!==t?t:null;return(0,o.useEffect)((function(){return function(){return null==I?void 0:I.dispose()}}),[I]),E?p?(0,K.jsx)("mesh",{ref:y,geometry:E,matrixAutoUpdate:!1,receiveShadow:!0,castShadow:!0,children:(0,K.jsx)("meshStandardMaterial",{map:p.map,normalMap:p.normalMap,roughnessMap:p.roughnessMap,color:C.color,roughness:C.roughness,metalness:0})}):I?(0,K.jsx)("mesh",{ref:y,geometry:E,material:I,matrixAutoUpdate:!1,receiveShadow:!0,castShadow:!0}):(0,K.jsx)("mesh",{ref:y,geometry:E,matrixAutoUpdate:!1,receiveShadow:!0,castShadow:!0,children:(0,K.jsx)("meshStandardMaterial",{color:C.color,roughness:C.roughness,metalness:0})}):null}function DeckCutoutSubsystem(){return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(DeckCutoutArticleSync,{}),(0,K.jsx)(DeckCutoutCollar,{})]})}}}]);