@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,5 +1,5 @@
1
1
  {
2
- "$comment": "VAPP-91: the host router (catalog/host.json ops): server messages in, ops out, in order. Inputs hand-written; `expected` filled by the generator from src/host/router.ts. A conformance runner creates ONE router per flow with `extensionIds`, installs `packages` (their install issues are `installIssues`), then routes every step's message and compares the ops. VAPP-122: `records` = validateRecord(packages[package].records[kind].schema, data) → issues; `acme.hours` declares two kinds, `acme.badrecords` every schema mistake. Keys of `records` and of every `properties` are written in sorted order: the Rust core iterates its maps sorted, so the issue order is the same on every platform. VAPP-161 (format version 2): `acme.v2` uses every new key validly (formatVersion, a records: binding, the records.* functions, the three tool transports, an empty extensions list); `acme.charts` declares an extension: not available under the default catalogs, installed by the VAPP-161 flow that registers it; `acme.v2broken` makes every tools / extensions / records-source mistake; `acme.future` is a newer format version; `acme.v1` is a version-1 package that stays valid.",
2
+ "$comment": "VAPP-91: the host router (catalog/host.json ops): server messages in, ops out, in order. Inputs hand-written; `expected` filled by the generator from src/host/router.ts. A conformance runner creates ONE router per flow with `extensionIds`, installs `packages` (their install issues are `installIssues`), then routes every step's message and compares the ops. VAPP-122: `records` = validateRecord(packages[package].records[kind].schema, data) → issues; `acme.hours` declares two kinds, `acme.badrecords` every schema mistake. Keys of `records` and of every `properties` are written in sorted order: the Rust core iterates its maps sorted, so the issue order is the same on every platform. VAPP-161 (format version 2): `acme.v2` uses every new key validly (formatVersion, a records: binding, the records.* functions, the three tool transports, an empty extensions list); `acme.charts` declares an extension: not available under the default catalogs, installed by the VAPP-161 flow that registers it; `acme.v2broken` makes every tools / extensions / records-source mistake; `acme.future` is a newer format version; `acme.v1` is a version-1 package that stays valid. VAPP-180: `acme.exposes` declares `upstreams` and valid `exposes` (a records read and upsert, two action bindings, an upstream); `acme.badexposes` makes every format mistake of an exposed tool, a duplicate upstream included; `acme.exposeslist` has neither list a list.",
3
3
  "packages": {
4
4
  "acme.devices": {
5
5
  "id": "acme.devices",
@@ -556,6 +556,426 @@
556
556
  ]
557
557
  }
558
558
  ]
559
+ },
560
+ "acme.exposes": {
561
+ "id": "acme.exposes",
562
+ "name": "Hours with tools",
563
+ "version": "1.0.0",
564
+ "catalogId": "https://ui.exponential.at/catalogs/core/v1",
565
+ "templates": {
566
+ "t": {
567
+ "components": [
568
+ {
569
+ "id": "root",
570
+ "component": "Column"
571
+ }
572
+ ]
573
+ }
574
+ },
575
+ "records": {
576
+ "entry": {
577
+ "schema": {
578
+ "type": "object",
579
+ "properties": {
580
+ "date": {
581
+ "type": "string",
582
+ "format": "date"
583
+ },
584
+ "hours": {
585
+ "type": "number"
586
+ }
587
+ },
588
+ "required": [
589
+ "date"
590
+ ]
591
+ }
592
+ }
593
+ },
594
+ "upstreams": [
595
+ "m5"
596
+ ],
597
+ "exposes": [
598
+ {
599
+ "name": "list_entries",
600
+ "title": "List entries",
601
+ "description": "The time entries of a day.",
602
+ "input": {
603
+ "type": "object",
604
+ "properties": {
605
+ "day": {
606
+ "type": "string"
607
+ },
608
+ "limit": {
609
+ "type": "integer"
610
+ }
611
+ }
612
+ },
613
+ "access": "read",
614
+ "run": {
615
+ "records": {
616
+ "op": "list",
617
+ "kind": "entry",
618
+ "where": {
619
+ "date": "${input.day}"
620
+ },
621
+ "limit": "${input.limit}"
622
+ }
623
+ }
624
+ },
625
+ {
626
+ "name": "add_entry",
627
+ "title": "Add an entry",
628
+ "description": "Log hours.",
629
+ "input": {
630
+ "type": "object",
631
+ "properties": {
632
+ "entry": {
633
+ "type": "object"
634
+ }
635
+ },
636
+ "required": [
637
+ "entry"
638
+ ]
639
+ },
640
+ "access": "write",
641
+ "run": {
642
+ "records": {
643
+ "op": "upsert",
644
+ "kind": "entry",
645
+ "data": "${input.entry}"
646
+ }
647
+ }
648
+ },
649
+ {
650
+ "name": "log_comment",
651
+ "title": "Log a comment",
652
+ "description": "Comment the logged hours on an issue.",
653
+ "input": {
654
+ "type": "object",
655
+ "properties": {
656
+ "hours": {
657
+ "type": "number"
658
+ },
659
+ "issue": {
660
+ "type": "string"
661
+ }
662
+ }
663
+ },
664
+ "access": "write",
665
+ "run": {
666
+ "action": "exponential.comments.create",
667
+ "args": {
668
+ "body": "Logged ${input.hours} h",
669
+ "issueId": "${input.issue}"
670
+ }
671
+ }
672
+ },
673
+ {
674
+ "name": "open_issues",
675
+ "title": "Open issues",
676
+ "description": "A write tool over a read only narrows who sees it.",
677
+ "input": {
678
+ "type": "object"
679
+ },
680
+ "access": "write",
681
+ "run": {
682
+ "action": "exponential.issues.list",
683
+ "args": {}
684
+ }
685
+ },
686
+ {
687
+ "name": "find_customer",
688
+ "title": "Find a customer",
689
+ "description": "Search m5 customers.",
690
+ "input": {
691
+ "type": "object",
692
+ "properties": {
693
+ "q": {
694
+ "type": "string"
695
+ }
696
+ }
697
+ },
698
+ "access": "read",
699
+ "run": {
700
+ "upstream": "m5",
701
+ "tool": "search_customers",
702
+ "args": {
703
+ "query": "${input.q}"
704
+ }
705
+ }
706
+ }
707
+ ]
708
+ },
709
+ "acme.badexposes": {
710
+ "id": "acme.badexposes",
711
+ "name": "Bad tools",
712
+ "version": "1.0.0",
713
+ "catalogId": "https://ui.exponential.at/catalogs/core/v1",
714
+ "templates": {
715
+ "t": {
716
+ "components": [
717
+ {
718
+ "id": "root",
719
+ "component": "Column"
720
+ }
721
+ ]
722
+ }
723
+ },
724
+ "records": {
725
+ "entry": {
726
+ "schema": {
727
+ "type": "object",
728
+ "properties": {
729
+ "date": {
730
+ "type": "string",
731
+ "format": "date"
732
+ },
733
+ "hours": {
734
+ "type": "number"
735
+ }
736
+ },
737
+ "required": [
738
+ "date"
739
+ ]
740
+ }
741
+ }
742
+ },
743
+ "upstreams": [
744
+ "m5",
745
+ "m5"
746
+ ],
747
+ "exposes": [
748
+ "x",
749
+ {
750
+ "name": "List",
751
+ "title": " ",
752
+ "description": "",
753
+ "input": {
754
+ "type": "string"
755
+ },
756
+ "access": "admin",
757
+ "run": {
758
+ "records": {
759
+ "op": "get",
760
+ "kind": "entry",
761
+ "id": "x"
762
+ }
763
+ }
764
+ },
765
+ {
766
+ "name": "list__all",
767
+ "title": "A",
768
+ "description": "A.",
769
+ "input": {
770
+ "type": "object"
771
+ },
772
+ "access": "read",
773
+ "run": {}
774
+ },
775
+ {
776
+ "name": "entries",
777
+ "title": "A",
778
+ "description": "A.",
779
+ "input": {
780
+ "type": "object"
781
+ },
782
+ "access": "write",
783
+ "run": {
784
+ "action": "exponential.issues.create",
785
+ "upstream": "m5",
786
+ "tool": "x"
787
+ }
788
+ },
789
+ {
790
+ "name": "entries",
791
+ "title": "A",
792
+ "description": "A.",
793
+ "input": {
794
+ "type": "object"
795
+ },
796
+ "access": "read",
797
+ "run": {
798
+ "records": {
799
+ "op": "count",
800
+ "kind": "entry"
801
+ }
802
+ }
803
+ },
804
+ {
805
+ "name": "by_day",
806
+ "title": "A",
807
+ "description": "A.",
808
+ "input": {
809
+ "type": "object",
810
+ "properties": {
811
+ "day": {
812
+ "type": "string"
813
+ }
814
+ }
815
+ },
816
+ "access": "read",
817
+ "run": {
818
+ "records": {
819
+ "op": "list",
820
+ "kind": "note",
821
+ "where": {
822
+ "date": "${input.day}",
823
+ "who": "${input.user.email}"
824
+ }
825
+ }
826
+ }
827
+ },
828
+ {
829
+ "name": "drop_entry",
830
+ "title": "A",
831
+ "description": "A.",
832
+ "input": {
833
+ "type": "object"
834
+ },
835
+ "access": "write",
836
+ "run": {
837
+ "records": {
838
+ "op": "delete",
839
+ "kind": "entry",
840
+ "id": "x"
841
+ }
842
+ }
843
+ },
844
+ {
845
+ "name": "drop_issue",
846
+ "title": "A",
847
+ "description": "A.",
848
+ "input": {
849
+ "type": "object"
850
+ },
851
+ "access": "write",
852
+ "run": {
853
+ "action": "exponential.issues.delete",
854
+ "args": {}
855
+ }
856
+ },
857
+ {
858
+ "name": "bad_action",
859
+ "title": "A",
860
+ "description": "A.",
861
+ "input": {
862
+ "type": "object"
863
+ },
864
+ "access": "write",
865
+ "run": {
866
+ "action": "Issues",
867
+ "args": {}
868
+ }
869
+ },
870
+ {
871
+ "name": "new_issue",
872
+ "title": "A",
873
+ "description": "A.",
874
+ "input": {
875
+ "type": "object"
876
+ },
877
+ "access": "read",
878
+ "run": {
879
+ "action": "exponential.issues.create",
880
+ "args": {}
881
+ }
882
+ },
883
+ {
884
+ "name": "add_entry",
885
+ "title": "A",
886
+ "description": "A.",
887
+ "input": {
888
+ "type": "object"
889
+ },
890
+ "access": "read",
891
+ "run": {
892
+ "records": {
893
+ "op": "upsert",
894
+ "kind": "entry",
895
+ "data": {}
896
+ }
897
+ }
898
+ },
899
+ {
900
+ "name": "github",
901
+ "title": "A",
902
+ "description": "A.",
903
+ "input": {
904
+ "type": "object"
905
+ },
906
+ "access": "write",
907
+ "run": {
908
+ "upstream": "github",
909
+ "tool": "create_issue",
910
+ "args": {}
911
+ }
912
+ },
913
+ {
914
+ "name": "drop_customer",
915
+ "title": "A",
916
+ "description": "A.",
917
+ "input": {
918
+ "type": "object"
919
+ },
920
+ "access": "write",
921
+ "run": {
922
+ "upstream": "m5",
923
+ "tool": "delete_customer"
924
+ }
925
+ },
926
+ {
927
+ "name": "no_tool",
928
+ "title": "A",
929
+ "description": "A.",
930
+ "input": {
931
+ "type": "object"
932
+ },
933
+ "access": "write",
934
+ "run": {
935
+ "upstream": "m5",
936
+ "tool": ""
937
+ }
938
+ },
939
+ {
940
+ "name": "long_title",
941
+ "title": "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT",
942
+ "description": "A.",
943
+ "input": {
944
+ "type": "object",
945
+ "properties": []
946
+ },
947
+ "access": "read",
948
+ "run": {
949
+ "records": {
950
+ "op": "list",
951
+ "kind": "entry"
952
+ }
953
+ }
954
+ }
955
+ ]
956
+ },
957
+ "acme.exposeslist": {
958
+ "id": "acme.exposeslist",
959
+ "name": "Tools not a list",
960
+ "version": "1.0.0",
961
+ "catalogId": "https://ui.exponential.at/catalogs/core/v1",
962
+ "templates": {
963
+ "t": {
964
+ "components": [
965
+ {
966
+ "id": "root",
967
+ "component": "Column"
968
+ }
969
+ ]
970
+ }
971
+ },
972
+ "upstreams": [
973
+ "m5",
974
+ 3
975
+ ],
976
+ "exposes": {
977
+ "list": {}
978
+ }
559
979
  }
560
980
  },
561
981
  "flows": [
@@ -1909,6 +2329,124 @@
1909
2329
  "message": "extension https://acme.example/catalogs/charts/v1 is not available on this host"
1910
2330
  }
1911
2331
  ]
2332
+ },
2333
+ {
2334
+ "package": "acme.exposes",
2335
+ "expected": []
2336
+ },
2337
+ {
2338
+ "package": "acme.badexposes",
2339
+ "expected": [
2340
+ {
2341
+ "path": "/upstreams/1",
2342
+ "message": "duplicate upstream m5"
2343
+ },
2344
+ {
2345
+ "path": "/exposes/0",
2346
+ "message": "a tool is {name, title, description, input, access, run}"
2347
+ },
2348
+ {
2349
+ "path": "/exposes/1/name",
2350
+ "message": "name is lowercase letters, digits and _ (at most 40, no __)"
2351
+ },
2352
+ {
2353
+ "path": "/exposes/1/title",
2354
+ "message": "title is a non-blank string of at most 80 characters"
2355
+ },
2356
+ {
2357
+ "path": "/exposes/1/description",
2358
+ "message": "description is a non-blank string of at most 1024 characters"
2359
+ },
2360
+ {
2361
+ "path": "/exposes/1/input",
2362
+ "message": "input is a JSON Schema of type object"
2363
+ },
2364
+ {
2365
+ "path": "/exposes/1/access",
2366
+ "message": "access is read or write"
2367
+ },
2368
+ {
2369
+ "path": "/exposes/2/name",
2370
+ "message": "name is lowercase letters, digits and _ (at most 40, no __)"
2371
+ },
2372
+ {
2373
+ "path": "/exposes/2/run",
2374
+ "message": "run holds exactly one of records, action, upstream"
2375
+ },
2376
+ {
2377
+ "path": "/exposes/3/run",
2378
+ "message": "run holds exactly one of records, action, upstream"
2379
+ },
2380
+ {
2381
+ "path": "/exposes/4/name",
2382
+ "message": "duplicate tool entries"
2383
+ },
2384
+ {
2385
+ "path": "/exposes/4/run/records/op",
2386
+ "message": "op is list, get, upsert"
2387
+ },
2388
+ {
2389
+ "path": "/exposes/5/run",
2390
+ "message": "${input.user.email} names no input property"
2391
+ },
2392
+ {
2393
+ "path": "/exposes/5/run/records/kind",
2394
+ "message": "kind names no declared record kind"
2395
+ },
2396
+ {
2397
+ "path": "/exposes/6/run/records/op",
2398
+ "message": "a records delete is destructive: never exposed"
2399
+ },
2400
+ {
2401
+ "path": "/exposes/7/run/action",
2402
+ "message": "a destructive action is never exposed"
2403
+ },
2404
+ {
2405
+ "path": "/exposes/8/run/action",
2406
+ "message": "action is a function name like namespace.function"
2407
+ },
2408
+ {
2409
+ "path": "/exposes/9/access",
2410
+ "message": "the run writes: access is write"
2411
+ },
2412
+ {
2413
+ "path": "/exposes/10/access",
2414
+ "message": "the run writes: access is write"
2415
+ },
2416
+ {
2417
+ "path": "/exposes/11/run/upstream",
2418
+ "message": "upstream names none of the package's upstreams"
2419
+ },
2420
+ {
2421
+ "path": "/exposes/12/run/tool",
2422
+ "message": "a destructive tool is never exposed"
2423
+ },
2424
+ {
2425
+ "path": "/exposes/13/run/tool",
2426
+ "message": "tool is a non-empty string"
2427
+ },
2428
+ {
2429
+ "path": "/exposes/14/title",
2430
+ "message": "title is a non-blank string of at most 80 characters"
2431
+ },
2432
+ {
2433
+ "path": "/exposes/14/input",
2434
+ "message": "input is a JSON Schema of type object"
2435
+ }
2436
+ ]
2437
+ },
2438
+ {
2439
+ "package": "acme.exposeslist",
2440
+ "expected": [
2441
+ {
2442
+ "path": "/upstreams",
2443
+ "message": "upstreams is a list of MCP server names"
2444
+ },
2445
+ {
2446
+ "path": "/exposes",
2447
+ "message": "exposes is a list of tools"
2448
+ }
2449
+ ]
1912
2450
  }
1913
2451
  ],
1914
2452
  "records": [