@ifc-lite/viewer 1.21.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.turbo/turbo-build.log +57 -50
  2. package/.turbo/turbo-typecheck.log +1 -1
  3. package/CHANGELOG.md +10 -0
  4. package/dist/assets/arrow-fie-E7fe.js +20 -0
  5. package/dist/assets/ascii-points-source-bTjLVmUX.js +1 -0
  6. package/dist/assets/{basketViewActivator-Bzw51jhm.js → basketViewActivator-EHAhHlwN.js} +12 -13
  7. package/dist/assets/bcf-Bhx-K17f.js +281 -0
  8. package/dist/assets/{browser-C5TFR7sH.js → browser-CVf8ATeW.js} +6 -6
  9. package/dist/assets/cesium-B4ZIU9jS.js +17742 -0
  10. package/dist/assets/decode-worker-CYqSjk1n.js +172 -0
  11. package/dist/assets/e57-source-CQHxE8n3.js +1 -0
  12. package/dist/assets/emscripten-module.browser-DcFZLAUx.js +1 -0
  13. package/dist/assets/exporters-KTio0Tdm.js +5723 -0
  14. package/dist/assets/geometry-controller.worker-Cm2P_EJr.js +7 -0
  15. package/dist/assets/geometry.worker-DchLBqZ8.js +1 -0
  16. package/dist/assets/{ids-B7AXEv7h.js → ids-CS7VCFin.js} +5 -5
  17. package/dist/assets/ifc-lite-C6wEhXa6.js +7 -0
  18. package/dist/assets/{ifc-lite_bg-DlKs5-yM.wasm → ifc-lite_bg-CSeT3fNI.wasm} +0 -0
  19. package/dist/assets/{ifc-lite_bg-PqmRe3Ph.wasm → ifc-lite_bg-ns4cSnX2.wasm} +0 -0
  20. package/dist/assets/{index-DVNSvEMh.js → index-8k9h-ANq.js} +60997 -59926
  21. package/dist/assets/index-BZC2YaOP.css +1 -0
  22. package/dist/assets/index-HqAIQkr6.js +22 -0
  23. package/dist/assets/inline-worker-BpBzlmd6.js +1 -0
  24. package/dist/assets/las-BW6LIc_j.js +1 -0
  25. package/dist/assets/las-source-C_IGrgRq.js +1 -0
  26. package/dist/assets/laz-source-jj3xI5Y4.js +125 -0
  27. package/dist/assets/maplibre-gl-C4LXKM6c.js +808 -0
  28. package/dist/assets/{native-bridge-BiD01jI9.js → native-bridge-DNrEhx2R.js} +5 -8
  29. package/dist/assets/{parser.worker-Bnbrl6gy.js → parser.worker-BcjkIo89.js} +2 -2
  30. package/dist/assets/pcd-source-Ck0UnVDn.js +3 -0
  31. package/dist/assets/ply-source-C8jjyzxE.js +4 -0
  32. package/dist/assets/{exporters-u0sz2Upj.js → sandbox-BSn5MyEJ.js} +11745 -7412
  33. package/dist/assets/{server-client-DP8fMPY9.js → server-client-D-kU2XAF.js} +4 -4
  34. package/dist/assets/{three-CDRZThFA.js → three-DwNDHx9-.js} +163 -171
  35. package/dist/assets/wasm-bridge-Cha08LdC.js +1 -0
  36. package/dist/assets/{workerHelpers-CBbWSJmd.js → workerHelpers-pUUnk9Wc.js} +1 -1
  37. package/dist/assets/zip-BJqVbRkU.js +2 -0
  38. package/dist/index.html +10 -12
  39. package/package.json +11 -11
  40. package/src/components/mcp/PlaygroundChat.tsx +90 -52
  41. package/src/components/viewer/CesiumOverlay.tsx +150 -91
  42. package/src/components/viewer/CesiumPlacementEditor.tsx +1009 -0
  43. package/src/components/viewer/ChatPanel.tsx +76 -93
  44. package/src/components/viewer/EntityContextMenu.tsx +68 -10
  45. package/src/components/viewer/MainToolbar.tsx +33 -3
  46. package/src/components/viewer/ViewportContainer.tsx +70 -16
  47. package/src/components/viewer/ViewportOverlays.tsx +2 -98
  48. package/src/components/viewer/chat/ByokKeyModal.tsx +338 -0
  49. package/src/components/viewer/chat/ByokStreamingPill.tsx +62 -0
  50. package/src/components/viewer/chat/ByokTrustDiagram.tsx +192 -0
  51. package/src/components/viewer/properties/GeoreferencingPanel.tsx +49 -52
  52. package/src/components/viewer/properties/ModelMetadataPanel.tsx +55 -44
  53. package/src/components/viewer/selectionHandlers.ts +7 -1
  54. package/src/lib/geo/cesium-bridge.ts +86 -50
  55. package/src/lib/geo/cesium-placement.test.ts +244 -0
  56. package/src/lib/geo/cesium-placement.ts +231 -0
  57. package/src/lib/geo/effective-georef.test.ts +74 -1
  58. package/src/lib/geo/effective-georef.ts +40 -93
  59. package/src/lib/geo/geo-scale.ts +104 -0
  60. package/src/lib/geo/reproject.test.ts +130 -0
  61. package/src/lib/geo/reproject.ts +37 -12
  62. package/src/lib/geo/terrain-elevation.ts +198 -89
  63. package/src/lib/lens/adapter.ts +52 -6
  64. package/src/lib/llm/clipboard-detect.test.ts +150 -0
  65. package/src/lib/llm/clipboard-detect.ts +90 -0
  66. package/src/lib/llm/models.ts +28 -0
  67. package/src/lib/llm/stream-direct.ts +16 -4
  68. package/src/lib/llm/types.ts +8 -0
  69. package/src/services/playground-model.ts +55 -0
  70. package/src/store/index.ts +4 -5
  71. package/src/store/slices/cesiumSlice.ts +100 -19
  72. package/src/store.ts +3 -0
  73. package/dist/assets/arrow-CZ5kQ26f.js +0 -20
  74. package/dist/assets/bcf-4K724hw0.js +0 -281
  75. package/dist/assets/cesium-DUOzBlqv.js +0 -17817
  76. package/dist/assets/decode-worker-t2EGKAxO.js +0 -1708
  77. package/dist/assets/emscripten-module.browser-CY5t0Vfq.js +0 -1
  78. package/dist/assets/geometry-controller.worker-NH8pZmrU.js +0 -7
  79. package/dist/assets/geometry.worker-Bp4rW_R1.js +0 -1
  80. package/dist/assets/ifc-lite-DfZHk36-.js +0 -7
  81. package/dist/assets/index-CSWgTe1s.css +0 -1
  82. package/dist/assets/index-XwKzDuw6.js +0 -22
  83. package/dist/assets/maplibre-gl-CGLcoNXc.js +0 -811
  84. package/dist/assets/sandbox-DPD1ROr0.js +0 -9700
  85. package/dist/assets/wasm-bridge-CErti6zX.js +0 -1
  86. package/dist/assets/zip-DBEtpeu6.js +0 -12
  87. package/src/components/viewer/CesiumSettingsDialog.tsx +0 -100
@@ -0,0 +1,3 @@
1
+ function U(n,t){const e=new Uint8Array(t);let o=0,l=0;const a=n.length;for(;o<a;){let r=n[o++];if(r<32){const s=r+1;if(o+s>a)throw new Error("LZF: literal run exceeds input bounds");if(l+s>t)throw new Error("LZF: literal run exceeds output bounds");e.set(n.subarray(o,o+s),l),o+=s,l+=s}else{let s=r>>5;if(s===7){if(o>=a)throw new Error("LZF: truncated extended length");s+=n[o++]}if(s+=2,o>=a)throw new Error("LZF: truncated back-reference offset");const i=l-((r&31)<<8)-n[o++]-1;if(i<0)throw new Error("LZF: back-reference points before output start");if(l+s>t)throw new Error("LZF: back-reference exceeds output bounds");for(let c=0;c<s;c++)e[l+c]=e[i+c];l+=s}}if(l!==t)throw new Error(`LZF: decompressed ${l} bytes, expected ${t}`);return e}const P=new TextDecoder;function L(n){const t=O(n);let e,o;return t.data==="ascii"?{positions:e,colors:o}=T(n,t):t.data==="binary"?{positions:e,colors:o}=Z(n,t):{positions:e,colors:o}=B(n,t),{positions:e,colors:o,pointCount:t.pointCount,bbox:M(e)}}function O(n){const t=Math.min(65536,n.length),e=P.decode(n.subarray(0,t)),o=e.search(/^DATA\s+(\S+)/m);if(o<0)throw new Error("PCD: missing DATA line in header (scanned first "+t+" bytes)");const l=e.slice(0,o),a=e.slice(o).match(/^DATA\s+(\S+)\s*\n/);if(!a)throw new Error("PCD: malformed DATA line");const r=a[1].toLowerCase();if(r!=="ascii"&&r!=="binary"&&r!=="binary_compressed")throw new Error(`PCD: unsupported DATA kind "${r}"`);const s=o+a[0].length,i=new Map;for(const w of l.split(`
2
+ `)){const C=w.replace(/#.*$/,"").trim();if(!C)continue;const h=C.split(/\s+/),y=h[0].toUpperCase();i.set(y,h.slice(1))}const c=i.get("FIELDS")??[],f=(i.get("SIZE")??[]).map(Number),b=i.get("TYPE")??[],p=(i.get("COUNT")??[]).map(Number),u=i.get("WIDTH")?.[0],x=i.get("HEIGHT")?.[0],E=i.get("POINTS")?.[0];if(c.length===0)throw new Error("PCD: missing FIELDS");if(f.length!==c.length)throw new Error("PCD: SIZE/FIELDS length mismatch");if(b.length!==c.length)throw new Error("PCD: TYPE/FIELDS length mismatch");const A=[];let m=0;for(let w=0;w<c.length;w++){const C=p[w]??1,h=f[w],y=b[w];if(y!=="F"&&y!=="I"&&y!=="U")throw new Error(`PCD: unsupported field TYPE "${y}"`);A.push({name:c[w],size:h,type:y,count:C,offset:m}),m+=h*C}const d=u!==void 0?parseInt(u,10):0,F=x!==void 0?parseInt(x,10):1,D=E!==void 0?parseInt(E,10):d*F;if(!Number.isFinite(D)||D<=0)throw new Error("PCD: invalid point count");return{version:i.get("VERSION")?.[0]??"0.7",fields:A,width:d,height:F,pointCount:D,pointStride:m,data:r,bodyOffset:s}}function I(n){const t={};for(const e of n.fields){const o=e.name.toLowerCase();o==="x"?t.xField=e:o==="y"?t.yField=e:o==="z"?t.zField=e:(o==="rgb"||o==="rgba")&&(t.rgbField=e)}if(!t.xField||!t.yField||!t.zField)throw new Error("PCD: x/y/z fields are required");return t}function T(n,t){const e=I(t),o=P.decode(n.subarray(t.bodyOffset)),l=new Float32Array(t.pointCount*3),a=e.rgbField?new Float32Array(t.pointCount*3):void 0,r=N(t,e);let s=0,i=0,c=0;for(;c<t.pointCount&&i<o.length;){let f=o.indexOf(`
3
+ `,i);f<0&&(f=o.length);const b=o.slice(i,f).trim();if(i=f+1,!b)continue;const p=b.split(/\s+/);if(l[s*3]=Number(p[r.xCol]),l[s*3+1]=Number(p[r.yCol]),l[s*3+2]=Number(p[r.zCol]),a&&r.rgbCol>=0){const u=v(p[r.rgbCol],e.rgbField);a[s*3]=(u>>16&255)/255,a[s*3+1]=(u>>8&255)/255,a[s*3+2]=(u&255)/255}s++,c++}if(c!==t.pointCount)throw new Error(`PCD ascii: expected ${t.pointCount} points, got ${c}`);return{positions:l,colors:a}}function N(n,t){let e=0,o=-1,l=-1,a=-1,r=-1;for(const s of n.fields)s===t.xField&&(o=e),s===t.yField&&(l=e),s===t.zField&&(a=e),s===t.rgbField&&(r=e),e+=s.count;return{xCol:o,yCol:l,zCol:a,rgbCol:r}}function Z(n,t){const e=I(t),o=new DataView(n.buffer,n.byteOffset+t.bodyOffset,t.pointCount*t.pointStride),l=new Float32Array(t.pointCount*3),a=e.rgbField?new Float32Array(t.pointCount*3):void 0;for(let r=0;r<t.pointCount;r++){const s=r*t.pointStride;if(l[r*3]=g(o,s+e.xField.offset,e.xField),l[r*3+1]=g(o,s+e.yField.offset,e.yField),l[r*3+2]=g(o,s+e.zField.offset,e.zField),a&&e.rgbField){const i=o.getUint32(s+e.rgbField.offset,!0);a[r*3]=(i>>16&255)/255,a[r*3+1]=(i>>8&255)/255,a[r*3+2]=(i&255)/255}}return{positions:l,colors:a}}function B(n,t){if(n.length<t.bodyOffset+8)throw new Error("PCD binary_compressed: truncated size header");const e=new DataView(n.buffer,n.byteOffset+t.bodyOffset,8),o=e.getUint32(0,!0),l=e.getUint32(4,!0),a=t.pointCount*t.pointStride;if(l!==a)throw new Error(`PCD binary_compressed: declared uncompressed=${l} does not match fields*points=${a}`);const r=n.subarray(t.bodyOffset+8,t.bodyOffset+8+o),s=U(r,l),i=I(t),c=new Map;let f=0;for(const d of t.fields)c.set(d,f),f+=t.pointCount*d.size*d.count;const b=new DataView(s.buffer,s.byteOffset,s.byteLength),p=new Float32Array(t.pointCount*3),u=i.rgbField?new Float32Array(t.pointCount*3):void 0,x=c.get(i.xField),E=c.get(i.yField),A=c.get(i.zField),m=i.rgbField?c.get(i.rgbField):0;for(let d=0;d<t.pointCount;d++)if(p[d*3]=g(b,x+d*i.xField.size,i.xField),p[d*3+1]=g(b,E+d*i.yField.size,i.yField),p[d*3+2]=g(b,A+d*i.zField.size,i.zField),u&&i.rgbField){const F=b.getUint32(m+d*i.rgbField.size,!0);u[d*3]=(F>>16&255)/255,u[d*3+1]=(F>>8&255)/255,u[d*3+2]=(F&255)/255}return{positions:p,colors:u}}function g(n,t,e){if(e.type==="F")return e.size===8?n.getFloat64(t,!0):n.getFloat32(t,!0);if(e.type==="U"){if(e.size===1)return n.getUint8(t);if(e.size===2)return n.getUint16(t,!0);if(e.size===4)return n.getUint32(t,!0)}else{if(e.size===1)return n.getInt8(t);if(e.size===2)return n.getInt16(t,!0);if(e.size===4)return n.getInt32(t,!0)}throw new Error(`PCD: unsupported field width ${e.size} for type ${e.type}`)}const S=new ArrayBuffer(4),R=new Float32Array(S),$=new Uint32Array(S);function v(n,t){return t.type==="F"?(R[0]=Number(n),$[0]):Number(n)>>>0}function M(n){let t=1/0,e=1/0,o=1/0,l=-1/0,a=-1/0,r=-1/0;for(let s=0;s<n.length;s+=3){const i=n[s],c=n[s+1],f=n[s+2];i<t&&(t=i),i>l&&(l=i),c<e&&(e=c),c>a&&(a=c),f<o&&(o=f),f>r&&(r=f)}return{min:[t,e,o],max:[l,a,r]}}class V{blob;downsample;label;chunk=null;served=!1;constructor(t,e={}){this.blob=t,this.downsample=e.downsample??{stride:1},this.label=e.label}async open(t){z(t);const e=await this.blob.arrayBuffer();z(t);const o=L(new Uint8Array(e));return this.chunk=_(o,this.downsample.stride),{totalPointCount:this.chunk.pointCount,bbox:this.chunk.bbox,hasColor:!!this.chunk.colors,hasClassification:!!this.chunk.classifications,hasIntensity:!!this.chunk.intensities,label:this.label}}async next(t,e){return z(e),!this.chunk||this.served?null:(this.served=!0,this.chunk)}close(){this.chunk=null,this.served=!1}}function _(n,t){const e=Math.max(1,t|0);if(e===1)return n;const o=Math.ceil(n.pointCount/e),l=new Float32Array(o*3),a=n.colors?new Float32Array(o*3):void 0,r=n.classifications?new Uint8Array(o):void 0,s=n.intensities?new Uint16Array(o):void 0;let i=0;for(let c=0;c<n.pointCount;c+=e)l[i*3]=n.positions[c*3],l[i*3+1]=n.positions[c*3+1],l[i*3+2]=n.positions[c*3+2],a&&n.colors&&(a[i*3]=n.colors[c*3],a[i*3+1]=n.colors[c*3+1],a[i*3+2]=n.colors[c*3+2]),r&&n.classifications&&(r[i]=n.classifications[c]),s&&n.intensities&&(s[i]=n.intensities[c]),i++;return{positions:l,colors:a,classifications:r,intensities:s,pointCount:o,bbox:n.bbox}}function z(n){if(n?.aborted)throw new DOMException("Aborted","AbortError")}export{V as PcdStreamingSource};
@@ -0,0 +1,4 @@
1
+ const Y={char:1,int8:1,uchar:1,uint8:1,short:2,int16:2,ushort:2,uint16:2,int:4,int32:4,uint:4,uint32:4,float:4,float32:4,double:8,float64:8},I=new TextDecoder;function C(n){const r=Math.min(65536,n.length),e=I.decode(n.subarray(0,r));if(!e.startsWith("ply"))throw new Error('PLY: missing magic — file does not start with "ply"');const o=e.indexOf("end_header");if(o<0)throw new Error("PLY: missing end_header line in first "+r+" bytes");const c=e.indexOf(`
2
+ `,o);if(c<0)throw new Error("PLY: end_header line not terminated by newline");const d=e.slice(0,c+1),m=c+1,u=d.split(`
3
+ `).map(l=>l.trim()).filter(l=>l.length>0);let f=null,t="1.0";const h=[];let b=null;for(const l of u)if(!(l==="ply"||l==="end_header")&&!l.startsWith("comment")&&!l.startsWith("obj_info")){if(l.startsWith("format ")){const y=l.split(/\s+/),p=y[1];if(t=y[2]??"1.0",p==="ascii"||p==="binary_little_endian"||p==="binary_big_endian")f=p;else throw new Error(`PLY: unsupported format "${p}"`);continue}if(l.startsWith("element ")){const y=l.split(/\s+/);b={name:y[1],count:parseInt(y[2],10),properties:[],recordSize:0},h.push(b);continue}if(l.startsWith("property ")){if(!b)throw new Error(`PLY: property declared before any element: "${l}"`);const y=l.split(/\s+/);if(y[1]==="list")continue;const p=y[1],i=y[2],a=Y[p];if(a===void 0)throw new Error(`PLY: unknown property type "${p}"`);b.properties.push({name:i,type:p,size:a,offset:b.recordSize}),b.recordSize+=a;continue}}if(!f)throw new Error("PLY: missing `format` line in header");if(!h.some(l=>l.name==="vertex"))throw new Error("PLY: missing `vertex` element");return{format:f,version:t,elements:h,bodyOffset:m}}function E(n){const r=C(n),e=r.elements.find(i=>i.name==="vertex");if(!e)throw new Error("PLY: no vertex element");if(r.elements[0]!==e)throw new Error(`PLY: vertex element must appear first; saw "${r.elements[0]?.name}" first`);const o=e.properties.find(i=>i.name==="x"),c=e.properties.find(i=>i.name==="y"),d=e.properties.find(i=>i.name==="z");if(!o||!c||!d)throw new Error("PLY: vertex element must define x, y, z properties");const m=e.properties.find(i=>i.name==="red"||i.name==="r"),u=e.properties.find(i=>i.name==="green"||i.name==="g"),f=e.properties.find(i=>i.name==="blue"||i.name==="b"),t=!!(m&&u&&f),h=e.properties.find(i=>i.name==="intensity"||i.name==="scalar_Intensity"),b=e.count,l=new Float32Array(b*3),y=t?new Float32Array(b*3):void 0,p=h?new Uint16Array(b):void 0;return r.format==="ascii"?_(n,r,e,l,y,p):L(n,r,e,l,y,p,r.format==="binary_little_endian"),{positions:l,colors:y,intensities:p,pointCount:b,bbox:z(l)}}function _(n,r,e,o,c,d){const m=I.decode(n.subarray(r.bodyOffset)),u=e.properties.findIndex(a=>a.name==="x"),f=e.properties.findIndex(a=>a.name==="y"),t=e.properties.findIndex(a=>a.name==="z"),h=e.properties.findIndex(a=>a.name==="red"||a.name==="r"),b=e.properties.findIndex(a=>a.name==="green"||a.name==="g"),l=e.properties.findIndex(a=>a.name==="blue"||a.name==="b"),y=e.properties.findIndex(a=>a.name==="intensity"||a.name==="scalar_Intensity");let p=0,i=0;for(;i<e.count&&p<m.length;){let a=m.indexOf(`
4
+ `,p);a<0&&(a=m.length);const s=m.slice(p,a).trim();if(p=a+1,!s)continue;const w=s.split(/\s+/);o[i*3]=Number(w[u]),o[i*3+1]=Number(w[f]),o[i*3+2]=Number(w[t]),c&&h>=0&&b>=0&&l>=0&&(c[i*3]=P(Number(w[h])/255),c[i*3+1]=P(Number(w[b])/255),c[i*3+2]=P(Number(w[l])/255)),d&&y>=0&&(d[i]=Math.min(65535,Math.max(0,Number(w[y])|0))),i++}if(i!==e.count)throw new Error(`PLY ascii: expected ${e.count} vertex lines, got ${i}`)}function L(n,r,e,o,c,d,m){const u=e.recordSize,f=e.count*u;if(n.length<r.bodyOffset+f)throw new Error(`PLY binary: expected ${f} body bytes, got ${n.length-r.bodyOffset}`);const t=new DataView(n.buffer,n.byteOffset+r.bodyOffset,f),h=e.properties.find(s=>s.name==="x"),b=e.properties.find(s=>s.name==="y"),l=e.properties.find(s=>s.name==="z"),y=c?e.properties.find(s=>s.name==="red"||s.name==="r"):void 0,p=c?e.properties.find(s=>s.name==="green"||s.name==="g"):void 0,i=c?e.properties.find(s=>s.name==="blue"||s.name==="b"):void 0,a=d?e.properties.find(s=>s.name==="intensity"||s.name==="scalar_Intensity"):void 0;for(let s=0;s<e.count;s++){const w=s*u;o[s*3]=g(t,w+h.offset,h,m),o[s*3+1]=g(t,w+b.offset,b,m),o[s*3+2]=g(t,w+l.offset,l,m),c&&y&&p&&i&&(c[s*3]=P(g(t,w+y.offset,y,m)/255),c[s*3+1]=P(g(t,w+p.offset,p,m)/255),c[s*3+2]=P(g(t,w+i.offset,i,m)/255)),d&&a&&(d[s]=Math.min(65535,Math.max(0,g(t,w+a.offset,a,m)|0)))}}function g(n,r,e,o){switch(e.type){case"char":case"int8":return n.getInt8(r);case"uchar":case"uint8":return n.getUint8(r);case"short":case"int16":return n.getInt16(r,o);case"ushort":case"uint16":return n.getUint16(r,o);case"int":case"int32":return n.getInt32(r,o);case"uint":case"uint32":return n.getUint32(r,o);case"float":case"float32":return n.getFloat32(r,o);case"double":case"float64":return n.getFloat64(r,o);default:throw new Error(`PLY: cannot read scalar of type "${e.type}"`)}}function P(n){return n<0?0:n>1?1:n}function z(n){let r=1/0,e=1/0,o=1/0,c=-1/0,d=-1/0,m=-1/0;for(let u=0;u<n.length;u+=3){const f=n[u],t=n[u+1],h=n[u+2];f<r&&(r=f),f>c&&(c=f),t<e&&(e=t),t>d&&(d=t),h<o&&(o=h),h>m&&(m=h)}return{min:[r,e,o],max:[c,d,m]}}class O{blob;downsample;label;chunk=null;served=!1;constructor(r,e={}){this.blob=r,this.downsample=e.downsample??{stride:1},this.label=e.label}async open(r){x(r);const e=await this.blob.arrayBuffer();x(r);const o=new Uint8Array(e),d=C(o).elements.find(t=>t.name==="vertex");if(!d)throw new Error("PLY: no vertex element");const m=!!d.properties.find(t=>t.name==="red"||t.name==="r")&&!!d.properties.find(t=>t.name==="green"||t.name==="g")&&!!d.properties.find(t=>t.name==="blue"||t.name==="b"),u=!!d.properties.find(t=>t.name==="intensity"||t.name==="scalar_Intensity"),f=E(o);return this.chunk=A(f,this.downsample.stride),{totalPointCount:this.chunk.pointCount,bbox:this.chunk.bbox,hasColor:m,hasClassification:!1,hasIntensity:u,label:this.label}}async next(r,e){return x(e),!this.chunk||this.served?null:(this.served=!0,this.chunk)}close(){this.chunk=null,this.served=!1}}function A(n,r){const e=Math.max(1,r|0);if(e===1)return n;const o=Math.ceil(n.pointCount/e),c=new Float32Array(o*3),d=n.colors?new Float32Array(o*3):void 0,m=n.classifications?new Uint8Array(o):void 0,u=n.intensities?new Uint16Array(o):void 0;let f=0;for(let t=0;t<n.pointCount;t+=e)c[f*3]=n.positions[t*3],c[f*3+1]=n.positions[t*3+1],c[f*3+2]=n.positions[t*3+2],d&&n.colors&&(d[f*3]=n.colors[t*3],d[f*3+1]=n.colors[t*3+1],d[f*3+2]=n.colors[t*3+2]),m&&n.classifications&&(m[f]=n.classifications[t]),u&&n.intensities&&(u[f]=n.intensities[t]),f++;return{positions:c,colors:d,classifications:m,intensities:u,pointCount:o,bbox:n.bbox}}function x(n){if(n?.aborted)throw new DOMException("Aborted","AbortError")}export{O as PlyStreamingSource};