@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,244 @@
1
+ /**
2
+ * The DOM Environment's **Key rules** (CONTEXT.md; ADR-0035): how a CSS property's pair blends,
3
+ * by the property's name, which core's `InterpolatorRegistry` asks before blending a pair by value.
4
+ * Core holds none. Both rules take a key by its CSS name or in camelCase (`box-shadow`, `boxShadow`):
5
+ * `WardicValues` types keys as CSS names, and camelCase works as well.
6
+ *
7
+ * - **`visibility`** (ADR-0024, decision 4): `display` and `visibility` turning to `none` or
8
+ * `hidden` show their start until the run's last Frame (Motion's `mixVisibility`), keyed on the
9
+ * Frame's `done`, so a spring crossing its target can't flicker them.
10
+ * - **`animatableNone`** (ADR-0015, *Amendment (#61)*): an empty end (`"none"`, `0`, `"0"`, a zero
11
+ * with a unit) facing a complex value or a lone colour stands for that value at zero, numbers 0
12
+ * and colours transparent (Motion's `getAnimatableNone`). A filter puts each function at its
13
+ * identity and a mask keeps its colours opaque. A plain length isn't a template: `none` isn't 0
14
+ * for `max-height`. A shadow list (`box-shadow`, `text-shadow`) blends shadow by shadow: a length
15
+ * missing from the start's shadow counts as 0, and a missing shadow grows from its zero. Either
16
+ * way the run's last Frame writes the target as given, so a shadow, filter or fill animated to
17
+ * `none` rests at `none`, with no stacking context, containing block or painted fill left.
18
+ *
19
+ * Each rule declines synchronously, allocating nothing, for a key it can't take: the registry asks
20
+ * every rule for every key of every leg it builds. The blends they hand back are on the per-frame
21
+ * path (ADR-0025): statement `if`s, and a counted loop for a shadow list.
22
+ *
23
+ * @module
24
+ */
25
+ import * as Interpolator from "@wardic/core/Interpolator";
26
+ import * as InterpolatorRegistry from "@wardic/core/InterpolatorRegistry";
27
+ import * as Arr from "effect/Array";
28
+ import * as Bool from "effect/Boolean";
29
+ import * as Effect from "effect/Effect";
30
+ import { pipe } from "effect/Function";
31
+ import * as Match from "effect/Match";
32
+ import * as Option from "effect/Option";
33
+ import * as Predicate from "effect/Predicate";
34
+ import * as Str from "effect/String";
35
+ import { cssColor, formatColor, parseColor } from "./colors.js";
36
+ import { cssComplex } from "./complex.js";
37
+ import { dashCase } from "./svg.js";
38
+ // The DOM's own Interpolators' `parse` and `format` (ADR-0036; plain functions since #511): a
39
+ // template's colours are tokens and its `var()`s text, as the DOM's registry reads them, so a zero
40
+ // keeps a variable's name as written (#160).
41
+ const decodeComplex = cssComplex.parse;
42
+ const encodeComplex = cssComplex.format;
43
+ const decodeColor = parseColor;
44
+ const encodeColor = formatColor;
45
+ /** The keys whose empty end takes each filter function's identity (Motion's `filter` type, and the backdrop it leaves out). */
46
+ const FILTER_KEYS = new Set(["filter", "-webkit-filter", "backdrop-filter", "-webkit-backdrop-filter"]);
47
+ /** The keys whose empty end keeps its colours opaque (Motion's `mask` type, and the images it leaves out). */
48
+ const MASK_KEYS = new Set(["mask", "-webkit-mask", "mask-image", "-webkit-mask-image"]);
49
+ /** The keys matched shadow by shadow. */
50
+ const SHADOW_KEYS = new Set(["box-shadow", "text-shadow"]);
51
+ /** Whether `key`, written either way, is in `keys`. */
52
+ const isOneOf = (keys) => (key) => keys.has(dashCase(key));
53
+ // Built once (#460): `mayApply` asks of every key, each leg.
54
+ const isFilterKey = isOneOf(FILTER_KEYS);
55
+ const isMaskKey = isOneOf(MASK_KEYS);
56
+ const isShadowKey = isOneOf(SHADOW_KEYS);
57
+ /** The filter functions whose identity is 1 (or 100%); every other is at its identity at 0 (Motion's `maxDefaults`). */
58
+ const IDENTITY_ONE = new Set(["brightness", "contrast", "saturate", "opacity"]);
59
+ /** The words an empty end can be. */
60
+ const EMPTY_WORDS = new Set(["none", "0"]);
61
+ /** A zero with a unit: `"0px"`, `"0%"`, `"0deg"` (Motion's `isZeroValueString`). */
62
+ const ZERO_WITH_UNIT_RE = /^0[^.\s]+$/;
63
+ /** An empty string end: `"none"`, `"0"`, or a zero with a unit. */
64
+ const isEmptyWord = Predicate.mapInput(Predicate.or((word) => EMPTY_WORDS.has(word), (word) => ZERO_WITH_UNIT_RE.test(word)), Str.trim);
65
+ /** The number 0. */
66
+ const isZero = (value) => value === 0;
67
+ /** An empty end (Motion's `isNone`): the number 0, `"none"`, `"0"`, or a zero with a unit. */
68
+ const isEmptyEnd = Predicate.or(isZero, (value) => Predicate.isString(value) && isEmptyWord(value));
69
+ /** The first number in a filter function's arguments. */
70
+ const FIRST_NUMBER_RE = /-?\d*\.?\d+(?:e[-+]?\d+)?/i;
71
+ const transparent = (color) => ({ ...color, alpha: 0 });
72
+ const opaque = (color) => ({ ...color, alpha: 1 });
73
+ /** A number written straight after a `/`: a `calc()` divisor, kept, since a 0 there is NaN (Motion's `convertToZero`). */
74
+ const isDivisor = (partBefore) => Str.endsWith("/")(Str.trim(partBefore));
75
+ /** A colour token of the DOM's complex tier. */
76
+ const isColorToken = (token) => token.kind === cssColor.name;
77
+ /** A complex value at zero: every number 0 (but a divisor), every colour turned. */
78
+ const zeroComplex = (complex, turn) => encodeComplex({
79
+ parts: complex.parts,
80
+ tokens: Arr.map(complex.tokens, (token, i) => Match.value(token).pipe(Match.when(Predicate.isNumber, (n) => Bool.match(isDivisor(complex.parts[i]), { onTrue: () => n, onFalse: () => 0 })), Match.when(isColorToken, (color) => ({ kind: color.kind, value: turn(color.value) })), Match.orElse((token) => token))),
81
+ });
82
+ /** A value at zero, as a complex value or a lone colour; `None` when it's neither. */
83
+ const zeroOf = (value, turn) => Option.orElse(Option.map(decodeComplex(value), (complex) => zeroComplex(complex, turn)), () => Option.map(decodeColor(value), (color) => encodeColor(turn(color))));
84
+ /** How many numbers a complex value holds outside its colours: what complex matching counts. 0 for one that isn't. */
85
+ const numberCountOf = (value) => Option.match(decodeComplex(value), {
86
+ onNone: () => 0,
87
+ onSome: (complex) => Arr.filter(complex.tokens, Predicate.isNumber).length,
88
+ });
89
+ /** A top-level comma: one not inside a bracket (a shadow's colour, `rgba(…)`, holds commas). One level deep, as shadows are. */
90
+ const TOP_LEVEL_COMMA_RE = /,(?![^(]*\))/;
91
+ /** A filter's functions, each with what's in its brackets, one bracket level deep (`drop-shadow(0px 0px 4px rgb(…))`). */
92
+ const FILTER_FUNCTION_RE = /[a-z-]+\((?:[^()]|\([^()]*\))*\)/gi;
93
+ /** A shadow list's shadows, trimmed. */
94
+ const shadowsOf = (value) => Arr.filter(Arr.map(value.split(TOP_LEVEL_COMMA_RE), Str.trim), Str.isNonEmpty);
95
+ /** A filter's functions. */
96
+ const filterFunctionsOf = (value) => Option.getOrElse(Str.match(FILTER_FUNCTION_RE)(value), () => []);
97
+ /**
98
+ * One filter function at its identity (Motion's `applyDefaultFilter`): its first number becomes 1
99
+ * (or 100) for `brightness`, `contrast`, `saturate` and `opacity`, 0 for the rest, keeping its unit.
100
+ * A `drop-shadow()` grows from a transparent zero, as a shadow does (#61; Motion keeps it as is).
101
+ * One with no number (`url(#f)`) stays as it is.
102
+ */
103
+ const filterFunctionAtIdentity = (fn) => {
104
+ const name = Str.trim(fn.slice(0, Math.max(0, fn.indexOf("("))));
105
+ const args = fn.slice(fn.indexOf("(") + 1, fn.lastIndexOf(")"));
106
+ return Bool.match(name === "drop-shadow", {
107
+ onTrue: () => Option.getOrElse(zeroOf(fn, transparent), () => fn),
108
+ onFalse: () => Option.match(Option.fromNullishOr(FIRST_NUMBER_RE.exec(args)), {
109
+ onNone: () => fn,
110
+ onSome: ([number]) => {
111
+ const unit = Str.replace(number, "")(args);
112
+ const one = Bool.match(Str.isEmpty(unit), { onTrue: () => 1, onFalse: () => 100 });
113
+ const identity = Bool.match(IDENTITY_ONE.has(name), { onTrue: () => one, onFalse: () => 0 });
114
+ return `${name}(${identity}${unit})`;
115
+ },
116
+ }),
117
+ });
118
+ };
119
+ /** A filter at its identity: each top-level function at its own (Motion's `filter.getAnimatableNone`). */
120
+ const filterAtIdentity = (value) => Option.map(decodeComplex(value), () => Arr.join(Arr.map(filterFunctionsOf(value), filterFunctionAtIdentity), " "));
121
+ /** What `key`'s empty end stands for, facing `template` (CONTEXT.md's Animatable none); `None` when `template` can't be one. */
122
+ const noneOf = (key, template) => Bool.match(isFilterKey(key), {
123
+ onTrue: () => filterAtIdentity(template),
124
+ onFalse: () => zeroOf(template, Bool.match(isMaskKey(key), { onTrue: () => opaque, onFalse: () => transparent })),
125
+ });
126
+ /** `auto`, which carries nothing to grow from. */
127
+ const isAuto = (s) => Str.trim(s) === "auto";
128
+ /** An end a template can come from: a string other than an empty end or `auto`. */
129
+ const templateOf = (value) => Option.filter(Option.liftPredicate(value, Predicate.isString), Predicate.not(Predicate.or(isEmptyWord, isAuto)));
130
+ /** `from` empty and `to` a template: the pair from `to`'s Animatable none. */
131
+ const fromNone = (key, from, to) => pipe(Option.liftPredicate(from, isEmptyEnd), Option.flatMap(() => templateOf(to)), Option.flatMap((template) => noneOf(key, template)), Option.map((none) => ({ pairs: [[none, to]] })));
132
+ /** `to` empty and `from` a template: the pair to `from`'s Animatable none, landing on `to` as given. */
133
+ const toNone = (key, from, to) => pipe(Option.liftPredicate(to, isEmptyEnd), Option.flatMap(() => templateOf(from)), Option.flatMap((template) => noneOf(key, template)), Option.map((none) => ({ pairs: [[from, none]] })));
134
+ /**
135
+ * One shadow's pair: a shadow missing from one end is the other's Animatable none, and a start
136
+ * with fewer numbers than its target takes 0s for the missing lengths, appended (CSS's default
137
+ * for an omitted blur or spread). Matching is kind by kind in order, so where they go in the text
138
+ * doesn't matter.
139
+ */
140
+ const shadowPair = (from, to) => {
141
+ const a = Option.getOrElse(from, () => Option.getOrElse(Option.flatMap(to, (t) => zeroOf(t, transparent)), () => "none"));
142
+ const b = Option.getOrElse(to, () => Option.getOrElse(Option.flatMap(from, (f) => zeroOf(f, transparent)), () => "none"));
143
+ const missing = Math.max(0, numberCountOf(b) - numberCountOf(a));
144
+ return [a + Str.repeat(missing)(" 0px"), b];
145
+ };
146
+ /** One pair, `from` → `to` as given: matching shadow by shadow changed nothing. */
147
+ const isAsGiven = (from, to) => (pairs) => Arr.match(pairs, {
148
+ onEmpty: () => false,
149
+ onNonEmpty: ([[a, b], ...rest]) => Bool.and(rest.length === 0, Bool.and(a === from, b === to)),
150
+ });
151
+ /**
152
+ * A shadow list's pairs, shadow by shadow (#61): `None` unless both ends are strings and matching
153
+ * them shadow by shadow changes anything (more than one shadow, or a start short of numbers).
154
+ */
155
+ const shadows = (key, from, to) => pipe(Option.liftPredicate(key, isShadowKey), Option.flatMap(() => Option.all([Option.liftPredicate(from, Predicate.isString), Option.liftPredicate(to, Predicate.isString)])), Option.map(([a, b]) => {
156
+ const as = shadowsOf(a);
157
+ const bs = shadowsOf(b);
158
+ return Arr.makeBy(Math.max(as.length, bs.length), (i) => shadowPair(Arr.get(as, i), Arr.get(bs, i)));
159
+ }), Option.filter(Predicate.not(isAsGiven(from, to))), Option.map((pairs) => ({ pairs })));
160
+ /** An end a template can come from, checked cheaply: a string other than an empty end or `auto`. */
161
+ const isTemplateEnd = (value) => Predicate.isString(value) && !isEmptyWord(value) && !isAuto(value);
162
+ /**
163
+ * Whether any rule here can apply: an empty end facing a template, or a shadow key between two
164
+ * strings. Checked first, allocating nothing, so a pair no rule applies to (`opacity` from `0`,
165
+ * `pointer-events` to `none`) never reaches the `Option` chains below: their calls at stream
166
+ * build, through library functions the frame path shares, cost Node's `animateValues` about 5%
167
+ * per frame when it ran after other workloads (#61's bench). Per key, each leg: statements (#460).
168
+ */
169
+ const mayApply = (key, from, to) => {
170
+ if (isEmptyEnd(from) && isTemplateEnd(to))
171
+ return true;
172
+ if (isEmptyEnd(to) && isTemplateEnd(from))
173
+ return true;
174
+ return isShadowKey(key) && Predicate.isString(from) && Predicate.isString(to);
175
+ };
176
+ /**
177
+ * `key`'s pairs (#61): from or to its Animatable none when one end is empty, or shadow by shadow
178
+ * for a shadow list. `None` when neither applies: the rule declines.
179
+ */
180
+ const prepare = (key, from, to) => {
181
+ if (!mayApply(key, from, to))
182
+ return Option.none();
183
+ return pipe(fromNone(key, from, to), Option.orElse(() => toNone(key, from, to)), Option.orElse(() => shadows(key, from, to)));
184
+ };
185
+ /** A hiding pair's blend: its start until the run's last Frame, then its target. Per frame: a statement `if`. */
186
+ const holdUntilDone = (from, to) => (_t, done) => {
187
+ if (done)
188
+ return to;
189
+ return from;
190
+ };
191
+ /**
192
+ * One pair's blend that writes its target as given on the run's last Frame (#61): a pair from or to
193
+ * its Animatable none rests at `"none"` itself, not its zero. Per frame: a statement `if`.
194
+ */
195
+ const landOn = (blend, to) => (t, done) => {
196
+ if (done)
197
+ return to;
198
+ return blend(t);
199
+ };
200
+ /**
201
+ * A shadow list's blend (#61): each shadow's blend, joined with `", "`, and its target as given on
202
+ * the run's last Frame. Per frame: a counted loop building the string.
203
+ */
204
+ const joinShadows = (blends, to) => (t, done) => {
205
+ if (done)
206
+ return to;
207
+ let out = String(blends[0](t));
208
+ for (let i = 1; i < blends.length; i++)
209
+ out += ", " + String(blends[i](t));
210
+ return out;
211
+ };
212
+ // --- The rules ------------------------------------------------------------------------------------
213
+ /** The keys whose turn to `none` or `hidden` waits for the run's last Frame (ADR-0024, decision 4). */
214
+ const VISIBILITY_KEYS = new Set(["display", "visibility"]);
215
+ const INVISIBLE = new Set(["none", "hidden"]);
216
+ /** A `none` or `hidden` value: what a `display` or `visibility` key turns to when it hides. */
217
+ const isInvisible = (value) => Predicate.isString(value) && INVISIBLE.has(Str.trim(value));
218
+ /** A pair that hides: from a visible value to `none` or `hidden`. */
219
+ const hides = (from, to) => Bool.and(isInvisible(to), !isInvisible(from));
220
+ /** `display` and `visibility`, turning to `none` or `hidden`, show their start until the run's last Frame. */
221
+ export const visibility = {
222
+ name: "visibility",
223
+ blend: (key, from, to) => {
224
+ if (!VISIBILITY_KEYS.has(key))
225
+ return Option.none();
226
+ if (!hides(from, to))
227
+ return Option.none();
228
+ return Option.some(Effect.succeed(holdUntilDone(from, to)));
229
+ },
230
+ };
231
+ /**
232
+ * An empty end facing a complex value or a colour grows from, or goes back to, its Animatable none,
233
+ * and a shadow list blends shadow by shadow; the run's last Frame writes the target as given.
234
+ */
235
+ export const animatableNone = {
236
+ name: "animatable none",
237
+ blend: (key, from, to, resolve) => Option.map(prepare(key, from, to), (prepared) => Effect.map(Effect.forEach(prepared.pairs, ([a, b]) => resolve(a, b)), (blends) => Bool.match(blends.length > 1, {
238
+ onTrue: () => joinShadows(blends, to),
239
+ onFalse: () => landOn(blends[0], to),
240
+ }))),
241
+ };
242
+ /** The DOM's Key rules, in the order they're asked. */
243
+ export const keyRules = [visibility, animatableNone];
244
+ //# sourceMappingURL=key-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-rules.js","sourceRoot":"","sources":["../../src/internal/key-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * The DOM reads the Projection system takes at measure time (ADR-0005 / ADR-0009 /
3
+ * ADR-0012). Two box readers: {@link readLayoutBox} is the raw rect the projection
4
+ * pass uses (it owns the transform reset at pass level), {@link measureLayoutBox}
5
+ * a self-resetting single-element read for a lone caller. No framework or Effect dependency — pure DOM — so
6
+ * this lives in `@wardic/dom` alongside the Projection system that consumes it (a
7
+ * binding imports it from here).
8
+ *
9
+ * It's the surface of the port the engine would move into `@wardic/core` behind (#16, parked
10
+ * until a non-DOM Environment exists): a DOM read the engine newly needs is added here, named,
11
+ * rather than written inline in `projection.ts`, measure-time or not: the tree's `contains` too
12
+ * (#618). #16 maps the reads that file made inline before this rule.
13
+ */
14
+ import * as Drag from "@wardic/core/Drag";
15
+ import type * as Point from "@wardic/core/Point";
16
+ import type * as Probe from "@wardic/core/Probe";
17
+ import * as Option from "effect/Option";
18
+ /**
19
+ * Read `el`'s box AS IT CURRENTLY RENDERS — a raw `getBoundingClientRect`, no
20
+ * transform reset. The projection measure pass uses this because it resets the
21
+ * whole tree's transforms in its own WRITE phase first, so by the time it reads,
22
+ * nothing is transformed (see `runMeasurePass`). A lone caller wants
23
+ * {@link measureLayoutBox} instead.
24
+ */
25
+ export declare const readLayoutBox: (el: HTMLElement) => Probe.Bounds;
26
+ /**
27
+ * Measures `el`'s box where the layout puts it: its own `transform` is cleared for the read and put
28
+ * back, so an animation running on it doesn't move the reading. Its ancestors' transforms still
29
+ * count. The box is in the viewport: `x`, `y`, `width`, `height`, and its edges.
30
+ *
31
+ * @example
32
+ * const box = measureLayoutBox(card)
33
+ * @see https://wardic.dev/reference/solid/layout/measure-layout-box
34
+ */
35
+ export declare const measureLayoutBox: (el: HTMLElement) => Probe.Bounds;
36
+ /**
37
+ * The bounds on `element`'s x/y that keep it inside `container` (Motion's element `dragConstraints`):
38
+ * `element` measured without its own transform (its layout box, as Motion's projection measures it),
39
+ * `container` as it renders. With `mapPoint` (Motion's `transformPagePoint`), each box's corners are
40
+ * mapped through it first, as Motion's `measurePageBox` maps them: a container inside a zoomed parent
41
+ * bounds the element in its own pixels.
42
+ */
43
+ export declare const dragBoundsWithin: (element: HTMLElement, container: Element, mapPoint?: (point: Point.Point) => Point.Point) => Drag.Bounds;
44
+ /** A box's size, in CSS px. */
45
+ export interface BoxSize {
46
+ readonly width: number;
47
+ readonly height: number;
48
+ }
49
+ /**
50
+ * A page box's size as it renders (#261, ADR-0018 *Amendment (#261)*): a raw `getBoundingClientRect`,
51
+ * so a transformed one reads as painted, which the observer's border box doesn't (its echo then reads
52
+ * as a change, and costs one refresh).
53
+ */
54
+ export declare const readBoxSize: (el: Element) => BoxSize;
55
+ /** Whether `el` takes space in its parent's flow (#261): it isn't absolutely or fixed positioned. */
56
+ export declare const takesFlowSpace: (el: Element) => boolean;
57
+ /** An element's scroll offset (ADR-0012, Motion's `measureScroll`). */
58
+ export declare const measureScroll: (el: HTMLElement) => Point.Point;
59
+ /**
60
+ * Whether `el` is a scroll ROOT (ADR-0012, Motion's `checkIsScrollRoot`): a
61
+ * `position: fixed` element establishes a viewport-relative frame, so its subtree
62
+ * doesn't fold in page (or outer-container) scroll.
63
+ */
64
+ export declare const isScrollRoot: (el: HTMLElement) => boolean;
65
+ /** The properties that move an element on screen without moving its layout (ADR-0012, *Amendment (#136)*). */
66
+ declare const TRANSFORM_PROPERTIES: readonly ["transform", "translate", "scale", "rotate"];
67
+ type TransformProperty = (typeof TRANSFORM_PROPERTIES)[number];
68
+ /** What the Measure pass needs from an element's style to hold its transform. */
69
+ export interface TransformStyle {
70
+ /** The transform properties that aren't `none`. Empty: nothing moves it. */
71
+ readonly moved: ReadonlyArray<TransformProperty>;
72
+ /** Whether a CSS transition is declared on one of them. */
73
+ readonly transitioned: boolean;
74
+ }
75
+ /**
76
+ * {@link TransformStyle} from an element's computed style. `getComputedStyle` returns a
77
+ * live declaration, so a caller that keeps one per element reads the current values each
78
+ * time without calling it again.
79
+ */
80
+ export declare const transformStyleFrom: (style: CSSStyleDeclaration) => TransformStyle;
81
+ /**
82
+ * Whether a CSS transition is running on one of `el`'s transform properties. Holding it
83
+ * would cancel or restart that transition, so the pass leaves it as it is: its offset
84
+ * stays in the box (the documented limit).
85
+ */
86
+ export declare const transitionRunning: (el: Element) => boolean;
87
+ /** An element the pass can hold: one with an inline style. */
88
+ export type Holdable = Element & ElementCSSInlineStyle;
89
+ /** Whether `el` has an inline style the pass can hold its transform through. */
90
+ export declare const isHoldable: (el: Element) => el is Holdable;
91
+ /** An element held at its transform's identity for a read, and what to put back. */
92
+ export interface TransformHold {
93
+ readonly element: Holdable;
94
+ /** Each held property's own inline value and priority (`""` for none). */
95
+ readonly saved: ReadonlyArray<readonly [TransformProperty, string, string]>;
96
+ /** The inline `transition-property` and priority, when the hold turned transitions off. */
97
+ readonly transition: Option.Option<readonly [string, string]>;
98
+ }
99
+ /**
100
+ * Hold `el`'s transform properties at their identity (ADR-0012, *Amendment (#136)*):
101
+ * inline and `!important`, so a stylesheet rule, a CSS animation and a Web Animation
102
+ * all give way. An element with a transition declared on one of them also gets
103
+ * `transition-property: none` for the hold, so it starts none.
104
+ */
105
+ export declare const holdTransform: (el: Holdable, style: TransformStyle) => TransformHold;
106
+ /**
107
+ * Put back what {@link holdTransform} replaced. The elements whose transitions it turned
108
+ * off get their transform back first, then a style read, then their transition, so the
109
+ * return from identity starts no transition either.
110
+ */
111
+ export declare const releaseTransforms: (holds: ReadonlyArray<TransformHold>) => void;
112
+ /** A `position: sticky` element held at its static place for a read (#578), and what to put back. */
113
+ export interface StickyHold {
114
+ readonly element: Holdable;
115
+ /** Each held property's own inline value and priority (`""` for none). */
116
+ readonly saved: ReadonlyArray<readonly [string, string, string]>;
117
+ }
118
+ /**
119
+ * Hold a `position: sticky` element at its static place (ADR-0012, *Amendment (#578)*):
120
+ * `position: relative` with every inset `auto`, inline and `!important`, so it's offset by
121
+ * nothing and still positioned, the containing block of what's absolute inside it. Neither
122
+ * the flow around it nor the scroll moves: a sticky element's offset takes no space.
123
+ */
124
+ export declare const holdUnstuck: (el: Holdable) => StickyHold;
125
+ /** Put back what {@link holdUnstuck} replaced. */
126
+ export declare const releaseUnstuck: (holds: ReadonlyArray<StickyHold>) => void;
127
+ /**
128
+ * The document's scroll offset (the page/window scroll, ADR-0012, Motion's
129
+ * `DocumentProjectionNode` root). Folded into every box unless it sits in a scroll
130
+ * root. SSR-safe (returns origin when there is no document).
131
+ */
132
+ export declare const measureDocumentScroll: () => Point.Point;
133
+ export { readScrollStyle, scrollersOf, scrollStyleFrom, type ScrollStyle } from "./scrollers.ts";
134
+ /** Whether `inner` is `outer` or inside it, in the DOM's tree: the engine's one question of the tree (#618). */
135
+ export declare const contains: (outer: Node, inner: Node) => boolean;
136
+ /** `el`'s computed opacity, as a number: a Crossfade's fade from where its leaver is drawn (#618). */
137
+ export declare const readOpacity: (el: Element) => number;
138
+ /** A scale corrector's key and the CSS property it reads (#443). */
139
+ export interface CorrectedKey {
140
+ readonly key: string;
141
+ readonly cssKey: string;
142
+ }
143
+ /** The computed values of `keys` on `el` (#443), by key: an empty one, or `none`, left out. One style read. */
144
+ export declare const readCustomBases: (el: Element, keys: ReadonlyArray<CorrectedKey>) => Readonly<Record<string, string>>;
145
+ /**
146
+ * Each of `els`' offsets from its static place (#578): its box as it's drawn, less its box held
147
+ * unstuck. All held at once, so it costs one layout for them all, then one more after the release.
148
+ */
149
+ export declare const readStickyShifts: (els: Iterable<HTMLElement>) => Map<Element, Point.Point>;
150
+ //# sourceMappingURL=measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../src/internal/measure.ts"],"names":[],"mappings":"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"}