@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,6 +1,6 @@
1
1
  import {
2
2
  coreCatalog2
3
- } from "./index-abcjanhc.js";
3
+ } from "./index-f9wkb6aq.js";
4
4
  // packages/exponential-ui/generated/core.descriptions.json
5
5
  var core_descriptions_default = {
6
6
  components: {
@@ -494,6 +494,44 @@ var core_descriptions_default = {
494
494
  aspectRatio: 1.7777778
495
495
  }
496
496
  },
497
+ ZoomableImage: {
498
+ props: {
499
+ src: {
500
+ description: "The image URL."
501
+ },
502
+ alt: {
503
+ description: "The accessibility description."
504
+ },
505
+ naturalWidth: {
506
+ description: "Pixel width."
507
+ },
508
+ naturalHeight: {
509
+ description: "Pixel height."
510
+ },
511
+ initial: {
512
+ description: "auto = fitWidth when tall."
513
+ },
514
+ maxScale: {
515
+ description: "Largest zoom."
516
+ },
517
+ controls: {
518
+ description: "The zoom pill."
519
+ },
520
+ scale: {
521
+ description: "1 = 100%."
522
+ },
523
+ style: {
524
+ description: "Extra Box styles for the viewport."
525
+ }
526
+ },
527
+ description: "A picture that zooms (pinch, ⌘-wheel, double-tap) and pans.",
528
+ example: {
529
+ src: "https://example.com/screenshot.png",
530
+ alt: "Screenshot",
531
+ naturalWidth: 1440,
532
+ naturalHeight: 900
533
+ }
534
+ },
497
535
  Icon: {
498
536
  props: {
499
537
  name: {
@@ -683,8 +721,8 @@ var core_descriptions_default = {
683
721
  value: "issue"
684
722
  },
685
723
  {
686
- label: "Run",
687
- value: "run"
724
+ label: "Session",
725
+ value: "session"
688
726
  }
689
727
  ],
690
728
  value: "issue"
@@ -1496,10 +1534,10 @@ var core_descriptions_default = {
1496
1534
  description: "Row height class."
1497
1535
  },
1498
1536
  stickyHeader: {
1499
- description: "Keeps the header visible while the rows scroll."
1537
+ description: "Pins the header while rows scroll."
1500
1538
  }
1501
1539
  },
1502
- description: "A data table of typed columns: sorting, selection, widths, alignment, windowed; `slot` columns render components.",
1540
+ description: "A table of typed columns: sorting, selection, widths, alignment, windowed; `slot` columns render components.",
1503
1541
  example: {
1504
1542
  columns: [
1505
1543
  {
@@ -2509,6 +2547,131 @@ var core_descriptions_default = {
2509
2547
  example: {
2510
2548
  component: "Gauge"
2511
2549
  }
2550
+ },
2551
+ Motion: {
2552
+ props: {
2553
+ layers: {
2554
+ description: "The animation, top layer first, in the composition's px (origin top-left). Layer: {type: shape|solid|null|precomp|text, id?, parent?: id, in?/out? ms, transform?: {anchor, position [x,y], scale [100,100] %, rotation deg clockwise, opacity 0–100}, shapes: […], matte?: {source: id, mode: alpha|luma}, masks?: [{path, mode: add|subtract|intersect}]}. Shapes draw top first; a style paints every shape before it in its group: rect {position (centre), size, radius}, ellipse {position, size}, star|polygon {points, outerRadius, innerRadius}, path {d: SVG path data}; fill {color}, stroke {color, width, cap, join, dash: [len, gap]}, gradient-fill {kind: linear|radial, start, end, stops: [[0, colour], [1, colour]]}; trim {start, end, offset} (percent, draw-on lines), repeater {copies, transform}, round-corners {radius}; group {shapes, transform}. Colours: $color.* tokens (follow light/dark), #hex, or {light, dark}. Animate any value: {keys: [{t: ms, v: value, ease: linear|ease-in|ease-out|ease-in-out|hold|[x1,y1,x2,y2]}, …]}; tokens cannot animate. Keep it small; loops end on their first pose. No expressions."
2555
+ },
2556
+ size: {
2557
+ description: "The composition [width, height] px (with layers)."
2558
+ },
2559
+ duration: {
2560
+ description: "Length in ms (with layers)."
2561
+ },
2562
+ fps: {
2563
+ description: "Frames per second."
2564
+ },
2565
+ assets: {
2566
+ description: "Precomps {id: {layers}}."
2567
+ },
2568
+ markers: {
2569
+ description: "Named segments [{name, time, duration}] ms."
2570
+ },
2571
+ lottie: {
2572
+ description: "Lottie JSON instead of layers (no expressions)."
2573
+ },
2574
+ src: {
2575
+ description: "An attached .json or .lottie instead of layers."
2576
+ },
2577
+ autoplay: {
2578
+ description: "Plays when visible; false shows the poster."
2579
+ },
2580
+ loop: {
2581
+ description: "Repeats; false plays once and holds."
2582
+ },
2583
+ plays: {
2584
+ description: "Plays this many times (overrides loop)."
2585
+ },
2586
+ direction: {
2587
+ description: "Forward, reverse, or back and forth."
2588
+ },
2589
+ speed: {
2590
+ description: "Speed multiplier."
2591
+ },
2592
+ segment: {
2593
+ description: "Plays only [from, to] ms."
2594
+ },
2595
+ marker: {
2596
+ description: "Plays only this marker."
2597
+ },
2598
+ progress: {
2599
+ description: "Scrubs (0–1) instead of playing."
2600
+ },
2601
+ play: {
2602
+ description: "Pauses while false."
2603
+ },
2604
+ poster: {
2605
+ description: "The still frame (ms) for reduced motion and before play."
2606
+ },
2607
+ fit: {
2608
+ description: "How it fills the box."
2609
+ },
2610
+ slots: {
2611
+ description: "Lottie slot overrides {slotId: value}."
2612
+ },
2613
+ stateMachine: {
2614
+ description: "A dotLottie state machine driving playback (a .lottie src brings its own)."
2615
+ },
2616
+ inputs: {
2617
+ description: "State-machine inputs {name: value}; bind to drive states from data."
2618
+ },
2619
+ label: {
2620
+ description: "What it shows, for screen readers."
2621
+ },
2622
+ style: {
2623
+ description: "Extra Box styles for the box."
2624
+ }
2625
+ },
2626
+ description: "A vector animation (Lottie-compatible) drawn identically everywhere: loaders, success states, illustrated empty states, small explainers.",
2627
+ example: {
2628
+ size: [
2629
+ 48,
2630
+ 48
2631
+ ],
2632
+ duration: 1000,
2633
+ layers: [
2634
+ {
2635
+ type: "shape",
2636
+ transform: {
2637
+ position: [
2638
+ 24,
2639
+ 24
2640
+ ],
2641
+ rotation: {
2642
+ keys: [
2643
+ {
2644
+ t: 0,
2645
+ v: 0
2646
+ },
2647
+ {
2648
+ t: 1000,
2649
+ v: 360
2650
+ }
2651
+ ]
2652
+ }
2653
+ },
2654
+ shapes: [
2655
+ {
2656
+ type: "ellipse",
2657
+ size: [
2658
+ 36,
2659
+ 36
2660
+ ]
2661
+ },
2662
+ {
2663
+ type: "trim",
2664
+ end: 70
2665
+ },
2666
+ {
2667
+ type: "stroke",
2668
+ color: "$color.primary",
2669
+ width: 4
2670
+ }
2671
+ ]
2672
+ }
2673
+ ]
2674
+ }
2512
2675
  }
2513
2676
  },
2514
2677
  defs: {
@@ -2700,7 +2863,7 @@ var core_descriptions_default = {
2700
2863
  description: "For `type: slot`: the Table slot whose component renders each cell with the row as its data scope."
2701
2864
  },
2702
2865
  width: {
2703
- description: "A fixed width in px; otherwise columns share the width."
2866
+ description: "A fixed width in px; otherwise columns share the width, never under 120 (a wider table scrolls)."
2704
2867
  },
2705
2868
  align: {
2706
2869
  description: "Cell alignment (numbers read best at `end`)."
@@ -2713,6 +2876,9 @@ var core_descriptions_default = {
2713
2876
  },
2714
2877
  decimals: {
2715
2878
  description: "Fixed fraction digits of a number, currency or percent column."
2879
+ },
2880
+ truncate: {
2881
+ description: "One line with an ellipsis; cells wrap otherwise."
2716
2882
  }
2717
2883
  },
2718
2884
  description: "One table column."
@@ -2876,5 +3042,5 @@ function describeCatalog2() {
2876
3042
 
2877
3043
  export { describeCatalog2 };
2878
3044
 
2879
- //# debugId=9E9E8979695368A164756E2164756E21
2880
- //# sourceMappingURL=index-dx45asrf.js.map
3045
+ //# debugId=EAFB7655444BBC6964756E2164756E21
3046
+ //# sourceMappingURL=index-5sjj5p84.js.map
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "// VAPP-106: the model-facing text of the catalog (every component and prop\n// description, every example, the functions' descriptions) lives OUTSIDE the\n// runtime catalog. `generated/core.runtime.json` is what the reducer, the\n// validator and every renderer read (and what the Rust core embeds);\n// `generated/core.descriptions.json` is the rest, keyed like the catalog.\n// `describeCatalog()` puts the two back together IN PLACE on `coreCatalog`\n// (once; later calls return at the first check): the `./prompt` and\n// `./schema` entries call it before they read a description, so a browser\n// that only renders never downloads a word of it. The generator\n// (scripts/generate.ts) makes the split from catalog/core.catalog.json, the\n// source, with `splitDescriptions`; `catalog.described.test.ts` proves the\n// round trip.\n\nimport descriptionsJson from \"../generated/core.descriptions.json\" with { type: \"json\" }\nimport { coreCatalog } from \"./catalog\"\nimport type { CatalogSource, ComponentDef, DefSchema, PropSchema } from \"./types\"\n\n/** The text a prop schema carries (recursing into `items`). */\nexport interface PropDescription {\n description?: string\n items?: PropDescription\n}\n\n/** The text of the catalog, keyed like the catalog itself. */\nexport interface CatalogDescriptions {\n components: Record<string, { description?: string; example?: Record<string, unknown>; props: Record<string, PropDescription> }>\n defs: Record<string, { description?: string; properties: Record<string, PropDescription> }>\n functions: { core: Record<string, string>; basic: Record<string, string> }\n}\n\n/** The runtime view of a schema object: its text may be absent (src/types.ts keeps it typed present). */\ntype Mutable<T> = { -readonly [K in keyof T as K extends `description` | `example` ? never : K]: T[K] } & { description?: string; example?: Record<string, unknown> }\n\nfunction takeProp(schema: Mutable<PropSchema>): PropDescription {\n const out: PropDescription = {}\n if (schema.description !== undefined) {\n out.description = schema.description\n delete schema.description\n }\n if (schema.items) {\n const items = takeProp(schema.items as Mutable<PropSchema>)\n if (Object.keys(items).length) out.items = items\n }\n return out\n}\n\nfunction giveProp(schema: Mutable<PropSchema>, text: PropDescription | undefined): void {\n if (!text) return\n if (text.description !== undefined) schema.description = text.description\n if (text.items && schema.items) giveProp(schema.items as Mutable<PropSchema>, text.items)\n}\n\n/** Every `$comment` dropped, recursively (the source carries them for people). */\nfunction withoutComments<T>(value: T): T {\n if (Array.isArray(value)) return value.map(withoutComments) as T\n if (typeof value === `object` && value !== null)\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([k]) => k !== `$comment`)\n .map(([k, v]) => [k, withoutComments(v)])\n ) as T\n return value\n}\n\n/** The source catalog split into what the runtime needs and the text only\n * the prompt, the schema and the docs read. Pure: the source stays as it is. */\nexport function splitDescriptions(source: CatalogSource): { runtime: CatalogSource; descriptions: CatalogDescriptions } {\n const runtime = withoutComments(structuredClone(source)) as Mutable<CatalogSource>\n const descriptions: CatalogDescriptions = { components: {}, defs: {}, functions: { core: {}, basic: {} } }\n for (const [name, def] of Object.entries(runtime.components) as [string, Mutable<ComponentDef>][]) {\n const entry: CatalogDescriptions[`components`][string] = { props: {} }\n if (def.description !== undefined) {\n entry.description = def.description\n delete def.description\n }\n if (def.example !== undefined) {\n entry.example = def.example\n delete def.example\n }\n for (const [prop, schema] of Object.entries(def.props)) {\n const text = takeProp(schema as Mutable<PropSchema>)\n if (Object.keys(text).length) entry.props[prop] = text\n }\n descriptions.components[name] = entry\n }\n for (const [name, def] of Object.entries(runtime.defs) as [string, Mutable<DefSchema>][]) {\n const entry: CatalogDescriptions[`defs`][string] = { properties: {} }\n if (def.description !== undefined) {\n entry.description = def.description\n delete def.description\n }\n for (const [prop, schema] of Object.entries(def.properties)) {\n const text = takeProp(schema as Mutable<PropSchema>)\n if (Object.keys(text).length) entry.properties[prop] = text\n }\n descriptions.defs[name] = entry\n }\n for (const group of [`core`, `basic`] as const)\n for (const [name, fn] of Object.entries(runtime.functions[group]) as [string, { description?: string }][]) {\n if (fn.description === undefined) continue\n descriptions.functions[group][name] = fn.description\n delete fn.description\n }\n return { runtime, descriptions }\n}\n\n/** Puts the text back onto a runtime catalog, in place. */\nexport function applyDescriptions(target: CatalogSource, descriptions: CatalogDescriptions): void {\n for (const [name, text] of Object.entries(descriptions.components)) {\n const def = target.components[name] as Mutable<ComponentDef> | undefined\n if (!def) continue\n if (text.description !== undefined) def.description = text.description\n if (text.example !== undefined) def.example = text.example\n for (const [prop, propText] of Object.entries(text.props)) giveProp(def.props[prop] as Mutable<PropSchema>, propText)\n }\n for (const [name, text] of Object.entries(descriptions.defs)) {\n const def = target.defs[name] as Mutable<DefSchema> | undefined\n if (!def) continue\n if (text.description !== undefined) def.description = text.description\n for (const [prop, propText] of Object.entries(text.properties)) giveProp(def.properties[prop] as Mutable<PropSchema>, propText)\n }\n for (const group of [`core`, `basic`] as const)\n for (const [name, description] of Object.entries(descriptions.functions[group])) {\n const fn = target.functions[group][name] as { description?: string } | undefined\n if (fn) fn.description = description\n }\n}\n\nlet described = false\n\n/** `coreCatalog` with its descriptions and examples attached (once per\n * process); what the prompt, the schema emitter and the docs read. */\nexport function describeCatalog(): CatalogSource {\n if (!described) {\n applyDescriptions(coreCatalog, descriptionsJson as unknown as CatalogDescriptions)\n described = true\n }\n return coreCatalog\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAS,QAAQ,CAAC,QAA6B,MAAyC;AAAA,EACtF,IAAI,CAAC;AAAA,IAAM;AAAA,EACX,IAAI,KAAK,gBAAgB;AAAA,IAAW,OAAO,cAAc,KAAK;AAAA,EAC9D,IAAI,KAAK,SAAS,OAAO;AAAA,IAAO,SAAS,OAAO,OAA8B,KAAK,KAAK;AAAA;AA0DnF,SAAS,iBAAiB,CAAC,QAAuB,cAAyC;AAAA,EAChG,YAAY,MAAM,SAAS,OAAO,QAAQ,aAAa,UAAU,GAAG;AAAA,IAClE,MAAM,MAAM,OAAO,WAAW;AAAA,IAC9B,IAAI,CAAC;AAAA,MAAK;AAAA,IACV,IAAI,KAAK,gBAAgB;AAAA,MAAW,IAAI,cAAc,KAAK;AAAA,IAC3D,IAAI,KAAK,YAAY;AAAA,MAAW,IAAI,UAAU,KAAK;AAAA,IACnD,YAAY,MAAM,aAAa,OAAO,QAAQ,KAAK,KAAK;AAAA,MAAG,SAAS,IAAI,MAAM,OAA8B,QAAQ;AAAA,EACtH;AAAA,EACA,YAAY,MAAM,SAAS,OAAO,QAAQ,aAAa,IAAI,GAAG;AAAA,IAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,IACxB,IAAI,CAAC;AAAA,MAAK;AAAA,IACV,IAAI,KAAK,gBAAgB;AAAA,MAAW,IAAI,cAAc,KAAK;AAAA,IAC3D,YAAY,MAAM,aAAa,OAAO,QAAQ,KAAK,UAAU;AAAA,MAAG,SAAS,IAAI,WAAW,OAA8B,QAAQ;AAAA,EAChI;AAAA,EACA,WAAW,SAAS,CAAC,QAAQ,OAAO;AAAA,IAClC,YAAY,MAAM,gBAAgB,OAAO,QAAQ,aAAa,UAAU,MAAM,GAAG;AAAA,MAC/E,MAAM,KAAK,OAAO,UAAU,OAAO;AAAA,MACnC,IAAI;AAAA,QAAI,GAAG,cAAc;AAAA,IAC3B;AAAA;AAGJ,IAAI,YAAY;AAIT,SAAS,gBAAe,GAAkB;AAAA,EAC/C,IAAI,CAAC,WAAW;AAAA,IACd,kBAAkB,cAAa,yBAAkD;AAAA,IACjF,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA;",
8
- "debugId": "9E9E8979695368A164756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAS,QAAQ,CAAC,QAA6B,MAAyC;AAAA,EACtF,IAAI,CAAC;AAAA,IAAM;AAAA,EACX,IAAI,KAAK,gBAAgB;AAAA,IAAW,OAAO,cAAc,KAAK;AAAA,EAC9D,IAAI,KAAK,SAAS,OAAO;AAAA,IAAO,SAAS,OAAO,OAA8B,KAAK,KAAK;AAAA;AA0DnF,SAAS,iBAAiB,CAAC,QAAuB,cAAyC;AAAA,EAChG,YAAY,MAAM,SAAS,OAAO,QAAQ,aAAa,UAAU,GAAG;AAAA,IAClE,MAAM,MAAM,OAAO,WAAW;AAAA,IAC9B,IAAI,CAAC;AAAA,MAAK;AAAA,IACV,IAAI,KAAK,gBAAgB;AAAA,MAAW,IAAI,cAAc,KAAK;AAAA,IAC3D,IAAI,KAAK,YAAY;AAAA,MAAW,IAAI,UAAU,KAAK;AAAA,IACnD,YAAY,MAAM,aAAa,OAAO,QAAQ,KAAK,KAAK;AAAA,MAAG,SAAS,IAAI,MAAM,OAA8B,QAAQ;AAAA,EACtH;AAAA,EACA,YAAY,MAAM,SAAS,OAAO,QAAQ,aAAa,IAAI,GAAG;AAAA,IAC5D,MAAM,MAAM,OAAO,KAAK;AAAA,IACxB,IAAI,CAAC;AAAA,MAAK;AAAA,IACV,IAAI,KAAK,gBAAgB;AAAA,MAAW,IAAI,cAAc,KAAK;AAAA,IAC3D,YAAY,MAAM,aAAa,OAAO,QAAQ,KAAK,UAAU;AAAA,MAAG,SAAS,IAAI,WAAW,OAA8B,QAAQ;AAAA,EAChI;AAAA,EACA,WAAW,SAAS,CAAC,QAAQ,OAAO;AAAA,IAClC,YAAY,MAAM,gBAAgB,OAAO,QAAQ,aAAa,UAAU,MAAM,GAAG;AAAA,MAC/E,MAAM,KAAK,OAAO,UAAU,OAAO;AAAA,MACnC,IAAI;AAAA,QAAI,GAAG,cAAc;AAAA,IAC3B;AAAA;AAGJ,IAAI,YAAY;AAIT,SAAS,gBAAe,GAAkB;AAAA,EAC/C,IAAI,CAAC,WAAW;AAAA,IACd,kBAAkB,cAAa,yBAAkD;AAAA,IACjF,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA;",
8
+ "debugId": "EAFB7655444BBC6964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -177,10 +177,31 @@ var style_default = {
177
177
  hintGap: 12,
178
178
  placeholderIcon: "ui-scan",
179
179
  placeholderIconSize: 32
180
+ },
181
+ zoomableImage: {
182
+ $comment: "EXP-1586: the ZoomableImage native. THE MATHS COMES FROM THE CORE: src/zoom.ts (the Rust core's `zoom` ports it; fixtures/zoom.json locks it). THE BOX: as wide as its parent; its height = the style height, else width × naturalHeight / naturalWidth (capped at the width for a TALL picture, so a full-page capture opens as a landscape window onto its top), else 16:9; the picture clips to it. A view = {scale, x, y}: scale = displayed px per image px (1 = 100%: one image pixel per point), x/y = the picture's top-left in the viewport. FIT = min(1, vw/iw, vh/ih) (never upscales) = the minimum scale; the maximum = max(fit, maxScale). REST = the scale it opens at: `fit`, `fitWidth` = min(1, vw/iw), `actual` = 1, `auto` = fitWidth when the picture is TALL (w/h < tallAspect) else fit. An axis where the scaled picture is no larger than the viewport is CENTRED; otherwise x is clamped to [vw − sw, 0] (no letterbox shows); rest views of a tall picture start at the top. Zoom keeps the anchor point fixed (the cursor, the fingers' midpoint, the double-tap point, the viewport centre for keys and the pill). Wheel with ⌘/ctrl (or a trackpad pinch) = factor exp(−deltaY × wheelRate) (lines × wheelLinePx first); a plain wheel PANS. Steps (+ / − / the pill) = the next `presets` entry strictly above / below the current scale (fit joins the ladder), clamped. Double tap / click: at rest → max(1, 2 × rest) capped at the max, about the point; otherwise → the rest view. Keys: + = step up, − = step down, 0 = the rest view, 1 = 100% about the centre. Drag past an edge = the overshoot through rubberBand(o, d) = (1 − 1 / (o × rubber / d + 1)) × d (d = the viewport's extent on that axis), released = the clamped view (sprung with motion.standard; reduced motion snaps). A pinch past the min/max rubber-bands the scale the same way (d = the limit). Mouse-drag momentum: v(t) = v0 × e^(−t/momentumTauMs), travel = v0 × τ × (1 − e^(−t/τ)), stopping at the edges; touch and trackpads use the platform's own inertia. Pan ROOM = an axis whose scaled picture is larger than the viewport: a horizontal swipe with no x room belongs to the host (paging); with room the picture pans. A new src = the rest view; a resize at rest = the new rest view, zoomed = the same scale about the viewport centre, clamped. THE PILL (controls auto/always): one glass capsule bottom-centre `pill.inset` above the picture's bottom edge: Button ghost icon-sm `ui-minus`, the percent (round(scale × 100) + '%', tabular, a ghost button opening THE Menu of `menuPresets` (0 = Fit, the rest view; outside [min, max] dropped)), Button ghost icon-sm `ui-add`, a hairline divider, Button ghost icon-sm `ui-fullscreen` (pressed = the rest view; drawn ACTIVE while at rest). − is disabled at the min, + at the max. `auto` shows it on appear and hides it autoHideMs after the last pointer move / zoom / focus inside (kept while hovered or focused; a touch tap on the picture toggles it); `none` never draws it.",
183
+ tallAspect: 0.3333333333333333,
184
+ maxScale: 8,
185
+ presets: [0.25, 0.33, 0.5, 0.67, 1, 1.5, 2, 3, 4, 6, 8],
186
+ menuPresets: [0, 0.5, 1, 2, 4],
187
+ doubleTapFactor: 2,
188
+ wheelRate: 0.002,
189
+ wheelLinePx: 16,
190
+ rubber: 0.55,
191
+ momentumTauMs: 325,
192
+ autoHideMs: 2000,
193
+ pill: {
194
+ height: 36,
195
+ inset: 16,
196
+ padding: 4,
197
+ gap: 2,
198
+ percentMinWidth: 56,
199
+ dividerHeight: 16
200
+ }
180
201
  }
181
202
  };
182
203
 
183
204
  export { style_default };
184
205
 
185
- //# debugId=05E1BDCCE234C4F864756E2164756E21
186
- //# sourceMappingURL=index-fy7y2nz8.js.map
206
+ //# debugId=DC33EA0718B17E1B64756E2164756E21
207
+ //# sourceMappingURL=index-cvf7bbs5.js.map
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "05E1BDCCE234C4F864756E2164756E21",
7
+ "debugId": "DC33EA0718B17E1B64756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -0,0 +1,48 @@
1
+ // packages/exponential-ui/catalog/layout.json
2
+ var layout_default = {
3
+ $comment: "Round 2 (docs/round-2-contract.md §7): the layout NUMBERS every painter shares where no theme token decides (px unless noted). `windowThreshold` = items past which List and Table window; `windowOverscan` = items rendered beyond each viewport edge; `resizeStep` = percentage points per arrow key on a Resizable handle; `panelMin` = a panel's min (percent) when unset; `resizeHandleHit` = a handle's hit area across its hairline; `fieldIntrinsicWidth` = the max-content width of a text field (Input, Textarea, NumberField, ChipInput: never the browser's `size` default) — picker triggers (Select, DatePicker, DateRangePicker, TimePicker) size to their content; `mediaIntrinsicWidth` = the max-content width of an Image/Video without a width (its min-content is 0); `mediaAspectRatio` = width/height of an Image without `aspectRatio` or a height (Video: its `aspectRatio` default); `treeGuideColumn` = one TreeGuides gutter column (the recipe's `line` width is the STROKE; round 3: 14, the ×4 app indent, the elbow lands on the parent's lead glyph); `treeGuideRadius` = the elbow's corner radius; `treeGuideBridge` = how far the guide verticals overshoot the row's TOP edge (paint only) so a Section's hairline divider never breaks the line. EXP-1259 (packages/domain-contract/fixtures/feedback-states.json + search-list.json): `pendingDelayMs` = how long a `loading` Button waits before it shows the spinner and its `pendingLabel` (a fast action never flashes; presses are refused at once); `skeletonPulseMs` / `skeletonOpacityLow` / `skeletonOpacityHigh` = the placeholder's ONE opacity pulse (low → high → low, ease-in-out), `skeletonReducedOpacity` = its static opacity under reduce motion; `searchListFade` = the bottom fade over a SearchList (or a searchable submenu) while more rows sit below. EXP-1548: `tableColumnMin` = the narrowest a Table column without a `width` gets; a table whose columns need more than its box scrolls horizontally. Generated into every target; src/layout.ts reads it.",
4
+ windowThreshold: 50,
5
+ windowOverscan: 5,
6
+ resizeStep: 10,
7
+ panelMin: 10,
8
+ resizeHandleHit: 8,
9
+ fieldIntrinsicWidth: 160,
10
+ mediaIntrinsicWidth: 320,
11
+ mediaAspectRatio: 1.7777778,
12
+ treeGuideColumn: 14,
13
+ treeGuideRadius: 3,
14
+ treeGuideBridge: 1,
15
+ pendingDelayMs: 150,
16
+ skeletonPulseMs: 1600,
17
+ skeletonOpacityLow: 0.45,
18
+ skeletonOpacityHigh: 0.9,
19
+ skeletonReducedOpacity: 0.6,
20
+ searchListFade: 24,
21
+ tableColumnMin: 120
22
+ };
23
+
24
+ // packages/exponential-ui/src/layout.ts
25
+ var LAYOUT_CONSTANTS2 = Object.fromEntries(Object.entries(layout_default).filter(([k]) => !k.startsWith(`$`)));
26
+ var WINDOW_THRESHOLD2 = layout_default.windowThreshold;
27
+ var WINDOW_OVERSCAN2 = layout_default.windowOverscan;
28
+ var RESIZE_STEP2 = layout_default.resizeStep;
29
+ var PANEL_MIN2 = layout_default.panelMin;
30
+ var RESIZE_HANDLE_HIT2 = layout_default.resizeHandleHit;
31
+ var FIELD_INTRINSIC_WIDTH2 = layout_default.fieldIntrinsicWidth;
32
+ var MEDIA_INTRINSIC_WIDTH2 = layout_default.mediaIntrinsicWidth;
33
+ var MEDIA_ASPECT_RATIO2 = layout_default.mediaAspectRatio;
34
+ var TREE_GUIDE_COLUMN2 = layout_default.treeGuideColumn;
35
+ var TREE_GUIDE_RADIUS2 = layout_default.treeGuideRadius;
36
+ var TREE_GUIDE_BRIDGE2 = layout_default.treeGuideBridge;
37
+ var PENDING_DELAY_MS2 = layout_default.pendingDelayMs;
38
+ var SKELETON_PULSE_MS2 = layout_default.skeletonPulseMs;
39
+ var SKELETON_OPACITY_LOW2 = layout_default.skeletonOpacityLow;
40
+ var SKELETON_OPACITY_HIGH2 = layout_default.skeletonOpacityHigh;
41
+ var SKELETON_REDUCED_OPACITY2 = layout_default.skeletonReducedOpacity;
42
+ var SEARCH_LIST_FADE2 = layout_default.searchListFade;
43
+ var TABLE_COLUMN_MIN = layout_default.tableColumnMin;
44
+
45
+ export { LAYOUT_CONSTANTS2, WINDOW_THRESHOLD2, WINDOW_OVERSCAN2, RESIZE_STEP2, PANEL_MIN2, RESIZE_HANDLE_HIT2, FIELD_INTRINSIC_WIDTH2, MEDIA_INTRINSIC_WIDTH2, MEDIA_ASPECT_RATIO2, TREE_GUIDE_COLUMN2, TREE_GUIDE_RADIUS2, TREE_GUIDE_BRIDGE2, PENDING_DELAY_MS2, SKELETON_PULSE_MS2, SKELETON_OPACITY_LOW2, SKELETON_OPACITY_HIGH2, SKELETON_REDUCED_OPACITY2, SEARCH_LIST_FADE2, TABLE_COLUMN_MIN };
46
+
47
+ //# debugId=51506351DA828E8764756E2164756E21
48
+ //# sourceMappingURL=index-dgkf6yw5.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/layout.ts"],
4
+ "sourcesContent": [
5
+ "// Round 2 (docs/round-2-contract.md §7): the shared layout numbers\n// (catalog/layout.json), one place for the TS reference and the generated\n// constants of every target.\n\nimport layoutJson from \"../catalog/layout.json\" with { type: \"json\" }\n\nexport const LAYOUT_CONSTANTS: Readonly<Record<string, number>> = Object.fromEntries(Object.entries(layoutJson).filter(([k]) => !k.startsWith(`$`))) as Record<string, number>\nexport const WINDOW_THRESHOLD: number = layoutJson.windowThreshold\nexport const WINDOW_OVERSCAN: number = layoutJson.windowOverscan\nexport const RESIZE_STEP: number = layoutJson.resizeStep\nexport const PANEL_MIN: number = layoutJson.panelMin\nexport const RESIZE_HANDLE_HIT: number = layoutJson.resizeHandleHit\nexport const FIELD_INTRINSIC_WIDTH: number = layoutJson.fieldIntrinsicWidth\nexport const MEDIA_INTRINSIC_WIDTH: number = layoutJson.mediaIntrinsicWidth\nexport const MEDIA_ASPECT_RATIO: number = layoutJson.mediaAspectRatio\nexport const TREE_GUIDE_COLUMN: number = layoutJson.treeGuideColumn\n/** Round 3: the elbow's corner radius and how far the guide verticals overshoot a row's top edge (paint only). */\nexport const TREE_GUIDE_RADIUS: number = layoutJson.treeGuideRadius\nexport const TREE_GUIDE_BRIDGE: number = layoutJson.treeGuideBridge\n/** EXP-1259: the pending Button's delay, the Skeleton's pulse and the SearchList's bottom fade (feedback-states.json, search-list.json). */\nexport const PENDING_DELAY_MS: number = layoutJson.pendingDelayMs\nexport const SKELETON_PULSE_MS: number = layoutJson.skeletonPulseMs\nexport const SKELETON_OPACITY_LOW: number = layoutJson.skeletonOpacityLow\nexport const SKELETON_OPACITY_HIGH: number = layoutJson.skeletonOpacityHigh\nexport const SKELETON_REDUCED_OPACITY: number = layoutJson.skeletonReducedOpacity\nexport const SEARCH_LIST_FADE: number = layoutJson.searchListFade\n/** EXP-1548: the narrowest a Table column without a `width` gets; a wider table scrolls. */\nexport const TABLE_COLUMN_MIN: number = layoutJson.tableColumnMin\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAM,oBAAqD,OAAO,YAAY,OAAO,QAAQ,cAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;AAC5I,IAAM,oBAA2B,eAAW;AAC5C,IAAM,mBAA0B,eAAW;AAC3C,IAAM,eAAsB,eAAW;AACvC,IAAM,aAAoB,eAAW;AACrC,IAAM,qBAA4B,eAAW;AAC7C,IAAM,yBAAgC,eAAW;AACjD,IAAM,yBAAgC,eAAW;AACjD,IAAM,sBAA6B,eAAW;AAC9C,IAAM,qBAA4B,eAAW;AAE7C,IAAM,qBAA4B,eAAW;AAC7C,IAAM,qBAA4B,eAAW;AAE7C,IAAM,oBAA2B,eAAW;AAC5C,IAAM,qBAA4B,eAAW;AAC7C,IAAM,wBAA+B,eAAW;AAChD,IAAM,yBAAgC,eAAW;AACjD,IAAM,4BAAmC,eAAW;AACpD,IAAM,oBAA2B,eAAW;AAE5C,IAAM,mBAA2B,eAAW;",
8
+ "debugId": "51506351DA828E8764756E2164756E21",
9
+ "names": []
10
+ }
@@ -319,6 +319,27 @@ var core_runtime_default = {
319
319
  "running",
320
320
  "done",
321
321
  "declined"
322
+ ],
323
+ zoomInitial: [
324
+ "auto",
325
+ "fit",
326
+ "fitWidth",
327
+ "actual"
328
+ ],
329
+ zoomControls: [
330
+ "auto",
331
+ "always",
332
+ "none"
333
+ ],
334
+ motionDirection: [
335
+ "forward",
336
+ "reverse",
337
+ "alternate"
338
+ ],
339
+ motionFit: [
340
+ "contain",
341
+ "cover",
342
+ "fill"
322
343
  ]
323
344
  },
324
345
  defs: {
@@ -557,6 +578,10 @@ var core_runtime_default = {
557
578
  },
558
579
  decimals: {
559
580
  type: "number"
581
+ },
582
+ truncate: {
583
+ type: "boolean",
584
+ default: false
560
585
  }
561
586
  }
562
587
  },
@@ -966,7 +991,10 @@ var core_runtime_default = {
966
991
  "Toast.icon.success": "ui-success",
967
992
  "Toast.icon.warning": "ui-warning",
968
993
  "Toast.icon.error": "ui-error",
969
- "Unknown.root": "ui-warning"
994
+ "Unknown.root": "ui-warning",
995
+ "ZoomableImage.zoomOut": "ui-minus",
996
+ "ZoomableImage.zoomIn": "ui-add",
997
+ "ZoomableImage.fit": "ui-fullscreen"
970
998
  },
971
999
  components: {
972
1000
  Box: {
@@ -1594,6 +1622,55 @@ var core_runtime_default = {
1594
1622
  }
1595
1623
  }
1596
1624
  },
1625
+ ZoomableImage: {
1626
+ kind: "native",
1627
+ group: "media",
1628
+ lite: false,
1629
+ children: "none",
1630
+ props: {
1631
+ src: {
1632
+ type: "url",
1633
+ required: true,
1634
+ bindable: true
1635
+ },
1636
+ alt: {
1637
+ type: "string",
1638
+ required: true,
1639
+ bindable: true
1640
+ },
1641
+ naturalWidth: {
1642
+ type: "number"
1643
+ },
1644
+ naturalHeight: {
1645
+ type: "number"
1646
+ },
1647
+ initial: {
1648
+ type: "enum",
1649
+ enum: "zoomInitial",
1650
+ default: "auto"
1651
+ },
1652
+ maxScale: {
1653
+ type: "number",
1654
+ default: 8
1655
+ },
1656
+ controls: {
1657
+ type: "enum",
1658
+ enum: "zoomControls",
1659
+ default: "auto"
1660
+ },
1661
+ scale: {
1662
+ type: "number",
1663
+ bindable: true
1664
+ },
1665
+ style: {
1666
+ type: "style"
1667
+ }
1668
+ },
1669
+ events: [
1670
+ "zoom",
1671
+ "tap"
1672
+ ]
1673
+ },
1597
1674
  Icon: {
1598
1675
  kind: "native",
1599
1676
  group: "media",
@@ -4026,6 +4103,117 @@ var core_runtime_default = {
4026
4103
  type: "string"
4027
4104
  }
4028
4105
  }
4106
+ },
4107
+ Motion: {
4108
+ kind: "native",
4109
+ group: "media",
4110
+ lite: true,
4111
+ children: "none",
4112
+ props: {
4113
+ layers: {
4114
+ type: "array",
4115
+ items: {
4116
+ type: "object"
4117
+ }
4118
+ },
4119
+ size: {
4120
+ type: "array",
4121
+ items: {
4122
+ type: "number"
4123
+ }
4124
+ },
4125
+ duration: {
4126
+ type: "number"
4127
+ },
4128
+ fps: {
4129
+ type: "number",
4130
+ default: 60
4131
+ },
4132
+ assets: {
4133
+ type: "object"
4134
+ },
4135
+ markers: {
4136
+ type: "array",
4137
+ items: {
4138
+ type: "object"
4139
+ }
4140
+ },
4141
+ lottie: {
4142
+ type: "object"
4143
+ },
4144
+ src: {
4145
+ type: "url"
4146
+ },
4147
+ autoplay: {
4148
+ type: "boolean",
4149
+ default: true
4150
+ },
4151
+ loop: {
4152
+ type: "boolean",
4153
+ default: true
4154
+ },
4155
+ plays: {
4156
+ type: "number"
4157
+ },
4158
+ direction: {
4159
+ type: "enum",
4160
+ enum: "motionDirection",
4161
+ default: "forward"
4162
+ },
4163
+ speed: {
4164
+ type: "number",
4165
+ default: 1
4166
+ },
4167
+ segment: {
4168
+ type: "array",
4169
+ items: {
4170
+ type: "number"
4171
+ }
4172
+ },
4173
+ marker: {
4174
+ type: "string"
4175
+ },
4176
+ progress: {
4177
+ type: "number",
4178
+ bindable: true
4179
+ },
4180
+ play: {
4181
+ type: "boolean",
4182
+ bindable: true,
4183
+ default: true
4184
+ },
4185
+ poster: {
4186
+ type: "number"
4187
+ },
4188
+ fit: {
4189
+ type: "enum",
4190
+ enum: "motionFit",
4191
+ default: "contain"
4192
+ },
4193
+ slots: {
4194
+ type: "object"
4195
+ },
4196
+ stateMachine: {
4197
+ type: "object"
4198
+ },
4199
+ inputs: {
4200
+ type: "object",
4201
+ bindable: true
4202
+ },
4203
+ label: {
4204
+ type: "string"
4205
+ },
4206
+ style: {
4207
+ type: "style"
4208
+ }
4209
+ },
4210
+ events: [
4211
+ "press",
4212
+ "hover",
4213
+ "visible",
4214
+ "complete",
4215
+ "state"
4216
+ ]
4029
4217
  }
4030
4218
  }
4031
4219
  };
@@ -6258,6 +6446,7 @@ var macros_default = {
6258
6446
  }
6259
6447
  },
6260
6448
  alignItems: "stretch",
6449
+ gap: "$spacing.lg",
6261
6450
  width: "100%",
6262
6451
  minHeight: 0
6263
6452
  },
@@ -9006,5 +9195,5 @@ function coreLite2() {
9006
9195
 
9007
9196
  export { basic_map_default, coreCatalog2, CORE_CATALOG_ID2, CORE_LITE_CATALOG_ID2, A2UI_BASIC_CATALOG_ID2, A2UI_VERSION2, SUPPORTED_CATALOG_IDS2, UNKNOWN_COMPONENT2, coreMacros2, TOKEN_GROUPS2, parseTokenRef2, isKnownToken2, catalogView2, sharedCatalogView2, componentDef2, isOffered2, componentNames2, coreLite2 };
9008
9197
 
9009
- //# debugId=A1A315F6C68A2DA064756E2164756E21
9010
- //# sourceMappingURL=index-abcjanhc.js.map
9198
+ //# debugId=BADB7DDAF7A42C8A64756E2164756E21
9199
+ //# sourceMappingURL=index-f9wkb6aq.js.map