@osmo.inc/cli 0.1.15
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/DEPLOY.md +87 -0
- package/README.md +243 -0
- package/RELEASE.md +164 -0
- package/SETUP.md +60 -0
- package/THIRD_PARTY_NOTICES.md +18 -0
- package/bin/osmo.mjs +12 -0
- package/dist/osmo.js +7817 -0
- package/node_modules/@esbuild/darwin-arm64/README.md +3 -0
- package/node_modules/@esbuild/darwin-arm64/bin/esbuild +0 -0
- package/node_modules/@esbuild/darwin-arm64/package.json +20 -0
- package/node_modules/esbuild/LICENSE.md +21 -0
- package/node_modules/esbuild/README.md +3 -0
- package/node_modules/esbuild/bin/esbuild +223 -0
- package/node_modules/esbuild/install.js +289 -0
- package/node_modules/esbuild/lib/main.d.ts +716 -0
- package/node_modules/esbuild/lib/main.js +2532 -0
- package/node_modules/esbuild/package.json +49 -0
- package/node_modules/fflate/LICENSE +21 -0
- package/node_modules/fflate/esm/index.mjs +2710 -0
- package/node_modules/fflate/package.json +128 -0
- package/node_modules/typescript/LICENSE.txt +55 -0
- package/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- package/node_modules/typescript/lib/lib.d.ts +22 -0
- package/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
- package/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
- package/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
- package/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
- package/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
- package/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
- package/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
- package/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
- package/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
- package/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
- package/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
- package/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
- package/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
- package/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
- package/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
- package/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
- package/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
- package/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
- package/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
- package/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
- package/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
- package/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
- package/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
- package/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
- package/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
- package/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
- package/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
- package/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
- package/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
- package/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
- package/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
- package/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
- package/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
- package/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
- package/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
- package/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
- package/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
- package/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
- package/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
- package/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
- package/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
- package/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
- package/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
- package/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
- package/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
- package/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
- package/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
- package/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
- package/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
- package/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
- package/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
- package/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
- package/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
- package/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
- package/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
- package/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
- package/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
- package/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
- package/node_modules/typescript/lib/lib.es6.d.ts +23 -0
- package/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
- package/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
- package/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
- package/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
- package/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
- package/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
- package/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
- package/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
- package/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
- package/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
- package/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
- package/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
- package/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
- package/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
- package/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
- package/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
- package/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
- package/node_modules/typescript/lib/typescript.js +382 -0
- package/node_modules/typescript/package.json +57 -0
- package/package.json +54 -0
- package/release.json +136 -0
- package/runtime/apps/native/tools/compile.mjs +217 -0
- package/runtime/packages/scene/scripts/validate-strict.mjs +246 -0
- package/runtime/packages/scene/src/clip.d.mts +14 -0
- package/runtime/packages/scene/src/clip.mjs +15 -0
- package/runtime/packages/scene/src/color-value.d.mts +5 -0
- package/runtime/packages/scene/src/color-value.mjs +19 -0
- package/runtime/packages/scene/src/color.ts +1 -0
- package/runtime/packages/scene/src/effects.ts +213 -0
- package/runtime/packages/scene/src/elements.ts +491 -0
- package/runtime/packages/scene/src/evaluate.ts +919 -0
- package/runtime/packages/scene/src/index.ts +69 -0
- package/runtime/packages/scene/src/jsx-runtime.ts +73 -0
- package/runtime/packages/scene/src/knob-schema.ts +115 -0
- package/runtime/packages/scene/src/knobs.ts +118 -0
- package/runtime/packages/scene/src/mask.d.mts +6 -0
- package/runtime/packages/scene/src/mask.mjs +17 -0
- package/runtime/packages/scene/src/metadata.d.mts +23 -0
- package/runtime/packages/scene/src/metadata.mjs +44 -0
- package/runtime/packages/scene/src/motion-sampling.d.mts +2 -0
- package/runtime/packages/scene/src/motion-sampling.mjs +50 -0
- package/runtime/packages/scene/src/motion.ts +121 -0
- package/runtime/packages/scene/src/shader.ts +57 -0
- package/src/resource-examples/example-image/landscape.svg +7 -0
- package/src/resource-examples/example-image/resource.json +8 -0
- package/src/resource-examples/example-model/gem.glb +0 -0
- package/src/resource-examples/example-model/preview.svg +1 -0
- package/src/resource-examples/example-model/resource.json +7 -0
- package/src/resource-examples/example-scene/resource.json +1 -0
- package/src/resource-examples/example-scene/scene.tsx +8 -0
- package/src/resource-examples/example-shader/effect.wgsl +7 -0
- package/src/resource-examples/example-shader/preview.svg +1 -0
- package/src/resource-examples/example-shader/resource.json +27 -0
- package/src/resource-examples/example-shader/tint.wgsl +7 -0
- package/src/resource-examples/example-video/ambient.mp4 +0 -0
- package/src/resource-examples/example-video/resource.json +9 -0
- package/src/starter/scene.tsx +20 -0
- package/studio/index.html +2 -0
- package/studio/public/check-circle-filled.svg +3 -0
- package/studio/public/comment-cursor/active-outer.svg +3 -0
- package/studio/public/comment-cursor/default.svg +6 -0
- package/studio/public/osmo-studio-logo.svg +12 -0
- package/studio/public/pencil-simple.svg +5 -0
- package/studio/src/active-outer-TVYUEURE.svg +3 -0
- package/studio/src/app.css +4 -0
- package/studio/src/app.js +705 -0
- package/studio/src/default-6CTRH4V5.svg +6 -0
- package/studio/src/engine_bg.wasm +0 -0
- package/studio/src/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2 +0 -0
- package/studio/src/inter-cyrillic-wght-normal-JEOLYBOO.woff2 +0 -0
- package/studio/src/inter-greek-ext-wght-normal-EOVOK2B5.woff2 +0 -0
- package/studio/src/inter-greek-wght-normal-IRE366VL.woff2 +0 -0
- package/studio/src/inter-latin-ext-wght-normal-HA22NDSG.woff2 +0 -0
- package/studio/src/inter-latin-wght-normal-NRMW37G5.woff2 +0 -0
- package/studio/src/inter-vietnamese-wght-normal-CE5GGD3W.woff2 +0 -0
- package/studio/src/osmo-studio-logo-D5R2V77B.svg +12 -0
- package/third-party/cargo/adler2@2.0.1/Cargo.toml +91 -0
- package/third-party/cargo/adler2@2.0.1/LICENSE-0BSD +12 -0
- package/third-party/cargo/adler2@2.0.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/adler2@2.0.1/LICENSE-MIT +23 -0
- package/third-party/cargo/allocator-api2@0.2.21/Cargo.toml +48 -0
- package/third-party/cargo/allocator-api2@0.2.21/LICENSE-APACHE +176 -0
- package/third-party/cargo/allocator-api2@0.2.21/LICENSE-MIT +23 -0
- package/third-party/cargo/arrayref@0.3.9/Cargo.toml +23 -0
- package/third-party/cargo/arrayref@0.3.9/LICENSE +26 -0
- package/third-party/cargo/arrayvec@0.7.8/Cargo.toml +112 -0
- package/third-party/cargo/arrayvec@0.7.8/LICENSE-APACHE +201 -0
- package/third-party/cargo/arrayvec@0.7.8/LICENSE-MIT +25 -0
- package/third-party/cargo/ascii@1.1.0/Cargo.toml +41 -0
- package/third-party/cargo/ascii@1.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/ascii@1.1.0/LICENSE-MIT +22 -0
- package/third-party/cargo/ash@0.38.0+1.3.281/Cargo.toml +66 -0
- package/third-party/cargo/ash@0.38.0+1.3.281/LICENSE-APACHE +67 -0
- package/third-party/cargo/ash@0.38.0+1.3.281/LICENSE-MIT +25 -0
- package/third-party/cargo/autocfg@1.5.1/Cargo.toml +75 -0
- package/third-party/cargo/autocfg@1.5.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/autocfg@1.5.1/LICENSE-MIT +25 -0
- package/third-party/cargo/base64@0.13.1/Cargo.toml +53 -0
- package/third-party/cargo/base64@0.13.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/base64@0.13.1/LICENSE-MIT +21 -0
- package/third-party/cargo/base64@0.22.1/Cargo.toml +85 -0
- package/third-party/cargo/base64@0.22.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/base64@0.22.1/LICENSE-MIT +21 -0
- package/third-party/cargo/bit-set@0.10.0/Cargo.toml +108 -0
- package/third-party/cargo/bit-set@0.10.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/bit-set@0.10.0/LICENSE-MIT +25 -0
- package/third-party/cargo/bit-vec@0.9.1/Cargo.toml +94 -0
- package/third-party/cargo/bit-vec@0.9.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/bit-vec@0.9.1/LICENSE-MIT +25 -0
- package/third-party/cargo/bitflags@2.13.0/Cargo.toml +120 -0
- package/third-party/cargo/bitflags@2.13.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/bitflags@2.13.0/LICENSE-MIT +25 -0
- package/third-party/cargo/block2@0.6.2/Cargo.toml +115 -0
- package/third-party/cargo/block2@0.6.2/MIT-terms.txt +22 -0
- package/third-party/cargo/block2@0.6.2/madsmtm-objc2-b4167b582b2f-LICENSE.md +34 -0
- package/third-party/cargo/bumpalo@3.20.3/Cargo.toml +99 -0
- package/third-party/cargo/bumpalo@3.20.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/bumpalo@3.20.3/LICENSE-MIT +25 -0
- package/third-party/cargo/bytemuck@1.25.1/Cargo.toml +153 -0
- package/third-party/cargo/bytemuck@1.25.1/LICENSE-APACHE +61 -0
- package/third-party/cargo/bytemuck@1.25.1/LICENSE-MIT +9 -0
- package/third-party/cargo/bytemuck@1.25.1/LICENSE-ZLIB +11 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/Cargo.toml +60 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-APACHE +61 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-MIT +9 -0
- package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-ZLIB +11 -0
- package/third-party/cargo/byteorder-lite@0.1.0/Cargo.toml +57 -0
- package/third-party/cargo/byteorder-lite@0.1.0/LICENSE-MIT +21 -0
- package/third-party/cargo/byteorder-lite@0.1.0/UNLICENSE +24 -0
- package/third-party/cargo/byteorder@1.5.0/COPYING +3 -0
- package/third-party/cargo/byteorder@1.5.0/Cargo.toml +54 -0
- package/third-party/cargo/byteorder@1.5.0/LICENSE-MIT +21 -0
- package/third-party/cargo/byteorder@1.5.0/UNLICENSE +24 -0
- package/third-party/cargo/cfg-if@1.0.4/Cargo.toml +47 -0
- package/third-party/cargo/cfg-if@1.0.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/cfg-if@1.0.4/LICENSE-MIT +25 -0
- package/third-party/cargo/cfg_aliases@0.2.1/Cargo.toml +43 -0
- package/third-party/cargo/cfg_aliases@0.2.1/LICENSE +9 -0
- package/third-party/cargo/chunked_transfer@1.5.0/Cargo.toml +27 -0
- package/third-party/cargo/chunked_transfer@1.5.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/chunked_transfer@1.5.0/LICENSE-MIT +22 -0
- package/third-party/cargo/codespan-reporting@0.13.1/Cargo.toml +115 -0
- package/third-party/cargo/codespan-reporting@0.13.1/LICENSE +201 -0
- package/third-party/cargo/color_quant@1.1.0/Cargo.toml +20 -0
- package/third-party/cargo/color_quant@1.1.0/LICENSE +21 -0
- package/third-party/cargo/console_error_panic_hook@0.1.7/Cargo.toml +27 -0
- package/third-party/cargo/console_error_panic_hook@0.1.7/LICENSE-APACHE +201 -0
- package/third-party/cargo/console_error_panic_hook@0.1.7/LICENSE-MIT +25 -0
- package/third-party/cargo/core_maths@0.1.1/Cargo.toml +37 -0
- package/third-party/cargo/core_maths@0.1.1/LICENSE +21 -0
- package/third-party/cargo/cosmic-text@0.19.0/Cargo.toml +214 -0
- package/third-party/cargo/cosmic-text@0.19.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/cosmic-text@0.19.0/LICENSE-MIT +21 -0
- package/third-party/cargo/crc32fast@1.5.0/Cargo.toml +68 -0
- package/third-party/cargo/crc32fast@1.5.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/crc32fast@1.5.0/LICENSE-MIT +21 -0
- package/third-party/cargo/data-url@0.3.2/Cargo.toml +63 -0
- package/third-party/cargo/data-url@0.3.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/data-url@0.3.2/LICENSE-MIT +25 -0
- package/third-party/cargo/dispatch2@0.3.1/Cargo.toml +122 -0
- package/third-party/cargo/dispatch2@0.3.1/MIT-terms.txt +22 -0
- package/third-party/cargo/dispatch2@0.3.1/madsmtm-objc2-8852b424193c-LICENSE.md +34 -0
- package/third-party/cargo/dlib@0.5.3/Cargo.toml +43 -0
- package/third-party/cargo/dlib@0.5.3/LICENSE.txt +19 -0
- package/third-party/cargo/document-features@0.2.12/Cargo.toml +51 -0
- package/third-party/cargo/document-features@0.2.12/LICENSE-APACHE +73 -0
- package/third-party/cargo/document-features@0.2.12/LICENSE-MIT +19 -0
- package/third-party/cargo/equivalent@1.0.2/Cargo.toml +37 -0
- package/third-party/cargo/equivalent@1.0.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/equivalent@1.0.2/LICENSE-MIT +25 -0
- package/third-party/cargo/errno@0.3.14/Cargo.toml +67 -0
- package/third-party/cargo/errno@0.3.14/LICENSE-APACHE +201 -0
- package/third-party/cargo/errno@0.3.14/LICENSE-MIT +25 -0
- package/third-party/cargo/etagere@0.3.0/Cargo.toml +57 -0
- package/third-party/cargo/etagere@0.3.0/LICENSE-APACHE +13 -0
- package/third-party/cargo/etagere@0.3.0/LICENSE-MIT +20 -0
- package/third-party/cargo/euclid@0.22.14/COPYRIGHT +5 -0
- package/third-party/cargo/euclid@0.22.14/Cargo.toml +66 -0
- package/third-party/cargo/euclid@0.22.14/LICENSE-APACHE +201 -0
- package/third-party/cargo/euclid@0.22.14/LICENSE-MIT +25 -0
- package/third-party/cargo/fastrand@2.5.0/Cargo.toml +89 -0
- package/third-party/cargo/fastrand@2.5.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/fastrand@2.5.0/LICENSE-MIT +23 -0
- package/third-party/cargo/fdeflate@0.3.7/Cargo.toml +55 -0
- package/third-party/cargo/fdeflate@0.3.7/LICENSE-APACHE +177 -0
- package/third-party/cargo/fdeflate@0.3.7/LICENSE-MIT +25 -0
- package/third-party/cargo/flate2@1.1.9/Cargo.toml +274 -0
- package/third-party/cargo/flate2@1.1.9/LICENSE-APACHE +201 -0
- package/third-party/cargo/flate2@1.1.9/LICENSE-MIT +25 -0
- package/third-party/cargo/float-cmp@0.9.0/Cargo.toml +39 -0
- package/third-party/cargo/float-cmp@0.9.0/LICENSE +19 -0
- package/third-party/cargo/float_next_after@1.0.0/Cargo.toml +43 -0
- package/third-party/cargo/float_next_after@1.0.0/LICENSE +23 -0
- package/third-party/cargo/foldhash@0.2.0/Cargo.toml +80 -0
- package/third-party/cargo/foldhash@0.2.0/LICENSE +19 -0
- package/third-party/cargo/font-types@0.11.3/Cargo.toml +55 -0
- package/third-party/cargo/font-types@0.11.3/LICENSE-APACHE +67 -0
- package/third-party/cargo/font-types@0.11.3/LICENSE-MIT +25 -0
- package/third-party/cargo/fontdb@0.23.0/Cargo.toml +83 -0
- package/third-party/cargo/fontdb@0.23.0/LICENSE +21 -0
- package/third-party/cargo/futures-core@0.3.32/Cargo.toml +66 -0
- package/third-party/cargo/futures-core@0.3.32/LICENSE-APACHE +202 -0
- package/third-party/cargo/futures-core@0.3.32/LICENSE-MIT +26 -0
- package/third-party/cargo/futures-task@0.3.32/Cargo.toml +58 -0
- package/third-party/cargo/futures-task@0.3.32/LICENSE-APACHE +202 -0
- package/third-party/cargo/futures-task@0.3.32/LICENSE-MIT +26 -0
- package/third-party/cargo/futures-util@0.3.32/Cargo.toml +181 -0
- package/third-party/cargo/futures-util@0.3.32/LICENSE-APACHE +202 -0
- package/third-party/cargo/futures-util@0.3.32/LICENSE-MIT +26 -0
- package/third-party/cargo/getrandom@0.4.3/Cargo.toml +165 -0
- package/third-party/cargo/getrandom@0.4.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/getrandom@0.4.3/LICENSE-MIT +26 -0
- package/third-party/cargo/gif@0.14.2/Cargo.toml +84 -0
- package/third-party/cargo/gif@0.14.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/gif@0.14.2/LICENSE-MIT +21 -0
- package/third-party/cargo/glam@0.33.2/Cargo.toml +354 -0
- package/third-party/cargo/glam@0.33.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/glam@0.33.2/LICENSE-MIT +23 -0
- package/third-party/cargo/glow@0.17.0/Cargo.toml +122 -0
- package/third-party/cargo/glow@0.17.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/glow@0.17.0/LICENSE-MIT +23 -0
- package/third-party/cargo/glow@0.17.0/LICENSE-ZLIB +15 -0
- package/third-party/cargo/gltf-derive@1.4.1/Cargo.toml +34 -0
- package/third-party/cargo/gltf-derive@1.4.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/gltf-derive@1.4.1/LICENSE-MIT +26 -0
- package/third-party/cargo/gltf-json@1.4.1/Cargo.toml +50 -0
- package/third-party/cargo/gltf-json@1.4.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/gltf-json@1.4.1/LICENSE-MIT +26 -0
- package/third-party/cargo/gltf@1.4.1/Cargo.toml +122 -0
- package/third-party/cargo/gltf@1.4.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/gltf@1.4.1/LICENSE-MIT +26 -0
- package/third-party/cargo/glyphon@0.12.0/Cargo.toml +35 -0
- package/third-party/cargo/glyphon@0.12.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/glyphon@0.12.0/LICENSE-MIT +23 -0
- package/third-party/cargo/glyphon@0.12.0/LICENSE-ZLIB +15 -0
- package/third-party/cargo/gpu-allocator@0.28.0/Cargo.toml +180 -0
- package/third-party/cargo/gpu-allocator@0.28.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/gpu-allocator@0.28.0/LICENSE-MIT +7 -0
- package/third-party/cargo/grid@1.0.1/Cargo.toml +77 -0
- package/third-party/cargo/grid@1.0.1/LICENSE +21 -0
- package/third-party/cargo/half@2.7.1/Cargo.toml +137 -0
- package/third-party/cargo/half@2.7.1/LICENSE-APACHE +176 -0
- package/third-party/cargo/half@2.7.1/LICENSE-MIT +19 -0
- package/third-party/cargo/harfrust@0.5.2/Cargo.toml +115 -0
- package/third-party/cargo/harfrust@0.5.2/harfbuzz-harfrust-efdae3142ab7-LICENSE +22 -0
- package/third-party/cargo/hashbrown@0.16.1/Cargo.toml +180 -0
- package/third-party/cargo/hashbrown@0.16.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/hashbrown@0.16.1/LICENSE-MIT +25 -0
- package/third-party/cargo/hashbrown@0.17.1/Cargo.toml +201 -0
- package/third-party/cargo/hashbrown@0.17.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/hashbrown@0.17.1/LICENSE-MIT +25 -0
- package/third-party/cargo/httpdate@1.0.3/Cargo.toml +35 -0
- package/third-party/cargo/httpdate@1.0.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/httpdate@1.0.3/LICENSE-MIT +19 -0
- package/third-party/cargo/image-webp@0.2.4/Cargo.toml +63 -0
- package/third-party/cargo/image-webp@0.2.4/LICENSE-APACHE +177 -0
- package/third-party/cargo/image-webp@0.2.4/LICENSE-MIT +25 -0
- package/third-party/cargo/image@0.25.10/Cargo.toml +248 -0
- package/third-party/cargo/image@0.25.10/LICENSE-APACHE +177 -0
- package/third-party/cargo/image@0.25.10/LICENSE-MIT +25 -0
- package/third-party/cargo/imagesize@0.14.0/Cargo.toml +104 -0
- package/third-party/cargo/imagesize@0.14.0/LICENSE +21 -0
- package/third-party/cargo/indexmap@2.14.0/Cargo.toml +167 -0
- package/third-party/cargo/indexmap@2.14.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/indexmap@2.14.0/LICENSE-MIT +25 -0
- package/third-party/cargo/inflections@1.1.1/Cargo.toml +21 -0
- package/third-party/cargo/inflections@1.1.1/LICENSE +20 -0
- package/third-party/cargo/itoa@1.0.18/Cargo.toml +66 -0
- package/third-party/cargo/itoa@1.0.18/LICENSE-APACHE +176 -0
- package/third-party/cargo/itoa@1.0.18/LICENSE-MIT +23 -0
- package/third-party/cargo/js-sys@0.3.103/Cargo.toml +98 -0
- package/third-party/cargo/js-sys@0.3.103/LICENSE-APACHE +201 -0
- package/third-party/cargo/js-sys@0.3.103/LICENSE-MIT +25 -0
- package/third-party/cargo/khronos-egl@6.0.0/Cargo.toml +82 -0
- package/third-party/cargo/khronos-egl@6.0.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/khronos-egl@6.0.0/LICENSE-MIT +23 -0
- package/third-party/cargo/kurbo@0.13.1/Cargo.toml +230 -0
- package/third-party/cargo/kurbo@0.13.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/kurbo@0.13.1/LICENSE-MIT +25 -0
- package/third-party/cargo/lazy_static@1.5.0/Cargo.toml +46 -0
- package/third-party/cargo/lazy_static@1.5.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/lazy_static@1.5.0/LICENSE-MIT +25 -0
- package/third-party/cargo/libc@0.2.186/Cargo.toml +229 -0
- package/third-party/cargo/libc@0.2.186/LICENSE-APACHE +176 -0
- package/third-party/cargo/libc@0.2.186/LICENSE-MIT +25 -0
- package/third-party/cargo/libloading@0.8.9/Cargo.toml +90 -0
- package/third-party/cargo/libloading@0.8.9/LICENSE +12 -0
- package/third-party/cargo/libm@0.2.16/Cargo.toml +61 -0
- package/third-party/cargo/libm@0.2.16/LICENSE.txt +258 -0
- package/third-party/cargo/linebender_resource_handle@0.1.1/Cargo.toml +107 -0
- package/third-party/cargo/linebender_resource_handle@0.1.1/LICENSE-APACHE +176 -0
- package/third-party/cargo/linebender_resource_handle@0.1.1/LICENSE-MIT +19 -0
- package/third-party/cargo/litrs@1.0.0/Cargo.toml +63 -0
- package/third-party/cargo/litrs@1.0.0/LICENSE-APACHE +176 -0
- package/third-party/cargo/litrs@1.0.0/LICENSE-MIT +25 -0
- package/third-party/cargo/lock_api@0.4.14/Cargo.toml +68 -0
- package/third-party/cargo/lock_api@0.4.14/LICENSE-APACHE +201 -0
- package/third-party/cargo/lock_api@0.4.14/LICENSE-MIT +25 -0
- package/third-party/cargo/log@0.4.33/Cargo.toml +152 -0
- package/third-party/cargo/log@0.4.33/LICENSE-APACHE +201 -0
- package/third-party/cargo/log@0.4.33/LICENSE-MIT +25 -0
- package/third-party/cargo/lru@0.16.4/Cargo.toml +47 -0
- package/third-party/cargo/lru@0.16.4/LICENSE +21 -0
- package/third-party/cargo/lyon_geom@1.0.19/Cargo.toml +69 -0
- package/third-party/cargo/lyon_geom@1.0.19/nical-lyon-56219c95c658-LICENSE-APACHE +13 -0
- package/third-party/cargo/lyon_geom@1.0.19/nical-lyon-56219c95c658-LICENSE-MIT +20 -0
- package/third-party/cargo/lyon_path@1.0.19/Cargo.toml +58 -0
- package/third-party/cargo/lyon_path@1.0.19/nical-lyon-56219c95c658-LICENSE-APACHE +13 -0
- package/third-party/cargo/lyon_path@1.0.19/nical-lyon-56219c95c658-LICENSE-MIT +20 -0
- package/third-party/cargo/lyon_tessellation@1.0.20/Cargo.toml +71 -0
- package/third-party/cargo/lyon_tessellation@1.0.20/nical-lyon-7fa75ea8eea3-LICENSE-APACHE +13 -0
- package/third-party/cargo/lyon_tessellation@1.0.20/nical-lyon-7fa75ea8eea3-LICENSE-MIT +20 -0
- package/third-party/cargo/memchr@2.8.3/COPYING +3 -0
- package/third-party/cargo/memchr@2.8.3/Cargo.toml +89 -0
- package/third-party/cargo/memchr@2.8.3/LICENSE-MIT +21 -0
- package/third-party/cargo/memchr@2.8.3/UNLICENSE +24 -0
- package/third-party/cargo/memmap2@0.9.11/Cargo.toml +59 -0
- package/third-party/cargo/memmap2@0.9.11/LICENSE-APACHE +201 -0
- package/third-party/cargo/memmap2@0.9.11/LICENSE-MIT +26 -0
- package/third-party/cargo/miniz_oxide@0.8.9/Cargo.toml +91 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE +25 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-APACHE.md +177 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-MIT.md +24 -0
- package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-ZLIB.md +14 -0
- package/third-party/cargo/moxcms@0.8.1/Cargo.toml +113 -0
- package/third-party/cargo/moxcms@0.8.1/LICENSE-APACHE.md +201 -0
- package/third-party/cargo/moxcms@0.8.1/LICENSE.md +26 -0
- package/third-party/cargo/naga-types@30.0.0/Cargo.toml +94 -0
- package/third-party/cargo/naga-types@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/naga-types@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/naga@30.0.0/Cargo.toml +246 -0
- package/third-party/cargo/naga@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/naga@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/num-traits@0.2.19/Cargo.toml +54 -0
- package/third-party/cargo/num-traits@0.2.19/LICENSE-APACHE +201 -0
- package/third-party/cargo/num-traits@0.2.19/LICENSE-MIT +25 -0
- package/third-party/cargo/objc2-core-foundation@0.3.2/Cargo.toml +221 -0
- package/third-party/cargo/objc2-core-foundation@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-core-foundation@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-core-graphics@0.3.2/Cargo.toml +331 -0
- package/third-party/cargo/objc2-core-graphics@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-core-graphics@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-encode@4.1.0/Cargo.toml +81 -0
- package/third-party/cargo/objc2-encode@4.1.0/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-encode@4.1.0/madsmtm-objc2-8d214f547736-LICENSE.md +34 -0
- package/third-party/cargo/objc2-foundation@0.3.2/Cargo.toml +529 -0
- package/third-party/cargo/objc2-foundation@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-foundation@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-io-surface@0.3.2/Cargo.toml +139 -0
- package/third-party/cargo/objc2-io-surface@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-io-surface@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-metal@0.3.2/Cargo.toml +601 -0
- package/third-party/cargo/objc2-metal@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-metal@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2-quartz-core@0.3.2/Cargo.toml +302 -0
- package/third-party/cargo/objc2-quartz-core@0.3.2/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2-quartz-core@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
- package/third-party/cargo/objc2@0.6.4/Cargo.toml +232 -0
- package/third-party/cargo/objc2@0.6.4/MIT-terms.txt +22 -0
- package/third-party/cargo/objc2@0.6.4/madsmtm-objc2-8852b424193c-LICENSE.md +34 -0
- package/third-party/cargo/once_cell@1.21.4/Cargo.toml +119 -0
- package/third-party/cargo/once_cell@1.21.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/once_cell@1.21.4/LICENSE-MIT +23 -0
- package/third-party/cargo/ordered-float@5.3.0/Cargo.toml +162 -0
- package/third-party/cargo/ordered-float@5.3.0/LICENSE-MIT +25 -0
- package/third-party/cargo/parking_lot@0.12.5/Cargo.toml +87 -0
- package/third-party/cargo/parking_lot@0.12.5/LICENSE-APACHE +201 -0
- package/third-party/cargo/parking_lot@0.12.5/LICENSE-MIT +25 -0
- package/third-party/cargo/parking_lot_core@0.9.12/Cargo.toml +72 -0
- package/third-party/cargo/parking_lot_core@0.9.12/LICENSE-APACHE +201 -0
- package/third-party/cargo/parking_lot_core@0.9.12/LICENSE-MIT +25 -0
- package/third-party/cargo/pico-args@0.5.0/Cargo.toml +32 -0
- package/third-party/cargo/pico-args@0.5.0/LICENSE +20 -0
- package/third-party/cargo/pin-project-lite@0.2.17/Cargo.toml +198 -0
- package/third-party/cargo/pin-project-lite@0.2.17/LICENSE-APACHE +177 -0
- package/third-party/cargo/pin-project-lite@0.2.17/LICENSE-MIT +23 -0
- package/third-party/cargo/pkg-config@0.3.33/Cargo.toml +43 -0
- package/third-party/cargo/pkg-config@0.3.33/LICENSE-APACHE +201 -0
- package/third-party/cargo/pkg-config@0.3.33/LICENSE-MIT +25 -0
- package/third-party/cargo/png@0.18.1/Cargo.toml +130 -0
- package/third-party/cargo/png@0.18.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/png@0.18.1/LICENSE-MIT +25 -0
- package/third-party/cargo/pollster@0.4.0/Cargo.toml +53 -0
- package/third-party/cargo/pollster@0.4.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/pollster@0.4.0/LICENSE-MIT +25 -0
- package/third-party/cargo/polycool@0.4.0/Cargo.toml +83 -0
- package/third-party/cargo/polycool@0.4.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/polycool@0.4.0/LICENSE-MIT +25 -0
- package/third-party/cargo/pp-rs@0.2.1/Cargo.toml +23 -0
- package/third-party/cargo/pp-rs@0.2.1/LICENSE +29 -0
- package/third-party/cargo/presser@0.3.1/Cargo.toml +58 -0
- package/third-party/cargo/presser@0.3.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/presser@0.3.1/LICENSE-MIT +25 -0
- package/third-party/cargo/proc-macro2@1.0.106/Cargo.toml +105 -0
- package/third-party/cargo/proc-macro2@1.0.106/LICENSE-APACHE +176 -0
- package/third-party/cargo/proc-macro2@1.0.106/LICENSE-MIT +23 -0
- package/third-party/cargo/profiling@1.0.18/Cargo.toml +96 -0
- package/third-party/cargo/profiling@1.0.18/aclysma-profiling-8271551172eb-LICENSE-APACHE +201 -0
- package/third-party/cargo/profiling@1.0.18/aclysma-profiling-8271551172eb-LICENSE-MIT +21 -0
- package/third-party/cargo/pxfm@0.1.30/Cargo.toml +53 -0
- package/third-party/cargo/pxfm@0.1.30/LICENSE-APACHE.md +201 -0
- package/third-party/cargo/pxfm@0.1.30/LICENSE.md +26 -0
- package/third-party/cargo/quick-error@2.0.1/Cargo.toml +24 -0
- package/third-party/cargo/quick-error@2.0.1/LICENSE-APACHE +202 -0
- package/third-party/cargo/quick-error@2.0.1/LICENSE-MIT +19 -0
- package/third-party/cargo/quote@1.0.46/Cargo.toml +70 -0
- package/third-party/cargo/quote@1.0.46/LICENSE-APACHE +176 -0
- package/third-party/cargo/quote@1.0.46/LICENSE-MIT +23 -0
- package/third-party/cargo/rangemap@1.7.1/Cargo.toml +91 -0
- package/third-party/cargo/rangemap@1.7.1/LICENSE-APACHE +191 -0
- package/third-party/cargo/rangemap@1.7.1/LICENSE-MIT +7 -0
- package/third-party/cargo/raw-window-handle@0.6.2/Cargo.toml +56 -0
- package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-APACHE.md +177 -0
- package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-MIT.md +21 -0
- package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-ZLIB.md +11 -0
- package/third-party/cargo/raw-window-metal@1.1.0/Cargo.toml +111 -0
- package/third-party/cargo/raw-window-metal@1.1.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/raw-window-metal@1.1.0/LICENSE-MIT +17 -0
- package/third-party/cargo/read-fonts@0.37.0/Cargo.toml +95 -0
- package/third-party/cargo/read-fonts@0.37.0/LICENSE-APACHE +67 -0
- package/third-party/cargo/read-fonts@0.37.0/LICENSE-MIT +25 -0
- package/third-party/cargo/read-fonts@0.39.2/Cargo.toml +96 -0
- package/third-party/cargo/read-fonts@0.39.2/LICENSE-APACHE +67 -0
- package/third-party/cargo/read-fonts@0.39.2/LICENSE-MIT +25 -0
- package/third-party/cargo/renderdoc-sys@1.1.0/Cargo.toml +39 -0
- package/third-party/cargo/renderdoc-sys@1.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/renderdoc-sys@1.1.0/LICENSE-MIT +25 -0
- package/third-party/cargo/resvg@0.47.0/Cargo.toml +112 -0
- package/third-party/cargo/resvg@0.47.0/LICENSE-APACHE +176 -0
- package/third-party/cargo/resvg@0.47.0/LICENSE-MIT +25 -0
- package/third-party/cargo/rgb@0.8.53/Cargo.toml +110 -0
- package/third-party/cargo/rgb@0.8.53/LICENSE +21 -0
- package/third-party/cargo/roxmltree@0.21.1/Cargo.toml +75 -0
- package/third-party/cargo/roxmltree@0.21.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/roxmltree@0.21.1/LICENSE-MIT +21 -0
- package/third-party/cargo/rustc-hash@1.1.0/Cargo.toml +25 -0
- package/third-party/cargo/rustc-hash@1.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/rustc-hash@1.1.0/LICENSE-MIT +23 -0
- package/third-party/cargo/rustc-hash@2.1.3/Cargo.toml +50 -0
- package/third-party/cargo/rustc-hash@2.1.3/LICENSE-APACHE +176 -0
- package/third-party/cargo/rustc-hash@2.1.3/LICENSE-MIT +23 -0
- package/third-party/cargo/rustix@1.1.4/COPYRIGHT +29 -0
- package/third-party/cargo/rustix@1.1.4/Cargo.toml +292 -0
- package/third-party/cargo/rustix@1.1.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/rustix@1.1.4/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
- package/third-party/cargo/rustix@1.1.4/LICENSE-MIT +23 -0
- package/third-party/cargo/rustversion@1.0.23/Cargo.toml +69 -0
- package/third-party/cargo/rustversion@1.0.23/LICENSE-APACHE +176 -0
- package/third-party/cargo/rustversion@1.0.23/LICENSE-MIT +23 -0
- package/third-party/cargo/rustybuzz@0.20.1/Cargo.toml +110 -0
- package/third-party/cargo/rustybuzz@0.20.1/LICENSE +22 -0
- package/third-party/cargo/scopeguard@1.2.0/Cargo.toml +43 -0
- package/third-party/cargo/scopeguard@1.2.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/scopeguard@1.2.0/LICENSE-MIT +25 -0
- package/third-party/cargo/self_cell@1.2.2/Cargo.toml +33 -0
- package/third-party/cargo/self_cell@1.2.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/self_cell@1.2.2/LICENSE-GPLv2 +339 -0
- package/third-party/cargo/self_cell@1.3.0/Cargo.toml +33 -0
- package/third-party/cargo/self_cell@1.3.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/self_cell@1.3.0/LICENSE-GPLv2 +339 -0
- package/third-party/cargo/serde@1.0.228/Cargo.toml +84 -0
- package/third-party/cargo/serde@1.0.228/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde@1.0.228/LICENSE-MIT +23 -0
- package/third-party/cargo/serde_core@1.0.228/Cargo.toml +87 -0
- package/third-party/cargo/serde_core@1.0.228/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde_core@1.0.228/LICENSE-MIT +23 -0
- package/third-party/cargo/serde_derive@1.0.228/Cargo.toml +87 -0
- package/third-party/cargo/serde_derive@1.0.228/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde_derive@1.0.228/LICENSE-MIT +23 -0
- package/third-party/cargo/serde_json@1.0.150/Cargo.toml +162 -0
- package/third-party/cargo/serde_json@1.0.150/LICENSE-APACHE +176 -0
- package/third-party/cargo/serde_json@1.0.150/LICENSE-MIT +23 -0
- package/third-party/cargo/simd-adler32@0.3.10/Cargo.toml +68 -0
- package/third-party/cargo/simd-adler32@0.3.10/LICENSE.md +21 -0
- package/third-party/cargo/simplecss@0.2.2/Cargo.toml +146 -0
- package/third-party/cargo/simplecss@0.2.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/simplecss@0.2.2/LICENSE-MIT +21 -0
- package/third-party/cargo/siphasher@1.0.3/COPYING +7 -0
- package/third-party/cargo/siphasher@1.0.3/Cargo.toml +64 -0
- package/third-party/cargo/skrifa@0.40.0/Cargo.toml +86 -0
- package/third-party/cargo/skrifa@0.40.0/LICENSE-APACHE +67 -0
- package/third-party/cargo/skrifa@0.40.0/LICENSE-MIT +25 -0
- package/third-party/cargo/skrifa@0.42.1/Cargo.toml +86 -0
- package/third-party/cargo/skrifa@0.42.1/LICENSE-APACHE +67 -0
- package/third-party/cargo/skrifa@0.42.1/LICENSE-MIT +25 -0
- package/third-party/cargo/slab@0.4.12/Cargo.toml +67 -0
- package/third-party/cargo/slab@0.4.12/LICENSE +25 -0
- package/third-party/cargo/slotmap@1.1.1/Cargo.toml +83 -0
- package/third-party/cargo/slotmap@1.1.1/LICENSE +19 -0
- package/third-party/cargo/smallvec@1.15.2/Cargo.toml +103 -0
- package/third-party/cargo/smallvec@1.15.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/smallvec@1.15.2/LICENSE-MIT +25 -0
- package/third-party/cargo/smol_str@0.3.6/Cargo.toml +155 -0
- package/third-party/cargo/smol_str@0.3.6/LICENSE-APACHE +201 -0
- package/third-party/cargo/smol_str@0.3.6/LICENSE-MIT +23 -0
- package/third-party/cargo/spirv@0.4.0+sdk-1.4.341.0/Cargo.toml +56 -0
- package/third-party/cargo/spirv@0.4.0+sdk-1.4.341.0/gfx-rs-rspirv-8afc3d0ac8e1-LICENSE +202 -0
- package/third-party/cargo/static_assertions@1.1.0/Cargo.toml +39 -0
- package/third-party/cargo/static_assertions@1.1.0/LICENSE-APACHE +202 -0
- package/third-party/cargo/static_assertions@1.1.0/LICENSE-MIT +21 -0
- package/third-party/cargo/strict-num@0.1.1/Cargo.toml +35 -0
- package/third-party/cargo/strict-num@0.1.1/LICENSE +19 -0
- package/third-party/cargo/svgtypes@0.16.1/Cargo.toml +57 -0
- package/third-party/cargo/svgtypes@0.16.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/svgtypes@0.16.1/LICENSE-MIT +20 -0
- package/third-party/cargo/swash@0.2.9/Cargo.toml +93 -0
- package/third-party/cargo/swash@0.2.9/LICENSE-APACHE +201 -0
- package/third-party/cargo/swash@0.2.9/LICENSE-MIT +25 -0
- package/third-party/cargo/syn@2.0.118/Cargo.toml +272 -0
- package/third-party/cargo/syn@2.0.118/LICENSE-APACHE +176 -0
- package/third-party/cargo/syn@2.0.118/LICENSE-MIT +23 -0
- package/third-party/cargo/sys-locale@0.3.2/Cargo.toml +73 -0
- package/third-party/cargo/sys-locale@0.3.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/sys-locale@0.3.2/LICENSE-MIT +21 -0
- package/third-party/cargo/taffy@0.12.1/Cargo.toml +171 -0
- package/third-party/cargo/taffy@0.12.1/DioxusLabs-taffy-1c9e37a0a1cf-LICENSE.md +25 -0
- package/third-party/cargo/tempfile@3.27.0/Cargo.toml +105 -0
- package/third-party/cargo/tempfile@3.27.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/tempfile@3.27.0/LICENSE-MIT +25 -0
- package/third-party/cargo/termcolor@1.4.1/COPYING +3 -0
- package/third-party/cargo/termcolor@1.4.1/Cargo.toml +40 -0
- package/third-party/cargo/termcolor@1.4.1/LICENSE-MIT +21 -0
- package/third-party/cargo/termcolor@1.4.1/UNLICENSE +24 -0
- package/third-party/cargo/thiserror-impl@2.0.18/Cargo.toml +52 -0
- package/third-party/cargo/thiserror-impl@2.0.18/LICENSE-APACHE +176 -0
- package/third-party/cargo/thiserror-impl@2.0.18/LICENSE-MIT +23 -0
- package/third-party/cargo/thiserror@2.0.18/Cargo.toml +119 -0
- package/third-party/cargo/thiserror@2.0.18/LICENSE-APACHE +176 -0
- package/third-party/cargo/thiserror@2.0.18/LICENSE-MIT +23 -0
- package/third-party/cargo/tiny-skia-path@0.12.0/Cargo.toml +58 -0
- package/third-party/cargo/tiny-skia-path@0.12.0/LICENSE +30 -0
- package/third-party/cargo/tiny-skia@0.12.0/Cargo.toml +116 -0
- package/third-party/cargo/tiny-skia@0.12.0/LICENSE +30 -0
- package/third-party/cargo/tiny_http@0.12.0/Cargo.toml +82 -0
- package/third-party/cargo/tiny_http@0.12.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/tiny_http@0.12.0/LICENSE-MIT +25 -0
- package/third-party/cargo/tinyvec@1.12.0/Cargo.toml +184 -0
- package/third-party/cargo/tinyvec@1.12.0/LICENSE-APACHE.md +202 -0
- package/third-party/cargo/tinyvec@1.12.0/LICENSE-MIT.md +5 -0
- package/third-party/cargo/tinyvec@1.12.0/LICENSE-ZLIB.md +11 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/Cargo.toml +19 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-APACHE.md +202 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-MIT.md +21 -0
- package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-ZLIB.md +20 -0
- package/third-party/cargo/ttf-parser@0.25.1/Cargo.toml +101 -0
- package/third-party/cargo/ttf-parser@0.25.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/ttf-parser@0.25.1/LICENSE-MIT +20 -0
- package/third-party/cargo/unicode-bidi-mirroring@0.4.0/Cargo.toml +22 -0
- package/third-party/cargo/unicode-bidi-mirroring@0.4.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-bidi-mirroring@0.4.0/LICENSE-MIT +21 -0
- package/third-party/cargo/unicode-bidi@0.3.18/COPYRIGHT +8 -0
- package/third-party/cargo/unicode-bidi@0.3.18/Cargo.toml +90 -0
- package/third-party/cargo/unicode-bidi@0.3.18/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-bidi@0.3.18/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-ccc@0.4.0/Cargo.toml +22 -0
- package/third-party/cargo/unicode-ccc@0.4.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-ccc@0.4.0/LICENSE-MIT +21 -0
- package/third-party/cargo/unicode-ident@1.0.24/Cargo.toml +84 -0
- package/third-party/cargo/unicode-ident@1.0.24/LICENSE-APACHE +176 -0
- package/third-party/cargo/unicode-ident@1.0.24/LICENSE-MIT +23 -0
- package/third-party/cargo/unicode-ident@1.0.24/LICENSE-UNICODE +39 -0
- package/third-party/cargo/unicode-linebreak@0.1.5/Cargo.toml +32 -0
- package/third-party/cargo/unicode-linebreak@0.1.5/LICENSE +201 -0
- package/third-party/cargo/unicode-properties@0.1.4/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-properties@0.1.4/Cargo.toml +65 -0
- package/third-party/cargo/unicode-properties@0.1.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-properties@0.1.4/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-script@0.5.8/Cargo.toml +63 -0
- package/third-party/cargo/unicode-script@0.5.8/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-script@0.5.8/LICENSE-MIT +27 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/Cargo.toml +91 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-segmentation@1.13.3/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-vo@0.1.0/Cargo.toml +22 -0
- package/third-party/cargo/unicode-vo@0.1.0/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-vo@0.1.0/LICENSE-MIT +21 -0
- package/third-party/cargo/unicode-width@0.2.2/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-width@0.2.2/Cargo.toml +77 -0
- package/third-party/cargo/unicode-width@0.2.2/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-width@0.2.2/LICENSE-MIT +25 -0
- package/third-party/cargo/unicode-xid@0.2.6/COPYRIGHT +7 -0
- package/third-party/cargo/unicode-xid@0.2.6/Cargo.toml +65 -0
- package/third-party/cargo/unicode-xid@0.2.6/LICENSE-APACHE +201 -0
- package/third-party/cargo/unicode-xid@0.2.6/LICENSE-MIT +25 -0
- package/third-party/cargo/urlencoding@2.1.3/Cargo.toml +41 -0
- package/third-party/cargo/urlencoding@2.1.3/LICENSE +20 -0
- package/third-party/cargo/usvg@0.47.0/Cargo.toml +138 -0
- package/third-party/cargo/usvg@0.47.0/LICENSE-APACHE +176 -0
- package/third-party/cargo/usvg@0.47.0/LICENSE-MIT +25 -0
- package/third-party/cargo/version_check@0.9.5/Cargo.toml +38 -0
- package/third-party/cargo/version_check@0.9.5/LICENSE-APACHE +201 -0
- package/third-party/cargo/version_check@0.9.5/LICENSE-MIT +19 -0
- package/third-party/cargo/wasm-bindgen-futures@0.4.76/Cargo.toml +88 -0
- package/third-party/cargo/wasm-bindgen-futures@0.4.76/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-futures@0.4.76/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/Cargo.toml +83 -0
- package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen-macro@0.2.126/Cargo.toml +73 -0
- package/third-party/cargo/wasm-bindgen-macro@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-macro@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen-shared@0.2.126/Cargo.toml +66 -0
- package/third-party/cargo/wasm-bindgen-shared@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen-shared@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wasm-bindgen@0.2.126/Cargo.toml +122 -0
- package/third-party/cargo/wasm-bindgen@0.2.126/LICENSE-APACHE +201 -0
- package/third-party/cargo/wasm-bindgen@0.2.126/LICENSE-MIT +25 -0
- package/third-party/cargo/wayland-sys@0.31.11/Cargo.toml +81 -0
- package/third-party/cargo/wayland-sys@0.31.11/LICENSE.txt +19 -0
- package/third-party/cargo/web-sys@0.3.103/Cargo.toml +2823 -0
- package/third-party/cargo/web-sys@0.3.103/LICENSE-APACHE +201 -0
- package/third-party/cargo/web-sys@0.3.103/LICENSE-MIT +25 -0
- package/third-party/cargo/weezl@0.1.12/Cargo.toml +120 -0
- package/third-party/cargo/weezl@0.1.12/LICENSE-APACHE +201 -0
- package/third-party/cargo/weezl@0.1.12/LICENSE-MIT +22 -0
- package/third-party/cargo/wgpu-core-deps-apple@30.0.0/Cargo.toml +53 -0
- package/third-party/cargo/wgpu-core-deps-apple@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-core-deps-apple@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-core@30.0.0/Cargo.toml +237 -0
- package/third-party/cargo/wgpu-core@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-core@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-hal@30.0.0/Cargo.toml +541 -0
- package/third-party/cargo/wgpu-hal@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-hal@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-naga-bridge@30.0.0/Cargo.toml +46 -0
- package/third-party/cargo/wgpu-naga-bridge@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-naga-bridge@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu-types@30.0.0/Cargo.toml +161 -0
- package/third-party/cargo/wgpu-types@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu-types@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/wgpu@30.0.0/Cargo.toml +278 -0
- package/third-party/cargo/wgpu@30.0.0/LICENSE.APACHE +176 -0
- package/third-party/cargo/wgpu@30.0.0/LICENSE.MIT +21 -0
- package/third-party/cargo/xmlwriter@0.1.0/Cargo.toml +23 -0
- package/third-party/cargo/xmlwriter@0.1.0/LICENSE +21 -0
- package/third-party/cargo/yazi@0.2.1/Cargo.toml +45 -0
- package/third-party/cargo/yazi@0.2.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/yazi@0.2.1/LICENSE-MIT +19 -0
- package/third-party/cargo/zeno@0.3.3/Cargo.toml +65 -0
- package/third-party/cargo/zeno@0.3.3/LICENSE-APACHE +201 -0
- package/third-party/cargo/zeno@0.3.3/LICENSE-MIT +25 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/Cargo.toml +209 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-APACHE +202 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-BSD +24 -0
- package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-MIT +26 -0
- package/third-party/cargo/zerocopy@0.8.54/Cargo.toml +419 -0
- package/third-party/cargo/zerocopy@0.8.54/LICENSE-APACHE +202 -0
- package/third-party/cargo/zerocopy@0.8.54/LICENSE-BSD +24 -0
- package/third-party/cargo/zerocopy@0.8.54/LICENSE-MIT +26 -0
- package/third-party/cargo/zmij@1.0.23/Cargo.toml +90 -0
- package/third-party/cargo/zmij@1.0.23/LICENSE-MIT +23 -0
- package/third-party/cargo/zune-core@0.5.1/Cargo.toml +47 -0
- package/third-party/cargo/zune-core@0.5.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/zune-core@0.5.1/LICENSE-MIT +21 -0
- package/third-party/cargo/zune-core@0.5.1/LICENSE-ZLIB +19 -0
- package/third-party/cargo/zune-jpeg@0.5.15/Cargo.toml +67 -0
- package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-APACHE +201 -0
- package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-MIT +21 -0
- package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-ZLIB +19 -0
- package/third-party/inventory.json +3614 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/esbuild-0.27.4-LICENSE.md +21 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/go-LICENSE +27 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/golang-x-sys-c0bba94af5f8-LICENSE +27 -0
- package/third-party/npm/@esbuild__darwin-arm64@0.27.4/package.json +20 -0
- package/third-party/npm/@floating-ui__core@1.7.5/LICENSE +20 -0
- package/third-party/npm/@floating-ui__core@1.7.5/package.json +63 -0
- package/third-party/npm/@floating-ui__dom@1.7.6/LICENSE +20 -0
- package/third-party/npm/@floating-ui__dom@1.7.6/package.json +71 -0
- package/third-party/npm/@floating-ui__react-dom@2.1.8/LICENSE +20 -0
- package/third-party/npm/@floating-ui__react-dom@2.1.8/package.json +76 -0
- package/third-party/npm/@floating-ui__utils@0.2.11/LICENSE +20 -0
- package/third-party/npm/@floating-ui__utils@0.2.11/package.json +70 -0
- package/third-party/npm/@radix-ui__primitive@1.1.7/LICENSE +21 -0
- package/third-party/npm/@radix-ui__primitive@1.1.7/package.json +79 -0
- package/third-party/npm/@radix-ui__react-arrow@1.1.15/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-arrow@1.1.15/package.json +68 -0
- package/third-party/npm/@radix-ui__react-collection@1.1.15/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-collection@1.1.15/package.json +71 -0
- package/third-party/npm/@radix-ui__react-compose-refs@1.1.5/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-compose-refs@1.1.5/package.json +60 -0
- package/third-party/npm/@radix-ui__react-context-menu@2.3.7/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-context-menu@2.3.7/package.json +73 -0
- package/third-party/npm/@radix-ui__react-context@1.2.2/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-context@1.2.2/package.json +60 -0
- package/third-party/npm/@radix-ui__react-direction@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-direction@1.1.4/package.json +60 -0
- package/third-party/npm/@radix-ui__react-dismissable-layer@1.1.19/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-dismissable-layer@1.1.19/package.json +74 -0
- package/third-party/npm/@radix-ui__react-focus-guards@1.1.6/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-focus-guards@1.1.6/package.json +60 -0
- package/third-party/npm/@radix-ui__react-focus-scope@1.1.16/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-focus-scope@1.1.16/package.json +71 -0
- package/third-party/npm/@radix-ui__react-id@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-id@1.1.4/package.json +63 -0
- package/third-party/npm/@radix-ui__react-menu@2.1.24/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-menu@2.1.24/package.json +86 -0
- package/third-party/npm/@radix-ui__react-popper@1.3.7/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-popper@1.3.7/package.json +78 -0
- package/third-party/npm/@radix-ui__react-portal@1.1.17/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-portal@1.1.17/package.json +69 -0
- package/third-party/npm/@radix-ui__react-presence@1.1.10/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-presence@1.1.10/package.json +68 -0
- package/third-party/npm/@radix-ui__react-primitive@2.1.10/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-primitive@2.1.10/package.json +68 -0
- package/third-party/npm/@radix-ui__react-roving-focus@1.1.19/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-roving-focus@1.1.19/package.json +78 -0
- package/third-party/npm/@radix-ui__react-slot@1.3.3/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-slot@1.3.3/package.json +63 -0
- package/third-party/npm/@radix-ui__react-use-callback-ref@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-callback-ref@1.1.4/package.json +60 -0
- package/third-party/npm/@radix-ui__react-use-controllable-state@1.2.6/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-controllable-state@1.2.6/package.json +65 -0
- package/third-party/npm/@radix-ui__react-use-effect-event@0.0.5/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-effect-event@0.0.5/package.json +65 -0
- package/third-party/npm/@radix-ui__react-use-is-hydrated@0.1.3/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-is-hydrated@0.1.3/package.json +61 -0
- package/third-party/npm/@radix-ui__react-use-layout-effect@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-layout-effect@1.1.4/package.json +60 -0
- package/third-party/npm/@radix-ui__react-use-size@1.1.4/LICENSE +21 -0
- package/third-party/npm/@radix-ui__react-use-size@1.1.4/package.json +63 -0
- package/third-party/npm/aria-hidden@1.2.6/LICENSE +21 -0
- package/third-party/npm/aria-hidden@1.2.6/package.json +71 -0
- package/third-party/npm/detect-node-es@1.1.0/LICENSE +21 -0
- package/third-party/npm/detect-node-es@1.1.0/package.json +29 -0
- package/third-party/npm/esbuild@0.27.4/LICENSE.md +21 -0
- package/third-party/npm/esbuild@0.27.4/package.json +49 -0
- package/third-party/npm/fflate@0.8.3/LICENSE +21 -0
- package/third-party/npm/fflate@0.8.3/package.json +128 -0
- package/third-party/npm/get-nonce@1.0.1/LICENSE +21 -0
- package/third-party/npm/get-nonce@1.0.1/package.json +68 -0
- package/third-party/npm/mediabunny@1.52.2/LICENSE +373 -0
- package/third-party/npm/mediabunny@1.52.2/package.json +136 -0
- package/third-party/npm/mediabunny@1.52.2/source/LICENSE +373 -0
- package/third-party/npm/mediabunny@1.52.2/source/package.json +136 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-demuxer.ts +400 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-muxer.ts +124 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-reader.ts +85 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/aes.ts +307 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/codec-data.ts +3178 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/codec.ts +1154 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/conversion.ts +2042 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/custom-coder.ts +212 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/decode.ts +263 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/demuxer.ts +43 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/encode.ts +1412 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-demuxer.ts +813 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-misc.ts +165 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-muxer.ts +350 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-demuxer.ts +995 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-misc.ts +81 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-muxer.ts +1529 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-segmented-input.ts +772 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/id3.ts +972 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/index.ts +319 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/input-format.ts +819 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/input-track.ts +1141 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/input.ts +571 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-boxes.ts +1911 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-demuxer.ts +3953 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-misc.ts +90 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-muxer.ts +1595 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-reader.ts +91 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/logging.ts +120 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/ebml.ts +770 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-demuxer.ts +2598 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-misc.ts +29 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-muxer.ts +1360 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/media-sink.ts +2589 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/media-source.ts +3041 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/metadata.ts +335 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/misc.ts +1336 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-demuxer.ts +469 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-muxer.ts +169 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-reader.ts +61 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-writer.ts +121 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-demuxer.ts +2519 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-misc.ts +32 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-muxer.ts +842 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/muxer.ts +80 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/node.ts +11 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-demuxer.ts +1087 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-misc.ts +116 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-muxer.ts +527 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-reader.ts +93 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/output-format.ts +1425 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/output.ts +940 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/packet.ts +287 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/pcm.ts +112 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/reader.ts +391 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/resample.ts +287 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/sample.ts +3231 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/segmented-input.ts +575 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/source.ts +2588 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/subtitles.ts +131 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/target.ts +871 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/tsconfig.json +16 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/wave/riff-writer.ts +36 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/wave/wave-demuxer.ts +583 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/wave/wave-muxer.ts +375 -0
- package/third-party/npm/mediabunny@1.52.2/source/src/writer.ts +128 -0
- package/third-party/npm/react-dom@19.3.0/LICENSE +21 -0
- package/third-party/npm/react-dom@19.3.0/package.json +117 -0
- package/third-party/npm/react-remove-scroll-bar@2.3.8/package.json +85 -0
- package/third-party/npm/react-remove-scroll-bar@2.3.8/react-remove-scroll-bar-LICENSE +21 -0
- package/third-party/npm/react-remove-scroll@2.7.2/LICENSE +21 -0
- package/third-party/npm/react-remove-scroll@2.7.2/package.json +98 -0
- package/third-party/npm/react-style-singleton@2.2.3/LICENSE +21 -0
- package/third-party/npm/react-style-singleton@2.2.3/package.json +90 -0
- package/third-party/npm/react@19.3.0/LICENSE +21 -0
- package/third-party/npm/react@19.3.0/package.json +51 -0
- package/third-party/npm/scheduler@0.28.0/LICENSE +21 -0
- package/third-party/npm/scheduler@0.28.0/package.json +27 -0
- package/third-party/npm/tslib@2.8.1/LICENSE.txt +12 -0
- package/third-party/npm/tslib@2.8.1/package.json +47 -0
- package/third-party/npm/typescript@5.9.3/LICENSE.txt +55 -0
- package/third-party/npm/typescript@5.9.3/ThirdPartyNoticeText.txt +193 -0
- package/third-party/npm/typescript@5.9.3/package.json +120 -0
- package/third-party/npm/use-callback-ref@1.3.3/LICENSE +21 -0
- package/third-party/npm/use-callback-ref@1.3.3/package.json +85 -0
- package/third-party/npm/use-sidecar@1.1.3/LICENSE +21 -0
- package/third-party/npm/use-sidecar@1.1.3/package.json +93 -0
- package/third-party/packages/render-engine/assets/OFL.txt +93 -0
- package/third-party/packages/studio/public/fonts/OFL.txt +93 -0
- package/third-party/packages/studio/vendor/osmo-icons/LICENSE +21 -0
- package/third-party/packages/studio/vendor/shadcn/LICENSE +21 -0
- package/third-party/repository-notices.md +41 -0
- package/third-party/rust-standard-library/COPYRIGHT-library.html +5556 -0
- package/third-party/rust-standard-library/licenses/Apache-2.0.txt +73 -0
- package/third-party/rust-standard-library/licenses/BSD-2-Clause.txt +9 -0
- package/third-party/rust-standard-library/licenses/CC-BY-SA-4.0.txt +427 -0
- package/third-party/rust-standard-library/licenses/GCC-exception-3.1.txt +30 -0
- package/third-party/rust-standard-library/licenses/GPL-2.0-only.txt +133 -0
- package/third-party/rust-standard-library/licenses/GPL-3.0-or-later.txt +202 -0
- package/third-party/rust-standard-library/licenses/ISC.txt +7 -0
- package/third-party/rust-standard-library/licenses/LLVM-exception.txt +15 -0
- package/third-party/rust-standard-library/licenses/MIT.txt +9 -0
- package/third-party/rust-standard-library/licenses/NCSA.txt +29 -0
- package/third-party/rust-standard-library/licenses/OFL-1.1.txt +43 -0
- package/third-party/rust-standard-library/licenses/Unicode-3.0.txt +39 -0
- package/third-party/rust-standard-library/version.txt +1 -0
- package/vendor/osmo-lite +0 -0
- package/vendor/osmo-scene-0.1.0.tgz +0 -0
- package/vendor/platform.json +1 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
// Static authoring contract, not a security sandbox. Runtime/type validation is separate.
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import ts from 'typescript';
|
|
5
|
+
import {isClipPrimitive} from '../src/clip.mjs';
|
|
6
|
+
import {readGroupLabel, readGroupPlayback, readSceneTracks} from '../src/metadata.mjs';
|
|
7
|
+
export function resolveGroupImport(file, specifier) {
|
|
8
|
+
if (!specifier.startsWith('./') && !specifier.startsWith('../')) throw new Error('Group imports must use relative local TSX paths');
|
|
9
|
+
const candidate = path.resolve(path.dirname(file), specifier.endsWith('.tsx') ? specifier : specifier.endsWith('.js') ? specifier.slice(0, -3) + '.tsx' : specifier + '.tsx');
|
|
10
|
+
if (!candidate.endsWith('.tsx')) throw new Error('Group imports must reference .tsx files');
|
|
11
|
+
return fs.realpathSync(candidate);
|
|
12
|
+
}
|
|
13
|
+
function projectDirectory(file) {
|
|
14
|
+
let dir = path.dirname(file);
|
|
15
|
+
while (true) {
|
|
16
|
+
if (fs.existsSync(path.join(dir, '.osmo/project.json'))) return dir;
|
|
17
|
+
const parent = path.dirname(dir);
|
|
18
|
+
if (parent === dir) return path.dirname(file);
|
|
19
|
+
dir = parent;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function validate(file, mode, options = {}) {
|
|
23
|
+
file = fs.realpathSync(file);
|
|
24
|
+
const root = options.root ?? projectDirectory(file);
|
|
25
|
+
const stack = options.stack ?? [];
|
|
26
|
+
if (stack.includes(file)) return { ok:false, errors:[`Cyclic Group import: ${[...stack,file].map(p=>path.basename(p)).join(' → ')}`], bytes:0 };
|
|
27
|
+
if (stack.length > 32) return {ok:false,errors:['Group import nesting exceeds 32 files'],bytes:0};
|
|
28
|
+
const text = options.text ?? options.sources?.[file] ?? fs.readFileSync(file, 'utf8');
|
|
29
|
+
const ast = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
30
|
+
const errors = [];
|
|
31
|
+
const fail = (n, msg) => { const p = ast.getLineAndCharacterOfPosition(n.getStart(ast)); errors.push(`${p.line + 1}:${p.character + 1} ${msg}`); };
|
|
32
|
+
for (const d of ast.parseDiagnostics)
|
|
33
|
+
errors.push(ts.flattenDiagnosticMessageText(d.messageText, '\n'));
|
|
34
|
+
const allowed = new Set(['Scene', 'Camera', 'Group', 'Rect', 'Path', 'Text', 'Image', 'Video', 'Audio', 'Model', 'Surface', 'Fragment', 'defineMotion', 'defineKnobs', 'Shader', 'sampleMotion', 'describeMotion', 'blur', 'grain']);
|
|
35
|
+
allowed.add('defineEffect');
|
|
36
|
+
const importedGroups = new Set(), sourceIds = new Set(), effects = new Set();
|
|
37
|
+
const tracks = new Map();
|
|
38
|
+
const knobSets = new Set();
|
|
39
|
+
const literal = n => ts.isStringLiteral(n) || ts.isNumericLiteral(n) || [ts.SyntaxKind.TrueKeyword, ts.SyntaxKind.FalseKeyword, ts.SyntaxKind.NullKeyword].includes(n.kind) || ts.isPrefixUnaryExpression(n) && [ts.SyntaxKind.PlusToken, ts.SyntaxKind.MinusToken].includes(n.operator) && ts.isNumericLiteral(n.operand);
|
|
40
|
+
function metadataLiteral(n) {
|
|
41
|
+
if (n && (ts.isJsxExpression(n) || ts.isParenthesizedExpression(n))) return metadataLiteral(n.expression);
|
|
42
|
+
if (n && ts.isStringLiteral(n)) return n.text;
|
|
43
|
+
if (n?.kind === ts.SyntaxKind.TrueKeyword) return true;
|
|
44
|
+
if (n?.kind === ts.SyntaxKind.FalseKeyword) return false;
|
|
45
|
+
if (n && ts.isObjectLiteralExpression(n)) return Object.fromEntries(n.properties.map(p => {
|
|
46
|
+
if (!ts.isPropertyAssignment(p) || ts.isComputedPropertyName(p.name)) throw new Error('Labels require explicit literal properties');
|
|
47
|
+
return [p.name.text, metadataLiteral(p.initializer)];
|
|
48
|
+
}));
|
|
49
|
+
throw new Error('Editor metadata must use static string/boolean literals and literal objects');
|
|
50
|
+
}
|
|
51
|
+
function value(n, refs = true) {
|
|
52
|
+
if (literal(n))
|
|
53
|
+
return;
|
|
54
|
+
if (ts.isArrayLiteralExpression(n)) {
|
|
55
|
+
n.elements.forEach(e => value(e, refs));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (ts.isObjectLiteralExpression(n)) {
|
|
59
|
+
for (const p of n.properties) {
|
|
60
|
+
if (!ts.isPropertyAssignment(p) || ts.isComputedPropertyName(p.name))
|
|
61
|
+
fail(p, 'Only explicit literal object properties are allowed');
|
|
62
|
+
else
|
|
63
|
+
value(p.initializer, refs);
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (refs && ts.isIdentifier(n) && knobSets.has(n.text)) return;
|
|
68
|
+
if (refs && ts.isPropertyAccessExpression(n) && ts.isIdentifier(n.expression) && tracks.get(n.expression.text)?.has(n.name.text))
|
|
69
|
+
return;
|
|
70
|
+
if (refs && ts.isCallExpression(n) && ts.isIdentifier(n.expression) && (['blur', 'grain'].includes(n.expression.text)||effects.has(n.expression.text)) && n.arguments.length <= 1) {
|
|
71
|
+
if(n.arguments[0])value(n.arguments[0]);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
fail(n, 'Strict accepts literals, literal collections, declared motion/knob references, declared effects, blur and grain only');
|
|
75
|
+
}
|
|
76
|
+
for (const st of ast.statements) {
|
|
77
|
+
if (ts.isImportDeclaration(st)) {
|
|
78
|
+
if (st.moduleSpecifier.text !== '@osmo/scene') {
|
|
79
|
+
const clause = st.importClause;
|
|
80
|
+
if (!clause?.name || clause.namedBindings || clause.isTypeOnly) {
|
|
81
|
+
fail(st, 'Reusable Groups use a default import from a local TSX file');
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
importedGroups.add(clause.name.text);
|
|
85
|
+
try {
|
|
86
|
+
const imported = resolveGroupImport(file, st.moduleSpecifier.text);
|
|
87
|
+
const relative = path.relative(root, imported);
|
|
88
|
+
if (relative === '..' || relative.startsWith('..' + path.sep) || path.isAbsolute(relative)) throw new Error('Group imports must stay inside the project');
|
|
89
|
+
const result = validate(imported, mode, {root, stack:[...stack,file], group:true, sources:options.sources});
|
|
90
|
+
for (const error of result.errors) fail(st, `${path.relative(root, imported)}: ${error}`);
|
|
91
|
+
} catch (error) { fail(st, error.message); }
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const b = st.importClause?.namedBindings;
|
|
95
|
+
if (!b || !ts.isNamedImports(b))
|
|
96
|
+
fail(st, 'Use named imports');
|
|
97
|
+
else
|
|
98
|
+
for (const e of b.elements) {
|
|
99
|
+
if (e.propertyName)
|
|
100
|
+
fail(e, 'Import aliases are not allowed');
|
|
101
|
+
if (!st.importClause.isTypeOnly && !e.isTypeOnly && !allowed.has(e.name.text))
|
|
102
|
+
fail(e, `Unsupported import ${e.name.text}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (mode === 'strict' && ts.isVariableStatement(st)) {
|
|
106
|
+
if (!(st.declarationList.flags & ts.NodeFlags.Const))
|
|
107
|
+
fail(st, 'Only const motion/knob/effect declarations are allowed');
|
|
108
|
+
for (const d of st.declarationList.declarations) {
|
|
109
|
+
const call = d.initializer;
|
|
110
|
+
if (!ts.isIdentifier(d.name) || !call || !ts.isCallExpression(call) || !ts.isIdentifier(call.expression) || !['defineMotion','defineKnobs','defineEffect'].includes(call.expression.text) || (call.expression.text !== 'defineKnobs' ? call.arguments.length !== 1 : call.arguments.length < 1 || call.arguments.length > 2) || !ts.isObjectLiteralExpression(call.arguments[0])) {
|
|
111
|
+
fail(d, 'Variables may only name defineMotion, defineKnobs or defineEffect declarations');
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
value(call.arguments[0], false);
|
|
115
|
+
if(call.expression.text==='defineEffect') {
|
|
116
|
+
effects.add(d.name.text);
|
|
117
|
+
const src=call.arguments[0].properties.find(p=>p.name?.text==='src')?.initializer;
|
|
118
|
+
if(src&&(!ts.isStringLiteral(src)||!src.text.endsWith('.wgsl')||path.isAbsolute(src.text)||/^[a-z]+:/i.test(src.text)))fail(src,'Effect.src must be a static relative local .wgsl path');
|
|
119
|
+
}
|
|
120
|
+
if (call.arguments[1]) value(call.arguments[1], false);
|
|
121
|
+
if (call.expression.text === 'defineKnobs') knobSets.add(d.name.text);
|
|
122
|
+
if(call.expression.text!=='defineEffect') tracks.set(d.name.text, new Set(call.arguments[0].properties.filter(ts.isPropertyAssignment).map(p => p.name.text)));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else if (mode === 'strict' && !ts.isImportDeclaration(st) && !ts.isExportAssignment(st) && !ts.isEmptyStatement(st))
|
|
126
|
+
fail(st, 'Strict permits imports, const defineMotion/defineKnobs/defineEffect declarations, and export default JSX only');
|
|
127
|
+
}
|
|
128
|
+
function jsx(n, parent = null) {
|
|
129
|
+
if (ts.isParenthesizedExpression(n)) {
|
|
130
|
+
jsx(n.expression, parent);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (ts.isJsxFragment(n)) {
|
|
134
|
+
n.children.forEach(c => child(c, parent));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (!ts.isJsxElement(n) && !ts.isJsxSelfClosingElement(n)) {
|
|
138
|
+
fail(n, 'Scene structure must be explicit JSX');
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const el = ts.isJsxElement(n) ? n.openingElement : n;
|
|
142
|
+
const tag = el.tagName.getText(ast);
|
|
143
|
+
const clip = isClipPrimitive(tag) || importedGroups.has(tag);
|
|
144
|
+
const track = el.attributes.properties.find(a => ts.isJsxAttribute(a) && a.name.text === 'track');
|
|
145
|
+
if (options.requireTracks && parent === 'Scene' && clip && !track)
|
|
146
|
+
fail(el, `${tag}: root clips require track. Open Studio in interactive mode to assign tracks to an existing scene.`);
|
|
147
|
+
if (track) {
|
|
148
|
+
if (!clip || parent !== 'Scene') fail(track, 'track belongs to root clips only; nested elements use their parent clip');
|
|
149
|
+
const v = track.initializer && (ts.isJsxExpression(track.initializer) ? track.initializer.expression : track.initializer);
|
|
150
|
+
const lane = v && ts.isNumericLiteral(v) ? Number(v.text) : NaN;
|
|
151
|
+
if (!Number.isInteger(lane) || lane < 0 || lane > 99) fail(track, 'track must be a literal integer from 0 to 99');
|
|
152
|
+
}
|
|
153
|
+
if ((!allowed.has(tag) && !importedGroups.has(tag)) || ['defineMotion', 'defineKnobs', 'defineEffect', 'sampleMotion', 'describeMotion', 'blur', 'grain'].includes(tag))
|
|
154
|
+
fail(el, 'Use public visual primitives only');
|
|
155
|
+
if (importedGroups.has(tag) && ts.isJsxElement(n) && n.children.some(c => !ts.isJsxText(c) || c.text.trim()))
|
|
156
|
+
fail(n, 'Animation instances cannot replace children; edit the original Group file');
|
|
157
|
+
for (const a of el.attributes.properties) {
|
|
158
|
+
if (!ts.isJsxAttribute(a)) {
|
|
159
|
+
fail(a, 'Spreads are forbidden in Strict');
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (importedGroups.has(tag) && ['knobs', 'children'].includes(a.name.text))
|
|
163
|
+
fail(a, 'Animation instances customize values, not knob definitions or children');
|
|
164
|
+
if (a.name.text === 'label' || a.name.text === 'tracks') {
|
|
165
|
+
try {
|
|
166
|
+
if (a.name.text === 'label') {
|
|
167
|
+
if (tag !== 'Group' && !importedGroups.has(tag)) throw new Error('label belongs to Groups only');
|
|
168
|
+
readGroupLabel(metadataLiteral(a.initializer));
|
|
169
|
+
} else {
|
|
170
|
+
if (tag !== 'Scene') throw new Error('tracks metadata belongs to Scene only');
|
|
171
|
+
readSceneTracks(metadataLiteral(a.initializer));
|
|
172
|
+
}
|
|
173
|
+
} catch (error) { fail(a, error.message); }
|
|
174
|
+
}
|
|
175
|
+
if (['hidden', 'solo'].includes(a.name.text)) {
|
|
176
|
+
try {
|
|
177
|
+
if (tag !== 'Group' && !importedGroups.has(tag)) throw new Error('hidden and solo belong to Groups only');
|
|
178
|
+
readGroupPlayback({[a.name.text]: a.initializer ? metadataLiteral(a.initializer) : true});
|
|
179
|
+
} catch (error) { fail(a, error.message); }
|
|
180
|
+
}
|
|
181
|
+
if (['id','start','duration','track'].includes(a.name.text) && a.initializer) {
|
|
182
|
+
const v = ts.isJsxExpression(a.initializer) ? a.initializer.expression : a.initializer;
|
|
183
|
+
if (v) value(v, false);
|
|
184
|
+
}
|
|
185
|
+
if (a.name.text === 'id') {
|
|
186
|
+
const id = a.initializer && (ts.isJsxExpression(a.initializer) ? a.initializer.expression : a.initializer);
|
|
187
|
+
if (!id || !ts.isStringLiteral(id) || !id.text.trim()) fail(a, 'id must be a nonempty literal string');
|
|
188
|
+
else if (sourceIds.has(id.text)) fail(a, 'IDs must be unique within their source file');
|
|
189
|
+
else sourceIds.add(id.text);
|
|
190
|
+
}
|
|
191
|
+
if (tag === 'Shader' && a.name.text === 'src') {
|
|
192
|
+
const src = a.initializer && (ts.isJsxExpression(a.initializer) ? a.initializer.expression : a.initializer);
|
|
193
|
+
if (!src || !ts.isStringLiteral(src) || !src.text.trim() || /^[a-z]+:/i.test(src.text) || path.isAbsolute(src.text) || !/\.wgsl$/i.test(src.text))
|
|
194
|
+
fail(a, 'Shader.src must be a static relative local .wgsl path');
|
|
195
|
+
}
|
|
196
|
+
if (tag === 'Path' && a.name.text === 'd' && a.initializer) {
|
|
197
|
+
const d = ts.isJsxExpression(a.initializer) ? a.initializer.expression : a.initializer;
|
|
198
|
+
if (!d || !ts.isStringLiteral(d)) fail(a, 'Path.d must be a static SVG string literal');
|
|
199
|
+
}
|
|
200
|
+
if (a.initializer) {
|
|
201
|
+
if (ts.isJsxExpression(a.initializer)) {
|
|
202
|
+
if (a.initializer.expression)
|
|
203
|
+
value(a.initializer.expression);
|
|
204
|
+
}
|
|
205
|
+
else
|
|
206
|
+
value(a.initializer);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (ts.isJsxElement(n))
|
|
210
|
+
n.children.forEach(c => child(c, tag === "Fragment" ? parent : tag));
|
|
211
|
+
}
|
|
212
|
+
function child(n, parent) { if (ts.isJsxText(n))
|
|
213
|
+
return; if (ts.isJsxExpression(n)) {
|
|
214
|
+
if (n.expression)
|
|
215
|
+
value(n.expression);
|
|
216
|
+
return;
|
|
217
|
+
} jsx(n, parent); }
|
|
218
|
+
if (mode === 'strict') {
|
|
219
|
+
const exports = ast.statements.filter(ts.isExportAssignment);
|
|
220
|
+
if (exports.length !== 1) errors.push('Export exactly one default Scene or Group');
|
|
221
|
+
for (const st of exports) {
|
|
222
|
+
let n = st.expression;
|
|
223
|
+
while (ts.isParenthesizedExpression(n)) n = n.expression;
|
|
224
|
+
const tag = ts.isJsxElement(n) ? n.openingElement.tagName.getText(ast) : ts.isJsxSelfClosingElement(n) ? n.tagName.getText(ast) : '';
|
|
225
|
+
if (!options.group && !['Scene','Group'].includes(tag)) fail(st, 'The entry must export a Scene or Group');
|
|
226
|
+
if (options.group && !['Scene','Group'].includes(tag)) fail(st, 'Reusable files must export a Scene (or legacy Group)');
|
|
227
|
+
jsx(st.expression);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function audit(n) {
|
|
231
|
+
if (ts.isImportEqualsDeclaration(n))
|
|
232
|
+
fail(n, 'Import-equals is forbidden');
|
|
233
|
+
if (ts.isCallExpression(n) && n.expression.kind === ts.SyntaxKind.ImportKeyword)
|
|
234
|
+
fail(n, 'Dynamic imports are forbidden');
|
|
235
|
+
if (ts.isIdentifier(n) && ['require', 'eval', 'Function', 'process', 'globalThis', 'fetch', 'WebSocket', 'Date'].includes(n.text))
|
|
236
|
+
fail(n, 'Submitted animation must be deterministic and self-contained');
|
|
237
|
+
ts.forEachChild(n, audit);
|
|
238
|
+
}
|
|
239
|
+
audit(ast);
|
|
240
|
+
return { ok: errors.length === 0, errors: errors.slice(0, 40), bytes: Buffer.byteLength(text) };
|
|
241
|
+
}
|
|
242
|
+
if (process.argv[1] === new URL(import.meta.url).pathname) {
|
|
243
|
+
const result = validate(path.resolve(process.argv[2]), process.argv[3] ?? "strict");
|
|
244
|
+
console.log(JSON.stringify(result));
|
|
245
|
+
process.exitCode = result.ok ? 0 : 1;
|
|
246
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** @param {{start?: unknown, duration?: unknown, track?: unknown}} props
|
|
2
|
+
* @param {number} parentDuration @param {number} fps @param {string} label */
|
|
3
|
+
export function clipTiming(props: {
|
|
4
|
+
start?: unknown;
|
|
5
|
+
duration?: unknown;
|
|
6
|
+
track?: unknown;
|
|
7
|
+
}, parentDuration: number, fps: number, label: string): {
|
|
8
|
+
start: number;
|
|
9
|
+
duration: number;
|
|
10
|
+
track: number | undefined;
|
|
11
|
+
};
|
|
12
|
+
export const clipPrimitives: readonly string[];
|
|
13
|
+
export const clipFields: readonly string[];
|
|
14
|
+
export function isClipPrimitive(name: string): boolean;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Shared by evaluation, Strict validation, outline inspection and source editing.
|
|
2
|
+
export const clipPrimitives = Object.freeze(['Group', 'Rect', 'Path', 'Text', 'Image', 'Video', 'Audio', 'Shader', 'Model', 'Composition']);
|
|
3
|
+
export const clipFields = Object.freeze(['id', 'track', 'start', 'duration']);
|
|
4
|
+
export const isClipPrimitive = (/** @type {string} */ name) => clipPrimitives.some(tag => tag.toLowerCase() === name.toLowerCase());
|
|
5
|
+
|
|
6
|
+
/** @param {{start?: unknown, duration?: unknown, track?: unknown}} props
|
|
7
|
+
* @param {number} parentDuration @param {number} fps @param {string} label */
|
|
8
|
+
export function clipTiming(props, parentDuration, fps, label) {
|
|
9
|
+
const start = props.start ?? 0, duration = props.duration ?? Math.max(parentDuration - Number(start), 1 / fps);
|
|
10
|
+
if (typeof start !== 'number' || !Number.isFinite(start) || start < 0) throw new Error(`${label}.start: expected a finite nonnegative number`);
|
|
11
|
+
if (typeof duration !== 'number' || !Number.isFinite(duration) || duration <= 0) throw new Error(`${label}.duration: expected a positive finite number`);
|
|
12
|
+
const track = props.track;
|
|
13
|
+
if (track !== undefined && (typeof track !== 'number' || !Number.isInteger(track) || track < 0 || track > 99)) throw new Error(`${label}.track: expected an integer from 0 to 99`);
|
|
14
|
+
return {start, duration, track};
|
|
15
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** sRGBA authoring colors. Interpolation is in linear light, premultiplied by alpha. */
|
|
2
|
+
/** @param {unknown} value @returns {readonly [number, number, number, number] | undefined} */
|
|
3
|
+
export function parseColor(value: unknown): readonly [number, number, number, number] | undefined;
|
|
4
|
+
/** @param {string} a @param {string} b @param {number} t */
|
|
5
|
+
export function mixColor(a: string, b: string, t: number): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** sRGBA authoring colors. Interpolation is in linear light, premultiplied by alpha. */
|
|
2
|
+
/** @param {unknown} value @returns {readonly [number, number, number, number] | undefined} */
|
|
3
|
+
export function parseColor(value) {
|
|
4
|
+
if (value === "transparent") return [0, 0, 0, 0];
|
|
5
|
+
if (typeof value !== "string" || !/^#(?:[\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$/i.test(value)) return;
|
|
6
|
+
let hex = value.slice(1);
|
|
7
|
+
if (hex.length <= 4) hex = [...hex].map(c => c + c).join("");
|
|
8
|
+
if (hex.length === 6) hex += "ff";
|
|
9
|
+
return /** @type {[number, number, number, number]} */ ([0, 2, 4, 6].map(i => parseInt(hex.slice(i, i + 2), 16) / 255));
|
|
10
|
+
}
|
|
11
|
+
/** @param {string} a @param {string} b @param {number} t */
|
|
12
|
+
export function mixColor(a, b, t) {
|
|
13
|
+
const x = parseColor(a), y = parseColor(b);
|
|
14
|
+
const linear = (v) => v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;
|
|
15
|
+
const srgb = (v) => v <= 0.0031308 ? v * 12.92 : 1.055 * v ** (1 / 2.4) - 0.055;
|
|
16
|
+
const alpha = x[3] + (y[3] - x[3]) * t;
|
|
17
|
+
const values = [0, 1, 2].map(i => srgb(alpha > 0 ? (linear(x[i]) * x[3] * (1 - t) + linear(y[i]) * y[3] * t) / alpha : 0));
|
|
18
|
+
return "#" + [...values, alpha].map(v => Math.round(Math.min(1, Math.max(0, v)) * 255).toString(16).padStart(2, "0")).join("");
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { parseColor, mixColor } from "./color-value.mjs";
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { isKnobRef, resolveKnob, type KnobRef } from "./knobs.js";
|
|
2
|
+
import { isMotion, sampleMotion, type Motion, type MotionValue, type TrackDefinition } from "./motion.js";
|
|
3
|
+
import { parseColor } from "./color.js";
|
|
4
|
+
import type { UniformValue } from "./elements.js";
|
|
5
|
+
|
|
6
|
+
import { validateKnobSchema, validateKnobValue as validateValue } from "./knob-schema.js";
|
|
7
|
+
import type { Knobs, KnobGroup, KnobValues, KnobValue } from "./knob-schema.js";
|
|
8
|
+
export type { Knob, KnobGroup, Knobs, KnobValues } from "./knob-schema.js";
|
|
9
|
+
|
|
10
|
+
const EFFECT = Symbol("osmo.effect");
|
|
11
|
+
/** Knob overrides; values can be literals, motion tracks, or references from a containing Group. */
|
|
12
|
+
export type EffectBindings<K extends Knobs> = { readonly [P in keyof K]?: KnobValue<K[P]> | Motion<KnobValue<K[P]>> | KnobRef<KnobValue<K[P]>> };
|
|
13
|
+
/** Extra transparent rendering area in pixels; does not change layout or target dimensions. */
|
|
14
|
+
export type EffectPadding = number | Readonly<{ top: number; right: number; bottom: number; left: number }>;
|
|
15
|
+
export interface EffectDefinition<K extends Knobs = Knobs> {
|
|
16
|
+
/** Rendering space only; never changes layout. Declare 0 for bounds-preserving effects. */
|
|
17
|
+
padding: EffectPadding | ((values: KnobValues<K>) => EffectPadding);
|
|
18
|
+
/** Local .wgsl path; implement effect(uv: vec2f, time: f32) -> vec4f and sample eng_input(uv). */
|
|
19
|
+
src?: string;
|
|
20
|
+
/** Inline source is useful for small reusable built-in effects. Supply src or code, not both. */
|
|
21
|
+
code?: string;
|
|
22
|
+
/** Typed controls. Default uniform mapping: number→f32, boolean→0/1, color→RGBA, select→index, multiselect→bitmask. */
|
|
23
|
+
knobs: K;
|
|
24
|
+
groups?: Readonly<Record<string, KnobGroup>>;
|
|
25
|
+
/** Optional mapping for text, presets or derived uniforms; required for text knobs. Library API, not CLI Strict. */
|
|
26
|
+
uniforms?: (values: KnobValues<K>) => Readonly<Record<string, UniformValue>>;
|
|
27
|
+
/** Run the shader once per entry, in order, adding these uniforms to each run; a separable blur is two passes.
|
|
28
|
+
* Padding is reserved once for the whole effect. Library API, at most 4 passes. */
|
|
29
|
+
passes?: readonly Readonly<Record<string, UniformValue>>[];
|
|
30
|
+
}
|
|
31
|
+
export interface EffectInstance {
|
|
32
|
+
readonly [EFFECT]: true;
|
|
33
|
+
readonly definition: EffectDefinition;
|
|
34
|
+
readonly sourceFile?: string;
|
|
35
|
+
readonly bindings: Readonly<Record<string, MotionValue | Motion | KnobRef>>;
|
|
36
|
+
}
|
|
37
|
+
export type EffectFactory<K extends Knobs> = ((values?: EffectBindings<K>) => EffectInstance) & {
|
|
38
|
+
readonly definition: EffectDefinition<K>;
|
|
39
|
+
};
|
|
40
|
+
export interface EvaluatedEffect {
|
|
41
|
+
padding: readonly [number, number, number, number];
|
|
42
|
+
src?: string;
|
|
43
|
+
code?: string;
|
|
44
|
+
sourceFile?: string;
|
|
45
|
+
uniforms: Readonly<Record<string, UniformValue>>;
|
|
46
|
+
}
|
|
47
|
+
function fail(message: string): never { throw new Error(`Effect: ${message}`); }
|
|
48
|
+
function record(value: unknown): value is Record<string, any> {
|
|
49
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
50
|
+
}
|
|
51
|
+
function keys(value: object, allowed: readonly string[], label: string) {
|
|
52
|
+
for (const key of Object.keys(value)) if (!allowed.includes(key)) fail(`${label}: unsupported property ${key}`);
|
|
53
|
+
}
|
|
54
|
+
function finite(value: unknown): value is number { return typeof value === "number" && Number.isFinite(value); }
|
|
55
|
+
function freeze<T>(value: T): T {
|
|
56
|
+
if (value && typeof value === "object") { for (const child of Object.values(value)) freeze(child); Object.freeze(value); }
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
function normalizePadding(value: unknown): readonly [number, number, number, number] {
|
|
60
|
+
if (record(value)) keys(value, ["top", "right", "bottom", "left"], "padding");
|
|
61
|
+
const sides = typeof value === "number" ? [value, value, value, value] : record(value) ? [value.top, value.right, value.bottom, value.left] : [];
|
|
62
|
+
if (sides.length !== 4 || sides.some(v => !finite(v) || v < 0 || v > 16384))
|
|
63
|
+
fail("padding must be a nonnegative number or { top, right, bottom, left }, at most 16384 per side");
|
|
64
|
+
return Object.freeze(sides) as unknown as readonly [number, number, number, number];
|
|
65
|
+
}
|
|
66
|
+
/** Declare a custom effect factory; apply its instances through effects={[...]} in processing order.
|
|
67
|
+
* CLI Strict supports literal defineEffect declarations. Callbacks remain library-only.
|
|
68
|
+
* eng_input(uv) samples the preceding pass in original target coordinates; eng_box_size()
|
|
69
|
+
* returns the unpadded size. Return straight-alpha sRGB. Declare enough padding for all displaced samples.
|
|
70
|
+
* @example defineEffect({ src: "./tint.wgsl", padding: 0, knobs: { amount: { type: "number", default: 0.5, step: 0.1 } } })
|
|
71
|
+
*/
|
|
72
|
+
export function defineEffect<const K extends Knobs>(definition: EffectDefinition<K>, sourceFile?: string): EffectFactory<K> {
|
|
73
|
+
if (!record(definition)) fail("expected a definition");
|
|
74
|
+
keys(definition, ["src", "code", "knobs", "groups", "uniforms", "padding", "passes"], "definition");
|
|
75
|
+
if (definition.passes !== undefined && (!Array.isArray(definition.passes) || !definition.passes.length || definition.passes.length > 4 || !definition.passes.every(record)))
|
|
76
|
+
fail("passes must be 1 to 4 sets of named uniforms");
|
|
77
|
+
if (!!definition.src === !!definition.code) fail("supply exactly one of src or code");
|
|
78
|
+
if (definition.src && (!/\.wgsl$/i.test(definition.src) || /^[a-z]+:/i.test(definition.src))) fail("src must be a local .wgsl path");
|
|
79
|
+
if (definition.code !== undefined && typeof definition.code !== "string") fail("code must be WGSL text");
|
|
80
|
+
validateKnobSchema(definition.knobs, definition.groups);
|
|
81
|
+
if (definition.uniforms !== undefined && typeof definition.uniforms !== "function") fail("uniforms must be a mapping function");
|
|
82
|
+
if (definition.padding === undefined) fail("padding is required: declare 0 for bounds-preserving effects, or derive it from knobs");
|
|
83
|
+
if (typeof definition.padding !== "function") normalizePadding(definition.padding);
|
|
84
|
+
for (const [name, knob] of Object.entries(definition.knobs))
|
|
85
|
+
if (knob.type === "multiselect" && Object.keys(knob.options).length > 24 && !definition.uniforms)
|
|
86
|
+
fail(`${name}: more than 24 choices needs a uniform mapping`);
|
|
87
|
+
// Copy metadata: modifying the caller's objects cannot change a loaded effect.
|
|
88
|
+
const frozen = freeze({ ...JSON.parse(JSON.stringify({ ...definition, uniforms: undefined })), ...(definition.uniforms ? { uniforms: definition.uniforms } : {}), ...(typeof definition.padding === "function" ? { padding: definition.padding } : {}) }) as EffectDefinition<K>;
|
|
89
|
+
const factory = (values: EffectBindings<K> = {}): EffectInstance => {
|
|
90
|
+
if (!record(values)) fail("expected named knob values");
|
|
91
|
+
const bindings: Record<string, MotionValue | Motion | KnobRef> = Object.create(null);
|
|
92
|
+
for (const [name, value] of Object.entries(values)) {
|
|
93
|
+
if (!Object.hasOwn(frozen.knobs, name)) fail(`unknown knob ${name}`);
|
|
94
|
+
if (isKnobRef(value)) { bindings[name] = value; continue; }
|
|
95
|
+
if (isMotion(value)) {
|
|
96
|
+
for (const v of [value.definition.default, ...(value.definition.keyframes ?? []).map(k => k.value)]) validateValue(frozen.knobs[name], v, name);
|
|
97
|
+
} else validateValue(frozen.knobs[name], value, name);
|
|
98
|
+
bindings[name] = Array.isArray(value) ? Object.freeze([...value]) : value as MotionValue | Motion;
|
|
99
|
+
}
|
|
100
|
+
return Object.freeze({ [EFFECT]: true as const, definition: frozen as EffectDefinition, bindings: Object.freeze(bindings), ...(sourceFile ? { sourceFile } : {}) });
|
|
101
|
+
};
|
|
102
|
+
return Object.freeze(Object.assign(factory, { definition: frozen }));
|
|
103
|
+
}
|
|
104
|
+
export function isEffect(value: unknown): value is EffectInstance { return record(value) && EFFECT in value; }
|
|
105
|
+
export function describeEffect(instance: EffectInstance, time = 0, resolveBinding: (value: unknown) => unknown = v => isKnobRef(v) ? resolveKnob(v, []) : v) {
|
|
106
|
+
if (!isEffect(instance)) fail("effects must contain effect instances");
|
|
107
|
+
const { definition, bindings } = instance;
|
|
108
|
+
const values: Record<string, MotionValue> = Object.create(null);
|
|
109
|
+
const tracks: Record<string, TrackDefinition> = Object.create(null);
|
|
110
|
+
for (const [name, knob] of Object.entries(definition.knobs)) {
|
|
111
|
+
const binding = resolveBinding(bindings[name] ?? knob.default) as MotionValue | Motion;
|
|
112
|
+
values[name] = isMotion(binding) ? sampleMotion(binding, time, knob.type === "color" ? "color" : knob.type === "number" ? undefined : "discrete") : binding;
|
|
113
|
+
if (isMotion(binding)) tracks[name] = binding.definition;
|
|
114
|
+
validateValue(knob, values[name], name);
|
|
115
|
+
}
|
|
116
|
+
const visible = (when?: Readonly<Record<string, string | number | boolean>>) => !when || Object.entries(when).every(([key, value]) => values[key] === value);
|
|
117
|
+
const groups = definition.groups ?? {};
|
|
118
|
+
const visibleGroups: Record<string, boolean> = Object.create(null);
|
|
119
|
+
function groupVisible(name: string): boolean {
|
|
120
|
+
return visibleGroups[name] ??= visible(groups[name].visibleWhen) && (!groups[name].parent || groupVisible(groups[name].parent!));
|
|
121
|
+
}
|
|
122
|
+
for (const name of Object.keys(groups)) groupVisible(name);
|
|
123
|
+
const visibleKnobs = Object.fromEntries(Object.entries(definition.knobs).map(([name, knob]) => [name,
|
|
124
|
+
visible(knob.visibleWhen) && (!knob.group || visibleGroups[knob.group])
|
|
125
|
+
]));
|
|
126
|
+
const padding = normalizePadding(typeof definition.padding === "function" ? definition.padding(values as KnobValues<Knobs>) : definition.padding);
|
|
127
|
+
return freeze({ padding, src: definition.src, knobs: definition.knobs, groups, values, tracks, visibleGroups, visibleKnobs });
|
|
128
|
+
}
|
|
129
|
+
export function evaluateEffects(effects: unknown, time: number, sourceFile?: string, resolveBinding?: (value: unknown) => unknown): EvaluatedEffect[] {
|
|
130
|
+
if (effects === undefined) return [];
|
|
131
|
+
if (!Array.isArray(effects) || effects.length > 32) fail("effects must be an array of at most 32 instances");
|
|
132
|
+
const evaluated = effects.flatMap((instance: EffectInstance) => {
|
|
133
|
+
const { values, padding } = describeEffect(instance, time, resolveBinding);
|
|
134
|
+
const def = instance.definition;
|
|
135
|
+
let uniforms: Readonly<Record<string, UniformValue>>;
|
|
136
|
+
if (def.uniforms) uniforms = def.uniforms(values as KnobValues<Knobs>);
|
|
137
|
+
else {
|
|
138
|
+
const mapped: Record<string, UniformValue> = Object.create(null);
|
|
139
|
+
for (const [name, knob] of Object.entries(def.knobs)) {
|
|
140
|
+
const v = values[name];
|
|
141
|
+
switch (knob.type) {
|
|
142
|
+
case "number": mapped[name] = v as number; break;
|
|
143
|
+
case "boolean": mapped[name] = v ? 1 : 0; break;
|
|
144
|
+
case "color": mapped[name] = parseColor(v)!; break;
|
|
145
|
+
case "select": mapped[name] = Object.keys(knob.options).indexOf(v as string); break;
|
|
146
|
+
case "multiselect": mapped[name] = (v as string[]).reduce((mask, value) => mask + 2 ** Object.keys(knob.options).indexOf(value), 0); break;
|
|
147
|
+
case "text": fail(`${name}: text needs an explicit uniforms mapping`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
uniforms = mapped;
|
|
151
|
+
}
|
|
152
|
+
if (!record(uniforms)) fail("uniforms mapping must return named numeric values");
|
|
153
|
+
// The first pass reserves the effect's padding; later passes work inside it.
|
|
154
|
+
return (def.passes ?? [{}]).map((extra, pass) => {
|
|
155
|
+
const all = { ...uniforms, ...extra };
|
|
156
|
+
for (const [name, value] of Object.entries(all)) {
|
|
157
|
+
const parts = Array.isArray(value) ? value : [value];
|
|
158
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(name) || (Array.isArray(value) && (parts.length < 2 || parts.length > 4)) || parts.some(n => !finite(n) || !Number.isFinite(Math.fround(n)))) fail(`invalid uniform ${name}`);
|
|
159
|
+
}
|
|
160
|
+
return { padding: pass === 0 ? padding : NO_PADDING, ...(def.src ? { src: def.src } : { code: def.code! }), sourceFile: instance.sourceFile ?? sourceFile, uniforms: all };
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
if (evaluated.length > 32) fail("effects expand to more than 32 passes");
|
|
164
|
+
return evaluated;
|
|
165
|
+
}
|
|
166
|
+
const NO_PADDING = Object.freeze([0, 0, 0, 0]) as unknown as readonly [number, number, number, number];
|
|
167
|
+
|
|
168
|
+
/** Effects sample only their input image, never the scene behind the target. */
|
|
169
|
+
export const EFFECT_INPUT = `
|
|
170
|
+
fn eng_input(uv: vec2f) -> vec4f {
|
|
171
|
+
let padded = (uv * ENG_EFFECT_RECT.zw + ENG_EFFECT_RECT.xy) / ENG_EFFECT_SIZE;
|
|
172
|
+
if any(padded < vec2f(0.0)) || any(padded > vec2f(1.0)) { return vec4f(0.0); }
|
|
173
|
+
return eng_backdrop(padded);
|
|
174
|
+
}
|
|
175
|
+
`;
|
|
176
|
+
/** Blur with automatically derived padding. radius is pixels (default 8); animatable.
|
|
177
|
+
* @example <Text effects={[blur({ radius: 5 }), grain({ amount: 0.03 })]}>Soft focus</Text>
|
|
178
|
+
*/
|
|
179
|
+
export const blur = defineEffect({
|
|
180
|
+
padding: ({ radius }) => Math.max(0, radius) * 2,
|
|
181
|
+
knobs: { radius: { type: "number", default: 8, min: 0, max: 64, step: 0.5 } },
|
|
182
|
+
// Separable Gaussian, sigma = radius, reaching two sigmas: a horizontal run,
|
|
183
|
+
// then a vertical one. 33 closely spaced taps each stay smooth at large radii,
|
|
184
|
+
// where a single 2D grid of the same cost left visible steps.
|
|
185
|
+
passes: [{ horizontal: 1 }, { horizontal: 0 }],
|
|
186
|
+
code: `struct Uniforms { radius: f32, horizontal: f32 }
|
|
187
|
+
fn effect(uv: vec2f, time: f32) -> vec4f {
|
|
188
|
+
if uniforms.radius <= 0.0 { return eng_input(uv); }
|
|
189
|
+
let axis = select(vec2f(0.0, 1.0), vec2f(1.0, 0.0), uniforms.horizontal > 0.5);
|
|
190
|
+
let spacing = axis * uniforms.radius / 8.0 / eng_box_size();
|
|
191
|
+
var sum = vec4f(0.0); var weight = 0.0;
|
|
192
|
+
for (var i: i32 = -16; i <= 16; i++) {
|
|
193
|
+
let d = f32(i) / 8.0; let w = exp(-0.5 * d * d);
|
|
194
|
+
let c = eng_input(uv + spacing * f32(i));
|
|
195
|
+
sum += vec4f(c.rgb * c.a, c.a) * w; weight += w;
|
|
196
|
+
}
|
|
197
|
+
return vec4f(sum.rgb / max(sum.a, 0.00001), sum.a / weight);
|
|
198
|
+
}`,
|
|
199
|
+
});
|
|
200
|
+
/** Animated grain; amount defaults to 0.04. Preserves alpha and bounds; animatable.
|
|
201
|
+
* @example <Group effects={[grain({ amount: 0.05 })]}><Text>Texture</Text></Group>
|
|
202
|
+
*/
|
|
203
|
+
export const grain = defineEffect({
|
|
204
|
+
padding: 0,
|
|
205
|
+
knobs: { amount: { type: "number", default: 0.04, min: 0, max: 1, step: 0.01 } },
|
|
206
|
+
code: `struct Uniforms { amount: f32 }
|
|
207
|
+
fn effect(uv: vec2f, time: f32) -> vec4f {
|
|
208
|
+
let c = eng_input(uv);
|
|
209
|
+
let p = floor(uv * eng_box_size());
|
|
210
|
+
let n = fract(sin(dot(p,vec2f(12.9898,78.233)) + floor(time*24.0)*17.1)*43758.5453)-0.5;
|
|
211
|
+
return vec4f(clamp(c.rgb + n*uniforms.amount,vec3f(0.0),vec3f(1.0)), c.a);
|
|
212
|
+
}`,
|
|
213
|
+
});
|