@clipkit/runtime 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 (219) hide show
  1. package/LICENSE +54 -0
  2. package/README.md +98 -0
  3. package/dist/animation/easings.d.ts +9 -0
  4. package/dist/animation/easings.d.ts.map +1 -0
  5. package/dist/animation/easings.js +230 -0
  6. package/dist/animation/easings.js.map +1 -0
  7. package/dist/animation/expr.d.ts +44 -0
  8. package/dist/animation/expr.d.ts.map +1 -0
  9. package/dist/animation/expr.js +236 -0
  10. package/dist/animation/expr.js.map +1 -0
  11. package/dist/animation/keyframes.d.ts +23 -0
  12. package/dist/animation/keyframes.d.ts.map +1 -0
  13. package/dist/animation/keyframes.js +117 -0
  14. package/dist/animation/keyframes.js.map +1 -0
  15. package/dist/animation/motion-path.d.ts +18 -0
  16. package/dist/animation/motion-path.d.ts.map +1 -0
  17. package/dist/animation/motion-path.js +269 -0
  18. package/dist/animation/motion-path.js.map +1 -0
  19. package/dist/animation/noise1d.d.ts +5 -0
  20. package/dist/animation/noise1d.d.ts.map +1 -0
  21. package/dist/animation/noise1d.js +27 -0
  22. package/dist/animation/noise1d.js.map +1 -0
  23. package/dist/animation/presets.d.ts +60 -0
  24. package/dist/animation/presets.d.ts.map +1 -0
  25. package/dist/animation/presets.js +221 -0
  26. package/dist/animation/presets.js.map +1 -0
  27. package/dist/assets/cache.d.ts +18 -0
  28. package/dist/assets/cache.d.ts.map +1 -0
  29. package/dist/assets/cache.js +56 -0
  30. package/dist/assets/cache.js.map +1 -0
  31. package/dist/assets/fonts.d.ts +20 -0
  32. package/dist/assets/fonts.d.ts.map +1 -0
  33. package/dist/assets/fonts.js +127 -0
  34. package/dist/assets/fonts.js.map +1 -0
  35. package/dist/assets/loader.d.ts +18 -0
  36. package/dist/assets/loader.d.ts.map +1 -0
  37. package/dist/assets/loader.js +87 -0
  38. package/dist/assets/loader.js.map +1 -0
  39. package/dist/assets/lut.d.ts +5 -0
  40. package/dist/assets/lut.d.ts.map +1 -0
  41. package/dist/assets/lut.js +77 -0
  42. package/dist/assets/lut.js.map +1 -0
  43. package/dist/assets/media-time.d.ts +31 -0
  44. package/dist/assets/media-time.d.ts.map +1 -0
  45. package/dist/assets/media-time.js +65 -0
  46. package/dist/assets/media-time.js.map +1 -0
  47. package/dist/assets/mp4-frame-source.d.ts +44 -0
  48. package/dist/assets/mp4-frame-source.d.ts.map +1 -0
  49. package/dist/assets/mp4-frame-source.js +387 -0
  50. package/dist/assets/mp4-frame-source.js.map +1 -0
  51. package/dist/audio/encoder.d.ts +31 -0
  52. package/dist/audio/encoder.d.ts.map +1 -0
  53. package/dist/audio/encoder.js +96 -0
  54. package/dist/audio/encoder.js.map +1 -0
  55. package/dist/audio/fades.d.ts +16 -0
  56. package/dist/audio/fades.d.ts.map +1 -0
  57. package/dist/audio/fades.js +43 -0
  58. package/dist/audio/fades.js.map +1 -0
  59. package/dist/audio/limiter.d.ts +8 -0
  60. package/dist/audio/limiter.d.ts.map +1 -0
  61. package/dist/audio/limiter.js +39 -0
  62. package/dist/audio/limiter.js.map +1 -0
  63. package/dist/audio/loader.d.ts +6 -0
  64. package/dist/audio/loader.d.ts.map +1 -0
  65. package/dist/audio/loader.js +42 -0
  66. package/dist/audio/loader.js.map +1 -0
  67. package/dist/audio/mixer.d.ts +17 -0
  68. package/dist/audio/mixer.d.ts.map +1 -0
  69. package/dist/audio/mixer.js +204 -0
  70. package/dist/audio/mixer.js.map +1 -0
  71. package/dist/audio/varispeed.d.ts +24 -0
  72. package/dist/audio/varispeed.d.ts.map +1 -0
  73. package/dist/audio/varispeed.js +114 -0
  74. package/dist/audio/varispeed.js.map +1 -0
  75. package/dist/audio/wav.d.ts +6 -0
  76. package/dist/audio/wav.d.ts.map +1 -0
  77. package/dist/audio/wav.js +62 -0
  78. package/dist/audio/wav.js.map +1 -0
  79. package/dist/backend/backend.d.ts +579 -0
  80. package/dist/backend/backend.d.ts.map +1 -0
  81. package/dist/backend/backend.js +17 -0
  82. package/dist/backend/backend.js.map +1 -0
  83. package/dist/backend/webgl-backend.d.ts +97 -0
  84. package/dist/backend/webgl-backend.d.ts.map +1 -0
  85. package/dist/backend/webgl-backend.js +2142 -0
  86. package/dist/backend/webgl-backend.js.map +1 -0
  87. package/dist/backend/webgpu-backend.d.ts +121 -0
  88. package/dist/backend/webgpu-backend.d.ts.map +1 -0
  89. package/dist/backend/webgpu-backend.js +2481 -0
  90. package/dist/backend/webgpu-backend.js.map +1 -0
  91. package/dist/compositor/bitfont.d.ts +8 -0
  92. package/dist/compositor/bitfont.d.ts.map +1 -0
  93. package/dist/compositor/bitfont.js +52 -0
  94. package/dist/compositor/bitfont.js.map +1 -0
  95. package/dist/compositor/camera.d.ts +5 -0
  96. package/dist/compositor/camera.d.ts.map +1 -0
  97. package/dist/compositor/camera.js +114 -0
  98. package/dist/compositor/camera.js.map +1 -0
  99. package/dist/compositor/color.d.ts +26 -0
  100. package/dist/compositor/color.d.ts.map +1 -0
  101. package/dist/compositor/color.js +189 -0
  102. package/dist/compositor/color.js.map +1 -0
  103. package/dist/compositor/element-renderers/caption.d.ts +4 -0
  104. package/dist/compositor/element-renderers/caption.d.ts.map +1 -0
  105. package/dist/compositor/element-renderers/caption.js +376 -0
  106. package/dist/compositor/element-renderers/caption.js.map +1 -0
  107. package/dist/compositor/element-renderers/group.d.ts +12 -0
  108. package/dist/compositor/element-renderers/group.d.ts.map +1 -0
  109. package/dist/compositor/element-renderers/group.js +259 -0
  110. package/dist/compositor/element-renderers/group.js.map +1 -0
  111. package/dist/compositor/element-renderers/image.d.ts +4 -0
  112. package/dist/compositor/element-renderers/image.d.ts.map +1 -0
  113. package/dist/compositor/element-renderers/image.js +97 -0
  114. package/dist/compositor/element-renderers/image.js.map +1 -0
  115. package/dist/compositor/element-renderers/lit.d.ts +6 -0
  116. package/dist/compositor/element-renderers/lit.d.ts.map +1 -0
  117. package/dist/compositor/element-renderers/lit.js +82 -0
  118. package/dist/compositor/element-renderers/lit.js.map +1 -0
  119. package/dist/compositor/element-renderers/particles.d.ts +4 -0
  120. package/dist/compositor/element-renderers/particles.d.ts.map +1 -0
  121. package/dist/compositor/element-renderers/particles.js +212 -0
  122. package/dist/compositor/element-renderers/particles.js.map +1 -0
  123. package/dist/compositor/element-renderers/shape.d.ts +4 -0
  124. package/dist/compositor/element-renderers/shape.d.ts.map +1 -0
  125. package/dist/compositor/element-renderers/shape.js +171 -0
  126. package/dist/compositor/element-renderers/shape.js.map +1 -0
  127. package/dist/compositor/element-renderers/svg.d.ts +4 -0
  128. package/dist/compositor/element-renderers/svg.d.ts.map +1 -0
  129. package/dist/compositor/element-renderers/svg.js +210 -0
  130. package/dist/compositor/element-renderers/svg.js.map +1 -0
  131. package/dist/compositor/element-renderers/text.d.ts +25 -0
  132. package/dist/compositor/element-renderers/text.d.ts.map +1 -0
  133. package/dist/compositor/element-renderers/text.js +1358 -0
  134. package/dist/compositor/element-renderers/text.js.map +1 -0
  135. package/dist/compositor/element-renderers/video.d.ts +12 -0
  136. package/dist/compositor/element-renderers/video.d.ts.map +1 -0
  137. package/dist/compositor/element-renderers/video.js +109 -0
  138. package/dist/compositor/element-renderers/video.js.map +1 -0
  139. package/dist/compositor/fit.d.ts +18 -0
  140. package/dist/compositor/fit.d.ts.map +1 -0
  141. package/dist/compositor/fit.js +106 -0
  142. package/dist/compositor/fit.js.map +1 -0
  143. package/dist/compositor/lighting.d.ts +63 -0
  144. package/dist/compositor/lighting.d.ts.map +1 -0
  145. package/dist/compositor/lighting.js +141 -0
  146. package/dist/compositor/lighting.js.map +1 -0
  147. package/dist/compositor/mat4.d.ts +88 -0
  148. package/dist/compositor/mat4.d.ts.map +1 -0
  149. package/dist/compositor/mat4.js +245 -0
  150. package/dist/compositor/mat4.js.map +1 -0
  151. package/dist/compositor/project.d.ts +24 -0
  152. package/dist/compositor/project.d.ts.map +1 -0
  153. package/dist/compositor/project.js +105 -0
  154. package/dist/compositor/project.js.map +1 -0
  155. package/dist/compositor/render-context.d.ts +194 -0
  156. package/dist/compositor/render-context.d.ts.map +1 -0
  157. package/dist/compositor/render-context.js +10 -0
  158. package/dist/compositor/render-context.js.map +1 -0
  159. package/dist/compositor/resolve.d.ts +80 -0
  160. package/dist/compositor/resolve.d.ts.map +1 -0
  161. package/dist/compositor/resolve.js +276 -0
  162. package/dist/compositor/resolve.js.map +1 -0
  163. package/dist/compositor/scene.d.ts +10 -0
  164. package/dist/compositor/scene.d.ts.map +1 -0
  165. package/dist/compositor/scene.js +658 -0
  166. package/dist/compositor/scene.js.map +1 -0
  167. package/dist/compositor/transform.d.ts +73 -0
  168. package/dist/compositor/transform.d.ts.map +1 -0
  169. package/dist/compositor/transform.js +229 -0
  170. package/dist/compositor/transform.js.map +1 -0
  171. package/dist/compositor/unit.d.ts +27 -0
  172. package/dist/compositor/unit.d.ts.map +1 -0
  173. package/dist/compositor/unit.js +74 -0
  174. package/dist/compositor/unit.js.map +1 -0
  175. package/dist/encoder/exporter.d.ts +95 -0
  176. package/dist/encoder/exporter.d.ts.map +1 -0
  177. package/dist/encoder/exporter.js +341 -0
  178. package/dist/encoder/exporter.js.map +1 -0
  179. package/dist/encoder/index.d.ts +3 -0
  180. package/dist/encoder/index.d.ts.map +1 -0
  181. package/dist/encoder/index.js +2 -0
  182. package/dist/encoder/index.js.map +1 -0
  183. package/dist/index.d.ts +12 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +27 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/logger.d.ts +13 -0
  188. package/dist/logger.d.ts.map +1 -0
  189. package/dist/logger.js +32 -0
  190. package/dist/logger.js.map +1 -0
  191. package/dist/runtime.d.ts +216 -0
  192. package/dist/runtime.d.ts.map +1 -0
  193. package/dist/runtime.js +1012 -0
  194. package/dist/runtime.js.map +1 -0
  195. package/dist/svg/morph.d.ts +6 -0
  196. package/dist/svg/morph.d.ts.map +1 -0
  197. package/dist/svg/morph.js +62 -0
  198. package/dist/svg/morph.js.map +1 -0
  199. package/dist/svg/svg-renderer.d.ts +18 -0
  200. package/dist/svg/svg-renderer.d.ts.map +1 -0
  201. package/dist/svg/svg-renderer.js +142 -0
  202. package/dist/svg/svg-renderer.js.map +1 -0
  203. package/dist/text/caption-chunk.d.ts +17 -0
  204. package/dist/text/caption-chunk.d.ts.map +1 -0
  205. package/dist/text/caption-chunk.js +76 -0
  206. package/dist/text/caption-chunk.js.map +1 -0
  207. package/dist/text/font-atlas.d.ts +63 -0
  208. package/dist/text/font-atlas.d.ts.map +1 -0
  209. package/dist/text/font-atlas.js +225 -0
  210. package/dist/text/font-atlas.js.map +1 -0
  211. package/dist/text/measure.d.ts +38 -0
  212. package/dist/text/measure.d.ts.map +1 -0
  213. package/dist/text/measure.js +164 -0
  214. package/dist/text/measure.js.map +1 -0
  215. package/dist/text/text-animation.d.ts +52 -0
  216. package/dist/text/text-animation.d.ts.map +1 -0
  217. package/dist/text/text-animation.js +133 -0
  218. package/dist/text/text-animation.js.map +1 -0
  219. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lighting.js","sourceRoot":"","sources":["../../src/compositor/lighting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { Mat4 } from './render-context.js';
2
+ export declare function mat4Identity(): Mat4;
3
+ /**
4
+ * Multiply m1 * m2 — apply m1's transform AFTER m2's. Used when
5
+ * stacking: the parent group's matrix is multiplied by the child's
6
+ * local matrix to get the cumulative one.
7
+ */
8
+ export declare function mat4Multiply(m1: Mat4, m2: Mat4): Mat4;
9
+ /**
10
+ * Apply matrix to a point in the z=0 plane: returns [worldX, worldY].
11
+ * General matrices include the perspective divide; affine matrices use
12
+ * the exact 2D expressions.
13
+ */
14
+ export declare function mat4ApplyToPoint(m: Mat4, x: number, y: number): [number, number];
15
+ /**
16
+ * Extract the in-plane rotation angle (degrees) baked into the matrix —
17
+ * the screen-space angle of the transformed x basis vector.
18
+ */
19
+ export declare function mat4Rotation(m: Mat4): number;
20
+ /** Extract the scale factor along the X axis (handles negative scale). */
21
+ export declare function mat4ScaleX(m: Mat4): number;
22
+ /** Extract the scale factor along the Y axis. */
23
+ export declare function mat4ScaleY(m: Mat4): number;
24
+ /**
25
+ * Apply the current group stack's transform to a local draw spec.
26
+ * Each element renderer calls this with its locally-computed center
27
+ * coordinates, rotation, and opacity; the helper returns world-space
28
+ * values ready for the backend. When the model matrix is identity (the
29
+ * root case), this is a no-op.
30
+ *
31
+ * Valid ONLY for affine chains — this decomposition cannot represent
32
+ * perspective. 3D subtrees take the full-matrix hand-off instead
33
+ * (MAT4-PLAN items 3/6).
34
+ */
35
+ export declare function applyModelTransform(modelMatrix: Mat4, opacityFactor: number, localCx: number, localCy: number, localRotation: number, localOpacity01: number, localWidth: number, localHeight: number): {
36
+ cx: number;
37
+ cy: number;
38
+ rotation: number;
39
+ opacity01: number;
40
+ width: number;
41
+ height: number;
42
+ };
43
+ /**
44
+ * Build a Mat4 for a translate-rotate-scale transform around an anchor
45
+ * point inside a (width × height) box. Mirrors CSS transform semantics
46
+ * with `transform-origin: anchor_x anchor_y`; same float expressions as
47
+ * the CKP/1.0 Mat3 builder.
48
+ *
49
+ * 1. Translate to (x, y)
50
+ * 2. Translate by -(width * x_anchor, height * y_anchor) to put the
51
+ * anchor point at the position
52
+ * 3. Around the anchor: rotate, scale
53
+ *
54
+ * `anchorX` and `anchorY` are fractions in [0, 1].
55
+ */
56
+ /**
57
+ * The CKP/1.0 full-matrix hand-off for leaf quads (§4.4): compose the
58
+ * element's pixel-space local quad matrix (position / size / rotations
59
+ * / skew / z) with the model chain and return the 16 values backends
60
+ * accept as `params.transform`. Renderers call this INSTEAD of
61
+ * applyModelTransform whenever the element carries 3D fields or the
62
+ * chain is no longer affine.
63
+ */
64
+ export declare function quadWorldTransform(model: Mat4, cx: number, cy: number, width: number, height: number, rotationDeg: number, skewXDeg: number, skewYDeg: number, t3d: {
65
+ xRot: number;
66
+ yRot: number;
67
+ z: number;
68
+ } | null): number[];
69
+ /**
70
+ * Pivot-conjugated plane matrix: T(px, py, z) · Rz · Ry · Rx ·
71
+ * T(−px, −py). Multi-quad renderers (text glyphs, caption blocks,
72
+ * particles) compose this ONCE per element so the whole block tilts as
73
+ * a single plane in D1 order (Rz outermost, matching leaf quads), then
74
+ * run their per-quad 2D math unrotated inside it.
75
+ */
76
+ export declare function mat4PlaneAt(px: number, py: number, z: number, zRotDeg: number, yRotDeg: number, xRotDeg: number): Mat4;
77
+ /**
78
+ * 3D variant of mat4TRS for groups carrying CKP/1.0 transform fields
79
+ * (§4.4.1): T(x, y, z) · Rz · Ry · Rx · S(sx, sy, 1) · T(−anchor).
80
+ * Same anchor-pivot semantics as mat4TRS; rotation conventions match
81
+ * quadMatrix3D (Rz clockwise in Y-down pixel space; +y_rotation turns
82
+ * the right edge away; +x_rotation tips the top edge away). Returns a
83
+ * general (non-aff) matrix — chains through it take the full-matrix
84
+ * hand-off, never the 2D decomposition.
85
+ */
86
+ export declare function mat4TRS3D(x: number, y: number, z: number, width: number, height: number, anchorX: number, anchorY: number, zRotDeg: number, yRotDeg: number, xRotDeg: number, scaleX: number, scaleY?: number): Mat4;
87
+ export declare function mat4TRS(x: number, y: number, width: number, height: number, anchorX: number, anchorY: number, rotationDeg: number, scaleX: number, scaleY?: number): Mat4;
88
+ //# sourceMappingURL=mat4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mat4.d.ts","sourceRoot":"","sources":["../../src/compositor/mat4.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAGhD,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,CA0BrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAShF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE5C;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE1C;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,IAAI,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAUhG;AAED;;;;;;;;;;;;GAYG;AACH;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EACX,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpD,MAAM,EAAE,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CA6BN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAe,GACtB,IAAI,CAmCN;AAED,wBAAgB,OAAO,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAe,GACtB,IAAI,CAoBN"}
@@ -0,0 +1,245 @@
1
+ // 4×4 transform helpers for the group transform stack (CKP/1.0 §4.4).
2
+ //
3
+ // Column-major, f64 (plain number[] — NOT Float32Array: the compositor
4
+ // math must stay double-precision so 2D documents keep their exact
5
+ // CKP/1.0 float behavior). Element e[col*4 + row]:
6
+ //
7
+ // [ e0 e4 e8 e12 ] 2D-affine embedding: a = e0, b = e1,
8
+ // [ e1 e5 e9 e13 ] c = e4, d = e5,
9
+ // [ e2 e6 e10 e14 ] tx = e12, ty = e13
10
+ // [ e3 e7 e11 e15 ]
11
+ //
12
+ // The `aff` flag marks matrices whose z/w rows and columns are trivial
13
+ // (a pure 2D affine embedded in 4×4). When BOTH operands are affine,
14
+ // multiply/apply run the exact same float expressions the Mat3 stack
15
+ // used — so documents with no 3D fields and no camera produce
16
+ // bit-identical doubles, and therefore byte-identical frames, to the
17
+ // CKP/1.0 pipeline (the MAT4-PLAN item-2 equivalence gate). The general
18
+ // 16-term path engages only once real 3D enters a chain.
19
+ //
20
+ // Pure pixel math, no DOMMatrix (absent in some worker environments).
21
+ // All operations return new matrices — the stack is push/pop by
22
+ // reassignment, never mutation.
23
+ import { quadMatrix3D } from './transform.js';
24
+ export function mat4Identity() {
25
+ return {
26
+ e: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
27
+ aff: true,
28
+ };
29
+ }
30
+ /**
31
+ * Multiply m1 * m2 — apply m1's transform AFTER m2's. Used when
32
+ * stacking: the parent group's matrix is multiplied by the child's
33
+ * local matrix to get the cumulative one.
34
+ */
35
+ export function mat4Multiply(m1, m2) {
36
+ if (m1.aff && m2.aff) {
37
+ const a1 = m1.e[0], b1 = m1.e[1], c1 = m1.e[4], d1 = m1.e[5], tx1 = m1.e[12], ty1 = m1.e[13];
38
+ const a2 = m2.e[0], b2 = m2.e[1], c2 = m2.e[4], d2 = m2.e[5], tx2 = m2.e[12], ty2 = m2.e[13];
39
+ return {
40
+ e: [
41
+ a1 * a2 + c1 * b2, b1 * a2 + d1 * b2, 0, 0,
42
+ a1 * c2 + c1 * d2, b1 * c2 + d1 * d2, 0, 0,
43
+ 0, 0, 1, 0,
44
+ a1 * tx2 + c1 * ty2 + tx1, b1 * tx2 + d1 * ty2 + ty1, 0, 1,
45
+ ],
46
+ aff: true,
47
+ };
48
+ }
49
+ const a = m1.e, b = m2.e;
50
+ const e = new Array(16);
51
+ for (let col = 0; col < 4; col++) {
52
+ for (let row = 0; row < 4; row++) {
53
+ e[col * 4 + row] =
54
+ a[row] * b[col * 4] +
55
+ a[4 + row] * b[col * 4 + 1] +
56
+ a[8 + row] * b[col * 4 + 2] +
57
+ a[12 + row] * b[col * 4 + 3];
58
+ }
59
+ }
60
+ return { e, aff: false };
61
+ }
62
+ /**
63
+ * Apply matrix to a point in the z=0 plane: returns [worldX, worldY].
64
+ * General matrices include the perspective divide; affine matrices use
65
+ * the exact 2D expressions.
66
+ */
67
+ export function mat4ApplyToPoint(m, x, y) {
68
+ if (m.aff) {
69
+ return [m.e[0] * x + m.e[4] * y + m.e[12], m.e[1] * x + m.e[5] * y + m.e[13]];
70
+ }
71
+ const e = m.e;
72
+ const px = e[0] * x + e[4] * y + e[12];
73
+ const py = e[1] * x + e[5] * y + e[13];
74
+ const pw = e[3] * x + e[7] * y + e[15];
75
+ return pw !== 0 && pw !== 1 ? [px / pw, py / pw] : [px, py];
76
+ }
77
+ /**
78
+ * Extract the in-plane rotation angle (degrees) baked into the matrix —
79
+ * the screen-space angle of the transformed x basis vector.
80
+ */
81
+ export function mat4Rotation(m) {
82
+ return Math.atan2(m.e[1], m.e[0]) * (180 / Math.PI);
83
+ }
84
+ /** Extract the scale factor along the X axis (handles negative scale). */
85
+ export function mat4ScaleX(m) {
86
+ return Math.sqrt(m.e[0] * m.e[0] + m.e[1] * m.e[1]);
87
+ }
88
+ /** Extract the scale factor along the Y axis. */
89
+ export function mat4ScaleY(m) {
90
+ return Math.sqrt(m.e[4] * m.e[4] + m.e[5] * m.e[5]);
91
+ }
92
+ /**
93
+ * Apply the current group stack's transform to a local draw spec.
94
+ * Each element renderer calls this with its locally-computed center
95
+ * coordinates, rotation, and opacity; the helper returns world-space
96
+ * values ready for the backend. When the model matrix is identity (the
97
+ * root case), this is a no-op.
98
+ *
99
+ * Valid ONLY for affine chains — this decomposition cannot represent
100
+ * perspective. 3D subtrees take the full-matrix hand-off instead
101
+ * (MAT4-PLAN items 3/6).
102
+ */
103
+ export function applyModelTransform(modelMatrix, opacityFactor, localCx, localCy, localRotation, localOpacity01, localWidth, localHeight) {
104
+ const [cx, cy] = mat4ApplyToPoint(modelMatrix, localCx, localCy);
105
+ return {
106
+ cx,
107
+ cy,
108
+ rotation: localRotation + mat4Rotation(modelMatrix),
109
+ opacity01: localOpacity01 * opacityFactor,
110
+ width: localWidth * mat4ScaleX(modelMatrix),
111
+ height: localHeight * mat4ScaleY(modelMatrix),
112
+ };
113
+ }
114
+ /**
115
+ * Build a Mat4 for a translate-rotate-scale transform around an anchor
116
+ * point inside a (width × height) box. Mirrors CSS transform semantics
117
+ * with `transform-origin: anchor_x anchor_y`; same float expressions as
118
+ * the CKP/1.0 Mat3 builder.
119
+ *
120
+ * 1. Translate to (x, y)
121
+ * 2. Translate by -(width * x_anchor, height * y_anchor) to put the
122
+ * anchor point at the position
123
+ * 3. Around the anchor: rotate, scale
124
+ *
125
+ * `anchorX` and `anchorY` are fractions in [0, 1].
126
+ */
127
+ /**
128
+ * The CKP/1.0 full-matrix hand-off for leaf quads (§4.4): compose the
129
+ * element's pixel-space local quad matrix (position / size / rotations
130
+ * / skew / z) with the model chain and return the 16 values backends
131
+ * accept as `params.transform`. Renderers call this INSTEAD of
132
+ * applyModelTransform whenever the element carries 3D fields or the
133
+ * chain is no longer affine.
134
+ */
135
+ export function quadWorldTransform(model, cx, cy, width, height, rotationDeg, skewXDeg, skewYDeg, t3d) {
136
+ const local = {
137
+ e: quadMatrix3D(cx, cy, width, height, rotationDeg, skewXDeg, skewYDeg, t3d?.xRot ?? 0, t3d?.yRot ?? 0, t3d?.z ?? 0),
138
+ aff: false,
139
+ };
140
+ return mat4Multiply(model, local).e;
141
+ }
142
+ /**
143
+ * Pivot-conjugated plane matrix: T(px, py, z) · Rz · Ry · Rx ·
144
+ * T(−px, −py). Multi-quad renderers (text glyphs, caption blocks,
145
+ * particles) compose this ONCE per element so the whole block tilts as
146
+ * a single plane in D1 order (Rz outermost, matching leaf quads), then
147
+ * run their per-quad 2D math unrotated inside it.
148
+ */
149
+ export function mat4PlaneAt(px, py, z, zRotDeg, yRotDeg, xRotDeg) {
150
+ const rz = (zRotDeg * Math.PI) / 180;
151
+ const ry = (yRotDeg * Math.PI) / 180;
152
+ const rx = (xRotDeg * Math.PI) / 180;
153
+ const cz = Math.cos(rz), sz = Math.sin(rz);
154
+ const cyr = Math.cos(ry), syr = Math.sin(ry);
155
+ const cxr = Math.cos(rx), sxr = Math.sin(rx);
156
+ const rot = (vx, vy, vz) => {
157
+ const y1 = vy * cxr - vz * sxr;
158
+ const z1 = vy * sxr + vz * cxr;
159
+ const x2 = vx * cyr + z1 * syr;
160
+ const z2 = -vx * syr + z1 * cyr;
161
+ return [x2 * cz - y1 * sz, x2 * sz + y1 * cz, z2];
162
+ };
163
+ const c0 = rot(1, 0, 0);
164
+ const c1 = rot(0, 1, 0);
165
+ const c2 = rot(0, 0, 1);
166
+ return {
167
+ e: [
168
+ c0[0], c0[1], c0[2], 0,
169
+ c1[0], c1[1], c1[2], 0,
170
+ c2[0], c2[1], c2[2], 0,
171
+ px - px * c0[0] - py * c1[0],
172
+ py - px * c0[1] - py * c1[1],
173
+ z - px * c0[2] - py * c1[2],
174
+ 1,
175
+ ],
176
+ aff: false,
177
+ };
178
+ }
179
+ /**
180
+ * 3D variant of mat4TRS for groups carrying CKP/1.0 transform fields
181
+ * (§4.4.1): T(x, y, z) · Rz · Ry · Rx · S(sx, sy, 1) · T(−anchor).
182
+ * Same anchor-pivot semantics as mat4TRS; rotation conventions match
183
+ * quadMatrix3D (Rz clockwise in Y-down pixel space; +y_rotation turns
184
+ * the right edge away; +x_rotation tips the top edge away). Returns a
185
+ * general (non-aff) matrix — chains through it take the full-matrix
186
+ * hand-off, never the 2D decomposition.
187
+ */
188
+ export function mat4TRS3D(x, y, z, width, height, anchorX, anchorY, zRotDeg, yRotDeg, xRotDeg, scaleX, scaleY = scaleX) {
189
+ const wa = width * anchorX;
190
+ const ha = height * anchorY;
191
+ const rz = (zRotDeg * Math.PI) / 180;
192
+ const ry = (yRotDeg * Math.PI) / 180;
193
+ const rx = (xRotDeg * Math.PI) / 180;
194
+ const cz = Math.cos(rz), sz = Math.sin(rz);
195
+ const cyr = Math.cos(ry), syr = Math.sin(ry);
196
+ const cxr = Math.cos(rx), sxr = Math.sin(rx);
197
+ // Rz·Ry·Rx applied to a vector (vx, vy, vz):
198
+ // Rx: (vx, vy·cx − vz·sx, vy·sx + vz·cx)
199
+ // Ry: (x·cy + z·sy, y, −x·sy + z·cy)
200
+ // Rz (CW, Y-down): (x·cz − y·sz, x·sz + y·cz, z)
201
+ const rot = (vx, vy, vz) => {
202
+ const y1 = vy * cxr - vz * sxr;
203
+ const z1 = vy * sxr + vz * cxr;
204
+ const x2 = vx * cyr + z1 * syr;
205
+ const z2 = -vx * syr + z1 * cyr;
206
+ return [x2 * cz - y1 * sz, x2 * sz + y1 * cz, z2];
207
+ };
208
+ const c0 = rot(scaleX, 0, 0);
209
+ const c1 = rot(0, scaleY, 0);
210
+ const c2 = rot(0, 0, 1);
211
+ return {
212
+ e: [
213
+ c0[0], c0[1], c0[2], 0,
214
+ c1[0], c1[1], c1[2], 0,
215
+ c2[0], c2[1], c2[2], 0,
216
+ x - wa * c0[0] - ha * c1[0],
217
+ y - wa * c0[1] - ha * c1[1],
218
+ z - wa * c0[2] - ha * c1[2],
219
+ 1,
220
+ ],
221
+ aff: false,
222
+ };
223
+ }
224
+ export function mat4TRS(x, y, width, height, anchorX, anchorY, rotationDeg, scaleX, scaleY = scaleX) {
225
+ const ax = width * anchorX;
226
+ const ay = height * anchorY;
227
+ const rad = (rotationDeg * Math.PI) / 180;
228
+ const cos = Math.cos(rad);
229
+ const sin = Math.sin(rad);
230
+ // Translate(x, y) * Rotate(θ) * Scale(sx, sy) * Translate(-ax, -ay)
231
+ const a = cos * scaleX;
232
+ const b = sin * scaleX;
233
+ const c = -sin * scaleY;
234
+ const d = cos * scaleY;
235
+ return {
236
+ e: [
237
+ a, b, 0, 0,
238
+ c, d, 0, 0,
239
+ 0, 0, 1, 0,
240
+ x + a * -ax + c * -ay, y + b * -ax + d * -ay, 0, 1,
241
+ ],
242
+ aff: true,
243
+ };
244
+ }
245
+ //# sourceMappingURL=mat4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mat4.js","sourceRoot":"","sources":["../../src/compositor/mat4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Element, Source } from '@clipkit/protocol';
2
+ export interface Pt {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ /**
7
+ * The element's projected screen quad — four CANVAS-pixel corners in
8
+ * order [TL, TR, BR, BL], accounting for the element's own 3D transform
9
+ * AND the scene camera at `time`. Returns null when the source has no
10
+ * camera (the editor uses the flat box then) or the quad is degenerate /
11
+ * fully behind the camera.
12
+ */
13
+ export declare function projectElementQuad(source: Source, el: Element, time: number): [Pt, Pt, Pt, Pt] | null;
14
+ /**
15
+ * Inverse of the camera projection at a FIXED depth plane: given a
16
+ * canvas-pixel screen point, return the world (x, y) in canvas pixels
17
+ * whose projection at depth `planeZ` lands on it. Used by the move drag
18
+ * to map pointer motion to source `x`/`y` deltas at the element's own
19
+ * depth. Returns null if the plane is edge-on (degenerate).
20
+ */
21
+ export declare function unprojectToPlane(source: Source, time: number, screen: Pt, planeZ: number): Pt | null;
22
+ /** The element's resolved depth (`z`) at `time` — the plane for move. */
23
+ export declare function elementDepthZ(source: Source, el: Element, time: number): number;
24
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/compositor/project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAazD,MAAM,WAAW,EAAE;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAmBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,MAAM,GACX,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAsCzB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,GACb,EAAE,GAAG,IAAI,CAiBX;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/E"}
@@ -0,0 +1,105 @@
1
+ // Pure projection helpers for the EDITOR's camera-view gizmos (CAMERA-
2
+ // PLAN item 6). These reuse the exact render path — `cameraMatrix`, the
3
+ // `resolve*` family, and `quadMatrix3D` — so a selection box projected
4
+ // here hugs the element exactly as the runtime draws it (no drift). All
5
+ // coordinates are CANVAS pixels; the editor maps canvas → screen with
6
+ // its own pan/zoom. No DOM, no GPU.
7
+ import { cameraMatrix } from './camera.js';
8
+ import { applyAnimation, resolve3D, resolveScalePair, resolveSkewPair, } from './resolve.js';
9
+ import { resolveAnchor, resolveLength } from './unit.js';
10
+ import { anchorToCenter, quadMatrix3D } from './transform.js';
11
+ import { mat4Multiply } from './mat4.js';
12
+ import { MAT4_IDENTITY } from './render-context.js';
13
+ function canvasOf(source) {
14
+ return { width: source.width ?? 1920, height: source.height ?? 1080 };
15
+ }
16
+ /** Minimal context for the resolve.ts helpers (they only read time /
17
+ * canvas / sourceDuration / timeOffset). */
18
+ function miniCtx(source, time) {
19
+ return {
20
+ canvas: canvasOf(source),
21
+ time,
22
+ sourceDuration: typeof source.duration === 'number' ? source.duration : 0,
23
+ timeOffset: 0,
24
+ modelMatrix: MAT4_IDENTITY,
25
+ depthSort: false,
26
+ };
27
+ }
28
+ /**
29
+ * The element's projected screen quad — four CANVAS-pixel corners in
30
+ * order [TL, TR, BR, BL], accounting for the element's own 3D transform
31
+ * AND the scene camera at `time`. Returns null when the source has no
32
+ * camera (the editor uses the flat box then) or the quad is degenerate /
33
+ * fully behind the camera.
34
+ */
35
+ export function projectElementQuad(source, el, time) {
36
+ if (!source.camera)
37
+ return null;
38
+ const ctx = miniCtx(source, time);
39
+ const canvas = ctx.canvas;
40
+ const x = applyAnimation(el, 'x', resolveLength(el.x, canvas.width, canvas) ?? canvas.width / 2, ctx);
41
+ const y = applyAnimation(el, 'y', resolveLength(el.y, canvas.height, canvas) ?? canvas.height / 2, ctx);
42
+ const w = applyAnimation(el, 'width', resolveLength(el.width, canvas.width, canvas, 100) ?? 100, ctx);
43
+ const h = applyAnimation(el, 'height', resolveLength(el.height, canvas.height, canvas, 100) ?? 100, ctx);
44
+ const { sx, sy } = resolveScalePair(el, ctx);
45
+ const rotation = applyAnimation(el, 'rotation', numberOr((el.rotation ?? el.z_rotation), 0), ctx);
46
+ const { skewX, skewY } = resolveSkewPair(el, ctx);
47
+ const t3d = resolve3D(el, ctx);
48
+ const ax = resolveAnchor(el.x_anchor);
49
+ const ay = resolveAnchor(el.y_anchor);
50
+ const { cx, cy } = anchorToCenter(x, y, w, h, ax, ay);
51
+ const local = quadMatrix3D(cx, cy, w * sx, h * sy, rotation, skewX, skewY, t3d?.xRot ?? 0, t3d?.yRot ?? 0, t3d?.z ?? 0);
52
+ const C = cameraMatrix(source.camera, time, canvas).e;
53
+ const M = mat4Multiply({ e: C, aff: false }, { e: local, aff: false }).e;
54
+ // The shared unit quad spans (-1..+1). Project each corner.
55
+ const project = (ux, uy) => {
56
+ const X = M[0] * ux + M[4] * uy + M[12];
57
+ const Y = M[1] * ux + M[5] * uy + M[13];
58
+ const W = M[3] * ux + M[7] * uy + M[15];
59
+ if (!Number.isFinite(W) || W <= 1e-6)
60
+ return null;
61
+ return { x: X / W, y: Y / W };
62
+ };
63
+ const tl = project(-1, -1);
64
+ const tr = project(1, -1);
65
+ const br = project(1, 1);
66
+ const bl = project(-1, 1);
67
+ if (!tl || !tr || !br || !bl)
68
+ return null;
69
+ return [tl, tr, br, bl];
70
+ }
71
+ /**
72
+ * Inverse of the camera projection at a FIXED depth plane: given a
73
+ * canvas-pixel screen point, return the world (x, y) in canvas pixels
74
+ * whose projection at depth `planeZ` lands on it. Used by the move drag
75
+ * to map pointer motion to source `x`/`y` deltas at the element's own
76
+ * depth. Returns null if the plane is edge-on (degenerate).
77
+ */
78
+ export function unprojectToPlane(source, time, screen, planeZ) {
79
+ if (!source.camera)
80
+ return { x: screen.x, y: screen.y };
81
+ const canvas = canvasOf(source);
82
+ const C = cameraMatrix(source.camera, time, canvas).e;
83
+ // Solve the 2×2 system from X − Sx·W = 0 and Y − Sy·W = 0 with z fixed.
84
+ const a1 = C[0] - screen.x * C[3];
85
+ const b1 = C[4] - screen.x * C[7];
86
+ const c1 = (C[8] * planeZ + C[12]) - screen.x * (C[11] * planeZ + C[15]);
87
+ const a2 = C[1] - screen.y * C[3];
88
+ const b2 = C[5] - screen.y * C[7];
89
+ const c2 = (C[9] * planeZ + C[13]) - screen.y * (C[11] * planeZ + C[15]);
90
+ const det = a1 * b2 - a2 * b1;
91
+ if (Math.abs(det) < 1e-9)
92
+ return null;
93
+ return {
94
+ x: (-c1 * b2 + c2 * b1) / det,
95
+ y: (-a1 * c2 + a2 * c1) / det,
96
+ };
97
+ }
98
+ /** The element's resolved depth (`z`) at `time` — the plane for move. */
99
+ export function elementDepthZ(source, el, time) {
100
+ return resolve3D(el, miniCtx(source, time))?.z ?? 0;
101
+ }
102
+ function numberOr(v, fallback) {
103
+ return typeof v === 'number' && Number.isFinite(v) ? v : fallback;
104
+ }
105
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/compositor/project.ts"],"names":[],"mappings":"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"}