@motion-script/core 0.2.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/assets/index.d.ts +2 -1
  2. package/dist/assets/index.d.ts.map +1 -1
  3. package/dist/assets/index.js.map +1 -1
  4. package/dist/assets/manager.d.ts +15 -0
  5. package/dist/assets/manager.d.ts.map +1 -1
  6. package/dist/assets/manager.js +61 -0
  7. package/dist/assets/manager.js.map +1 -1
  8. package/dist/assets/record.d.ts +22 -2
  9. package/dist/assets/record.d.ts.map +1 -1
  10. package/dist/assets/tracker.d.ts +10 -8
  11. package/dist/assets/tracker.d.ts.map +1 -1
  12. package/dist/assets/tracker.js +16 -8
  13. package/dist/assets/tracker.js.map +1 -1
  14. package/dist/attributes/index.d.ts +1 -1
  15. package/dist/attributes/index.d.ts.map +1 -1
  16. package/dist/attributes/index.js +1 -1
  17. package/dist/attributes/index.js.map +1 -1
  18. package/dist/attributes/shape/fill/blend.d.ts +3 -3
  19. package/dist/attributes/shape/fill/blend.d.ts.map +1 -1
  20. package/dist/attributes/shape/fill/blend.js +2 -2
  21. package/dist/attributes/shape/fill/blend.js.map +1 -1
  22. package/dist/attributes/shape/fill/index.d.ts +1 -1
  23. package/dist/attributes/shape/fill/index.d.ts.map +1 -1
  24. package/dist/attributes/shape/fill/index.js +1 -1
  25. package/dist/attributes/shape/fill/index.js.map +1 -1
  26. package/dist/attributes/shape/stroke/index.d.ts +2 -2
  27. package/dist/attributes/shape/stroke/index.d.ts.map +1 -1
  28. package/dist/attributes/shape/stroke/index.js +1 -1
  29. package/dist/attributes/shape/stroke/index.js.map +1 -1
  30. package/dist/attributes/shape/stroke/lerp.d.ts.map +1 -1
  31. package/dist/attributes/shape/stroke/lerp.js +1 -0
  32. package/dist/attributes/shape/stroke/lerp.js.map +1 -1
  33. package/dist/attributes/shape/stroke/mapper.d.ts +18 -0
  34. package/dist/attributes/shape/stroke/mapper.d.ts.map +1 -1
  35. package/dist/attributes/shape/stroke/mapper.js +14 -0
  36. package/dist/attributes/shape/stroke/mapper.js.map +1 -1
  37. package/dist/layout/flex.d.ts +12 -0
  38. package/dist/layout/flex.d.ts.map +1 -1
  39. package/dist/layout/flex.js +31 -18
  40. package/dist/layout/flex.js.map +1 -1
  41. package/dist/layout/grid.d.ts +1 -1
  42. package/dist/layout/grid.d.ts.map +1 -1
  43. package/dist/layout/grid.js +24 -6
  44. package/dist/layout/grid.js.map +1 -1
  45. package/dist/nodes/base/node.d.ts +28 -0
  46. package/dist/nodes/base/node.d.ts.map +1 -1
  47. package/dist/nodes/base/node.js +40 -1
  48. package/dist/nodes/base/node.js.map +1 -1
  49. package/dist/nodes/base/scene-node.d.ts +11 -0
  50. package/dist/nodes/base/scene-node.d.ts.map +1 -1
  51. package/dist/nodes/base/scene-node.js +31 -0
  52. package/dist/nodes/base/scene-node.js.map +1 -1
  53. package/dist/nodes/geometry/grid-node.d.ts.map +1 -1
  54. package/dist/nodes/geometry/grid-node.js +8 -4
  55. package/dist/nodes/geometry/grid-node.js.map +1 -1
  56. package/dist/nodes/geometry/rect-node.d.ts +2 -0
  57. package/dist/nodes/geometry/rect-node.d.ts.map +1 -1
  58. package/dist/nodes/geometry/rect-node.js +35 -15
  59. package/dist/nodes/geometry/rect-node.js.map +1 -1
  60. package/dist/nodes/geometry/shape-node.d.ts +2 -0
  61. package/dist/nodes/geometry/shape-node.d.ts.map +1 -1
  62. package/dist/nodes/geometry/shape-node.js +19 -7
  63. package/dist/nodes/geometry/shape-node.js.map +1 -1
  64. package/dist/platform/storage-adapter.d.ts.map +1 -1
  65. package/dist/platform/storage-adapter.js +4 -0
  66. package/dist/platform/storage-adapter.js.map +1 -1
  67. package/dist/runtime/playback-controller.d.ts +2 -0
  68. package/dist/runtime/playback-controller.d.ts.map +1 -1
  69. package/dist/runtime/playback-controller.js +17 -0
  70. package/dist/runtime/playback-controller.js.map +1 -1
  71. package/dist/runtime/precompisition.js +10 -0
  72. package/dist/runtime/precompisition.js.map +1 -1
  73. package/package.json +6 -5
  74. package/dist/assets/manager.test.d.ts +0 -2
  75. package/dist/assets/manager.test.d.ts.map +0 -1
  76. package/dist/assets/manager.test.js +0 -133
  77. package/dist/assets/manager.test.js.map +0 -1
  78. package/dist/attributes/layout/padding.test.d.ts +0 -2
  79. package/dist/attributes/layout/padding.test.d.ts.map +0 -1
  80. package/dist/attributes/layout/padding.test.js +0 -32
  81. package/dist/attributes/layout/padding.test.js.map +0 -1
  82. package/dist/attributes/layout/vector2.test.d.ts +0 -2
  83. package/dist/attributes/layout/vector2.test.d.ts.map +0 -1
  84. package/dist/attributes/layout/vector2.test.js +0 -23
  85. package/dist/attributes/layout/vector2.test.js.map +0 -1
  86. package/dist/attributes/properties/decorator.test.d.ts +0 -2
  87. package/dist/attributes/properties/decorator.test.d.ts.map +0 -1
  88. package/dist/attributes/properties/decorator.test.js +0 -52
  89. package/dist/attributes/properties/decorator.test.js.map +0 -1
  90. package/dist/attributes/shape/corners/border-radius.test.d.ts +0 -2
  91. package/dist/attributes/shape/corners/border-radius.test.d.ts.map +0 -1
  92. package/dist/attributes/shape/corners/border-radius.test.js +0 -52
  93. package/dist/attributes/shape/corners/border-radius.test.js.map +0 -1
  94. package/dist/attributes/shape/effects/chain.test.d.ts +0 -2
  95. package/dist/attributes/shape/effects/chain.test.d.ts.map +0 -1
  96. package/dist/attributes/shape/effects/chain.test.js +0 -63
  97. package/dist/attributes/shape/effects/chain.test.js.map +0 -1
  98. package/dist/attributes/shape/fill/blend.test.d.ts +0 -2
  99. package/dist/attributes/shape/fill/blend.test.d.ts.map +0 -1
  100. package/dist/attributes/shape/fill/blend.test.js +0 -18
  101. package/dist/attributes/shape/fill/blend.test.js.map +0 -1
  102. package/dist/attributes/shape/fill/chain.test.d.ts +0 -2
  103. package/dist/attributes/shape/fill/chain.test.d.ts.map +0 -1
  104. package/dist/attributes/shape/fill/chain.test.js +0 -92
  105. package/dist/attributes/shape/fill/chain.test.js.map +0 -1
  106. package/dist/attributes/shape/fill/color/parser.test.d.ts +0 -2
  107. package/dist/attributes/shape/fill/color/parser.test.d.ts.map +0 -1
  108. package/dist/attributes/shape/fill/color/parser.test.js +0 -99
  109. package/dist/attributes/shape/fill/color/parser.test.js.map +0 -1
  110. package/dist/attributes/shape/fill/lerp.test.d.ts +0 -2
  111. package/dist/attributes/shape/fill/lerp.test.d.ts.map +0 -1
  112. package/dist/attributes/shape/fill/lerp.test.js +0 -18
  113. package/dist/attributes/shape/fill/lerp.test.js.map +0 -1
  114. package/dist/attributes/shape/filters/chain.test.d.ts +0 -2
  115. package/dist/attributes/shape/filters/chain.test.d.ts.map +0 -1
  116. package/dist/attributes/shape/filters/chain.test.js +0 -49
  117. package/dist/attributes/shape/filters/chain.test.js.map +0 -1
  118. package/dist/attributes/shape/filters/registry.test.d.ts +0 -5
  119. package/dist/attributes/shape/filters/registry.test.d.ts.map +0 -1
  120. package/dist/attributes/shape/filters/registry.test.js +0 -75
  121. package/dist/attributes/shape/filters/registry.test.js.map +0 -1
  122. package/dist/attributes/shape/path/bezier.test.d.ts +0 -2
  123. package/dist/attributes/shape/path/bezier.test.d.ts.map +0 -1
  124. package/dist/attributes/shape/path/bezier.test.js +0 -85
  125. package/dist/attributes/shape/path/bezier.test.js.map +0 -1
  126. package/dist/attributes/shape/path/dash.test.d.ts +0 -2
  127. package/dist/attributes/shape/path/dash.test.d.ts.map +0 -1
  128. package/dist/attributes/shape/path/dash.test.js +0 -36
  129. package/dist/attributes/shape/path/dash.test.js.map +0 -1
  130. package/dist/attributes/shape/path/length.test.d.ts +0 -2
  131. package/dist/attributes/shape/path/length.test.d.ts.map +0 -1
  132. package/dist/attributes/shape/path/length.test.js +0 -56
  133. package/dist/attributes/shape/path/length.test.js.map +0 -1
  134. package/dist/attributes/shape/path/subpath.test.d.ts +0 -2
  135. package/dist/attributes/shape/path/subpath.test.d.ts.map +0 -1
  136. package/dist/attributes/shape/path/subpath.test.js +0 -54
  137. package/dist/attributes/shape/path/subpath.test.js.map +0 -1
  138. package/dist/attributes/text/lerp.test.d.ts +0 -2
  139. package/dist/attributes/text/lerp.test.d.ts.map +0 -1
  140. package/dist/attributes/text/lerp.test.js +0 -39
  141. package/dist/attributes/text/lerp.test.js.map +0 -1
  142. package/dist/layout/flex.test.d.ts +0 -2
  143. package/dist/layout/flex.test.d.ts.map +0 -1
  144. package/dist/layout/flex.test.js +0 -336
  145. package/dist/layout/flex.test.js.map +0 -1
  146. package/dist/layout/padding.test.d.ts +0 -2
  147. package/dist/layout/padding.test.d.ts.map +0 -1
  148. package/dist/layout/padding.test.js +0 -39
  149. package/dist/layout/padding.test.js.map +0 -1
  150. package/dist/layout/size-resolver.test.d.ts +0 -2
  151. package/dist/layout/size-resolver.test.d.ts.map +0 -1
  152. package/dist/layout/size-resolver.test.js +0 -24
  153. package/dist/layout/size-resolver.test.js.map +0 -1
  154. package/dist/layout/tweens.test.d.ts +0 -2
  155. package/dist/layout/tweens.test.d.ts.map +0 -1
  156. package/dist/layout/tweens.test.js +0 -26
  157. package/dist/layout/tweens.test.js.map +0 -1
  158. package/dist/project/config.test.d.ts +0 -2
  159. package/dist/project/config.test.d.ts.map +0 -1
  160. package/dist/project/config.test.js +0 -28
  161. package/dist/project/config.test.js.map +0 -1
  162. package/dist/render/descriptors/path.test.d.ts +0 -2
  163. package/dist/render/descriptors/path.test.d.ts.map +0 -1
  164. package/dist/render/descriptors/path.test.js +0 -40
  165. package/dist/render/descriptors/path.test.js.map +0 -1
  166. package/dist/runtime/playback-controller.test.d.ts +0 -2
  167. package/dist/runtime/playback-controller.test.d.ts.map +0 -1
  168. package/dist/runtime/playback-controller.test.js +0 -148
  169. package/dist/runtime/playback-controller.test.js.map +0 -1
  170. package/dist/runtime/precompisition.test.d.ts +0 -2
  171. package/dist/runtime/precompisition.test.d.ts.map +0 -1
  172. package/dist/runtime/precompisition.test.js +0 -138
  173. package/dist/runtime/precompisition.test.js.map +0 -1
  174. package/dist/runtime/runtime.fixtures.d.ts +0 -158
  175. package/dist/runtime/runtime.fixtures.d.ts.map +0 -1
  176. package/dist/runtime/runtime.fixtures.js +0 -264
  177. package/dist/runtime/runtime.fixtures.js.map +0 -1
  178. package/dist/runtime/state-evaluator.test.d.ts +0 -2
  179. package/dist/runtime/state-evaluator.test.d.ts.map +0 -1
  180. package/dist/runtime/state-evaluator.test.js +0 -122
  181. package/dist/runtime/state-evaluator.test.js.map +0 -1
  182. package/dist/signals/create.test.d.ts +0 -2
  183. package/dist/signals/create.test.d.ts.map +0 -1
  184. package/dist/signals/create.test.js +0 -81
  185. package/dist/signals/create.test.js.map +0 -1
  186. package/dist/signals/signal-cell.test.d.ts +0 -2
  187. package/dist/signals/signal-cell.test.d.ts.map +0 -1
  188. package/dist/signals/signal-cell.test.js +0 -202
  189. package/dist/signals/signal-cell.test.js.map +0 -1
  190. package/dist/signals/signal.test.d.ts +0 -2
  191. package/dist/signals/signal.test.d.ts.map +0 -1
  192. package/dist/signals/signal.test.js +0 -192
  193. package/dist/signals/signal.test.js.map +0 -1
  194. package/dist/tween/eases.test.d.ts +0 -2
  195. package/dist/tween/eases.test.d.ts.map +0 -1
  196. package/dist/tween/eases.test.js +0 -91
  197. package/dist/tween/eases.test.js.map +0 -1
  198. package/dist/tween/lerp.test.d.ts +0 -2
  199. package/dist/tween/lerp.test.d.ts.map +0 -1
  200. package/dist/tween/lerp.test.js +0 -22
  201. package/dist/tween/lerp.test.js.map +0 -1
  202. package/dist/tween/prepare.test.d.ts +0 -2
  203. package/dist/tween/prepare.test.d.ts.map +0 -1
  204. package/dist/tween/prepare.test.js +0 -44
  205. package/dist/tween/prepare.test.js.map +0 -1
  206. package/dist/tween/sequence.test.d.ts +0 -2
  207. package/dist/tween/sequence.test.d.ts.map +0 -1
  208. package/dist/tween/sequence.test.js +0 -68
  209. package/dist/tween/sequence.test.js.map +0 -1
  210. package/dist/tween/tests/batched-parallel.test.d.ts +0 -2
  211. package/dist/tween/tests/batched-parallel.test.d.ts.map +0 -1
  212. package/dist/tween/tests/batched-parallel.test.js +0 -76
  213. package/dist/tween/tests/batched-parallel.test.js.map +0 -1
  214. package/dist/tween/tests/parallel.test.d.ts +0 -2
  215. package/dist/tween/tests/parallel.test.d.ts.map +0 -1
  216. package/dist/tween/tests/parallel.test.js +0 -129
  217. package/dist/tween/tests/parallel.test.js.map +0 -1
  218. package/dist/tween/tests/realtime.test.d.ts +0 -2
  219. package/dist/tween/tests/realtime.test.d.ts.map +0 -1
  220. package/dist/tween/tests/realtime.test.js +0 -76
  221. package/dist/tween/tests/realtime.test.js.map +0 -1
  222. package/dist/tween/tween.test.d.ts +0 -2
  223. package/dist/tween/tween.test.d.ts.map +0 -1
  224. package/dist/tween/tween.test.js +0 -38
  225. package/dist/tween/tween.test.js.map +0 -1
  226. package/dist/tween/wait.test.d.ts +0 -2
  227. package/dist/tween/wait.test.d.ts.map +0 -1
  228. package/dist/tween/wait.test.js +0 -35
  229. package/dist/tween/wait.test.js.map +0 -1
  230. package/dist/util/clamp.test.d.ts +0 -2
  231. package/dist/util/clamp.test.d.ts.map +0 -1
  232. package/dist/util/clamp.test.js +0 -31
  233. package/dist/util/clamp.test.js.map +0 -1
  234. package/dist/util/random.test.d.ts +0 -2
  235. package/dist/util/random.test.d.ts.map +0 -1
  236. package/dist/util/random.test.js +0 -42
  237. package/dist/util/random.test.js.map +0 -1
  238. package/dist/util/reference.test.d.ts +0 -2
  239. package/dist/util/reference.test.d.ts.map +0 -1
  240. package/dist/util/reference.test.js +0 -32
  241. package/dist/util/reference.test.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  export { AssetCatalog } from "./catalog";
2
2
  export type { ImageMeta, VideoMeta, AudioMeta, FontMeta, AssetMeta, AssetManifest } from "./manifest";
3
- export { AssetTracker, type LoaderFunction } from "./tracker";
3
+ export { AssetTracker } from "./tracker";
4
+ export type { LoaderFn, Disposer } from "./record";
4
5
  export { AssetManager } from "./manager";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAuB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -12,6 +12,10 @@ export declare class AssetManager {
12
12
  private lastAudioRequestKey;
13
13
  private lastAudioSrcs;
14
14
  private audioFetching;
15
+ /** Disposers for loaders whose load has resolved, keyed by loader key. */
16
+ private loaderDisposers;
17
+ /** In-flight loader runs, keyed by loader key, to dedupe concurrent calls. */
18
+ private loaderInFlight;
15
19
  constructor(precomp: PrecompResult, storageAdapter: StorageAdapter, audioDevice: AudioDevice);
16
20
  /**
17
21
  * Blocking load for seek and initial render. Waits for every asset whose
@@ -23,6 +27,17 @@ export declare class AssetManager {
23
27
  * loads for assets whose cacheAt window has been reached without blocking.
24
28
  */
25
29
  prefetch(frame: number): void;
30
+ /**
31
+ * Drive a single loader track toward the state `frame` requires. If `frame`
32
+ * is inside the loader's `[cacheAt, discardAt]` window, run its callback
33
+ * (deduped — at most one in-flight run, skipped once loaded) and return the
34
+ * pending job, if any. If `frame` is outside the window and the loader was
35
+ * loaded, dispose it. Returns the in-flight load promise so a blocking
36
+ * caller can await it; `undefined` when there's nothing to wait for.
37
+ */
38
+ private syncLoader;
39
+ /** Run every outstanding loader disposer and clear loader state. */
40
+ dispose(): void;
26
41
  /**
27
42
  * Push the current audio working set to the AudioDevice. Called after each
28
43
  * render tick so the device stays in sync with the scene's audio requests.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/assets/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAE1C,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAoC;gBAGrD,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAS5B;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU7B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CA4CjC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/assets/manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAc,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAE1C,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAoC;IAEzD,0EAA0E;IAC1E,OAAO,CAAC,eAAe,CAA+B;IACtD,8EAA8E;IAC9E,OAAO,CAAC,cAAc,CAAoC;gBAGtD,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAS5B;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB7B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;IA+BlB,oEAAoE;IACpE,OAAO,IAAI,IAAI;IAMf;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CA4CjC"}
@@ -9,6 +9,10 @@ export class AssetManager {
9
9
  lastAudioRequestKey = "";
10
10
  lastAudioSrcs = new Set();
11
11
  audioFetching = new Map();
12
+ /** Disposers for loaders whose load has resolved, keyed by loader key. */
13
+ loaderDisposers = new Map();
14
+ /** In-flight loader runs, keyed by loader key, to dedupe concurrent calls. */
15
+ loaderInFlight = new Map();
12
16
  constructor(precomp, storageAdapter, audioDevice) {
13
17
  this.precomp = precomp;
14
18
  this.storageAdapter = storageAdapter;
@@ -22,6 +26,12 @@ export class AssetManager {
22
26
  async loadAt(frame) {
23
27
  const jobs = [];
24
28
  for (const [key, track] of this.precomp.assets) {
29
+ if (track.record.type === 'loader') {
30
+ const job = this.syncLoader(key, track, frame);
31
+ if (job)
32
+ jobs.push(job);
33
+ continue;
34
+ }
25
35
  if (track.cacheAt <= frame && track.record.endFrame >= frame) {
26
36
  jobs.push(this.storageAdapter.loadAsset(key, track.record));
27
37
  }
@@ -35,6 +45,12 @@ export class AssetManager {
35
45
  */
36
46
  prefetch(frame) {
37
47
  for (const [key, track] of this.precomp.assets) {
48
+ if (track.record.type === 'loader') {
49
+ this.syncLoader(key, track, frame)?.catch(err => {
50
+ console.error(`[AssetManager] loader failed for ${key}:`, err);
51
+ });
52
+ continue;
53
+ }
38
54
  if (track.cacheAt <= frame && track.record.endFrame >= frame) {
39
55
  this.storageAdapter.loadAsset(key, track.record).catch(err => {
40
56
  console.error(`[AssetManager] prefetch failed for ${key}:`, err);
@@ -42,6 +58,51 @@ export class AssetManager {
42
58
  }
43
59
  }
44
60
  }
61
+ /**
62
+ * Drive a single loader track toward the state `frame` requires. If `frame`
63
+ * is inside the loader's `[cacheAt, discardAt]` window, run its callback
64
+ * (deduped — at most one in-flight run, skipped once loaded) and return the
65
+ * pending job, if any. If `frame` is outside the window and the loader was
66
+ * loaded, dispose it. Returns the in-flight load promise so a blocking
67
+ * caller can await it; `undefined` when there's nothing to wait for.
68
+ */
69
+ syncLoader(key, track, frame) {
70
+ if (track.record.type !== 'loader')
71
+ return undefined;
72
+ const discardAt = track.discardAt ?? Infinity;
73
+ const inWindow = track.cacheAt <= frame && frame <= discardAt;
74
+ if (!inWindow) {
75
+ const dispose = this.loaderDisposers.get(key);
76
+ if (dispose) {
77
+ this.loaderDisposers.delete(key);
78
+ dispose();
79
+ }
80
+ return undefined;
81
+ }
82
+ // Already loaded for this window, or a run is already in flight.
83
+ if (this.loaderDisposers.has(key))
84
+ return undefined;
85
+ const existing = this.loaderInFlight.get(key);
86
+ if (existing)
87
+ return existing;
88
+ const load = track.record.load;
89
+ const job = load()
90
+ .then(disposer => {
91
+ this.loaderDisposers.set(key, disposer);
92
+ })
93
+ .finally(() => {
94
+ this.loaderInFlight.delete(key);
95
+ });
96
+ this.loaderInFlight.set(key, job);
97
+ return job;
98
+ }
99
+ /** Run every outstanding loader disposer and clear loader state. */
100
+ dispose() {
101
+ for (const dispose of this.loaderDisposers.values())
102
+ dispose();
103
+ this.loaderDisposers.clear();
104
+ this.loaderInFlight.clear();
105
+ }
45
106
  /**
46
107
  * Push the current audio working set to the AudioDevice. Called after each
47
108
  * render tick so the device stays in sync with the scene's audio requests.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/assets/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/assets/manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
- export type AssetType = 'image' | 'font' | 'video' | 'audio';
1
+ export type AssetType = 'image' | 'font' | 'video' | 'audio' | 'loader';
2
+ /** Frees whatever a {@link LoaderFn} loaded. Called when its window is evicted. */
3
+ export type Disposer = () => void;
4
+ /**
5
+ * An opaque async load owned by the requesting package. Runs the load and
6
+ * resolves with a {@link Disposer} that frees it. The core never inspects what
7
+ * was loaded — this is how a component package (e.g. the code component's Shiki
8
+ * highlighter) loads its own resources without core depending on it.
9
+ */
10
+ export type LoaderFn = () => Promise<Disposer>;
2
11
  /** Frame-range entry tracked by {@link AssetTracker} for a single asset. */
3
12
  interface BaseAssetRecord {
4
13
  type: AssetType;
@@ -34,7 +43,18 @@ export interface AudioRecord extends BaseAssetRecord {
34
43
  trimStart: number;
35
44
  trimEnd: number;
36
45
  }
46
+ /**
47
+ * A generic, opaque async load tracked on the timeline like any other asset.
48
+ * Unlike images/fonts/etc. it isn't dispatched by {@link StorageAdapter}; the
49
+ * {@link AssetManager} runs {@link load} directly when the frame window opens
50
+ * and calls the returned {@link Disposer} when it evicts. `src` is the dedupe
51
+ * key (e.g. `lang:java|github-dark`).
52
+ */
53
+ export interface LoaderRecord extends BaseAssetRecord {
54
+ type: 'loader';
55
+ load: LoaderFn;
56
+ }
37
57
  /** Union of all per-type cached entry shapes. */
38
- export type AssetRecord = ImageRecord | FontRecord | VideoRecord | AudioRecord;
58
+ export type AssetRecord = ImageRecord | FontRecord | VideoRecord | AudioRecord | LoaderRecord;
39
59
  export {};
40
60
  //# sourceMappingURL=record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/assets/record.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAI7D,4EAA4E;AAC5E,UAAU,eAAe;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAW,SAAQ,eAAe;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/assets/record.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExE,mFAAmF;AACnF,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AAI/C,4EAA4E;AAC5E,UAAU,eAAe;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAW,SAAQ,eAAe;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACjD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC"}
@@ -1,8 +1,6 @@
1
- import { AssetRecord } from "../assets/record";
1
+ import { AssetRecord, LoaderFn } from "../assets/record";
2
2
  import { AssetCatalog } from "./catalog";
3
3
  import type { AudioRequest } from "../attributes/audio/request";
4
- /** A thunk that performs an async asset load and resolves when the asset is ready. */
5
- export type LoaderFunction = () => Promise<unknown>;
6
4
  /**
7
5
  * Collects asset requests emitted during a frame render pass and maintains their
8
6
  * frame-range entries. Call {@link start} before rendering a frame and {@link end}
@@ -12,15 +10,19 @@ export declare class AssetTracker {
12
10
  private readonly _catalog;
13
11
  constructor(assetCatalog: AssetCatalog);
14
12
  get catalog(): AssetCatalog;
15
- /** Registers an arbitrary async loader to be awaited during the next load pass. */
16
- requestLoader(fn: LoaderFunction): void;
13
+ /**
14
+ * Register an opaque async loader needed at the current frame, tracked on the
15
+ * timeline by `key` so the {@link AssetManager} runs it once its cache window
16
+ * opens and disposes it when the window closes. Deduped by `key` (like
17
+ * {@link requestFont} by family): the first registration's `load` callback is
18
+ * kept and its frame range extends as later frames re-request the same key.
19
+ */
20
+ requestLoader(key: string, load: LoaderFn): void;
17
21
  /** Pending requests collected during the current frame's load pass. */
18
22
  private requestedAssets;
19
- private loaders;
20
23
  private _audioRequests;
21
24
  private _audioIds;
22
25
  get assets(): ReadonlyMap<string, AssetRecord>;
23
- get pendingLoaders(): readonly LoaderFunction[];
24
26
  get audioRequests(): readonly AudioRequest[];
25
27
  /**
26
28
  * Add an audio playback request. Stored by reference so mutations from stop()
@@ -61,7 +63,7 @@ export declare class AssetTracker {
61
63
  requestFont(fontFamily: string, fontWeight: string): void;
62
64
  /** Remove all tracked entries whose frame ranges fall entirely outside [startFrame, endFrame]. */
63
65
  discardOutside(startFrame: number, endFrame: number): void;
64
- /** Clear all tracked entries and pending loaders without releasing the instance. */
66
+ /** Clear all tracked entries (including loaders) without releasing the instance. */
65
67
  clear(): void;
66
68
  /** Release all state; the instance should not be used after this call. */
67
69
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/assets/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,sFAAsF;AACtF,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAC5B,YAAY,EAAE,YAAY;IAItC,IAAI,OAAO,IAAI,YAAY,CAA0B;IAErD,mFAAmF;IACnF,aAAa,CAAC,EAAE,EAAE,cAAc;IAIhC,uEAAuE;IACvE,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,SAAS,CAAqB;IAEtC,IAAI,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAiC;IAC/E,IAAI,cAAc,IAAI,SAAS,cAAc,EAAE,CAAyB;IACxE,IAAI,aAAa,IAAI,SAAS,YAAY,EAAE,CAAgC;IAE5E;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAMxC,wGAAwG;IACxG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW/B,+GAA+G;IAC/G,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B,2FAA2F;IAC3F,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B,2CAA2C;IAC3C,GAAG,IAAI,IAAI;IAMX,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAanB,+FAA+F;IAC/F,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;IAuBtE,8FAA8F;IAC9F,YAAY,CACR,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAU,EACjB,MAAM,GAAE,MAAU,EAClB,SAAS,GAAE,MAAU,EACrB,OAAO,CAAC,EAAE,MAAM,GACjB,IAAI;IAyBP;;;;;;;;;;OAUG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAYzD,kGAAkG;IAClG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ1D,oFAAoF;IACpF,KAAK;IAWL,0EAA0E;IAC1E,OAAO,IAAI,IAAI;CAMlB"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/assets/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;;;GAIG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAC5B,YAAY,EAAE,YAAY;IAItC,IAAI,OAAO,IAAI,YAAY,CAA0B;IAErD;;;;;;OAMG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAUhD,uEAAuE;IACvE,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,SAAS,CAAqB;IAEtC,IAAI,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAiC;IAC/E,IAAI,aAAa,IAAI,SAAS,YAAY,EAAE,CAAgC;IAE5E;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAMxC,wGAAwG;IACxG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW/B,+GAA+G;IAC/G,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B,2FAA2F;IAC3F,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B,2CAA2C;IAC3C,GAAG,IAAI,IAAI;IAMX,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAanB,+FAA+F;IAC/F,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;IAuBtE,8FAA8F;IAC9F,YAAY,CACR,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAU,EACjB,MAAM,GAAE,MAAU,EAClB,SAAS,GAAE,MAAU,EACrB,OAAO,CAAC,EAAE,MAAM,GACjB,IAAI;IAyBP;;;;;;;;;;OAUG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAYzD,kGAAkG;IAClG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ1D,oFAAoF;IACpF,KAAK;IAUL,0EAA0E;IAC1E,OAAO,IAAI,IAAI;CAKlB"}
@@ -9,17 +9,27 @@ export class AssetTracker {
9
9
  this._catalog = assetCatalog;
10
10
  }
11
11
  get catalog() { return this._catalog; }
12
- /** Registers an arbitrary async loader to be awaited during the next load pass. */
13
- requestLoader(fn) {
14
- this.loaders.push(fn);
12
+ /**
13
+ * Register an opaque async loader needed at the current frame, tracked on the
14
+ * timeline by `key` so the {@link AssetManager} runs it once its cache window
15
+ * opens and disposes it when the window closes. Deduped by `key` (like
16
+ * {@link requestFont} by family): the first registration's `load` callback is
17
+ * kept and its frame range extends as later frames re-request the same key.
18
+ */
19
+ requestLoader(key, load) {
20
+ this.upsertAsset(key, (frame) => ({
21
+ type: 'loader',
22
+ src: key,
23
+ startFrame: frame,
24
+ endFrame: frame,
25
+ load,
26
+ }));
15
27
  }
16
28
  /** Pending requests collected during the current frame's load pass. */
17
29
  requestedAssets = new Map();
18
- loaders = [];
19
30
  _audioRequests = [];
20
31
  _audioIds = new Set();
21
32
  get assets() { return this.requestedAssets; }
22
- get pendingLoaders() { return this.loaders; }
23
33
  get audioRequests() { return this._audioRequests; }
24
34
  /**
25
35
  * Add an audio playback request. Stored by reference so mutations from stop()
@@ -159,10 +169,9 @@ export class AssetTracker {
159
169
  }
160
170
  }
161
171
  }
162
- /** Clear all tracked entries and pending loaders without releasing the instance. */
172
+ /** Clear all tracked entries (including loaders) without releasing the instance. */
163
173
  clear() {
164
174
  this.requestedAssets.clear();
165
- this.loaders.length = 0;
166
175
  this._audioRequests.length = 0;
167
176
  this._audioIds.clear();
168
177
  }
@@ -170,7 +179,6 @@ export class AssetTracker {
170
179
  /** Release all state; the instance should not be used after this call. */
171
180
  dispose() {
172
181
  this.requestedAssets.clear();
173
- this.loaders.length = 0;
174
182
  this._audioRequests.length = 0;
175
183
  this._audioIds.clear();
176
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/assets/tracker.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACJ,QAAQ,CAAe;IACxC,YAAY,YAA0B;QAClC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,KAAmB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErD,mFAAmF;IACnF,aAAa,CAAC,EAAkB;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,uEAAuE;IAC/D,eAAe,GAA6B,IAAI,GAAG,EAAE,CAAC;IACtD,OAAO,GAAqB,EAAE,CAAC;IAC/B,cAAc,GAAmB,EAAE,CAAC;IACpC,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,IAAI,MAAM,KAAuC,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC/E,IAAI,cAAc,KAAgC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,IAAI,aAAa,KAA8B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAE5E;;;;OAIG;IACH,eAAe,CAAC,GAAiB;QAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,wGAAwG;IACxG,YAAY,CAAC,GAAW;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,OAAO;YACb,GAAG;YACH,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,QAAQ;SACpB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,+GAA+G;IAC/G,UAAU;QACN,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEO,YAAY,CAAU;IAE9B,2FAA2F;IAC3F,KAAK,CAAC,KAAa;QACf,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,2CAA2C;IAC3C,GAAG;QACC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,6EAA6E;IAErE,WAAW;QACf,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,GAAW,EAAE,SAAyC;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK;gBAAE,OAAO;YACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,OAAO;QACX,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,6EAA6E;IAE7E,+FAA+F;IAC/F,YAAY,CAAC,GAAW,EAAE,QAAgB,CAAC,EAAE,SAAiB,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK;gBAAE,OAAO;YACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC1B,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;gBACnC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACzC,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,KAAK;YACL,MAAM;YACN,GAAG;SACN,CAAC,CAAC;IACP,CAAC;IAED,8FAA8F;IAC9F,YAAY,CACR,GAAW,EACX,QAAgB,CAAC,EACjB,SAAiB,CAAC,EAClB,YAAoB,CAAC,EACrB,OAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK;gBAAE,OAAO;YACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC1B,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;gBACnC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACzC,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,KAAK;YACL,MAAM;YACN,GAAG;YACH,SAAS;YACT,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC;SAC1D,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;OAUG;IACH,WAAW,CAAC,UAAkB,EAAE,UAAkB;QAC9C,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,GAAG;YAC3C,UAAU;YACV,GAAG,EAAE,UAAU;SAClB,CAAC,CAAC,CAAC;IACR,CAAC;IAGD,kGAAkG;IAClG,cAAc,CAAC,UAAkB,EAAE,QAAgB;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9C,IAAI,KAAK,CAAC,QAAQ,GAAG,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,QAAQ,EAAE,CAAC;gBAC7D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,KAAK;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAID,6EAA6E;IAE7E,0EAA0E;IAC1E,OAAO;QACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACJ"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/assets/tracker.ts"],"names":[],"mappings":"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"}
@@ -14,5 +14,5 @@ export * from './mask/mask';
14
14
  export * from './text/align';
15
15
  export * from './text/lerp';
16
16
  export * from './text/span';
17
- export * from './properties/decorator';
17
+ export { property, PropOptions } from './properties/decorator';
18
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attributes/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAE7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attributes/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAE7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
@@ -13,5 +13,5 @@ export * from './mask/mask';
13
13
  export * from './text/align';
14
14
  export * from './text/lerp';
15
15
  export * from './text/span';
16
- export * from './properties/decorator';
16
+ export { property } from './properties/decorator';
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attributes/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAE7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAc,MAAM,eAAe,CAAC;AAElD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attributes/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAE7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAc,MAAM,eAAe,CAAC;AAElD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAe,MAAM,wBAAwB,CAAC"}
@@ -5,9 +5,9 @@
5
5
  * to an integer hash for fast uniform uploads.
6
6
  */
7
7
  /** Every supported blend mode, in hash-index order. */
8
- export declare const BLEND_MODES_LIST: readonly ["multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity", "normal"];
9
- /** CSS `mix-blend-mode` keyword — derived from {@link BLEND_MODES_LIST}. */
10
- export type BlendMode = typeof BLEND_MODES_LIST[number];
8
+ export declare const BlendModes: readonly ["multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity", "normal"];
9
+ /** CSS `mix-blend-mode` keyword — derived from {@link BlendModes}. */
10
+ export type BlendMode = typeof BlendModes[number];
11
11
  /** Returns the integer hash for a blend mode, used as a shader uniform. */
12
12
  export declare function getBlendModeHash(blend: BlendMode): number;
13
13
  //# sourceMappingURL=blend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blend.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/blend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,2MAiBnB,CAAC;AAEX,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAQxD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEzD"}
1
+ {"version":3,"file":"blend.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/blend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AACvD,eAAO,MAAM,UAAU,2MAiBb,CAAC;AAEX,sEAAsE;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAQlD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEzD"}
@@ -5,7 +5,7 @@
5
5
  * to an integer hash for fast uniform uploads.
6
6
  */
7
7
  /** Every supported blend mode, in hash-index order. */
8
- export const BLEND_MODES_LIST = [
8
+ export const BlendModes = [
9
9
  "multiply",
10
10
  "screen",
11
11
  "overlay",
@@ -24,7 +24,7 @@ export const BLEND_MODES_LIST = [
24
24
  "normal"
25
25
  ];
26
26
  // Pre-built reverse lookup so getBlendModeHash is O(1).
27
- const BLEND_MODE_HASH = Object.fromEntries(BLEND_MODES_LIST.map((mode, i) => [mode, i]));
27
+ const BLEND_MODE_HASH = Object.fromEntries(BlendModes.map((mode, i) => [mode, i]));
28
28
  /** Returns the integer hash for a blend mode, used as a shader uniform. */
29
29
  export function getBlendModeHash(blend) {
30
30
  return BLEND_MODE_HASH[blend];
@@ -1 +1 @@
1
- {"version":3,"file":"blend.js","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/blend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,KAAK;IACL,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,QAAQ;CACF,CAAC;AAKX,wDAAwD;AACxD,MAAM,eAAe,GACjB,MAAM,CAAC,WAAW,CACd,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAClB,CAAC;AAEnC,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC7C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"blend.js","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/blend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,KAAK;IACL,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,QAAQ;CACF,CAAC;AAKX,wDAAwD;AACxD,MAAM,eAAe,GACjB,MAAM,CAAC,WAAW,CACd,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACZ,CAAC;AAEnC,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC7C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
@@ -1,4 +1,4 @@
1
- export { BLEND_MODES_LIST, getBlendModeHash } from './blend';
1
+ export { BlendModes as BLEND_MODES_LIST, getBlendModeHash } from './blend';
2
2
  export type { BlendMode } from './blend';
3
3
  export { setTheme, parseColor } from './color/parser';
4
4
  export type { NormalizedColor, Color } from './color/parser';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE7D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7G,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AACzG,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/G,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC5G,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC5G,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE7D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7G,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AACzG,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/G,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC5G,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC5G,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,4 +1,4 @@
1
- export { BLEND_MODES_LIST, getBlendModeHash } from './blend';
1
+ export { BlendModes as BLEND_MODES_LIST, getBlendModeHash } from './blend';
2
2
  export { setTheme, parseColor } from './color/parser';
3
3
  export { Fill, FillChain, resolveChainFill } from './chain';
4
4
  export { resolveFill, resolveFillArray, lerpFill, lerpFillArray, updateFill, prepareFill } from './registry';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI5D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/attributes/shape/fill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI5D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /** Stroke prop and resolved types, resolver, and array lerp. */
2
- export type { StrokeProp, StrokeResolved } from './mapper';
3
- export { resolveStroke, resolveStrokeArray } from './mapper';
2
+ export type { StrokeProp, StrokeResolved, StrokeAlign } from './mapper';
3
+ export { resolveStroke, resolveStrokeArray, resolveStrokeAlign } from './mapper';
4
4
  export { lerpStrokeArray } from './lerp';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,3 +1,3 @@
1
- export { resolveStroke, resolveStrokeArray } from './mapper';
1
+ export { resolveStroke, resolveStrokeArray, resolveStrokeAlign } from './mapper';
2
2
  export { lerpStrokeArray } from './lerp';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lerp.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/lerp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAYlE,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAYzG"}
1
+ {"version":3,"file":"lerp.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/lerp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAalE,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAYzG"}
@@ -5,6 +5,7 @@ function lerpStroke(from, to, t) {
5
5
  fill: lerpFill(from.fill, to.fill, t),
6
6
  dash: t < 0.5 ? from.dash : to.dash,
7
7
  dashOffset: (from.dashOffset) + ((to.dashOffset) - (from.dashOffset)) * t,
8
+ align: (from.align) + ((to.align) - (from.align)) * t,
8
9
  };
9
10
  }
10
11
  export function lerpStrokeArray(from, to, t) {
@@ -1 +1 @@
1
- {"version":3,"file":"lerp.js","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/lerp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,SAAS,UAAU,CAAC,IAAoB,EAAE,EAAkB,EAAE,CAAS;IACnE,OAAO;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;QACzD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;QACnC,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;KAC5E,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAsB,EAAE,EAAoB,EAAE,CAAS;IACnF,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtC,IAAI,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"lerp.js","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/lerp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,SAAS,UAAU,CAAC,IAAoB,EAAE,EAAkB,EAAE,CAAS;IACnE,OAAO;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;QACzD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;QACnC,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;QACzE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;KACxD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAsB,EAAE,EAAoB,EAAE,CAAS;IACnF,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtC,IAAI,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1,4 +1,13 @@
1
1
  import { FillProp, FillResolved } from '../fill/union';
2
+ /**
3
+ * Where the stroke sits relative to the shape's edge. Resolves to a number in
4
+ * [-1, 1]: -1 = fully inside the outline, 0 = centered (straddles the edge,
5
+ * half in/half out), +1 = fully outside. Named values map to the endpoints;
6
+ * intermediate numbers bias the stroke partway, like Figma's stroke alignment.
7
+ */
8
+ export type StrokeAlign = number | 'inside' | 'center' | 'outside';
9
+ /** Resolve a loose `align` prop to a clamped number in [-1, 1]. */
10
+ export declare function resolveStrokeAlign(align: StrokeAlign | undefined, fallback: number): number;
2
11
  export interface StrokeProp {
3
12
  /** Stroke width in pixels. Defaults to 1. */
4
13
  weight?: number;
@@ -7,6 +16,13 @@ export interface StrokeProp {
7
16
  /** Dash pattern. A single number `n` becomes `[n, n]`. */
8
17
  dash?: number | number[];
9
18
  dashOffset?: number;
19
+ /**
20
+ * Where the stroke sits relative to the edge: a number in [-1, 1] or one of
21
+ * `'inside'` (-1), `'center'` (0), `'outside'` (1). Defaults to `'inside'`,
22
+ * so the stroke stays within the shape's measured bounds (like a CSS border)
23
+ * rather than leaking half its width outside.
24
+ */
25
+ align?: StrokeAlign;
10
26
  }
11
27
  /**
12
28
  * Fully resolved stroke — all fields normalised with defaults applied.
@@ -18,6 +34,8 @@ export interface StrokeResolved {
18
34
  fill: FillResolved;
19
35
  dash?: number[];
20
36
  dashOffset: number;
37
+ /** Stroke placement in [-1, 1]: -1 inside, 0 center, +1 outside. */
38
+ align: number;
21
39
  }
22
40
  export declare function resolveStroke(prop: StrokeProp, previous?: StrokeResolved): StrokeResolved;
23
41
  export declare function resolveStrokeArray(prop: StrokeProp | StrokeProp[] | undefined, previous?: StrokeResolved[]): StrokeResolved[];
@@ -1 +1 @@
1
- {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/mapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIvD,MAAM,WAAW,UAAU;IACvB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB;AAKD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,cAAc,CAczF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAI7H"}
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/mapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIvD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS3F;AAID,MAAM,WAAW,UAAU;IACvB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,cAAc,CAezF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAI7H"}
@@ -1,4 +1,17 @@
1
1
  import { resolveFill } from '../../../attributes/shape/fill/registry';
2
+ /** Resolve a loose `align` prop to a clamped number in [-1, 1]. */
3
+ export function resolveStrokeAlign(align, fallback) {
4
+ if (align == null)
5
+ return fallback;
6
+ if (typeof align === 'number')
7
+ return Math.max(-1, Math.min(1, align));
8
+ switch (align) {
9
+ case 'inside': return -1;
10
+ case 'center': return 0;
11
+ case 'outside': return 1;
12
+ }
13
+ return fallback;
14
+ }
2
15
  // ── Mapper ───────────────────────────────────────────────────────────────────
3
16
  export function resolveStroke(prop, previous) {
4
17
  let dash;
@@ -14,6 +27,7 @@ export function resolveStroke(prop, previous) {
14
27
  fill: prop.fill != null ? resolveFill(prop.fill) : (previous?.fill ?? resolveFill('transparent')),
15
28
  dash,
16
29
  dashOffset: prop.dashOffset ?? previous?.dashOffset ?? 0,
30
+ align: resolveStrokeAlign(prop.align, previous?.align ?? -1),
17
31
  };
18
32
  }
19
33
  export function resolveStrokeArray(prop, previous) {
@@ -1 +1 @@
1
- {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AA4B/D,gFAAgF;AAEhF,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,QAAyB;IACrE,IAAI,IAA0B,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO;QACH,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;QAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;QACjG,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE,UAAU,IAAI,CAAC;KAC3D,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA2C,EAAE,QAA2B;IACvG,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../../src/attributes/shape/stroke/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAa/D,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,KAA8B,EAAE,QAAgB;IAC/E,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACzB,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;QACxB,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAoCD,gFAAgF;AAEhF,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,QAAyB;IACrE,IAAI,IAA0B,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO;QACH,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;QAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;QACjG,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE,UAAU,IAAI,CAAC;QACxD,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;KAC/D,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA2C,EAAE,QAA2B;IACvG,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC"}
@@ -13,6 +13,12 @@ export type GapSize = number | "auto";
13
13
  export interface FlexChild {
14
14
  widthMode: SizeInput;
15
15
  heightMode: SizeInput;
16
+ /**
17
+ * Proportional weight for dividing the main-axis free space among `fill`
18
+ * children. Only consulted when this child fills the main axis; ignored
19
+ * otherwise. Undefined is treated as 1.
20
+ */
21
+ mainFlex?: number;
16
22
  measure(constraints: SizeConstraints): Partial<Size2D>;
17
23
  }
18
24
  export interface FlexMeasureEntry<C extends FlexChild = FlexChild> {
@@ -20,6 +26,12 @@ export interface FlexMeasureEntry<C extends FlexChild = FlexChild> {
20
26
  width: number;
21
27
  height: number;
22
28
  isFlexibleMain: boolean;
29
+ /**
30
+ * Sanitized main-axis flex weight; 0 for non-flexible-main entries. Set by
31
+ * `measureFlex`; `layoutFlex` never reads it, so callers that construct
32
+ * entries directly for layout may omit it.
33
+ */
34
+ flex?: number;
23
35
  }
24
36
  export interface FlexMeasureResult<C extends FlexChild = FlexChild> {
25
37
  entries: FlexMeasureEntry<C>[];