@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
@@ -1,4 +1,5 @@
1
1
  import {
2
+ __chunks,
2
3
  layoutSize2,
3
4
  visualScale2,
4
5
  elementScale2,
@@ -9,8 +10,27 @@ import {
9
10
  voiceWaveName2,
10
11
  voiceWaveClock2,
11
12
  voiceWaveFitChild2,
12
- VOICE_WAVE_CLASSES2
13
- } from "../../chunks/index-t6qz1770.js";
13
+ VOICE_WAVE_CLASSES2,
14
+ motionFitMatrix2,
15
+ motionConcat2,
16
+ motionFrameSize2,
17
+ MotionCanvasPool2,
18
+ paintMotionFrame2,
19
+ MOTION_MAX_PLAYING2,
20
+ MOTION_MAX_FPS2,
21
+ motionDeclaredSize2,
22
+ motionBoxStyle2,
23
+ motionFit2,
24
+ motionA11y2,
25
+ motionThemeSlots2,
26
+ motionCanPaint2,
27
+ motionFromDotLottie2,
28
+ motionDotLottie2,
29
+ MotionStateDriver2,
30
+ MotionView2,
31
+ resetMotionThemeIds2
32
+ } from "../../chunks/index-t2mwfbb6.js";
33
+ __chunks(import.meta.url,["ts0twve6","t2mwfbb6","ctcc3cma"],[["./index.js",1],["../../chunks/index-t2mwfbb6.js"],["../../chunks/wasm-ctcc3cma.js",1]],0);
14
34
 
15
35
  // packages/exponential-ui/src/web/primitives/button.ts
16
36
  import { cva } from "class-variance-authority";
@@ -207,7 +227,7 @@ function carouselCounterText(page, total) {
207
227
  return `${page + 1} / ${total}`;
208
228
  }
209
229
  var CAROUSEL_CLASSES = {
210
- counter: `pointer-events-none absolute start-2 top-2 z-10 rounded-full bg-black/55 px-2 text-xs leading-5 font-medium text-white tabular-nums`,
230
+ counter: `pointer-events-none absolute end-2 top-2 z-10 rounded-full bg-black/55 px-2 text-xs leading-5 font-medium text-white tabular-nums`,
211
231
  thumbnails: `flex flex-row gap-[8px] overflow-x-auto pt-2 [scrollbar-width:none]`,
212
232
  thumbnail: `relative size-[52px] shrink-0 cursor-pointer overflow-hidden rounded-md border-2 border-transparent bg-muted p-0 opacity-70 outline-none transition-opacity duration-fast hover:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[current=true]:border-foreground data-[current=true]:opacity-100`,
213
233
  thumbnailImage: `size-full object-cover`
@@ -992,8 +1012,8 @@ var DOCK_CARD_CLASSES = {
992
1012
  icon: `mt-0.5 size-3.5 shrink-0`,
993
1013
  text: `min-w-0 flex-1`,
994
1014
  header: `mb-1 flex items-center gap-2`,
995
- label: `truncate text-xs font-medium`,
996
- caption: `min-w-0 truncate text-xs text-muted-foreground`,
1015
+ label: `max-w-full shrink-0 truncate text-xs font-medium`,
1016
+ caption: `min-w-0 flex-1 basis-0 truncate text-xs text-muted-foreground`,
997
1017
  meta: `ml-auto shrink-0 text-xs text-muted-foreground`,
998
1018
  row: `flex min-w-0 items-center gap-2`,
999
1019
  title: `min-w-0 flex-1 truncate text-sm text-foreground/90`,
@@ -1377,6 +1397,531 @@ var TYPEAHEAD_PORTAL_SELECTOR = `[data-editor-autocomplete]`;
1377
1397
  function isTypeaheadPortalInteraction(event) {
1378
1398
  return event.target instanceof Element && event.target.closest(TYPEAHEAD_PORTAL_SELECTOR) !== null;
1379
1399
  }
1400
+ // packages/exponential-ui/src/web/primitives/zoomable-image.ts
1401
+ var ZOOM_CONTROLS = [`auto`, `always`, `none`];
1402
+ var ZOOM_DOUBLE_TAP_MS = 300;
1403
+ var ZOOM_DOUBLE_TAP_SLOP = 24;
1404
+ var ZOOM_TAP_SLOP = 4;
1405
+ var ZOOM_WHEEL_SETTLE_MS = 150;
1406
+ function zoomBoxAspect(math, natural, styledHeight) {
1407
+ if (styledHeight)
1408
+ return null;
1409
+ if (!natural || !(natural.width > 0) || !(natural.height > 0))
1410
+ return 16 / 9;
1411
+ if (math.zoomIsTall(natural))
1412
+ return 1;
1413
+ return natural.width / natural.height;
1414
+ }
1415
+ function zoomDeclaredSize(width, height) {
1416
+ const w = typeof width === `number` && Number.isFinite(width) ? width : 0;
1417
+ const h = typeof height === `number` && Number.isFinite(height) ? height : 0;
1418
+ return w > 0 && h > 0 ? { width: w, height: h } : null;
1419
+ }
1420
+ function zoomPillOf(math, view, frame) {
1421
+ const { atMin, atMax } = math.zoomBounds(view, frame);
1422
+ return { percent: math.zoomPercent(view.scale), atMin, atMax, atRest: math.zoomAtRest(view, frame) };
1423
+ }
1424
+ var sameView = (a, b) => Math.abs(a.scale - b.scale) < 0.000001 && Math.abs(a.x - b.x) < 0.001 && Math.abs(a.y - b.y) < 0.001;
1425
+ var samePill = (a, b) => !!a && a.percent === b.percent && a.atMin === b.atMin && a.atMax === b.atMax && a.atRest === b.atRest;
1426
+ var now = () => typeof performance !== `undefined` ? performance.now() : Date.now();
1427
+ var raf = (fn) => typeof requestAnimationFrame === `function` ? requestAnimationFrame(fn) : setTimeout(() => fn(now()), 16);
1428
+ var cancelRaf = (id) => typeof cancelAnimationFrame === `function` ? cancelAnimationFrame(id) : clearTimeout(id);
1429
+ function createZoomController(o) {
1430
+ const m = o.math;
1431
+ const { root, image } = o;
1432
+ let view = { scale: 1, x: 0, y: 0 };
1433
+ let viewport = { width: 0, height: 0 };
1434
+ let painted = false;
1435
+ let pill = null;
1436
+ let lastEmitted = null;
1437
+ const pointers = new Map;
1438
+ let drag = null;
1439
+ let pinch = null;
1440
+ let safari = null;
1441
+ let momentum = 0;
1442
+ let wheelTimer = null;
1443
+ let tapTimer = null;
1444
+ let lastTap = null;
1445
+ let visible = true;
1446
+ let hideTimer = null;
1447
+ let hovered = false;
1448
+ let held = false;
1449
+ const frame = () => {
1450
+ const natural = o.natural();
1451
+ if (!natural || viewport.width <= 0 || viewport.height <= 0)
1452
+ return null;
1453
+ return { natural, viewport, initial: o.initial(), maxScale: o.maxScale() };
1454
+ };
1455
+ const point = (e) => {
1456
+ const r = root.getBoundingClientRect();
1457
+ return { x: e.clientX - r.left, y: e.clientY - r.top };
1458
+ };
1459
+ const cursor = () => {
1460
+ const f = frame();
1461
+ if (!f)
1462
+ return;
1463
+ root.style.cursor = drag && drag.type === `mouse` && drag.moved ? `grabbing` : m.zoomAtRest(view, f) ? `zoom-in` : `grab`;
1464
+ const room = m.zoomPanRoom(view, f);
1465
+ root.style.touchAction = room.x && room.y ? `none` : room.x ? `pan-y` : room.y ? `pan-x` : `pan-x pan-y`;
1466
+ };
1467
+ const paint = (next, animated = false) => {
1468
+ view = next;
1469
+ const transition = animated ? o.transition() : null;
1470
+ image.style.transition = transition ?? ``;
1471
+ image.style.transform = `translate(${next.x}px, ${next.y}px) scale(${next.scale})`;
1472
+ if (!painted) {
1473
+ painted = true;
1474
+ image.style.visibility = ``;
1475
+ }
1476
+ const f = frame();
1477
+ if (f) {
1478
+ const p = zoomPillOf(m, next, f);
1479
+ if (!samePill(pill, p)) {
1480
+ pill = p;
1481
+ o.onPill(p);
1482
+ }
1483
+ }
1484
+ cursor();
1485
+ };
1486
+ const settle = () => {
1487
+ const f = frame();
1488
+ if (!f)
1489
+ return;
1490
+ if (lastEmitted !== null && Math.abs(lastEmitted - view.scale) < 0.000001)
1491
+ return;
1492
+ lastEmitted = view.scale;
1493
+ o.onZoom(view.scale, m.zoomAtRest(view, f));
1494
+ };
1495
+ const stopMotion = () => {
1496
+ if (momentum)
1497
+ cancelRaf(momentum);
1498
+ momentum = 0;
1499
+ };
1500
+ const setVisible = (next) => {
1501
+ if (visible === next)
1502
+ return;
1503
+ visible = next;
1504
+ o.onPillVisible(next);
1505
+ };
1506
+ const kept = () => {
1507
+ const el = o.pill();
1508
+ return held || hovered || !!el && typeof document !== `undefined` && el.contains(document.activeElement);
1509
+ };
1510
+ const armHide = () => {
1511
+ if (hideTimer)
1512
+ clearTimeout(hideTimer);
1513
+ hideTimer = null;
1514
+ if (!o.autoHide())
1515
+ return;
1516
+ hideTimer = setTimeout(() => {
1517
+ hideTimer = null;
1518
+ if (!kept())
1519
+ setVisible(false);
1520
+ }, m.ZOOM.autoHideMs);
1521
+ };
1522
+ const activity = () => {
1523
+ if (!o.autoHide())
1524
+ return;
1525
+ setVisible(true);
1526
+ armHide();
1527
+ };
1528
+ const jump = (next) => {
1529
+ stopMotion();
1530
+ paint(next, true);
1531
+ settle();
1532
+ activity();
1533
+ };
1534
+ const restView = (f) => {
1535
+ const rest = m.zoomRestView(f);
1536
+ const bound = o.boundScale();
1537
+ return bound !== undefined && Number.isFinite(bound) && bound > 0 ? m.zoomTo(rest, bound, m.zoomCentre(f), f) : rest;
1538
+ };
1539
+ const reset = () => {
1540
+ stopMotion();
1541
+ drag = null;
1542
+ pinch = null;
1543
+ const f = frame();
1544
+ if (!f) {
1545
+ painted = false;
1546
+ image.style.visibility = `hidden`;
1547
+ return;
1548
+ }
1549
+ paint(restView(f));
1550
+ lastEmitted = view.scale;
1551
+ };
1552
+ const measure = () => {
1553
+ const next = { width: root.clientWidth, height: root.clientHeight };
1554
+ if (next.width === viewport.width && next.height === viewport.height)
1555
+ return;
1556
+ const from = viewport;
1557
+ const before = frame();
1558
+ viewport = next;
1559
+ const f = frame();
1560
+ if (!f)
1561
+ return;
1562
+ if (!before || !painted) {
1563
+ paint(restView(f));
1564
+ lastEmitted = view.scale;
1565
+ return;
1566
+ }
1567
+ paint(m.zoomResize(view, from, f));
1568
+ };
1569
+ const tap = (at, type) => {
1570
+ const t = now();
1571
+ if (lastTap && t - lastTap.t < ZOOM_DOUBLE_TAP_MS && Math.hypot(at.x - lastTap.x, at.y - lastTap.y) < ZOOM_DOUBLE_TAP_SLOP) {
1572
+ if (tapTimer)
1573
+ clearTimeout(tapTimer);
1574
+ tapTimer = null;
1575
+ lastTap = null;
1576
+ const f = frame();
1577
+ if (f)
1578
+ jump(m.zoomDoubleTap(view, at, f));
1579
+ return;
1580
+ }
1581
+ lastTap = { t, x: at.x, y: at.y };
1582
+ if (tapTimer)
1583
+ clearTimeout(tapTimer);
1584
+ tapTimer = setTimeout(() => {
1585
+ tapTimer = null;
1586
+ lastTap = null;
1587
+ if (type === `touch` && o.autoHide()) {
1588
+ if (visible)
1589
+ setVisible(false);
1590
+ else
1591
+ activity();
1592
+ }
1593
+ const f = frame();
1594
+ if (f && m.zoomAtRest(view, f))
1595
+ o.onTap();
1596
+ }, ZOOM_DOUBLE_TAP_MS);
1597
+ };
1598
+ const release = (vx = 0, vy = 0) => {
1599
+ const f = frame();
1600
+ if (!f)
1601
+ return;
1602
+ const clamped = m.zoomClamp(view, f);
1603
+ if (!sameView(clamped, view)) {
1604
+ paint(clamped, true);
1605
+ settle();
1606
+ return;
1607
+ }
1608
+ settle();
1609
+ if (!m.zoomMomentumActive(vx, vy, 0))
1610
+ return;
1611
+ const from = view;
1612
+ const started = now();
1613
+ const step = () => {
1614
+ const t = now() - started;
1615
+ const g = frame();
1616
+ if (!g)
1617
+ return;
1618
+ paint(m.zoomMomentum(from, vx, vy, t, g));
1619
+ momentum = m.zoomMomentumActive(vx, vy, t) ? raf(step) : 0;
1620
+ };
1621
+ momentum = raf(step);
1622
+ };
1623
+ const velocity = (samples) => {
1624
+ const last = samples[samples.length - 1];
1625
+ if (!last || now() - last.t > 50)
1626
+ return { vx: 0, vy: 0 };
1627
+ const first = samples.find((s) => last.t - s.t <= 100) ?? last;
1628
+ const dt = last.t - first.t;
1629
+ return dt > 0 ? { vx: (last.x - first.x) / dt, vy: (last.y - first.y) / dt } : { vx: 0, vy: 0 };
1630
+ };
1631
+ const inPill = (target) => {
1632
+ const el = o.pill();
1633
+ return !!el && target instanceof Node && el.contains(target);
1634
+ };
1635
+ const startPinch = () => {
1636
+ const [a, b] = [...pointers.values()];
1637
+ if (!a || !b)
1638
+ return;
1639
+ drag = null;
1640
+ pinch = { start: view, dist: Math.max(1, Math.hypot(a.x - b.x, a.y - b.y)), mid: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 } };
1641
+ };
1642
+ const onPointerDown = (e) => {
1643
+ if (inPill(e.target))
1644
+ return;
1645
+ if (e.pointerType === `mouse` && e.button !== 0)
1646
+ return;
1647
+ const f = frame();
1648
+ if (!f)
1649
+ return;
1650
+ stopMotion();
1651
+ if (image.style.transition)
1652
+ paint(view);
1653
+ const at = point(e);
1654
+ pointers.set(e.pointerId, { x: at.x, y: at.y, type: e.pointerType });
1655
+ try {
1656
+ root.setPointerCapture(e.pointerId);
1657
+ } catch {}
1658
+ if (pointers.size === 2 && e.pointerType === `touch`) {
1659
+ startPinch();
1660
+ return;
1661
+ }
1662
+ if (pointers.size === 1)
1663
+ drag = { id: e.pointerId, type: e.pointerType, start: view, sx: at.x, sy: at.y, moved: false, samples: [{ t: now(), x: at.x, y: at.y }] };
1664
+ };
1665
+ const onPointerMove = (e) => {
1666
+ if (e.pointerType === `mouse` || pointers.has(e.pointerId))
1667
+ activity();
1668
+ const p = pointers.get(e.pointerId);
1669
+ if (!p)
1670
+ return;
1671
+ const at = point(e);
1672
+ p.x = at.x;
1673
+ p.y = at.y;
1674
+ const f = frame();
1675
+ if (!f)
1676
+ return;
1677
+ if (pinch) {
1678
+ const [a, b] = [...pointers.values()];
1679
+ if (!a || !b)
1680
+ return;
1681
+ const mid = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };
1682
+ const dist = Math.max(1, Math.hypot(a.x - b.x, a.y - b.y));
1683
+ const start = { scale: pinch.start.scale, x: pinch.start.x + mid.x - pinch.mid.x, y: pinch.start.y + mid.y - pinch.mid.y };
1684
+ paint(m.zoomPinch(start, dist / pinch.dist, mid, f));
1685
+ e.preventDefault();
1686
+ return;
1687
+ }
1688
+ if (!drag || drag.id !== e.pointerId)
1689
+ return;
1690
+ let dx = at.x - drag.sx;
1691
+ let dy = at.y - drag.sy;
1692
+ if (!drag.moved && Math.hypot(dx, dy) < ZOOM_TAP_SLOP)
1693
+ return;
1694
+ if (drag.type === `touch`) {
1695
+ const room = m.zoomPanRoom(drag.start, f);
1696
+ if (!room.x)
1697
+ dx = 0;
1698
+ if (!room.y)
1699
+ dy = 0;
1700
+ if (!drag.moved && dx === 0 && dy === 0)
1701
+ return;
1702
+ }
1703
+ drag.moved = true;
1704
+ drag.samples.push({ t: now(), x: at.x, y: at.y });
1705
+ if (drag.samples.length > 8)
1706
+ drag.samples.shift();
1707
+ paint(m.zoomDrag(drag.start, dx, dy, f));
1708
+ e.preventDefault();
1709
+ };
1710
+ const onPointerUp = (e) => {
1711
+ const had = pointers.delete(e.pointerId);
1712
+ if (!had)
1713
+ return;
1714
+ const cancelled = e.type === `pointercancel`;
1715
+ if (pinch) {
1716
+ if (pointers.size < 2) {
1717
+ pinch = null;
1718
+ drag = null;
1719
+ release();
1720
+ }
1721
+ return;
1722
+ }
1723
+ const d = drag;
1724
+ if (!d || d.id !== e.pointerId)
1725
+ return;
1726
+ drag = null;
1727
+ if (!d.moved) {
1728
+ cursor();
1729
+ if (!cancelled)
1730
+ tap({ x: d.sx, y: d.sy }, d.type);
1731
+ return;
1732
+ }
1733
+ const v = d.type === `mouse` && !cancelled ? velocity(d.samples) : { vx: 0, vy: 0 };
1734
+ release(v.vx, v.vy);
1735
+ };
1736
+ const onWheel = (e) => {
1737
+ const f = frame();
1738
+ if (!f)
1739
+ return;
1740
+ const mode = e.deltaMode === 1 ? `line` : `pixel`;
1741
+ if (e.ctrlKey || e.metaKey) {
1742
+ e.preventDefault();
1743
+ stopMotion();
1744
+ const page = e.deltaMode === 2 ? viewport.height : 1;
1745
+ paint(m.zoomWheel(view, e.deltaY * page, mode, point(e), f));
1746
+ activity();
1747
+ if (wheelTimer)
1748
+ clearTimeout(wheelTimer);
1749
+ wheelTimer = setTimeout(() => {
1750
+ wheelTimer = null;
1751
+ settle();
1752
+ }, ZOOM_WHEEL_SETTLE_MS);
1753
+ return;
1754
+ }
1755
+ const unit = e.deltaMode === 1 ? m.ZOOM.wheelLinePx : e.deltaMode === 2 ? viewport.height : 1;
1756
+ const next = m.zoomScroll(view, e.deltaX * unit, e.deltaY * unit, f);
1757
+ if (sameView(next, view))
1758
+ return;
1759
+ e.preventDefault();
1760
+ stopMotion();
1761
+ paint(next);
1762
+ activity();
1763
+ };
1764
+ const onGestureStart = (e) => {
1765
+ e.preventDefault();
1766
+ const g = e;
1767
+ if (!frame())
1768
+ return;
1769
+ stopMotion();
1770
+ safari = { start: view, anchor: point(g) };
1771
+ };
1772
+ const onGestureChange = (e) => {
1773
+ e.preventDefault();
1774
+ const f = frame();
1775
+ if (!safari || !f)
1776
+ return;
1777
+ paint(m.zoomPinch(safari.start, e.scale, safari.anchor, f));
1778
+ activity();
1779
+ };
1780
+ const onGestureEnd = (e) => {
1781
+ e.preventDefault();
1782
+ if (!safari)
1783
+ return;
1784
+ safari = null;
1785
+ release();
1786
+ };
1787
+ const onKeyDown = (e) => {
1788
+ if (e.ctrlKey || e.metaKey || e.altKey || e.defaultPrevented)
1789
+ return;
1790
+ if (inPill(e.target) && (e.key === `Enter` || e.key === ` `))
1791
+ return;
1792
+ const f = frame();
1793
+ if (!f)
1794
+ return;
1795
+ const next = m.zoomKey(view, e.key, f);
1796
+ if (!next)
1797
+ return;
1798
+ e.preventDefault();
1799
+ jump(next);
1800
+ };
1801
+ const onFocusIn = () => activity();
1802
+ const onFocusOut = () => armHide();
1803
+ const onPointerOver = (e) => {
1804
+ hovered = inPill(e.target);
1805
+ };
1806
+ const onPointerOut = (e) => {
1807
+ if (!hovered || inPill(e.relatedTarget))
1808
+ return;
1809
+ hovered = false;
1810
+ armHide();
1811
+ };
1812
+ const onDragStart = (e) => e.preventDefault();
1813
+ root.addEventListener(`pointerdown`, onPointerDown);
1814
+ root.addEventListener(`pointermove`, onPointerMove);
1815
+ root.addEventListener(`pointerup`, onPointerUp);
1816
+ root.addEventListener(`pointercancel`, onPointerUp);
1817
+ root.addEventListener(`wheel`, onWheel, { passive: false });
1818
+ root.addEventListener(`gesturestart`, onGestureStart);
1819
+ root.addEventListener(`gesturechange`, onGestureChange);
1820
+ root.addEventListener(`gestureend`, onGestureEnd);
1821
+ root.addEventListener(`keydown`, onKeyDown);
1822
+ root.addEventListener(`focusin`, onFocusIn);
1823
+ root.addEventListener(`focusout`, onFocusOut);
1824
+ root.addEventListener(`dragstart`, onDragStart);
1825
+ root.addEventListener(`pointerover`, onPointerOver);
1826
+ root.addEventListener(`pointerout`, onPointerOut);
1827
+ let ro = null;
1828
+ if (typeof ResizeObserver === `function`) {
1829
+ ro = new ResizeObserver(() => measure());
1830
+ ro.observe(root);
1831
+ }
1832
+ if (!frame())
1833
+ image.style.visibility = `hidden`;
1834
+ measure();
1835
+ armHide();
1836
+ return {
1837
+ view: () => view,
1838
+ frame,
1839
+ step: (direction) => {
1840
+ const f = frame();
1841
+ if (f)
1842
+ jump(m.zoomStep(view, direction, f));
1843
+ },
1844
+ rest: () => {
1845
+ const f = frame();
1846
+ if (f)
1847
+ jump(m.zoomRestView(f));
1848
+ },
1849
+ zoomScale: (scale) => {
1850
+ const f = frame();
1851
+ if (f)
1852
+ jump(m.zoomTo(view, scale, m.zoomCentre(f), f));
1853
+ },
1854
+ syncScale: () => {
1855
+ const f = frame();
1856
+ const bound = o.boundScale();
1857
+ if (!f || bound === undefined || !Number.isFinite(bound) || Math.abs(bound - view.scale) < 0.0001)
1858
+ return;
1859
+ stopMotion();
1860
+ paint(m.zoomTo(view, bound, m.zoomCentre(f), f), true);
1861
+ lastEmitted = view.scale;
1862
+ },
1863
+ reset: () => {
1864
+ measure();
1865
+ reset();
1866
+ },
1867
+ holdPill: (hold) => {
1868
+ held = hold;
1869
+ if (hold)
1870
+ setVisible(true);
1871
+ else
1872
+ armHide();
1873
+ },
1874
+ destroy: () => {
1875
+ stopMotion();
1876
+ if (wheelTimer)
1877
+ clearTimeout(wheelTimer);
1878
+ if (tapTimer)
1879
+ clearTimeout(tapTimer);
1880
+ if (hideTimer)
1881
+ clearTimeout(hideTimer);
1882
+ ro?.disconnect();
1883
+ root.removeEventListener(`pointerdown`, onPointerDown);
1884
+ root.removeEventListener(`pointermove`, onPointerMove);
1885
+ root.removeEventListener(`pointerup`, onPointerUp);
1886
+ root.removeEventListener(`pointercancel`, onPointerUp);
1887
+ root.removeEventListener(`wheel`, onWheel);
1888
+ root.removeEventListener(`gesturestart`, onGestureStart);
1889
+ root.removeEventListener(`gesturechange`, onGestureChange);
1890
+ root.removeEventListener(`gestureend`, onGestureEnd);
1891
+ root.removeEventListener(`keydown`, onKeyDown);
1892
+ root.removeEventListener(`focusin`, onFocusIn);
1893
+ root.removeEventListener(`focusout`, onFocusOut);
1894
+ root.removeEventListener(`dragstart`, onDragStart);
1895
+ root.removeEventListener(`pointerover`, onPointerOver);
1896
+ root.removeEventListener(`pointerout`, onPointerOut);
1897
+ }
1898
+ };
1899
+ }
1900
+ function zoomableImageLayout(pill) {
1901
+ return {
1902
+ root: { overflow: `clip`, userSelect: `none` },
1903
+ image: { position: `absolute`, left: 0, top: 0, display: `block`, maxWidth: `none`, maxHeight: `none`, transformOrigin: `0 0`, pointerEvents: `none`, userSelect: `none` },
1904
+ pill: { position: `absolute`, left: `50%`, bottom: pill.inset, transform: `translateX(-50%)`, zIndex: 1, display: `flex`, flexDirection: `row`, alignItems: `center`, whiteSpace: `nowrap`, cursor: `default`, transition: `opacity var(--xui-motion-standard) var(--xui-ease-standard,ease)` },
1905
+ pillHidden: { opacity: 0, pointerEvents: `none` },
1906
+ button: { display: `inline-flex`, alignItems: `center`, justifyContent: `center`, cursor: `pointer`, flexShrink: 0 },
1907
+ percent: { display: `inline-flex`, alignItems: `center`, justifyContent: `center`, cursor: `pointer`, minWidth: pill.percentMinWidth, fontVariantNumeric: `tabular-nums`, flexShrink: 0 },
1908
+ divider: { alignSelf: `center`, flexShrink: 0 }
1909
+ };
1910
+ }
1911
+ var ZOOMABLE_IMAGE_NATIVE_TRANSITION = `transform var(--xui-motion-standard) var(--xui-ease-standard,ease)`;
1912
+ var ZOOMABLE_IMAGE_TRANSITION = `transform var(--motion-duration-standard,var(--xui-duration-standard,180ms)) var(--motion-ease-standard,cubic-bezier(0.2,0,0,1))`;
1913
+ function zoomImageStyle(natural) {
1914
+ return natural ? { width: natural.width, height: natural.height } : {};
1915
+ }
1916
+ var ZOOMABLE_IMAGE_CLASSES = {
1917
+ root: `relative w-full min-w-0 overflow-hidden rounded-md select-none outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,
1918
+ image: `pointer-events-none absolute top-0 left-0 block max-h-none max-w-none origin-top-left select-none`,
1919
+ 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`,
1920
+ pillHidden: `pointer-events-none opacity-0`,
1921
+ button: `size-7 rounded-full border-0 bg-transparent`,
1922
+ percent: `h-7 min-w-14 rounded-full border-0 bg-transparent px-2 tabular-nums`,
1923
+ divider: `mx-0.5 h-4 w-px shrink-0 bg-border`
1924
+ };
1380
1925
  export {
1381
1926
  ALERT_CLASSES,
1382
1927
  ALERT_DIALOG_CLASSES,
@@ -1434,6 +1979,11 @@ export {
1434
1979
  MOBILE_SHEET_FULL,
1435
1980
  MOSAIC_CLASSES,
1436
1981
  MOSAIC_GEOMETRY,
1982
+ MOTION_MAX_FPS2 as MOTION_MAX_FPS,
1983
+ MOTION_MAX_PLAYING2 as MOTION_MAX_PLAYING,
1984
+ MotionCanvasPool2 as MotionCanvasPool,
1985
+ MotionStateDriver2 as MotionStateDriver,
1986
+ MotionView2 as MotionView,
1437
1987
  OUTLINE_CLASSES,
1438
1988
  OUTLINE_GEOMETRY,
1439
1989
  POPOVER_CLASSES,
@@ -1478,6 +2028,14 @@ export {
1478
2028
  VOICE_WAVE_CLASSES2 as VOICE_WAVE_CLASSES,
1479
2029
  VOICE_WAVE_SIZES2 as VOICE_WAVE_SIZES,
1480
2030
  VOICE_WAVE_SIZE_PX2 as VOICE_WAVE_SIZE_PX,
2031
+ ZOOMABLE_IMAGE_CLASSES,
2032
+ ZOOMABLE_IMAGE_NATIVE_TRANSITION,
2033
+ ZOOMABLE_IMAGE_TRANSITION,
2034
+ ZOOM_CONTROLS,
2035
+ ZOOM_DOUBLE_TAP_MS,
2036
+ ZOOM_DOUBLE_TAP_SLOP,
2037
+ ZOOM_TAP_SLOP,
2038
+ ZOOM_WHEEL_SETTLE_MS,
1481
2039
  alertVariants,
1482
2040
  avatarFallbackColors,
1483
2041
  avatarFallbackHue,
@@ -1495,6 +2053,7 @@ export {
1495
2053
  commandScore,
1496
2054
  createCommandStore,
1497
2055
  createToastStore,
2056
+ createZoomController,
1498
2057
  dockPileGeometry,
1499
2058
  elementScale2 as elementScale,
1500
2059
  filterCommandItems,
@@ -1503,10 +2062,23 @@ export {
1503
2062
  layoutSize2 as layoutSize,
1504
2063
  middleTruncate,
1505
2064
  mosaicTiles,
2065
+ motionA11y2 as motionA11y,
2066
+ motionBoxStyle2 as motionBoxStyle,
2067
+ motionCanPaint2 as motionCanPaint,
2068
+ motionConcat2 as motionConcat,
2069
+ motionDeclaredSize2 as motionDeclaredSize,
2070
+ motionDotLottie2 as motionDotLottie,
2071
+ motionFit2 as motionFit,
2072
+ motionFitMatrix2 as motionFitMatrix,
2073
+ motionFrameSize2 as motionFrameSize,
2074
+ motionFromDotLottie2 as motionFromDotLottie,
2075
+ motionThemeSlots2 as motionThemeSlots,
1506
2076
  observeCommandListHeight,
1507
2077
  outlineCountText,
2078
+ paintMotionFrame2 as paintMotionFrame,
1508
2079
  progressIndicatorTransform,
1509
2080
  progressRingPercent,
2081
+ resetMotionThemeIds2 as resetMotionThemeIds,
1510
2082
  ringGeometry,
1511
2083
  scrollAreaCornerStyle,
1512
2084
  scrollAreaRootStyle,
@@ -1527,8 +2099,13 @@ export {
1527
2099
  voiceWaveClock2 as voiceWaveClock,
1528
2100
  voiceWaveFitChild2 as voiceWaveFitChild,
1529
2101
  voiceWaveName2 as voiceWaveName,
1530
- voiceWaveQuiet2 as voiceWaveQuiet
2102
+ voiceWaveQuiet2 as voiceWaveQuiet,
2103
+ zoomBoxAspect,
2104
+ zoomDeclaredSize,
2105
+ zoomImageStyle,
2106
+ zoomPillOf,
2107
+ zoomableImageLayout
1531
2108
  };
1532
2109
 
1533
- //# debugId=56E8ABB35112F07464756E2164756E21
2110
+ //# debugId=BD3177F492C31D0164756E2164756E21
1534
2111
  //# sourceMappingURL=index.js.map