@splinetool/runtime 1.12.98 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +195 -22
- package/build/boolean.js +406 -2
- package/build/boolean.js.br +0 -0
- package/build/boolean.js.gz +0 -0
- package/build/boolean.wasm +0 -0
- package/build/boolean.wasm.br +0 -0
- package/build/boolean.wasm.gz +0 -0
- package/build/gaussian-splat-compression.js.br +0 -0
- package/build/gaussian-splat-compression.js.gz +0 -0
- package/build/hana-ui.js +4299 -0
- package/build/hana-ui.js.br +0 -0
- package/build/hana-ui.js.gz +0 -0
- package/build/hana-ui.wasm +0 -0
- package/build/hana-ui.wasm.br +0 -0
- package/build/hana-ui.wasm.gz +0 -0
- package/build/howler.js.br +0 -0
- package/build/howler.js.gz +0 -0
- package/build/navmesh.js.br +0 -0
- package/build/navmesh.js.gz +0 -0
- package/build/navmesh.wasm +0 -0
- package/build/navmesh.wasm.br +0 -0
- package/build/navmesh.wasm.gz +0 -0
- package/build/opentype.js.br +0 -0
- package/build/opentype.js.gz +0 -0
- package/build/physics.js +1 -1
- package/build/physics.js.br +0 -0
- package/build/physics.js.gz +0 -0
- package/build/physics.wasm +0 -0
- package/build/physics.wasm.br +0 -0
- package/build/physics.wasm.gz +0 -0
- package/build/process.js +2 -2
- package/build/process.js.br +0 -0
- package/build/process.js.gz +0 -0
- package/build/process.wasm +0 -0
- package/build/process.wasm.br +0 -0
- package/build/process.wasm.gz +0 -0
- package/build/runtime-DRACOLoader-TQHJ6SJB.js +1 -0
- package/build/runtime-DRACOLoader-TQHJ6SJB.js.br +0 -0
- package/build/runtime-DRACOLoader-TQHJ6SJB.js.gz +0 -0
- package/build/runtime-Perfs-KMJFDYHU.js +1 -0
- package/build/runtime-Perfs-KMJFDYHU.js.br +0 -0
- package/build/runtime-Perfs-KMJFDYHU.js.gz +0 -0
- package/build/runtime-aiAssistant-XJVJ7TQB.js +1 -0
- package/build/runtime-aiAssistant-XJVJ7TQB.js.br +0 -0
- package/build/runtime-aiAssistant-XJVJ7TQB.js.gz +0 -0
- package/build/runtime-apiServices-KAO5SQJZ.js +1 -0
- package/build/runtime-apiServices-KAO5SQJZ.js.br +0 -0
- package/build/runtime-apiServices-KAO5SQJZ.js.gz +0 -0
- package/build/runtime-audio-Y3GYW4YQ.js +1 -0
- package/build/runtime-audio-Y3GYW4YQ.js.br +0 -0
- package/build/runtime-audio-Y3GYW4YQ.js.gz +0 -0
- package/build/runtime-bloom-XRHHZNNT.js +1 -0
- package/build/runtime-bloom-XRHHZNNT.js.br +0 -0
- package/build/runtime-bloom-XRHHZNNT.js.gz +0 -0
- package/build/runtime-brightnessContrast-RHV6X2Z4.js +1 -0
- package/build/runtime-brightnessContrast-RHV6X2Z4.js.br +0 -0
- package/build/runtime-brightnessContrast-RHV6X2Z4.js.gz +0 -0
- package/build/runtime-chromaticAberration-LSGAMQAK.js +1 -0
- package/build/runtime-chromaticAberration-LSGAMQAK.js.br +0 -0
- package/build/runtime-chromaticAberration-LSGAMQAK.js.gz +0 -0
- package/build/runtime-chunk-23QOKH2J.js +1 -0
- package/build/runtime-chunk-23QOKH2J.js.br +0 -0
- package/build/runtime-chunk-23QOKH2J.js.gz +0 -0
- package/build/runtime-chunk-2VFLTNIU.js +1 -0
- package/build/runtime-chunk-2VFLTNIU.js.br +0 -0
- package/build/runtime-chunk-2VFLTNIU.js.gz +0 -0
- package/build/runtime-chunk-44SAPZDZ.js +1 -0
- package/build/runtime-chunk-44SAPZDZ.js.br +0 -0
- package/build/runtime-chunk-44SAPZDZ.js.gz +0 -0
- package/build/runtime-chunk-4KZXQGUQ.js +1 -0
- package/build/runtime-chunk-4KZXQGUQ.js.br +0 -0
- package/build/runtime-chunk-4KZXQGUQ.js.gz +0 -0
- package/build/runtime-chunk-4YV3EXSU.js +1 -0
- package/build/runtime-chunk-4YV3EXSU.js.br +0 -0
- package/build/runtime-chunk-4YV3EXSU.js.gz +0 -0
- package/build/runtime-chunk-5CH7XRKY.js +1 -0
- package/build/runtime-chunk-5CH7XRKY.js.br +0 -0
- package/build/runtime-chunk-5CH7XRKY.js.gz +0 -0
- package/build/runtime-chunk-5VJGAC3M.js +1 -0
- package/build/runtime-chunk-5VJGAC3M.js.br +0 -0
- package/build/runtime-chunk-5VJGAC3M.js.gz +0 -0
- package/build/runtime-chunk-7NBWIU4W.js +1 -0
- package/build/runtime-chunk-7NBWIU4W.js.br +0 -0
- package/build/runtime-chunk-7NBWIU4W.js.gz +0 -0
- package/build/runtime-chunk-ARTGMJ7O.js +1 -0
- package/build/runtime-chunk-ARTGMJ7O.js.br +0 -0
- package/build/runtime-chunk-ARTGMJ7O.js.gz +0 -0
- package/build/runtime-chunk-BXPWRF47.js +1 -0
- package/build/runtime-chunk-BXPWRF47.js.br +0 -0
- package/build/runtime-chunk-BXPWRF47.js.gz +0 -0
- package/build/runtime-chunk-CRYQVRO6.js +1 -0
- package/build/runtime-chunk-CRYQVRO6.js.br +0 -0
- package/build/runtime-chunk-CRYQVRO6.js.gz +0 -0
- package/build/runtime-chunk-CVUJ3GMH.js +1 -0
- package/build/runtime-chunk-CVUJ3GMH.js.br +0 -0
- package/build/runtime-chunk-CVUJ3GMH.js.gz +0 -0
- package/build/runtime-chunk-DJJZN367.js +1 -0
- package/build/runtime-chunk-DJJZN367.js.br +0 -0
- package/build/runtime-chunk-DJJZN367.js.gz +0 -0
- package/build/runtime-chunk-DZNU62CT.js +1 -0
- package/build/runtime-chunk-DZNU62CT.js.br +0 -0
- package/build/runtime-chunk-DZNU62CT.js.gz +0 -0
- package/build/runtime-chunk-EAXCCTR5.js +1 -0
- package/build/runtime-chunk-EAXCCTR5.js.br +0 -0
- package/build/runtime-chunk-EAXCCTR5.js.gz +0 -0
- package/build/runtime-chunk-EOV2DL2V.js +1 -0
- package/build/runtime-chunk-EOV2DL2V.js.br +0 -0
- package/build/runtime-chunk-EOV2DL2V.js.gz +0 -0
- package/build/runtime-chunk-FDRTCOJ5.js +1 -0
- package/build/runtime-chunk-FDRTCOJ5.js.br +0 -0
- package/build/runtime-chunk-FDRTCOJ5.js.gz +0 -0
- package/build/runtime-chunk-FQNSP44B.js +1 -0
- package/build/runtime-chunk-FQNSP44B.js.br +0 -0
- package/build/runtime-chunk-FQNSP44B.js.gz +0 -0
- package/build/runtime-chunk-FTVQTRM7.js +1 -0
- package/build/runtime-chunk-FTVQTRM7.js.br +0 -0
- package/build/runtime-chunk-FTVQTRM7.js.gz +0 -0
- package/build/runtime-chunk-GFTBNL2W.js +1 -0
- package/build/runtime-chunk-GFTBNL2W.js.br +0 -0
- package/build/runtime-chunk-GFTBNL2W.js.gz +0 -0
- package/build/runtime-chunk-H6BPTR74.js +1 -0
- package/build/runtime-chunk-H6BPTR74.js.br +0 -0
- package/build/runtime-chunk-H6BPTR74.js.gz +0 -0
- package/build/runtime-chunk-H6T5LPRN.js +1 -0
- package/build/runtime-chunk-H6T5LPRN.js.br +0 -0
- package/build/runtime-chunk-H6T5LPRN.js.gz +0 -0
- package/build/runtime-chunk-HER7UVU3.js +1 -0
- package/build/runtime-chunk-HER7UVU3.js.br +0 -0
- package/build/runtime-chunk-HER7UVU3.js.gz +0 -0
- package/build/runtime-chunk-J2I4VBHR.js +1 -0
- package/build/runtime-chunk-J2I4VBHR.js.br +0 -0
- package/build/runtime-chunk-J2I4VBHR.js.gz +0 -0
- package/build/runtime-chunk-JFAQQYSH.js +1 -0
- package/build/runtime-chunk-JFAQQYSH.js.br +0 -0
- package/build/runtime-chunk-JFAQQYSH.js.gz +0 -0
- package/build/runtime-chunk-KGZNRID6.js +1 -0
- package/build/runtime-chunk-KGZNRID6.js.br +1 -0
- package/build/runtime-chunk-KGZNRID6.js.gz +0 -0
- package/build/runtime-chunk-LATYCOUS.js +1 -0
- package/build/runtime-chunk-LATYCOUS.js.br +0 -0
- package/build/runtime-chunk-LATYCOUS.js.gz +0 -0
- package/build/runtime-chunk-MBBODDV7.js +1 -0
- package/build/runtime-chunk-MBBODDV7.js.br +0 -0
- package/build/runtime-chunk-MBBODDV7.js.gz +0 -0
- package/build/runtime-chunk-ML3Z74BL.js +1 -0
- package/build/runtime-chunk-ML3Z74BL.js.br +0 -0
- package/build/runtime-chunk-ML3Z74BL.js.gz +0 -0
- package/build/runtime-chunk-MM75L5X4.js +1 -0
- package/build/runtime-chunk-MM75L5X4.js.br +0 -0
- package/build/runtime-chunk-MM75L5X4.js.gz +0 -0
- package/build/runtime-chunk-N2ZRGNPR.js +1 -0
- package/build/runtime-chunk-N2ZRGNPR.js.br +0 -0
- package/build/runtime-chunk-N2ZRGNPR.js.gz +0 -0
- package/build/runtime-chunk-NBYTQLIB.js +1 -0
- package/build/runtime-chunk-NBYTQLIB.js.br +0 -0
- package/build/runtime-chunk-NBYTQLIB.js.gz +0 -0
- package/build/runtime-chunk-NSD7DU3P.js +1 -0
- package/build/runtime-chunk-NSD7DU3P.js.br +0 -0
- package/build/runtime-chunk-NSD7DU3P.js.gz +0 -0
- package/build/runtime-chunk-NTUTXO7Q.js +1 -0
- package/build/runtime-chunk-NTUTXO7Q.js.br +0 -0
- package/build/runtime-chunk-NTUTXO7Q.js.gz +0 -0
- package/build/runtime-chunk-O5NBGIBR.js +1 -0
- package/build/runtime-chunk-O5NBGIBR.js.br +0 -0
- package/build/runtime-chunk-O5NBGIBR.js.gz +0 -0
- package/build/runtime-chunk-OFPUAZKY.js +1 -0
- package/build/runtime-chunk-OFPUAZKY.js.br +0 -0
- package/build/runtime-chunk-OFPUAZKY.js.gz +0 -0
- package/build/runtime-chunk-OW6T4XFV.js +1 -0
- package/build/runtime-chunk-OW6T4XFV.js.br +0 -0
- package/build/runtime-chunk-OW6T4XFV.js.gz +0 -0
- package/build/runtime-chunk-QZ35BPGB.js +1 -0
- package/build/runtime-chunk-QZ35BPGB.js.br +0 -0
- package/build/runtime-chunk-QZ35BPGB.js.gz +0 -0
- package/build/runtime-chunk-R43XZP65.js +1 -0
- package/build/runtime-chunk-R43XZP65.js.br +0 -0
- package/build/runtime-chunk-R43XZP65.js.gz +0 -0
- package/build/runtime-chunk-T53JMQSH.js +1 -0
- package/build/runtime-chunk-T53JMQSH.js.br +0 -0
- package/build/runtime-chunk-T53JMQSH.js.gz +0 -0
- package/build/runtime-chunk-T6CHRQ6N.js +1 -0
- package/build/runtime-chunk-T6CHRQ6N.js.br +0 -0
- package/build/runtime-chunk-T6CHRQ6N.js.gz +0 -0
- package/build/runtime-chunk-TU4KDRKR.js +1 -0
- package/build/runtime-chunk-TU4KDRKR.js.br +0 -0
- package/build/runtime-chunk-TU4KDRKR.js.gz +0 -0
- package/build/runtime-chunk-TZCHGFVF.js +1 -0
- package/build/runtime-chunk-TZCHGFVF.js.br +3 -0
- package/build/runtime-chunk-TZCHGFVF.js.gz +0 -0
- package/build/runtime-chunk-UK4GQHMO.js +1 -0
- package/build/runtime-chunk-UK4GQHMO.js.br +0 -0
- package/build/runtime-chunk-UK4GQHMO.js.gz +0 -0
- package/build/runtime-chunk-USXMESRF.js +1 -0
- package/build/runtime-chunk-USXMESRF.js.br +0 -0
- package/build/runtime-chunk-USXMESRF.js.gz +0 -0
- package/build/runtime-chunk-VAVYZ35B.js +1 -0
- package/build/runtime-chunk-VAVYZ35B.js.br +0 -0
- package/build/runtime-chunk-VAVYZ35B.js.gz +0 -0
- package/build/runtime-chunk-VGN7YHB7.js +1 -0
- package/build/runtime-chunk-VGN7YHB7.js.br +0 -0
- package/build/runtime-chunk-VGN7YHB7.js.gz +0 -0
- package/build/runtime-chunk-W7QPV37Y.js +1 -0
- package/build/runtime-chunk-W7QPV37Y.js.br +1 -0
- package/build/runtime-chunk-W7QPV37Y.js.gz +0 -0
- package/build/runtime-chunk-WQXDDUFV.js +1 -0
- package/build/runtime-chunk-WQXDDUFV.js.br +0 -0
- package/build/runtime-chunk-WQXDDUFV.js.gz +0 -0
- package/build/runtime-chunk-XLOQIQSS.js +1 -0
- package/build/runtime-chunk-XLOQIQSS.js.br +0 -0
- package/build/runtime-chunk-XLOQIQSS.js.gz +0 -0
- package/build/runtime-chunk-Y3BMDVJ7.js +1 -0
- package/build/runtime-chunk-Y3BMDVJ7.js.br +0 -0
- package/build/runtime-chunk-Y3BMDVJ7.js.gz +0 -0
- package/build/runtime-chunk-YUK55LCN.js +1 -0
- package/build/runtime-chunk-YUK55LCN.js.br +0 -0
- package/build/runtime-chunk-YUK55LCN.js.gz +0 -0
- package/build/runtime-chunk-YVNDW5TV.js +1 -0
- package/build/runtime-chunk-YVNDW5TV.js.br +0 -0
- package/build/runtime-chunk-YVNDW5TV.js.gz +0 -0
- package/build/runtime-chunk-YXATXASV.js +1 -0
- package/build/runtime-chunk-YXATXASV.js.br +1 -0
- package/build/runtime-chunk-YXATXASV.js.gz +0 -0
- package/build/runtime-chunk-Z5OH244S.js +1 -0
- package/build/runtime-chunk-Z5OH244S.js.br +0 -0
- package/build/runtime-chunk-Z5OH244S.js.gz +0 -0
- package/build/runtime-classicRuntime-F5CEZRNL.js +1 -0
- package/build/runtime-classicRuntime-F5CEZRNL.js.br +0 -0
- package/build/runtime-classicRuntime-F5CEZRNL.js.gz +0 -0
- package/build/runtime-cloners-BLAFVALM.js +1 -0
- package/build/runtime-cloners-BLAFVALM.js.br +0 -0
- package/build/runtime-cloners-BLAFVALM.js.gz +0 -0
- package/build/runtime-collisionBVH-KXZNWTEK.js +1 -0
- package/build/runtime-collisionBVH-KXZNWTEK.js.br +0 -0
- package/build/runtime-collisionBVH-KXZNWTEK.js.gz +0 -0
- package/build/runtime-components-DYNXEVOC.js +1 -0
- package/build/runtime-components-DYNXEVOC.js.br +0 -0
- package/build/runtime-components-DYNXEVOC.js.gz +0 -0
- package/build/runtime-conditional-3A423CXW.js +1 -0
- package/build/runtime-conditional-3A423CXW.js.br +0 -0
- package/build/runtime-conditional-3A423CXW.js.gz +0 -0
- package/build/runtime-createDestroy-FUUG7UAK.js +1 -0
- package/build/runtime-createDestroy-FUUG7UAK.js.br +0 -0
- package/build/runtime-createDestroy-FUUG7UAK.js.gz +0 -0
- package/build/runtime-depthOfField-BBWDHJYP.js +1 -0
- package/build/runtime-depthOfField-BBWDHJYP.js.br +0 -0
- package/build/runtime-depthOfField-BBWDHJYP.js.gz +0 -0
- package/build/runtime-dragDrop-GPFMU3ZB.js +1 -0
- package/build/runtime-dragDrop-GPFMU3ZB.js.br +0 -0
- package/build/runtime-dragDrop-GPFMU3ZB.js.gz +0 -0
- package/build/runtime-fxBloom-IGFV4KJD.js +1 -0
- package/build/runtime-fxBloom-IGFV4KJD.js.br +0 -0
- package/build/runtime-fxBloom-IGFV4KJD.js.gz +0 -0
- package/build/runtime-fxDepthOfField-WX7WD3K4.js +1 -0
- package/build/runtime-fxDepthOfField-WX7WD3K4.js.br +0 -0
- package/build/runtime-fxDepthOfField-WX7WD3K4.js.gz +0 -0
- package/build/runtime-gameControls-TGEINRCX.js +1 -0
- package/build/runtime-gameControls-TGEINRCX.js.br +0 -0
- package/build/runtime-gameControls-TGEINRCX.js.gz +0 -0
- package/build/runtime-hair-YOTI2EFL.js +1 -0
- package/build/runtime-hair-YOTI2EFL.js.br +0 -0
- package/build/runtime-hair-YOTI2EFL.js.gz +0 -0
- package/build/runtime-hueSaturation-X3HAZK2G.js +1 -0
- package/build/runtime-hueSaturation-X3HAZK2G.js.br +0 -0
- package/build/runtime-hueSaturation-X3HAZK2G.js.gz +0 -0
- package/build/runtime-mergeStaticGeometries-JI7YWYGH.js +1 -0
- package/build/runtime-mergeStaticGeometries-JI7YWYGH.js.br +3 -0
- package/build/runtime-mergeStaticGeometries-JI7YWYGH.js.gz +0 -0
- package/build/runtime-miscActions-INSZA2CP.js +1 -0
- package/build/runtime-miscActions-INSZA2CP.js.br +0 -0
- package/build/runtime-miscActions-INSZA2CP.js.gz +0 -0
- package/build/runtime-mouseHover-GZW7KW6H.js +1 -0
- package/build/runtime-mouseHover-GZW7KW6H.js.br +0 -0
- package/build/runtime-mouseHover-GZW7KW6H.js.gz +0 -0
- package/build/runtime-navmesh-UJTUAHXM.js +1 -0
- package/build/runtime-navmesh-UJTUAHXM.js.br +0 -0
- package/build/runtime-navmesh-UJTUAHXM.js.gz +0 -0
- package/build/runtime-noise-UF5CMIO3.js +1 -0
- package/build/runtime-noise-UF5CMIO3.js.br +0 -0
- package/build/runtime-noise-UF5CMIO3.js.gz +0 -0
- package/build/runtime-particles-T2CREK6M.js +1 -0
- package/build/runtime-particles-T2CREK6M.js.br +0 -0
- package/build/runtime-particles-T2CREK6M.js.gz +0 -0
- package/build/runtime-paths-PRHQFJ3X.js +1 -0
- package/build/runtime-paths-PRHQFJ3X.js.br +0 -0
- package/build/runtime-paths-PRHQFJ3X.js.gz +0 -0
- package/build/runtime-pixelation-QFSF4L6X.js +1 -0
- package/build/runtime-pixelation-QFSF4L6X.js.br +0 -0
- package/build/runtime-pixelation-QFSF4L6X.js.gz +0 -0
- package/build/runtime-resize-SM6PZWJY.js +1 -0
- package/build/runtime-resize-SM6PZWJY.js.br +0 -0
- package/build/runtime-resize-SM6PZWJY.js.gz +0 -0
- package/build/runtime-sceneTransition-JUZVB2S3.js +1 -0
- package/build/runtime-sceneTransition-JUZVB2S3.js.br +0 -0
- package/build/runtime-sceneTransition-JUZVB2S3.js.gz +0 -0
- package/build/runtime-scroll-Q6NRRL4F.js +1 -0
- package/build/runtime-scroll-Q6NRRL4F.js.br +0 -0
- package/build/runtime-scroll-Q6NRRL4F.js.gz +0 -0
- package/build/runtime-shapeBlends-CPHLT3XC.js +1 -0
- package/build/runtime-shapeBlends-CPHLT3XC.js.br +0 -0
- package/build/runtime-shapeBlends-CPHLT3XC.js.gz +0 -0
- package/build/runtime-text-TBHPCNPL.js +1 -0
- package/build/runtime-text-TBHPCNPL.js.br +0 -0
- package/build/runtime-text-TBHPCNPL.js.gz +0 -0
- package/build/runtime-textInputs-4HQER44D.js +1 -0
- package/build/runtime-textInputs-4HQER44D.js.br +0 -0
- package/build/runtime-textInputs-4HQER44D.js.gz +0 -0
- package/build/runtime-timeline-UKR4DEQS.js +1 -0
- package/build/runtime-timeline-UKR4DEQS.js.br +0 -0
- package/build/runtime-timeline-UKR4DEQS.js.gz +0 -0
- package/build/runtime-tracking-5HISHPEY.js +1 -0
- package/build/runtime-tracking-5HISHPEY.js.br +0 -0
- package/build/runtime-tracking-5HISHPEY.js.gz +0 -0
- package/build/runtime-transitions-FBNOSFXY.js +1 -0
- package/build/runtime-transitions-FBNOSFXY.js.br +0 -0
- package/build/runtime-transitions-FBNOSFXY.js.gz +0 -0
- package/build/runtime-ui2d-3AMS3CSG.js +1 -0
- package/build/runtime-ui2d-3AMS3CSG.js.br +0 -0
- package/build/runtime-ui2d-3AMS3CSG.js.gz +0 -0
- package/build/runtime-updater-3ELP7WMM.js +1 -0
- package/build/runtime-updater-3ELP7WMM.js.br +1 -0
- package/build/runtime-updater-3ELP7WMM.js.gz +0 -0
- package/build/runtime-variables-U36KPJ5V.js +1 -0
- package/build/runtime-variables-U36KPJ5V.js.br +0 -0
- package/build/runtime-variables-U36KPJ5V.js.gz +0 -0
- package/build/runtime-vectorShapes-GIS26ELU.js +1 -0
- package/build/runtime-vectorShapes-GIS26ELU.js.br +0 -0
- package/build/runtime-vectorShapes-GIS26ELU.js.gz +0 -0
- package/build/runtime-video-TZNR7MEM.js +1 -0
- package/build/runtime-video-TZNR7MEM.js.br +0 -0
- package/build/runtime-video-TZNR7MEM.js.gz +0 -0
- package/build/runtime-vignette-3KJD4P5D.js +1 -0
- package/build/runtime-vignette-3KJD4P5D.js.br +0 -0
- package/build/runtime-vignette-3KJD4P5D.js.gz +0 -0
- package/build/runtime-webgpu-LYDFJW3X.js +1 -0
- package/build/runtime-webgpu-LYDFJW3X.js.br +0 -0
- package/build/runtime-webgpu-LYDFJW3X.js.gz +0 -0
- package/build/runtime.cjs +6283 -4577
- package/build/runtime.js +1 -8186
- package/build/runtime.js.br +0 -0
- package/build/runtime.js.gz +0 -0
- package/build/runtime.standalone.js +1 -0
- package/build/runtime.standalone.js.br +0 -0
- package/build/runtime.standalone.js.gz +0 -0
- package/build/runtime.standalone.webgl.js +1 -0
- package/build/runtime.standalone.webgl.js.br +0 -0
- package/build/runtime.standalone.webgl.js.gz +0 -0
- package/build/runtime.standalone.webgpu.js +1 -0
- package/build/runtime.standalone.webgpu.js.br +0 -0
- package/build/runtime.standalone.webgpu.js.gz +0 -0
- package/build/runtime.standalone.webgpu.micro.js +1 -0
- package/build/runtime.standalone.webgpu.micro.js.br +0 -0
- package/build/runtime.standalone.webgpu.micro.js.gz +0 -0
- package/build/runtime.standalone.webgpu.min.js +1 -0
- package/build/runtime.standalone.webgpu.min.js.br +0 -0
- package/build/runtime.standalone.webgpu.min.js.gz +0 -0
- package/build/sky-alto.png +0 -0
- package/build/sky-cirrus.png +0 -0
- package/build/smaa-area.png +0 -0
- package/build/smaa-node-area.png +0 -0
- package/build/smaa-node-search.png +0 -0
- package/build/smaa-search.png +0 -0
- package/build/snippets/hana-82e9eb82a79dead4/js-imports.js +93 -0
- package/package.json +104 -89
- package/runtime.d.ts +301 -2
- package/build/ui.js +0 -3
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
|
|
2
|
+
export async function loadImageFromBytes(bytes) {
|
|
3
|
+
const blob = new Blob([bytes])
|
|
4
|
+
const url = URL.createObjectURL(blob)
|
|
5
|
+
return createImageBitmap(blob).finally(() => {
|
|
6
|
+
URL.revokeObjectURL(url)
|
|
7
|
+
})
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function loadImageFromUrl(url) {
|
|
11
|
+
return fetch(url)
|
|
12
|
+
.then(response => {
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
throw new Error(`Failed to fetch image: ${response.statusText}`);
|
|
15
|
+
}
|
|
16
|
+
return response.blob();
|
|
17
|
+
})
|
|
18
|
+
.then(blob => createImageBitmap(blob));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Video Imports
|
|
22
|
+
function setupVideo(video) {
|
|
23
|
+
video.preload = "auto";
|
|
24
|
+
video.autoplay = true; //iOs hack to show the first frame
|
|
25
|
+
video.loop = true;
|
|
26
|
+
video.muted = true;
|
|
27
|
+
video.playsInline = true;
|
|
28
|
+
video.currentTime = 0.01;
|
|
29
|
+
video.load();
|
|
30
|
+
|
|
31
|
+
video.onloadeddata = () => {
|
|
32
|
+
video.muted = true;
|
|
33
|
+
// DOMException: The play() request was interrupted by a new load request.
|
|
34
|
+
// https://developers.google.com/web/updates/2017/06/play-request-was-interrupted
|
|
35
|
+
const playPromise = video.play();
|
|
36
|
+
|
|
37
|
+
if (playPromise !== undefined) {
|
|
38
|
+
playPromise
|
|
39
|
+
.then((_) => {
|
|
40
|
+
// Automatic playback started! Do nothing all good!
|
|
41
|
+
})
|
|
42
|
+
.catch(() => {
|
|
43
|
+
// for some reason the video could not be played (The play() request was interrupted by a new load request.)
|
|
44
|
+
// so let's try to play it again
|
|
45
|
+
video.play();
|
|
46
|
+
}).finally(() => {
|
|
47
|
+
video.pause();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
let copyVideo = false;
|
|
53
|
+
video.addEventListener("playing", function() {
|
|
54
|
+
copyVideo = true;
|
|
55
|
+
}, true);
|
|
56
|
+
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
const checkVideo = () => {
|
|
59
|
+
if (copyVideo) {
|
|
60
|
+
resolve(video);
|
|
61
|
+
} else {
|
|
62
|
+
setTimeout(checkVideo, 10);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
checkVideo();
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
export async function loadVideoFromBytes(bytes) {
|
|
71
|
+
const blob = new Blob([bytes])
|
|
72
|
+
const video = document.createElement('video');
|
|
73
|
+
video.src = URL.createObjectURL(blob);
|
|
74
|
+
return setupVideo(video);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
export async function loadVideoFromUrl(url) {
|
|
79
|
+
return fetch(url)
|
|
80
|
+
.then(response => {
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
throw new Error(`Failed to fetch video: ${response.statusText}`);
|
|
83
|
+
}
|
|
84
|
+
return response.blob();
|
|
85
|
+
})
|
|
86
|
+
.then(async blob => {
|
|
87
|
+
const video = document.createElement('video');
|
|
88
|
+
video.src = URL.createObjectURL(blob);
|
|
89
|
+
return setupVideo(video);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
package/package.json
CHANGED
|
@@ -1,91 +1,106 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
2
|
+
"name": "@splinetool/runtime",
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"description": "Spline is a collaborative design platform for creating production-ready interactive experiences in multiple dimensions. © 2025 Spline, Inc.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"spline",
|
|
7
|
+
"3D",
|
|
8
|
+
"webgl",
|
|
9
|
+
"shader",
|
|
10
|
+
"interactive",
|
|
11
|
+
"collaborative"
|
|
12
|
+
],
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/splinetool/spline.git",
|
|
16
|
+
"directory": "packages/runtime"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"main": "./build/runtime.js",
|
|
20
|
+
"module": "./build/runtime.js",
|
|
21
|
+
"types": "./runtime.d.ts",
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"registry": "https://registry.npmjs.org",
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"react-native": "./build/runtime.js",
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./runtime.d.ts",
|
|
30
|
+
"import": "./build/runtime.js",
|
|
31
|
+
"require": "./build/runtime.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./build/runtime.js": {
|
|
34
|
+
"types": "./runtime.d.ts",
|
|
35
|
+
"import": "./build/runtime.js",
|
|
36
|
+
"require": "./build/runtime.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./build/runtime.standalone.js": "./build/runtime.standalone.js",
|
|
39
|
+
"./build/runtime.standalone.webgl.js": "./build/runtime.standalone.webgl.js",
|
|
40
|
+
"./build/runtime.standalone.webgpu.js": "./build/runtime.standalone.webgpu.js",
|
|
41
|
+
"./build/runtime.standalone.webgpu.min.js": "./build/runtime.standalone.webgpu.min.js",
|
|
42
|
+
"./build/runtime.standalone.webgpu.micro.js": "./build/runtime.standalone.webgpu.micro.js",
|
|
43
|
+
"./build/physics.js": "./build/physics.js",
|
|
44
|
+
"./build/physics.wasm": "./build/physics.wasm"
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"build",
|
|
48
|
+
"runtime.d.ts"
|
|
49
|
+
],
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "cross-env NODE_ENV=production node --experimental-json-modules ./esbuild.mjs",
|
|
52
|
+
"test-server-side": "cross-env NODE_ENV=test node --experimental-json-modules ./esbuild.mjs && node ./build/runtime.cjs && echo '✅ Pass'",
|
|
53
|
+
"lint": "oxlint src/ --max-warnings=0",
|
|
54
|
+
"format": "oxfmt src/",
|
|
55
|
+
"format:check": "oxfmt --check src/",
|
|
56
|
+
"check-types": "tsc --noEmit",
|
|
57
|
+
"prepublishOnly": "node ../../scripts/verify-publish-target.mjs",
|
|
58
|
+
"analyze": "cross-env GENERATE_SOURCEMAP=true npm run build && cross-env NODE_OPTIONS=--no-experimental-fetch source-map-explorer 'build/runtime.js' --no-border-checks",
|
|
59
|
+
"example": "cross-env IS_PROD=true npm run build && vite",
|
|
60
|
+
"upload-cdn": "node scripts/upload-runtime-cdn.mjs"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"on-change": "4.0.0",
|
|
64
|
+
"semver-compare": "1.0.0"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@aws-sdk/client-s3": "3.1095.0",
|
|
68
|
+
"@dimforge/rapier3d": "0.19.3",
|
|
69
|
+
"@dimforge/rapier3d-compat": "0.19.3",
|
|
70
|
+
"@types/semver-compare": "1.0.1",
|
|
71
|
+
"@types/three": "0.185.0",
|
|
72
|
+
"@vercel/blob": "2.4.0",
|
|
73
|
+
"acorn": "8.17.0",
|
|
74
|
+
"acorn-walk": "8.3.5",
|
|
75
|
+
"browserslist": "4.16.7",
|
|
76
|
+
"browserslist-to-esbuild": "1.1.1",
|
|
77
|
+
"cross-env": "7.0.3",
|
|
78
|
+
"esbuild": "0.15.16",
|
|
79
|
+
"esbuild-plugin-glslify": "1.0.1",
|
|
80
|
+
"glslify-import": "3.1.0",
|
|
81
|
+
"jest": "30.2.0",
|
|
82
|
+
"source-map-explorer": "2.5.2",
|
|
83
|
+
"spe": "*",
|
|
84
|
+
"spe2d": "*",
|
|
85
|
+
"terser": "5.48.0",
|
|
86
|
+
"three": "0.185.0",
|
|
87
|
+
"typescript": "^5.2.2",
|
|
88
|
+
"vite": "6.4.3",
|
|
89
|
+
"vite-plugin-static-copy": "4.1.1"
|
|
90
|
+
},
|
|
91
|
+
"browserslist": {
|
|
92
|
+
"development": [
|
|
93
|
+
"last 1 chrome version",
|
|
94
|
+
"last 1 firefox version",
|
|
95
|
+
"last 1 safari version"
|
|
96
|
+
],
|
|
97
|
+
"production": [
|
|
98
|
+
">0.2%",
|
|
99
|
+
"not dead",
|
|
100
|
+
"not op_mini all",
|
|
101
|
+
"not IE <= 11",
|
|
102
|
+
"Safari >= 13.0",
|
|
103
|
+
"not Android <= 4.4"
|
|
104
|
+
]
|
|
105
|
+
}
|
|
91
106
|
}
|
package/runtime.d.ts
CHANGED
|
@@ -66,6 +66,52 @@ declare module '@splinetool/runtime' {
|
|
|
66
66
|
seek: (ms: number) => TransitionFactory;
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Structural stand-in for THREE.Material — pass an instance from YOUR
|
|
71
|
+
* three install (this package never re-exports three, and the copy it
|
|
72
|
+
* bundles is a different module instance from yours), or one built by
|
|
73
|
+
* `createCustomMaterial` against the runtime's bundled three.
|
|
74
|
+
*/
|
|
75
|
+
export interface ThreeMaterialLike {
|
|
76
|
+
readonly isMaterial: true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The curated namespace `createCustomMaterial` hands its factory: the runtime's
|
|
81
|
+
* BUNDLED three instance — the only one TSL node graphs can compile in.
|
|
82
|
+
* Members: `tsl` (the full three/tsl function object — Fn, uniform, vec3,
|
|
83
|
+
* texture, wgslFn, positionLocal, …), the NodeMaterial classes
|
|
84
|
+
* (NodeMaterial, MeshBasicNodeMaterial, MeshStandardNodeMaterial,
|
|
85
|
+
* MeshPhysicalNodeMaterial, MeshPhongNodeMaterial, MeshLambertNodeMaterial,
|
|
86
|
+
* MeshToonNodeMaterial, MeshMatcapNodeMaterial, MeshNormalNodeMaterial,
|
|
87
|
+
* SpriteNodeMaterial, PointsNodeMaterial, LineBasicNodeMaterial,
|
|
88
|
+
* LineDashedNodeMaterial), and core essentials (Color, Vector2/3/4,
|
|
89
|
+
* Matrix3/4, Texture, CanvasTexture, DataTexture, VideoTexture, side +
|
|
90
|
+
* blending + wrapping + filter + color-space constants).
|
|
91
|
+
*
|
|
92
|
+
* Typed opaquely to keep this file self-contained. With @types/three
|
|
93
|
+
* installed you can cast for full types — the values really do come from
|
|
94
|
+
* a separate module instance, matching this runtime's three minor (0.185):
|
|
95
|
+
* ```ts
|
|
96
|
+
* const t = three as unknown as typeof import('three/webgpu') & {
|
|
97
|
+
* tsl: typeof import('three/tsl');
|
|
98
|
+
* };
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export interface SplineThreeNamespace {
|
|
102
|
+
readonly tsl: Record<string, any>;
|
|
103
|
+
readonly NodeMaterial: new (...args: any[]) => ThreeMaterialLike;
|
|
104
|
+
readonly MeshBasicNodeMaterial: new (...args: any[]) => ThreeMaterialLike;
|
|
105
|
+
readonly MeshStandardNodeMaterial: new (
|
|
106
|
+
...args: any[]
|
|
107
|
+
) => ThreeMaterialLike;
|
|
108
|
+
readonly MeshPhysicalNodeMaterial: new (
|
|
109
|
+
...args: any[]
|
|
110
|
+
) => ThreeMaterialLike;
|
|
111
|
+
readonly Color: new (...args: any[]) => any;
|
|
112
|
+
readonly [key: string]: any;
|
|
113
|
+
}
|
|
114
|
+
|
|
69
115
|
export type SPEObject = {
|
|
70
116
|
name: string;
|
|
71
117
|
uuid: string;
|
|
@@ -74,7 +120,13 @@ declare module '@splinetool/runtime' {
|
|
|
74
120
|
position: { x: number; y: number; z: number };
|
|
75
121
|
rotation: { x: number; y: number; z: number };
|
|
76
122
|
scale: { x: number; y: number; z: number };
|
|
77
|
-
|
|
123
|
+
/**
|
|
124
|
+
* For objects created with a three.js material instance
|
|
125
|
+
* (createObject's `material`), this is that instance (behind a
|
|
126
|
+
* transparent change-tracking proxy, so edits through it re-render
|
|
127
|
+
* automatically); otherwise a snapshot of the Spline layered material.
|
|
128
|
+
*/
|
|
129
|
+
material?: Material | ThreeMaterialLike;
|
|
78
130
|
|
|
79
131
|
/**
|
|
80
132
|
* Sets the color of the object's material if it is a mesh and if it has a color layer.
|
|
@@ -115,6 +167,93 @@ declare module '@splinetool/runtime' {
|
|
|
115
167
|
transition: (params: TransitionParams) => TransitionFactory;
|
|
116
168
|
};
|
|
117
169
|
|
|
170
|
+
export type Vec3Like =
|
|
171
|
+
| [number, number, number]
|
|
172
|
+
| { x?: number; y?: number; z?: number };
|
|
173
|
+
|
|
174
|
+
export type CreateMaterialOptions = {
|
|
175
|
+
/** A css color for the material's color layer. */
|
|
176
|
+
color?: string;
|
|
177
|
+
roughness?: number;
|
|
178
|
+
metalness?: number;
|
|
179
|
+
reflectivity?: number;
|
|
180
|
+
/** Opacity of the color layer (0–1). */
|
|
181
|
+
alpha?: number;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export type CreateObjectOptions = {
|
|
185
|
+
/** Defaults to the type's friendly name, deduped with a numeric suffix. */
|
|
186
|
+
name?: string;
|
|
187
|
+
/** Name or uuid of the parent object (or its SPEObject). Defaults to the active page. */
|
|
188
|
+
parent?: string | SPEObject;
|
|
189
|
+
/** World units. Defaults to [0, 0, 0]. */
|
|
190
|
+
position?: Vec3Like;
|
|
191
|
+
/**
|
|
192
|
+
* Degrees (Spline convention). Note that the returned proxy's
|
|
193
|
+
* `.rotation` is a three.js Euler in radians.
|
|
194
|
+
*/
|
|
195
|
+
rotation?: Vec3Like;
|
|
196
|
+
/** A number applies uniformly. Defaults to [1, 1, 1]. */
|
|
197
|
+
scale?: Vec3Like | number;
|
|
198
|
+
visible?: boolean;
|
|
199
|
+
castShadow?: boolean;
|
|
200
|
+
receiveShadow?: boolean;
|
|
201
|
+
/** Shorthand for material: { color } — a css color string. */
|
|
202
|
+
color?: string;
|
|
203
|
+
/**
|
|
204
|
+
* Either a shared material name/id from the document (the material is
|
|
205
|
+
* then genuinely shared — editing it restyles every object using it),
|
|
206
|
+
* a css color string, inline material properties, a **three.js
|
|
207
|
+
* material instance** from your own three install, or a
|
|
208
|
+
* `(three) => material` **factory** receiving the bundled namespace
|
|
209
|
+
* (the inline form of {@link Application.createCustomMaterial}, same
|
|
210
|
+
* as setMaterial accepts).
|
|
211
|
+
*
|
|
212
|
+
* Three.js material instances are supported on the `webgpu` backend
|
|
213
|
+
* only (the default wherever WebGPU is available; the call throws on
|
|
214
|
+
* the classic WebGL pipeline). Accepted: **built-in materials** from
|
|
215
|
+
* your own three install (MeshStandardMaterial, MeshPhysicalMaterial,
|
|
216
|
+
* MeshBasicMaterial, MeshNormalMaterial, … — converted by three's node
|
|
217
|
+
* library) and **TSL shader materials built with
|
|
218
|
+
* {@link Application.createCustomMaterial}**. GLSL ShaderMaterials
|
|
219
|
+
* throw, and so do TSL NodeMaterials built from your own three/webgpu
|
|
220
|
+
* import (the runtime bundles its own copy of three, and a node graph
|
|
221
|
+
* from a separate module instance cannot compile in it — build it via
|
|
222
|
+
* createCustomMaterial instead). Scene lights and shadows apply; Spline's
|
|
223
|
+
* environment IBL does not (set your own `envMap`). Property edits are
|
|
224
|
+
* live; structural changes (new maps, flag flips) need
|
|
225
|
+
* `material.needsUpdate = true`. The runtime never disposes your
|
|
226
|
+
* material — you own its lifecycle.
|
|
227
|
+
*/
|
|
228
|
+
material?:
|
|
229
|
+
| string
|
|
230
|
+
| CreateMaterialOptions
|
|
231
|
+
| ThreeMaterialLike
|
|
232
|
+
| ((three: SplineThreeNamespace) => ThreeMaterialLike);
|
|
233
|
+
} & {
|
|
234
|
+
/**
|
|
235
|
+
* Any other key is a type-specific parameter: geometry inputs for
|
|
236
|
+
* shapes (width, height, depth, cornerRadius, spikes, …), text
|
|
237
|
+
* properties for Text (text, fontSize, font, …), light properties for
|
|
238
|
+
* lights (intensity, distance, …).
|
|
239
|
+
*/
|
|
240
|
+
[parameter: string]: unknown;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
export type CloneObjectOptions = {
|
|
244
|
+
/** Defaults to '<source name> Copy', deduped with a numeric suffix. */
|
|
245
|
+
name?: string;
|
|
246
|
+
/** Name or uuid of the new parent (or its SPEObject). Defaults to the source's parent. */
|
|
247
|
+
parent?: string | SPEObject;
|
|
248
|
+
/** World units. */
|
|
249
|
+
position?: Vec3Like;
|
|
250
|
+
/** Degrees (Spline convention). */
|
|
251
|
+
rotation?: Vec3Like;
|
|
252
|
+
/** A number applies uniformly. */
|
|
253
|
+
scale?: Vec3Like | number;
|
|
254
|
+
visible?: boolean;
|
|
255
|
+
};
|
|
256
|
+
|
|
118
257
|
export class Application {
|
|
119
258
|
_controls: any;
|
|
120
259
|
renderOnDemand: boolean;
|
|
@@ -143,10 +282,54 @@ declare module '@splinetool/runtime' {
|
|
|
143
282
|
* If not set the runtime will load the WASM files from the CDN.
|
|
144
283
|
*/
|
|
145
284
|
wasmPath?: string;
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Rendering backend. When not set, the runtime auto-selects:
|
|
288
|
+
* `webgpu` (the node-material pipeline on three's
|
|
289
|
+
* WebGPURenderer, loaded as a separate chunk, with the
|
|
290
|
+
* render-bundle scene pass on) wherever the browser grants a
|
|
291
|
+
* WebGPU adapter, `webgl` everywhere else — and any WebGPU init
|
|
292
|
+
* failure still falls back to `webgl`. Pass `webgl` to force
|
|
293
|
+
* the classic pipeline, or `webgpu` to force the node pipeline.
|
|
294
|
+
* When the option is not set, the `?renderer=webgpu|webgl2|webgl`
|
|
295
|
+
* URL param overrides the auto-selection (diagnostics); an
|
|
296
|
+
* explicit option always wins over the URL. The server-side CJS
|
|
297
|
+
* build compiles the WebGPU branch out and always uses `webgl`;
|
|
298
|
+
* the single-file standalones ship per export setting —
|
|
299
|
+
* `runtime.standalone.js` carries both pipelines,
|
|
300
|
+
* `runtime.standalone.webgpu.js` / `.webgl.js` carry one and
|
|
301
|
+
* show a clear notice when asked for the other. All Spline
|
|
302
|
+
* instances on a page must use the same backend.
|
|
303
|
+
*/
|
|
304
|
+
renderer?: 'webgl' | 'webgpu';
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* How the scene's HTML content (authored in the editor's HTML
|
|
308
|
+
* frame, shipped inside the .splinecode) is presented over
|
|
309
|
+
* the canvas.
|
|
310
|
+
* - `sandbox` (default): a sandboxed iframe with an opaque
|
|
311
|
+
* origin — the content's scripts cannot touch the host
|
|
312
|
+
* page. The safe default for pages that embed scenes they
|
|
313
|
+
* didn't author.
|
|
314
|
+
* - `inline`: the content is grafted into the host document
|
|
315
|
+
* and its scripts run as ordinary page scripts with
|
|
316
|
+
* `window.spline` bound directly to this Application — no
|
|
317
|
+
* postMessage frame of latency. Only for pages whose
|
|
318
|
+
* author IS the scene author (Spline's own exports pass
|
|
319
|
+
* this).
|
|
320
|
+
* - `none`: don't present the HTML content at all.
|
|
321
|
+
*/
|
|
322
|
+
htmlContentMode?: 'sandbox' | 'inline' | 'none';
|
|
146
323
|
}
|
|
147
324
|
);
|
|
148
325
|
/**
|
|
149
326
|
* Loads an exported Spline scene
|
|
327
|
+
*
|
|
328
|
+
* If the scene carries HTML content (authored in the editor's HTML
|
|
329
|
+
* frame), the runtime automatically layers it over the canvas in a
|
|
330
|
+
* sandboxed iframe wired to this Application through the injected
|
|
331
|
+
* `spline` bridge — the same HTML + 3D composition as the editor
|
|
332
|
+
* preview. It is removed on dispose().
|
|
150
333
|
* @param path the url pointing toward a .splinecode file
|
|
151
334
|
* @param variables a key:value object describing initial values of the variables in the file
|
|
152
335
|
*/
|
|
@@ -323,6 +506,95 @@ declare module '@splinetool/runtime' {
|
|
|
323
506
|
objectNameOrId: string,
|
|
324
507
|
urlOrBuffer: string | Uint8Array
|
|
325
508
|
): void {}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Creates a new object in the loaded scene and returns its SPEObject
|
|
512
|
+
* proxy. The object lives only in this runtime session — it is never
|
|
513
|
+
* persisted back to the Spline file.
|
|
514
|
+
*
|
|
515
|
+
* ```js
|
|
516
|
+
* const cube = await spline.createObject('Cube', {
|
|
517
|
+
* position: [0, 100, 0],
|
|
518
|
+
* width: 150,
|
|
519
|
+
* material: { color: '#ff3b30', roughness: 0.4 },
|
|
520
|
+
* });
|
|
521
|
+
* ```
|
|
522
|
+
* @param type A shape name ('Cube', 'Sphere', 'Torus', …, 'Text' — the
|
|
523
|
+
* 'Geometry' suffix is optional), 'CustomMesh' (raw vertex geometry —
|
|
524
|
+
* pass `vertices` as a flat [x,y,z, …] number[] or Float32Array, plus
|
|
525
|
+
* optional `indices`/`normals`/`uvs`; winding slips are safety-netted:
|
|
526
|
+
* inverted closed solids are flipped, open surfaces render
|
|
527
|
+
* double-sided), 'Group', or a light type ('PointLight', 'SpotLight',
|
|
528
|
+
* 'DirectionalLight').
|
|
529
|
+
* @param options Placement, material, and type-specific parameters.
|
|
530
|
+
*/
|
|
531
|
+
createObject(
|
|
532
|
+
type: string,
|
|
533
|
+
options?: CreateObjectOptions
|
|
534
|
+
): Promise<SPEObject>;
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Builds a custom three.js material — including TSL shader materials —
|
|
538
|
+
* against the runtime's BUNDLED three instance (the only one TSL node
|
|
539
|
+
* graphs can compile in; materials built from your own three/webgpu
|
|
540
|
+
* import cannot work — see {@link SplineThreeNamespace}).
|
|
541
|
+
*
|
|
542
|
+
* ```js
|
|
543
|
+
* const glow = await spline.createCustomMaterial((three) => {
|
|
544
|
+
* const m = new three.MeshStandardNodeMaterial();
|
|
545
|
+
* m.colorNode = three.tsl.vec3(1, 0, 1);
|
|
546
|
+
* return m;
|
|
547
|
+
* });
|
|
548
|
+
* await spline.createObject('Sphere', { material: glow });
|
|
549
|
+
* ```
|
|
550
|
+
*
|
|
551
|
+
* The returned material is a plain reusable instance: share it across
|
|
552
|
+
* any number of createObject calls, tweak its properties/uniforms live,
|
|
553
|
+
* and dispose it yourself (the runtime never disposes it). WebGPU
|
|
554
|
+
* backend only — throws on the classic WebGL pipeline.
|
|
555
|
+
*/
|
|
556
|
+
createCustomMaterial(
|
|
557
|
+
factory: (three: SplineThreeNamespace) => ThreeMaterialLike
|
|
558
|
+
): Promise<ThreeMaterialLike>;
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Replaces an EXISTING mesh's material with a custom three.js
|
|
562
|
+
* material — a built-in instance from your own three install, a
|
|
563
|
+
* material from {@link Application.createCustomMaterial}, or a
|
|
564
|
+
* factory receiving the bundled namespace. WebGPU backend only.
|
|
565
|
+
*
|
|
566
|
+
* The replacement is pinned (document-driven material updates no
|
|
567
|
+
* longer touch the mesh) and consumer-owned (never disposed by the
|
|
568
|
+
* runtime; no unset). Runtime-only, never persisted. Resolves to the
|
|
569
|
+
* applied material.
|
|
570
|
+
*/
|
|
571
|
+
setMaterial(
|
|
572
|
+
target: string | SPEObject,
|
|
573
|
+
materialOrFactory:
|
|
574
|
+
| ThreeMaterialLike
|
|
575
|
+
| ((three: SplineThreeNamespace) => ThreeMaterialLike)
|
|
576
|
+
): Promise<ThreeMaterialLike>;
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Deep-clones an existing object (any type, including its subtree)
|
|
580
|
+
* with fresh ids and returns the clone's SPEObject proxy. This also
|
|
581
|
+
* covers types createObject can't build (imported models, vectors,
|
|
582
|
+
* booleans, …). By default the clone lands next to its source under
|
|
583
|
+
* the same parent, named '<source> Copy'.
|
|
584
|
+
* @param source The name or uuid of the object to clone, or its SPEObject.
|
|
585
|
+
* @param options Placement overrides and name.
|
|
586
|
+
*/
|
|
587
|
+
cloneObject(
|
|
588
|
+
source: string | SPEObject,
|
|
589
|
+
options?: CloneObjectOptions
|
|
590
|
+
): SPEObject;
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Removes an object (and its whole subtree) from the scene.
|
|
594
|
+
* @param target The name or uuid of the object, or its SPEObject.
|
|
595
|
+
* @returns true when an object was removed, false when none matched.
|
|
596
|
+
*/
|
|
597
|
+
removeObject(target: string | SPEObject): boolean;
|
|
326
598
|
}
|
|
327
599
|
|
|
328
600
|
/* ================== MATERIALS ================== */
|
|
@@ -335,7 +607,21 @@ declare module '@splinetool/runtime' {
|
|
|
335
607
|
color: string;
|
|
336
608
|
};
|
|
337
609
|
|
|
338
|
-
/* ----------
|
|
610
|
+
/* ---------- VERTEX COLOR LAYER ---------- */
|
|
611
|
+
export type VertexColorLayer = {
|
|
612
|
+
readonly type: 'vertexColor';
|
|
613
|
+
alpha: number;
|
|
614
|
+
};
|
|
615
|
+
|
|
616
|
+
/* ---------- CAVITY LAYER ---------- */
|
|
617
|
+
export type CavityLayer = {
|
|
618
|
+
readonly type: 'cavity';
|
|
619
|
+
alpha: number;
|
|
620
|
+
ridge: number;
|
|
621
|
+
valley: number;
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
/* ---------- FRESNEL LAYER ---------- */
|
|
339
625
|
export type FresnelLayer = {
|
|
340
626
|
readonly type: 'fresnel';
|
|
341
627
|
alpha: number;
|
|
@@ -345,6 +631,17 @@ declare module '@splinetool/runtime' {
|
|
|
345
631
|
factor: number;
|
|
346
632
|
};
|
|
347
633
|
|
|
634
|
+
/* ---------- DUST LAYER ---------- */
|
|
635
|
+
export type DustLayer = {
|
|
636
|
+
readonly type: 'dust';
|
|
637
|
+
alpha: number;
|
|
638
|
+
color: string;
|
|
639
|
+
coverage: number;
|
|
640
|
+
softness: number;
|
|
641
|
+
noiseStrength: number;
|
|
642
|
+
noiseScale: number;
|
|
643
|
+
};
|
|
644
|
+
|
|
348
645
|
/* ---------- RAINBOW LAYER ---------- */
|
|
349
646
|
export type RainbowLayer = {
|
|
350
647
|
readonly type: 'rainbow';
|
|
@@ -684,7 +981,9 @@ declare module '@splinetool/runtime' {
|
|
|
684
981
|
|
|
685
982
|
export type Layer =
|
|
686
983
|
| ColorLayer
|
|
984
|
+
| VertexColorLayer
|
|
687
985
|
| FresnelLayer
|
|
986
|
+
| DustLayer
|
|
688
987
|
| RainbowLayer
|
|
689
988
|
| NormalLayer
|
|
690
989
|
| GradientLayer
|