@exponential_app/eui 0.3.0 → 0.4.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 (442) hide show
  1. package/catalog/a11y.json +10 -0
  2. package/catalog/core.catalog.json +284 -6
  3. package/catalog/core.schema.json +437 -4
  4. package/catalog/layout.json +3 -2
  5. package/catalog/limits.json +10 -1
  6. package/catalog/macros.json +1 -0
  7. package/catalog/recipes.json +3 -1
  8. package/catalog/strings.json +9 -2
  9. package/catalog/style.json +21 -0
  10. package/catalog/theme.schema.json +4435 -3676
  11. package/conformance/manifest.json +2 -2
  12. package/conformance/motion/build-corpus.ts +232 -0
  13. package/conformance/motion/corpus/SOURCES.md +117 -0
  14. package/conformance/motion/corpus/images/footage_0.json +1 -0
  15. package/conformance/motion/corpus/images/img_0.jpg +0 -0
  16. package/conformance/motion/corpus/images/img_1.jpg +0 -0
  17. package/conformance/motion/corpus/images/triangle.png +0 -0
  18. package/conformance/motion/corpus/skottie-3d-parenting-nocamera.json +367 -0
  19. package/conformance/motion/corpus/skottie-auto-orient-2.json +292 -0
  20. package/conformance/motion/corpus/skottie-auto-orient.json +717 -0
  21. package/conformance/motion/corpus/skottie-bezier-extranormal.json +199 -0
  22. package/conformance/motion/corpus/skottie-blendmode-hardmix.json +558 -0
  23. package/conformance/motion/corpus/skottie-chained-mattes.json +259 -0
  24. package/conformance/motion/corpus/skottie-dropshadow-ramp.json +852 -0
  25. package/conformance/motion/corpus/skottie-dropshadow-style.json +278 -0
  26. package/conformance/motion/corpus/skottie-effects-transform.json +385 -0
  27. package/conformance/motion/corpus/skottie-fill-effect.json +358 -0
  28. package/conformance/motion/corpus/skottie-fill-rule.json +457 -0
  29. package/conformance/motion/corpus/skottie-gaussian-blur.json +670 -0
  30. package/conformance/motion/corpus/skottie-gradient-opacity.json +451 -0
  31. package/conformance/motion/corpus/skottie-gradient-radial-highlight.json +581 -0
  32. package/conformance/motion/corpus/skottie-hidden-shapes-layers.json +381 -0
  33. package/conformance/motion/corpus/skottie-huesaturation-effect.json +1117 -0
  34. package/conformance/motion/corpus/skottie-invert-effect.json +665 -0
  35. package/conformance/motion/corpus/skottie-luma-matte.json +239 -0
  36. package/conformance/motion/corpus/skottie-mask-feather.json +892 -0
  37. package/conformance/motion/corpus/skottie-masking-opaque.json +2376 -0
  38. package/conformance/motion/corpus/skottie-masking-translucent.json +2376 -0
  39. package/conformance/motion/corpus/skottie-matte-blendmode.json +196 -0
  40. package/conformance/motion/corpus/skottie-matte-nonsequential.json +722 -0
  41. package/conformance/motion/corpus/skottie-matte-visible.json +666 -0
  42. package/conformance/motion/corpus/skottie-mergepaths-effect.json +722 -0
  43. package/conformance/motion/corpus/skottie-motion-blur-mask.json +120 -0
  44. package/conformance/motion/corpus/skottie-nested-animation.json +253 -0
  45. package/conformance/motion/corpus/skottie-offsetpaths-effect.json +525 -0
  46. package/conformance/motion/corpus/skottie-phonehub-connecting.json +947 -0
  47. package/conformance/motion/corpus/skottie-puckerbloat-effect.json +339 -0
  48. package/conformance/motion/corpus/skottie-repeater.json +234 -0
  49. package/conformance/motion/corpus/skottie-sample-1.json +168 -0
  50. package/conformance/motion/corpus/skottie-sample-search.json +329 -0
  51. package/conformance/motion/corpus/skottie-spatial-supernormal.json +898 -0
  52. package/conformance/motion/corpus/skottie-text-animator-1.json +1286 -0
  53. package/conformance/motion/corpus/skottie-text-fill-over-stroke.json +1014 -0
  54. package/conformance/motion/corpus/skottie-text-tracking.json +950 -0
  55. package/conformance/motion/corpus/skottie-text-valign.json +484 -0
  56. package/conformance/motion/corpus/skottie-time-reverse.json +297 -0
  57. package/conformance/motion/corpus/skottie-transform-skew.json +290 -0
  58. package/conformance/motion/corpus/skottie-trimpath-fill.json +933 -0
  59. package/conformance/motion/corpus/skottie-trimpath-modes.json +266 -0
  60. package/conformance/motion/corpus/skottie-tritone-effect.json +379 -0
  61. package/conformance/motion/corpus/spec-blend-mode.json +531 -0
  62. package/conformance/motion/corpus/spec-ellipse.json +142 -0
  63. package/conformance/motion/corpus/spec-fill.json +193 -0
  64. package/conformance/motion/corpus/spec-gradient-stroke.json +1263 -0
  65. package/conformance/motion/corpus/spec-gradient.json +1255 -0
  66. package/conformance/motion/corpus/spec-mask.json +773 -0
  67. package/conformance/motion/corpus/spec-masks.json +676 -0
  68. package/conformance/motion/corpus/spec-matte.json +390 -0
  69. package/conformance/motion/corpus/spec-metadata.json +1 -0
  70. package/conformance/motion/corpus/spec-path.json +177 -0
  71. package/conformance/motion/corpus/spec-pucker-bloat.json +179 -0
  72. package/conformance/motion/corpus/spec-rectangle.json +145 -0
  73. package/conformance/motion/corpus/spec-rounded-corners.json +187 -0
  74. package/conformance/motion/corpus/spec-slots.json +325 -0
  75. package/conformance/motion/corpus/spec-star.json +159 -0
  76. package/conformance/motion/corpus/spec-stroke.json +156 -0
  77. package/conformance/motion/corpus/spec-test-ellipse-xy-pos.json +141 -0
  78. package/conformance/motion/corpus/spec-test-gradient-fill.json +1 -0
  79. package/conformance/motion/corpus/spec-test-gradient-stroke.json +229 -0
  80. package/conformance/motion/corpus/spec-test-unknown-shape.json +63 -0
  81. package/conformance/motion/corpus/spec-time-remap.json +1090 -0
  82. package/conformance/motion/corpus/spec-time-stretch.json +594 -0
  83. package/conformance/motion/corpus/spec-transform.json +273 -0
  84. package/conformance/motion/corpus/spec-trim-path.json +209 -0
  85. package/conformance/motion/corpus/web-adrock.json +1 -0
  86. package/conformance/motion/corpus/web-bacon.json +1 -0
  87. package/conformance/motion/corpus/web-banner.json +1 -0
  88. package/conformance/motion/corpus/web-bodymovin.json +1 -0
  89. package/conformance/motion/corpus/web-dalek.json +1 -0
  90. package/conformance/motion/corpus/web-footage-data.json +1 -0
  91. package/conformance/motion/corpus/web-lights.json +1 -0
  92. package/conformance/motion/corpus/web-ripple.json +1 -0
  93. package/conformance/motion/corpus/web-starfish.json +1 -0
  94. package/conformance/motion/known-gaps.json +35 -0
  95. package/conformance/motion/parity/group-transforms-parenting@0.png +0 -0
  96. package/conformance/motion/parity/group-transforms-parenting@10.png +0 -0
  97. package/conformance/motion/parity/hidden-unknown-inactive@0.png +0 -0
  98. package/conformance/motion/parity/keyframes-transform@0.png +0 -0
  99. package/conformance/motion/parity/keyframes-transform@10.png +0 -0
  100. package/conformance/motion/parity/keyframes-transform@15.png +0 -0
  101. package/conformance/motion/parity/keyframes-transform@5.png +0 -0
  102. package/conformance/motion/parity/layer-opacity-blend@0.png +0 -0
  103. package/conformance/motion/parity/linear-gradient@0.png +0 -0
  104. package/conformance/motion/parity/masks-modes@0.png +0 -0
  105. package/conformance/motion/parity/matte-alpha@0.png +0 -0
  106. package/conformance/motion/parity/matte-luma@0.png +0 -0
  107. package/conformance/motion/parity/matte-parent-tp@0.png +0 -0
  108. package/conformance/motion/parity/path-evenodd@0.png +0 -0
  109. package/conformance/motion/parity/precomp-clip-offset@0.png +0 -0
  110. package/conformance/motion/parity/precomp-clip-offset@15.png +0 -0
  111. package/conformance/motion/parity/precomp-clip-offset@5.png +0 -0
  112. package/conformance/motion/parity/radial-gradient-highlight@0.png +0 -0
  113. package/conformance/motion/parity/rect-solid-fill@0.png +0 -0
  114. package/conformance/motion/parity/repeater@0.png +0 -0
  115. package/conformance/motion/parity/rounded-rect-ellipse@0.png +0 -0
  116. package/conformance/motion/parity/solid-and-image@0.png +0 -0
  117. package/conformance/motion/parity/split-position-skew@0.png +0 -0
  118. package/conformance/motion/parity/split-position-skew@10.png +0 -0
  119. package/conformance/motion/parity/star-polygon@0.png +0 -0
  120. package/conformance/motion/parity/stroke-caps-joins@0.png +0 -0
  121. package/conformance/motion/parity/stroke-dashes@0.png +0 -0
  122. package/conformance/motion/parity/stroke-dashes@10.png +0 -0
  123. package/conformance/motion/parity/time-remap@0.png +0 -0
  124. package/conformance/motion/parity/time-remap@10.png +0 -0
  125. package/conformance/motion/parity/time-remap@19.png +0 -0
  126. package/conformance/motion/parity/time-stretch@0.png +0 -0
  127. package/conformance/motion/parity/time-stretch@10.png +0 -0
  128. package/conformance/motion/parity/trim-individually@0.png +0 -0
  129. package/conformance/motion/parity/trim-path@0.png +0 -0
  130. package/conformance/motion/parity/trim-path@10.png +0 -0
  131. package/conformance/motion/refs/index.json +688 -0
  132. package/conformance/motion/refs/skottie-3d-parenting-nocamera@0.png +0 -0
  133. package/conformance/motion/refs/skottie-3d-parenting-nocamera@150.png +0 -0
  134. package/conformance/motion/refs/skottie-3d-parenting-nocamera@270.png +0 -0
  135. package/conformance/motion/refs/skottie-auto-orient-2@0.png +0 -0
  136. package/conformance/motion/refs/skottie-auto-orient-2@210.png +0 -0
  137. package/conformance/motion/refs/skottie-auto-orient-2@378.png +0 -0
  138. package/conformance/motion/refs/skottie-auto-orient@0.png +0 -0
  139. package/conformance/motion/refs/skottie-auto-orient@300.png +0 -0
  140. package/conformance/motion/refs/skottie-auto-orient@540.png +0 -0
  141. package/conformance/motion/refs/skottie-bezier-extranormal@0.png +0 -0
  142. package/conformance/motion/refs/skottie-bezier-extranormal@150.png +0 -0
  143. package/conformance/motion/refs/skottie-bezier-extranormal@270.png +0 -0
  144. package/conformance/motion/refs/skottie-blendmode-hardmix@0.png +0 -0
  145. package/conformance/motion/refs/skottie-blendmode-hardmix@150.png +0 -0
  146. package/conformance/motion/refs/skottie-blendmode-hardmix@270.png +0 -0
  147. package/conformance/motion/refs/skottie-chained-mattes@0.png +0 -0
  148. package/conformance/motion/refs/skottie-chained-mattes@300.png +0 -0
  149. package/conformance/motion/refs/skottie-chained-mattes@540.png +0 -0
  150. package/conformance/motion/refs/skottie-dropshadow-ramp@0.png +0 -0
  151. package/conformance/motion/refs/skottie-dropshadow-ramp@135.png +0 -0
  152. package/conformance/motion/refs/skottie-dropshadow-ramp@75.png +0 -0
  153. package/conformance/motion/refs/skottie-dropshadow-style@0.png +0 -0
  154. package/conformance/motion/refs/skottie-dropshadow-style@300.png +0 -0
  155. package/conformance/motion/refs/skottie-dropshadow-style@540.png +0 -0
  156. package/conformance/motion/refs/skottie-effects-transform@0.png +0 -0
  157. package/conformance/motion/refs/skottie-effects-transform@450.png +0 -0
  158. package/conformance/motion/refs/skottie-effects-transform@810.png +0 -0
  159. package/conformance/motion/refs/skottie-fill-effect@0.png +0 -0
  160. package/conformance/motion/refs/skottie-fill-effect@300.png +0 -0
  161. package/conformance/motion/refs/skottie-fill-effect@540.png +0 -0
  162. package/conformance/motion/refs/skottie-fill-rule@0.png +0 -0
  163. package/conformance/motion/refs/skottie-fill-rule@150.png +0 -0
  164. package/conformance/motion/refs/skottie-fill-rule@270.png +0 -0
  165. package/conformance/motion/refs/skottie-gaussian-blur@0.png +0 -0
  166. package/conformance/motion/refs/skottie-gaussian-blur@150.png +0 -0
  167. package/conformance/motion/refs/skottie-gaussian-blur@270.png +0 -0
  168. package/conformance/motion/refs/skottie-gradient-opacity@0.png +0 -0
  169. package/conformance/motion/refs/skottie-gradient-opacity@150.png +0 -0
  170. package/conformance/motion/refs/skottie-gradient-opacity@270.png +0 -0
  171. package/conformance/motion/refs/skottie-gradient-radial-highlight@0.png +0 -0
  172. package/conformance/motion/refs/skottie-gradient-radial-highlight@135.png +0 -0
  173. package/conformance/motion/refs/skottie-gradient-radial-highlight@75.png +0 -0
  174. package/conformance/motion/refs/skottie-hidden-shapes-layers@0.png +0 -0
  175. package/conformance/motion/refs/skottie-hidden-shapes-layers@150.png +0 -0
  176. package/conformance/motion/refs/skottie-hidden-shapes-layers@270.png +0 -0
  177. package/conformance/motion/refs/skottie-huesaturation-effect@0.png +0 -0
  178. package/conformance/motion/refs/skottie-huesaturation-effect@30.png +0 -0
  179. package/conformance/motion/refs/skottie-huesaturation-effect@54.png +0 -0
  180. package/conformance/motion/refs/skottie-invert-effect@0.png +0 -0
  181. package/conformance/motion/refs/skottie-invert-effect@300.png +0 -0
  182. package/conformance/motion/refs/skottie-invert-effect@540.png +0 -0
  183. package/conformance/motion/refs/skottie-luma-matte@0.png +0 -0
  184. package/conformance/motion/refs/skottie-luma-matte@150.png +0 -0
  185. package/conformance/motion/refs/skottie-luma-matte@270.png +0 -0
  186. package/conformance/motion/refs/skottie-mask-feather@0.png +0 -0
  187. package/conformance/motion/refs/skottie-mask-feather@150.png +0 -0
  188. package/conformance/motion/refs/skottie-mask-feather@270.png +0 -0
  189. package/conformance/motion/refs/skottie-masking-opaque@0.png +0 -0
  190. package/conformance/motion/refs/skottie-masking-opaque@135.png +0 -0
  191. package/conformance/motion/refs/skottie-masking-opaque@75.png +0 -0
  192. package/conformance/motion/refs/skottie-masking-translucent@0.png +0 -0
  193. package/conformance/motion/refs/skottie-masking-translucent@135.png +0 -0
  194. package/conformance/motion/refs/skottie-masking-translucent@75.png +0 -0
  195. package/conformance/motion/refs/skottie-matte-blendmode@0.png +0 -0
  196. package/conformance/motion/refs/skottie-matte-blendmode@150.png +0 -0
  197. package/conformance/motion/refs/skottie-matte-blendmode@270.png +0 -0
  198. package/conformance/motion/refs/skottie-matte-nonsequential@0.png +0 -0
  199. package/conformance/motion/refs/skottie-matte-nonsequential@150.png +0 -0
  200. package/conformance/motion/refs/skottie-matte-nonsequential@270.png +0 -0
  201. package/conformance/motion/refs/skottie-matte-visible@0.png +0 -0
  202. package/conformance/motion/refs/skottie-matte-visible@150.png +0 -0
  203. package/conformance/motion/refs/skottie-matte-visible@270.png +0 -0
  204. package/conformance/motion/refs/skottie-mergepaths-effect@0.png +0 -0
  205. package/conformance/motion/refs/skottie-mergepaths-effect@210.png +0 -0
  206. package/conformance/motion/refs/skottie-mergepaths-effect@378.png +0 -0
  207. package/conformance/motion/refs/skottie-motion-blur-mask@0.png +0 -0
  208. package/conformance/motion/refs/skottie-motion-blur-mask@150.png +0 -0
  209. package/conformance/motion/refs/skottie-motion-blur-mask@270.png +0 -0
  210. package/conformance/motion/refs/skottie-nested-animation@0.png +0 -0
  211. package/conformance/motion/refs/skottie-nested-animation@300.png +0 -0
  212. package/conformance/motion/refs/skottie-nested-animation@540.png +0 -0
  213. package/conformance/motion/refs/skottie-offsetpaths-effect@0.png +0 -0
  214. package/conformance/motion/refs/skottie-offsetpaths-effect@150.png +0 -0
  215. package/conformance/motion/refs/skottie-offsetpaths-effect@270.png +0 -0
  216. package/conformance/motion/refs/skottie-phonehub-connecting@0.png +0 -0
  217. package/conformance/motion/refs/skottie-puckerbloat-effect@0.png +0 -0
  218. package/conformance/motion/refs/skottie-puckerbloat-effect@210.png +0 -0
  219. package/conformance/motion/refs/skottie-puckerbloat-effect@378.png +0 -0
  220. package/conformance/motion/refs/skottie-repeater@0.png +0 -0
  221. package/conformance/motion/refs/skottie-repeater@300.png +0 -0
  222. package/conformance/motion/refs/skottie-repeater@540.png +0 -0
  223. package/conformance/motion/refs/skottie-sample-1@0.png +0 -0
  224. package/conformance/motion/refs/skottie-sample-1@100.png +0 -0
  225. package/conformance/motion/refs/skottie-sample-1@180.png +0 -0
  226. package/conformance/motion/refs/skottie-sample-search@0.png +0 -0
  227. package/conformance/motion/refs/skottie-sample-search@27.png +0 -0
  228. package/conformance/motion/refs/skottie-sample-search@48.png +0 -0
  229. package/conformance/motion/refs/skottie-spatial-supernormal@0.png +0 -0
  230. package/conformance/motion/refs/skottie-spatial-supernormal@200.png +0 -0
  231. package/conformance/motion/refs/skottie-spatial-supernormal@360.png +0 -0
  232. package/conformance/motion/refs/skottie-text-animator-1@0.png +0 -0
  233. package/conformance/motion/refs/skottie-text-animator-1@150.png +0 -0
  234. package/conformance/motion/refs/skottie-text-animator-1@270.png +0 -0
  235. package/conformance/motion/refs/skottie-text-fill-over-stroke@0.png +0 -0
  236. package/conformance/motion/refs/skottie-text-fill-over-stroke@210.png +0 -0
  237. package/conformance/motion/refs/skottie-text-fill-over-stroke@378.png +0 -0
  238. package/conformance/motion/refs/skottie-text-tracking@0.png +0 -0
  239. package/conformance/motion/refs/skottie-text-tracking@108.png +0 -0
  240. package/conformance/motion/refs/skottie-text-tracking@60.png +0 -0
  241. package/conformance/motion/refs/skottie-text-valign@0.png +0 -0
  242. package/conformance/motion/refs/skottie-text-valign@150.png +0 -0
  243. package/conformance/motion/refs/skottie-text-valign@270.png +0 -0
  244. package/conformance/motion/refs/skottie-time-reverse@0.png +0 -0
  245. package/conformance/motion/refs/skottie-time-reverse@300.png +0 -0
  246. package/conformance/motion/refs/skottie-time-reverse@540.png +0 -0
  247. package/conformance/motion/refs/skottie-transform-skew@0.png +0 -0
  248. package/conformance/motion/refs/skottie-transform-skew@300.png +0 -0
  249. package/conformance/motion/refs/skottie-transform-skew@540.png +0 -0
  250. package/conformance/motion/refs/skottie-trimpath-fill@0.png +0 -0
  251. package/conformance/motion/refs/skottie-trimpath-fill@300.png +0 -0
  252. package/conformance/motion/refs/skottie-trimpath-fill@540.png +0 -0
  253. package/conformance/motion/refs/skottie-trimpath-modes@0.png +0 -0
  254. package/conformance/motion/refs/skottie-trimpath-modes@300.png +0 -0
  255. package/conformance/motion/refs/skottie-trimpath-modes@540.png +0 -0
  256. package/conformance/motion/refs/skottie-tritone-effect@0.png +0 -0
  257. package/conformance/motion/refs/skottie-tritone-effect@300.png +0 -0
  258. package/conformance/motion/refs/skottie-tritone-effect@540.png +0 -0
  259. package/conformance/motion/refs/spec-blend-mode@0.png +0 -0
  260. package/conformance/motion/refs/spec-blend-mode@162.png +0 -0
  261. package/conformance/motion/refs/spec-blend-mode@90.png +0 -0
  262. package/conformance/motion/refs/spec-ellipse@0.png +0 -0
  263. package/conformance/motion/refs/spec-ellipse@162.png +0 -0
  264. package/conformance/motion/refs/spec-ellipse@90.png +0 -0
  265. package/conformance/motion/refs/spec-fill@0.png +0 -0
  266. package/conformance/motion/refs/spec-fill@162.png +0 -0
  267. package/conformance/motion/refs/spec-fill@90.png +0 -0
  268. package/conformance/motion/refs/spec-gradient-stroke@0.png +0 -0
  269. package/conformance/motion/refs/spec-gradient-stroke@162.png +0 -0
  270. package/conformance/motion/refs/spec-gradient-stroke@90.png +0 -0
  271. package/conformance/motion/refs/spec-gradient@0.png +0 -0
  272. package/conformance/motion/refs/spec-gradient@162.png +0 -0
  273. package/conformance/motion/refs/spec-gradient@90.png +0 -0
  274. package/conformance/motion/refs/spec-mask@0.png +0 -0
  275. package/conformance/motion/refs/spec-mask@300.png +0 -0
  276. package/conformance/motion/refs/spec-mask@540.png +0 -0
  277. package/conformance/motion/refs/spec-masks@0.png +0 -0
  278. package/conformance/motion/refs/spec-masks@135.png +0 -0
  279. package/conformance/motion/refs/spec-masks@75.png +0 -0
  280. package/conformance/motion/refs/spec-matte@0.png +0 -0
  281. package/conformance/motion/refs/spec-matte@162.png +0 -0
  282. package/conformance/motion/refs/spec-matte@90.png +0 -0
  283. package/conformance/motion/refs/spec-metadata@0.png +0 -0
  284. package/conformance/motion/refs/spec-metadata@162.png +0 -0
  285. package/conformance/motion/refs/spec-metadata@90.png +0 -0
  286. package/conformance/motion/refs/spec-path@0.png +0 -0
  287. package/conformance/motion/refs/spec-path@162.png +0 -0
  288. package/conformance/motion/refs/spec-path@90.png +0 -0
  289. package/conformance/motion/refs/spec-pucker-bloat@0.png +0 -0
  290. package/conformance/motion/refs/spec-pucker-bloat@162.png +0 -0
  291. package/conformance/motion/refs/spec-pucker-bloat@90.png +0 -0
  292. package/conformance/motion/refs/spec-rectangle@0.png +0 -0
  293. package/conformance/motion/refs/spec-rectangle@162.png +0 -0
  294. package/conformance/motion/refs/spec-rectangle@90.png +0 -0
  295. package/conformance/motion/refs/spec-rounded-corners@0.png +0 -0
  296. package/conformance/motion/refs/spec-rounded-corners@162.png +0 -0
  297. package/conformance/motion/refs/spec-rounded-corners@90.png +0 -0
  298. package/conformance/motion/refs/spec-slots@0.png +0 -0
  299. package/conformance/motion/refs/spec-slots@450.png +0 -0
  300. package/conformance/motion/refs/spec-slots@810.png +0 -0
  301. package/conformance/motion/refs/spec-star@0.png +0 -0
  302. package/conformance/motion/refs/spec-star@162.png +0 -0
  303. package/conformance/motion/refs/spec-star@90.png +0 -0
  304. package/conformance/motion/refs/spec-stroke@0.png +0 -0
  305. package/conformance/motion/refs/spec-stroke@162.png +0 -0
  306. package/conformance/motion/refs/spec-stroke@90.png +0 -0
  307. package/conformance/motion/refs/spec-test-ellipse-xy-pos@0.png +0 -0
  308. package/conformance/motion/refs/spec-test-ellipse-xy-pos@162.png +0 -0
  309. package/conformance/motion/refs/spec-test-ellipse-xy-pos@90.png +0 -0
  310. package/conformance/motion/refs/spec-test-gradient-fill@0.png +0 -0
  311. package/conformance/motion/refs/spec-test-gradient-fill@30.png +0 -0
  312. package/conformance/motion/refs/spec-test-gradient-fill@54.png +0 -0
  313. package/conformance/motion/refs/spec-test-gradient-stroke@0.png +0 -0
  314. package/conformance/motion/refs/spec-test-gradient-stroke@30.png +0 -0
  315. package/conformance/motion/refs/spec-test-gradient-stroke@54.png +0 -0
  316. package/conformance/motion/refs/spec-test-unknown-shape@0.png +0 -0
  317. package/conformance/motion/refs/spec-test-unknown-shape@162.png +0 -0
  318. package/conformance/motion/refs/spec-test-unknown-shape@90.png +0 -0
  319. package/conformance/motion/refs/spec-time-remap@0.png +0 -0
  320. package/conformance/motion/refs/spec-time-remap@300.png +0 -0
  321. package/conformance/motion/refs/spec-time-remap@540.png +0 -0
  322. package/conformance/motion/refs/spec-time-stretch@0.png +0 -0
  323. package/conformance/motion/refs/spec-time-stretch@300.png +0 -0
  324. package/conformance/motion/refs/spec-time-stretch@540.png +0 -0
  325. package/conformance/motion/refs/spec-transform@0.png +0 -0
  326. package/conformance/motion/refs/spec-transform@162.png +0 -0
  327. package/conformance/motion/refs/spec-transform@90.png +0 -0
  328. package/conformance/motion/refs/spec-trim-path@0.png +0 -0
  329. package/conformance/motion/refs/spec-trim-path@162.png +0 -0
  330. package/conformance/motion/refs/spec-trim-path@90.png +0 -0
  331. package/conformance/motion/refs/web-adrock@0.png +0 -0
  332. package/conformance/motion/refs/web-adrock@10.png +0 -0
  333. package/conformance/motion/refs/web-adrock@18.png +0 -0
  334. package/conformance/motion/refs/web-bacon@0.png +0 -0
  335. package/conformance/motion/refs/web-bacon@126.png +0 -0
  336. package/conformance/motion/refs/web-bacon@70.png +0 -0
  337. package/conformance/motion/refs/web-banner@0.png +0 -0
  338. package/conformance/motion/refs/web-banner@301.png +0 -0
  339. package/conformance/motion/refs/web-banner@542.png +0 -0
  340. package/conformance/motion/refs/web-bodymovin@0.png +0 -0
  341. package/conformance/motion/refs/web-bodymovin@51.png +0 -0
  342. package/conformance/motion/refs/web-bodymovin@92.png +0 -0
  343. package/conformance/motion/refs/web-dalek@0.png +0 -0
  344. package/conformance/motion/refs/web-dalek@145.png +0 -0
  345. package/conformance/motion/refs/web-dalek@261.png +0 -0
  346. package/conformance/motion/refs/web-footage-data@0.png +0 -0
  347. package/conformance/motion/refs/web-footage-data@180.png +0 -0
  348. package/conformance/motion/refs/web-footage-data@324.png +0 -0
  349. package/conformance/motion/refs/web-lights@0.png +0 -0
  350. package/conformance/motion/refs/web-lights@150.png +0 -0
  351. package/conformance/motion/refs/web-lights@270.png +0 -0
  352. package/conformance/motion/refs/web-ripple@0.png +0 -0
  353. package/conformance/motion/refs/web-ripple@180.png +0 -0
  354. package/conformance/motion/refs/web-ripple@324.png +0 -0
  355. package/conformance/motion/refs/web-starfish@0.png +0 -0
  356. package/conformance/motion/refs/web-starfish@150.png +0 -0
  357. package/conformance/motion/refs/web-starfish@270.png +0 -0
  358. package/conformance/motion/render-refs.ts +126 -0
  359. package/conformance/motion/report.json +1367 -0
  360. package/conformance/motion/web-parity-gaps.json +12 -0
  361. package/conformance/motion-parity-entry.ts +3 -0
  362. package/conformance/motion-parity.ts +101 -0
  363. package/dist/chunks/{index-4z7f2bp1.js → index-4xczxey5.js} +35 -15
  364. package/dist/chunks/{index-4z7f2bp1.js.map → index-4xczxey5.js.map} +4 -4
  365. package/dist/chunks/{index-dx45asrf.js → index-5sjj5p84.js} +174 -8
  366. package/dist/chunks/{index-dx45asrf.js.map → index-5sjj5p84.js.map} +2 -2
  367. package/dist/chunks/{index-fy7y2nz8.js → index-cvf7bbs5.js} +23 -2
  368. package/dist/chunks/{index-fy7y2nz8.js.map → index-cvf7bbs5.js.map} +1 -1
  369. package/dist/chunks/index-dgkf6yw5.js +48 -0
  370. package/dist/chunks/index-dgkf6yw5.js.map +10 -0
  371. package/dist/chunks/{index-abcjanhc.js → index-f9wkb6aq.js} +192 -3
  372. package/dist/chunks/{index-abcjanhc.js.map → index-f9wkb6aq.js.map} +2 -2
  373. package/dist/chunks/index-t2mwfbb6.js +1515 -0
  374. package/dist/chunks/index-t2mwfbb6.js.map +15 -0
  375. package/dist/chunks/{index-h3zgfghf.js → index-vkn82srs.js} +179 -8
  376. package/dist/chunks/{index-h3zgfghf.js.map → index-vkn82srs.js.map} +2 -2
  377. package/dist/chunks/wasm-ctcc3cma.js +424 -0
  378. package/dist/chunks/wasm-ctcc3cma.js.map +11 -0
  379. package/dist/conformance.js +3154 -63
  380. package/dist/conformance.js.map +2 -2
  381. package/dist/entries/prompt.js +2 -2
  382. package/dist/entries/schema.js +3 -3
  383. package/dist/host/index.js +3 -3
  384. package/dist/index.js +333 -98
  385. package/dist/index.js.map +4 -4
  386. package/dist/types/src/catalog.generated.d.ts +50 -4
  387. package/dist/types/src/index.d.ts +2 -0
  388. package/dist/types/src/layout.d.ts +2 -0
  389. package/dist/types/src/limits.d.ts +1 -0
  390. package/dist/types/src/motion/index.d.ts +1 -0
  391. package/dist/types/src/motion/server.d.ts +9 -0
  392. package/dist/types/src/motion/wasm.d.ts +11 -0
  393. package/dist/types/src/web/coerce.d.ts +3 -0
  394. package/dist/types/src/web/focus.d.ts +8 -0
  395. package/dist/types/src/web/index.d.ts +5 -2
  396. package/dist/types/src/web/primitives/carousel.d.ts +1 -1
  397. package/dist/types/src/web/primitives/dock.d.ts +5 -2
  398. package/dist/types/src/web/primitives/index.d.ts +2 -0
  399. package/dist/types/src/web/primitives/motion-paint.d.ts +36 -0
  400. package/dist/types/src/web/primitives/motion.d.ts +162 -0
  401. package/dist/types/src/web/primitives/zoomable-image.d.ts +158 -0
  402. package/dist/types/src/web/table.d.ts +8 -0
  403. package/dist/types/src/zoom.d.ts +128 -0
  404. package/dist/types/wasm/motion/bytes.d.ts +1 -0
  405. package/dist/web/index.js +165 -230
  406. package/dist/web/index.js.map +8 -9
  407. package/dist/web/primitives/index.js +584 -7
  408. package/dist/web/primitives/index.js.map +7 -6
  409. package/docs/components.generated.json +392 -4
  410. package/docs/round-6-contract.md +5 -3
  411. package/docs/themes.generated.json +27 -0
  412. package/fixtures/bind-time.json +4 -0
  413. package/fixtures/catalog-components.json +930 -16
  414. package/fixtures/catalog-macros.json +11 -0
  415. package/fixtures/conformance-baseline.json +33020 -32952
  416. package/fixtures/conformance-known.json +64 -70
  417. package/fixtures/kitchen-sink.expanded.json +72 -0
  418. package/fixtures/kitchen-sink.json +33 -0
  419. package/fixtures/layout-geometry-round1.json +42 -42
  420. package/fixtures/motion-frames.json +2618 -0
  421. package/fixtures/motion-playback.json +528 -0
  422. package/fixtures/motion-state.json +722 -0
  423. package/fixtures/motion-validate.json +138 -0
  424. package/fixtures/primitive-specimens.json +1 -0
  425. package/fixtures/prompt-budget.json +16 -16
  426. package/fixtures/specimens.json +717 -21
  427. package/fixtures/theme-recipes.json +1518 -32
  428. package/fixtures/theme-resolved.json +732 -56
  429. package/fixtures/zoom.json +1382 -0
  430. package/generated/ExponentialUICatalog.generated.kt +20 -20
  431. package/generated/ExponentialUICatalog.generated.swift +20 -20
  432. package/generated/ExponentialUIThemes.generated.kt +7 -7
  433. package/generated/ExponentialUIThemes.generated.swift +7 -7
  434. package/generated/catalog.descriptions.generated.rs +1 -1
  435. package/generated/catalog.generated.rs +29 -29
  436. package/generated/catalog.themes.generated.rs +8 -8
  437. package/generated/core.descriptions.json +171 -5
  438. package/generated/core.runtime.json +189 -1
  439. package/package.json +1 -1
  440. package/themes/neutral.theme.json +172 -3
  441. package/dist/chunks/index-t6qz1770.js +0 -95
  442. package/dist/chunks/index-t6qz1770.js.map +0 -11
@@ -0,0 +1,158 @@
1
+ import type * as Zoom from "../../zoom.js";
2
+ import type { ZoomFrame, ZoomInitial, ZoomSize, ZoomView } from "../../zoom.js";
3
+ type Core = typeof Zoom;
4
+ /** The core functions the controller drives (`@exponential_app/eui`). */
5
+ export type ZoomMath = Pick<Core, `ZOOM` | `zoomIsTall` | `zoomRestView` | `zoomClamp` | `zoomAtRest` | `zoomTo` | `zoomCentre` | `zoomWheel` | `zoomScroll` | `zoomStep` | `zoomDoubleTap` | `zoomKey` | `zoomDrag` | `zoomPinch` | `zoomMomentum` | `zoomMomentumActive` | `zoomPanRoom` | `zoomResize` | `zoomPercent` | `zoomMenu` | `zoomBounds`>;
6
+ export declare const ZOOM_CONTROLS: readonly ["auto", "always", "none"];
7
+ export type ZoomControls = (typeof ZOOM_CONTROLS)[number];
8
+ /** What the pill draws (changes only when one of these does). */
9
+ export interface ZoomPillState {
10
+ percent: string;
11
+ atMin: boolean;
12
+ atMax: boolean;
13
+ atRest: boolean;
14
+ }
15
+ /** Two taps / clicks closer than this (ms, px) are a double tap. */
16
+ export declare const ZOOM_DOUBLE_TAP_MS = 300;
17
+ export declare const ZOOM_DOUBLE_TAP_SLOP = 24;
18
+ /** A press that moves less than this (px) is a tap, not a drag. */
19
+ export declare const ZOOM_TAP_SLOP = 4;
20
+ /** A ⌘/ctrl-wheel run settles (fires `zoom`) after this idle (ms). */
21
+ export declare const ZOOM_WHEEL_SETTLE_MS = 150;
22
+ /** The box's CSS aspect ratio (w/h): the picture's own, capped at the width
23
+ * for a TALL picture (a square window onto its top), else 16:9; none when
24
+ * the style sets a height. */
25
+ export declare function zoomBoxAspect(math: Pick<ZoomMath, `zoomIsTall`>, natural: ZoomSize | null, styledHeight: boolean): number | null;
26
+ /** The natural size the props declare (both positive), else null. */
27
+ export declare function zoomDeclaredSize(width: unknown, height: unknown): ZoomSize | null;
28
+ /** The menu's items (Fit, then the presets inside the limits) for the
29
+ * current view, before the controller measured (the rest view's). */
30
+ export declare function zoomPillOf(math: ZoomMath, view: ZoomView, frame: ZoomFrame): ZoomPillState;
31
+ export interface ZoomControllerOptions {
32
+ math: ZoomMath;
33
+ /** The viewport: focusable, takes every gesture. */
34
+ root: HTMLElement;
35
+ /** The picture, transformed (`transform-origin: 0 0`). */
36
+ image: HTMLElement;
37
+ /** The zoom pill (its hover / focus keep it shown); null = none. */
38
+ pill: () => HTMLElement | null;
39
+ /** The picture's pixel size, null while unknown. */
40
+ natural: () => ZoomSize | null;
41
+ initial: () => ZoomInitial;
42
+ maxScale: () => number | undefined;
43
+ /** The scale the host binds (`scale`), undefined = the rest view. */
44
+ boundScale: () => number | undefined;
45
+ /** The CSS `transition` of an animated change (the theme's standard
46
+ * motion); null = snap (reduced motion). */
47
+ transition: () => string | null;
48
+ /** `controls: auto` (the pill hides on its own). */
49
+ autoHide: () => boolean;
50
+ onPill: (pill: ZoomPillState) => void;
51
+ onPillVisible: (visible: boolean) => void;
52
+ /** A settled zoom change. */
53
+ onZoom: (scale: number, atFit: boolean) => void;
54
+ /** A single tap / click at rest. */
55
+ onTap: () => void;
56
+ }
57
+ export interface ZoomController {
58
+ view: () => ZoomView;
59
+ frame: () => ZoomFrame | null;
60
+ /** The pill's − / +. */
61
+ step: (direction: 1 | -1) => void;
62
+ /** Back to the rest view (the fit button, the menu's Fit). */
63
+ rest: () => void;
64
+ /** To `scale` about the viewport centre (the menu's presets). */
65
+ zoomScale: (scale: number) => void;
66
+ /** The bound `scale` changed from outside: apply it, no event. */
67
+ syncScale: () => void;
68
+ /** A new picture / natural size / initial / max: the rest view, at once. */
69
+ reset: () => void;
70
+ /** Keep the pill shown (its menu is open). */
71
+ holdPill: (hold: boolean) => void;
72
+ destroy: () => void;
73
+ }
74
+ /** Binds the gestures to `root` and paints `image`; the pill's state and
75
+ * visibility go out through the callbacks. Every number comes from the
76
+ * core's functions. */
77
+ export declare function createZoomController(o: ZoomControllerOptions): ZoomController;
78
+ /** The native's LAYOUT (inline: the theme recipe styles every part, these
79
+ * only place them; React style objects, Solid passes them through `css`).
80
+ * `pill` = style.json `zoomableImage.pill`. `flexShrink` comes last: jsdom
81
+ * re-appends it when Solid re-applies a style, so React's order holds. */
82
+ export declare function zoomableImageLayout(pill: {
83
+ inset: number;
84
+ percentMinWidth: number;
85
+ }): {
86
+ readonly root: {
87
+ readonly overflow: "clip";
88
+ readonly userSelect: "none";
89
+ };
90
+ readonly image: {
91
+ readonly position: "absolute";
92
+ readonly left: 0;
93
+ readonly top: 0;
94
+ readonly display: "block";
95
+ readonly maxWidth: "none";
96
+ readonly maxHeight: "none";
97
+ readonly transformOrigin: "0 0";
98
+ readonly pointerEvents: "none";
99
+ readonly userSelect: "none";
100
+ };
101
+ readonly pill: {
102
+ readonly position: "absolute";
103
+ readonly left: "50%";
104
+ readonly bottom: number;
105
+ readonly transform: "translateX(-50%)";
106
+ readonly zIndex: 1;
107
+ readonly display: "flex";
108
+ readonly flexDirection: "row";
109
+ readonly alignItems: "center";
110
+ readonly whiteSpace: "nowrap";
111
+ readonly cursor: "default";
112
+ readonly transition: "opacity var(--xui-motion-standard) var(--xui-ease-standard,ease)";
113
+ };
114
+ readonly pillHidden: {
115
+ readonly opacity: 0;
116
+ readonly pointerEvents: "none";
117
+ };
118
+ readonly button: {
119
+ readonly display: "inline-flex";
120
+ readonly alignItems: "center";
121
+ readonly justifyContent: "center";
122
+ readonly cursor: "pointer";
123
+ readonly flexShrink: 0;
124
+ };
125
+ readonly percent: {
126
+ readonly display: "inline-flex";
127
+ readonly alignItems: "center";
128
+ readonly justifyContent: "center";
129
+ readonly cursor: "pointer";
130
+ readonly minWidth: number;
131
+ readonly fontVariantNumeric: "tabular-nums";
132
+ readonly flexShrink: 0;
133
+ };
134
+ readonly divider: {
135
+ readonly alignSelf: "center";
136
+ readonly flexShrink: 0;
137
+ };
138
+ };
139
+ /** The settle spring of the native (the theme's standard motion). */
140
+ export declare const ZOOMABLE_IMAGE_NATIVE_TRANSITION = "transform var(--xui-motion-standard) var(--xui-ease-standard,ease)";
141
+ /** The primitive's (the app's motion tokens). */
142
+ export declare const ZOOMABLE_IMAGE_TRANSITION = "transform var(--motion-duration-standard,var(--xui-duration-standard,180ms)) var(--motion-ease-standard,cubic-bezier(0.2,0,0,1))";
143
+ /** The primitive's picture style before the controller paints it. */
144
+ export declare function zoomImageStyle(natural: ZoomSize | null): Record<string, string | number>;
145
+ export declare const ZOOMABLE_IMAGE_CLASSES: {
146
+ /** The viewport: as wide as its parent, the picture clipped to it. */
147
+ readonly root: "relative w-full min-w-0 overflow-hidden rounded-md select-none outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50";
148
+ readonly image: "pointer-events-none absolute top-0 left-0 block max-h-none max-w-none origin-top-left select-none";
149
+ /** THE pill: one glass capsule bottom-centre, `pill.inset` above the edge. */
150
+ readonly pill: "absolute bottom-4 left-1/2 z-10 flex -translate-x-1/2 flex-row items-center gap-0.5 rounded-full border border-glass-stroke-card bg-popover p-1 whitespace-nowrap shadow-lg backdrop-blur-lg transition-opacity duration-standard ease-standard";
151
+ readonly pillHidden: "pointer-events-none opacity-0";
152
+ /** − / + / fit: ghost icon buttons, 28 px circles (no border or fill of
153
+ * their own where the host has no preflight). */
154
+ readonly button: "size-7 rounded-full border-0 bg-transparent";
155
+ readonly percent: "h-7 min-w-14 rounded-full border-0 bg-transparent px-2 tabular-nums";
156
+ readonly divider: "mx-0.5 h-4 w-px shrink-0 bg-border";
157
+ };
158
+ export {};
@@ -11,7 +11,15 @@ export interface TableColumn {
11
11
  width?: number;
12
12
  align?: `start` | `center` | `end`;
13
13
  sortable?: boolean;
14
+ /** EXP-1548: one line with an ellipsis; cells wrap otherwise. */
15
+ truncate?: boolean;
14
16
  }
17
+ /** Every row's grid columns (round 2 §7): a fixed `width` keeps its px, the
18
+ * rest share the width, EXP-1548: never under `tableColumnMin`. */
19
+ export declare function tableTemplate(columns: readonly TableColumn[], multiple: boolean): string;
20
+ /** EXP-1548: the narrowest the columns fit in: header and body are at least
21
+ * this wide, so a narrower table scrolls (its root is the scroller). */
22
+ export declare function tableMinWidth(columns: readonly TableColumn[], multiple: boolean): string;
15
23
  export interface TableSort {
16
24
  key: string;
17
25
  direction: `asc` | `desc`;
@@ -0,0 +1,128 @@
1
+ export declare const ZOOM: {
2
+ $comment: string;
3
+ tallAspect: number;
4
+ maxScale: number;
5
+ presets: number[];
6
+ menuPresets: number[];
7
+ doubleTapFactor: number;
8
+ wheelRate: number;
9
+ wheelLinePx: number;
10
+ rubber: number;
11
+ momentumTauMs: number;
12
+ autoHideMs: number;
13
+ pill: {
14
+ height: number;
15
+ inset: number;
16
+ padding: number;
17
+ gap: number;
18
+ percentMinWidth: number;
19
+ dividerHeight: number;
20
+ };
21
+ };
22
+ export type ZoomInitial = `auto` | `fit` | `fitWidth` | `actual`;
23
+ export interface ZoomSize {
24
+ width: number;
25
+ height: number;
26
+ }
27
+ export interface ZoomPoint {
28
+ x: number;
29
+ y: number;
30
+ }
31
+ /** scale = displayed px per image px (1 = 100%); x/y = the picture's
32
+ * top-left in the viewport. */
33
+ export interface ZoomView {
34
+ scale: number;
35
+ x: number;
36
+ y: number;
37
+ }
38
+ /** What every function needs to know about the picture and its box. */
39
+ export interface ZoomFrame {
40
+ natural: ZoomSize;
41
+ viewport: ZoomSize;
42
+ initial?: ZoomInitial;
43
+ maxScale?: number;
44
+ }
45
+ /** A picture taller than 1 / tallAspect times its width. */
46
+ export declare function zoomIsTall(natural: ZoomSize): boolean;
47
+ /** The whole picture inside the viewport, never upscaled: the minimum. */
48
+ export declare function zoomFitScale(frame: ZoomFrame): number;
49
+ /** The scale range: [fit, max(fit, maxScale)]. */
50
+ export declare function zoomLimits(frame: ZoomFrame): {
51
+ min: number;
52
+ max: number;
53
+ };
54
+ /** The scale the picture opens at (and a double tap / `0` / the fit button
55
+ * returns to), inside the limits. */
56
+ export declare function zoomRestScale(frame: ZoomFrame): number;
57
+ /** The view inside its bounds (scale within the limits, no letterbox). */
58
+ export declare function zoomClamp(view: ZoomView, frame: ZoomFrame): ZoomView;
59
+ /** The opening view: the rest scale, centred; a taller-than-the-viewport
60
+ * picture starts at its top. */
61
+ export declare function zoomRestView(frame: ZoomFrame): ZoomView;
62
+ /** Whether the view sits at its rest scale. */
63
+ export declare function zoomAtRest(view: ZoomView, frame: ZoomFrame): boolean;
64
+ /** Zoom to `scale` (clamped) keeping the image point under `anchor` fixed. */
65
+ export declare function zoomTo(view: ZoomView, scale: number, anchor: ZoomPoint, frame: ZoomFrame): ZoomView;
66
+ /** The viewport's centre, the anchor of keys and the pill. */
67
+ export declare function zoomCentre(frame: ZoomFrame): ZoomPoint;
68
+ export type WheelDeltaMode = `pixel` | `line`;
69
+ /** ⌘/ctrl + wheel (or a trackpad pinch delivered as a wheel): the scale
70
+ * factor of one wheel event. */
71
+ export declare function zoomWheelFactor(deltaY: number, mode?: WheelDeltaMode): number;
72
+ /** One ⌘/ctrl-wheel event about the cursor. */
73
+ export declare function zoomWheel(view: ZoomView, deltaY: number, mode: WheelDeltaMode, anchor: ZoomPoint, frame: ZoomFrame): ZoomView;
74
+ /** A plain wheel / two-finger scroll: pans by the deltas, clamped. */
75
+ export declare function zoomScroll(view: ZoomView, deltaX: number, deltaY: number, frame: ZoomFrame): ZoomView;
76
+ /** The ladder steps walk: the presets plus the rest scale, inside the
77
+ * limits, ascending. */
78
+ export declare function zoomLadder(frame: ZoomFrame): number[];
79
+ /** The next ladder scale strictly above (`1`) or below (`-1`) the current
80
+ * one, or the current one at the end. */
81
+ export declare function zoomStepScale(scale: number, direction: 1 | -1, frame: ZoomFrame): number;
82
+ /** + / − (keys and the pill) about the viewport centre. */
83
+ export declare function zoomStep(view: ZoomView, direction: 1 | -1, frame: ZoomFrame): ZoomView;
84
+ /** The scale a double tap at rest jumps to. */
85
+ export declare function zoomDoubleTapScale(frame: ZoomFrame): number;
86
+ /** Double click / tap: at rest → zoom in about the point; else → rest. */
87
+ export declare function zoomDoubleTap(view: ZoomView, point: ZoomPoint, frame: ZoomFrame): ZoomView;
88
+ export type ZoomKey = `+` | `=` | `-` | `−` | `0` | `1`;
89
+ /** A key while the picture has focus; null = not a zoom key. */
90
+ export declare function zoomKey(view: ZoomView, key: string, frame: ZoomFrame): ZoomView | null;
91
+ /** The overshoot past an edge, damped: (1 − 1 / (o·c/d + 1))·d. */
92
+ export declare function zoomRubberBand(overshoot: number, extent: number): number;
93
+ /** A drag from `start` by (dx, dy) while held: past an edge the overshoot
94
+ * rubber-bands. The release is `zoomClamp` of the last view. */
95
+ export declare function zoomDrag(start: ZoomView, dx: number, dy: number, frame: ZoomFrame): ZoomView;
96
+ /** A pinch from `start` by the raw factor about `anchor` while held: past
97
+ * the min/max the scale rubber-bands (d = the limit). The release is
98
+ * `zoomClamp` of the last view. */
99
+ export declare function zoomPinch(start: ZoomView, factor: number, anchor: ZoomPoint, frame: ZoomFrame): ZoomView;
100
+ /** Mouse-drag momentum `t` ms after a release at velocity (px/ms),
101
+ * exponential decay, stopping at the edges. */
102
+ export declare function zoomMomentum(view: ZoomView, vx: number, vy: number, t: number, frame: ZoomFrame): ZoomView;
103
+ /** Whether momentum `t` ms after a release is still moving (above 0.01 px/ms). */
104
+ export declare function zoomMomentumActive(vx: number, vy: number, t: number): boolean;
105
+ /** The axes the picture can pan on: an axis without room hands a swipe to
106
+ * the host (paging). */
107
+ export declare function zoomPanRoom(view: ZoomView, frame: ZoomFrame): {
108
+ x: boolean;
109
+ y: boolean;
110
+ };
111
+ /** A new viewport: at rest = the new rest view; zoomed = the same scale
112
+ * about the viewport centre, clamped. */
113
+ export declare function zoomResize(view: ZoomView, from: ZoomSize, frame: ZoomFrame): ZoomView;
114
+ /** The pill's label: round(scale × 100) + `%`. */
115
+ export declare function zoomPercent(scale: number): string;
116
+ export interface ZoomMenuItem {
117
+ /** null = Fit (the rest view). */
118
+ scale: number | null;
119
+ label: string;
120
+ checked: boolean;
121
+ }
122
+ /** The % button's Menu: Fit, then the menu presets inside the limits. */
123
+ export declare function zoomMenu(view: ZoomView, frame: ZoomFrame, fitLabel: string): ZoomMenuItem[];
124
+ /** The pill's disabled ends. */
125
+ export declare function zoomBounds(view: ZoomView, frame: ZoomFrame): {
126
+ atMin: boolean;
127
+ atMax: boolean;
128
+ };