@wardic/dom 0.0.0-stage → 1.0.0-rc.2

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 (285) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -2
  3. package/THIRD_PARTY_NOTICES.md +145 -0
  4. package/dist/Appear.d.ts +24 -0
  5. package/dist/Appear.d.ts.map +1 -0
  6. package/dist/Appear.js +25 -0
  7. package/dist/Appear.js.map +1 -0
  8. package/dist/Color.d.ts +14 -0
  9. package/dist/Color.d.ts.map +1 -0
  10. package/dist/Color.js +16 -0
  11. package/dist/Color.js.map +1 -0
  12. package/dist/DomAnnouncer.d.ts +13 -0
  13. package/dist/DomAnnouncer.d.ts.map +1 -0
  14. package/dist/DomAnnouncer.js +14 -0
  15. package/dist/DomAnnouncer.js.map +1 -0
  16. package/dist/DomClock.d.ts +11 -0
  17. package/dist/DomClock.d.ts.map +1 -0
  18. package/dist/DomClock.js +12 -0
  19. package/dist/DomClock.js.map +1 -0
  20. package/dist/DomDefaultTransition.d.ts +12 -0
  21. package/dist/DomDefaultTransition.d.ts.map +1 -0
  22. package/dist/DomDefaultTransition.js +13 -0
  23. package/dist/DomDefaultTransition.js.map +1 -0
  24. package/dist/DomInput.d.ts +13 -0
  25. package/dist/DomInput.d.ts.map +1 -0
  26. package/dist/DomInput.js +15 -0
  27. package/dist/DomInput.js.map +1 -0
  28. package/dist/DomInterpolators.d.ts +13 -0
  29. package/dist/DomInterpolators.d.ts.map +1 -0
  30. package/dist/DomInterpolators.js +14 -0
  31. package/dist/DomInterpolators.js.map +1 -0
  32. package/dist/DomKeyRules.d.ts +13 -0
  33. package/dist/DomKeyRules.d.ts.map +1 -0
  34. package/dist/DomKeyRules.js +14 -0
  35. package/dist/DomKeyRules.js.map +1 -0
  36. package/dist/DomPositionalKeys.d.ts +13 -0
  37. package/dist/DomPositionalKeys.d.ts.map +1 -0
  38. package/dist/DomPositionalKeys.js +14 -0
  39. package/dist/DomPositionalKeys.js.map +1 -0
  40. package/dist/DomProbe.d.ts +13 -0
  41. package/dist/DomProbe.d.ts.map +1 -0
  42. package/dist/DomProbe.js +14 -0
  43. package/dist/DomProbe.js.map +1 -0
  44. package/dist/DomProjectionSystem.d.ts +28 -0
  45. package/dist/DomProjectionSystem.d.ts.map +1 -0
  46. package/dist/DomProjectionSystem.js +41 -0
  47. package/dist/DomProjectionSystem.js.map +1 -0
  48. package/dist/DomRenderer.d.ts +13 -0
  49. package/dist/DomRenderer.d.ts.map +1 -0
  50. package/dist/DomRenderer.js +15 -0
  51. package/dist/DomRenderer.js.map +1 -0
  52. package/dist/FlushGate.d.ts +48 -0
  53. package/dist/FlushGate.d.ts.map +1 -0
  54. package/dist/FlushGate.js +62 -0
  55. package/dist/FlushGate.js.map +1 -0
  56. package/dist/MeasuredPair.d.ts +14 -0
  57. package/dist/MeasuredPair.d.ts.map +1 -0
  58. package/dist/MeasuredPair.js +16 -0
  59. package/dist/MeasuredPair.js.map +1 -0
  60. package/dist/OwnValues.d.ts +14 -0
  61. package/dist/OwnValues.d.ts.map +1 -0
  62. package/dist/OwnValues.js +15 -0
  63. package/dist/OwnValues.js.map +1 -0
  64. package/dist/ProjectionSystem.d.ts +34 -0
  65. package/dist/ProjectionSystem.d.ts.map +1 -0
  66. package/dist/ProjectionSystem.js +29 -0
  67. package/dist/ProjectionSystem.js.map +1 -0
  68. package/dist/ReorderController.d.ts +41 -0
  69. package/dist/ReorderController.d.ts.map +1 -0
  70. package/dist/ReorderController.js +44 -0
  71. package/dist/ReorderController.js.map +1 -0
  72. package/dist/Report.d.ts +12 -0
  73. package/dist/Report.d.ts.map +1 -0
  74. package/dist/Report.js +13 -0
  75. package/dist/Report.js.map +1 -0
  76. package/dist/ScrollOffset.d.ts +34 -0
  77. package/dist/ScrollOffset.d.ts.map +1 -0
  78. package/dist/ScrollOffset.js +42 -0
  79. package/dist/ScrollOffset.js.map +1 -0
  80. package/dist/Style.d.ts +15 -0
  81. package/dist/Style.d.ts.map +1 -0
  82. package/dist/Style.js +17 -0
  83. package/dist/Style.js.map +1 -0
  84. package/dist/Svg.d.ts +13 -0
  85. package/dist/Svg.d.ts.map +1 -0
  86. package/dist/Svg.js +14 -0
  87. package/dist/Svg.js.map +1 -0
  88. package/dist/Variables.d.ts +13 -0
  89. package/dist/Variables.d.ts.map +1 -0
  90. package/dist/Variables.js +14 -0
  91. package/dist/Variables.js.map +1 -0
  92. package/dist/index.d.ts +72 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +60 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/internal/announcer.d.ts +50 -0
  97. package/dist/internal/announcer.d.ts.map +1 -0
  98. package/dist/internal/announcer.js +115 -0
  99. package/dist/internal/announcer.js.map +1 -0
  100. package/dist/internal/appear.d.ts +169 -0
  101. package/dist/internal/appear.d.ts.map +1 -0
  102. package/dist/internal/appear.js +499 -0
  103. package/dist/internal/appear.js.map +1 -0
  104. package/dist/internal/auto-scroll.d.ts +24 -0
  105. package/dist/internal/auto-scroll.d.ts.map +1 -0
  106. package/dist/internal/auto-scroll.js +124 -0
  107. package/dist/internal/auto-scroll.js.map +1 -0
  108. package/dist/internal/clock.d.ts +19 -0
  109. package/dist/internal/clock.d.ts.map +1 -0
  110. package/dist/internal/clock.js +39 -0
  111. package/dist/internal/clock.js.map +1 -0
  112. package/dist/internal/colors.d.ts +45 -0
  113. package/dist/internal/colors.d.ts.map +1 -0
  114. package/dist/internal/colors.js +193 -0
  115. package/dist/internal/colors.js.map +1 -0
  116. package/dist/internal/complex.d.ts +24 -0
  117. package/dist/internal/complex.d.ts.map +1 -0
  118. package/dist/internal/complex.js +28 -0
  119. package/dist/internal/complex.js.map +1 -0
  120. package/dist/internal/content-watch.d.ts +20 -0
  121. package/dist/internal/content-watch.d.ts.map +1 -0
  122. package/dist/internal/content-watch.js +76 -0
  123. package/dist/internal/content-watch.js.map +1 -0
  124. package/dist/internal/default-transition.d.ts +25 -0
  125. package/dist/internal/default-transition.d.ts.map +1 -0
  126. package/dist/internal/default-transition.js +41 -0
  127. package/dist/internal/default-transition.js.map +1 -0
  128. package/dist/internal/drag-defaults.d.ts +18 -0
  129. package/dist/internal/drag-defaults.d.ts.map +1 -0
  130. package/dist/internal/drag-defaults.js +38 -0
  131. package/dist/internal/drag-defaults.js.map +1 -0
  132. package/dist/internal/gate.d.ts +186 -0
  133. package/dist/internal/gate.d.ts.map +1 -0
  134. package/dist/internal/gate.js +453 -0
  135. package/dist/internal/gate.js.map +1 -0
  136. package/dist/internal/input.d.ts +41 -0
  137. package/dist/internal/input.d.ts.map +1 -0
  138. package/dist/internal/input.js +476 -0
  139. package/dist/internal/input.js.map +1 -0
  140. package/dist/internal/interpolators.d.ts +19 -0
  141. package/dist/internal/interpolators.d.ts.map +1 -0
  142. package/dist/internal/interpolators.js +30 -0
  143. package/dist/internal/interpolators.js.map +1 -0
  144. package/dist/internal/key-rules.d.ts +11 -0
  145. package/dist/internal/key-rules.d.ts.map +1 -0
  146. package/dist/internal/key-rules.js +244 -0
  147. package/dist/internal/key-rules.js.map +1 -0
  148. package/dist/internal/measure.d.ts +150 -0
  149. package/dist/internal/measure.d.ts.map +1 -0
  150. package/dist/internal/measure.js +278 -0
  151. package/dist/internal/measure.js.map +1 -0
  152. package/dist/internal/measured-pairs.d.ts +38 -0
  153. package/dist/internal/measured-pairs.d.ts.map +1 -0
  154. package/dist/internal/measured-pairs.js +251 -0
  155. package/dist/internal/measured-pairs.js.map +1 -0
  156. package/dist/internal/own-values.d.ts +35 -0
  157. package/dist/internal/own-values.d.ts.map +1 -0
  158. package/dist/internal/own-values.js +117 -0
  159. package/dist/internal/own-values.js.map +1 -0
  160. package/dist/internal/pass-ends.d.ts +21 -0
  161. package/dist/internal/pass-ends.d.ts.map +1 -0
  162. package/dist/internal/pass-ends.js +14 -0
  163. package/dist/internal/pass-ends.js.map +1 -0
  164. package/dist/internal/positional-keys.d.ts +16 -0
  165. package/dist/internal/positional-keys.d.ts.map +1 -0
  166. package/dist/internal/positional-keys.js +21 -0
  167. package/dist/internal/positional-keys.js.map +1 -0
  168. package/dist/internal/probe.d.ts +10 -0
  169. package/dist/internal/probe.d.ts.map +1 -0
  170. package/dist/internal/probe.js +117 -0
  171. package/dist/internal/probe.js.map +1 -0
  172. package/dist/internal/projection-defaults.d.ts +34 -0
  173. package/dist/internal/projection-defaults.d.ts.map +1 -0
  174. package/dist/internal/projection-defaults.js +21 -0
  175. package/dist/internal/projection-defaults.js.map +1 -0
  176. package/dist/internal/projection.d.ts +529 -0
  177. package/dist/internal/projection.d.ts.map +1 -0
  178. package/dist/internal/projection.js +4990 -0
  179. package/dist/internal/projection.js.map +1 -0
  180. package/dist/internal/renderer.d.ts +86 -0
  181. package/dist/internal/renderer.d.ts.map +1 -0
  182. package/dist/internal/renderer.js +616 -0
  183. package/dist/internal/renderer.js.map +1 -0
  184. package/dist/internal/reorder.d.ts +159 -0
  185. package/dist/internal/reorder.d.ts.map +1 -0
  186. package/dist/internal/reorder.js +437 -0
  187. package/dist/internal/reorder.js.map +1 -0
  188. package/dist/internal/report.d.ts +30 -0
  189. package/dist/internal/report.d.ts.map +1 -0
  190. package/dist/internal/report.js +60 -0
  191. package/dist/internal/report.js.map +1 -0
  192. package/dist/internal/require-global.d.ts +11 -0
  193. package/dist/internal/require-global.d.ts.map +1 -0
  194. package/dist/internal/require-global.js +31 -0
  195. package/dist/internal/require-global.js.map +1 -0
  196. package/dist/internal/reveal.d.ts +16 -0
  197. package/dist/internal/reveal.d.ts.map +1 -0
  198. package/dist/internal/reveal.js +66 -0
  199. package/dist/internal/reveal.js.map +1 -0
  200. package/dist/internal/runner.d.ts +21 -0
  201. package/dist/internal/runner.d.ts.map +1 -0
  202. package/dist/internal/runner.js +48 -0
  203. package/dist/internal/runner.js.map +1 -0
  204. package/dist/internal/scale-correction.d.ts +80 -0
  205. package/dist/internal/scale-correction.d.ts.map +1 -0
  206. package/dist/internal/scale-correction.js +227 -0
  207. package/dist/internal/scale-correction.js.map +1 -0
  208. package/dist/internal/scroll.d.ts +35 -0
  209. package/dist/internal/scroll.d.ts.map +1 -0
  210. package/dist/internal/scroll.js +244 -0
  211. package/dist/internal/scroll.js.map +1 -0
  212. package/dist/internal/scrollers.d.ts +35 -0
  213. package/dist/internal/scrollers.d.ts.map +1 -0
  214. package/dist/internal/scrollers.js +38 -0
  215. package/dist/internal/scrollers.js.map +1 -0
  216. package/dist/internal/starting-style.d.ts +141 -0
  217. package/dist/internal/starting-style.d.ts.map +1 -0
  218. package/dist/internal/starting-style.js +300 -0
  219. package/dist/internal/starting-style.js.map +1 -0
  220. package/dist/internal/svg.d.ts +60 -0
  221. package/dist/internal/svg.d.ts.map +1 -0
  222. package/dist/internal/svg.js +257 -0
  223. package/dist/internal/svg.js.map +1 -0
  224. package/dist/internal/variables.d.ts +45 -0
  225. package/dist/internal/variables.d.ts.map +1 -0
  226. package/dist/internal/variables.js +92 -0
  227. package/dist/internal/variables.js.map +1 -0
  228. package/package.json +65 -4
  229. package/src/Appear.ts +45 -0
  230. package/src/Color.ts +24 -0
  231. package/src/DomAnnouncer.ts +22 -0
  232. package/src/DomClock.ts +13 -0
  233. package/src/DomDefaultTransition.ts +16 -0
  234. package/src/DomInput.ts +22 -0
  235. package/src/DomInterpolators.ts +16 -0
  236. package/src/DomKeyRules.ts +17 -0
  237. package/src/DomPositionalKeys.ts +16 -0
  238. package/src/DomProbe.ts +15 -0
  239. package/src/DomProjectionSystem.ts +44 -0
  240. package/src/DomRenderer.ts +26 -0
  241. package/src/FlushGate.ts +81 -0
  242. package/src/MeasuredPair.ts +15 -0
  243. package/src/OwnValues.ts +19 -0
  244. package/src/ProjectionSystem.ts +51 -0
  245. package/src/ReorderController.ts +72 -0
  246. package/src/Report.ts +17 -0
  247. package/src/ScrollOffset.ts +54 -0
  248. package/src/Style.ts +37 -0
  249. package/src/Svg.ts +21 -0
  250. package/src/Variables.ts +17 -0
  251. package/src/index.ts +106 -0
  252. package/src/internal/announcer.ts +132 -0
  253. package/src/internal/appear.ts +739 -0
  254. package/src/internal/auto-scroll.ts +176 -0
  255. package/src/internal/clock.ts +45 -0
  256. package/src/internal/colors.ts +258 -0
  257. package/src/internal/complex.ts +29 -0
  258. package/src/internal/content-watch.ts +84 -0
  259. package/src/internal/culori.d.ts +58 -0
  260. package/src/internal/default-transition.ts +50 -0
  261. package/src/internal/drag-defaults.ts +54 -0
  262. package/src/internal/gate.ts +593 -0
  263. package/src/internal/input.ts +579 -0
  264. package/src/internal/interpolators.ts +33 -0
  265. package/src/internal/key-rules.ts +357 -0
  266. package/src/internal/measure.ts +357 -0
  267. package/src/internal/measured-pairs.ts +297 -0
  268. package/src/internal/own-values.ts +166 -0
  269. package/src/internal/pass-ends.ts +23 -0
  270. package/src/internal/positional-keys.ts +24 -0
  271. package/src/internal/probe.ts +176 -0
  272. package/src/internal/projection-defaults.ts +45 -0
  273. package/src/internal/projection.ts +5999 -0
  274. package/src/internal/renderer.ts +646 -0
  275. package/src/internal/reorder.ts +604 -0
  276. package/src/internal/report.ts +69 -0
  277. package/src/internal/require-global.ts +46 -0
  278. package/src/internal/reveal.ts +69 -0
  279. package/src/internal/runner.ts +64 -0
  280. package/src/internal/scale-correction.ts +310 -0
  281. package/src/internal/scroll.ts +356 -0
  282. package/src/internal/scrollers.ts +51 -0
  283. package/src/internal/starting-style.ts +396 -0
  284. package/src/internal/svg.ts +300 -0
  285. package/src/internal/variables.ts +145 -0
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Appear animations (#48, ADR-0044): a server-rendered mount animation played in CSS from first
3
+ * paint, which the client takes over at mount (the **Handoff**). The DOM's half, framework-free:
4
+ *
5
+ * - **The sampler** steps a binding's mount animation through core's machines, as a 60 Hz client
6
+ * would (`Machine.CATCH_UP_DT`), projects each Frame with the DOM's `project`, and writes it as one
7
+ * `@keyframes` rule, thinned to the stops a straight line can't stand in for, within a tolerance
8
+ * per key below what a screen shows (decision 9). One rule a spec, cached across requests by it.
9
+ * - **A sheet** collects one render's rules. An element's inline style names only a custom
10
+ * property, `animation: var(--wardic-aN)`, which the sheet defines in `:root` once the render
11
+ * knows its timing (decision 5); undefined, it leaves the element at its Starting style.
12
+ * - **The Handoff's reads:** the element's `wardic-…` animation, how far it has got, and its
13
+ * removal, written in the same task as the engine's first frame (decision 6).
14
+ *
15
+ * @module
16
+ */
17
+ import * as BaseValue from "@wardic/core/BaseValue";
18
+ import * as Machine from "@wardic/core/Machine";
19
+ import * as Projection from "@wardic/core/Projection";
20
+ import * as Arr from "effect/Array";
21
+ import * as Bool from "effect/Boolean";
22
+ import * as Option from "effect/Option";
23
+ import * as Order from "effect/Order";
24
+ import * as Predicate from "effect/Predicate";
25
+ import * as Rec from "effect/Record";
26
+ import * as Result from "effect/Result";
27
+ import * as UndefinedOr from "effect/UndefinedOr";
28
+ import { spacesRegistered } from "./colors.js";
29
+ import { drawnUnitOf, project, TEMPLATE_KEY } from "./renderer.js";
30
+ import { dashCase, isPathKey, isSvgInnerTag, splitPatchForTag, svgAttrNameOf } from "./svg.js";
31
+ /** The prefix every Appear rule's name starts with. */
32
+ export const PREFIX = "wardic-";
33
+ /** The longest mount animation sampled, in seconds; a longer one keeps its Starting style. */
34
+ export const MAX_SECONDS = 60;
35
+ const MAX_STEPS = Math.round(MAX_SECONDS / Machine.CATCH_UP_DT);
36
+ // --- The spec's name ---------------------------------------------------------------------------
37
+ /** cyrb53, a 53-bit string hash: plenty for a page's specs, and the same in every engine. */
38
+ const hash53 = (text) => {
39
+ const [h1, h2] = Arr.reduce(Array.from(text), [0xdeadbeef, 0x41c6ce57], ([a, b], char) => {
40
+ const code = char.codePointAt(0);
41
+ return [Math.imul(a ^ code, 2654435761), Math.imul(b ^ code, 1597334677)];
42
+ });
43
+ const a = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
44
+ const b = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
45
+ return (4294967296 * (2097151 & b) + (a >>> 0)).toString(36);
46
+ };
47
+ /** Each spec's name by its text, so a page's elements sharing a spec hash it once; the oldest dropped past `NAMES_SIZE`. */
48
+ // Module state (#460, Q7): a cache keyed by what it caches: a bounded set of names.
49
+ const names = new Map();
50
+ const NAMES_SIZE = 4096;
51
+ /** The rule's name for a spec: its key, tag, repeat and projection, hashed. */
52
+ // Once a text: a server names each element's spec.
53
+ export const nameOf = (spec) => {
54
+ const text = specTextOf(spec);
55
+ return Option.getOrElse(Option.fromUndefinedOr(names.get(text)), () => {
56
+ const name = `${PREFIX}${hash53(text)}`;
57
+ if (names.size >= NAMES_SIZE)
58
+ names.clear();
59
+ names.set(text, name);
60
+ return name;
61
+ });
62
+ };
63
+ /** A spec's text, which its rule's name hashes: its tag, repeat, key and projection. */
64
+ const specTextOf = (spec) => `${UndefinedOr.match(spec.tag, { onUndefined: () => "", onDefined: (tag) => tag })}|${spec.infinite === true}|${spec.key}${Bool.match(spec.projected === true, { onTrue: () => "|projected", onFalse: () => "" })}`;
65
+ // --- Sampling ----------------------------------------------------------------------------------
66
+ /**
67
+ * The spec's Frames' values at 0, 1/60 s, 2/60 s… to the settled one: `startAt`'s catch-up steps,
68
+ * so the client's `startAt(k / 60)` draws the `k`th. Each copied, since a machine may rewrite its
69
+ * Frame in place (`springValues`, ADR-0030 decision 11). `None` past `MAX_SECONDS`.
70
+ */
71
+ const framesOf = (machine) => {
72
+ const step = machine.start();
73
+ const copy = (frame) => ({ values: { ...frame.value }, done: frame.done });
74
+ // Copied before the next step, which may rewrite it.
75
+ const first = copy(step(0));
76
+ const rest = Arr.unfold({ frame: first, steps: 0 }, ({ frame, steps }) => Bool.match(frame.done || steps >= MAX_STEPS, {
77
+ onTrue: () => Option.none(),
78
+ onFalse: () => {
79
+ const next = copy(step(Machine.CATCH_UP_DT));
80
+ return Option.some([next, { frame: next, steps: steps + 1 }]);
81
+ },
82
+ }));
83
+ const frames = Arr.prepend(rest, first);
84
+ return Option.liftPredicate(Arr.map(frames, (frame) => frame.values), () => Arr.lastNonEmpty(frames).done);
85
+ };
86
+ const NUMBER_TOKEN = /(-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)([a-z%]*)/gi;
87
+ /** A value split into its numbers and the text around them; a number is one token with no text. */
88
+ const splitOf = (value) => Bool.match(Predicate.isNumber(value), {
89
+ onTrue: () => ({ skeleton: "#", numbers: [value], decimals: [Number.POSITIVE_INFINITY], units: [""] }),
90
+ onFalse: () => {
91
+ const text = String(value);
92
+ const tokens = Array.from(text.matchAll(NUMBER_TOKEN));
93
+ return {
94
+ skeleton: text.replace(NUMBER_TOKEN, "#$2"),
95
+ numbers: Arr.map(tokens, (match) => Number(match[1])),
96
+ decimals: Arr.map(tokens, (match) => decimalsOf(String(match[1]))),
97
+ units: Arr.map(tokens, (match) => String(match[2]).toLowerCase()),
98
+ };
99
+ },
100
+ });
101
+ /** How many decimals `token` is written with: none for `12`, two for `0.53`. */
102
+ const decimalsOf = (token) => Option.match(Option.fromNullishOr(/\.(\d+)/.exec(token)), { onNone: () => 0, onSome: (match) => String(match[1]).length });
103
+ /**
104
+ * The tolerance per key and token (decision 9): what a straight line between two stops may miss a
105
+ * sample by. A bare number by its key's unit: 0.1 px, 0.1°, 0.001 of a scale, 0.002 for the rest
106
+ * (opacity). A token in a string by its own unit, `px` and `deg` alike; any other by its part of
107
+ * its range, 1/500 (a colour channel's half step), and never finer than the decimals it's written
108
+ * with.
109
+ */
110
+ const tolerancesOf = (key, svgInner, series) => Arr.map(Arr.headNonEmpty(series).numbers, (_, token) => {
111
+ const values = Arr.map(series, (split) => split.numbers[token]);
112
+ const span = Math.max(...values) - Math.min(...values);
113
+ const decimals = Math.min(6, Math.max(...Arr.map(series, (split) => split.decimals[token])));
114
+ const unit = Arr.headNonEmpty(series).units[token];
115
+ const bare = Arr.headNonEmpty(series).skeleton === "#";
116
+ return Math.max(1e-9, toleranceFor(key, svgInner, bare, unit, span, 10 ** -decimals));
117
+ });
118
+ const toleranceFor = (key, svgInner, bare, unit, span, quantum) => Bool.match(bare, {
119
+ onTrue: () => Bool.match(svgInner, { onTrue: () => svgTolerance(key), onFalse: () => bareTolerance(key) }),
120
+ onFalse: () => Bool.match(unit === "px" || unit === "deg", {
121
+ onTrue: () => Math.max(0.1, quantum),
122
+ onFalse: () => Math.max(span / 500, quantum),
123
+ }),
124
+ });
125
+ /** A bare number's tolerance, by the unit `project` draws `key` in. */
126
+ const bareTolerance = (key) => Bool.match(drawnUnitOf(key) === "", {
127
+ onTrue: () => Bool.match(BaseValue.TRANSFORM_IDENTITY[key] === 1, { onTrue: () => 0.001, onFalse: () => 0.002 }),
128
+ onFalse: () => 0.1,
129
+ });
130
+ /** The opacities an svg-inner element draws as attributes, judged as opacity is. */
131
+ const SVG_OPACITIES = new Set(["opacity", "fillOpacity", "strokeOpacity", "stopOpacity", "floodOpacity"]);
132
+ /**
133
+ * A bare number's tolerance on an svg-inner element (#245), by what its attribute means: a
134
+ * normalised dash (`pathLength`, `pathOffset`, `pathSpacing`: 0 to 1 of the path) 0.001, an
135
+ * opacity 0.002, any other attribute in user units, a CSS px, 0.1. A key drawn as style (the
136
+ * transform's) as on HTML.
137
+ */
138
+ const svgTolerance = (key) => Bool.match(isPathKey(key), {
139
+ onTrue: () => 0.001,
140
+ onFalse: () => Option.match(svgAttrNameOf(key), {
141
+ onNone: () => bareTolerance(key),
142
+ onSome: () => Bool.match(SVG_OPACITIES.has(key), { onTrue: () => 0.002, onFalse: () => 0.1 }),
143
+ }),
144
+ });
145
+ /** A series of Frames split per key, with each key's tolerances: what the stops are judged on. */
146
+ const judged = (frames, svgInner) => {
147
+ const keys = Arr.flatMap(Arr.take(frames, 1), Rec.keys);
148
+ const splits = Arr.map(keys, (key) => Arr.map(frames, (frame) => splitOf(UndefinedOr.match(frame[key], { onUndefined: () => "", onDefined: (v) => v }))));
149
+ const tolerances = Arr.map(keys, (key, k) => tolerancesOf(key, svgInner, splits[k]));
150
+ /** Whether stop `i` is within every key's tolerance of where a straight line from `a` to `b` puts it. */
151
+ const onLine = (i, a, b) => Arr.every(splits, (series, k) => {
152
+ const from = series[a];
153
+ const to = series[b];
154
+ const at = series[i];
155
+ return at.skeleton === from.skeleton && at.skeleton === to.skeleton &&
156
+ Arr.every(at.numbers, (value, token) => {
157
+ const line = from.numbers[token] + ((to.numbers[token] - from.numbers[token]) * (i - a)) / Math.max(1, b - a);
158
+ return Math.abs(value - line) <= tolerances[k][token];
159
+ });
160
+ });
161
+ /**
162
+ * Whether the Frame at `k` jumps from the one before: a key's text changes (a discrete value), or
163
+ * one of its numbers moves past its tolerance and four times its moves on either side (a loop's
164
+ * seam, a `steps()` easing, a snap). The engine draws one Frame, then the other; a line between
165
+ * them would draw values it never does.
166
+ */
167
+ const jumpAt = (k) => Arr.some(splits, (series, j) => {
168
+ const before = series[k - 1];
169
+ const at = series[k];
170
+ return Bool.or(at.skeleton !== before.skeleton, Arr.some(at.numbers, (value, token) => {
171
+ const move = (i) => Option.getOrElse(Option.map(Option.all([Option.fromUndefinedOr(series[i]), Option.fromUndefinedOr(series[i - 1])]), ([a, b]) => Math.abs(a.numbers[token] - b.numbers[token])), () => 0);
172
+ const step = Math.abs(value - before.numbers[token]);
173
+ return Bool.and(step > tolerances[j][token], step > 4 * Math.max(move(k - 1), move(k + 1)));
174
+ }));
175
+ });
176
+ return { onLine, jumpAt };
177
+ };
178
+ /**
179
+ * The stops kept (decision 9), as indices into `frames`, and where the rule ends.
180
+ *
181
+ * - **It ends** at the first Frame from which every one is within tolerance of the settled Frame,
182
+ * drawn as the settled Frame: a tween stepped in 1/60 s settles a frame after it arrives, when
183
+ * its steps' sum crosses its duration.
184
+ * - **The stops kept** are the first, the end, and each one a straight line from the last kept can't
185
+ * reach past, within every key's tolerances.
186
+ * - **A jump** (`jumps`, kept stops): a Frame the one before it can't be drawn into, as `jumpAt`
187
+ * tells. The rule holds the Frame before it to halfway between them, then steps, so a display
188
+ * frame near either draws that Frame, not a value on a line through values the engine never draws.
189
+ */
190
+ export const thin = (frames, tag) => {
191
+ const last = frames.length - 1;
192
+ const svgInner = Predicate.isNotUndefined(tag) && isSvgInnerTag(tag);
193
+ const whole = judged(frames, svgInner);
194
+ const end = Option.match(Arr.findLastIndex(Arr.range(0, last), (i) => !whole.onLine(i, last, last)), {
195
+ onNone: () => 0,
196
+ onSome: (i) => Math.min(last, i + 1),
197
+ });
198
+ // The series drawn: the Frames up to the end, the end drawn as the settled Frame.
199
+ const { onLine, jumpAt } = judged(Arr.append(Arr.take(frames, end), frames[last]), svgInner);
200
+ /** Whether one straight line from stop `a` to stop `b` stands in for every stop between. */
201
+ const fits = (a, b) => Arr.every(Arr.range(a + 1, b - 1), (i) => onLine(i, a, b));
202
+ /** The farthest stop a line from `a` can reach. */
203
+ const reach = (a) => Option.getOrElse(Arr.findFirst(Arr.range(a + 1, end), (b) => b === end || !fits(a, b + 1)), () => end);
204
+ const kept = Arr.unfold(0, (a) => Bool.match(a >= end, { onTrue: () => Option.none(), onFalse: () => Option.some([reach(a), reach(a)]) }));
205
+ return { kept: [0, ...kept], end, jumps: Arr.filter(kept, jumpAt) };
206
+ };
207
+ /** A number written to at most four decimals, `-0` as `0`: finer than any tolerance, and short. */
208
+ const trimNumbers = (text) => text.replace(/-?(?:\d+\.\d+|\.\d+)(?:e[-+]?\d+)?|-?\d+e[-+]?\d+/gi, (token) => String(Number(Number(token).toFixed(4)) + 0));
209
+ /** Text CSS can't hold inside a declaration, or that would end the `<style>` it sits in. */
210
+ const UNSAFE = /[<>{};]|\/\*|\\/;
211
+ /**
212
+ * The SVG attributes a keyframe draws as their CSS property (#245, ADR-0044 *Amendment (#245)*):
213
+ * presentation attributes, which a stylesheet's or an animation's value overrides, so the attribute
214
+ * the engine writes at the Handoff takes over value for value. Unitless, as the attribute is.
215
+ */
216
+ const SVG_PRESENTATION = new Set([
217
+ "opacity",
218
+ "fill",
219
+ "stroke",
220
+ "stroke-width",
221
+ "fill-opacity",
222
+ "stroke-opacity",
223
+ "stroke-dasharray",
224
+ "stroke-dashoffset",
225
+ "stop-color",
226
+ "stop-opacity",
227
+ "flood-color",
228
+ "flood-opacity",
229
+ ]);
230
+ /**
231
+ * SVG 2's geometry properties a keyframe draws, in px, behind `@supports` (`Keyframes.supports`):
232
+ * Chrome and Firefox draw them from CSS, Safari only in part. Not `width` and `height`:
233
+ * `@supports (width: 0px)` holds for HTML in every browser, so it can't tell whether one draws a
234
+ * `<rect>`'s from CSS.
235
+ */
236
+ const SVG_GEOMETRY = new Set(["cx", "cy", "r", "rx", "ry", "x", "y"]);
237
+ /** The attribute the stroke dash writes beside it, `pathLength="1"`: the Starting style writes it too, and it never changes. */
238
+ const SVG_FIXED = new Set(["pathLength"]);
239
+ const BARE_NUMBER = /^-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?$/i;
240
+ /** An SVG attribute's declaration: a geometry property's bare number in px, what a user unit is. */
241
+ const attributeDeclaration = ([name, value]) => `${name}:${trimNumbers(Bool.match(Bool.and(SVG_GEOMETRY.has(name), BARE_NUMBER.test(value)), { onTrue: () => `${value}px`, onFalse: () => value }))}`;
242
+ /** Why an attribute can't be a keyframe's: it isn't a CSS property (`d` in Safari, `points`, a filter primitive's). */
243
+ const drawnOnlyAsAttribute = (name) => Bool.not(Bool.or(SVG_FIXED.has(name), Bool.or(SVG_PRESENTATION.has(name), SVG_GEOMETRY.has(name))));
244
+ /**
245
+ * One Frame's declarations, or why it can't be one: a key SVG draws only as an attribute, or unsafe
246
+ * text. An svg-inner element's attributes are drawn as their CSS properties where they have one; a
247
+ * layout node through its projection at rest (#245).
248
+ */
249
+ const declarationsOf = (tag, values, projected, template) => {
250
+ const { attrs, style } = splitPatchForTag(tag, project(drawnValuesOf(values, projected, template)));
251
+ const drawn = Arr.filter(Rec.toEntries(attrs), ([name]) => Bool.not(SVG_FIXED.has(name)));
252
+ const declarations = Arr.appendAll(Arr.map(Rec.toEntries(style), ([key, value]) => `${dashCase(key)}:${trimNumbers(String(value))}`), Arr.map(drawn, attributeDeclaration));
253
+ return Arr.match(Arr.filter(Rec.keys(attrs), drawnOnlyAsAttribute), {
254
+ onNonEmpty: (names) => Result.fail(`a key SVG draws only as an attribute (${names.join(", ")})`),
255
+ onEmpty: () => Option.match(Arr.findFirst(declarations, (declaration) => UNSAFE.test(declaration)), {
256
+ onSome: (declaration) => Result.fail(`a value CSS text can't hold (${declaration})`),
257
+ onNone: () => Result.succeed({ text: declarations.join(";"), supports: Arr.filter(Arr.map(drawn, ([name]) => name), (name) => SVG_GEOMETRY.has(name)) }),
258
+ }),
259
+ });
260
+ };
261
+ /** A Frame's values as the client draws them: a layout node's through its projection at rest (#245), a templated one's through its template (#443). */
262
+ const drawnValuesOf = (values, projected, template) => {
263
+ const drawn = Bool.match(projected, { onTrue: () => ({ ...values, [Projection.KEY]: Projection.AT_REST }), onFalse: () => values });
264
+ return UndefinedOr.match(template, { onUndefined: () => drawn, onDefined: (t) => ({ ...drawn, [TEMPLATE_KEY]: t }) });
265
+ };
266
+ /** A stop's offset in the rule, a percentage to six decimals, so a jump's hold sits before its stop. */
267
+ const percentOf = (stop, last) => `${String(Number(Bool.match(last === 0, { onTrue: () => 0, onFalse: () => (stop / last) * 100 }).toFixed(6)) + 0)}%`;
268
+ /**
269
+ * Where a jump falls: halfway between its two Frames, so a display frame drawn near either one, a
270
+ * vsync's jitter early or late, draws that Frame. The step takes a thousandth of a frame.
271
+ */
272
+ const JUMP_AT = 0.5;
273
+ const JUMP_TAKES = 0.001;
274
+ /** A spec sampled into its rule, or why it can't be one. Not cached: {@link keyframes} is. */
275
+ const sample = (spec) => Option.match(framesOf(spec.machine()), {
276
+ onNone: () => Result.fail(`longer than ${MAX_SECONDS} s`),
277
+ onSome: (frames) => {
278
+ const last = frames.length - 1;
279
+ const projected = spec.projected === true;
280
+ const { kept, end, jumps } = thin(frames, spec.tag);
281
+ /** A kept stop's Frame: the end drawn as the settled Frame. */
282
+ const frameAt = (stop) => frames[Bool.match(stop === end, { onTrue: () => last, onFalse: () => stop })];
283
+ // The rule's stops: each kept one, and at a jump, the Frame before it held to halfway, then its own.
284
+ const stops = Arr.flatMap(kept, (stop) => Bool.match(Arr.contains(jumps, stop), {
285
+ onTrue: () => [
286
+ { offset: stop - JUMP_AT, frame: frames[stop - 1] },
287
+ { offset: stop - JUMP_AT + JUMP_TAKES, frame: frameAt(stop) },
288
+ { offset: stop, frame: frameAt(stop) },
289
+ ],
290
+ onFalse: () => [{ offset: stop, frame: frameAt(stop) }],
291
+ }));
292
+ return Result.map(Result.all(Arr.map(stops, ({ frame }) => declarationsOf(spec.tag, frame, projected, spec.template))), (declarations) => {
293
+ const body = Arr.map(Bool.match(end === 0, { onTrue: () => ["0%,100%"], onFalse: () => Arr.map(stops, ({ offset }) => percentOf(offset, end)) }), (offset, i) => `${offset}{${declarations[i].text}}`).join("");
294
+ const name = ruleNameOf(spec, body);
295
+ return {
296
+ name,
297
+ duration: end * Machine.CATCH_UP_DT,
298
+ settled: last * Machine.CATCH_UP_DT,
299
+ infinite: spec.infinite === true,
300
+ times: Arr.map(kept, (stop) => stop * Machine.CATCH_UP_DT),
301
+ css: `@keyframes ${name}{${body}}`,
302
+ supports: supportsOf(Arr.flatMap(declarations, (d) => d.supports)),
303
+ };
304
+ });
305
+ },
306
+ });
307
+ /**
308
+ * A rule's name: its spec's ({@link nameOf}), or, for a templated spec (#443), its spec's text and
309
+ * its stops hashed, since a function can't name it: two templates that draw the same share one.
310
+ */
311
+ const ruleNameOf = (spec, body) => UndefinedOr.match(spec.template, {
312
+ onUndefined: () => nameOf(spec),
313
+ onDefined: () => `${PREFIX}${hash53(`${specTextOf(spec)}|template|${body}`)}`,
314
+ });
315
+ /** Geometry properties once each, in order: a condition's text is the same for the same set. */
316
+ const supportsOf = (properties) => Arr.sort(Arr.dedupe(properties), Order.String);
317
+ /** An `@supports` condition for geometry properties, `(cx:0px) and (r:0px)`; empty for none. */
318
+ const conditionOf = (properties) => Arr.map(properties, (property) => `(${property}:0px)`).join(" and ");
319
+ /**
320
+ * The rules sampled so far, across requests, by name, each with whether every CSS colour space was
321
+ * registered when it was (#511); the oldest dropped past `CACHE_SIZE`.
322
+ */
323
+ // Module state (#460, Q7): a cache keyed by what it caches: each mount animation's sampled keyframes, by its text.
324
+ const cache = new Map();
325
+ const CACHE_SIZE = 512;
326
+ /**
327
+ * A spec's rule, or why it has none, for a debug log. Sampled once a spec and cached across requests by
328
+ * its name, since a spec's rule changes only once the page registers every colour space
329
+ * (`Color.registerSpaces`): a wide-gamut colour blends as written before, in sRGB after. Its name stays,
330
+ * so a client matches it whatever it had registered. A templated spec's is sampled each time: its name
331
+ * comes from its stops.
332
+ */
333
+ // #511; templates #443.
334
+ export const keyframes = (spec) => {
335
+ if (Predicate.isNotUndefined(spec.template))
336
+ return sample(spec);
337
+ const name = nameOf(spec);
338
+ const spaces = spacesRegistered();
339
+ const kept = cache.get(name);
340
+ if (Predicate.isNotUndefined(kept) && kept.spaces === spaces)
341
+ return kept.rule;
342
+ const sampled = sample(spec);
343
+ Option.map(Arr.head(Arr.take(Array.from(cache.keys()), Math.max(0, cache.size + 1 - CACHE_SIZE))), (oldest) => cache.delete(oldest));
344
+ cache.set(name, { spaces, rule: sampled });
345
+ return sampled;
346
+ };
347
+ /**
348
+ * An element's `animation` value for a play of `rule`: its name, length, delay and repeat, filling
349
+ * forwards. Not backwards: through its delay the element shows its inline starting style, which is the
350
+ * rule's first stop for a rule that moves from it.
351
+ */
352
+ // And the start a reduced rule's snap holds until the delay ends (ADR-0029), where the first stop is
353
+ // already snapped.
354
+ export const animationOf = (rule, delay) => `${rule.name} ${trimNumbers(String(rule.duration))}s linear ${trimNumbers(String(delay))}s ${Bool.match(rule.infinite, { onTrue: () => "infinite", onFalse: () => "1" })} forwards`;
355
+ /** A block's declarations added under its condition. */
356
+ const addTo = (blocks, condition, line) => {
357
+ Option.match(Option.fromUndefinedOr(blocks.get(condition)), {
358
+ onNone: () => blocks.set(condition, [line]),
359
+ onSome: (lines) => lines.push(line),
360
+ });
361
+ };
362
+ /** The blocks' CSS: the unconditional `:root` first, then each condition's under `@supports`. */
363
+ const blocksCss = (blocks) => Arr.map(Arr.sort(Array.from(blocks.keys()), Order.String), (condition) => {
364
+ const root = `:root{${blocks.get(condition).join(";")}}`;
365
+ return Bool.match(condition === "", { onTrue: () => root, onFalse: () => `@supports ${condition}{${root}}` });
366
+ }).join("");
367
+ /** A sheet for one render: a slot per element, and the CSS for the head. */
368
+ export const sheet = () => {
369
+ let slots = 0;
370
+ // The rules to write, and the names of those written: a chunk doesn't send a rule the head has.
371
+ const rules = new Map();
372
+ const written = new Set();
373
+ const blocks = new Map();
374
+ const reducedBlocks = new Map();
375
+ /** A play's rule added to the sheet: its `animation` value, and the geometry properties it writes. */
376
+ const animationFor = (play) => Result.map(keyframes(play.spec), (rule) => {
377
+ if (Bool.not(written.has(rule.name)))
378
+ rules.set(rule.name, rule.css);
379
+ return { animation: animationOf(rule, play.delay), supports: rule.supports };
380
+ });
381
+ return {
382
+ slot: () => {
383
+ const property = `--${PREFIX}a${slots++}`;
384
+ return {
385
+ animation: `var(${property})`,
386
+ define: (play, reduced, supports = []) => Result.map(Result.all([animationFor(play), UndefinedOr.match(reduced, { onUndefined: () => Result.succeed(undefined), onDefined: animationFor })]), ([normal, reducedPlay]) => {
387
+ const reducedSupports = UndefinedOr.match(reducedPlay, { onUndefined: () => supports, onDefined: (r) => r.supports });
388
+ const condition = Bool.match(Bool.and(Arr.isReadonlyArrayEmpty(normal.supports), Bool.and(Arr.isReadonlyArrayEmpty(reducedSupports), Arr.isReadonlyArrayEmpty(supports))), { onTrue: () => "", onFalse: () => conditionOf(supportsOf(Arr.flatten([normal.supports, reducedSupports, supports]))) });
389
+ addTo(blocks, condition, `${property}:${normal.animation}`);
390
+ UndefinedOr.map(reducedPlay, (r) => addTo(reducedBlocks, condition, `${property}:${r.animation}`));
391
+ }),
392
+ };
393
+ },
394
+ css: () => {
395
+ const text = `${Array.from(rules.values()).join("")}${blocksCss(blocks)}${Bool.match(reducedBlocks.size === 0, {
396
+ onTrue: () => "",
397
+ onFalse: () => `@media (prefers-reduced-motion: reduce){${blocksCss(reducedBlocks)}}`,
398
+ })}`;
399
+ Arr.forEach(Array.from(rules.keys()), (name) => written.add(name));
400
+ rules.clear();
401
+ blocks.clear();
402
+ reducedBlocks.clear();
403
+ return text;
404
+ },
405
+ };
406
+ };
407
+ // --- A late chunk's rules ----------------------------------------------------------------------
408
+ /**
409
+ * The attribute a late chunk's `<style>` carries: a chunk a stream sends after its shell brings its own
410
+ * rules, in a node its client doesn't render.
411
+ */
412
+ // #245, ADR-0044 *Amendment (#245)*.
413
+ export const CHUNK_ATTRIBUTE = "data-wardic-appear-chunk";
414
+ /**
415
+ * A late chunk's `<style>` for `css`, as server text; "" for none. With a `nonce`, the one the page's
416
+ * Content Security Policy gives inline styles, it carries it.
417
+ */
418
+ // `nonce`: #618 (P1), Motion's `MotionConfig` `nonce`.
419
+ export const chunkStyle = (css, nonce) => {
420
+ if (css === "")
421
+ return "";
422
+ if (Predicate.isUndefined(nonce))
423
+ return `<style ${CHUNK_ATTRIBUTE}>${css}</style>`;
424
+ return `<style ${CHUNK_ATTRIBUTE} nonce="${escapeAttribute(nonce)}">${css}</style>`;
425
+ };
426
+ /** `value` safe inside a double-quoted attribute. */
427
+ const escapeAttribute = (value) => value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;");
428
+ /** The documents {@link adoptChunks} watches, or has: one observer a document. */
429
+ // Module state (#460, Q7): the documents already watched, held weakly.
430
+ const watched = new WeakSet();
431
+ /**
432
+ * Moves each late chunk's Appear rules into the head: its `<style data-wardic-appear-chunk>`'s text into a
433
+ * head `<style>`, then the node out, before the chunk hydrates, since a hydrating client expects no node it
434
+ * doesn't render. The text goes first, so the rule a running animation plays is never missing. Chunks
435
+ * already in the document move at once; while it's still loading, a stream still coming, a
436
+ * `MutationObserver` moves each as it lands, until `DOMContentLoaded`. Every call moves what's there; one
437
+ * observer a document.
438
+ */
439
+ // #245. Leaving the node would shift sibling selectors. Each provider hydrating asks before its subtree
440
+ // hydrates.
441
+ export const adoptChunks = (doc) => {
442
+ const adopt = () => Arr.forEach(Array.from(doc.querySelectorAll(`style[${CHUNK_ATTRIBUTE}]`)), (node) => {
443
+ const style = doc.createElement("style");
444
+ style.setAttribute("data-wardic-appear", "");
445
+ style.textContent = node.textContent;
446
+ doc.head.append(style);
447
+ node.remove();
448
+ });
449
+ adopt();
450
+ if (Bool.or(doc.readyState !== "loading", watched.has(doc)))
451
+ return;
452
+ watched.add(doc);
453
+ const observer = new MutationObserver(adopt);
454
+ observer.observe(doc.documentElement, { childList: true, subtree: true });
455
+ doc.addEventListener("DOMContentLoaded", () => {
456
+ adopt();
457
+ observer.disconnect();
458
+ }, { once: true });
459
+ };
460
+ // --- The Handoff -------------------------------------------------------------------------------
461
+ /** A `CSSAnimation`'s name, where the animation has one. */
462
+ const nameOfAnimation = (animation) => Option.filter(Option.some(animation.animationName), Predicate.isString);
463
+ /** The element's Appear animation: its `wardic-…` CSS animation, running, or finished and filling. */
464
+ // ADR-0044, decision 6.
465
+ export const find = (element) => Bool.match(Predicate.hasProperty(element, "getAnimations"), {
466
+ onFalse: () => Option.none(),
467
+ onTrue: () => Arr.findFirst(element.getAnimations(), (animation) => Option.exists(nameOfAnimation(animation), (name) => name.startsWith(PREFIX))),
468
+ });
469
+ /** Whether `animation` is `spec`'s: the rule the server sampled from the same spec. */
470
+ export const matches = (animation, spec) => Option.exists(nameOfAnimation(animation), (name) => name === nameOf(spec));
471
+ /** How far `animation` has got, in seconds since it started (its delay included): 0 before it has. */
472
+ export const elapsedOf = (animation) => Option.match(Option.filter(Option.fromNullishOr(animation.currentTime), Predicate.isNumber), {
473
+ onNone: () => 0,
474
+ onSome: (ms) => Math.max(0, ms / 1000),
475
+ });
476
+ /** The delay `animation` started after, in seconds: what its element's `animation-delay` holds. */
477
+ export const delayOf = (animation) => Option.match(Option.filter(Option.fromNullishOr(animation.effect), (effect) => Predicate.isNotUndefined(effect.getTiming)), {
478
+ onNone: () => 0,
479
+ onSome: (effect) => Option.getOrElse(Option.filter(Option.some(effect.getTiming().delay), Predicate.isNumber), () => 0) / 1000,
480
+ });
481
+ /** What a slot's inline `animation` starts with: `var(--wardic-a`. */
482
+ const SLOT_PREFIX = `var(--${PREFIX}a`;
483
+ /**
484
+ * Whether `element`'s Appear animation is running, not yet handed over: its inline style still names its
485
+ * slot, which `release` removes. A layout measure asks it of each node, so a running animation's
486
+ * transform, which beats the inline one, stays out of the box it reads.
487
+ */
488
+ // #245: a Measure pass; a string read, no style resolved.
489
+ export const pending = (element) => element.style.getPropertyValue("animation").startsWith(SLOT_PREFIX);
490
+ /**
491
+ * The handover's last step: the element's inline `animation` removed, in the task that writes the
492
+ * engine's first frame, so no paint falls between. While it ran, its value beat the inline style the
493
+ * engine writes; removing it ends the CSS animation at that task's style update.
494
+ */
495
+ // The **Handoff** (ADR-0044, decision 6). A `cancel()` too changed nothing (a mutation, #48's PR 1).
496
+ export const release = (element) => {
497
+ element.style.removeProperty("animation");
498
+ };
499
+ //# sourceMappingURL=appear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appear.js","sourceRoot":"","sources":["../../src/internal/appear.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type * as Point from "@wardic/core/Point";
2
+ type Axis = "x" | "y";
3
+ /**
4
+ * The **Auto-scroll** of one group. `update(pointer, axis, velocity, item?)` takes the
5
+ * pointer in viewport px, the axis to scroll and the pointer's velocity on it; given
6
+ * the dragged item's element, `pointer` may instead be its drag point, which carries
7
+ * the scroll since the hold began (ADR-0019 *Amendment (Reorder)*), and the scroller
8
+ * takes that back out. `reset()` ends the gesture: the next update finds the scroller
9
+ * afresh and needs velocity toward an edge again.
10
+ */
11
+ export interface AutoScroller {
12
+ readonly update: (pointer: Point.Point, axis: Axis, velocity: number, item?: Element) => void;
13
+ readonly reset: () => void;
14
+ }
15
+ /**
16
+ * Build the **Auto-scroll** for `group` (the Reorder group's element). The scroller on
17
+ * each axis is found once per gesture, at its first update. Each update reads the
18
+ * scroller's visible edges (clamped to the viewport, as Motion's `getScrollAmount`), runs
19
+ * core's `AutoScroll.step`, and scrolls by its amount. `debug` receives `auto-scroll
20
+ * start` and `auto-scroll stop` { axis, edge } when an edge starts and ends scrolling.
21
+ */
22
+ export declare const makeAutoScroller: (group: Element, debug?: (event: string, annotations: Record<string, unknown>) => void) => AutoScroller;
23
+ export {};
24
+ //# sourceMappingURL=auto-scroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-scroll.d.ts","sourceRoot":"","sources":["../../src/internal/auto-scroll.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAahD,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,CAAA;AAarB;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7F,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAA;CAC3B;AA0ED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,UACpB,OAAO,UACN,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KACpE,YA4CF,CAAA"}