@czap/core 0.1.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 (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/addressed-digest.d.ts +15 -0
  4. package/dist/addressed-digest.d.ts.map +1 -0
  5. package/dist/addressed-digest.js +35 -0
  6. package/dist/addressed-digest.js.map +1 -0
  7. package/dist/animation.d.ts +46 -0
  8. package/dist/animation.d.ts.map +1 -0
  9. package/dist/animation.js +70 -0
  10. package/dist/animation.js.map +1 -0
  11. package/dist/assembly.d.ts +25 -0
  12. package/dist/assembly.d.ts.map +1 -0
  13. package/dist/assembly.js +58 -0
  14. package/dist/assembly.js.map +1 -0
  15. package/dist/av-bridge.d.ts +74 -0
  16. package/dist/av-bridge.d.ts.map +1 -0
  17. package/dist/av-bridge.js +107 -0
  18. package/dist/av-bridge.js.map +1 -0
  19. package/dist/av-renderer.d.ts +56 -0
  20. package/dist/av-renderer.d.ts.map +1 -0
  21. package/dist/av-renderer.js +65 -0
  22. package/dist/av-renderer.js.map +1 -0
  23. package/dist/blend.d.ts +61 -0
  24. package/dist/blend.d.ts.map +1 -0
  25. package/dist/blend.js +100 -0
  26. package/dist/blend.js.map +1 -0
  27. package/dist/boundary.d.ts +154 -0
  28. package/dist/boundary.d.ts.map +1 -0
  29. package/dist/boundary.js +269 -0
  30. package/dist/boundary.js.map +1 -0
  31. package/dist/brands.d.ts +63 -0
  32. package/dist/brands.d.ts.map +1 -0
  33. package/dist/brands.js +31 -0
  34. package/dist/brands.js.map +1 -0
  35. package/dist/caps.d.ts +49 -0
  36. package/dist/caps.d.ts.map +1 -0
  37. package/dist/caps.js +73 -0
  38. package/dist/caps.js.map +1 -0
  39. package/dist/capsule.d.ts +77 -0
  40. package/dist/capsule.d.ts.map +1 -0
  41. package/dist/capsule.js +18 -0
  42. package/dist/capsule.js.map +1 -0
  43. package/dist/capsules/boundary-evaluate.d.ts +28 -0
  44. package/dist/capsules/boundary-evaluate.d.ts.map +1 -0
  45. package/dist/capsules/boundary-evaluate.js +117 -0
  46. package/dist/capsules/boundary-evaluate.js.map +1 -0
  47. package/dist/capsules/canonical-cbor.d.ts +13 -0
  48. package/dist/capsules/canonical-cbor.d.ts.map +1 -0
  49. package/dist/capsules/canonical-cbor.js +60 -0
  50. package/dist/capsules/canonical-cbor.js.map +1 -0
  51. package/dist/capsules/token-buffer.d.ts +24 -0
  52. package/dist/capsules/token-buffer.d.ts.map +1 -0
  53. package/dist/capsules/token-buffer.js +53 -0
  54. package/dist/capsules/token-buffer.js.map +1 -0
  55. package/dist/capture.d.ts +40 -0
  56. package/dist/capture.d.ts.map +1 -0
  57. package/dist/capture.js +10 -0
  58. package/dist/capture.js.map +1 -0
  59. package/dist/cbor.d.ts +33 -0
  60. package/dist/cbor.d.ts.map +1 -0
  61. package/dist/cbor.js +179 -0
  62. package/dist/cbor.js.map +1 -0
  63. package/dist/cell.d.ts +53 -0
  64. package/dist/cell.d.ts.map +1 -0
  65. package/dist/cell.js +83 -0
  66. package/dist/cell.js.map +1 -0
  67. package/dist/codec.d.ts +30 -0
  68. package/dist/codec.d.ts.map +1 -0
  69. package/dist/codec.js +25 -0
  70. package/dist/codec.js.map +1 -0
  71. package/dist/component.d.ts +52 -0
  72. package/dist/component.d.ts.map +1 -0
  73. package/dist/component.js +44 -0
  74. package/dist/component.js.map +1 -0
  75. package/dist/composable.d.ts +76 -0
  76. package/dist/composable.d.ts.map +1 -0
  77. package/dist/composable.js +221 -0
  78. package/dist/composable.js.map +1 -0
  79. package/dist/compositor-pool.d.ts +74 -0
  80. package/dist/compositor-pool.d.ts.map +1 -0
  81. package/dist/compositor-pool.js +119 -0
  82. package/dist/compositor-pool.js.map +1 -0
  83. package/dist/compositor.d.ts +90 -0
  84. package/dist/compositor.d.ts.map +1 -0
  85. package/dist/compositor.js +278 -0
  86. package/dist/compositor.js.map +1 -0
  87. package/dist/config.d.ts +72 -0
  88. package/dist/config.d.ts.map +1 -0
  89. package/dist/config.js +97 -0
  90. package/dist/config.js.map +1 -0
  91. package/dist/dag.d.ts +251 -0
  92. package/dist/dag.d.ts.map +1 -0
  93. package/dist/dag.js +450 -0
  94. package/dist/dag.js.map +1 -0
  95. package/dist/defaults.d.ts +45 -0
  96. package/dist/defaults.d.ts.map +1 -0
  97. package/dist/defaults.js +45 -0
  98. package/dist/defaults.js.map +1 -0
  99. package/dist/derived.d.ts +34 -0
  100. package/dist/derived.d.ts.map +1 -0
  101. package/dist/derived.js +101 -0
  102. package/dist/derived.js.map +1 -0
  103. package/dist/diagnostics.d.ts +77 -0
  104. package/dist/diagnostics.d.ts.map +1 -0
  105. package/dist/diagnostics.js +122 -0
  106. package/dist/diagnostics.js.map +1 -0
  107. package/dist/dirty.d.ts +55 -0
  108. package/dist/dirty.d.ts.map +1 -0
  109. package/dist/dirty.js +80 -0
  110. package/dist/dirty.js.map +1 -0
  111. package/dist/easing.d.ts +55 -0
  112. package/dist/easing.d.ts.map +1 -0
  113. package/dist/easing.js +291 -0
  114. package/dist/easing.js.map +1 -0
  115. package/dist/ecs.d.ts +105 -0
  116. package/dist/ecs.d.ts.map +1 -0
  117. package/dist/ecs.js +245 -0
  118. package/dist/ecs.js.map +1 -0
  119. package/dist/fnv.d.ts +14 -0
  120. package/dist/fnv.d.ts.map +1 -0
  121. package/dist/fnv.js +28 -0
  122. package/dist/fnv.js.map +1 -0
  123. package/dist/frame-budget.d.ts +73 -0
  124. package/dist/frame-budget.d.ts.map +1 -0
  125. package/dist/frame-budget.js +114 -0
  126. package/dist/frame-budget.js.map +1 -0
  127. package/dist/gen-frame.d.ts +102 -0
  128. package/dist/gen-frame.d.ts.map +1 -0
  129. package/dist/gen-frame.js +121 -0
  130. package/dist/gen-frame.js.map +1 -0
  131. package/dist/harness/arbitrary-from-schema.d.ts +28 -0
  132. package/dist/harness/arbitrary-from-schema.d.ts.map +1 -0
  133. package/dist/harness/arbitrary-from-schema.js +262 -0
  134. package/dist/harness/arbitrary-from-schema.js.map +1 -0
  135. package/dist/harness/cached-projection.d.ts +19 -0
  136. package/dist/harness/cached-projection.d.ts.map +1 -0
  137. package/dist/harness/cached-projection.js +39 -0
  138. package/dist/harness/cached-projection.js.map +1 -0
  139. package/dist/harness/index.d.ts +16 -0
  140. package/dist/harness/index.d.ts.map +1 -0
  141. package/dist/harness/index.js +15 -0
  142. package/dist/harness/index.js.map +1 -0
  143. package/dist/harness/policy-gate.d.ts +18 -0
  144. package/dist/harness/policy-gate.d.ts.map +1 -0
  145. package/dist/harness/policy-gate.js +46 -0
  146. package/dist/harness/policy-gate.js.map +1 -0
  147. package/dist/harness/pure-transform.d.ts +42 -0
  148. package/dist/harness/pure-transform.d.ts.map +1 -0
  149. package/dist/harness/pure-transform.js +76 -0
  150. package/dist/harness/pure-transform.js.map +1 -0
  151. package/dist/harness/receipted-mutation.d.ts +23 -0
  152. package/dist/harness/receipted-mutation.d.ts.map +1 -0
  153. package/dist/harness/receipted-mutation.js +52 -0
  154. package/dist/harness/receipted-mutation.js.map +1 -0
  155. package/dist/harness/scene-composition.d.ts +19 -0
  156. package/dist/harness/scene-composition.d.ts.map +1 -0
  157. package/dist/harness/scene-composition.js +47 -0
  158. package/dist/harness/scene-composition.js.map +1 -0
  159. package/dist/harness/site-adapter.d.ts +18 -0
  160. package/dist/harness/site-adapter.d.ts.map +1 -0
  161. package/dist/harness/site-adapter.js +38 -0
  162. package/dist/harness/site-adapter.js.map +1 -0
  163. package/dist/harness/state-machine.d.ts +19 -0
  164. package/dist/harness/state-machine.d.ts.map +1 -0
  165. package/dist/harness/state-machine.js +44 -0
  166. package/dist/harness/state-machine.js.map +1 -0
  167. package/dist/hlc.d.ts +99 -0
  168. package/dist/hlc.d.ts.map +1 -0
  169. package/dist/hlc.js +219 -0
  170. package/dist/hlc.js.map +1 -0
  171. package/dist/index.d.ts +104 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +137 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/interpolate.d.ts +14 -0
  176. package/dist/interpolate.d.ts.map +1 -0
  177. package/dist/interpolate.js +31 -0
  178. package/dist/interpolate.js.map +1 -0
  179. package/dist/live-cell.d.ts +46 -0
  180. package/dist/live-cell.d.ts.map +1 -0
  181. package/dist/live-cell.js +154 -0
  182. package/dist/live-cell.js.map +1 -0
  183. package/dist/op.d.ts +58 -0
  184. package/dist/op.d.ts.map +1 -0
  185. package/dist/op.js +171 -0
  186. package/dist/op.js.map +1 -0
  187. package/dist/plan.d.ts +195 -0
  188. package/dist/plan.d.ts.map +1 -0
  189. package/dist/plan.js +211 -0
  190. package/dist/plan.js.map +1 -0
  191. package/dist/protocol.d.ts +33 -0
  192. package/dist/protocol.d.ts.map +1 -0
  193. package/dist/protocol.js +10 -0
  194. package/dist/protocol.js.map +1 -0
  195. package/dist/quantizer-types.d.ts +28 -0
  196. package/dist/quantizer-types.d.ts.map +1 -0
  197. package/dist/quantizer-types.js +9 -0
  198. package/dist/quantizer-types.js.map +1 -0
  199. package/dist/receipt.d.ts +294 -0
  200. package/dist/receipt.d.ts.map +1 -0
  201. package/dist/receipt.js +352 -0
  202. package/dist/receipt.js.map +1 -0
  203. package/dist/runtime-coordinator.d.ts +75 -0
  204. package/dist/runtime-coordinator.d.ts.map +1 -0
  205. package/dist/runtime-coordinator.js +149 -0
  206. package/dist/runtime-coordinator.js.map +1 -0
  207. package/dist/scheduler.d.ts +58 -0
  208. package/dist/scheduler.d.ts.map +1 -0
  209. package/dist/scheduler.js +109 -0
  210. package/dist/scheduler.js.map +1 -0
  211. package/dist/ship-capsule.d.ts +54 -0
  212. package/dist/ship-capsule.d.ts.map +1 -0
  213. package/dist/ship-capsule.js +142 -0
  214. package/dist/ship-capsule.js.map +1 -0
  215. package/dist/ship-manifest.d.ts +45 -0
  216. package/dist/ship-manifest.d.ts.map +1 -0
  217. package/dist/ship-manifest.js +175 -0
  218. package/dist/ship-manifest.js.map +1 -0
  219. package/dist/signal.d.ts +149 -0
  220. package/dist/signal.d.ts.map +1 -0
  221. package/dist/signal.js +277 -0
  222. package/dist/signal.js.map +1 -0
  223. package/dist/speculative.d.ts +67 -0
  224. package/dist/speculative.d.ts.map +1 -0
  225. package/dist/speculative.js +139 -0
  226. package/dist/speculative.js.map +1 -0
  227. package/dist/store.d.ts +39 -0
  228. package/dist/store.d.ts.map +1 -0
  229. package/dist/store.js +42 -0
  230. package/dist/store.js.map +1 -0
  231. package/dist/style.d.ts +119 -0
  232. package/dist/style.d.ts.map +1 -0
  233. package/dist/style.js +168 -0
  234. package/dist/style.js.map +1 -0
  235. package/dist/testing.d.ts +14 -0
  236. package/dist/testing.d.ts.map +1 -0
  237. package/dist/testing.js +14 -0
  238. package/dist/testing.js.map +1 -0
  239. package/dist/theme.d.ts +78 -0
  240. package/dist/theme.d.ts.map +1 -0
  241. package/dist/theme.js +109 -0
  242. package/dist/theme.js.map +1 -0
  243. package/dist/timeline.d.ts +45 -0
  244. package/dist/timeline.d.ts.map +1 -0
  245. package/dist/timeline.js +101 -0
  246. package/dist/timeline.js.map +1 -0
  247. package/dist/token-buffer.d.ts +43 -0
  248. package/dist/token-buffer.d.ts.map +1 -0
  249. package/dist/token-buffer.js +112 -0
  250. package/dist/token-buffer.js.map +1 -0
  251. package/dist/token.d.ts +107 -0
  252. package/dist/token.d.ts.map +1 -0
  253. package/dist/token.js +143 -0
  254. package/dist/token.js.map +1 -0
  255. package/dist/tuple.d.ts +16 -0
  256. package/dist/tuple.d.ts.map +1 -0
  257. package/dist/tuple.js +16 -0
  258. package/dist/tuple.js.map +1 -0
  259. package/dist/type-utils.d.ts +41 -0
  260. package/dist/type-utils.d.ts.map +1 -0
  261. package/dist/type-utils.js +10 -0
  262. package/dist/type-utils.js.map +1 -0
  263. package/dist/typed-ref.d.ts +50 -0
  264. package/dist/typed-ref.d.ts.map +1 -0
  265. package/dist/typed-ref.js +59 -0
  266. package/dist/typed-ref.js.map +1 -0
  267. package/dist/ui-quality.d.ts +50 -0
  268. package/dist/ui-quality.d.ts.map +1 -0
  269. package/dist/ui-quality.js +64 -0
  270. package/dist/ui-quality.js.map +1 -0
  271. package/dist/validation-error.d.ts +25 -0
  272. package/dist/validation-error.d.ts.map +1 -0
  273. package/dist/validation-error.js +32 -0
  274. package/dist/validation-error.js.map +1 -0
  275. package/dist/vector-clock.d.ts +46 -0
  276. package/dist/vector-clock.d.ts.map +1 -0
  277. package/dist/vector-clock.js +91 -0
  278. package/dist/vector-clock.js.map +1 -0
  279. package/dist/video.d.ts +62 -0
  280. package/dist/video.d.ts.map +1 -0
  281. package/dist/video.js +59 -0
  282. package/dist/video.js.map +1 -0
  283. package/dist/wasm-dispatch.d.ts +52 -0
  284. package/dist/wasm-dispatch.d.ts.map +1 -0
  285. package/dist/wasm-dispatch.js +204 -0
  286. package/dist/wasm-dispatch.js.map +1 -0
  287. package/dist/wasm-fallback.d.ts +19 -0
  288. package/dist/wasm-fallback.d.ts.map +1 -0
  289. package/dist/wasm-fallback.js +93 -0
  290. package/dist/wasm-fallback.js.map +1 -0
  291. package/dist/wire.d.ts +49 -0
  292. package/dist/wire.d.ts.map +1 -0
  293. package/dist/wire.js +201 -0
  294. package/dist/wire.js.map +1 -0
  295. package/dist/zap.d.ts +42 -0
  296. package/dist/zap.d.ts.map +1 -0
  297. package/dist/zap.js +172 -0
  298. package/dist/zap.js.map +1 -0
  299. package/package.json +71 -0
  300. package/src/addressed-digest.ts +48 -0
  301. package/src/animation.ts +103 -0
  302. package/src/assembly.ts +76 -0
  303. package/src/av-bridge.ts +161 -0
  304. package/src/av-renderer.ts +118 -0
  305. package/src/blend.ts +135 -0
  306. package/src/boundary.ts +363 -0
  307. package/src/brands.ts +86 -0
  308. package/src/caps.ts +100 -0
  309. package/src/capsule.ts +95 -0
  310. package/src/capsules/boundary-evaluate.ts +128 -0
  311. package/src/capsules/canonical-cbor.ts +60 -0
  312. package/src/capsules/token-buffer.ts +57 -0
  313. package/src/capture.ts +48 -0
  314. package/src/cbor.ts +199 -0
  315. package/src/cell.ts +130 -0
  316. package/src/codec.ts +39 -0
  317. package/src/component.ts +102 -0
  318. package/src/composable.ts +328 -0
  319. package/src/compositor-pool.ts +162 -0
  320. package/src/compositor.ts +387 -0
  321. package/src/config.ts +157 -0
  322. package/src/dag.ts +527 -0
  323. package/src/defaults.ts +60 -0
  324. package/src/derived.ts +164 -0
  325. package/src/diagnostics.ts +186 -0
  326. package/src/dirty.ts +101 -0
  327. package/src/easing.ts +334 -0
  328. package/src/ecs.ts +382 -0
  329. package/src/fnv.ts +31 -0
  330. package/src/frame-budget.ts +149 -0
  331. package/src/gen-frame.ts +229 -0
  332. package/src/harness/arbitrary-from-schema.ts +270 -0
  333. package/src/harness/cached-projection.ts +46 -0
  334. package/src/harness/index.ts +16 -0
  335. package/src/harness/policy-gate.ts +51 -0
  336. package/src/harness/pure-transform.ts +121 -0
  337. package/src/harness/receipted-mutation.ts +59 -0
  338. package/src/harness/scene-composition.ts +54 -0
  339. package/src/harness/site-adapter.ts +43 -0
  340. package/src/harness/state-machine.ts +49 -0
  341. package/src/hlc.ts +238 -0
  342. package/src/index.ts +274 -0
  343. package/src/interpolate.ts +37 -0
  344. package/src/live-cell.ts +199 -0
  345. package/src/op.ts +233 -0
  346. package/src/plan.ts +317 -0
  347. package/src/protocol.ts +49 -0
  348. package/src/quantizer-types.ts +29 -0
  349. package/src/receipt.ts +444 -0
  350. package/src/runtime-coordinator.ts +230 -0
  351. package/src/scheduler.ts +161 -0
  352. package/src/ship-capsule.ts +191 -0
  353. package/src/signal.ts +345 -0
  354. package/src/speculative.ts +186 -0
  355. package/src/store.ts +77 -0
  356. package/src/style.ts +249 -0
  357. package/src/testing.ts +14 -0
  358. package/src/theme.ts +153 -0
  359. package/src/timeline.ts +146 -0
  360. package/src/token-buffer.ts +151 -0
  361. package/src/token.ts +197 -0
  362. package/src/tuple.ts +19 -0
  363. package/src/type-utils.ts +48 -0
  364. package/src/typed-ref.ts +79 -0
  365. package/src/ui-quality.ts +105 -0
  366. package/src/validation-error.ts +34 -0
  367. package/src/vector-clock.ts +111 -0
  368. package/src/video.ts +106 -0
  369. package/src/wasm-dispatch.ts +300 -0
  370. package/src/wasm-fallback.ts +102 -0
  371. package/src/wire.ts +274 -0
  372. package/src/zap.ts +241 -0
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Easing -- pure math easing functions.
3
+ *
4
+ * All functions map t in [0,1] to value in [0,1].
5
+ * Zero dependencies -- pure arithmetic.
6
+ *
7
+ * @module
8
+ */
9
+ type EasingFnShape = (t: number) => number;
10
+ interface SpringConfigShape {
11
+ readonly stiffness: number;
12
+ readonly damping: number;
13
+ readonly mass?: number;
14
+ }
15
+ interface EasingFns {
16
+ readonly linear: EasingFnShape;
17
+ readonly easeInCubic: EasingFnShape;
18
+ readonly easeOutCubic: EasingFnShape;
19
+ readonly easeInOutCubic: EasingFnShape;
20
+ readonly easeOutExpo: EasingFnShape;
21
+ readonly easeOutBack: EasingFnShape;
22
+ readonly easeOutElastic: EasingFnShape;
23
+ readonly easeOutBounce: EasingFnShape;
24
+ readonly ease: EasingFnShape;
25
+ readonly easeIn: EasingFnShape;
26
+ readonly easeOut: EasingFnShape;
27
+ readonly easeInOut: EasingFnShape;
28
+ spring(config: SpringConfigShape): EasingFnShape;
29
+ cubicBezier(x1: number, y1: number, x2: number, y2: number): EasingFnShape;
30
+ springToLinearCSS(config: SpringConfigShape, sampleCount?: number): string;
31
+ springNaturalDuration(config: SpringConfigShape, epsilon?: number): number;
32
+ }
33
+ /**
34
+ * Easing -- pure math easing functions mapping t in [0,1] to value in [0,1].
35
+ * Includes standard CSS easings, cubic-bezier, spring physics, and CSS linear() export.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const t = 0.5;
40
+ * Easing.easeOutCubic(t); // 0.875
41
+ * Easing.linear(t); // 0.5
42
+ * const spring = Easing.spring({ stiffness: 200, damping: 15 });
43
+ * spring(t); // spring-physics interpolated value
44
+ * const css = Easing.springToLinearCSS({ stiffness: 200, damping: 15 });
45
+ * ```
46
+ */
47
+ export declare const Easing: EasingFns;
48
+ export declare namespace Easing {
49
+ /** Signature of an easing function: `(t: [0..1]) => [0..1]`. */
50
+ type Fn = EasingFnShape;
51
+ /** Spring parameters: stiffness, damping, mass. */
52
+ type Config = SpringConfigShape;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=easing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easing.d.ts","sourceRoot":"","sources":["../src/easing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,KAAK,aAAa,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAE3C,UAAU,iBAAiB;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAAC;IACjD,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAAC;IAC3E,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3E,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5E;AAmQD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM,EAAE,SAiBpB,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,gEAAgE;IAChE,KAAY,EAAE,GAAG,aAAa,CAAC;IAC/B,mDAAmD;IACnD,KAAY,MAAM,GAAG,iBAAiB,CAAC;CACxC"}
package/dist/easing.js ADDED
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Easing -- pure math easing functions.
3
+ *
4
+ * All functions map t in [0,1] to value in [0,1].
5
+ * Zero dependencies -- pure arithmetic.
6
+ *
7
+ * @module
8
+ */
9
+ import { EASING_SPRING_STEPS } from './defaults.js';
10
+ /**
11
+ * Linear easing -- no acceleration, constant rate of change.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * Easing.linear(0.5); // 0.5
16
+ * ```
17
+ */
18
+ const linear = (t) => t;
19
+ /**
20
+ * Cubic ease-in -- starts slow, accelerates.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * Easing.easeInCubic(0.5); // 0.125
25
+ * ```
26
+ */
27
+ const easeInCubic = (t) => t * t * t;
28
+ /**
29
+ * Cubic ease-out -- starts fast, decelerates.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * Easing.easeOutCubic(0.5); // 0.875
34
+ * ```
35
+ */
36
+ const easeOutCubic = (t) => {
37
+ const u = 1 - t;
38
+ return 1 - u * u * u;
39
+ };
40
+ /**
41
+ * Cubic ease-in-out -- slow start and end, fast middle.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * Easing.easeInOutCubic(0.25); // 0.0625
46
+ * Easing.easeInOutCubic(0.75); // 0.9375
47
+ * ```
48
+ */
49
+ const easeInOutCubic = (t) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);
50
+ /**
51
+ * Exponential ease-out -- very fast deceleration.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * Easing.easeOutExpo(0.5); // ~0.969
56
+ * ```
57
+ */
58
+ const easeOutExpo = (t) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t));
59
+ /**
60
+ * Ease-out with overshoot -- overshoots target, then settles.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * Easing.easeOutBack(0.8); // ~1.037 (overshoots past 1.0)
65
+ * Easing.easeOutBack(1.0); // 1.0
66
+ * ```
67
+ */
68
+ const easeOutBack = (t) => {
69
+ /** Penner's back easing overshoot coefficient — controls how far the animation overshoots before settling. */
70
+ const BACK_OVERSHOOT = 1.70158;
71
+ const c3 = BACK_OVERSHOOT + 1;
72
+ return 1 + c3 * Math.pow(t - 1, 3) + BACK_OVERSHOOT * Math.pow(t - 1, 2);
73
+ };
74
+ /**
75
+ * Elastic ease-out -- spring-like oscillation that settles at 1.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * Easing.easeOutElastic(0.5); // ~1.015 (oscillates around target)
80
+ * Easing.easeOutElastic(1.0); // 1.0
81
+ * ```
82
+ */
83
+ const easeOutElastic = (t) => {
84
+ if (t === 0 || t === 1)
85
+ return t;
86
+ /** One-third rotation for elastic oscillation — produces ~3 bounces in elastic easing. */
87
+ const ELASTIC_PERIOD = (2 * Math.PI) / 3;
88
+ return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * ELASTIC_PERIOD) + 1;
89
+ };
90
+ /**
91
+ * Bounce ease-out -- simulates a bouncing ball settling at target.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * Easing.easeOutBounce(0.5); // 0.765625
96
+ * Easing.easeOutBounce(1.0); // 1.0
97
+ * ```
98
+ */
99
+ const easeOutBounce = (t) => {
100
+ /** Penner bounce easing coefficients — BOUNCE_AMPLITUDE controls peak height, BOUNCE_DIVISOR controls number of bounces. */
101
+ const BOUNCE_AMPLITUDE = 7.5625;
102
+ const BOUNCE_DIVISOR = 2.75;
103
+ if (t < 1 / BOUNCE_DIVISOR)
104
+ return BOUNCE_AMPLITUDE * t * t;
105
+ if (t < 2 / BOUNCE_DIVISOR) {
106
+ const u = t - 1.5 / BOUNCE_DIVISOR;
107
+ return BOUNCE_AMPLITUDE * u * u + 0.75;
108
+ }
109
+ if (t < 2.5 / BOUNCE_DIVISOR) {
110
+ const u = t - 2.25 / BOUNCE_DIVISOR;
111
+ return BOUNCE_AMPLITUDE * u * u + 0.9375;
112
+ }
113
+ const u = t - 2.625 / BOUNCE_DIVISOR;
114
+ return BOUNCE_AMPLITUDE * u * u + 0.984375;
115
+ };
116
+ /**
117
+ * Creates a CSS cubic-bezier easing function from four control points.
118
+ * Uses binary search to approximate the bezier curve evaluation.
119
+ *
120
+ * @example
121
+ * ```ts
122
+ * const customEase = Easing.cubicBezier(0.42, 0, 0.58, 1);
123
+ * customEase(0.5); // ~0.5 (equivalent to CSS ease-in-out)
124
+ * customEase(0.0); // 0.0
125
+ * customEase(1.0); // 1.0
126
+ * ```
127
+ */
128
+ function cubicBezier(x1, y1, x2, y2) {
129
+ return (t) => {
130
+ if (t <= 0)
131
+ return 0;
132
+ if (t >= 1)
133
+ return 1;
134
+ let lo = 0, hi = 1;
135
+ /** Binary search iterations for cubic-bezier — 20 iterations converges to `<0.001` error for any control points. */
136
+ const BEZIER_ITERATIONS = 20;
137
+ for (let i = 0; i < BEZIER_ITERATIONS; i++) {
138
+ const mid = (lo + hi) / 2;
139
+ const x = 3 * (1 - mid) * (1 - mid) * mid * x1 + 3 * (1 - mid) * mid * mid * x2 + mid * mid * mid;
140
+ if (x < t)
141
+ lo = mid;
142
+ else
143
+ hi = mid;
144
+ }
145
+ const u = (lo + hi) / 2;
146
+ return 3 * (1 - u) * (1 - u) * u * y1 + 3 * (1 - u) * u * u * y2 + u * u * u;
147
+ };
148
+ }
149
+ const ease = cubicBezier(0.25, 0.1, 0.25, 1.0);
150
+ const easeIn = cubicBezier(0.42, 0, 1, 1);
151
+ const easeOut = cubicBezier(0, 0, 0.58, 1);
152
+ const easeInOut = cubicBezier(0.42, 0, 0.58, 1);
153
+ /**
154
+ * Evaluate raw spring physics at time `t` (in the spring's natural time domain,
155
+ * not normalized). Used internally by both `spring` and `springNaturalDuration`
156
+ * to avoid circular dependency.
157
+ */
158
+ function springRaw(t, omega, zeta) {
159
+ if (zeta < 1) {
160
+ // Underdamped
161
+ const omegaD = omega * Math.sqrt(1 - zeta * zeta);
162
+ return 1 - Math.exp(-zeta * omega * t) * (Math.cos(omegaD * t) + ((zeta * omega) / omegaD) * Math.sin(omegaD * t));
163
+ }
164
+ if (zeta === 1) {
165
+ // Critically damped
166
+ return 1 - (1 + omega * t) * Math.exp(-omega * t);
167
+ }
168
+ // Overdamped (zeta > 1)
169
+ const s = Math.sqrt(zeta * zeta - 1);
170
+ const r1 = -omega * (zeta + s);
171
+ const r2 = -omega * (zeta - s);
172
+ const c1 = r2 / (r2 - r1);
173
+ const c2 = -r1 / (r2 - r1);
174
+ return 1 - (c1 * Math.exp(r1 * t) + c2 * Math.exp(r2 * t));
175
+ }
176
+ /**
177
+ * Find the natural settling duration of a spring (in the spring's own time domain).
178
+ * Returns the smallest `t` where `|springRaw(t')|` is within epsilon of 1 for all `t' >= t`.
179
+ * Scans backward at 0.5ms resolution up to 2 seconds.
180
+ *
181
+ * @example
182
+ * ```ts
183
+ * const duration = Easing.springNaturalDuration({ stiffness: 200, damping: 15 });
184
+ * // duration is ~0.4 (seconds in spring time domain)
185
+ * ```
186
+ */
187
+ function _validateSpringConfig(config) {
188
+ if (config.stiffness <= 0 || !Number.isFinite(config.stiffness)) {
189
+ throw new RangeError(`Easing.spring: stiffness must be a positive finite number, got ${config.stiffness}`);
190
+ }
191
+ if (config.damping < 0 || !Number.isFinite(config.damping)) {
192
+ throw new RangeError(`Easing.spring: damping must be a non-negative finite number, got ${config.damping}`);
193
+ }
194
+ if (config.mass !== undefined && (config.mass <= 0 || !Number.isFinite(config.mass))) {
195
+ throw new RangeError(`Easing.spring: mass must be a positive finite number, got ${config.mass}`);
196
+ }
197
+ }
198
+ function springNaturalDuration(config, epsilon = 0.001) {
199
+ _validateSpringConfig(config);
200
+ const { stiffness, damping, mass = 1 } = config;
201
+ const omega = Math.sqrt(stiffness / mass);
202
+ const zeta = damping / (2 * Math.sqrt(stiffness * mass));
203
+ // Scan steps (at 1ms resolution) to find spring settling point
204
+ const steps = EASING_SPRING_STEPS;
205
+ for (let ms = steps; ms > 0; ms--) {
206
+ const t = ms / steps;
207
+ if (Math.abs(springRaw(t, omega, zeta) - 1) >= epsilon)
208
+ return t + 0.025;
209
+ }
210
+ // Fallback 300ms duration if spring never settles within scan window
211
+ return 0.3;
212
+ }
213
+ /**
214
+ * Creates a physics-based spring easing function.
215
+ * Maps t in [0,1] through a damped spring simulation.
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * const bounce = Easing.spring({ stiffness: 200, damping: 10 });
220
+ * bounce(0.0); // 0.0
221
+ * bounce(0.5); // overshoots past 1.0 before settling
222
+ * bounce(1.0); // 1.0
223
+ * ```
224
+ */
225
+ function spring(config) {
226
+ _validateSpringConfig(config);
227
+ const { stiffness, damping, mass = 1 } = config;
228
+ const omega = Math.sqrt(stiffness / mass);
229
+ const zeta = damping / (2 * Math.sqrt(stiffness * mass));
230
+ const naturalDuration = springNaturalDuration(config);
231
+ return (t) => {
232
+ if (t <= 0)
233
+ return 0;
234
+ if (t >= 1)
235
+ return 1;
236
+ const scaledT = t * naturalDuration;
237
+ return springRaw(scaledT, omega, zeta);
238
+ };
239
+ }
240
+ /**
241
+ * Sample a spring easing at `sampleCount` evenly-spaced points and
242
+ * return a CSS `linear()` timing function string for off-main-thread animation.
243
+ *
244
+ * @example
245
+ * ```ts
246
+ * const css = Easing.springToLinearCSS({ stiffness: 200, damping: 15 }, 16);
247
+ * // css is 'linear(0.0000, 0.1234, ..., 1.0000)' with 17 sample points
248
+ * element.style.transitionTimingFunction = css;
249
+ * ```
250
+ */
251
+ function springToLinearCSS(config, sampleCount = 32) {
252
+ const fn = spring(config);
253
+ const points = [];
254
+ for (let i = 0; i <= sampleCount; i++) {
255
+ points.push(fn(i / sampleCount).toFixed(4));
256
+ }
257
+ return `linear(${points.join(', ')})`;
258
+ }
259
+ /**
260
+ * Easing -- pure math easing functions mapping t in [0,1] to value in [0,1].
261
+ * Includes standard CSS easings, cubic-bezier, spring physics, and CSS linear() export.
262
+ *
263
+ * @example
264
+ * ```ts
265
+ * const t = 0.5;
266
+ * Easing.easeOutCubic(t); // 0.875
267
+ * Easing.linear(t); // 0.5
268
+ * const spring = Easing.spring({ stiffness: 200, damping: 15 });
269
+ * spring(t); // spring-physics interpolated value
270
+ * const css = Easing.springToLinearCSS({ stiffness: 200, damping: 15 });
271
+ * ```
272
+ */
273
+ export const Easing = {
274
+ linear,
275
+ easeInCubic,
276
+ easeOutCubic,
277
+ easeInOutCubic,
278
+ easeOutExpo,
279
+ easeOutBack,
280
+ easeOutElastic,
281
+ easeOutBounce,
282
+ ease,
283
+ easeIn,
284
+ easeOut,
285
+ easeInOut,
286
+ spring,
287
+ cubicBezier,
288
+ springToLinearCSS,
289
+ springNaturalDuration,
290
+ };
291
+ //# sourceMappingURL=easing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easing.js","sourceRoot":"","sources":["../src/easing.ts"],"names":[],"mappings":"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"}
package/dist/ecs.d.ts ADDED
@@ -0,0 +1,105 @@
1
+ /**
2
+ * ECS -- Entity, Part, System, World.
3
+ *
4
+ * Composition over inheritance. Entities are bags of parts,
5
+ * systems operate on entities matching part queries.
6
+ *
7
+ * @module
8
+ */
9
+ import type { Scope, Schema } from 'effect';
10
+ import { Effect } from 'effect';
11
+ /** Nominal-typed identifier for an ECS entity — a branded string minted via the {@link EntityId} helper. */
12
+ export type EntityId = string & {
13
+ readonly _brand: 'EntityId';
14
+ };
15
+ /** Brand an arbitrary string as an `EntityId`. Sanctioned single-site cast. */
16
+ export declare const EntityId: (value: string) => EntityId;
17
+ interface EntityShape {
18
+ readonly id: EntityId;
19
+ readonly components: ReadonlyMap<string, unknown>;
20
+ }
21
+ interface PartShape<T = unknown> {
22
+ readonly name: string;
23
+ readonly schema: Schema.Schema<T>;
24
+ }
25
+ interface DenseStoreShape {
26
+ readonly name: string;
27
+ readonly capacity: number;
28
+ readonly _dense: true;
29
+ /** Entity ID `->` index in the data array */
30
+ readonly entityToIndex: Map<EntityId, number>;
31
+ /** Index `->` Entity ID (for iteration) */
32
+ readonly indexToEntity: EntityId[];
33
+ /** The raw Float64Array backing store */
34
+ readonly data: Float64Array;
35
+ /** Current number of live entries */
36
+ count: number;
37
+ get(entityId: EntityId): number | undefined;
38
+ set(entityId: EntityId, value: number): void;
39
+ has(entityId: EntityId): boolean;
40
+ delete(entityId: EntityId): boolean;
41
+ reset(): void;
42
+ /** Direct typed array view for tight-loop iteration (length = count) */
43
+ view(): Float64Array;
44
+ /** All entity IDs with values, in dense order */
45
+ entities(): readonly EntityId[];
46
+ }
47
+ interface DenseSystemShape {
48
+ readonly name: string;
49
+ readonly query: readonly string[];
50
+ readonly _denseSystem: true;
51
+ /**
52
+ * Execute receives dense stores keyed by component name.
53
+ * Systems iterate the typed arrays directly -- zero allocation per tick.
54
+ */
55
+ execute(stores: ReadonlyMap<string, DenseStoreShape>): Effect.Effect<void>;
56
+ }
57
+ interface SystemShape {
58
+ readonly name: string;
59
+ readonly query: readonly string[];
60
+ readonly _denseSystem?: undefined;
61
+ /** Second argument is the world — use it to write computed output components back. */
62
+ execute(entities: readonly EntityShape[], world?: WorldShape): Effect.Effect<void>;
63
+ }
64
+ type AnySystemShape = SystemShape | DenseSystemShape;
65
+ interface WorldShape {
66
+ spawn(components?: Record<string, unknown>): Effect.Effect<EntityId>;
67
+ despawn(id: EntityId): Effect.Effect<void>;
68
+ addComponent<T>(id: EntityId, component: PartShape<T>, value: T): Effect.Effect<void>;
69
+ /** Schema-free component write — used by systems to persist computed output values. */
70
+ setComponent(id: EntityId, name: string, value: unknown): Effect.Effect<void>;
71
+ removeComponent(id: EntityId, name: string): Effect.Effect<void>;
72
+ query(...componentNames: string[]): Effect.Effect<readonly EntityShape[]>;
73
+ addSystem(system: AnySystemShape): Effect.Effect<void>;
74
+ tick(): Effect.Effect<void>;
75
+ /** Register a dense store so the world can wire it into dense systems */
76
+ addDenseStore(store: DenseStoreShape): Effect.Effect<void>;
77
+ }
78
+ declare function _makeWorld(): Effect.Effect<WorldShape, never, Scope.Scope>;
79
+ /**
80
+ * Part namespace — factories for ECS component stores.
81
+ *
82
+ * Currently exposes the dense `Float64Array`-backed store used for hot-path
83
+ * numeric state; sparse/object-valued parts are registered ad-hoc via
84
+ * {@link World}.`addComponent`.
85
+ */
86
+ export declare const Part: {
87
+ dense: (name: string, capacity: number) => DenseStoreShape;
88
+ } & Record<string, never>;
89
+ /** World namespace — construct the ECS world that ticks systems over entities. */
90
+ export declare const World: {
91
+ /** Scoped Effect that produces a fresh ECS {@link World.Shape}. */
92
+ make: typeof _makeWorld;
93
+ };
94
+ export declare namespace Part {
95
+ /** Structural shape of a typed component definition (`name` + schema). */
96
+ type Shape<T = unknown> = PartShape<T>;
97
+ /** Alias for the dense `Float64Array`-backed store. */
98
+ type Dense = DenseStoreShape;
99
+ }
100
+ export declare namespace World {
101
+ /** Structural shape of an ECS world: spawn/despawn, components, queries, systems, tick. */
102
+ type Shape = WorldShape;
103
+ }
104
+ export type { EntityShape as Entity, SystemShape as System, DenseSystemShape as DenseSystem, DenseStoreShape as DenseStore, };
105
+ //# sourceMappingURL=ecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecs.d.ts","sourceRoot":"","sources":["../src/ecs.ts"],"names":[],"mappings":"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"}