@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.
Files changed (949) hide show
  1. package/DEPLOY.md +87 -0
  2. package/README.md +243 -0
  3. package/RELEASE.md +164 -0
  4. package/SETUP.md +60 -0
  5. package/THIRD_PARTY_NOTICES.md +18 -0
  6. package/bin/osmo.mjs +12 -0
  7. package/dist/osmo.js +7817 -0
  8. package/node_modules/@esbuild/darwin-arm64/README.md +3 -0
  9. package/node_modules/@esbuild/darwin-arm64/bin/esbuild +0 -0
  10. package/node_modules/@esbuild/darwin-arm64/package.json +20 -0
  11. package/node_modules/esbuild/LICENSE.md +21 -0
  12. package/node_modules/esbuild/README.md +3 -0
  13. package/node_modules/esbuild/bin/esbuild +223 -0
  14. package/node_modules/esbuild/install.js +289 -0
  15. package/node_modules/esbuild/lib/main.d.ts +716 -0
  16. package/node_modules/esbuild/lib/main.js +2532 -0
  17. package/node_modules/esbuild/package.json +49 -0
  18. package/node_modules/fflate/LICENSE +21 -0
  19. package/node_modules/fflate/esm/index.mjs +2710 -0
  20. package/node_modules/fflate/package.json +128 -0
  21. package/node_modules/typescript/LICENSE.txt +55 -0
  22. package/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
  23. package/node_modules/typescript/lib/lib.d.ts +22 -0
  24. package/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
  25. package/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
  26. package/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
  27. package/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
  28. package/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
  29. package/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
  30. package/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
  31. package/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
  32. package/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
  33. package/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
  34. package/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
  35. package/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
  36. package/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
  37. package/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
  38. package/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
  39. package/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
  40. package/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
  41. package/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
  42. package/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
  43. package/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
  44. package/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
  45. package/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
  46. package/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
  47. package/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
  48. package/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
  49. package/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
  50. package/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
  51. package/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
  52. package/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
  53. package/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
  54. package/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
  55. package/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
  56. package/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
  57. package/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
  58. package/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
  59. package/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
  60. package/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
  61. package/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
  62. package/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
  63. package/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
  64. package/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
  65. package/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
  66. package/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
  67. package/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
  68. package/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
  69. package/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
  70. package/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
  71. package/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
  72. package/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
  73. package/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
  74. package/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
  75. package/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
  76. package/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
  77. package/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
  78. package/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
  79. package/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
  80. package/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
  81. package/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
  82. package/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
  83. package/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
  84. package/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
  85. package/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
  86. package/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
  87. package/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
  88. package/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
  89. package/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
  90. package/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
  91. package/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
  92. package/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
  93. package/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
  94. package/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
  95. package/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
  96. package/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
  97. package/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
  98. package/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
  99. package/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
  100. package/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
  101. package/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
  102. package/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
  103. package/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
  104. package/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
  105. package/node_modules/typescript/lib/lib.es6.d.ts +23 -0
  106. package/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
  107. package/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
  108. package/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
  109. package/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
  110. package/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
  111. package/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
  112. package/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
  113. package/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
  114. package/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
  115. package/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
  116. package/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
  117. package/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
  118. package/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
  119. package/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
  120. package/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
  121. package/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
  122. package/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
  123. package/node_modules/typescript/lib/typescript.js +382 -0
  124. package/node_modules/typescript/package.json +57 -0
  125. package/package.json +54 -0
  126. package/release.json +136 -0
  127. package/runtime/apps/native/tools/compile.mjs +217 -0
  128. package/runtime/packages/scene/scripts/validate-strict.mjs +246 -0
  129. package/runtime/packages/scene/src/clip.d.mts +14 -0
  130. package/runtime/packages/scene/src/clip.mjs +15 -0
  131. package/runtime/packages/scene/src/color-value.d.mts +5 -0
  132. package/runtime/packages/scene/src/color-value.mjs +19 -0
  133. package/runtime/packages/scene/src/color.ts +1 -0
  134. package/runtime/packages/scene/src/effects.ts +213 -0
  135. package/runtime/packages/scene/src/elements.ts +491 -0
  136. package/runtime/packages/scene/src/evaluate.ts +919 -0
  137. package/runtime/packages/scene/src/index.ts +69 -0
  138. package/runtime/packages/scene/src/jsx-runtime.ts +73 -0
  139. package/runtime/packages/scene/src/knob-schema.ts +115 -0
  140. package/runtime/packages/scene/src/knobs.ts +118 -0
  141. package/runtime/packages/scene/src/mask.d.mts +6 -0
  142. package/runtime/packages/scene/src/mask.mjs +17 -0
  143. package/runtime/packages/scene/src/metadata.d.mts +23 -0
  144. package/runtime/packages/scene/src/metadata.mjs +44 -0
  145. package/runtime/packages/scene/src/motion-sampling.d.mts +2 -0
  146. package/runtime/packages/scene/src/motion-sampling.mjs +50 -0
  147. package/runtime/packages/scene/src/motion.ts +121 -0
  148. package/runtime/packages/scene/src/shader.ts +57 -0
  149. package/src/resource-examples/example-image/landscape.svg +7 -0
  150. package/src/resource-examples/example-image/resource.json +8 -0
  151. package/src/resource-examples/example-model/gem.glb +0 -0
  152. package/src/resource-examples/example-model/preview.svg +1 -0
  153. package/src/resource-examples/example-model/resource.json +7 -0
  154. package/src/resource-examples/example-scene/resource.json +1 -0
  155. package/src/resource-examples/example-scene/scene.tsx +8 -0
  156. package/src/resource-examples/example-shader/effect.wgsl +7 -0
  157. package/src/resource-examples/example-shader/preview.svg +1 -0
  158. package/src/resource-examples/example-shader/resource.json +27 -0
  159. package/src/resource-examples/example-shader/tint.wgsl +7 -0
  160. package/src/resource-examples/example-video/ambient.mp4 +0 -0
  161. package/src/resource-examples/example-video/resource.json +9 -0
  162. package/src/starter/scene.tsx +20 -0
  163. package/studio/index.html +2 -0
  164. package/studio/public/check-circle-filled.svg +3 -0
  165. package/studio/public/comment-cursor/active-outer.svg +3 -0
  166. package/studio/public/comment-cursor/default.svg +6 -0
  167. package/studio/public/osmo-studio-logo.svg +12 -0
  168. package/studio/public/pencil-simple.svg +5 -0
  169. package/studio/src/active-outer-TVYUEURE.svg +3 -0
  170. package/studio/src/app.css +4 -0
  171. package/studio/src/app.js +705 -0
  172. package/studio/src/default-6CTRH4V5.svg +6 -0
  173. package/studio/src/engine_bg.wasm +0 -0
  174. package/studio/src/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2 +0 -0
  175. package/studio/src/inter-cyrillic-wght-normal-JEOLYBOO.woff2 +0 -0
  176. package/studio/src/inter-greek-ext-wght-normal-EOVOK2B5.woff2 +0 -0
  177. package/studio/src/inter-greek-wght-normal-IRE366VL.woff2 +0 -0
  178. package/studio/src/inter-latin-ext-wght-normal-HA22NDSG.woff2 +0 -0
  179. package/studio/src/inter-latin-wght-normal-NRMW37G5.woff2 +0 -0
  180. package/studio/src/inter-vietnamese-wght-normal-CE5GGD3W.woff2 +0 -0
  181. package/studio/src/osmo-studio-logo-D5R2V77B.svg +12 -0
  182. package/third-party/cargo/adler2@2.0.1/Cargo.toml +91 -0
  183. package/third-party/cargo/adler2@2.0.1/LICENSE-0BSD +12 -0
  184. package/third-party/cargo/adler2@2.0.1/LICENSE-APACHE +201 -0
  185. package/third-party/cargo/adler2@2.0.1/LICENSE-MIT +23 -0
  186. package/third-party/cargo/allocator-api2@0.2.21/Cargo.toml +48 -0
  187. package/third-party/cargo/allocator-api2@0.2.21/LICENSE-APACHE +176 -0
  188. package/third-party/cargo/allocator-api2@0.2.21/LICENSE-MIT +23 -0
  189. package/third-party/cargo/arrayref@0.3.9/Cargo.toml +23 -0
  190. package/third-party/cargo/arrayref@0.3.9/LICENSE +26 -0
  191. package/third-party/cargo/arrayvec@0.7.8/Cargo.toml +112 -0
  192. package/third-party/cargo/arrayvec@0.7.8/LICENSE-APACHE +201 -0
  193. package/third-party/cargo/arrayvec@0.7.8/LICENSE-MIT +25 -0
  194. package/third-party/cargo/ascii@1.1.0/Cargo.toml +41 -0
  195. package/third-party/cargo/ascii@1.1.0/LICENSE-APACHE +201 -0
  196. package/third-party/cargo/ascii@1.1.0/LICENSE-MIT +22 -0
  197. package/third-party/cargo/ash@0.38.0+1.3.281/Cargo.toml +66 -0
  198. package/third-party/cargo/ash@0.38.0+1.3.281/LICENSE-APACHE +67 -0
  199. package/third-party/cargo/ash@0.38.0+1.3.281/LICENSE-MIT +25 -0
  200. package/third-party/cargo/autocfg@1.5.1/Cargo.toml +75 -0
  201. package/third-party/cargo/autocfg@1.5.1/LICENSE-APACHE +201 -0
  202. package/third-party/cargo/autocfg@1.5.1/LICENSE-MIT +25 -0
  203. package/third-party/cargo/base64@0.13.1/Cargo.toml +53 -0
  204. package/third-party/cargo/base64@0.13.1/LICENSE-APACHE +201 -0
  205. package/third-party/cargo/base64@0.13.1/LICENSE-MIT +21 -0
  206. package/third-party/cargo/base64@0.22.1/Cargo.toml +85 -0
  207. package/third-party/cargo/base64@0.22.1/LICENSE-APACHE +201 -0
  208. package/third-party/cargo/base64@0.22.1/LICENSE-MIT +21 -0
  209. package/third-party/cargo/bit-set@0.10.0/Cargo.toml +108 -0
  210. package/third-party/cargo/bit-set@0.10.0/LICENSE-APACHE +201 -0
  211. package/third-party/cargo/bit-set@0.10.0/LICENSE-MIT +25 -0
  212. package/third-party/cargo/bit-vec@0.9.1/Cargo.toml +94 -0
  213. package/third-party/cargo/bit-vec@0.9.1/LICENSE-APACHE +201 -0
  214. package/third-party/cargo/bit-vec@0.9.1/LICENSE-MIT +25 -0
  215. package/third-party/cargo/bitflags@2.13.0/Cargo.toml +120 -0
  216. package/third-party/cargo/bitflags@2.13.0/LICENSE-APACHE +201 -0
  217. package/third-party/cargo/bitflags@2.13.0/LICENSE-MIT +25 -0
  218. package/third-party/cargo/block2@0.6.2/Cargo.toml +115 -0
  219. package/third-party/cargo/block2@0.6.2/MIT-terms.txt +22 -0
  220. package/third-party/cargo/block2@0.6.2/madsmtm-objc2-b4167b582b2f-LICENSE.md +34 -0
  221. package/third-party/cargo/bumpalo@3.20.3/Cargo.toml +99 -0
  222. package/third-party/cargo/bumpalo@3.20.3/LICENSE-APACHE +201 -0
  223. package/third-party/cargo/bumpalo@3.20.3/LICENSE-MIT +25 -0
  224. package/third-party/cargo/bytemuck@1.25.1/Cargo.toml +153 -0
  225. package/third-party/cargo/bytemuck@1.25.1/LICENSE-APACHE +61 -0
  226. package/third-party/cargo/bytemuck@1.25.1/LICENSE-MIT +9 -0
  227. package/third-party/cargo/bytemuck@1.25.1/LICENSE-ZLIB +11 -0
  228. package/third-party/cargo/bytemuck_derive@1.11.0/Cargo.toml +60 -0
  229. package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-APACHE +61 -0
  230. package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-MIT +9 -0
  231. package/third-party/cargo/bytemuck_derive@1.11.0/LICENSE-ZLIB +11 -0
  232. package/third-party/cargo/byteorder-lite@0.1.0/Cargo.toml +57 -0
  233. package/third-party/cargo/byteorder-lite@0.1.0/LICENSE-MIT +21 -0
  234. package/third-party/cargo/byteorder-lite@0.1.0/UNLICENSE +24 -0
  235. package/third-party/cargo/byteorder@1.5.0/COPYING +3 -0
  236. package/third-party/cargo/byteorder@1.5.0/Cargo.toml +54 -0
  237. package/third-party/cargo/byteorder@1.5.0/LICENSE-MIT +21 -0
  238. package/third-party/cargo/byteorder@1.5.0/UNLICENSE +24 -0
  239. package/third-party/cargo/cfg-if@1.0.4/Cargo.toml +47 -0
  240. package/third-party/cargo/cfg-if@1.0.4/LICENSE-APACHE +201 -0
  241. package/third-party/cargo/cfg-if@1.0.4/LICENSE-MIT +25 -0
  242. package/third-party/cargo/cfg_aliases@0.2.1/Cargo.toml +43 -0
  243. package/third-party/cargo/cfg_aliases@0.2.1/LICENSE +9 -0
  244. package/third-party/cargo/chunked_transfer@1.5.0/Cargo.toml +27 -0
  245. package/third-party/cargo/chunked_transfer@1.5.0/LICENSE-APACHE +201 -0
  246. package/third-party/cargo/chunked_transfer@1.5.0/LICENSE-MIT +22 -0
  247. package/third-party/cargo/codespan-reporting@0.13.1/Cargo.toml +115 -0
  248. package/third-party/cargo/codespan-reporting@0.13.1/LICENSE +201 -0
  249. package/third-party/cargo/color_quant@1.1.0/Cargo.toml +20 -0
  250. package/third-party/cargo/color_quant@1.1.0/LICENSE +21 -0
  251. package/third-party/cargo/console_error_panic_hook@0.1.7/Cargo.toml +27 -0
  252. package/third-party/cargo/console_error_panic_hook@0.1.7/LICENSE-APACHE +201 -0
  253. package/third-party/cargo/console_error_panic_hook@0.1.7/LICENSE-MIT +25 -0
  254. package/third-party/cargo/core_maths@0.1.1/Cargo.toml +37 -0
  255. package/third-party/cargo/core_maths@0.1.1/LICENSE +21 -0
  256. package/third-party/cargo/cosmic-text@0.19.0/Cargo.toml +214 -0
  257. package/third-party/cargo/cosmic-text@0.19.0/LICENSE-APACHE +201 -0
  258. package/third-party/cargo/cosmic-text@0.19.0/LICENSE-MIT +21 -0
  259. package/third-party/cargo/crc32fast@1.5.0/Cargo.toml +68 -0
  260. package/third-party/cargo/crc32fast@1.5.0/LICENSE-APACHE +202 -0
  261. package/third-party/cargo/crc32fast@1.5.0/LICENSE-MIT +21 -0
  262. package/third-party/cargo/data-url@0.3.2/Cargo.toml +63 -0
  263. package/third-party/cargo/data-url@0.3.2/LICENSE-APACHE +201 -0
  264. package/third-party/cargo/data-url@0.3.2/LICENSE-MIT +25 -0
  265. package/third-party/cargo/dispatch2@0.3.1/Cargo.toml +122 -0
  266. package/third-party/cargo/dispatch2@0.3.1/MIT-terms.txt +22 -0
  267. package/third-party/cargo/dispatch2@0.3.1/madsmtm-objc2-8852b424193c-LICENSE.md +34 -0
  268. package/third-party/cargo/dlib@0.5.3/Cargo.toml +43 -0
  269. package/third-party/cargo/dlib@0.5.3/LICENSE.txt +19 -0
  270. package/third-party/cargo/document-features@0.2.12/Cargo.toml +51 -0
  271. package/third-party/cargo/document-features@0.2.12/LICENSE-APACHE +73 -0
  272. package/third-party/cargo/document-features@0.2.12/LICENSE-MIT +19 -0
  273. package/third-party/cargo/equivalent@1.0.2/Cargo.toml +37 -0
  274. package/third-party/cargo/equivalent@1.0.2/LICENSE-APACHE +201 -0
  275. package/third-party/cargo/equivalent@1.0.2/LICENSE-MIT +25 -0
  276. package/third-party/cargo/errno@0.3.14/Cargo.toml +67 -0
  277. package/third-party/cargo/errno@0.3.14/LICENSE-APACHE +201 -0
  278. package/third-party/cargo/errno@0.3.14/LICENSE-MIT +25 -0
  279. package/third-party/cargo/etagere@0.3.0/Cargo.toml +57 -0
  280. package/third-party/cargo/etagere@0.3.0/LICENSE-APACHE +13 -0
  281. package/third-party/cargo/etagere@0.3.0/LICENSE-MIT +20 -0
  282. package/third-party/cargo/euclid@0.22.14/COPYRIGHT +5 -0
  283. package/third-party/cargo/euclid@0.22.14/Cargo.toml +66 -0
  284. package/third-party/cargo/euclid@0.22.14/LICENSE-APACHE +201 -0
  285. package/third-party/cargo/euclid@0.22.14/LICENSE-MIT +25 -0
  286. package/third-party/cargo/fastrand@2.5.0/Cargo.toml +89 -0
  287. package/third-party/cargo/fastrand@2.5.0/LICENSE-APACHE +201 -0
  288. package/third-party/cargo/fastrand@2.5.0/LICENSE-MIT +23 -0
  289. package/third-party/cargo/fdeflate@0.3.7/Cargo.toml +55 -0
  290. package/third-party/cargo/fdeflate@0.3.7/LICENSE-APACHE +177 -0
  291. package/third-party/cargo/fdeflate@0.3.7/LICENSE-MIT +25 -0
  292. package/third-party/cargo/flate2@1.1.9/Cargo.toml +274 -0
  293. package/third-party/cargo/flate2@1.1.9/LICENSE-APACHE +201 -0
  294. package/third-party/cargo/flate2@1.1.9/LICENSE-MIT +25 -0
  295. package/third-party/cargo/float-cmp@0.9.0/Cargo.toml +39 -0
  296. package/third-party/cargo/float-cmp@0.9.0/LICENSE +19 -0
  297. package/third-party/cargo/float_next_after@1.0.0/Cargo.toml +43 -0
  298. package/third-party/cargo/float_next_after@1.0.0/LICENSE +23 -0
  299. package/third-party/cargo/foldhash@0.2.0/Cargo.toml +80 -0
  300. package/third-party/cargo/foldhash@0.2.0/LICENSE +19 -0
  301. package/third-party/cargo/font-types@0.11.3/Cargo.toml +55 -0
  302. package/third-party/cargo/font-types@0.11.3/LICENSE-APACHE +67 -0
  303. package/third-party/cargo/font-types@0.11.3/LICENSE-MIT +25 -0
  304. package/third-party/cargo/fontdb@0.23.0/Cargo.toml +83 -0
  305. package/third-party/cargo/fontdb@0.23.0/LICENSE +21 -0
  306. package/third-party/cargo/futures-core@0.3.32/Cargo.toml +66 -0
  307. package/third-party/cargo/futures-core@0.3.32/LICENSE-APACHE +202 -0
  308. package/third-party/cargo/futures-core@0.3.32/LICENSE-MIT +26 -0
  309. package/third-party/cargo/futures-task@0.3.32/Cargo.toml +58 -0
  310. package/third-party/cargo/futures-task@0.3.32/LICENSE-APACHE +202 -0
  311. package/third-party/cargo/futures-task@0.3.32/LICENSE-MIT +26 -0
  312. package/third-party/cargo/futures-util@0.3.32/Cargo.toml +181 -0
  313. package/third-party/cargo/futures-util@0.3.32/LICENSE-APACHE +202 -0
  314. package/third-party/cargo/futures-util@0.3.32/LICENSE-MIT +26 -0
  315. package/third-party/cargo/getrandom@0.4.3/Cargo.toml +165 -0
  316. package/third-party/cargo/getrandom@0.4.3/LICENSE-APACHE +201 -0
  317. package/third-party/cargo/getrandom@0.4.3/LICENSE-MIT +26 -0
  318. package/third-party/cargo/gif@0.14.2/Cargo.toml +84 -0
  319. package/third-party/cargo/gif@0.14.2/LICENSE-APACHE +201 -0
  320. package/third-party/cargo/gif@0.14.2/LICENSE-MIT +21 -0
  321. package/third-party/cargo/glam@0.33.2/Cargo.toml +354 -0
  322. package/third-party/cargo/glam@0.33.2/LICENSE-APACHE +201 -0
  323. package/third-party/cargo/glam@0.33.2/LICENSE-MIT +23 -0
  324. package/third-party/cargo/glow@0.17.0/Cargo.toml +122 -0
  325. package/third-party/cargo/glow@0.17.0/LICENSE-APACHE +201 -0
  326. package/third-party/cargo/glow@0.17.0/LICENSE-MIT +23 -0
  327. package/third-party/cargo/glow@0.17.0/LICENSE-ZLIB +15 -0
  328. package/third-party/cargo/gltf-derive@1.4.1/Cargo.toml +34 -0
  329. package/third-party/cargo/gltf-derive@1.4.1/LICENSE-APACHE +202 -0
  330. package/third-party/cargo/gltf-derive@1.4.1/LICENSE-MIT +26 -0
  331. package/third-party/cargo/gltf-json@1.4.1/Cargo.toml +50 -0
  332. package/third-party/cargo/gltf-json@1.4.1/LICENSE-APACHE +202 -0
  333. package/third-party/cargo/gltf-json@1.4.1/LICENSE-MIT +26 -0
  334. package/third-party/cargo/gltf@1.4.1/Cargo.toml +122 -0
  335. package/third-party/cargo/gltf@1.4.1/LICENSE-APACHE +202 -0
  336. package/third-party/cargo/gltf@1.4.1/LICENSE-MIT +26 -0
  337. package/third-party/cargo/glyphon@0.12.0/Cargo.toml +35 -0
  338. package/third-party/cargo/glyphon@0.12.0/LICENSE-APACHE +201 -0
  339. package/third-party/cargo/glyphon@0.12.0/LICENSE-MIT +23 -0
  340. package/third-party/cargo/glyphon@0.12.0/LICENSE-ZLIB +15 -0
  341. package/third-party/cargo/gpu-allocator@0.28.0/Cargo.toml +180 -0
  342. package/third-party/cargo/gpu-allocator@0.28.0/LICENSE-APACHE +201 -0
  343. package/third-party/cargo/gpu-allocator@0.28.0/LICENSE-MIT +7 -0
  344. package/third-party/cargo/grid@1.0.1/Cargo.toml +77 -0
  345. package/third-party/cargo/grid@1.0.1/LICENSE +21 -0
  346. package/third-party/cargo/half@2.7.1/Cargo.toml +137 -0
  347. package/third-party/cargo/half@2.7.1/LICENSE-APACHE +176 -0
  348. package/third-party/cargo/half@2.7.1/LICENSE-MIT +19 -0
  349. package/third-party/cargo/harfrust@0.5.2/Cargo.toml +115 -0
  350. package/third-party/cargo/harfrust@0.5.2/harfbuzz-harfrust-efdae3142ab7-LICENSE +22 -0
  351. package/third-party/cargo/hashbrown@0.16.1/Cargo.toml +180 -0
  352. package/third-party/cargo/hashbrown@0.16.1/LICENSE-APACHE +201 -0
  353. package/third-party/cargo/hashbrown@0.16.1/LICENSE-MIT +25 -0
  354. package/third-party/cargo/hashbrown@0.17.1/Cargo.toml +201 -0
  355. package/third-party/cargo/hashbrown@0.17.1/LICENSE-APACHE +201 -0
  356. package/third-party/cargo/hashbrown@0.17.1/LICENSE-MIT +25 -0
  357. package/third-party/cargo/httpdate@1.0.3/Cargo.toml +35 -0
  358. package/third-party/cargo/httpdate@1.0.3/LICENSE-APACHE +201 -0
  359. package/third-party/cargo/httpdate@1.0.3/LICENSE-MIT +19 -0
  360. package/third-party/cargo/image-webp@0.2.4/Cargo.toml +63 -0
  361. package/third-party/cargo/image-webp@0.2.4/LICENSE-APACHE +177 -0
  362. package/third-party/cargo/image-webp@0.2.4/LICENSE-MIT +25 -0
  363. package/third-party/cargo/image@0.25.10/Cargo.toml +248 -0
  364. package/third-party/cargo/image@0.25.10/LICENSE-APACHE +177 -0
  365. package/third-party/cargo/image@0.25.10/LICENSE-MIT +25 -0
  366. package/third-party/cargo/imagesize@0.14.0/Cargo.toml +104 -0
  367. package/third-party/cargo/imagesize@0.14.0/LICENSE +21 -0
  368. package/third-party/cargo/indexmap@2.14.0/Cargo.toml +167 -0
  369. package/third-party/cargo/indexmap@2.14.0/LICENSE-APACHE +201 -0
  370. package/third-party/cargo/indexmap@2.14.0/LICENSE-MIT +25 -0
  371. package/third-party/cargo/inflections@1.1.1/Cargo.toml +21 -0
  372. package/third-party/cargo/inflections@1.1.1/LICENSE +20 -0
  373. package/third-party/cargo/itoa@1.0.18/Cargo.toml +66 -0
  374. package/third-party/cargo/itoa@1.0.18/LICENSE-APACHE +176 -0
  375. package/third-party/cargo/itoa@1.0.18/LICENSE-MIT +23 -0
  376. package/third-party/cargo/js-sys@0.3.103/Cargo.toml +98 -0
  377. package/third-party/cargo/js-sys@0.3.103/LICENSE-APACHE +201 -0
  378. package/third-party/cargo/js-sys@0.3.103/LICENSE-MIT +25 -0
  379. package/third-party/cargo/khronos-egl@6.0.0/Cargo.toml +82 -0
  380. package/third-party/cargo/khronos-egl@6.0.0/LICENSE-APACHE +201 -0
  381. package/third-party/cargo/khronos-egl@6.0.0/LICENSE-MIT +23 -0
  382. package/third-party/cargo/kurbo@0.13.1/Cargo.toml +230 -0
  383. package/third-party/cargo/kurbo@0.13.1/LICENSE-APACHE +202 -0
  384. package/third-party/cargo/kurbo@0.13.1/LICENSE-MIT +25 -0
  385. package/third-party/cargo/lazy_static@1.5.0/Cargo.toml +46 -0
  386. package/third-party/cargo/lazy_static@1.5.0/LICENSE-APACHE +201 -0
  387. package/third-party/cargo/lazy_static@1.5.0/LICENSE-MIT +25 -0
  388. package/third-party/cargo/libc@0.2.186/Cargo.toml +229 -0
  389. package/third-party/cargo/libc@0.2.186/LICENSE-APACHE +176 -0
  390. package/third-party/cargo/libc@0.2.186/LICENSE-MIT +25 -0
  391. package/third-party/cargo/libloading@0.8.9/Cargo.toml +90 -0
  392. package/third-party/cargo/libloading@0.8.9/LICENSE +12 -0
  393. package/third-party/cargo/libm@0.2.16/Cargo.toml +61 -0
  394. package/third-party/cargo/libm@0.2.16/LICENSE.txt +258 -0
  395. package/third-party/cargo/linebender_resource_handle@0.1.1/Cargo.toml +107 -0
  396. package/third-party/cargo/linebender_resource_handle@0.1.1/LICENSE-APACHE +176 -0
  397. package/third-party/cargo/linebender_resource_handle@0.1.1/LICENSE-MIT +19 -0
  398. package/third-party/cargo/litrs@1.0.0/Cargo.toml +63 -0
  399. package/third-party/cargo/litrs@1.0.0/LICENSE-APACHE +176 -0
  400. package/third-party/cargo/litrs@1.0.0/LICENSE-MIT +25 -0
  401. package/third-party/cargo/lock_api@0.4.14/Cargo.toml +68 -0
  402. package/third-party/cargo/lock_api@0.4.14/LICENSE-APACHE +201 -0
  403. package/third-party/cargo/lock_api@0.4.14/LICENSE-MIT +25 -0
  404. package/third-party/cargo/log@0.4.33/Cargo.toml +152 -0
  405. package/third-party/cargo/log@0.4.33/LICENSE-APACHE +201 -0
  406. package/third-party/cargo/log@0.4.33/LICENSE-MIT +25 -0
  407. package/third-party/cargo/lru@0.16.4/Cargo.toml +47 -0
  408. package/third-party/cargo/lru@0.16.4/LICENSE +21 -0
  409. package/third-party/cargo/lyon_geom@1.0.19/Cargo.toml +69 -0
  410. package/third-party/cargo/lyon_geom@1.0.19/nical-lyon-56219c95c658-LICENSE-APACHE +13 -0
  411. package/third-party/cargo/lyon_geom@1.0.19/nical-lyon-56219c95c658-LICENSE-MIT +20 -0
  412. package/third-party/cargo/lyon_path@1.0.19/Cargo.toml +58 -0
  413. package/third-party/cargo/lyon_path@1.0.19/nical-lyon-56219c95c658-LICENSE-APACHE +13 -0
  414. package/third-party/cargo/lyon_path@1.0.19/nical-lyon-56219c95c658-LICENSE-MIT +20 -0
  415. package/third-party/cargo/lyon_tessellation@1.0.20/Cargo.toml +71 -0
  416. package/third-party/cargo/lyon_tessellation@1.0.20/nical-lyon-7fa75ea8eea3-LICENSE-APACHE +13 -0
  417. package/third-party/cargo/lyon_tessellation@1.0.20/nical-lyon-7fa75ea8eea3-LICENSE-MIT +20 -0
  418. package/third-party/cargo/memchr@2.8.3/COPYING +3 -0
  419. package/third-party/cargo/memchr@2.8.3/Cargo.toml +89 -0
  420. package/third-party/cargo/memchr@2.8.3/LICENSE-MIT +21 -0
  421. package/third-party/cargo/memchr@2.8.3/UNLICENSE +24 -0
  422. package/third-party/cargo/memmap2@0.9.11/Cargo.toml +59 -0
  423. package/third-party/cargo/memmap2@0.9.11/LICENSE-APACHE +201 -0
  424. package/third-party/cargo/memmap2@0.9.11/LICENSE-MIT +26 -0
  425. package/third-party/cargo/miniz_oxide@0.8.9/Cargo.toml +91 -0
  426. package/third-party/cargo/miniz_oxide@0.8.9/LICENSE +25 -0
  427. package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-APACHE.md +177 -0
  428. package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-MIT.md +24 -0
  429. package/third-party/cargo/miniz_oxide@0.8.9/LICENSE-ZLIB.md +14 -0
  430. package/third-party/cargo/moxcms@0.8.1/Cargo.toml +113 -0
  431. package/third-party/cargo/moxcms@0.8.1/LICENSE-APACHE.md +201 -0
  432. package/third-party/cargo/moxcms@0.8.1/LICENSE.md +26 -0
  433. package/third-party/cargo/naga-types@30.0.0/Cargo.toml +94 -0
  434. package/third-party/cargo/naga-types@30.0.0/LICENSE.APACHE +176 -0
  435. package/third-party/cargo/naga-types@30.0.0/LICENSE.MIT +21 -0
  436. package/third-party/cargo/naga@30.0.0/Cargo.toml +246 -0
  437. package/third-party/cargo/naga@30.0.0/LICENSE.APACHE +176 -0
  438. package/third-party/cargo/naga@30.0.0/LICENSE.MIT +21 -0
  439. package/third-party/cargo/num-traits@0.2.19/Cargo.toml +54 -0
  440. package/third-party/cargo/num-traits@0.2.19/LICENSE-APACHE +201 -0
  441. package/third-party/cargo/num-traits@0.2.19/LICENSE-MIT +25 -0
  442. package/third-party/cargo/objc2-core-foundation@0.3.2/Cargo.toml +221 -0
  443. package/third-party/cargo/objc2-core-foundation@0.3.2/MIT-terms.txt +22 -0
  444. package/third-party/cargo/objc2-core-foundation@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
  445. package/third-party/cargo/objc2-core-graphics@0.3.2/Cargo.toml +331 -0
  446. package/third-party/cargo/objc2-core-graphics@0.3.2/MIT-terms.txt +22 -0
  447. package/third-party/cargo/objc2-core-graphics@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
  448. package/third-party/cargo/objc2-encode@4.1.0/Cargo.toml +81 -0
  449. package/third-party/cargo/objc2-encode@4.1.0/MIT-terms.txt +22 -0
  450. package/third-party/cargo/objc2-encode@4.1.0/madsmtm-objc2-8d214f547736-LICENSE.md +34 -0
  451. package/third-party/cargo/objc2-foundation@0.3.2/Cargo.toml +529 -0
  452. package/third-party/cargo/objc2-foundation@0.3.2/MIT-terms.txt +22 -0
  453. package/third-party/cargo/objc2-foundation@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
  454. package/third-party/cargo/objc2-io-surface@0.3.2/Cargo.toml +139 -0
  455. package/third-party/cargo/objc2-io-surface@0.3.2/MIT-terms.txt +22 -0
  456. package/third-party/cargo/objc2-io-surface@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
  457. package/third-party/cargo/objc2-metal@0.3.2/Cargo.toml +601 -0
  458. package/third-party/cargo/objc2-metal@0.3.2/MIT-terms.txt +22 -0
  459. package/third-party/cargo/objc2-metal@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
  460. package/third-party/cargo/objc2-quartz-core@0.3.2/Cargo.toml +302 -0
  461. package/third-party/cargo/objc2-quartz-core@0.3.2/MIT-terms.txt +22 -0
  462. package/third-party/cargo/objc2-quartz-core@0.3.2/madsmtm-objc2-7b1abfd750a2-LICENSE.md +34 -0
  463. package/third-party/cargo/objc2@0.6.4/Cargo.toml +232 -0
  464. package/third-party/cargo/objc2@0.6.4/MIT-terms.txt +22 -0
  465. package/third-party/cargo/objc2@0.6.4/madsmtm-objc2-8852b424193c-LICENSE.md +34 -0
  466. package/third-party/cargo/once_cell@1.21.4/Cargo.toml +119 -0
  467. package/third-party/cargo/once_cell@1.21.4/LICENSE-APACHE +201 -0
  468. package/third-party/cargo/once_cell@1.21.4/LICENSE-MIT +23 -0
  469. package/third-party/cargo/ordered-float@5.3.0/Cargo.toml +162 -0
  470. package/third-party/cargo/ordered-float@5.3.0/LICENSE-MIT +25 -0
  471. package/third-party/cargo/parking_lot@0.12.5/Cargo.toml +87 -0
  472. package/third-party/cargo/parking_lot@0.12.5/LICENSE-APACHE +201 -0
  473. package/third-party/cargo/parking_lot@0.12.5/LICENSE-MIT +25 -0
  474. package/third-party/cargo/parking_lot_core@0.9.12/Cargo.toml +72 -0
  475. package/third-party/cargo/parking_lot_core@0.9.12/LICENSE-APACHE +201 -0
  476. package/third-party/cargo/parking_lot_core@0.9.12/LICENSE-MIT +25 -0
  477. package/third-party/cargo/pico-args@0.5.0/Cargo.toml +32 -0
  478. package/third-party/cargo/pico-args@0.5.0/LICENSE +20 -0
  479. package/third-party/cargo/pin-project-lite@0.2.17/Cargo.toml +198 -0
  480. package/third-party/cargo/pin-project-lite@0.2.17/LICENSE-APACHE +177 -0
  481. package/third-party/cargo/pin-project-lite@0.2.17/LICENSE-MIT +23 -0
  482. package/third-party/cargo/pkg-config@0.3.33/Cargo.toml +43 -0
  483. package/third-party/cargo/pkg-config@0.3.33/LICENSE-APACHE +201 -0
  484. package/third-party/cargo/pkg-config@0.3.33/LICENSE-MIT +25 -0
  485. package/third-party/cargo/png@0.18.1/Cargo.toml +130 -0
  486. package/third-party/cargo/png@0.18.1/LICENSE-APACHE +201 -0
  487. package/third-party/cargo/png@0.18.1/LICENSE-MIT +25 -0
  488. package/third-party/cargo/pollster@0.4.0/Cargo.toml +53 -0
  489. package/third-party/cargo/pollster@0.4.0/LICENSE-APACHE +201 -0
  490. package/third-party/cargo/pollster@0.4.0/LICENSE-MIT +25 -0
  491. package/third-party/cargo/polycool@0.4.0/Cargo.toml +83 -0
  492. package/third-party/cargo/polycool@0.4.0/LICENSE-APACHE +202 -0
  493. package/third-party/cargo/polycool@0.4.0/LICENSE-MIT +25 -0
  494. package/third-party/cargo/pp-rs@0.2.1/Cargo.toml +23 -0
  495. package/third-party/cargo/pp-rs@0.2.1/LICENSE +29 -0
  496. package/third-party/cargo/presser@0.3.1/Cargo.toml +58 -0
  497. package/third-party/cargo/presser@0.3.1/LICENSE-APACHE +201 -0
  498. package/third-party/cargo/presser@0.3.1/LICENSE-MIT +25 -0
  499. package/third-party/cargo/proc-macro2@1.0.106/Cargo.toml +105 -0
  500. package/third-party/cargo/proc-macro2@1.0.106/LICENSE-APACHE +176 -0
  501. package/third-party/cargo/proc-macro2@1.0.106/LICENSE-MIT +23 -0
  502. package/third-party/cargo/profiling@1.0.18/Cargo.toml +96 -0
  503. package/third-party/cargo/profiling@1.0.18/aclysma-profiling-8271551172eb-LICENSE-APACHE +201 -0
  504. package/third-party/cargo/profiling@1.0.18/aclysma-profiling-8271551172eb-LICENSE-MIT +21 -0
  505. package/third-party/cargo/pxfm@0.1.30/Cargo.toml +53 -0
  506. package/third-party/cargo/pxfm@0.1.30/LICENSE-APACHE.md +201 -0
  507. package/third-party/cargo/pxfm@0.1.30/LICENSE.md +26 -0
  508. package/third-party/cargo/quick-error@2.0.1/Cargo.toml +24 -0
  509. package/third-party/cargo/quick-error@2.0.1/LICENSE-APACHE +202 -0
  510. package/third-party/cargo/quick-error@2.0.1/LICENSE-MIT +19 -0
  511. package/third-party/cargo/quote@1.0.46/Cargo.toml +70 -0
  512. package/third-party/cargo/quote@1.0.46/LICENSE-APACHE +176 -0
  513. package/third-party/cargo/quote@1.0.46/LICENSE-MIT +23 -0
  514. package/third-party/cargo/rangemap@1.7.1/Cargo.toml +91 -0
  515. package/third-party/cargo/rangemap@1.7.1/LICENSE-APACHE +191 -0
  516. package/third-party/cargo/rangemap@1.7.1/LICENSE-MIT +7 -0
  517. package/third-party/cargo/raw-window-handle@0.6.2/Cargo.toml +56 -0
  518. package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-APACHE.md +177 -0
  519. package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-MIT.md +21 -0
  520. package/third-party/cargo/raw-window-handle@0.6.2/LICENSE-ZLIB.md +11 -0
  521. package/third-party/cargo/raw-window-metal@1.1.0/Cargo.toml +111 -0
  522. package/third-party/cargo/raw-window-metal@1.1.0/LICENSE-APACHE +202 -0
  523. package/third-party/cargo/raw-window-metal@1.1.0/LICENSE-MIT +17 -0
  524. package/third-party/cargo/read-fonts@0.37.0/Cargo.toml +95 -0
  525. package/third-party/cargo/read-fonts@0.37.0/LICENSE-APACHE +67 -0
  526. package/third-party/cargo/read-fonts@0.37.0/LICENSE-MIT +25 -0
  527. package/third-party/cargo/read-fonts@0.39.2/Cargo.toml +96 -0
  528. package/third-party/cargo/read-fonts@0.39.2/LICENSE-APACHE +67 -0
  529. package/third-party/cargo/read-fonts@0.39.2/LICENSE-MIT +25 -0
  530. package/third-party/cargo/renderdoc-sys@1.1.0/Cargo.toml +39 -0
  531. package/third-party/cargo/renderdoc-sys@1.1.0/LICENSE-APACHE +201 -0
  532. package/third-party/cargo/renderdoc-sys@1.1.0/LICENSE-MIT +25 -0
  533. package/third-party/cargo/resvg@0.47.0/Cargo.toml +112 -0
  534. package/third-party/cargo/resvg@0.47.0/LICENSE-APACHE +176 -0
  535. package/third-party/cargo/resvg@0.47.0/LICENSE-MIT +25 -0
  536. package/third-party/cargo/rgb@0.8.53/Cargo.toml +110 -0
  537. package/third-party/cargo/rgb@0.8.53/LICENSE +21 -0
  538. package/third-party/cargo/roxmltree@0.21.1/Cargo.toml +75 -0
  539. package/third-party/cargo/roxmltree@0.21.1/LICENSE-APACHE +201 -0
  540. package/third-party/cargo/roxmltree@0.21.1/LICENSE-MIT +21 -0
  541. package/third-party/cargo/rustc-hash@1.1.0/Cargo.toml +25 -0
  542. package/third-party/cargo/rustc-hash@1.1.0/LICENSE-APACHE +201 -0
  543. package/third-party/cargo/rustc-hash@1.1.0/LICENSE-MIT +23 -0
  544. package/third-party/cargo/rustc-hash@2.1.3/Cargo.toml +50 -0
  545. package/third-party/cargo/rustc-hash@2.1.3/LICENSE-APACHE +176 -0
  546. package/third-party/cargo/rustc-hash@2.1.3/LICENSE-MIT +23 -0
  547. package/third-party/cargo/rustix@1.1.4/COPYRIGHT +29 -0
  548. package/third-party/cargo/rustix@1.1.4/Cargo.toml +292 -0
  549. package/third-party/cargo/rustix@1.1.4/LICENSE-APACHE +201 -0
  550. package/third-party/cargo/rustix@1.1.4/LICENSE-Apache-2.0_WITH_LLVM-exception +220 -0
  551. package/third-party/cargo/rustix@1.1.4/LICENSE-MIT +23 -0
  552. package/third-party/cargo/rustversion@1.0.23/Cargo.toml +69 -0
  553. package/third-party/cargo/rustversion@1.0.23/LICENSE-APACHE +176 -0
  554. package/third-party/cargo/rustversion@1.0.23/LICENSE-MIT +23 -0
  555. package/third-party/cargo/rustybuzz@0.20.1/Cargo.toml +110 -0
  556. package/third-party/cargo/rustybuzz@0.20.1/LICENSE +22 -0
  557. package/third-party/cargo/scopeguard@1.2.0/Cargo.toml +43 -0
  558. package/third-party/cargo/scopeguard@1.2.0/LICENSE-APACHE +201 -0
  559. package/third-party/cargo/scopeguard@1.2.0/LICENSE-MIT +25 -0
  560. package/third-party/cargo/self_cell@1.2.2/Cargo.toml +33 -0
  561. package/third-party/cargo/self_cell@1.2.2/LICENSE-APACHE +201 -0
  562. package/third-party/cargo/self_cell@1.2.2/LICENSE-GPLv2 +339 -0
  563. package/third-party/cargo/self_cell@1.3.0/Cargo.toml +33 -0
  564. package/third-party/cargo/self_cell@1.3.0/LICENSE-APACHE +201 -0
  565. package/third-party/cargo/self_cell@1.3.0/LICENSE-GPLv2 +339 -0
  566. package/third-party/cargo/serde@1.0.228/Cargo.toml +84 -0
  567. package/third-party/cargo/serde@1.0.228/LICENSE-APACHE +176 -0
  568. package/third-party/cargo/serde@1.0.228/LICENSE-MIT +23 -0
  569. package/third-party/cargo/serde_core@1.0.228/Cargo.toml +87 -0
  570. package/third-party/cargo/serde_core@1.0.228/LICENSE-APACHE +176 -0
  571. package/third-party/cargo/serde_core@1.0.228/LICENSE-MIT +23 -0
  572. package/third-party/cargo/serde_derive@1.0.228/Cargo.toml +87 -0
  573. package/third-party/cargo/serde_derive@1.0.228/LICENSE-APACHE +176 -0
  574. package/third-party/cargo/serde_derive@1.0.228/LICENSE-MIT +23 -0
  575. package/third-party/cargo/serde_json@1.0.150/Cargo.toml +162 -0
  576. package/third-party/cargo/serde_json@1.0.150/LICENSE-APACHE +176 -0
  577. package/third-party/cargo/serde_json@1.0.150/LICENSE-MIT +23 -0
  578. package/third-party/cargo/simd-adler32@0.3.10/Cargo.toml +68 -0
  579. package/third-party/cargo/simd-adler32@0.3.10/LICENSE.md +21 -0
  580. package/third-party/cargo/simplecss@0.2.2/Cargo.toml +146 -0
  581. package/third-party/cargo/simplecss@0.2.2/LICENSE-APACHE +201 -0
  582. package/third-party/cargo/simplecss@0.2.2/LICENSE-MIT +21 -0
  583. package/third-party/cargo/siphasher@1.0.3/COPYING +7 -0
  584. package/third-party/cargo/siphasher@1.0.3/Cargo.toml +64 -0
  585. package/third-party/cargo/skrifa@0.40.0/Cargo.toml +86 -0
  586. package/third-party/cargo/skrifa@0.40.0/LICENSE-APACHE +67 -0
  587. package/third-party/cargo/skrifa@0.40.0/LICENSE-MIT +25 -0
  588. package/third-party/cargo/skrifa@0.42.1/Cargo.toml +86 -0
  589. package/third-party/cargo/skrifa@0.42.1/LICENSE-APACHE +67 -0
  590. package/third-party/cargo/skrifa@0.42.1/LICENSE-MIT +25 -0
  591. package/third-party/cargo/slab@0.4.12/Cargo.toml +67 -0
  592. package/third-party/cargo/slab@0.4.12/LICENSE +25 -0
  593. package/third-party/cargo/slotmap@1.1.1/Cargo.toml +83 -0
  594. package/third-party/cargo/slotmap@1.1.1/LICENSE +19 -0
  595. package/third-party/cargo/smallvec@1.15.2/Cargo.toml +103 -0
  596. package/third-party/cargo/smallvec@1.15.2/LICENSE-APACHE +201 -0
  597. package/third-party/cargo/smallvec@1.15.2/LICENSE-MIT +25 -0
  598. package/third-party/cargo/smol_str@0.3.6/Cargo.toml +155 -0
  599. package/third-party/cargo/smol_str@0.3.6/LICENSE-APACHE +201 -0
  600. package/third-party/cargo/smol_str@0.3.6/LICENSE-MIT +23 -0
  601. package/third-party/cargo/spirv@0.4.0+sdk-1.4.341.0/Cargo.toml +56 -0
  602. package/third-party/cargo/spirv@0.4.0+sdk-1.4.341.0/gfx-rs-rspirv-8afc3d0ac8e1-LICENSE +202 -0
  603. package/third-party/cargo/static_assertions@1.1.0/Cargo.toml +39 -0
  604. package/third-party/cargo/static_assertions@1.1.0/LICENSE-APACHE +202 -0
  605. package/third-party/cargo/static_assertions@1.1.0/LICENSE-MIT +21 -0
  606. package/third-party/cargo/strict-num@0.1.1/Cargo.toml +35 -0
  607. package/third-party/cargo/strict-num@0.1.1/LICENSE +19 -0
  608. package/third-party/cargo/svgtypes@0.16.1/Cargo.toml +57 -0
  609. package/third-party/cargo/svgtypes@0.16.1/LICENSE-APACHE +201 -0
  610. package/third-party/cargo/svgtypes@0.16.1/LICENSE-MIT +20 -0
  611. package/third-party/cargo/swash@0.2.9/Cargo.toml +93 -0
  612. package/third-party/cargo/swash@0.2.9/LICENSE-APACHE +201 -0
  613. package/third-party/cargo/swash@0.2.9/LICENSE-MIT +25 -0
  614. package/third-party/cargo/syn@2.0.118/Cargo.toml +272 -0
  615. package/third-party/cargo/syn@2.0.118/LICENSE-APACHE +176 -0
  616. package/third-party/cargo/syn@2.0.118/LICENSE-MIT +23 -0
  617. package/third-party/cargo/sys-locale@0.3.2/Cargo.toml +73 -0
  618. package/third-party/cargo/sys-locale@0.3.2/LICENSE-APACHE +201 -0
  619. package/third-party/cargo/sys-locale@0.3.2/LICENSE-MIT +21 -0
  620. package/third-party/cargo/taffy@0.12.1/Cargo.toml +171 -0
  621. package/third-party/cargo/taffy@0.12.1/DioxusLabs-taffy-1c9e37a0a1cf-LICENSE.md +25 -0
  622. package/third-party/cargo/tempfile@3.27.0/Cargo.toml +105 -0
  623. package/third-party/cargo/tempfile@3.27.0/LICENSE-APACHE +201 -0
  624. package/third-party/cargo/tempfile@3.27.0/LICENSE-MIT +25 -0
  625. package/third-party/cargo/termcolor@1.4.1/COPYING +3 -0
  626. package/third-party/cargo/termcolor@1.4.1/Cargo.toml +40 -0
  627. package/third-party/cargo/termcolor@1.4.1/LICENSE-MIT +21 -0
  628. package/third-party/cargo/termcolor@1.4.1/UNLICENSE +24 -0
  629. package/third-party/cargo/thiserror-impl@2.0.18/Cargo.toml +52 -0
  630. package/third-party/cargo/thiserror-impl@2.0.18/LICENSE-APACHE +176 -0
  631. package/third-party/cargo/thiserror-impl@2.0.18/LICENSE-MIT +23 -0
  632. package/third-party/cargo/thiserror@2.0.18/Cargo.toml +119 -0
  633. package/third-party/cargo/thiserror@2.0.18/LICENSE-APACHE +176 -0
  634. package/third-party/cargo/thiserror@2.0.18/LICENSE-MIT +23 -0
  635. package/third-party/cargo/tiny-skia-path@0.12.0/Cargo.toml +58 -0
  636. package/third-party/cargo/tiny-skia-path@0.12.0/LICENSE +30 -0
  637. package/third-party/cargo/tiny-skia@0.12.0/Cargo.toml +116 -0
  638. package/third-party/cargo/tiny-skia@0.12.0/LICENSE +30 -0
  639. package/third-party/cargo/tiny_http@0.12.0/Cargo.toml +82 -0
  640. package/third-party/cargo/tiny_http@0.12.0/LICENSE-APACHE +201 -0
  641. package/third-party/cargo/tiny_http@0.12.0/LICENSE-MIT +25 -0
  642. package/third-party/cargo/tinyvec@1.12.0/Cargo.toml +184 -0
  643. package/third-party/cargo/tinyvec@1.12.0/LICENSE-APACHE.md +202 -0
  644. package/third-party/cargo/tinyvec@1.12.0/LICENSE-MIT.md +5 -0
  645. package/third-party/cargo/tinyvec@1.12.0/LICENSE-ZLIB.md +11 -0
  646. package/third-party/cargo/tinyvec_macros@0.1.1/Cargo.toml +19 -0
  647. package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-APACHE.md +202 -0
  648. package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-MIT.md +21 -0
  649. package/third-party/cargo/tinyvec_macros@0.1.1/LICENSE-ZLIB.md +20 -0
  650. package/third-party/cargo/ttf-parser@0.25.1/Cargo.toml +101 -0
  651. package/third-party/cargo/ttf-parser@0.25.1/LICENSE-APACHE +201 -0
  652. package/third-party/cargo/ttf-parser@0.25.1/LICENSE-MIT +20 -0
  653. package/third-party/cargo/unicode-bidi-mirroring@0.4.0/Cargo.toml +22 -0
  654. package/third-party/cargo/unicode-bidi-mirroring@0.4.0/LICENSE-APACHE +201 -0
  655. package/third-party/cargo/unicode-bidi-mirroring@0.4.0/LICENSE-MIT +21 -0
  656. package/third-party/cargo/unicode-bidi@0.3.18/COPYRIGHT +8 -0
  657. package/third-party/cargo/unicode-bidi@0.3.18/Cargo.toml +90 -0
  658. package/third-party/cargo/unicode-bidi@0.3.18/LICENSE-APACHE +201 -0
  659. package/third-party/cargo/unicode-bidi@0.3.18/LICENSE-MIT +25 -0
  660. package/third-party/cargo/unicode-ccc@0.4.0/Cargo.toml +22 -0
  661. package/third-party/cargo/unicode-ccc@0.4.0/LICENSE-APACHE +201 -0
  662. package/third-party/cargo/unicode-ccc@0.4.0/LICENSE-MIT +21 -0
  663. package/third-party/cargo/unicode-ident@1.0.24/Cargo.toml +84 -0
  664. package/third-party/cargo/unicode-ident@1.0.24/LICENSE-APACHE +176 -0
  665. package/third-party/cargo/unicode-ident@1.0.24/LICENSE-MIT +23 -0
  666. package/third-party/cargo/unicode-ident@1.0.24/LICENSE-UNICODE +39 -0
  667. package/third-party/cargo/unicode-linebreak@0.1.5/Cargo.toml +32 -0
  668. package/third-party/cargo/unicode-linebreak@0.1.5/LICENSE +201 -0
  669. package/third-party/cargo/unicode-properties@0.1.4/COPYRIGHT +7 -0
  670. package/third-party/cargo/unicode-properties@0.1.4/Cargo.toml +65 -0
  671. package/third-party/cargo/unicode-properties@0.1.4/LICENSE-APACHE +201 -0
  672. package/third-party/cargo/unicode-properties@0.1.4/LICENSE-MIT +25 -0
  673. package/third-party/cargo/unicode-script@0.5.8/Cargo.toml +63 -0
  674. package/third-party/cargo/unicode-script@0.5.8/LICENSE-APACHE +201 -0
  675. package/third-party/cargo/unicode-script@0.5.8/LICENSE-MIT +27 -0
  676. package/third-party/cargo/unicode-segmentation@1.13.3/COPYRIGHT +7 -0
  677. package/third-party/cargo/unicode-segmentation@1.13.3/Cargo.toml +91 -0
  678. package/third-party/cargo/unicode-segmentation@1.13.3/LICENSE-APACHE +201 -0
  679. package/third-party/cargo/unicode-segmentation@1.13.3/LICENSE-MIT +25 -0
  680. package/third-party/cargo/unicode-vo@0.1.0/Cargo.toml +22 -0
  681. package/third-party/cargo/unicode-vo@0.1.0/LICENSE-APACHE +201 -0
  682. package/third-party/cargo/unicode-vo@0.1.0/LICENSE-MIT +21 -0
  683. package/third-party/cargo/unicode-width@0.2.2/COPYRIGHT +7 -0
  684. package/third-party/cargo/unicode-width@0.2.2/Cargo.toml +77 -0
  685. package/third-party/cargo/unicode-width@0.2.2/LICENSE-APACHE +201 -0
  686. package/third-party/cargo/unicode-width@0.2.2/LICENSE-MIT +25 -0
  687. package/third-party/cargo/unicode-xid@0.2.6/COPYRIGHT +7 -0
  688. package/third-party/cargo/unicode-xid@0.2.6/Cargo.toml +65 -0
  689. package/third-party/cargo/unicode-xid@0.2.6/LICENSE-APACHE +201 -0
  690. package/third-party/cargo/unicode-xid@0.2.6/LICENSE-MIT +25 -0
  691. package/third-party/cargo/urlencoding@2.1.3/Cargo.toml +41 -0
  692. package/third-party/cargo/urlencoding@2.1.3/LICENSE +20 -0
  693. package/third-party/cargo/usvg@0.47.0/Cargo.toml +138 -0
  694. package/third-party/cargo/usvg@0.47.0/LICENSE-APACHE +176 -0
  695. package/third-party/cargo/usvg@0.47.0/LICENSE-MIT +25 -0
  696. package/third-party/cargo/version_check@0.9.5/Cargo.toml +38 -0
  697. package/third-party/cargo/version_check@0.9.5/LICENSE-APACHE +201 -0
  698. package/third-party/cargo/version_check@0.9.5/LICENSE-MIT +19 -0
  699. package/third-party/cargo/wasm-bindgen-futures@0.4.76/Cargo.toml +88 -0
  700. package/third-party/cargo/wasm-bindgen-futures@0.4.76/LICENSE-APACHE +201 -0
  701. package/third-party/cargo/wasm-bindgen-futures@0.4.76/LICENSE-MIT +25 -0
  702. package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/Cargo.toml +83 -0
  703. package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/LICENSE-APACHE +201 -0
  704. package/third-party/cargo/wasm-bindgen-macro-support@0.2.126/LICENSE-MIT +25 -0
  705. package/third-party/cargo/wasm-bindgen-macro@0.2.126/Cargo.toml +73 -0
  706. package/third-party/cargo/wasm-bindgen-macro@0.2.126/LICENSE-APACHE +201 -0
  707. package/third-party/cargo/wasm-bindgen-macro@0.2.126/LICENSE-MIT +25 -0
  708. package/third-party/cargo/wasm-bindgen-shared@0.2.126/Cargo.toml +66 -0
  709. package/third-party/cargo/wasm-bindgen-shared@0.2.126/LICENSE-APACHE +201 -0
  710. package/third-party/cargo/wasm-bindgen-shared@0.2.126/LICENSE-MIT +25 -0
  711. package/third-party/cargo/wasm-bindgen@0.2.126/Cargo.toml +122 -0
  712. package/third-party/cargo/wasm-bindgen@0.2.126/LICENSE-APACHE +201 -0
  713. package/third-party/cargo/wasm-bindgen@0.2.126/LICENSE-MIT +25 -0
  714. package/third-party/cargo/wayland-sys@0.31.11/Cargo.toml +81 -0
  715. package/third-party/cargo/wayland-sys@0.31.11/LICENSE.txt +19 -0
  716. package/third-party/cargo/web-sys@0.3.103/Cargo.toml +2823 -0
  717. package/third-party/cargo/web-sys@0.3.103/LICENSE-APACHE +201 -0
  718. package/third-party/cargo/web-sys@0.3.103/LICENSE-MIT +25 -0
  719. package/third-party/cargo/weezl@0.1.12/Cargo.toml +120 -0
  720. package/third-party/cargo/weezl@0.1.12/LICENSE-APACHE +201 -0
  721. package/third-party/cargo/weezl@0.1.12/LICENSE-MIT +22 -0
  722. package/third-party/cargo/wgpu-core-deps-apple@30.0.0/Cargo.toml +53 -0
  723. package/third-party/cargo/wgpu-core-deps-apple@30.0.0/LICENSE.APACHE +176 -0
  724. package/third-party/cargo/wgpu-core-deps-apple@30.0.0/LICENSE.MIT +21 -0
  725. package/third-party/cargo/wgpu-core@30.0.0/Cargo.toml +237 -0
  726. package/third-party/cargo/wgpu-core@30.0.0/LICENSE.APACHE +176 -0
  727. package/third-party/cargo/wgpu-core@30.0.0/LICENSE.MIT +21 -0
  728. package/third-party/cargo/wgpu-hal@30.0.0/Cargo.toml +541 -0
  729. package/third-party/cargo/wgpu-hal@30.0.0/LICENSE.APACHE +176 -0
  730. package/third-party/cargo/wgpu-hal@30.0.0/LICENSE.MIT +21 -0
  731. package/third-party/cargo/wgpu-naga-bridge@30.0.0/Cargo.toml +46 -0
  732. package/third-party/cargo/wgpu-naga-bridge@30.0.0/LICENSE.APACHE +176 -0
  733. package/third-party/cargo/wgpu-naga-bridge@30.0.0/LICENSE.MIT +21 -0
  734. package/third-party/cargo/wgpu-types@30.0.0/Cargo.toml +161 -0
  735. package/third-party/cargo/wgpu-types@30.0.0/LICENSE.APACHE +176 -0
  736. package/third-party/cargo/wgpu-types@30.0.0/LICENSE.MIT +21 -0
  737. package/third-party/cargo/wgpu@30.0.0/Cargo.toml +278 -0
  738. package/third-party/cargo/wgpu@30.0.0/LICENSE.APACHE +176 -0
  739. package/third-party/cargo/wgpu@30.0.0/LICENSE.MIT +21 -0
  740. package/third-party/cargo/xmlwriter@0.1.0/Cargo.toml +23 -0
  741. package/third-party/cargo/xmlwriter@0.1.0/LICENSE +21 -0
  742. package/third-party/cargo/yazi@0.2.1/Cargo.toml +45 -0
  743. package/third-party/cargo/yazi@0.2.1/LICENSE-APACHE +201 -0
  744. package/third-party/cargo/yazi@0.2.1/LICENSE-MIT +19 -0
  745. package/third-party/cargo/zeno@0.3.3/Cargo.toml +65 -0
  746. package/third-party/cargo/zeno@0.3.3/LICENSE-APACHE +201 -0
  747. package/third-party/cargo/zeno@0.3.3/LICENSE-MIT +25 -0
  748. package/third-party/cargo/zerocopy-derive@0.8.54/Cargo.toml +209 -0
  749. package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-APACHE +202 -0
  750. package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-BSD +24 -0
  751. package/third-party/cargo/zerocopy-derive@0.8.54/LICENSE-MIT +26 -0
  752. package/third-party/cargo/zerocopy@0.8.54/Cargo.toml +419 -0
  753. package/third-party/cargo/zerocopy@0.8.54/LICENSE-APACHE +202 -0
  754. package/third-party/cargo/zerocopy@0.8.54/LICENSE-BSD +24 -0
  755. package/third-party/cargo/zerocopy@0.8.54/LICENSE-MIT +26 -0
  756. package/third-party/cargo/zmij@1.0.23/Cargo.toml +90 -0
  757. package/third-party/cargo/zmij@1.0.23/LICENSE-MIT +23 -0
  758. package/third-party/cargo/zune-core@0.5.1/Cargo.toml +47 -0
  759. package/third-party/cargo/zune-core@0.5.1/LICENSE-APACHE +201 -0
  760. package/third-party/cargo/zune-core@0.5.1/LICENSE-MIT +21 -0
  761. package/third-party/cargo/zune-core@0.5.1/LICENSE-ZLIB +19 -0
  762. package/third-party/cargo/zune-jpeg@0.5.15/Cargo.toml +67 -0
  763. package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-APACHE +201 -0
  764. package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-MIT +21 -0
  765. package/third-party/cargo/zune-jpeg@0.5.15/LICENSE-ZLIB +19 -0
  766. package/third-party/inventory.json +3614 -0
  767. package/third-party/npm/@esbuild__darwin-arm64@0.27.4/esbuild-0.27.4-LICENSE.md +21 -0
  768. package/third-party/npm/@esbuild__darwin-arm64@0.27.4/go-LICENSE +27 -0
  769. package/third-party/npm/@esbuild__darwin-arm64@0.27.4/golang-x-sys-c0bba94af5f8-LICENSE +27 -0
  770. package/third-party/npm/@esbuild__darwin-arm64@0.27.4/package.json +20 -0
  771. package/third-party/npm/@floating-ui__core@1.7.5/LICENSE +20 -0
  772. package/third-party/npm/@floating-ui__core@1.7.5/package.json +63 -0
  773. package/third-party/npm/@floating-ui__dom@1.7.6/LICENSE +20 -0
  774. package/third-party/npm/@floating-ui__dom@1.7.6/package.json +71 -0
  775. package/third-party/npm/@floating-ui__react-dom@2.1.8/LICENSE +20 -0
  776. package/third-party/npm/@floating-ui__react-dom@2.1.8/package.json +76 -0
  777. package/third-party/npm/@floating-ui__utils@0.2.11/LICENSE +20 -0
  778. package/third-party/npm/@floating-ui__utils@0.2.11/package.json +70 -0
  779. package/third-party/npm/@radix-ui__primitive@1.1.7/LICENSE +21 -0
  780. package/third-party/npm/@radix-ui__primitive@1.1.7/package.json +79 -0
  781. package/third-party/npm/@radix-ui__react-arrow@1.1.15/LICENSE +21 -0
  782. package/third-party/npm/@radix-ui__react-arrow@1.1.15/package.json +68 -0
  783. package/third-party/npm/@radix-ui__react-collection@1.1.15/LICENSE +21 -0
  784. package/third-party/npm/@radix-ui__react-collection@1.1.15/package.json +71 -0
  785. package/third-party/npm/@radix-ui__react-compose-refs@1.1.5/LICENSE +21 -0
  786. package/third-party/npm/@radix-ui__react-compose-refs@1.1.5/package.json +60 -0
  787. package/third-party/npm/@radix-ui__react-context-menu@2.3.7/LICENSE +21 -0
  788. package/third-party/npm/@radix-ui__react-context-menu@2.3.7/package.json +73 -0
  789. package/third-party/npm/@radix-ui__react-context@1.2.2/LICENSE +21 -0
  790. package/third-party/npm/@radix-ui__react-context@1.2.2/package.json +60 -0
  791. package/third-party/npm/@radix-ui__react-direction@1.1.4/LICENSE +21 -0
  792. package/third-party/npm/@radix-ui__react-direction@1.1.4/package.json +60 -0
  793. package/third-party/npm/@radix-ui__react-dismissable-layer@1.1.19/LICENSE +21 -0
  794. package/third-party/npm/@radix-ui__react-dismissable-layer@1.1.19/package.json +74 -0
  795. package/third-party/npm/@radix-ui__react-focus-guards@1.1.6/LICENSE +21 -0
  796. package/third-party/npm/@radix-ui__react-focus-guards@1.1.6/package.json +60 -0
  797. package/third-party/npm/@radix-ui__react-focus-scope@1.1.16/LICENSE +21 -0
  798. package/third-party/npm/@radix-ui__react-focus-scope@1.1.16/package.json +71 -0
  799. package/third-party/npm/@radix-ui__react-id@1.1.4/LICENSE +21 -0
  800. package/third-party/npm/@radix-ui__react-id@1.1.4/package.json +63 -0
  801. package/third-party/npm/@radix-ui__react-menu@2.1.24/LICENSE +21 -0
  802. package/third-party/npm/@radix-ui__react-menu@2.1.24/package.json +86 -0
  803. package/third-party/npm/@radix-ui__react-popper@1.3.7/LICENSE +21 -0
  804. package/third-party/npm/@radix-ui__react-popper@1.3.7/package.json +78 -0
  805. package/third-party/npm/@radix-ui__react-portal@1.1.17/LICENSE +21 -0
  806. package/third-party/npm/@radix-ui__react-portal@1.1.17/package.json +69 -0
  807. package/third-party/npm/@radix-ui__react-presence@1.1.10/LICENSE +21 -0
  808. package/third-party/npm/@radix-ui__react-presence@1.1.10/package.json +68 -0
  809. package/third-party/npm/@radix-ui__react-primitive@2.1.10/LICENSE +21 -0
  810. package/third-party/npm/@radix-ui__react-primitive@2.1.10/package.json +68 -0
  811. package/third-party/npm/@radix-ui__react-roving-focus@1.1.19/LICENSE +21 -0
  812. package/third-party/npm/@radix-ui__react-roving-focus@1.1.19/package.json +78 -0
  813. package/third-party/npm/@radix-ui__react-slot@1.3.3/LICENSE +21 -0
  814. package/third-party/npm/@radix-ui__react-slot@1.3.3/package.json +63 -0
  815. package/third-party/npm/@radix-ui__react-use-callback-ref@1.1.4/LICENSE +21 -0
  816. package/third-party/npm/@radix-ui__react-use-callback-ref@1.1.4/package.json +60 -0
  817. package/third-party/npm/@radix-ui__react-use-controllable-state@1.2.6/LICENSE +21 -0
  818. package/third-party/npm/@radix-ui__react-use-controllable-state@1.2.6/package.json +65 -0
  819. package/third-party/npm/@radix-ui__react-use-effect-event@0.0.5/LICENSE +21 -0
  820. package/third-party/npm/@radix-ui__react-use-effect-event@0.0.5/package.json +65 -0
  821. package/third-party/npm/@radix-ui__react-use-is-hydrated@0.1.3/LICENSE +21 -0
  822. package/third-party/npm/@radix-ui__react-use-is-hydrated@0.1.3/package.json +61 -0
  823. package/third-party/npm/@radix-ui__react-use-layout-effect@1.1.4/LICENSE +21 -0
  824. package/third-party/npm/@radix-ui__react-use-layout-effect@1.1.4/package.json +60 -0
  825. package/third-party/npm/@radix-ui__react-use-size@1.1.4/LICENSE +21 -0
  826. package/third-party/npm/@radix-ui__react-use-size@1.1.4/package.json +63 -0
  827. package/third-party/npm/aria-hidden@1.2.6/LICENSE +21 -0
  828. package/third-party/npm/aria-hidden@1.2.6/package.json +71 -0
  829. package/third-party/npm/detect-node-es@1.1.0/LICENSE +21 -0
  830. package/third-party/npm/detect-node-es@1.1.0/package.json +29 -0
  831. package/third-party/npm/esbuild@0.27.4/LICENSE.md +21 -0
  832. package/third-party/npm/esbuild@0.27.4/package.json +49 -0
  833. package/third-party/npm/fflate@0.8.3/LICENSE +21 -0
  834. package/third-party/npm/fflate@0.8.3/package.json +128 -0
  835. package/third-party/npm/get-nonce@1.0.1/LICENSE +21 -0
  836. package/third-party/npm/get-nonce@1.0.1/package.json +68 -0
  837. package/third-party/npm/mediabunny@1.52.2/LICENSE +373 -0
  838. package/third-party/npm/mediabunny@1.52.2/package.json +136 -0
  839. package/third-party/npm/mediabunny@1.52.2/source/LICENSE +373 -0
  840. package/third-party/npm/mediabunny@1.52.2/source/package.json +136 -0
  841. package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-demuxer.ts +400 -0
  842. package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-muxer.ts +124 -0
  843. package/third-party/npm/mediabunny@1.52.2/source/src/adts/adts-reader.ts +85 -0
  844. package/third-party/npm/mediabunny@1.52.2/source/src/aes.ts +307 -0
  845. package/third-party/npm/mediabunny@1.52.2/source/src/codec-data.ts +3178 -0
  846. package/third-party/npm/mediabunny@1.52.2/source/src/codec.ts +1154 -0
  847. package/third-party/npm/mediabunny@1.52.2/source/src/conversion.ts +2042 -0
  848. package/third-party/npm/mediabunny@1.52.2/source/src/custom-coder.ts +212 -0
  849. package/third-party/npm/mediabunny@1.52.2/source/src/decode.ts +263 -0
  850. package/third-party/npm/mediabunny@1.52.2/source/src/demuxer.ts +43 -0
  851. package/third-party/npm/mediabunny@1.52.2/source/src/encode.ts +1412 -0
  852. package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-demuxer.ts +813 -0
  853. package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-misc.ts +165 -0
  854. package/third-party/npm/mediabunny@1.52.2/source/src/flac/flac-muxer.ts +350 -0
  855. package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-demuxer.ts +995 -0
  856. package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-misc.ts +81 -0
  857. package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-muxer.ts +1529 -0
  858. package/third-party/npm/mediabunny@1.52.2/source/src/hls/hls-segmented-input.ts +772 -0
  859. package/third-party/npm/mediabunny@1.52.2/source/src/id3.ts +972 -0
  860. package/third-party/npm/mediabunny@1.52.2/source/src/index.ts +319 -0
  861. package/third-party/npm/mediabunny@1.52.2/source/src/input-format.ts +819 -0
  862. package/third-party/npm/mediabunny@1.52.2/source/src/input-track.ts +1141 -0
  863. package/third-party/npm/mediabunny@1.52.2/source/src/input.ts +571 -0
  864. package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-boxes.ts +1911 -0
  865. package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-demuxer.ts +3953 -0
  866. package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-misc.ts +90 -0
  867. package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-muxer.ts +1595 -0
  868. package/third-party/npm/mediabunny@1.52.2/source/src/isobmff/isobmff-reader.ts +91 -0
  869. package/third-party/npm/mediabunny@1.52.2/source/src/logging.ts +120 -0
  870. package/third-party/npm/mediabunny@1.52.2/source/src/matroska/ebml.ts +770 -0
  871. package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-demuxer.ts +2598 -0
  872. package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-misc.ts +29 -0
  873. package/third-party/npm/mediabunny@1.52.2/source/src/matroska/matroska-muxer.ts +1360 -0
  874. package/third-party/npm/mediabunny@1.52.2/source/src/media-sink.ts +2589 -0
  875. package/third-party/npm/mediabunny@1.52.2/source/src/media-source.ts +3041 -0
  876. package/third-party/npm/mediabunny@1.52.2/source/src/metadata.ts +335 -0
  877. package/third-party/npm/mediabunny@1.52.2/source/src/misc.ts +1336 -0
  878. package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-demuxer.ts +469 -0
  879. package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-muxer.ts +169 -0
  880. package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-reader.ts +61 -0
  881. package/third-party/npm/mediabunny@1.52.2/source/src/mp3/mp3-writer.ts +121 -0
  882. package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-demuxer.ts +2519 -0
  883. package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-misc.ts +32 -0
  884. package/third-party/npm/mediabunny@1.52.2/source/src/mpeg-ts/mpeg-ts-muxer.ts +842 -0
  885. package/third-party/npm/mediabunny@1.52.2/source/src/muxer.ts +80 -0
  886. package/third-party/npm/mediabunny@1.52.2/source/src/node.ts +11 -0
  887. package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-demuxer.ts +1087 -0
  888. package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-misc.ts +116 -0
  889. package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-muxer.ts +527 -0
  890. package/third-party/npm/mediabunny@1.52.2/source/src/ogg/ogg-reader.ts +93 -0
  891. package/third-party/npm/mediabunny@1.52.2/source/src/output-format.ts +1425 -0
  892. package/third-party/npm/mediabunny@1.52.2/source/src/output.ts +940 -0
  893. package/third-party/npm/mediabunny@1.52.2/source/src/packet.ts +287 -0
  894. package/third-party/npm/mediabunny@1.52.2/source/src/pcm.ts +112 -0
  895. package/third-party/npm/mediabunny@1.52.2/source/src/reader.ts +391 -0
  896. package/third-party/npm/mediabunny@1.52.2/source/src/resample.ts +287 -0
  897. package/third-party/npm/mediabunny@1.52.2/source/src/sample.ts +3231 -0
  898. package/third-party/npm/mediabunny@1.52.2/source/src/segmented-input.ts +575 -0
  899. package/third-party/npm/mediabunny@1.52.2/source/src/source.ts +2588 -0
  900. package/third-party/npm/mediabunny@1.52.2/source/src/subtitles.ts +131 -0
  901. package/third-party/npm/mediabunny@1.52.2/source/src/target.ts +871 -0
  902. package/third-party/npm/mediabunny@1.52.2/source/src/tsconfig.json +16 -0
  903. package/third-party/npm/mediabunny@1.52.2/source/src/wave/riff-writer.ts +36 -0
  904. package/third-party/npm/mediabunny@1.52.2/source/src/wave/wave-demuxer.ts +583 -0
  905. package/third-party/npm/mediabunny@1.52.2/source/src/wave/wave-muxer.ts +375 -0
  906. package/third-party/npm/mediabunny@1.52.2/source/src/writer.ts +128 -0
  907. package/third-party/npm/react-dom@19.3.0/LICENSE +21 -0
  908. package/third-party/npm/react-dom@19.3.0/package.json +117 -0
  909. package/third-party/npm/react-remove-scroll-bar@2.3.8/package.json +85 -0
  910. package/third-party/npm/react-remove-scroll-bar@2.3.8/react-remove-scroll-bar-LICENSE +21 -0
  911. package/third-party/npm/react-remove-scroll@2.7.2/LICENSE +21 -0
  912. package/third-party/npm/react-remove-scroll@2.7.2/package.json +98 -0
  913. package/third-party/npm/react-style-singleton@2.2.3/LICENSE +21 -0
  914. package/third-party/npm/react-style-singleton@2.2.3/package.json +90 -0
  915. package/third-party/npm/react@19.3.0/LICENSE +21 -0
  916. package/third-party/npm/react@19.3.0/package.json +51 -0
  917. package/third-party/npm/scheduler@0.28.0/LICENSE +21 -0
  918. package/third-party/npm/scheduler@0.28.0/package.json +27 -0
  919. package/third-party/npm/tslib@2.8.1/LICENSE.txt +12 -0
  920. package/third-party/npm/tslib@2.8.1/package.json +47 -0
  921. package/third-party/npm/typescript@5.9.3/LICENSE.txt +55 -0
  922. package/third-party/npm/typescript@5.9.3/ThirdPartyNoticeText.txt +193 -0
  923. package/third-party/npm/typescript@5.9.3/package.json +120 -0
  924. package/third-party/npm/use-callback-ref@1.3.3/LICENSE +21 -0
  925. package/third-party/npm/use-callback-ref@1.3.3/package.json +85 -0
  926. package/third-party/npm/use-sidecar@1.1.3/LICENSE +21 -0
  927. package/third-party/npm/use-sidecar@1.1.3/package.json +93 -0
  928. package/third-party/packages/render-engine/assets/OFL.txt +93 -0
  929. package/third-party/packages/studio/public/fonts/OFL.txt +93 -0
  930. package/third-party/packages/studio/vendor/osmo-icons/LICENSE +21 -0
  931. package/third-party/packages/studio/vendor/shadcn/LICENSE +21 -0
  932. package/third-party/repository-notices.md +41 -0
  933. package/third-party/rust-standard-library/COPYRIGHT-library.html +5556 -0
  934. package/third-party/rust-standard-library/licenses/Apache-2.0.txt +73 -0
  935. package/third-party/rust-standard-library/licenses/BSD-2-Clause.txt +9 -0
  936. package/third-party/rust-standard-library/licenses/CC-BY-SA-4.0.txt +427 -0
  937. package/third-party/rust-standard-library/licenses/GCC-exception-3.1.txt +30 -0
  938. package/third-party/rust-standard-library/licenses/GPL-2.0-only.txt +133 -0
  939. package/third-party/rust-standard-library/licenses/GPL-3.0-or-later.txt +202 -0
  940. package/third-party/rust-standard-library/licenses/ISC.txt +7 -0
  941. package/third-party/rust-standard-library/licenses/LLVM-exception.txt +15 -0
  942. package/third-party/rust-standard-library/licenses/MIT.txt +9 -0
  943. package/third-party/rust-standard-library/licenses/NCSA.txt +29 -0
  944. package/third-party/rust-standard-library/licenses/OFL-1.1.txt +43 -0
  945. package/third-party/rust-standard-library/licenses/Unicode-3.0.txt +39 -0
  946. package/third-party/rust-standard-library/version.txt +1 -0
  947. package/vendor/osmo-lite +0 -0
  948. package/vendor/osmo-scene-0.1.0.tgz +0 -0
  949. package/vendor/platform.json +1 -0
@@ -0,0 +1,919 @@
1
+ import { readMask, maskSourceIndex } from "./mask.mjs";
2
+ import { clipFields, clipTiming, isClipPrimitive } from "./clip.mjs";
3
+ import { readGroupLabel, readGroupPlayback, readSceneTracks, trackPlayback } from "./metadata.mjs";
4
+ import { isKnobRef, isKnobSet, resolveKnob, evaluateKnobs, type KnobScope, type KnobDescription } from "./knobs.js";
5
+ import { evaluateEffects, type EvaluatedEffect } from "./effects.js";
6
+ import {
7
+ Scene, Model, Surface,
8
+ Camera,
9
+ Group,
10
+ Rect, Path,
11
+ Text,
12
+ Image,
13
+ Video,
14
+ Audio,
15
+ Shader,
16
+ type UniformValue,
17
+ Fragment,
18
+ type Child,
19
+ type Color,
20
+ type Element,
21
+ type FrameContext,
22
+ type Vec2,
23
+ type TextPath,
24
+ type Vec3,
25
+ } from "./elements.js";
26
+ import { isMotion, sampleMotion } from "./motion.js";
27
+
28
+ export interface Transform {
29
+ position: Vec2;
30
+ z: number;
31
+ rotation: number;
32
+ scale: Vec2;
33
+ origin: Vec2;
34
+ opacity: number;
35
+ }
36
+ interface BaseNode {
37
+ track?: number;
38
+ effects?: EvaluatedEffect[];
39
+ transform: Transform;
40
+ key?: string | number;
41
+ }
42
+ export interface CompositionNode extends BaseNode {
43
+ type: "composition";
44
+ width: number;
45
+ height: number;
46
+ scene: EvaluatedScene;
47
+ }
48
+ export interface GroupNode extends BaseNode {
49
+ mask?: { index: number; mode: "alpha" | "vector" | "luminance"; invert: boolean };
50
+ controls?: KnobDescription;
51
+ depth?: number;
52
+ sideFill?: Color;
53
+ type: "group";
54
+ children: SceneNode[];
55
+ width?: number | "auto" | "fill";
56
+ height?: number | "auto" | "fill";
57
+ layout?: "free" | "row" | "column";
58
+ gap?: number;
59
+ padding?: readonly number[];
60
+ align?: string;
61
+ justify?: string;
62
+ fill?: Color;
63
+ stroke?: { color: Color; width: number };
64
+ rounding?: number;
65
+ shape?: "box" | "ellipse";
66
+ clip?: boolean;
67
+ /** True only for an authored `clip`: effects are bounded to the shape as well. */
68
+ clipEffects?: boolean;
69
+ }
70
+ export interface RectNode extends BaseNode {
71
+ type: "rect";
72
+ width: number;
73
+ height: number;
74
+ fill: Color;
75
+ radius: number;
76
+ }
77
+ export interface PathNode extends BaseNode {
78
+ width?: number;
79
+ height?: number;
80
+ viewBox?: readonly [number, number, number, number];
81
+ fit?: "contain" | "fill";
82
+ type: "path";
83
+ d: string;
84
+ fill: Color;
85
+ fillRule: "nonzero" | "evenodd";
86
+ stroke?: { color: Color; width: number; cap: "butt" | "round" | "square"; join: "miter" | "round" | "bevel"; miterLimit: number; trimStart: number; trimEnd: number };
87
+ }
88
+ export interface TextNode extends BaseNode {
89
+ height?: number;
90
+ verticalAlign?: "top" | "center" | "bottom";
91
+ alignBounds?: "lineBox" | "glyphs";
92
+ path?: TextPath;
93
+ type: "text";
94
+ text: string;
95
+ font: string;
96
+ fontSource?: string;
97
+ fontSize: number;
98
+ fontWeight?: number;
99
+ color: Color;
100
+ width?: number;
101
+ align: "left" | "center" | "right";
102
+ lineHeight: number;
103
+ letterSpacing: number;
104
+ }
105
+ export interface MediaNode extends BaseNode {
106
+ type: "image" | "video" | "audio";
107
+ src: string;
108
+ sourceFile?: string;
109
+ width?: number;
110
+ height?: number;
111
+ fit?: "cover" | "contain" | "fill";
112
+ rounding?: number;
113
+ start?: number;
114
+ duration?: number;
115
+ trimIn?: number;
116
+ playbackRate?: number;
117
+ volume?: number;
118
+ }
119
+ export interface ShaderNode extends BaseNode {
120
+ type: "shader";
121
+ src: string;
122
+ backdrop: boolean | "replace";
123
+ sourceFile?: string;
124
+ width: number;
125
+ height: number;
126
+ rounding: number;
127
+ uniforms: Record<string, UniformValue>;
128
+ }
129
+ export interface ModelNode extends BaseNode {
130
+ type: "model"; src: string; sourceFile?: string; height: number;
131
+ rotation3d: Vec3; animations: Record<string, number>; children: SurfaceNode[];
132
+ }
133
+ export interface SurfaceNode extends BaseNode {
134
+ type: "surface"; key?: string | number; nodes?: (string | number)[];
135
+ material?: string | number; primitive?: number; slot: "baseColor";
136
+ width?: number; height?: number; shading?: "lit" | "unlit";
137
+ color?: Color; metalness?: number; roughness?: number;
138
+ effects?: EvaluatedEffect[]; children: SceneNode[];
139
+ }
140
+ export type SceneNode = CompositionNode | GroupNode | RectNode | PathNode | TextNode | MediaNode | ShaderNode | ModelNode | SurfaceNode;
141
+ export interface EvaluatedCamera {
142
+ position: Vec2;
143
+ z: number;
144
+ target: Vec3;
145
+ fov: number;
146
+ }
147
+ export interface EvaluatedScene extends FrameContext {
148
+ effects?: EvaluatedEffect[];
149
+ camera?: EvaluatedCamera;
150
+ type: "scene";
151
+ totalFrames: number;
152
+ background: Color;
153
+ children: SceneNode[];
154
+ }
155
+
156
+ function number(value: unknown, label: string, minimum = -Infinity): number {
157
+ if (typeof value !== "number" || !Number.isFinite(value) || value < minimum) {
158
+ throw new Error(`${label}: expected a finite number >= ${minimum}`);
159
+ }
160
+ return value;
161
+ }
162
+ function positive(value: unknown, label: string): number {
163
+ const n = number(value, label, 0);
164
+ if (n === 0) throw new Error(`${label}: must be greater than zero`);
165
+ return n;
166
+ }
167
+ function pair(value: unknown, label: string): Vec2 {
168
+ if (!Array.isArray(value) || value.length !== 2)
169
+ throw new Error(`${label}: expected [x, y]`);
170
+ return [number(value[0], label), number(value[1], label)];
171
+ }
172
+ function color(value: unknown, label: string): Color {
173
+ if (
174
+ typeof value !== "string" ||
175
+ (value !== "transparent" && !/^#(?:[\da-f]{6}|[\da-f]{8})$/i.test(value))
176
+ ) {
177
+ throw new Error(`${label}: expected #RRGGBB, #RRGGBBAA or transparent`);
178
+ }
179
+ return value as Color;
180
+ }
181
+ function transform(props: Readonly<Record<string, unknown>>): Transform {
182
+ const scale = props.scale ?? 1;
183
+ const opacity = number(props.opacity ?? 1, "opacity", 0);
184
+ if (opacity > 1) throw new Error("opacity: must be <= 1");
185
+ return {
186
+ position: pair(props.position ?? [0, 0], "position"),
187
+ z: number(props.z ?? 0, "z"),
188
+ rotation: number(props.rotation ?? 0, "rotation"),
189
+ scale:
190
+ typeof scale === "number"
191
+ ? [number(scale, "scale"), scale]
192
+ : pair(scale, "scale"),
193
+ origin: pair(props.origin ?? [0, 0], "origin"),
194
+ opacity,
195
+ };
196
+ }
197
+ function resolve(value: unknown, time: number, scope: KnobScope = []): unknown {
198
+ if (isKnobRef(value)) return resolveKnob(value, scope);
199
+ if (isKnobSet(value)) return value;
200
+ if (isMotion(value)) return sampleMotion(value, time);
201
+ if (Array.isArray(value)) return value.map((v) => resolve(v, time, scope));
202
+ if (
203
+ value &&
204
+ typeof value === "object" &&
205
+ !isElement(value) &&
206
+ Object.getPrototypeOf(value) === Object.prototype
207
+ )
208
+ return Object.fromEntries(
209
+ Object.entries(value).map(([k, v]) => [k, resolve(v, time, scope)]),
210
+ );
211
+ return value;
212
+ }
213
+ function isElement(value: unknown): value is Element {
214
+ return (
215
+ typeof value === "object" &&
216
+ value !== null &&
217
+ "type" in value &&
218
+ "props" in value
219
+ );
220
+ }
221
+
222
+ /** Evaluate at an exact frame. Produces host-independent data; does not draw pixels. */
223
+ export function evaluateFrame(root: Element, frame: number): EvaluatedScene {
224
+ return evaluateScene(root, frame);
225
+ }
226
+ function evaluateScene(root: Element, frame: number, clock?: Partial<ClockContext>, depth = 0): EvaluatedScene {
227
+ if (depth > 32) throw new Error("Scene nesting exceeds 32 levels");
228
+ if (!isElement(root) || (root.type !== Scene && root.type !== "scene")) {
229
+ throw new Error(
230
+ "The root must be <Scene>; put custom components inside it",
231
+ );
232
+ }
233
+ const p = root.props;
234
+ checkProps(
235
+ p,
236
+ "Scene",
237
+ ["width", "height", "duration", "fps", "background", "children", "effects", "tracks"],
238
+ false,
239
+ );
240
+ const tracks = readSceneTracks(p.tracks);
241
+ const width = positive(p.width, "Scene.width");
242
+ const height = positive(p.height, "Scene.height");
243
+ if (![width,height].every(v=>Number.isInteger(v)&&v<=8192)) throw new Error("Scene dimensions must be whole pixels, at most 8192 per side");
244
+ const duration = positive(p.duration, "Scene.duration");
245
+ const fps = positive(p.fps ?? 30, "Scene.fps");
246
+ const totalFrames = Math.ceil(duration * fps);
247
+ if (!Number.isSafeInteger(totalFrames) || totalFrames < 1)
248
+ throw new Error("Scene frame count is out of range");
249
+ if (!clock && (!Number.isSafeInteger(frame) || frame < 0 || frame >= totalFrames)) {
250
+ throw new Error(`Frame must be an integer in [0, ${totalFrames - 1}]`);
251
+ }
252
+ const context: ClockContext = Object.freeze({
253
+ frame,
254
+ time: frame / fps,
255
+ fps,
256
+ width,
257
+ height,
258
+ duration,
259
+ ...clock,
260
+ });
261
+ let camera: EvaluatedCamera | undefined;
262
+ const children: unknown[] = [];
263
+ function collect(child: unknown, depth = 0): void {
264
+ if (depth > 256) throw new Error("Scene nesting exceeds 256 levels");
265
+ if (Array.isArray(child)) {
266
+ for (const item of child) collect(item, depth + 1);
267
+ } else if (
268
+ isElement(child) && (child.type === Camera || child.type === "camera")
269
+ ) {
270
+ if (camera) throw new Error("Scene accepts only one Camera");
271
+ camera = evaluateCamera(
272
+ resolve(child.props, context.time) as Record<string, unknown>, context,
273
+ );
274
+ } else {
275
+ children.push(child);
276
+ }
277
+ }
278
+ collect(p.children);
279
+ const evaluatedChildren = isolateGroups(visit(children, context, depth));
280
+ function checkPlacement(nodes: SceneNode[], parent: string) {
281
+ for (const n of nodes) {
282
+ if (n.track !== undefined && parent !== "scene") throw new Error(`${n.type}.track is only supported on root timeline clips`);
283
+ if (n.type === "model" && parent !== "scene") throw new Error("Model must be a direct child of Scene");
284
+ if (n.type === "surface" && parent !== "model") throw new Error("Surface must be a direct child of Model");
285
+ if ("children" in n) checkPlacement(n.children, n.type);
286
+ }
287
+ }
288
+ checkPlacement(evaluatedChildren, "scene");
289
+ // Keep topology and local clocks stable while applying lane playback controls.
290
+ for (const node of evaluatedChildren) {
291
+ const state = trackPlayback(tracks, node.track);
292
+ if (!state.visible) node.transform.opacity = 0;
293
+ if (!state.audible) silence(node);
294
+ }
295
+ return {
296
+ type: "scene",
297
+ ...(camera ? { camera } : {}),
298
+ ...context,
299
+ totalFrames,
300
+ background: color(p.background ?? "transparent", "Scene.background"),
301
+ ...(p.effects === undefined ? {} : { effects: evaluateEffects(p.effects, context.time, root.sourceFile) }),
302
+ children: evaluatedChildren,
303
+ };
304
+ }
305
+
306
+ function evaluateCamera(
307
+ props: Record<string, unknown>,
308
+ context: FrameContext,
309
+ ): EvaluatedCamera {
310
+ checkProps(props, "Camera", ["position", "z", "target", "fov"], false);
311
+ const position = pair(
312
+ props.position ?? [context.width / 2, context.height / 2], "Camera.position",
313
+ );
314
+ const z = number(props.z ?? 2000, "Camera.z");
315
+ const t = props.target ?? [context.width / 2, context.height / 2, 0];
316
+ if (!Array.isArray(t) || t.length !== 3)
317
+ throw new Error("Camera.target: expected [x, y, z]");
318
+ const target: Vec3 = [
319
+ number(t[0], "Camera.target"), number(t[1], "Camera.target"), number(t[2], "Camera.target"),
320
+ ];
321
+ if (Math.hypot(position[0] - target[0], position[1] - target[1], z - target[2]) < 0.0001) {
322
+ throw new Error("Camera.position and z must differ from target");
323
+ }
324
+ const fov = positive(
325
+ props.fov ?? 2 * Math.atan(context.height / 4000) * 180 / Math.PI, "Camera.fov",
326
+ );
327
+ if (fov >= 180) throw new Error("Camera.fov must be less than 180 degrees");
328
+ return { position, z, target, fov };
329
+ }
330
+
331
+ interface ClockContext extends FrameContext { offset?: number; windowStart?: number; windowEnd?: number; }
332
+
333
+ // Evaluation-only state: do not serialize editor controls into render snapshots.
334
+ const soloGroups = new WeakSet<SceneNode>();
335
+ function silence(node: SceneNode) {
336
+ if (node.type === 'audio' || node.type === 'video') node.volume = 0;
337
+ if ('children' in node) node.children.forEach(silence);
338
+ if (node.type === 'composition') node.scene.children.forEach(silence);
339
+ }
340
+ function isolateGroups(nodes: SceneNode[]): SceneNode[] {
341
+ if (nodes.some(node => soloGroups.has(node)))
342
+ for (const node of nodes) if (!soloGroups.has(node)) {
343
+ node.transform.opacity = 0;
344
+ silence(node);
345
+ }
346
+ return nodes;
347
+ }
348
+
349
+ // Flatten only structural fragments: indices continue to match the editor's
350
+ // evaluated children and selection paths, including the mask source itself.
351
+ function maskChildren(child: unknown): Element[] {
352
+ if (child == null || typeof child === "boolean") return [];
353
+ if (Array.isArray(child)) return child.flatMap(maskChildren);
354
+ if (!isElement(child)) throw new Error("Group children must be elements");
355
+ if (child.type === Fragment || child.type === "fragment") return maskChildren(child.props.children);
356
+ return [child];
357
+ }
358
+ function vectorMask(child: Element): Element {
359
+ const p = {...child.props, opacity: 1, effects: undefined};
360
+ const type = child.type;
361
+ if (type === Group || type === "group") {
362
+ const children = maskChildren(child.props.children);
363
+ Object.assign(p, {children:children.map(vectorMask), depth:0, sideFill:undefined,
364
+ fill:child.props.fill !== undefined || !children.length ? "#ffffff" : "transparent", stroke:undefined});
365
+ } else if (type === Path || type === "path" || type === Rect || type === "rect") {
366
+ Object.assign(p, {fill:"#ffffff", stroke:undefined});
367
+ } else if (type === Text || type === "text") Object.assign(p, {color:"#ffffff"});
368
+ else throw new Error("Vector masks require Group, Path, Rect, or Text outlines; use alpha or luminance for media, shaders, and scenes");
369
+ return {...child, props:p};
370
+ }
371
+
372
+ function visit(
373
+ child: unknown,
374
+ context: ClockContext,
375
+ depth: number,
376
+ scope: KnobScope = [],
377
+ ): SceneNode[] {
378
+ if (depth > 256)
379
+ throw new Error(
380
+ "Scene nesting exceeds 256 levels; check for recursive components",
381
+ );
382
+ if (child === null || child === undefined || typeof child === "boolean")
383
+ return [];
384
+ if (Array.isArray(child))
385
+ return child.flatMap((c) => visit(c, context, depth + 1, scope));
386
+ if (!isElement(child))
387
+ throw new Error(
388
+ "Scene children must be components; put text inside <Text>",
389
+ );
390
+ const builtins = new Map<unknown, string>([
391
+ [Group, "group"], [Model, "model"], [Surface, "surface"],
392
+ [Rect, "rect"], [Path, "path"],
393
+ [Text, "text"],
394
+ [Image, "image"],
395
+ [Video, "video"],
396
+ [Audio, "audio"],
397
+ [Shader, "shader"],
398
+ [Fragment, "fragment"],
399
+ [Scene, "scene"],
400
+ [Camera, "camera"],
401
+ ]);
402
+ const type = builtins.get(child.type) ?? child.type;
403
+ if (type === 'composition') {
404
+ const source = child.props.scene as Element;
405
+ const timing = clipTiming(child.props, context.duration, context.fps, 'Scene instance');
406
+ const localTime = Math.max(0,Math.min(timing.duration-1e-9,context.time-timing.start));
407
+ const p = Object.fromEntries(Object.entries(child.props).filter(([k])=>k!=='scene').map(([k,v])=>[k,k==='effects'?v:resolve(v,localTime,scope)]));
408
+ const trim = number(p.trimIn ?? 0, 'Scene instance.trimIn', 0);
409
+ const sourceDuration = positive(source.props.duration, 'Scene.duration');
410
+ if (trim >= sourceDuration) throw new Error('Scene instance.trimIn must be before the source end');
411
+ const offset = (context.offset ?? 0) + timing.start - trim;
412
+ const start = Math.max(context.windowStart ?? 0, offset + trim);
413
+ const end = Math.min(context.windowEnd ?? Infinity, offset + Math.min(sourceDuration, trim + timing.duration));
414
+ const time = Math.max(0, Math.min(sourceDuration - 1e-9, context.time - timing.start + trim));
415
+ // An instance can resize its viewport without scaling its contents or
416
+ // mutating the shared source. Layout and default camera framing resolve
417
+ // against these dimensions through the ordinary scene evaluator.
418
+ const dimension = (name: 'width' | 'height') => {
419
+ if (p[name] === undefined) return source.props[name];
420
+ const value = positive(p[name], `Scene instance.${name}`);
421
+ if (value < 1 || value > 8192) throw new Error('Scene instance dimensions must be 1..8192 pixels per side');
422
+ return Math.round(value);
423
+ };
424
+ const viewport = {...source,props:{...source.props,width:dimension('width'),height:dimension('height')}};
425
+ const scene = evaluateScene(viewport, 0, {time, frame:time*context.fps, fps:context.fps, offset, windowStart:start, windowEnd:end}, depth+1);
426
+ const active = context.time >= timing.start && context.time < timing.start + Math.min(timing.duration, sourceDuration-trim);
427
+ readGroupLabel(p.label); readGroupPlayback(p);
428
+ const node: CompositionNode = {type:'composition',width:scene.width,height:scene.height,scene,
429
+ ...(timing.track === undefined ? {} : {track:timing.track}),
430
+ transform:transform({...p,opacity:active && !p.hidden ? p.opacity : 0}),
431
+ ...(p.effects === undefined ? {} : {effects:evaluateEffects(p.effects,localTime,child.sourceFile)})};
432
+ if (p.solo) soloGroups.add(node);
433
+ return [node];
434
+ }
435
+ const parentContext = context;
436
+ const timing = typeof type === "string" && isClipPrimitive(type)
437
+ ? clipTiming(child.props, context.duration, context.fps, type) : null;
438
+ const localClock = timing && (child.props.start !== undefined || child.props.duration !== undefined || child.props.track !== undefined);
439
+ let active = true;
440
+ if (localClock) {
441
+ const { start, duration } = timing;
442
+ active = context.time >= start && context.time < start + duration;
443
+ const offset = (context.offset ?? 0) + start;
444
+ const time = Math.max(0, Math.min(duration - 1e-9, context.time - start));
445
+ context = { ...context, time, frame: Math.floor(time * context.fps), duration, offset,
446
+ windowStart: Math.max(context.windowStart ?? 0, offset),
447
+ windowEnd: Math.min(context.windowEnd ?? Infinity, offset + duration) };
448
+ }
449
+ let controls: KnobDescription | undefined;
450
+ if (type === "group") {
451
+ readGroupLabel(child.props.label);
452
+ readGroupPlayback(child.props);
453
+ if (child.props.knobs !== undefined) {
454
+ if (!isKnobSet(child.props.knobs)) throw new Error("Group.knobs must be a defineKnobs declaration");
455
+ controls = evaluateKnobs(child.props.knobs, child.props.values, context.time, scope);
456
+ scope = [...scope, { set: child.props.knobs, description: controls }];
457
+ } else if (child.props.values !== undefined) throw new Error("Group.values requires Group.knobs");
458
+ }
459
+ const props = Object.fromEntries(Object.entries(child.props).map(([name, value]) => [name,
460
+ (name === "children" && !isKnobRef(value)) || name === "effects" || (type === "group" && (name === "knobs" || name === "values"))
461
+ ? value : resolve(value, context.time, scope),
462
+ ]));
463
+ if (typeof type === "function") {
464
+ const result: Child = type(Object.freeze(props), context);
465
+ const nodes = visit(result, context, depth + 1, scope);
466
+ // A keyed custom component owns a fragment scope, preserving its identity
467
+ // independently of repeated child keys inside other component instances.
468
+ if (child.key !== undefined)
469
+ return [
470
+ {
471
+ type: "group",
472
+ key: child.key,
473
+ transform: transform({}),
474
+ children: nodes,
475
+ },
476
+ ];
477
+ return nodes;
478
+ }
479
+ if (type === "fragment") {
480
+ const children = visit(props.children, context, depth + 1, scope);
481
+ return child.key === undefined
482
+ ? children
483
+ : [{ type: "group", key: child.key, transform: transform({}), children }];
484
+ }
485
+ if (type === "scene") throw new Error("Scenes cannot be nested");
486
+ if (type === "camera") throw new Error("Camera must be a direct child of Scene");
487
+ if (type === "model") {
488
+ checkProps(props, "Model", ["src","position","z","height","rotation","scale","opacity","animations","children"], false);
489
+ if (typeof props.src !== "string" || !/\.glb$/i.test(props.src) || /^[a-z]+:/i.test(props.src)) throw new Error("Model.src: expected a local .glb path");
490
+ const rot=props.rotation ?? [0,0,0];
491
+ if (!Array.isArray(rot) || rot.length !== 3) throw new Error("Model.rotation: expected [x,y,z] degrees");
492
+ const animations=props.animations ?? {};
493
+ if (!animations || typeof animations !== "object" || Array.isArray(animations)) throw new Error("Model.animations: expected a map of clip names to progress");
494
+ const tracks: Record<string,number> = {};
495
+ for (const [name,v] of Object.entries(animations)) {
496
+ if (!name.trim()) throw new Error("Model.animations: empty clip name");
497
+ const progress=number(v,`Model.animations.${name}`,0);
498
+ if(progress>1)throw new Error("Animation progress must be between 0 and 1");
499
+ Object.defineProperty(tracks,name,{value:progress,enumerable:true});
500
+ }
501
+ const children=visit(props.children,context,depth+1,scope);
502
+ if(children.some(n=>n.type!=="surface"))throw new Error("Model accepts Surface children only");
503
+ return [{type:"model",src:props.src,...(child.sourceFile?{sourceFile:child.sourceFile}:{}),
504
+ ...(child.key===undefined?{}:{key:child.key}),
505
+ ...(timing?.track === undefined ? {} : {track: timing.track}),
506
+ transform:transform({...props,opacity:active ? props.opacity : 0,position:props.position??[context.width/2,context.height/2],rotation:0,scale:positive(props.scale??1,"Model.scale")}),
507
+ height:positive(props.height,"Model.height"),rotation3d:rot.map(v=>number(v,"Model.rotation")) as unknown as Vec3,
508
+ animations:tracks,children:children as SurfaceNode[]}];
509
+ }
510
+ if (type === "surface") {
511
+ checkProps(props,"Surface",["node","nodes","material","primitive","slot","width","height","shading","color","metalness","roughness","effects","children"],false);
512
+ const selector=(v:unknown):string|number=>{
513
+ if(typeof v==="string"&&v.trim())return v;
514
+ if(typeof v==="number"&&Number.isSafeInteger(v)&&v>=0)return v;
515
+ throw new Error("Surface selector must be a nonempty name or nonnegative index");
516
+ };
517
+ if(props.node!==undefined&&props.nodes!==undefined)throw new Error("Use Surface.node or Surface.nodes, not both");
518
+ const targets=props.nodes??(props.node===undefined?undefined:[props.node]);
519
+ if(targets!==undefined&&(!Array.isArray(targets)||!targets.length))throw new Error("Surface.nodes must be a nonempty list");
520
+ if(targets===undefined&&props.material===undefined)throw new Error("Surface needs a node or material selector");
521
+ const width=props.width===undefined?undefined:positive(props.width,"Surface.width");
522
+ const height=props.height===undefined?undefined:positive(props.height,"Surface.height");
523
+ const children=visit(props.children,width === undefined || height === undefined ? context : Object.freeze({...context,width,height}),depth+1,scope);
524
+ if((width===undefined)!==(height===undefined)||children.length&&width===undefined)throw new Error("Surface content requires width and height");
525
+ if(width!==undefined&&(width>4096||height!>4096))throw new Error("Surface canvas limit is 4096 per side");
526
+ const unit=(v:unknown,label:string)=>{const n=number(v,label,0);if(n>1)throw new Error(`${label}: must be <= 1`);return n;};
527
+ if(props.primitive!==undefined&&(!Number.isSafeInteger(props.primitive)||number(props.primitive,"Surface.primitive",0)<0))throw new Error("Surface.primitive must be an index");
528
+ return [{type:"surface",transform:transform({}),...(child.key===undefined?{}:{key:child.key}),
529
+ ...(targets===undefined?{}:{nodes:(targets as unknown[]).map(selector)}),
530
+ ...(props.material===undefined?{}:{material:selector(props.material)}),
531
+ ...(props.primitive===undefined?{}:{primitive:props.primitive as number}),
532
+ slot:choice(props.slot??"baseColor",["baseColor"],"Surface.slot"),
533
+ ...(width===undefined?{}:{width,height}),
534
+ ...(props.shading===undefined?{}:{shading:choice(props.shading,["lit","unlit"],"Surface.shading")}),
535
+ ...(props.color===undefined?{}:{color:color(props.color,"Surface.color")}),
536
+ ...(props.metalness===undefined?{}:{metalness:unit(props.metalness,"Surface.metalness")}),
537
+ ...(props.roughness===undefined?{}:{roughness:unit(props.roughness,"Surface.roughness")}),
538
+ ...(props.effects===undefined?{}:{effects:evaluateEffects(props.effects,context.time,child.sourceFile)}),children}];
539
+ }
540
+ const base: BaseNode = {
541
+ ...(props.effects === undefined ? {} : { effects: evaluateEffects(props.effects, context.time, child.sourceFile, v => isKnobRef(v) ? resolveKnob(v, scope) : v) }),
542
+ transform: transform(active ? props : {...props, opacity: 0}),
543
+ ...(timing?.track === undefined ? {} : {track: timing.track}),
544
+ ...(child.key === undefined ? {} : { key: child.key }),
545
+ };
546
+ if (type === "group") {
547
+ checkProps(props, "Group", [
548
+ "knobs", "values", "start", "duration", "track", "label", "hidden", "solo",
549
+ "depth",
550
+ "sideFill",
551
+ "children",
552
+ "width",
553
+ "height",
554
+ "layout",
555
+ "gap",
556
+ "padding",
557
+ "align",
558
+ "justify",
559
+ "fill",
560
+ "stroke",
561
+ "rounding",
562
+ "shape",
563
+ "clip", "mask",
564
+ ]);
565
+ const layout = choice(
566
+ props.layout ?? "free",
567
+ ["free", "row", "column"],
568
+ "Group.layout",
569
+ );
570
+ const size = (v: unknown, label: string) =>
571
+ v === undefined
572
+ ? undefined
573
+ : v === "fill" ? "fill" as const
574
+ : v === "auto"
575
+ ? layout === "free"
576
+ ? fail(`${label}: auto requires row/column layout`)
577
+ : ("auto" as const)
578
+ : number(v, label, 0);
579
+ const width = size(props.width, "Group.width"),
580
+ height = size(props.height, "Group.height");
581
+ const shape = choice(
582
+ props.shape ?? "box",
583
+ ["box", "ellipse"],
584
+ "Group.shape",
585
+ );
586
+ const padding = props.padding ?? 0;
587
+ const pads =
588
+ typeof padding === "number"
589
+ ? [padding, padding, padding, padding]
590
+ : padding;
591
+ if (!Array.isArray(pads) || pads.length !== 4)
592
+ throw new Error(
593
+ "Group.padding: expected a number or [top, right, bottom, left]",
594
+ );
595
+ const stroke = props.stroke;
596
+ if (
597
+ stroke !== undefined &&
598
+ (!stroke || typeof stroke !== "object" || Array.isArray(stroke))
599
+ )
600
+ throw new Error("Group.stroke: expected { color, width }");
601
+ const st = stroke as Record<string, unknown> | undefined;
602
+ if (st && Object.keys(st).some((k) => k !== "color" && k !== "width"))
603
+ throw new Error("Group.stroke: unsupported property");
604
+ if (props.clip !== undefined && typeof props.clip !== "boolean")
605
+ throw new Error("Group.clip: expected boolean");
606
+ const mask = readMask(props.mask);
607
+ const sources = mask ? maskChildren(props.children) : null;
608
+ const sourceIndex = mask ? maskSourceIndex(sources!, mask) : -1;
609
+ const children: SceneNode[] = [];
610
+ let maskIndex = -1;
611
+ if (sources) for (const [i, source] of sources.entries()) {
612
+ const isMask = i === sourceIndex;
613
+ const evaluated = visit(isMask && mask!.mode === "vector" ? vectorMask(source) : source, context, depth + 1, scope);
614
+ if (isMask) {
615
+ if (evaluated.length !== 1 || evaluated[0].type === "audio") throw new Error("Group.mask: source must be a visual layer");
616
+ maskIndex = children.length;
617
+ // A matte controls visibility only; video/audio descendants are silent.
618
+ silence(evaluated[0]);
619
+ }
620
+ children.push(...evaluated);
621
+ }
622
+ const node: GroupNode = {
623
+ type: "group",
624
+ ...base,
625
+ ...(controls ? { controls } : {}),
626
+ ...(width === undefined ? {} : { width }),
627
+ ...(height === undefined ? {} : { height }),
628
+ layout,
629
+ shape,
630
+ gap: number(props.gap ?? 0, "Group.gap", 0),
631
+ padding: pads.map((v) => number(v, "Group.padding", 0)),
632
+ align: choice(
633
+ props.align ?? "start",
634
+ ["start", "center", "end", "stretch"],
635
+ "Group.align",
636
+ ),
637
+ justify: choice(
638
+ props.justify ?? "start",
639
+ ["start", "center", "end", "spaceBetween", "spaceAround"],
640
+ "Group.justify",
641
+ ),
642
+ fill: color(props.fill ?? "transparent", "Group.fill"),
643
+ depth: number(props.depth ?? 0, "Group.depth", 0),
644
+ sideFill: color(props.sideFill ?? props.fill ?? "transparent", "Group.sideFill"),
645
+ ...(st
646
+ ? {
647
+ stroke: {
648
+ color: color(st.color, "Group.stroke.color"),
649
+ width: number(st.width, "Group.stroke.width", 0),
650
+ },
651
+ }
652
+ : {}),
653
+ rounding: number(props.rounding ?? 0, "Group.rounding", 0),
654
+ clip: props.clip !== false,
655
+ ...(props.clip === true ? { clipEffects: true } : {}),
656
+ children: isolateGroups(sources ? children : visit(props.children, context, depth + 1, scope)),
657
+ ...(mask ? {mask:{index:maskIndex,mode:mask.mode,invert:mask.invert}} : {}),
658
+ };
659
+ if (props.hidden) node.transform.opacity = 0;
660
+ if (props.solo) soloGroups.add(node);
661
+ return [node];
662
+ }
663
+ if (type === "shader") {
664
+ checkProps(props, "Shader", ["src", "backdrop", "width", "height", "rounding", "uniforms"]);
665
+ if (props.backdrop !== undefined && typeof props.backdrop !== "boolean" && props.backdrop !== "replace")
666
+ throw new Error('Shader.backdrop: expected a boolean or "replace"');
667
+ if (typeof props.src !== "string" || !props.src.trim() || /^[a-z]+:/i.test(props.src) || !/\.wgsl$/i.test(props.src))
668
+ throw new Error("Shader.src: expected a local .wgsl file path");
669
+ const inputs = props.uniforms ?? {};
670
+ if (!inputs || typeof inputs !== "object" || Array.isArray(inputs))
671
+ throw new Error("Shader.uniforms: expected named numbers or vectors");
672
+ if (Object.keys(inputs).length > 32) throw new Error("Shader.uniforms: maximum 32 fields");
673
+ const uniforms: Record<string, UniformValue> = {};
674
+ for (const [name, value] of Object.entries(inputs)) {
675
+ if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(name)) throw new Error(`Shader.uniforms: invalid name "${name}"`);
676
+ const values = Array.isArray(value) ? value : [value];
677
+ if (Array.isArray(value) && (value.length < 2 || value.length > 4))
678
+ throw new Error(`Shader.uniforms.${name}: expected a number or vector of 2–4 numbers`);
679
+ for (const v of values) {
680
+ number(v, `Shader.uniforms.${name}`);
681
+ if (!Number.isFinite(Math.fround(v))) throw new Error(`Shader.uniforms.${name}: exceeds f32 range`);
682
+ }
683
+ Object.defineProperty(uniforms, name, { value, enumerable: true });
684
+ }
685
+ return [{ type: "shader", ...base, src: props.src, backdrop: props.backdrop ?? false,
686
+ ...(child.sourceFile ? { sourceFile: child.sourceFile } : {}),
687
+ width: positive(props.width, "Shader.width"), height: positive(props.height, "Shader.height"),
688
+ rounding: number(props.rounding ?? 0, "Shader.rounding", 0), uniforms }];
689
+ }
690
+ if (type === "image" || type === "video" || type === "audio") {
691
+ const visual = type !== "audio",
692
+ timed = type !== "image";
693
+ checkProps(
694
+ props,
695
+ type,
696
+ [
697
+ "src",
698
+ ...(visual ? ["width", "height", "fit", "rounding"] : []),
699
+ ...(timed
700
+ ? ["start", "duration", "trimIn", "playbackRate", "volume"]
701
+ : []),
702
+ ],
703
+ visual,
704
+ );
705
+ if (
706
+ typeof props.src !== "string" ||
707
+ !props.src.trim() ||
708
+ /^[a-z]+:/i.test(props.src)
709
+ )
710
+ throw new Error(`${type}.src: expected a local file path`);
711
+ const node: MediaNode = {
712
+ type,
713
+ ...base,
714
+ src: props.src,
715
+ ...(child.sourceFile ? { sourceFile: child.sourceFile } : {}),
716
+ };
717
+ if (visual)
718
+ Object.assign(node, {
719
+ width: positive(props.width, `${type}.width`),
720
+ height: positive(props.height, `${type}.height`),
721
+ fit: choice(
722
+ props.fit ?? "cover",
723
+ ["cover", "contain", "fill"],
724
+ `${type}.fit`,
725
+ ),
726
+ rounding: number(props.rounding ?? 0, `${type}.rounding`, 0),
727
+ });
728
+ if (timed) {
729
+ const localStart = number(props.start ?? 0, `${type}.start`, 0);
730
+ const authoredStart = (parentContext.offset ?? 0) + localStart;
731
+ const start = Math.max(authoredStart, parentContext.windowStart ?? 0);
732
+ const authoredDuration = positive(props.duration ?? Math.max(parentContext.duration - localStart, 1 / context.fps), `${type}.duration`);
733
+ const end = Math.min(authoredStart + authoredDuration, parentContext.windowEnd ?? Infinity);
734
+ const volume = number(props.volume ?? 1, `${type}.volume`, 0);
735
+ if (volume > 1) throw new Error(`${type}.volume: must be <= 1`);
736
+ const rate = positive(props.playbackRate ?? 1, `${type}.playbackRate`);
737
+ if (rate < 0.25 || rate > 4)
738
+ throw new Error(`${type}.playbackRate: expected 0.25 through 4`);
739
+ Object.assign(node, {
740
+ start,
741
+ duration: Math.max(1 / context.fps, end - start),
742
+ trimIn: number(props.trimIn ?? 0, `${type}.trimIn`, 0) + (start - authoredStart) * rate,
743
+ playbackRate: rate,
744
+ volume: end > start ? volume : 0,
745
+ });
746
+ }
747
+ return [node];
748
+ }
749
+ if (type === "path") {
750
+ checkProps(props, "Path", ["width", "height", "viewBox", "fit", "d", "fill", "fillRule", "stroke"]);
751
+ if (typeof props.d !== "string" || !props.d.trim() || props.d.length > 65536)
752
+ throw new Error("Path.d: expected nonempty SVG path data, at most 64 KiB");
753
+ let stroke: PathNode["stroke"];
754
+ if (props.stroke !== undefined) {
755
+ const st = props.stroke as Record<string, unknown>;
756
+ if (!st || typeof st !== "object" || Array.isArray(st) || Object.keys(st).some(k => !["color", "width", "cap", "join", "miterLimit", "trimStart", "trimEnd"].includes(k)))
757
+ throw new Error("Path.stroke: expected color, width and optional cap/join/miterLimit/trimStart/trimEnd");
758
+ const width = number(st.width, "Path.stroke.width", 0), miterLimit = number(st.miterLimit ?? 4, "Path.stroke.miterLimit", 1);
759
+ if (width > 2048 || miterLimit > 100) throw new Error("Path.stroke: width must be <= 2048 and miterLimit <= 100");
760
+ const trimStart = number(st.trimStart ?? 0, "Path.stroke.trimStart", 0), trimEnd = number(st.trimEnd ?? 1, "Path.stroke.trimEnd", 0);
761
+ if (trimStart > 1 || trimEnd > 1) throw new Error("Path.stroke: trimStart and trimEnd are fractions from 0 to 1");
762
+ stroke = { color: color(st.color, "Path.stroke.color"), width, miterLimit, trimStart, trimEnd,
763
+ cap: choice(st.cap ?? "butt", ["butt", "round", "square"], "Path.stroke.cap"),
764
+ join: choice(st.join ?? "miter", ["miter", "round", "bevel"], "Path.stroke.join") };
765
+ }
766
+ const sizing: Pick<PathNode, "width" | "height" | "viewBox" | "fit"> = {};
767
+ for (const key of ["width", "height"] as const) if (props[key] !== undefined) sizing[key] = positive(props[key], `Path.${key}`);
768
+ if (props.viewBox !== undefined) {
769
+ const box = props.viewBox;
770
+ if (!Array.isArray(box) || box.length !== 4) throw new Error("Path.viewBox: expected [minX, minY, width, height]");
771
+ sizing.viewBox = [number(box[0], "Path.viewBox.x"), number(box[1], "Path.viewBox.y"), positive(box[2], "Path.viewBox.width"), positive(box[3], "Path.viewBox.height")];
772
+ }
773
+ if (props.fit !== undefined) {
774
+ sizing.fit = choice(props.fit, ["contain", "fill"], "Path.fit");
775
+ if (sizing.width === undefined && sizing.height === undefined && sizing.viewBox === undefined) throw new Error("Path.fit requires width, height or viewBox");
776
+ }
777
+ return [{ type: "path", ...base, ...sizing, d: props.d, fill: color(props.fill ?? "#ffffff", "Path.fill"),
778
+ fillRule: choice(props.fillRule ?? "nonzero", ["nonzero", "evenodd"], "Path.fillRule"), ...(stroke ? { stroke } : {}) }];
779
+ }
780
+ if (type === "rect") {
781
+ checkProps(props, "Rect", [
782
+ "width",
783
+ "height",
784
+ "fill",
785
+ "radius",
786
+ "children",
787
+ ]);
788
+ if (props.children !== undefined)
789
+ throw new Error("Rect does not accept children");
790
+ const width = number(props.width, "Rect.width", 0);
791
+ const height = number(props.height, "Rect.height", 0);
792
+ return [
793
+ {
794
+ type: "rect",
795
+ ...base,
796
+ width,
797
+ height,
798
+ fill: color(props.fill ?? "#ffffff", "Rect.fill"),
799
+ radius: Math.min(
800
+ number(props.radius ?? 0, "Rect.radius", 0),
801
+ width / 2,
802
+ height / 2,
803
+ ),
804
+ },
805
+ ];
806
+ }
807
+ if (type === "text") {
808
+ checkProps(props, "Text", ["height", "verticalAlign", "alignBounds",
809
+ "children",
810
+ "font",
811
+ "fontSize",
812
+ "fontWeight",
813
+ "color",
814
+ "width",
815
+ "align",
816
+ "lineHeight",
817
+ "letterSpacing",
818
+ "path",
819
+ ]);
820
+ let path: TextPath | undefined;
821
+ if (props.path !== undefined) {
822
+ if (!props.path || typeof props.path !== "object" || Array.isArray(props.path))
823
+ throw new Error("Text.path: expected a path object");
824
+ for (const key of ["width", "height", "verticalAlign", "alignBounds", "align", "lineHeight"])
825
+ if (props[key] !== undefined) throw new Error(`Text.${key} cannot be used with Text.path`);
826
+ const p = props.path as Record<string, unknown>;
827
+ const progress = number(p.progress ?? 0, "Text.path.progress");
828
+ if (p.shape === "ellipse") {
829
+ checkProps(p, "Text.path", ["shape", "radius", "progress"], false);
830
+ const radius = pair(p.radius, "Text.path.radius");
831
+ path = { shape: "ellipse", radius: [positive(radius[0], "Text.path.radius[0]"), positive(radius[1], "Text.path.radius[1]")], progress };
832
+ } else if (p.shape === "svg") {
833
+ checkProps(p, "Text.path", ["shape", "d", "progress"], false);
834
+ if (typeof p.d !== "string" || !p.d.trim() || p.d.length > 65536)
835
+ throw new Error("Text.path.d: expected nonempty SVG path data (up to 65536 characters)");
836
+ path = { shape: "svg", d: p.d, progress };
837
+ } else throw new Error('Text.path.shape: expected "ellipse" or "svg"');
838
+ if (/[\r\n\u2028\u2029]/u.test(String(props.children)))
839
+ throw new Error("Text.path requires single-line text");
840
+ }
841
+ if (
842
+ typeof props.children !== "string" &&
843
+ typeof props.children !== "number"
844
+ )
845
+ throw new Error("Text requires string or number children");
846
+ if (typeof props.children === "number")
847
+ number(props.children, "Text.children");
848
+ const font = props.font ?? "Inter";
849
+ if (typeof font !== "string" || font.length === 0)
850
+ throw new Error("Text.font must be a nonempty string");
851
+ if (props.verticalAlign !== undefined && props.height === undefined) throw new Error("Text.verticalAlign requires height");
852
+ const box = {
853
+ ...(props.height === undefined ? {} : {height: positive(props.height, "Text.height")}),
854
+ ...(props.verticalAlign === undefined ? {} : {verticalAlign: choice(props.verticalAlign, ["top", "center", "bottom"], "Text.verticalAlign")}),
855
+ ...(props.alignBounds === undefined ? {} : {alignBounds: choice(props.alignBounds, ["lineBox", "glyphs"], "Text.alignBounds")}),
856
+ };
857
+ const align = props.align ?? "left";
858
+ if (align !== "left" && align !== "center" && align !== "right")
859
+ throw new Error("Text.align must be left, center or right");
860
+ return [
861
+ {
862
+ type: "text",
863
+ ...base, ...box,
864
+ ...(path ? { path } : {}),
865
+ text: String(props.children),
866
+ font,
867
+ ...(child.sourceFile ? { fontSource: child.sourceFile } : {}),
868
+ ...(props.fontWeight === undefined
869
+ ? {}
870
+ : {
871
+ fontWeight: choice(
872
+ props.fontWeight,
873
+ [400, 500, 600, 700],
874
+ "Text.fontWeight",
875
+ ),
876
+ }),
877
+ fontSize: positive(props.fontSize ?? 48, "Text.fontSize"),
878
+ color: color(props.color ?? "#ffffff", "Text.color"),
879
+ ...(props.width === undefined
880
+ ? {}
881
+ : { width: positive(props.width, "Text.width") }),
882
+ align,
883
+ lineHeight: positive(props.lineHeight ?? 1.2, "Text.lineHeight"),
884
+ letterSpacing: number(props.letterSpacing ?? 0, "Text.letterSpacing"),
885
+ },
886
+ ];
887
+ }
888
+ throw new Error(`Unsupported primitive: ${String(child.type)}`);
889
+ }
890
+
891
+ function fail(message: string): never {
892
+ throw new Error(message);
893
+ }
894
+ function choice<const T extends string | number>(
895
+ value: unknown,
896
+ options: readonly T[],
897
+ label: string,
898
+ ): T {
899
+ if (!options.includes(value as T))
900
+ throw new Error(`${label}: expected ${options.join(", ")}`);
901
+ return value as T;
902
+ }
903
+ function checkProps(
904
+ props: Record<string, unknown>,
905
+ label: string,
906
+ allowed: string[],
907
+ visual = true,
908
+ ) {
909
+ const names = new Set([
910
+ "id",
911
+ ...(isClipPrimitive(label) ? clipFields : []),
912
+ ...allowed,
913
+ ...(visual ? ["position", "z", "rotation", "scale", "origin", "opacity", "effects"] : []),
914
+ ]);
915
+ if (props.id !== undefined && (typeof props.id !== "string" || !props.id.trim())) throw new Error(`${label}.id: expected a nonempty string`);
916
+ for (const name of Object.keys(props))
917
+ if (!names.has(name))
918
+ throw new Error(`${label}: unsupported prop "${name}"`);
919
+ }