@exponential_app/eui 0.2.1 → 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 (452) hide show
  1. package/catalog/a11y.json +25 -1
  2. package/catalog/core.catalog.json +426 -6
  3. package/catalog/core.schema.json +634 -4
  4. package/catalog/host.json +10 -0
  5. package/catalog/layout.json +3 -2
  6. package/catalog/limits.json +10 -1
  7. package/catalog/macros.json +542 -1
  8. package/catalog/recipes.json +4 -2
  9. package/catalog/strings.json +14 -2
  10. package/catalog/style.json +21 -0
  11. package/catalog/theme.schema.json +3950 -1337
  12. package/conformance/manifest.json +5 -5
  13. package/conformance/motion/build-corpus.ts +232 -0
  14. package/conformance/motion/corpus/SOURCES.md +117 -0
  15. package/conformance/motion/corpus/images/footage_0.json +1 -0
  16. package/conformance/motion/corpus/images/img_0.jpg +0 -0
  17. package/conformance/motion/corpus/images/img_1.jpg +0 -0
  18. package/conformance/motion/corpus/images/triangle.png +0 -0
  19. package/conformance/motion/corpus/skottie-3d-parenting-nocamera.json +367 -0
  20. package/conformance/motion/corpus/skottie-auto-orient-2.json +292 -0
  21. package/conformance/motion/corpus/skottie-auto-orient.json +717 -0
  22. package/conformance/motion/corpus/skottie-bezier-extranormal.json +199 -0
  23. package/conformance/motion/corpus/skottie-blendmode-hardmix.json +558 -0
  24. package/conformance/motion/corpus/skottie-chained-mattes.json +259 -0
  25. package/conformance/motion/corpus/skottie-dropshadow-ramp.json +852 -0
  26. package/conformance/motion/corpus/skottie-dropshadow-style.json +278 -0
  27. package/conformance/motion/corpus/skottie-effects-transform.json +385 -0
  28. package/conformance/motion/corpus/skottie-fill-effect.json +358 -0
  29. package/conformance/motion/corpus/skottie-fill-rule.json +457 -0
  30. package/conformance/motion/corpus/skottie-gaussian-blur.json +670 -0
  31. package/conformance/motion/corpus/skottie-gradient-opacity.json +451 -0
  32. package/conformance/motion/corpus/skottie-gradient-radial-highlight.json +581 -0
  33. package/conformance/motion/corpus/skottie-hidden-shapes-layers.json +381 -0
  34. package/conformance/motion/corpus/skottie-huesaturation-effect.json +1117 -0
  35. package/conformance/motion/corpus/skottie-invert-effect.json +665 -0
  36. package/conformance/motion/corpus/skottie-luma-matte.json +239 -0
  37. package/conformance/motion/corpus/skottie-mask-feather.json +892 -0
  38. package/conformance/motion/corpus/skottie-masking-opaque.json +2376 -0
  39. package/conformance/motion/corpus/skottie-masking-translucent.json +2376 -0
  40. package/conformance/motion/corpus/skottie-matte-blendmode.json +196 -0
  41. package/conformance/motion/corpus/skottie-matte-nonsequential.json +722 -0
  42. package/conformance/motion/corpus/skottie-matte-visible.json +666 -0
  43. package/conformance/motion/corpus/skottie-mergepaths-effect.json +722 -0
  44. package/conformance/motion/corpus/skottie-motion-blur-mask.json +120 -0
  45. package/conformance/motion/corpus/skottie-nested-animation.json +253 -0
  46. package/conformance/motion/corpus/skottie-offsetpaths-effect.json +525 -0
  47. package/conformance/motion/corpus/skottie-phonehub-connecting.json +947 -0
  48. package/conformance/motion/corpus/skottie-puckerbloat-effect.json +339 -0
  49. package/conformance/motion/corpus/skottie-repeater.json +234 -0
  50. package/conformance/motion/corpus/skottie-sample-1.json +168 -0
  51. package/conformance/motion/corpus/skottie-sample-search.json +329 -0
  52. package/conformance/motion/corpus/skottie-spatial-supernormal.json +898 -0
  53. package/conformance/motion/corpus/skottie-text-animator-1.json +1286 -0
  54. package/conformance/motion/corpus/skottie-text-fill-over-stroke.json +1014 -0
  55. package/conformance/motion/corpus/skottie-text-tracking.json +950 -0
  56. package/conformance/motion/corpus/skottie-text-valign.json +484 -0
  57. package/conformance/motion/corpus/skottie-time-reverse.json +297 -0
  58. package/conformance/motion/corpus/skottie-transform-skew.json +290 -0
  59. package/conformance/motion/corpus/skottie-trimpath-fill.json +933 -0
  60. package/conformance/motion/corpus/skottie-trimpath-modes.json +266 -0
  61. package/conformance/motion/corpus/skottie-tritone-effect.json +379 -0
  62. package/conformance/motion/corpus/spec-blend-mode.json +531 -0
  63. package/conformance/motion/corpus/spec-ellipse.json +142 -0
  64. package/conformance/motion/corpus/spec-fill.json +193 -0
  65. package/conformance/motion/corpus/spec-gradient-stroke.json +1263 -0
  66. package/conformance/motion/corpus/spec-gradient.json +1255 -0
  67. package/conformance/motion/corpus/spec-mask.json +773 -0
  68. package/conformance/motion/corpus/spec-masks.json +676 -0
  69. package/conformance/motion/corpus/spec-matte.json +390 -0
  70. package/conformance/motion/corpus/spec-metadata.json +1 -0
  71. package/conformance/motion/corpus/spec-path.json +177 -0
  72. package/conformance/motion/corpus/spec-pucker-bloat.json +179 -0
  73. package/conformance/motion/corpus/spec-rectangle.json +145 -0
  74. package/conformance/motion/corpus/spec-rounded-corners.json +187 -0
  75. package/conformance/motion/corpus/spec-slots.json +325 -0
  76. package/conformance/motion/corpus/spec-star.json +159 -0
  77. package/conformance/motion/corpus/spec-stroke.json +156 -0
  78. package/conformance/motion/corpus/spec-test-ellipse-xy-pos.json +141 -0
  79. package/conformance/motion/corpus/spec-test-gradient-fill.json +1 -0
  80. package/conformance/motion/corpus/spec-test-gradient-stroke.json +229 -0
  81. package/conformance/motion/corpus/spec-test-unknown-shape.json +63 -0
  82. package/conformance/motion/corpus/spec-time-remap.json +1090 -0
  83. package/conformance/motion/corpus/spec-time-stretch.json +594 -0
  84. package/conformance/motion/corpus/spec-transform.json +273 -0
  85. package/conformance/motion/corpus/spec-trim-path.json +209 -0
  86. package/conformance/motion/corpus/web-adrock.json +1 -0
  87. package/conformance/motion/corpus/web-bacon.json +1 -0
  88. package/conformance/motion/corpus/web-banner.json +1 -0
  89. package/conformance/motion/corpus/web-bodymovin.json +1 -0
  90. package/conformance/motion/corpus/web-dalek.json +1 -0
  91. package/conformance/motion/corpus/web-footage-data.json +1 -0
  92. package/conformance/motion/corpus/web-lights.json +1 -0
  93. package/conformance/motion/corpus/web-ripple.json +1 -0
  94. package/conformance/motion/corpus/web-starfish.json +1 -0
  95. package/conformance/motion/known-gaps.json +35 -0
  96. package/conformance/motion/parity/group-transforms-parenting@0.png +0 -0
  97. package/conformance/motion/parity/group-transforms-parenting@10.png +0 -0
  98. package/conformance/motion/parity/hidden-unknown-inactive@0.png +0 -0
  99. package/conformance/motion/parity/keyframes-transform@0.png +0 -0
  100. package/conformance/motion/parity/keyframes-transform@10.png +0 -0
  101. package/conformance/motion/parity/keyframes-transform@15.png +0 -0
  102. package/conformance/motion/parity/keyframes-transform@5.png +0 -0
  103. package/conformance/motion/parity/layer-opacity-blend@0.png +0 -0
  104. package/conformance/motion/parity/linear-gradient@0.png +0 -0
  105. package/conformance/motion/parity/masks-modes@0.png +0 -0
  106. package/conformance/motion/parity/matte-alpha@0.png +0 -0
  107. package/conformance/motion/parity/matte-luma@0.png +0 -0
  108. package/conformance/motion/parity/matte-parent-tp@0.png +0 -0
  109. package/conformance/motion/parity/path-evenodd@0.png +0 -0
  110. package/conformance/motion/parity/precomp-clip-offset@0.png +0 -0
  111. package/conformance/motion/parity/precomp-clip-offset@15.png +0 -0
  112. package/conformance/motion/parity/precomp-clip-offset@5.png +0 -0
  113. package/conformance/motion/parity/radial-gradient-highlight@0.png +0 -0
  114. package/conformance/motion/parity/rect-solid-fill@0.png +0 -0
  115. package/conformance/motion/parity/repeater@0.png +0 -0
  116. package/conformance/motion/parity/rounded-rect-ellipse@0.png +0 -0
  117. package/conformance/motion/parity/solid-and-image@0.png +0 -0
  118. package/conformance/motion/parity/split-position-skew@0.png +0 -0
  119. package/conformance/motion/parity/split-position-skew@10.png +0 -0
  120. package/conformance/motion/parity/star-polygon@0.png +0 -0
  121. package/conformance/motion/parity/stroke-caps-joins@0.png +0 -0
  122. package/conformance/motion/parity/stroke-dashes@0.png +0 -0
  123. package/conformance/motion/parity/stroke-dashes@10.png +0 -0
  124. package/conformance/motion/parity/time-remap@0.png +0 -0
  125. package/conformance/motion/parity/time-remap@10.png +0 -0
  126. package/conformance/motion/parity/time-remap@19.png +0 -0
  127. package/conformance/motion/parity/time-stretch@0.png +0 -0
  128. package/conformance/motion/parity/time-stretch@10.png +0 -0
  129. package/conformance/motion/parity/trim-individually@0.png +0 -0
  130. package/conformance/motion/parity/trim-path@0.png +0 -0
  131. package/conformance/motion/parity/trim-path@10.png +0 -0
  132. package/conformance/motion/refs/index.json +688 -0
  133. package/conformance/motion/refs/skottie-3d-parenting-nocamera@0.png +0 -0
  134. package/conformance/motion/refs/skottie-3d-parenting-nocamera@150.png +0 -0
  135. package/conformance/motion/refs/skottie-3d-parenting-nocamera@270.png +0 -0
  136. package/conformance/motion/refs/skottie-auto-orient-2@0.png +0 -0
  137. package/conformance/motion/refs/skottie-auto-orient-2@210.png +0 -0
  138. package/conformance/motion/refs/skottie-auto-orient-2@378.png +0 -0
  139. package/conformance/motion/refs/skottie-auto-orient@0.png +0 -0
  140. package/conformance/motion/refs/skottie-auto-orient@300.png +0 -0
  141. package/conformance/motion/refs/skottie-auto-orient@540.png +0 -0
  142. package/conformance/motion/refs/skottie-bezier-extranormal@0.png +0 -0
  143. package/conformance/motion/refs/skottie-bezier-extranormal@150.png +0 -0
  144. package/conformance/motion/refs/skottie-bezier-extranormal@270.png +0 -0
  145. package/conformance/motion/refs/skottie-blendmode-hardmix@0.png +0 -0
  146. package/conformance/motion/refs/skottie-blendmode-hardmix@150.png +0 -0
  147. package/conformance/motion/refs/skottie-blendmode-hardmix@270.png +0 -0
  148. package/conformance/motion/refs/skottie-chained-mattes@0.png +0 -0
  149. package/conformance/motion/refs/skottie-chained-mattes@300.png +0 -0
  150. package/conformance/motion/refs/skottie-chained-mattes@540.png +0 -0
  151. package/conformance/motion/refs/skottie-dropshadow-ramp@0.png +0 -0
  152. package/conformance/motion/refs/skottie-dropshadow-ramp@135.png +0 -0
  153. package/conformance/motion/refs/skottie-dropshadow-ramp@75.png +0 -0
  154. package/conformance/motion/refs/skottie-dropshadow-style@0.png +0 -0
  155. package/conformance/motion/refs/skottie-dropshadow-style@300.png +0 -0
  156. package/conformance/motion/refs/skottie-dropshadow-style@540.png +0 -0
  157. package/conformance/motion/refs/skottie-effects-transform@0.png +0 -0
  158. package/conformance/motion/refs/skottie-effects-transform@450.png +0 -0
  159. package/conformance/motion/refs/skottie-effects-transform@810.png +0 -0
  160. package/conformance/motion/refs/skottie-fill-effect@0.png +0 -0
  161. package/conformance/motion/refs/skottie-fill-effect@300.png +0 -0
  162. package/conformance/motion/refs/skottie-fill-effect@540.png +0 -0
  163. package/conformance/motion/refs/skottie-fill-rule@0.png +0 -0
  164. package/conformance/motion/refs/skottie-fill-rule@150.png +0 -0
  165. package/conformance/motion/refs/skottie-fill-rule@270.png +0 -0
  166. package/conformance/motion/refs/skottie-gaussian-blur@0.png +0 -0
  167. package/conformance/motion/refs/skottie-gaussian-blur@150.png +0 -0
  168. package/conformance/motion/refs/skottie-gaussian-blur@270.png +0 -0
  169. package/conformance/motion/refs/skottie-gradient-opacity@0.png +0 -0
  170. package/conformance/motion/refs/skottie-gradient-opacity@150.png +0 -0
  171. package/conformance/motion/refs/skottie-gradient-opacity@270.png +0 -0
  172. package/conformance/motion/refs/skottie-gradient-radial-highlight@0.png +0 -0
  173. package/conformance/motion/refs/skottie-gradient-radial-highlight@135.png +0 -0
  174. package/conformance/motion/refs/skottie-gradient-radial-highlight@75.png +0 -0
  175. package/conformance/motion/refs/skottie-hidden-shapes-layers@0.png +0 -0
  176. package/conformance/motion/refs/skottie-hidden-shapes-layers@150.png +0 -0
  177. package/conformance/motion/refs/skottie-hidden-shapes-layers@270.png +0 -0
  178. package/conformance/motion/refs/skottie-huesaturation-effect@0.png +0 -0
  179. package/conformance/motion/refs/skottie-huesaturation-effect@30.png +0 -0
  180. package/conformance/motion/refs/skottie-huesaturation-effect@54.png +0 -0
  181. package/conformance/motion/refs/skottie-invert-effect@0.png +0 -0
  182. package/conformance/motion/refs/skottie-invert-effect@300.png +0 -0
  183. package/conformance/motion/refs/skottie-invert-effect@540.png +0 -0
  184. package/conformance/motion/refs/skottie-luma-matte@0.png +0 -0
  185. package/conformance/motion/refs/skottie-luma-matte@150.png +0 -0
  186. package/conformance/motion/refs/skottie-luma-matte@270.png +0 -0
  187. package/conformance/motion/refs/skottie-mask-feather@0.png +0 -0
  188. package/conformance/motion/refs/skottie-mask-feather@150.png +0 -0
  189. package/conformance/motion/refs/skottie-mask-feather@270.png +0 -0
  190. package/conformance/motion/refs/skottie-masking-opaque@0.png +0 -0
  191. package/conformance/motion/refs/skottie-masking-opaque@135.png +0 -0
  192. package/conformance/motion/refs/skottie-masking-opaque@75.png +0 -0
  193. package/conformance/motion/refs/skottie-masking-translucent@0.png +0 -0
  194. package/conformance/motion/refs/skottie-masking-translucent@135.png +0 -0
  195. package/conformance/motion/refs/skottie-masking-translucent@75.png +0 -0
  196. package/conformance/motion/refs/skottie-matte-blendmode@0.png +0 -0
  197. package/conformance/motion/refs/skottie-matte-blendmode@150.png +0 -0
  198. package/conformance/motion/refs/skottie-matte-blendmode@270.png +0 -0
  199. package/conformance/motion/refs/skottie-matte-nonsequential@0.png +0 -0
  200. package/conformance/motion/refs/skottie-matte-nonsequential@150.png +0 -0
  201. package/conformance/motion/refs/skottie-matte-nonsequential@270.png +0 -0
  202. package/conformance/motion/refs/skottie-matte-visible@0.png +0 -0
  203. package/conformance/motion/refs/skottie-matte-visible@150.png +0 -0
  204. package/conformance/motion/refs/skottie-matte-visible@270.png +0 -0
  205. package/conformance/motion/refs/skottie-mergepaths-effect@0.png +0 -0
  206. package/conformance/motion/refs/skottie-mergepaths-effect@210.png +0 -0
  207. package/conformance/motion/refs/skottie-mergepaths-effect@378.png +0 -0
  208. package/conformance/motion/refs/skottie-motion-blur-mask@0.png +0 -0
  209. package/conformance/motion/refs/skottie-motion-blur-mask@150.png +0 -0
  210. package/conformance/motion/refs/skottie-motion-blur-mask@270.png +0 -0
  211. package/conformance/motion/refs/skottie-nested-animation@0.png +0 -0
  212. package/conformance/motion/refs/skottie-nested-animation@300.png +0 -0
  213. package/conformance/motion/refs/skottie-nested-animation@540.png +0 -0
  214. package/conformance/motion/refs/skottie-offsetpaths-effect@0.png +0 -0
  215. package/conformance/motion/refs/skottie-offsetpaths-effect@150.png +0 -0
  216. package/conformance/motion/refs/skottie-offsetpaths-effect@270.png +0 -0
  217. package/conformance/motion/refs/skottie-phonehub-connecting@0.png +0 -0
  218. package/conformance/motion/refs/skottie-puckerbloat-effect@0.png +0 -0
  219. package/conformance/motion/refs/skottie-puckerbloat-effect@210.png +0 -0
  220. package/conformance/motion/refs/skottie-puckerbloat-effect@378.png +0 -0
  221. package/conformance/motion/refs/skottie-repeater@0.png +0 -0
  222. package/conformance/motion/refs/skottie-repeater@300.png +0 -0
  223. package/conformance/motion/refs/skottie-repeater@540.png +0 -0
  224. package/conformance/motion/refs/skottie-sample-1@0.png +0 -0
  225. package/conformance/motion/refs/skottie-sample-1@100.png +0 -0
  226. package/conformance/motion/refs/skottie-sample-1@180.png +0 -0
  227. package/conformance/motion/refs/skottie-sample-search@0.png +0 -0
  228. package/conformance/motion/refs/skottie-sample-search@27.png +0 -0
  229. package/conformance/motion/refs/skottie-sample-search@48.png +0 -0
  230. package/conformance/motion/refs/skottie-spatial-supernormal@0.png +0 -0
  231. package/conformance/motion/refs/skottie-spatial-supernormal@200.png +0 -0
  232. package/conformance/motion/refs/skottie-spatial-supernormal@360.png +0 -0
  233. package/conformance/motion/refs/skottie-text-animator-1@0.png +0 -0
  234. package/conformance/motion/refs/skottie-text-animator-1@150.png +0 -0
  235. package/conformance/motion/refs/skottie-text-animator-1@270.png +0 -0
  236. package/conformance/motion/refs/skottie-text-fill-over-stroke@0.png +0 -0
  237. package/conformance/motion/refs/skottie-text-fill-over-stroke@210.png +0 -0
  238. package/conformance/motion/refs/skottie-text-fill-over-stroke@378.png +0 -0
  239. package/conformance/motion/refs/skottie-text-tracking@0.png +0 -0
  240. package/conformance/motion/refs/skottie-text-tracking@108.png +0 -0
  241. package/conformance/motion/refs/skottie-text-tracking@60.png +0 -0
  242. package/conformance/motion/refs/skottie-text-valign@0.png +0 -0
  243. package/conformance/motion/refs/skottie-text-valign@150.png +0 -0
  244. package/conformance/motion/refs/skottie-text-valign@270.png +0 -0
  245. package/conformance/motion/refs/skottie-time-reverse@0.png +0 -0
  246. package/conformance/motion/refs/skottie-time-reverse@300.png +0 -0
  247. package/conformance/motion/refs/skottie-time-reverse@540.png +0 -0
  248. package/conformance/motion/refs/skottie-transform-skew@0.png +0 -0
  249. package/conformance/motion/refs/skottie-transform-skew@300.png +0 -0
  250. package/conformance/motion/refs/skottie-transform-skew@540.png +0 -0
  251. package/conformance/motion/refs/skottie-trimpath-fill@0.png +0 -0
  252. package/conformance/motion/refs/skottie-trimpath-fill@300.png +0 -0
  253. package/conformance/motion/refs/skottie-trimpath-fill@540.png +0 -0
  254. package/conformance/motion/refs/skottie-trimpath-modes@0.png +0 -0
  255. package/conformance/motion/refs/skottie-trimpath-modes@300.png +0 -0
  256. package/conformance/motion/refs/skottie-trimpath-modes@540.png +0 -0
  257. package/conformance/motion/refs/skottie-tritone-effect@0.png +0 -0
  258. package/conformance/motion/refs/skottie-tritone-effect@300.png +0 -0
  259. package/conformance/motion/refs/skottie-tritone-effect@540.png +0 -0
  260. package/conformance/motion/refs/spec-blend-mode@0.png +0 -0
  261. package/conformance/motion/refs/spec-blend-mode@162.png +0 -0
  262. package/conformance/motion/refs/spec-blend-mode@90.png +0 -0
  263. package/conformance/motion/refs/spec-ellipse@0.png +0 -0
  264. package/conformance/motion/refs/spec-ellipse@162.png +0 -0
  265. package/conformance/motion/refs/spec-ellipse@90.png +0 -0
  266. package/conformance/motion/refs/spec-fill@0.png +0 -0
  267. package/conformance/motion/refs/spec-fill@162.png +0 -0
  268. package/conformance/motion/refs/spec-fill@90.png +0 -0
  269. package/conformance/motion/refs/spec-gradient-stroke@0.png +0 -0
  270. package/conformance/motion/refs/spec-gradient-stroke@162.png +0 -0
  271. package/conformance/motion/refs/spec-gradient-stroke@90.png +0 -0
  272. package/conformance/motion/refs/spec-gradient@0.png +0 -0
  273. package/conformance/motion/refs/spec-gradient@162.png +0 -0
  274. package/conformance/motion/refs/spec-gradient@90.png +0 -0
  275. package/conformance/motion/refs/spec-mask@0.png +0 -0
  276. package/conformance/motion/refs/spec-mask@300.png +0 -0
  277. package/conformance/motion/refs/spec-mask@540.png +0 -0
  278. package/conformance/motion/refs/spec-masks@0.png +0 -0
  279. package/conformance/motion/refs/spec-masks@135.png +0 -0
  280. package/conformance/motion/refs/spec-masks@75.png +0 -0
  281. package/conformance/motion/refs/spec-matte@0.png +0 -0
  282. package/conformance/motion/refs/spec-matte@162.png +0 -0
  283. package/conformance/motion/refs/spec-matte@90.png +0 -0
  284. package/conformance/motion/refs/spec-metadata@0.png +0 -0
  285. package/conformance/motion/refs/spec-metadata@162.png +0 -0
  286. package/conformance/motion/refs/spec-metadata@90.png +0 -0
  287. package/conformance/motion/refs/spec-path@0.png +0 -0
  288. package/conformance/motion/refs/spec-path@162.png +0 -0
  289. package/conformance/motion/refs/spec-path@90.png +0 -0
  290. package/conformance/motion/refs/spec-pucker-bloat@0.png +0 -0
  291. package/conformance/motion/refs/spec-pucker-bloat@162.png +0 -0
  292. package/conformance/motion/refs/spec-pucker-bloat@90.png +0 -0
  293. package/conformance/motion/refs/spec-rectangle@0.png +0 -0
  294. package/conformance/motion/refs/spec-rectangle@162.png +0 -0
  295. package/conformance/motion/refs/spec-rectangle@90.png +0 -0
  296. package/conformance/motion/refs/spec-rounded-corners@0.png +0 -0
  297. package/conformance/motion/refs/spec-rounded-corners@162.png +0 -0
  298. package/conformance/motion/refs/spec-rounded-corners@90.png +0 -0
  299. package/conformance/motion/refs/spec-slots@0.png +0 -0
  300. package/conformance/motion/refs/spec-slots@450.png +0 -0
  301. package/conformance/motion/refs/spec-slots@810.png +0 -0
  302. package/conformance/motion/refs/spec-star@0.png +0 -0
  303. package/conformance/motion/refs/spec-star@162.png +0 -0
  304. package/conformance/motion/refs/spec-star@90.png +0 -0
  305. package/conformance/motion/refs/spec-stroke@0.png +0 -0
  306. package/conformance/motion/refs/spec-stroke@162.png +0 -0
  307. package/conformance/motion/refs/spec-stroke@90.png +0 -0
  308. package/conformance/motion/refs/spec-test-ellipse-xy-pos@0.png +0 -0
  309. package/conformance/motion/refs/spec-test-ellipse-xy-pos@162.png +0 -0
  310. package/conformance/motion/refs/spec-test-ellipse-xy-pos@90.png +0 -0
  311. package/conformance/motion/refs/spec-test-gradient-fill@0.png +0 -0
  312. package/conformance/motion/refs/spec-test-gradient-fill@30.png +0 -0
  313. package/conformance/motion/refs/spec-test-gradient-fill@54.png +0 -0
  314. package/conformance/motion/refs/spec-test-gradient-stroke@0.png +0 -0
  315. package/conformance/motion/refs/spec-test-gradient-stroke@30.png +0 -0
  316. package/conformance/motion/refs/spec-test-gradient-stroke@54.png +0 -0
  317. package/conformance/motion/refs/spec-test-unknown-shape@0.png +0 -0
  318. package/conformance/motion/refs/spec-test-unknown-shape@162.png +0 -0
  319. package/conformance/motion/refs/spec-test-unknown-shape@90.png +0 -0
  320. package/conformance/motion/refs/spec-time-remap@0.png +0 -0
  321. package/conformance/motion/refs/spec-time-remap@300.png +0 -0
  322. package/conformance/motion/refs/spec-time-remap@540.png +0 -0
  323. package/conformance/motion/refs/spec-time-stretch@0.png +0 -0
  324. package/conformance/motion/refs/spec-time-stretch@300.png +0 -0
  325. package/conformance/motion/refs/spec-time-stretch@540.png +0 -0
  326. package/conformance/motion/refs/spec-transform@0.png +0 -0
  327. package/conformance/motion/refs/spec-transform@162.png +0 -0
  328. package/conformance/motion/refs/spec-transform@90.png +0 -0
  329. package/conformance/motion/refs/spec-trim-path@0.png +0 -0
  330. package/conformance/motion/refs/spec-trim-path@162.png +0 -0
  331. package/conformance/motion/refs/spec-trim-path@90.png +0 -0
  332. package/conformance/motion/refs/web-adrock@0.png +0 -0
  333. package/conformance/motion/refs/web-adrock@10.png +0 -0
  334. package/conformance/motion/refs/web-adrock@18.png +0 -0
  335. package/conformance/motion/refs/web-bacon@0.png +0 -0
  336. package/conformance/motion/refs/web-bacon@126.png +0 -0
  337. package/conformance/motion/refs/web-bacon@70.png +0 -0
  338. package/conformance/motion/refs/web-banner@0.png +0 -0
  339. package/conformance/motion/refs/web-banner@301.png +0 -0
  340. package/conformance/motion/refs/web-banner@542.png +0 -0
  341. package/conformance/motion/refs/web-bodymovin@0.png +0 -0
  342. package/conformance/motion/refs/web-bodymovin@51.png +0 -0
  343. package/conformance/motion/refs/web-bodymovin@92.png +0 -0
  344. package/conformance/motion/refs/web-dalek@0.png +0 -0
  345. package/conformance/motion/refs/web-dalek@145.png +0 -0
  346. package/conformance/motion/refs/web-dalek@261.png +0 -0
  347. package/conformance/motion/refs/web-footage-data@0.png +0 -0
  348. package/conformance/motion/refs/web-footage-data@180.png +0 -0
  349. package/conformance/motion/refs/web-footage-data@324.png +0 -0
  350. package/conformance/motion/refs/web-lights@0.png +0 -0
  351. package/conformance/motion/refs/web-lights@150.png +0 -0
  352. package/conformance/motion/refs/web-lights@270.png +0 -0
  353. package/conformance/motion/refs/web-ripple@0.png +0 -0
  354. package/conformance/motion/refs/web-ripple@180.png +0 -0
  355. package/conformance/motion/refs/web-ripple@324.png +0 -0
  356. package/conformance/motion/refs/web-starfish@0.png +0 -0
  357. package/conformance/motion/refs/web-starfish@150.png +0 -0
  358. package/conformance/motion/refs/web-starfish@270.png +0 -0
  359. package/conformance/motion/render-refs.ts +126 -0
  360. package/conformance/motion/report.json +1367 -0
  361. package/conformance/motion/web-parity-gaps.json +12 -0
  362. package/conformance/motion-parity-entry.ts +3 -0
  363. package/conformance/motion-parity.ts +101 -0
  364. package/dist/chunks/{index-gtk2gwsb.js → index-4xczxey5.js} +187 -40
  365. package/dist/chunks/{index-gtk2gwsb.js.map → index-4xczxey5.js.map} +7 -6
  366. package/dist/chunks/{index-62yzr94z.js → index-5sjj5p84.js} +270 -8
  367. package/dist/chunks/{index-62yzr94z.js.map → index-5sjj5p84.js.map} +2 -2
  368. package/dist/chunks/{index-fy7y2nz8.js → index-cvf7bbs5.js} +23 -2
  369. package/dist/chunks/{index-fy7y2nz8.js.map → index-cvf7bbs5.js.map} +1 -1
  370. package/dist/chunks/index-dgkf6yw5.js +48 -0
  371. package/dist/chunks/index-dgkf6yw5.js.map +10 -0
  372. package/dist/chunks/{index-5fmaa0xq.js → index-f9wkb6aq.js} +851 -36
  373. package/dist/chunks/{index-5fmaa0xq.js.map → index-f9wkb6aq.js.map} +2 -2
  374. package/dist/chunks/index-t2mwfbb6.js +1515 -0
  375. package/dist/chunks/index-t2mwfbb6.js.map +15 -0
  376. package/dist/chunks/{index-bg2jsgjq.js → index-vkn82srs.js} +479 -10
  377. package/dist/chunks/{index-bg2jsgjq.js.map → index-vkn82srs.js.map} +2 -2
  378. package/dist/chunks/wasm-ctcc3cma.js +424 -0
  379. package/dist/chunks/wasm-ctcc3cma.js.map +11 -0
  380. package/dist/conformance.js +10941 -563
  381. package/dist/conformance.js.map +2 -2
  382. package/dist/entries/prompt.js +2 -2
  383. package/dist/entries/schema.js +3 -3
  384. package/dist/host/index.js +20 -4
  385. package/dist/host/index.js.map +1 -1
  386. package/dist/index.js +364 -99
  387. package/dist/index.js.map +4 -4
  388. package/dist/types/src/catalog.generated.d.ts +71 -5
  389. package/dist/types/src/host/contract.d.ts +17 -0
  390. package/dist/types/src/host/exposes.d.ts +68 -0
  391. package/dist/types/src/host/index.d.ts +1 -0
  392. package/dist/types/src/host/package.d.ts +8 -0
  393. package/dist/types/src/index.d.ts +2 -0
  394. package/dist/types/src/layout.d.ts +2 -0
  395. package/dist/types/src/limits.d.ts +1 -0
  396. package/dist/types/src/motion/index.d.ts +1 -0
  397. package/dist/types/src/motion/server.d.ts +9 -0
  398. package/dist/types/src/motion/wasm.d.ts +11 -0
  399. package/dist/types/src/web/coerce.d.ts +3 -0
  400. package/dist/types/src/web/focus.d.ts +8 -0
  401. package/dist/types/src/web/index.d.ts +5 -2
  402. package/dist/types/src/web/primitives/carousel.d.ts +17 -0
  403. package/dist/types/src/web/primitives/dock.d.ts +5 -2
  404. package/dist/types/src/web/primitives/index.d.ts +5 -0
  405. package/dist/types/src/web/primitives/mosaic.d.ts +30 -0
  406. package/dist/types/src/web/primitives/motion-paint.d.ts +36 -0
  407. package/dist/types/src/web/primitives/motion.d.ts +162 -0
  408. package/dist/types/src/web/primitives/outline.d.ts +22 -0
  409. package/dist/types/src/web/primitives/zoomable-image.d.ts +158 -0
  410. package/dist/types/src/web/table.d.ts +8 -0
  411. package/dist/types/src/zoom.d.ts +128 -0
  412. package/dist/types/wasm/motion/bytes.d.ts +1 -0
  413. package/dist/web/index.js +171 -230
  414. package/dist/web/index.js.map +9 -10
  415. package/dist/web/primitives/index.js +641 -6
  416. package/dist/web/primitives/index.js.map +9 -5
  417. package/docs/components.generated.json +542 -5
  418. package/docs/package-format.md +56 -1
  419. package/docs/round-6-contract.md +110 -0
  420. package/docs/themes.generated.json +66 -2
  421. package/fixtures/bind-time.json +1468 -0
  422. package/fixtures/catalog-components.json +1026 -16
  423. package/fixtures/catalog-macros.json +1279 -157
  424. package/fixtures/conformance-baseline.json +48893 -47200
  425. package/fixtures/conformance-known.json +140 -134
  426. package/fixtures/host-router.json +539 -1
  427. package/fixtures/kitchen-sink.expanded.json +686 -1
  428. package/fixtures/kitchen-sink.json +102 -1
  429. package/fixtures/layout-geometry-round1.json +42 -42
  430. package/fixtures/motion-frames.json +2618 -0
  431. package/fixtures/motion-playback.json +528 -0
  432. package/fixtures/motion-state.json +722 -0
  433. package/fixtures/motion-validate.json +138 -0
  434. package/fixtures/primitive-specimens.json +4 -0
  435. package/fixtures/prompt-budget.json +16 -16
  436. package/fixtures/specimens.json +839 -21
  437. package/fixtures/theme-recipes.json +32808 -28396
  438. package/fixtures/theme-resolved.json +2114 -286
  439. package/fixtures/zoom.json +1382 -0
  440. package/generated/ExponentialUICatalog.generated.kt +21 -21
  441. package/generated/ExponentialUICatalog.generated.swift +21 -21
  442. package/generated/ExponentialUIThemes.generated.kt +7 -7
  443. package/generated/ExponentialUIThemes.generated.swift +7 -7
  444. package/generated/catalog.descriptions.generated.rs +1 -1
  445. package/generated/catalog.generated.rs +30 -30
  446. package/generated/catalog.themes.generated.rs +8 -8
  447. package/generated/core.descriptions.json +267 -5
  448. package/generated/core.runtime.json +275 -1
  449. package/package.json +1 -1
  450. package/themes/neutral.theme.json +460 -3
  451. package/dist/chunks/index-t6qz1770.js +0 -95
  452. 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";
@@ -201,6 +221,17 @@ var CARD_CLASSES = {
201
221
  content: `px-6`,
202
222
  footer: `flex items-center px-6 [.border-t]:pt-6`
203
223
  };
224
+ // packages/exponential-ui/src/web/primitives/carousel.ts
225
+ var CAROUSEL_GEOMETRY = { thumbnail: 52, ring: 2, thumbnailGap: 8, counterInset: 8 };
226
+ function carouselCounterText(page, total) {
227
+ return `${page + 1} / ${total}`;
228
+ }
229
+ var CAROUSEL_CLASSES = {
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`,
231
+ thumbnails: `flex flex-row gap-[8px] overflow-x-auto pt-2 [scrollbar-width:none]`,
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`,
233
+ thumbnailImage: `size-full object-cover`
234
+ };
204
235
  // packages/exponential-ui/src/web/primitives/checkbox.ts
205
236
  var CHECKBOX_CLASSES = {
206
237
  root: `peer size-4 shrink-0 rounded-[4px] border border-glass-stroke-strong bg-glass-row shadow-none transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary`,
@@ -981,8 +1012,8 @@ var DOCK_CARD_CLASSES = {
981
1012
  icon: `mt-0.5 size-3.5 shrink-0`,
982
1013
  text: `min-w-0 flex-1`,
983
1014
  header: `mb-1 flex items-center gap-2`,
984
- label: `truncate text-xs font-medium`,
985
- 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`,
986
1017
  meta: `ml-auto shrink-0 text-xs text-muted-foreground`,
987
1018
  row: `flex min-w-0 items-center gap-2`,
988
1019
  title: `min-w-0 flex-1 truncate text-sm text-foreground/90`,
@@ -1086,6 +1117,44 @@ var METER_CLASSES = {
1086
1117
  danger: `[&_[data-slot=progress-indicator]]:bg-destructive`
1087
1118
  }
1088
1119
  };
1120
+ // packages/exponential-ui/src/web/primitives/mosaic.ts
1121
+ var MOSAIC_GEOMETRY = { gap: 10, largeFraction: 0.6, aspect: 1.6, radius: 10 };
1122
+ function mosaicTiles(count) {
1123
+ const n = Math.max(0, Math.floor(count));
1124
+ if (n === 0)
1125
+ return [];
1126
+ if (n === 1)
1127
+ return [{ index: 0, size: `large`, more: 0 }];
1128
+ if (n === 2)
1129
+ return [0, 1].map((index) => ({ index, size: `half`, more: 0 }));
1130
+ return [
1131
+ { index: 0, size: `large`, more: 0 },
1132
+ { index: 1, size: `small`, more: 0 },
1133
+ { index: 2, size: `small`, more: n - 3 }
1134
+ ];
1135
+ }
1136
+ var MOSAIC_CLASSES = {
1137
+ root: `flex aspect-[1.6] w-full min-w-0 flex-row gap-[10px]`,
1138
+ side: `flex min-w-0 flex-1 flex-col gap-[10px]`,
1139
+ tile: `relative min-h-0 min-w-0 cursor-pointer overflow-hidden rounded-[10px] border border-glass-stroke-card bg-muted p-0 outline-none transition-opacity duration-fast hover:opacity-90 focus-visible:ring-[3px] focus-visible:ring-ring/50`,
1140
+ fill: `flex-1`,
1141
+ lead: `shrink-0 grow-0 basis-[60%]`,
1142
+ image: `absolute inset-0 size-full object-cover`,
1143
+ more: `pointer-events-none absolute inset-0 flex items-center justify-center bg-black/55 text-xl font-semibold text-white`
1144
+ };
1145
+ // packages/exponential-ui/src/web/primitives/outline.ts
1146
+ var OUTLINE_GEOMETRY = { rowHeight: 32, activeBar: 2 };
1147
+ var OUTLINE_CLASSES = {
1148
+ root: `flex min-w-0 flex-col gap-[2px]`,
1149
+ caption: `px-2 py-1 text-[11px] leading-4 font-medium tracking-[0.5px] text-muted-foreground uppercase`,
1150
+ row: `relative flex h-[32px] w-full min-w-0 cursor-pointer items-center gap-1 overflow-hidden rounded-md px-2 text-start text-sm text-muted-foreground outline-none transition-colors duration-fast hover:bg-accent focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[active=true]:bg-accent data-[active=true]:font-medium data-[active=true]:text-foreground`,
1151
+ bar: `pointer-events-none absolute inset-y-0 start-0 w-[2px] bg-foreground`,
1152
+ title: `min-w-0 flex-1 truncate`,
1153
+ count: `shrink-0 text-xs text-muted-foreground tabular-nums`
1154
+ };
1155
+ function outlineCountText(count) {
1156
+ return typeof count === `number` && Number.isFinite(count) && count > 0 ? `· ${count}` : null;
1157
+ }
1089
1158
  // packages/exponential-ui/src/web/primitives/popover.ts
1090
1159
  var POPOVER_CLASSES = {
1091
1160
  content: `${MENU_SURFACE_CLASS} w-72 origin-(--radix-popover-content-transform-origin) p-4 outline-hidden`
@@ -1328,6 +1397,531 @@ var TYPEAHEAD_PORTAL_SELECTOR = `[data-editor-autocomplete]`;
1328
1397
  function isTypeaheadPortalInteraction(event) {
1329
1398
  return event.target instanceof Element && event.target.closest(TYPEAHEAD_PORTAL_SELECTOR) !== null;
1330
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
+ };
1331
1925
  export {
1332
1926
  ALERT_CLASSES,
1333
1927
  ALERT_DIALOG_CLASSES,
@@ -1338,6 +1932,8 @@ export {
1338
1932
  BREADCRUMB_CLASSES,
1339
1933
  CALENDAR_CLASSES,
1340
1934
  CARD_CLASSES,
1935
+ CAROUSEL_CLASSES,
1936
+ CAROUSEL_GEOMETRY,
1341
1937
  CHECKBOX_CLASSES,
1342
1938
  CHOICE_TILES_CLASSES,
1343
1939
  CODE_BLOCK_CLASSES,
@@ -1381,6 +1977,15 @@ export {
1381
1977
  MOBILE_PAGE,
1382
1978
  MOBILE_SHEET,
1383
1979
  MOBILE_SHEET_FULL,
1980
+ MOSAIC_CLASSES,
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,
1987
+ OUTLINE_CLASSES,
1988
+ OUTLINE_GEOMETRY,
1384
1989
  POPOVER_CLASSES,
1385
1990
  PROGRESS_CLASSES,
1386
1991
  PROGRESS_RING_CLASSES,
@@ -1423,12 +2028,21 @@ export {
1423
2028
  VOICE_WAVE_CLASSES2 as VOICE_WAVE_CLASSES,
1424
2029
  VOICE_WAVE_SIZES2 as VOICE_WAVE_SIZES,
1425
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,
1426
2039
  alertVariants,
1427
2040
  avatarFallbackColors,
1428
2041
  avatarFallbackHue,
1429
2042
  avatarHueIndex,
1430
2043
  badgeLabel,
1431
2044
  buttonVariants,
2045
+ carouselCounterText,
1432
2046
  choiceColumns,
1433
2047
  choiceToggle,
1434
2048
  choiceValues,
@@ -1439,6 +2053,7 @@ export {
1439
2053
  commandScore,
1440
2054
  createCommandStore,
1441
2055
  createToastStore,
2056
+ createZoomController,
1442
2057
  dockPileGeometry,
1443
2058
  elementScale2 as elementScale,
1444
2059
  filterCommandItems,
@@ -1446,9 +2061,24 @@ export {
1446
2061
  isTypeaheadPortalInteraction,
1447
2062
  layoutSize2 as layoutSize,
1448
2063
  middleTruncate,
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,
1449
2076
  observeCommandListHeight,
2077
+ outlineCountText,
2078
+ paintMotionFrame2 as paintMotionFrame,
1450
2079
  progressIndicatorTransform,
1451
2080
  progressRingPercent,
2081
+ resetMotionThemeIds2 as resetMotionThemeIds,
1452
2082
  ringGeometry,
1453
2083
  scrollAreaCornerStyle,
1454
2084
  scrollAreaRootStyle,
@@ -1469,8 +2099,13 @@ export {
1469
2099
  voiceWaveClock2 as voiceWaveClock,
1470
2100
  voiceWaveFitChild2 as voiceWaveFitChild,
1471
2101
  voiceWaveName2 as voiceWaveName,
1472
- voiceWaveQuiet2 as voiceWaveQuiet
2102
+ voiceWaveQuiet2 as voiceWaveQuiet,
2103
+ zoomBoxAspect,
2104
+ zoomDeclaredSize,
2105
+ zoomImageStyle,
2106
+ zoomPillOf,
2107
+ zoomableImageLayout
1473
2108
  };
1474
2109
 
1475
- //# debugId=126D7C3DA58A626B64756E2164756E21
2110
+ //# debugId=BD3177F492C31D0164756E2164756E21
1476
2111
  //# sourceMappingURL=index.js.map