@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.
- package/catalog/a11y.json +25 -1
- package/catalog/core.catalog.json +426 -6
- package/catalog/core.schema.json +634 -4
- package/catalog/host.json +10 -0
- package/catalog/layout.json +3 -2
- package/catalog/limits.json +10 -1
- package/catalog/macros.json +542 -1
- package/catalog/recipes.json +4 -2
- package/catalog/strings.json +14 -2
- package/catalog/style.json +21 -0
- package/catalog/theme.schema.json +3950 -1337
- package/conformance/manifest.json +5 -5
- package/conformance/motion/build-corpus.ts +232 -0
- package/conformance/motion/corpus/SOURCES.md +117 -0
- package/conformance/motion/corpus/images/footage_0.json +1 -0
- package/conformance/motion/corpus/images/img_0.jpg +0 -0
- package/conformance/motion/corpus/images/img_1.jpg +0 -0
- package/conformance/motion/corpus/images/triangle.png +0 -0
- package/conformance/motion/corpus/skottie-3d-parenting-nocamera.json +367 -0
- package/conformance/motion/corpus/skottie-auto-orient-2.json +292 -0
- package/conformance/motion/corpus/skottie-auto-orient.json +717 -0
- package/conformance/motion/corpus/skottie-bezier-extranormal.json +199 -0
- package/conformance/motion/corpus/skottie-blendmode-hardmix.json +558 -0
- package/conformance/motion/corpus/skottie-chained-mattes.json +259 -0
- package/conformance/motion/corpus/skottie-dropshadow-ramp.json +852 -0
- package/conformance/motion/corpus/skottie-dropshadow-style.json +278 -0
- package/conformance/motion/corpus/skottie-effects-transform.json +385 -0
- package/conformance/motion/corpus/skottie-fill-effect.json +358 -0
- package/conformance/motion/corpus/skottie-fill-rule.json +457 -0
- package/conformance/motion/corpus/skottie-gaussian-blur.json +670 -0
- package/conformance/motion/corpus/skottie-gradient-opacity.json +451 -0
- package/conformance/motion/corpus/skottie-gradient-radial-highlight.json +581 -0
- package/conformance/motion/corpus/skottie-hidden-shapes-layers.json +381 -0
- package/conformance/motion/corpus/skottie-huesaturation-effect.json +1117 -0
- package/conformance/motion/corpus/skottie-invert-effect.json +665 -0
- package/conformance/motion/corpus/skottie-luma-matte.json +239 -0
- package/conformance/motion/corpus/skottie-mask-feather.json +892 -0
- package/conformance/motion/corpus/skottie-masking-opaque.json +2376 -0
- package/conformance/motion/corpus/skottie-masking-translucent.json +2376 -0
- package/conformance/motion/corpus/skottie-matte-blendmode.json +196 -0
- package/conformance/motion/corpus/skottie-matte-nonsequential.json +722 -0
- package/conformance/motion/corpus/skottie-matte-visible.json +666 -0
- package/conformance/motion/corpus/skottie-mergepaths-effect.json +722 -0
- package/conformance/motion/corpus/skottie-motion-blur-mask.json +120 -0
- package/conformance/motion/corpus/skottie-nested-animation.json +253 -0
- package/conformance/motion/corpus/skottie-offsetpaths-effect.json +525 -0
- package/conformance/motion/corpus/skottie-phonehub-connecting.json +947 -0
- package/conformance/motion/corpus/skottie-puckerbloat-effect.json +339 -0
- package/conformance/motion/corpus/skottie-repeater.json +234 -0
- package/conformance/motion/corpus/skottie-sample-1.json +168 -0
- package/conformance/motion/corpus/skottie-sample-search.json +329 -0
- package/conformance/motion/corpus/skottie-spatial-supernormal.json +898 -0
- package/conformance/motion/corpus/skottie-text-animator-1.json +1286 -0
- package/conformance/motion/corpus/skottie-text-fill-over-stroke.json +1014 -0
- package/conformance/motion/corpus/skottie-text-tracking.json +950 -0
- package/conformance/motion/corpus/skottie-text-valign.json +484 -0
- package/conformance/motion/corpus/skottie-time-reverse.json +297 -0
- package/conformance/motion/corpus/skottie-transform-skew.json +290 -0
- package/conformance/motion/corpus/skottie-trimpath-fill.json +933 -0
- package/conformance/motion/corpus/skottie-trimpath-modes.json +266 -0
- package/conformance/motion/corpus/skottie-tritone-effect.json +379 -0
- package/conformance/motion/corpus/spec-blend-mode.json +531 -0
- package/conformance/motion/corpus/spec-ellipse.json +142 -0
- package/conformance/motion/corpus/spec-fill.json +193 -0
- package/conformance/motion/corpus/spec-gradient-stroke.json +1263 -0
- package/conformance/motion/corpus/spec-gradient.json +1255 -0
- package/conformance/motion/corpus/spec-mask.json +773 -0
- package/conformance/motion/corpus/spec-masks.json +676 -0
- package/conformance/motion/corpus/spec-matte.json +390 -0
- package/conformance/motion/corpus/spec-metadata.json +1 -0
- package/conformance/motion/corpus/spec-path.json +177 -0
- package/conformance/motion/corpus/spec-pucker-bloat.json +179 -0
- package/conformance/motion/corpus/spec-rectangle.json +145 -0
- package/conformance/motion/corpus/spec-rounded-corners.json +187 -0
- package/conformance/motion/corpus/spec-slots.json +325 -0
- package/conformance/motion/corpus/spec-star.json +159 -0
- package/conformance/motion/corpus/spec-stroke.json +156 -0
- package/conformance/motion/corpus/spec-test-ellipse-xy-pos.json +141 -0
- package/conformance/motion/corpus/spec-test-gradient-fill.json +1 -0
- package/conformance/motion/corpus/spec-test-gradient-stroke.json +229 -0
- package/conformance/motion/corpus/spec-test-unknown-shape.json +63 -0
- package/conformance/motion/corpus/spec-time-remap.json +1090 -0
- package/conformance/motion/corpus/spec-time-stretch.json +594 -0
- package/conformance/motion/corpus/spec-transform.json +273 -0
- package/conformance/motion/corpus/spec-trim-path.json +209 -0
- package/conformance/motion/corpus/web-adrock.json +1 -0
- package/conformance/motion/corpus/web-bacon.json +1 -0
- package/conformance/motion/corpus/web-banner.json +1 -0
- package/conformance/motion/corpus/web-bodymovin.json +1 -0
- package/conformance/motion/corpus/web-dalek.json +1 -0
- package/conformance/motion/corpus/web-footage-data.json +1 -0
- package/conformance/motion/corpus/web-lights.json +1 -0
- package/conformance/motion/corpus/web-ripple.json +1 -0
- package/conformance/motion/corpus/web-starfish.json +1 -0
- package/conformance/motion/known-gaps.json +35 -0
- package/conformance/motion/parity/group-transforms-parenting@0.png +0 -0
- package/conformance/motion/parity/group-transforms-parenting@10.png +0 -0
- package/conformance/motion/parity/hidden-unknown-inactive@0.png +0 -0
- package/conformance/motion/parity/keyframes-transform@0.png +0 -0
- package/conformance/motion/parity/keyframes-transform@10.png +0 -0
- package/conformance/motion/parity/keyframes-transform@15.png +0 -0
- package/conformance/motion/parity/keyframes-transform@5.png +0 -0
- package/conformance/motion/parity/layer-opacity-blend@0.png +0 -0
- package/conformance/motion/parity/linear-gradient@0.png +0 -0
- package/conformance/motion/parity/masks-modes@0.png +0 -0
- package/conformance/motion/parity/matte-alpha@0.png +0 -0
- package/conformance/motion/parity/matte-luma@0.png +0 -0
- package/conformance/motion/parity/matte-parent-tp@0.png +0 -0
- package/conformance/motion/parity/path-evenodd@0.png +0 -0
- package/conformance/motion/parity/precomp-clip-offset@0.png +0 -0
- package/conformance/motion/parity/precomp-clip-offset@15.png +0 -0
- package/conformance/motion/parity/precomp-clip-offset@5.png +0 -0
- package/conformance/motion/parity/radial-gradient-highlight@0.png +0 -0
- package/conformance/motion/parity/rect-solid-fill@0.png +0 -0
- package/conformance/motion/parity/repeater@0.png +0 -0
- package/conformance/motion/parity/rounded-rect-ellipse@0.png +0 -0
- package/conformance/motion/parity/solid-and-image@0.png +0 -0
- package/conformance/motion/parity/split-position-skew@0.png +0 -0
- package/conformance/motion/parity/split-position-skew@10.png +0 -0
- package/conformance/motion/parity/star-polygon@0.png +0 -0
- package/conformance/motion/parity/stroke-caps-joins@0.png +0 -0
- package/conformance/motion/parity/stroke-dashes@0.png +0 -0
- package/conformance/motion/parity/stroke-dashes@10.png +0 -0
- package/conformance/motion/parity/time-remap@0.png +0 -0
- package/conformance/motion/parity/time-remap@10.png +0 -0
- package/conformance/motion/parity/time-remap@19.png +0 -0
- package/conformance/motion/parity/time-stretch@0.png +0 -0
- package/conformance/motion/parity/time-stretch@10.png +0 -0
- package/conformance/motion/parity/trim-individually@0.png +0 -0
- package/conformance/motion/parity/trim-path@0.png +0 -0
- package/conformance/motion/parity/trim-path@10.png +0 -0
- package/conformance/motion/refs/index.json +688 -0
- package/conformance/motion/refs/skottie-3d-parenting-nocamera@0.png +0 -0
- package/conformance/motion/refs/skottie-3d-parenting-nocamera@150.png +0 -0
- package/conformance/motion/refs/skottie-3d-parenting-nocamera@270.png +0 -0
- package/conformance/motion/refs/skottie-auto-orient-2@0.png +0 -0
- package/conformance/motion/refs/skottie-auto-orient-2@210.png +0 -0
- package/conformance/motion/refs/skottie-auto-orient-2@378.png +0 -0
- package/conformance/motion/refs/skottie-auto-orient@0.png +0 -0
- package/conformance/motion/refs/skottie-auto-orient@300.png +0 -0
- package/conformance/motion/refs/skottie-auto-orient@540.png +0 -0
- package/conformance/motion/refs/skottie-bezier-extranormal@0.png +0 -0
- package/conformance/motion/refs/skottie-bezier-extranormal@150.png +0 -0
- package/conformance/motion/refs/skottie-bezier-extranormal@270.png +0 -0
- package/conformance/motion/refs/skottie-blendmode-hardmix@0.png +0 -0
- package/conformance/motion/refs/skottie-blendmode-hardmix@150.png +0 -0
- package/conformance/motion/refs/skottie-blendmode-hardmix@270.png +0 -0
- package/conformance/motion/refs/skottie-chained-mattes@0.png +0 -0
- package/conformance/motion/refs/skottie-chained-mattes@300.png +0 -0
- package/conformance/motion/refs/skottie-chained-mattes@540.png +0 -0
- package/conformance/motion/refs/skottie-dropshadow-ramp@0.png +0 -0
- package/conformance/motion/refs/skottie-dropshadow-ramp@135.png +0 -0
- package/conformance/motion/refs/skottie-dropshadow-ramp@75.png +0 -0
- package/conformance/motion/refs/skottie-dropshadow-style@0.png +0 -0
- package/conformance/motion/refs/skottie-dropshadow-style@300.png +0 -0
- package/conformance/motion/refs/skottie-dropshadow-style@540.png +0 -0
- package/conformance/motion/refs/skottie-effects-transform@0.png +0 -0
- package/conformance/motion/refs/skottie-effects-transform@450.png +0 -0
- package/conformance/motion/refs/skottie-effects-transform@810.png +0 -0
- package/conformance/motion/refs/skottie-fill-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-fill-effect@300.png +0 -0
- package/conformance/motion/refs/skottie-fill-effect@540.png +0 -0
- package/conformance/motion/refs/skottie-fill-rule@0.png +0 -0
- package/conformance/motion/refs/skottie-fill-rule@150.png +0 -0
- package/conformance/motion/refs/skottie-fill-rule@270.png +0 -0
- package/conformance/motion/refs/skottie-gaussian-blur@0.png +0 -0
- package/conformance/motion/refs/skottie-gaussian-blur@150.png +0 -0
- package/conformance/motion/refs/skottie-gaussian-blur@270.png +0 -0
- package/conformance/motion/refs/skottie-gradient-opacity@0.png +0 -0
- package/conformance/motion/refs/skottie-gradient-opacity@150.png +0 -0
- package/conformance/motion/refs/skottie-gradient-opacity@270.png +0 -0
- package/conformance/motion/refs/skottie-gradient-radial-highlight@0.png +0 -0
- package/conformance/motion/refs/skottie-gradient-radial-highlight@135.png +0 -0
- package/conformance/motion/refs/skottie-gradient-radial-highlight@75.png +0 -0
- package/conformance/motion/refs/skottie-hidden-shapes-layers@0.png +0 -0
- package/conformance/motion/refs/skottie-hidden-shapes-layers@150.png +0 -0
- package/conformance/motion/refs/skottie-hidden-shapes-layers@270.png +0 -0
- package/conformance/motion/refs/skottie-huesaturation-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-huesaturation-effect@30.png +0 -0
- package/conformance/motion/refs/skottie-huesaturation-effect@54.png +0 -0
- package/conformance/motion/refs/skottie-invert-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-invert-effect@300.png +0 -0
- package/conformance/motion/refs/skottie-invert-effect@540.png +0 -0
- package/conformance/motion/refs/skottie-luma-matte@0.png +0 -0
- package/conformance/motion/refs/skottie-luma-matte@150.png +0 -0
- package/conformance/motion/refs/skottie-luma-matte@270.png +0 -0
- package/conformance/motion/refs/skottie-mask-feather@0.png +0 -0
- package/conformance/motion/refs/skottie-mask-feather@150.png +0 -0
- package/conformance/motion/refs/skottie-mask-feather@270.png +0 -0
- package/conformance/motion/refs/skottie-masking-opaque@0.png +0 -0
- package/conformance/motion/refs/skottie-masking-opaque@135.png +0 -0
- package/conformance/motion/refs/skottie-masking-opaque@75.png +0 -0
- package/conformance/motion/refs/skottie-masking-translucent@0.png +0 -0
- package/conformance/motion/refs/skottie-masking-translucent@135.png +0 -0
- package/conformance/motion/refs/skottie-masking-translucent@75.png +0 -0
- package/conformance/motion/refs/skottie-matte-blendmode@0.png +0 -0
- package/conformance/motion/refs/skottie-matte-blendmode@150.png +0 -0
- package/conformance/motion/refs/skottie-matte-blendmode@270.png +0 -0
- package/conformance/motion/refs/skottie-matte-nonsequential@0.png +0 -0
- package/conformance/motion/refs/skottie-matte-nonsequential@150.png +0 -0
- package/conformance/motion/refs/skottie-matte-nonsequential@270.png +0 -0
- package/conformance/motion/refs/skottie-matte-visible@0.png +0 -0
- package/conformance/motion/refs/skottie-matte-visible@150.png +0 -0
- package/conformance/motion/refs/skottie-matte-visible@270.png +0 -0
- package/conformance/motion/refs/skottie-mergepaths-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-mergepaths-effect@210.png +0 -0
- package/conformance/motion/refs/skottie-mergepaths-effect@378.png +0 -0
- package/conformance/motion/refs/skottie-motion-blur-mask@0.png +0 -0
- package/conformance/motion/refs/skottie-motion-blur-mask@150.png +0 -0
- package/conformance/motion/refs/skottie-motion-blur-mask@270.png +0 -0
- package/conformance/motion/refs/skottie-nested-animation@0.png +0 -0
- package/conformance/motion/refs/skottie-nested-animation@300.png +0 -0
- package/conformance/motion/refs/skottie-nested-animation@540.png +0 -0
- package/conformance/motion/refs/skottie-offsetpaths-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-offsetpaths-effect@150.png +0 -0
- package/conformance/motion/refs/skottie-offsetpaths-effect@270.png +0 -0
- package/conformance/motion/refs/skottie-phonehub-connecting@0.png +0 -0
- package/conformance/motion/refs/skottie-puckerbloat-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-puckerbloat-effect@210.png +0 -0
- package/conformance/motion/refs/skottie-puckerbloat-effect@378.png +0 -0
- package/conformance/motion/refs/skottie-repeater@0.png +0 -0
- package/conformance/motion/refs/skottie-repeater@300.png +0 -0
- package/conformance/motion/refs/skottie-repeater@540.png +0 -0
- package/conformance/motion/refs/skottie-sample-1@0.png +0 -0
- package/conformance/motion/refs/skottie-sample-1@100.png +0 -0
- package/conformance/motion/refs/skottie-sample-1@180.png +0 -0
- package/conformance/motion/refs/skottie-sample-search@0.png +0 -0
- package/conformance/motion/refs/skottie-sample-search@27.png +0 -0
- package/conformance/motion/refs/skottie-sample-search@48.png +0 -0
- package/conformance/motion/refs/skottie-spatial-supernormal@0.png +0 -0
- package/conformance/motion/refs/skottie-spatial-supernormal@200.png +0 -0
- package/conformance/motion/refs/skottie-spatial-supernormal@360.png +0 -0
- package/conformance/motion/refs/skottie-text-animator-1@0.png +0 -0
- package/conformance/motion/refs/skottie-text-animator-1@150.png +0 -0
- package/conformance/motion/refs/skottie-text-animator-1@270.png +0 -0
- package/conformance/motion/refs/skottie-text-fill-over-stroke@0.png +0 -0
- package/conformance/motion/refs/skottie-text-fill-over-stroke@210.png +0 -0
- package/conformance/motion/refs/skottie-text-fill-over-stroke@378.png +0 -0
- package/conformance/motion/refs/skottie-text-tracking@0.png +0 -0
- package/conformance/motion/refs/skottie-text-tracking@108.png +0 -0
- package/conformance/motion/refs/skottie-text-tracking@60.png +0 -0
- package/conformance/motion/refs/skottie-text-valign@0.png +0 -0
- package/conformance/motion/refs/skottie-text-valign@150.png +0 -0
- package/conformance/motion/refs/skottie-text-valign@270.png +0 -0
- package/conformance/motion/refs/skottie-time-reverse@0.png +0 -0
- package/conformance/motion/refs/skottie-time-reverse@300.png +0 -0
- package/conformance/motion/refs/skottie-time-reverse@540.png +0 -0
- package/conformance/motion/refs/skottie-transform-skew@0.png +0 -0
- package/conformance/motion/refs/skottie-transform-skew@300.png +0 -0
- package/conformance/motion/refs/skottie-transform-skew@540.png +0 -0
- package/conformance/motion/refs/skottie-trimpath-fill@0.png +0 -0
- package/conformance/motion/refs/skottie-trimpath-fill@300.png +0 -0
- package/conformance/motion/refs/skottie-trimpath-fill@540.png +0 -0
- package/conformance/motion/refs/skottie-trimpath-modes@0.png +0 -0
- package/conformance/motion/refs/skottie-trimpath-modes@300.png +0 -0
- package/conformance/motion/refs/skottie-trimpath-modes@540.png +0 -0
- package/conformance/motion/refs/skottie-tritone-effect@0.png +0 -0
- package/conformance/motion/refs/skottie-tritone-effect@300.png +0 -0
- package/conformance/motion/refs/skottie-tritone-effect@540.png +0 -0
- package/conformance/motion/refs/spec-blend-mode@0.png +0 -0
- package/conformance/motion/refs/spec-blend-mode@162.png +0 -0
- package/conformance/motion/refs/spec-blend-mode@90.png +0 -0
- package/conformance/motion/refs/spec-ellipse@0.png +0 -0
- package/conformance/motion/refs/spec-ellipse@162.png +0 -0
- package/conformance/motion/refs/spec-ellipse@90.png +0 -0
- package/conformance/motion/refs/spec-fill@0.png +0 -0
- package/conformance/motion/refs/spec-fill@162.png +0 -0
- package/conformance/motion/refs/spec-fill@90.png +0 -0
- package/conformance/motion/refs/spec-gradient-stroke@0.png +0 -0
- package/conformance/motion/refs/spec-gradient-stroke@162.png +0 -0
- package/conformance/motion/refs/spec-gradient-stroke@90.png +0 -0
- package/conformance/motion/refs/spec-gradient@0.png +0 -0
- package/conformance/motion/refs/spec-gradient@162.png +0 -0
- package/conformance/motion/refs/spec-gradient@90.png +0 -0
- package/conformance/motion/refs/spec-mask@0.png +0 -0
- package/conformance/motion/refs/spec-mask@300.png +0 -0
- package/conformance/motion/refs/spec-mask@540.png +0 -0
- package/conformance/motion/refs/spec-masks@0.png +0 -0
- package/conformance/motion/refs/spec-masks@135.png +0 -0
- package/conformance/motion/refs/spec-masks@75.png +0 -0
- package/conformance/motion/refs/spec-matte@0.png +0 -0
- package/conformance/motion/refs/spec-matte@162.png +0 -0
- package/conformance/motion/refs/spec-matte@90.png +0 -0
- package/conformance/motion/refs/spec-metadata@0.png +0 -0
- package/conformance/motion/refs/spec-metadata@162.png +0 -0
- package/conformance/motion/refs/spec-metadata@90.png +0 -0
- package/conformance/motion/refs/spec-path@0.png +0 -0
- package/conformance/motion/refs/spec-path@162.png +0 -0
- package/conformance/motion/refs/spec-path@90.png +0 -0
- package/conformance/motion/refs/spec-pucker-bloat@0.png +0 -0
- package/conformance/motion/refs/spec-pucker-bloat@162.png +0 -0
- package/conformance/motion/refs/spec-pucker-bloat@90.png +0 -0
- package/conformance/motion/refs/spec-rectangle@0.png +0 -0
- package/conformance/motion/refs/spec-rectangle@162.png +0 -0
- package/conformance/motion/refs/spec-rectangle@90.png +0 -0
- package/conformance/motion/refs/spec-rounded-corners@0.png +0 -0
- package/conformance/motion/refs/spec-rounded-corners@162.png +0 -0
- package/conformance/motion/refs/spec-rounded-corners@90.png +0 -0
- package/conformance/motion/refs/spec-slots@0.png +0 -0
- package/conformance/motion/refs/spec-slots@450.png +0 -0
- package/conformance/motion/refs/spec-slots@810.png +0 -0
- package/conformance/motion/refs/spec-star@0.png +0 -0
- package/conformance/motion/refs/spec-star@162.png +0 -0
- package/conformance/motion/refs/spec-star@90.png +0 -0
- package/conformance/motion/refs/spec-stroke@0.png +0 -0
- package/conformance/motion/refs/spec-stroke@162.png +0 -0
- package/conformance/motion/refs/spec-stroke@90.png +0 -0
- package/conformance/motion/refs/spec-test-ellipse-xy-pos@0.png +0 -0
- package/conformance/motion/refs/spec-test-ellipse-xy-pos@162.png +0 -0
- package/conformance/motion/refs/spec-test-ellipse-xy-pos@90.png +0 -0
- package/conformance/motion/refs/spec-test-gradient-fill@0.png +0 -0
- package/conformance/motion/refs/spec-test-gradient-fill@30.png +0 -0
- package/conformance/motion/refs/spec-test-gradient-fill@54.png +0 -0
- package/conformance/motion/refs/spec-test-gradient-stroke@0.png +0 -0
- package/conformance/motion/refs/spec-test-gradient-stroke@30.png +0 -0
- package/conformance/motion/refs/spec-test-gradient-stroke@54.png +0 -0
- package/conformance/motion/refs/spec-test-unknown-shape@0.png +0 -0
- package/conformance/motion/refs/spec-test-unknown-shape@162.png +0 -0
- package/conformance/motion/refs/spec-test-unknown-shape@90.png +0 -0
- package/conformance/motion/refs/spec-time-remap@0.png +0 -0
- package/conformance/motion/refs/spec-time-remap@300.png +0 -0
- package/conformance/motion/refs/spec-time-remap@540.png +0 -0
- package/conformance/motion/refs/spec-time-stretch@0.png +0 -0
- package/conformance/motion/refs/spec-time-stretch@300.png +0 -0
- package/conformance/motion/refs/spec-time-stretch@540.png +0 -0
- package/conformance/motion/refs/spec-transform@0.png +0 -0
- package/conformance/motion/refs/spec-transform@162.png +0 -0
- package/conformance/motion/refs/spec-transform@90.png +0 -0
- package/conformance/motion/refs/spec-trim-path@0.png +0 -0
- package/conformance/motion/refs/spec-trim-path@162.png +0 -0
- package/conformance/motion/refs/spec-trim-path@90.png +0 -0
- package/conformance/motion/refs/web-adrock@0.png +0 -0
- package/conformance/motion/refs/web-adrock@10.png +0 -0
- package/conformance/motion/refs/web-adrock@18.png +0 -0
- package/conformance/motion/refs/web-bacon@0.png +0 -0
- package/conformance/motion/refs/web-bacon@126.png +0 -0
- package/conformance/motion/refs/web-bacon@70.png +0 -0
- package/conformance/motion/refs/web-banner@0.png +0 -0
- package/conformance/motion/refs/web-banner@301.png +0 -0
- package/conformance/motion/refs/web-banner@542.png +0 -0
- package/conformance/motion/refs/web-bodymovin@0.png +0 -0
- package/conformance/motion/refs/web-bodymovin@51.png +0 -0
- package/conformance/motion/refs/web-bodymovin@92.png +0 -0
- package/conformance/motion/refs/web-dalek@0.png +0 -0
- package/conformance/motion/refs/web-dalek@145.png +0 -0
- package/conformance/motion/refs/web-dalek@261.png +0 -0
- package/conformance/motion/refs/web-footage-data@0.png +0 -0
- package/conformance/motion/refs/web-footage-data@180.png +0 -0
- package/conformance/motion/refs/web-footage-data@324.png +0 -0
- package/conformance/motion/refs/web-lights@0.png +0 -0
- package/conformance/motion/refs/web-lights@150.png +0 -0
- package/conformance/motion/refs/web-lights@270.png +0 -0
- package/conformance/motion/refs/web-ripple@0.png +0 -0
- package/conformance/motion/refs/web-ripple@180.png +0 -0
- package/conformance/motion/refs/web-ripple@324.png +0 -0
- package/conformance/motion/refs/web-starfish@0.png +0 -0
- package/conformance/motion/refs/web-starfish@150.png +0 -0
- package/conformance/motion/refs/web-starfish@270.png +0 -0
- package/conformance/motion/render-refs.ts +126 -0
- package/conformance/motion/report.json +1367 -0
- package/conformance/motion/web-parity-gaps.json +12 -0
- package/conformance/motion-parity-entry.ts +3 -0
- package/conformance/motion-parity.ts +101 -0
- package/dist/chunks/{index-gtk2gwsb.js → index-4xczxey5.js} +187 -40
- package/dist/chunks/{index-gtk2gwsb.js.map → index-4xczxey5.js.map} +7 -6
- package/dist/chunks/{index-62yzr94z.js → index-5sjj5p84.js} +270 -8
- package/dist/chunks/{index-62yzr94z.js.map → index-5sjj5p84.js.map} +2 -2
- package/dist/chunks/{index-fy7y2nz8.js → index-cvf7bbs5.js} +23 -2
- package/dist/chunks/{index-fy7y2nz8.js.map → index-cvf7bbs5.js.map} +1 -1
- package/dist/chunks/index-dgkf6yw5.js +48 -0
- package/dist/chunks/index-dgkf6yw5.js.map +10 -0
- package/dist/chunks/{index-5fmaa0xq.js → index-f9wkb6aq.js} +851 -36
- package/dist/chunks/{index-5fmaa0xq.js.map → index-f9wkb6aq.js.map} +2 -2
- package/dist/chunks/index-t2mwfbb6.js +1515 -0
- package/dist/chunks/index-t2mwfbb6.js.map +15 -0
- package/dist/chunks/{index-bg2jsgjq.js → index-vkn82srs.js} +479 -10
- package/dist/chunks/{index-bg2jsgjq.js.map → index-vkn82srs.js.map} +2 -2
- package/dist/chunks/wasm-ctcc3cma.js +424 -0
- package/dist/chunks/wasm-ctcc3cma.js.map +11 -0
- package/dist/conformance.js +10941 -563
- package/dist/conformance.js.map +2 -2
- package/dist/entries/prompt.js +2 -2
- package/dist/entries/schema.js +3 -3
- package/dist/host/index.js +20 -4
- package/dist/host/index.js.map +1 -1
- package/dist/index.js +364 -99
- package/dist/index.js.map +4 -4
- package/dist/types/src/catalog.generated.d.ts +71 -5
- package/dist/types/src/host/contract.d.ts +17 -0
- package/dist/types/src/host/exposes.d.ts +68 -0
- package/dist/types/src/host/index.d.ts +1 -0
- package/dist/types/src/host/package.d.ts +8 -0
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/layout.d.ts +2 -0
- package/dist/types/src/limits.d.ts +1 -0
- package/dist/types/src/motion/index.d.ts +1 -0
- package/dist/types/src/motion/server.d.ts +9 -0
- package/dist/types/src/motion/wasm.d.ts +11 -0
- package/dist/types/src/web/coerce.d.ts +3 -0
- package/dist/types/src/web/focus.d.ts +8 -0
- package/dist/types/src/web/index.d.ts +5 -2
- package/dist/types/src/web/primitives/carousel.d.ts +17 -0
- package/dist/types/src/web/primitives/dock.d.ts +5 -2
- package/dist/types/src/web/primitives/index.d.ts +5 -0
- package/dist/types/src/web/primitives/mosaic.d.ts +30 -0
- package/dist/types/src/web/primitives/motion-paint.d.ts +36 -0
- package/dist/types/src/web/primitives/motion.d.ts +162 -0
- package/dist/types/src/web/primitives/outline.d.ts +22 -0
- package/dist/types/src/web/primitives/zoomable-image.d.ts +158 -0
- package/dist/types/src/web/table.d.ts +8 -0
- package/dist/types/src/zoom.d.ts +128 -0
- package/dist/types/wasm/motion/bytes.d.ts +1 -0
- package/dist/web/index.js +171 -230
- package/dist/web/index.js.map +9 -10
- package/dist/web/primitives/index.js +641 -6
- package/dist/web/primitives/index.js.map +9 -5
- package/docs/components.generated.json +542 -5
- package/docs/package-format.md +56 -1
- package/docs/round-6-contract.md +110 -0
- package/docs/themes.generated.json +66 -2
- package/fixtures/bind-time.json +1468 -0
- package/fixtures/catalog-components.json +1026 -16
- package/fixtures/catalog-macros.json +1279 -157
- package/fixtures/conformance-baseline.json +48893 -47200
- package/fixtures/conformance-known.json +140 -134
- package/fixtures/host-router.json +539 -1
- package/fixtures/kitchen-sink.expanded.json +686 -1
- package/fixtures/kitchen-sink.json +102 -1
- package/fixtures/layout-geometry-round1.json +42 -42
- package/fixtures/motion-frames.json +2618 -0
- package/fixtures/motion-playback.json +528 -0
- package/fixtures/motion-state.json +722 -0
- package/fixtures/motion-validate.json +138 -0
- package/fixtures/primitive-specimens.json +4 -0
- package/fixtures/prompt-budget.json +16 -16
- package/fixtures/specimens.json +839 -21
- package/fixtures/theme-recipes.json +32808 -28396
- package/fixtures/theme-resolved.json +2114 -286
- package/fixtures/zoom.json +1382 -0
- package/generated/ExponentialUICatalog.generated.kt +21 -21
- package/generated/ExponentialUICatalog.generated.swift +21 -21
- package/generated/ExponentialUIThemes.generated.kt +7 -7
- package/generated/ExponentialUIThemes.generated.swift +7 -7
- package/generated/catalog.descriptions.generated.rs +1 -1
- package/generated/catalog.generated.rs +30 -30
- package/generated/catalog.themes.generated.rs +8 -8
- package/generated/core.descriptions.json +267 -5
- package/generated/core.runtime.json +275 -1
- package/package.json +1 -1
- package/themes/neutral.theme.json +460 -3
- package/dist/chunks/index-t6qz1770.js +0 -95
- package/dist/chunks/index-t6qz1770.js.map +0 -11
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"fixtures/catalog-components.json"
|
|
10
10
|
],
|
|
11
11
|
"unit": "case",
|
|
12
|
-
"cases":
|
|
12
|
+
"cases": 605,
|
|
13
13
|
"check": "Reduce the case's nested node with the core catalog: no issues. Paint it under the default theme: no crash, no Unknown placeholder, every visible node painted."
|
|
14
14
|
},
|
|
15
15
|
{
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"fixtures/catalog-macros.json"
|
|
19
19
|
],
|
|
20
20
|
"unit": "case",
|
|
21
|
-
"cases":
|
|
21
|
+
"cases": 315,
|
|
22
22
|
"check": "Expand the case: the tree equals `expanded` (JSON-equal, recipes included)."
|
|
23
23
|
},
|
|
24
24
|
{
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"fixtures/theme-recipes.json"
|
|
55
55
|
],
|
|
56
56
|
"unit": "case",
|
|
57
|
-
"cases":
|
|
57
|
+
"cases": 481,
|
|
58
58
|
"check": "Resolve the part's recipe for the case's theme, props, mode and states: the visual equals the fixture."
|
|
59
59
|
},
|
|
60
60
|
{
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"fixtures/host-router.json"
|
|
137
137
|
],
|
|
138
138
|
"unit": "package or flow",
|
|
139
|
-
"cases":
|
|
139
|
+
"cases": 29,
|
|
140
140
|
"check": "Validate each package; validate each record against its kind's schema; for each flow build ONE router with `extensionIds`, install `packages` (issues = `installIssues`), route every step: the ops equal `expected`."
|
|
141
141
|
},
|
|
142
142
|
{
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"fixtures/bind-time.json"
|
|
146
146
|
],
|
|
147
147
|
"unit": "case",
|
|
148
|
-
"cases":
|
|
148
|
+
"cases": 72,
|
|
149
149
|
"check": "Expand the input; for every dataset run the bind pass: the bound tree, every `set` press and the per-row slot cells equal the fixture (reducer `issues` too for `extra`)."
|
|
150
150
|
},
|
|
151
151
|
{
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// EXP-1602: assembles the eui-motion conformance corpus (corpus/*.json +
|
|
2
|
+
// corpus/images/) from upstream checkouts and writes corpus/SOURCES.md.
|
|
3
|
+
//
|
|
4
|
+
// bun run conformance/motion/build-corpus.ts <lottie-spec> <lottie-web> <skia>
|
|
5
|
+
//
|
|
6
|
+
// <lottie-spec> = a checkout of github.com/lottie/lottie-spec, <lottie-web> =
|
|
7
|
+
// github.com/airbnb/lottie-web, <skia> = skia.googlesource.com/skia (sparse:
|
|
8
|
+
// resources/skottie). Files carrying expressions (`"x"` strings on animated
|
|
9
|
+
// properties) are STRIPPED of them (the engine refuses expressions by design;
|
|
10
|
+
// the references are rendered from the same stripped file). Files > 2 MB are
|
|
11
|
+
// skipped. Rerun render-refs.ts afterwards.
|
|
12
|
+
|
|
13
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs"
|
|
14
|
+
import { execFileSync } from "node:child_process"
|
|
15
|
+
import { join } from "node:path"
|
|
16
|
+
|
|
17
|
+
const [specRoot, webRoot, skiaRoot] = process.argv.slice(2)
|
|
18
|
+
if (!specRoot || !webRoot || !skiaRoot) throw new Error(`usage: build-corpus.ts <lottie-spec> <lottie-web> <skia>`)
|
|
19
|
+
|
|
20
|
+
type Source = `spec` | `web` | `skia`
|
|
21
|
+
interface Pick {
|
|
22
|
+
source: Source
|
|
23
|
+
/** Path inside the source checkout. */
|
|
24
|
+
path: string
|
|
25
|
+
/** The corpus name (without `.json`). */
|
|
26
|
+
name: string
|
|
27
|
+
/** What the file exercises. */
|
|
28
|
+
covers: string
|
|
29
|
+
/** Text layers: `glyphs` (ships `chars`: comparable), `fonts` (system fonts: not comparable). */
|
|
30
|
+
text?: `glyphs` | `fonts`
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const spec = (file: string, covers: string): Pick => ({ source: `spec`, path: `docs/static/examples/${file}.json`, name: `spec-${file.replace(/_/g, `-`)}`, covers })
|
|
34
|
+
const skia = (file: string, covers: string, text?: Pick[`text`]): Pick => ({ source: `skia`, path: `resources/skottie/${file}.json`, name: file.replace(/^skottie[-_]/, `skottie-`).replace(/_/g, `-`), covers, ...(text ? { text } : {}) })
|
|
35
|
+
const web = (file: string, covers: string, text?: Pick[`text`]): Pick => ({ source: `web`, path: `test/animations/${file}.json`, name: `web-${file.replace(/[/_]/g, `-`)}`, covers, ...(text ? { text } : {}) })
|
|
36
|
+
|
|
37
|
+
const PICKS: Pick[] = [
|
|
38
|
+
spec(`blend-mode`, `blend modes, star, ellipse, rect`),
|
|
39
|
+
spec(`ellipse`, `ellipse, stroke`),
|
|
40
|
+
spec(`fill`, `path, fill opacity`),
|
|
41
|
+
spec(`gradient`, `linear + radial gradient fills, animated stops`),
|
|
42
|
+
spec(`gradient-stroke`, `gradient strokes, dashes`),
|
|
43
|
+
spec(`mask`, `additive mask, dashes`),
|
|
44
|
+
spec(`masks`, `mask on a solid layer, dashes`),
|
|
45
|
+
spec(`matte`, `alpha matte`),
|
|
46
|
+
spec(`metadata`, `rect, stroke`),
|
|
47
|
+
spec(`path`, `animated path`),
|
|
48
|
+
spec(`pucker_bloat`, `pucker/bloat modifier`),
|
|
49
|
+
spec(`rectangle`, `rounded rect`),
|
|
50
|
+
spec(`rounded_corners`, `round corners modifier`),
|
|
51
|
+
spec(`slots`, `slots (sid) with their defaults`),
|
|
52
|
+
spec(`star`, `star / polygon`),
|
|
53
|
+
spec(`stroke`, `stroke caps, joins, dashes, trim`),
|
|
54
|
+
spec(`time_remap`, `layer time remap, precomp`),
|
|
55
|
+
spec(`time_stretch`, `time stretch, precomp`),
|
|
56
|
+
spec(`transform`, `transform (anchor, position, scale, rotation, skew, opacity)`),
|
|
57
|
+
spec(`trim_path`, `trim path`),
|
|
58
|
+
{ source: `spec`, path: `tests/animations/valid/gradient-stroke.json`, name: `spec-test-gradient-stroke`, covers: `gradient stroke` },
|
|
59
|
+
{ source: `spec`, path: `tests/animations/valid/gradient-fill.json`, name: `spec-test-gradient-fill`, covers: `gradient fill (expression stripped)` },
|
|
60
|
+
{ source: `spec`, path: `tests/animations/valid/ellipse-xy-pos.json`, name: `spec-test-ellipse-xy-pos`, covers: `split position (x/y)` },
|
|
61
|
+
{ source: `spec`, path: `tests/animations/valid/unknown-shape.json`, name: `spec-test-unknown-shape`, covers: `unknown shape type is skipped` },
|
|
62
|
+
web(`adrock`, `real world: legacy keyframes, merge paths, masks, parenting, precomps`),
|
|
63
|
+
web(`bacon`, `real world: legacy keyframes, merge paths, parenting`),
|
|
64
|
+
web(`banner`, `real world: text (glyphs), masks, trim, dashes`, `glyphs`),
|
|
65
|
+
web(`dalek`, `real world: masks, solids, nulls, parenting`),
|
|
66
|
+
web(`lights`, `slider effects, parenting (expressions stripped)`),
|
|
67
|
+
web(`ripple`, `gradient strokes, time remap (expressions stripped)`),
|
|
68
|
+
web(`starfish`, `masks, time remap (expressions stripped)`),
|
|
69
|
+
web(`bodymovin`, `real world, 1 MB: masks, merge paths, trim`),
|
|
70
|
+
web(`footage/data`, `image layers (external), text (glyphs), data footage (expressions stripped)`, `glyphs`),
|
|
71
|
+
skia(`skottie-auto-orient`, `auto-orient along a motion path`),
|
|
72
|
+
skia(`skottie-auto-orient-2`, `auto-orient, parenting`),
|
|
73
|
+
skia(`skottie-bezier-extranormal`, `spatial bezier tangents`),
|
|
74
|
+
skia(`skottie-spatial-supernormal`, `spatial bezier tangents, trim`),
|
|
75
|
+
skia(`skottie-transform-skew`, `skew`),
|
|
76
|
+
skia(`skottie-hidden-shapes-layers`, `hidden shapes and layers (hd)`),
|
|
77
|
+
skia(`skottie_fill_rule`, `even-odd fill rule`),
|
|
78
|
+
skia(`skottie-gradient-opacity`, `gradient stops with opacity`),
|
|
79
|
+
skia(`skottie-gradient-radial-highlight`, `radial gradient highlight (focal point)`),
|
|
80
|
+
skia(`skottie-repeater`, `repeater`),
|
|
81
|
+
skia(`skottie-mergepaths-effect`, `merge paths modes`),
|
|
82
|
+
skia(`skottie-offsetpaths-effect`, `offset path modifier`),
|
|
83
|
+
skia(`skottie-puckerbloat-effect`, `pucker/bloat`),
|
|
84
|
+
skia(`skottie-trimpath-modes`, `trim simultaneous / individual`),
|
|
85
|
+
skia(`skottie-trimpath-fill`, `trim applied to fills, dashes`),
|
|
86
|
+
skia(`skottie-masking-opaque`, `masks: add, subtract, intersect, lighten, darken, difference, inverted`),
|
|
87
|
+
skia(`skottie-masking-translucent`, `masks of every mode with opacity`),
|
|
88
|
+
skia(`skottie-mask-feather`, `mask feather`),
|
|
89
|
+
skia(`skottie-motion-blur-mask`, `mask feather on a solid`),
|
|
90
|
+
skia(`skottie-luma-matte`, `luma matte`),
|
|
91
|
+
skia(`skottie-chained-mattes`, `inverted alpha + inverted luma mattes, chained`),
|
|
92
|
+
skia(`skottie-matte-blendmode`, `matte with a multiply layer`),
|
|
93
|
+
skia(`skottie-matte-nonsequential`, `mattes with tp (non-adjacent matte source)`),
|
|
94
|
+
skia(`skottie-matte-visible`, `visible matte source`),
|
|
95
|
+
skia(`skottie-blendmode-hardmix`, `blend mode 17 (hard mix, not W3C)`),
|
|
96
|
+
skia(`skottie-nested-animation`, `nested precomps`),
|
|
97
|
+
skia(`skottie-time-reverse`, `negative time stretch`),
|
|
98
|
+
skia(`skottie-fill-effect`, `fill effect (ef 21)`),
|
|
99
|
+
skia(`skottie-tritone-effect`, `tritone effect (ef 23)`),
|
|
100
|
+
skia(`skottie-dropshadow-ramp`, `drop shadow effect (ef 25)`),
|
|
101
|
+
skia(`skottie-gaussian-blur`, `gaussian blur (ef 29), text (system font)`, `fonts`),
|
|
102
|
+
skia(`skottie-invert-effect`, `invert effect`),
|
|
103
|
+
skia(`skottie-huesaturation-effect`, `hue/saturation effect`),
|
|
104
|
+
skia(`skottie-dropshadow-style`, `drop shadow layer style`),
|
|
105
|
+
skia(`skottie-effects-transform`, `transform effect, image layer`),
|
|
106
|
+
skia(`skottie_sample_1`, `real world strokes`),
|
|
107
|
+
skia(`skottie_sample_search`, `real world: trim, strokes`),
|
|
108
|
+
skia(`skottie-phonehub-connecting`, `real world: Chrome OS Phone Hub`),
|
|
109
|
+
skia(`skottie-text-fill-over-stroke`, `text: fill over stroke (glyphs)`, `glyphs`),
|
|
110
|
+
skia(`skottie-text-animator-1`, `text animators (glyphs)`, `glyphs`),
|
|
111
|
+
skia(`skottie-text-tracking`, `text tracking (system font)`, `fonts`),
|
|
112
|
+
skia(`skottie-text-valign`, `text paragraph box, alignment (system font)`, `fonts`),
|
|
113
|
+
skia(`skottie-3d-parenting-nocamera`, `3D layers without a camera`),
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
const LICENCE: Record<Source, string> = {
|
|
117
|
+
spec: `Community Specification License 1.0 (lottie-spec; §1.1 grants reproduction and distribution, §1.2 requires attribution: see the header)`,
|
|
118
|
+
web: `MIT (lottie-web, Copyright (c) 2015 Bodymovin)`,
|
|
119
|
+
skia: `BSD-3-Clause (Skia, Copyright (c) 2011 Google Inc.)`,
|
|
120
|
+
}
|
|
121
|
+
const ROOT: Record<Source, string> = { spec: specRoot, web: webRoot, skia: skiaRoot }
|
|
122
|
+
const URL: Record<Source, string> = {
|
|
123
|
+
spec: `https://github.com/lottie/lottie-spec`,
|
|
124
|
+
web: `https://github.com/airbnb/lottie-web`,
|
|
125
|
+
skia: `https://skia.googlesource.com/skia`,
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const rev = (dir: string): string => {
|
|
129
|
+
try {
|
|
130
|
+
return execFileSync(`git`, [`-C`, dir, `rev-parse`, `HEAD`], { encoding: `utf8` }).trim()
|
|
131
|
+
} catch {
|
|
132
|
+
return `unknown`
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Drop `"x"` (expression) strings from animated properties; returns the count. */
|
|
137
|
+
function stripExpressions(v: unknown): number {
|
|
138
|
+
let n = 0
|
|
139
|
+
if (Array.isArray(v)) for (const x of v) n += stripExpressions(x)
|
|
140
|
+
else if (v && typeof v === `object`) {
|
|
141
|
+
const o = v as Record<string, unknown>
|
|
142
|
+
if (`k` in o && typeof o.x === `string`) {
|
|
143
|
+
delete o.x
|
|
144
|
+
n++
|
|
145
|
+
}
|
|
146
|
+
for (const k of Object.keys(o)) n += stripExpressions(o[k])
|
|
147
|
+
}
|
|
148
|
+
return n
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const here = import.meta.dir
|
|
152
|
+
const corpus = join(here, `corpus`)
|
|
153
|
+
rmSync(corpus, { recursive: true, force: true })
|
|
154
|
+
mkdirSync(join(corpus, `images`), { recursive: true })
|
|
155
|
+
|
|
156
|
+
const rows: string[] = []
|
|
157
|
+
for (const p of PICKS) {
|
|
158
|
+
const src = join(ROOT[p.source], p.path)
|
|
159
|
+
if (statSync(src).size > 2 * 1024 * 1024) throw new Error(`${p.path}: over 2 MB`)
|
|
160
|
+
const text = readFileSync(src, `utf8`)
|
|
161
|
+
const json = JSON.parse(text)
|
|
162
|
+
const stripped = stripExpressions(json)
|
|
163
|
+
// lottie-web needs `v` (it compares versions to upgrade old files); the
|
|
164
|
+
// spec makes it optional. Files without one get "5.7.0".
|
|
165
|
+
// Likewise layers without `st` (spec default 0) are never shown by lottie-web.
|
|
166
|
+
let versioned = typeof json.v !== `string`
|
|
167
|
+
if (versioned) json.v = `5.7.0`
|
|
168
|
+
for (const list of [json.layers ?? [], ...(json.assets ?? []).map((a: { layers?: unknown[] }) => a.layers ?? [])])
|
|
169
|
+
for (const l of list as Record<string, unknown>[])
|
|
170
|
+
if (l.st === undefined) {
|
|
171
|
+
l.st = 0
|
|
172
|
+
versioned = true
|
|
173
|
+
}
|
|
174
|
+
writeFileSync(join(corpus, `${p.name}.json`), stripped || versioned ? JSON.stringify(json) : text)
|
|
175
|
+
// External images: copied next to the file (`u` + `p`, relative).
|
|
176
|
+
for (const a of json.assets ?? []) {
|
|
177
|
+
if (a.layers || !a.p || a.e === 1 || String(a.p).startsWith(`data:`)) continue
|
|
178
|
+
const from = join(ROOT[p.source], p.path, `..`, a.u ?? ``, a.p)
|
|
179
|
+
if (!existsSync(from)) {
|
|
180
|
+
console.warn(`${p.name}: missing image ${from}`)
|
|
181
|
+
continue
|
|
182
|
+
}
|
|
183
|
+
mkdirSync(join(corpus, a.u ?? ``), { recursive: true })
|
|
184
|
+
copyFileSync(from, join(corpus, a.u ?? ``, a.p))
|
|
185
|
+
}
|
|
186
|
+
const notes = [p.covers, stripped ? `**${stripped} expression(s) stripped**` : ``, versioned ? `**lottie-web defaults added** (\`"v"\`, layer \`"st": 0\`)` : ``, p.text === `fonts` ? `text with system fonts: NOT comparable` : p.text === `glyphs` ? `text ships glyphs (chars): comparable` : ``].filter(Boolean).join(`; `)
|
|
187
|
+
rows.push(`| \`${p.name}.json\` | ${p.source} \`${p.path}\` | ${p.source === `spec` ? `CSL-1.0` : p.source === `web` ? `MIT` : `BSD-3-Clause`} | ${notes} |`)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const md = `# eui-motion conformance corpus: sources
|
|
191
|
+
|
|
192
|
+
Generated by \`build-corpus.ts\` (do not edit by hand). Every file is redistributed
|
|
193
|
+
under its upstream licence:
|
|
194
|
+
|
|
195
|
+
| source | revision | licence |
|
|
196
|
+
|---|---|---|
|
|
197
|
+
${(Object.keys(ROOT) as Source[]).map((s) => `| ${s}: ${URL[s]} | \`${rev(ROOT[s])}\` | ${LICENCE[s]} |`).join(`\n`)}
|
|
198
|
+
|
|
199
|
+
**Attribution (Community Specification License 1.0 §1.2):** the \`spec-*\` files are
|
|
200
|
+
examples and test animations of the *Lottie Animation Format* specification,
|
|
201
|
+
version 1.0, by the Lottie Animation Community (LAC) Working Group, retrieved from
|
|
202
|
+
https://github.com/lottie/lottie-spec (\`docs/static/examples\`, \`tests/animations\`)
|
|
203
|
+
at the revision above. The licence's §1.1 grants everyone a copyright licence "to
|
|
204
|
+
reproduce, prepare derivative works of, publicly display, publicly perform, and
|
|
205
|
+
distribute" the materials; the stripped variants below are such derivative works.
|
|
206
|
+
|
|
207
|
+
**MIT (lottie-web):** Copyright (c) 2015 Bodymovin. Permission is hereby granted,
|
|
208
|
+
free of charge, to any person obtaining a copy of this software and associated
|
|
209
|
+
documentation files, to deal in the Software without restriction (full text:
|
|
210
|
+
https://github.com/airbnb/lottie-web/blob/master/LICENSE.md).
|
|
211
|
+
|
|
212
|
+
**BSD-3-Clause (Skia):** Copyright (c) 2011 Google Inc. All rights reserved.
|
|
213
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
214
|
+
are permitted provided the copyright notice, the conditions and the disclaimer
|
|
215
|
+
are retained (full text: https://skia.googlesource.com/skia/+/main/LICENSE).
|
|
216
|
+
\`images/triangle.png\` is Skia's (\`resources/skottie/images\`); \`images/img_*.jpg\`
|
|
217
|
+
and \`images/footage_0.json\` are lottie-web's (\`test/animations/footage/images\`).
|
|
218
|
+
|
|
219
|
+
Two edits, both applied before rendering the references, so both sides see
|
|
220
|
+
the same file: the spec's defaults lottie-web does not apply are written out
|
|
221
|
+
(\`"v": "5.7.0"\` where the version is missing, \`"st": 0\` on layers without a
|
|
222
|
+
start time; lottie-web hides such layers), and expressions are removed. Expressions: the engine refuses them by design, so files that carried
|
|
223
|
+
\`"x"\` expression strings are stored with those strings removed (marked below);
|
|
224
|
+
the references are rendered from the stored (stripped) file, so both sides
|
|
225
|
+
see the same animation.
|
|
226
|
+
|
|
227
|
+
| file | from | licence | covers / notes |
|
|
228
|
+
|---|---|---|---|
|
|
229
|
+
${rows.join(`\n`)}
|
|
230
|
+
`
|
|
231
|
+
writeFileSync(join(corpus, `SOURCES.md`), md)
|
|
232
|
+
console.log(`${PICKS.length} files`)
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# eui-motion conformance corpus: sources
|
|
2
|
+
|
|
3
|
+
Generated by `build-corpus.ts` (do not edit by hand). Every file is redistributed
|
|
4
|
+
under its upstream licence:
|
|
5
|
+
|
|
6
|
+
| source | revision | licence |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| spec: https://github.com/lottie/lottie-spec | `4b55957472f8718e34e9c1298f0e8f021b6c597f` | Community Specification License 1.0 (lottie-spec; §1.1 grants reproduction and distribution, §1.2 requires attribution: see the header) |
|
|
9
|
+
| web: https://github.com/airbnb/lottie-web | `bede03d25d232826e0c9dca1733d542d8a7754fb` | MIT (lottie-web, Copyright (c) 2015 Bodymovin) |
|
|
10
|
+
| skia: https://skia.googlesource.com/skia | `e43478a2f9f8c7f68d6c7e2ca79441dac7df9b75` | BSD-3-Clause (Skia, Copyright (c) 2011 Google Inc.) |
|
|
11
|
+
|
|
12
|
+
**Attribution (Community Specification License 1.0 §1.2):** the `spec-*` files are
|
|
13
|
+
examples and test animations of the *Lottie Animation Format* specification,
|
|
14
|
+
version 1.0, by the Lottie Animation Community (LAC) Working Group, retrieved from
|
|
15
|
+
https://github.com/lottie/lottie-spec (`docs/static/examples`, `tests/animations`)
|
|
16
|
+
at the revision above. The licence's §1.1 grants everyone a copyright licence "to
|
|
17
|
+
reproduce, prepare derivative works of, publicly display, publicly perform, and
|
|
18
|
+
distribute" the materials; the stripped variants below are such derivative works.
|
|
19
|
+
|
|
20
|
+
**MIT (lottie-web):** Copyright (c) 2015 Bodymovin. Permission is hereby granted,
|
|
21
|
+
free of charge, to any person obtaining a copy of this software and associated
|
|
22
|
+
documentation files, to deal in the Software without restriction (full text:
|
|
23
|
+
https://github.com/airbnb/lottie-web/blob/master/LICENSE.md).
|
|
24
|
+
|
|
25
|
+
**BSD-3-Clause (Skia):** Copyright (c) 2011 Google Inc. All rights reserved.
|
|
26
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
27
|
+
are permitted provided the copyright notice, the conditions and the disclaimer
|
|
28
|
+
are retained (full text: https://skia.googlesource.com/skia/+/main/LICENSE).
|
|
29
|
+
`images/triangle.png` is Skia's (`resources/skottie/images`); `images/img_*.jpg`
|
|
30
|
+
and `images/footage_0.json` are lottie-web's (`test/animations/footage/images`).
|
|
31
|
+
|
|
32
|
+
Two edits, both applied before rendering the references, so both sides see
|
|
33
|
+
the same file: the spec's defaults lottie-web does not apply are written out
|
|
34
|
+
(`"v": "5.7.0"` where the version is missing, `"st": 0` on layers without a
|
|
35
|
+
start time; lottie-web hides such layers), and expressions are removed. Expressions: the engine refuses them by design, so files that carried
|
|
36
|
+
`"x"` expression strings are stored with those strings removed (marked below);
|
|
37
|
+
the references are rendered from the stored (stripped) file, so both sides
|
|
38
|
+
see the same animation.
|
|
39
|
+
|
|
40
|
+
| file | from | licence | covers / notes |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| `spec-blend-mode.json` | spec `docs/static/examples/blend-mode.json` | CSL-1.0 | blend modes, star, ellipse, rect |
|
|
43
|
+
| `spec-ellipse.json` | spec `docs/static/examples/ellipse.json` | CSL-1.0 | ellipse, stroke |
|
|
44
|
+
| `spec-fill.json` | spec `docs/static/examples/fill.json` | CSL-1.0 | path, fill opacity |
|
|
45
|
+
| `spec-gradient.json` | spec `docs/static/examples/gradient.json` | CSL-1.0 | linear + radial gradient fills, animated stops |
|
|
46
|
+
| `spec-gradient-stroke.json` | spec `docs/static/examples/gradient-stroke.json` | CSL-1.0 | gradient strokes, dashes |
|
|
47
|
+
| `spec-mask.json` | spec `docs/static/examples/mask.json` | CSL-1.0 | additive mask, dashes |
|
|
48
|
+
| `spec-masks.json` | spec `docs/static/examples/masks.json` | CSL-1.0 | mask on a solid layer, dashes |
|
|
49
|
+
| `spec-matte.json` | spec `docs/static/examples/matte.json` | CSL-1.0 | alpha matte |
|
|
50
|
+
| `spec-metadata.json` | spec `docs/static/examples/metadata.json` | CSL-1.0 | rect, stroke; **lottie-web defaults added** (`"v"`, layer `"st": 0`) |
|
|
51
|
+
| `spec-path.json` | spec `docs/static/examples/path.json` | CSL-1.0 | animated path |
|
|
52
|
+
| `spec-pucker-bloat.json` | spec `docs/static/examples/pucker_bloat.json` | CSL-1.0 | pucker/bloat modifier |
|
|
53
|
+
| `spec-rectangle.json` | spec `docs/static/examples/rectangle.json` | CSL-1.0 | rounded rect |
|
|
54
|
+
| `spec-rounded-corners.json` | spec `docs/static/examples/rounded_corners.json` | CSL-1.0 | round corners modifier |
|
|
55
|
+
| `spec-slots.json` | spec `docs/static/examples/slots.json` | CSL-1.0 | slots (sid) with their defaults |
|
|
56
|
+
| `spec-star.json` | spec `docs/static/examples/star.json` | CSL-1.0 | star / polygon |
|
|
57
|
+
| `spec-stroke.json` | spec `docs/static/examples/stroke.json` | CSL-1.0 | stroke caps, joins, dashes, trim |
|
|
58
|
+
| `spec-time-remap.json` | spec `docs/static/examples/time_remap.json` | CSL-1.0 | layer time remap, precomp |
|
|
59
|
+
| `spec-time-stretch.json` | spec `docs/static/examples/time_stretch.json` | CSL-1.0 | time stretch, precomp |
|
|
60
|
+
| `spec-transform.json` | spec `docs/static/examples/transform.json` | CSL-1.0 | transform (anchor, position, scale, rotation, skew, opacity) |
|
|
61
|
+
| `spec-trim-path.json` | spec `docs/static/examples/trim_path.json` | CSL-1.0 | trim path |
|
|
62
|
+
| `spec-test-gradient-stroke.json` | spec `tests/animations/valid/gradient-stroke.json` | CSL-1.0 | gradient stroke |
|
|
63
|
+
| `spec-test-gradient-fill.json` | spec `tests/animations/valid/gradient-fill.json` | CSL-1.0 | gradient fill (expression stripped); **1 expression(s) stripped** |
|
|
64
|
+
| `spec-test-ellipse-xy-pos.json` | spec `tests/animations/valid/ellipse-xy-pos.json` | CSL-1.0 | split position (x/y) |
|
|
65
|
+
| `spec-test-unknown-shape.json` | spec `tests/animations/valid/unknown-shape.json` | CSL-1.0 | unknown shape type is skipped |
|
|
66
|
+
| `web-adrock.json` | web `test/animations/adrock.json` | MIT | real world: legacy keyframes, merge paths, masks, parenting, precomps |
|
|
67
|
+
| `web-bacon.json` | web `test/animations/bacon.json` | MIT | real world: legacy keyframes, merge paths, parenting |
|
|
68
|
+
| `web-banner.json` | web `test/animations/banner.json` | MIT | real world: text (glyphs), masks, trim, dashes; text ships glyphs (chars): comparable |
|
|
69
|
+
| `web-dalek.json` | web `test/animations/dalek.json` | MIT | real world: masks, solids, nulls, parenting |
|
|
70
|
+
| `web-lights.json` | web `test/animations/lights.json` | MIT | slider effects, parenting (expressions stripped); **20 expression(s) stripped** |
|
|
71
|
+
| `web-ripple.json` | web `test/animations/ripple.json` | MIT | gradient strokes, time remap (expressions stripped); **6 expression(s) stripped** |
|
|
72
|
+
| `web-starfish.json` | web `test/animations/starfish.json` | MIT | masks, time remap (expressions stripped); **26 expression(s) stripped** |
|
|
73
|
+
| `web-bodymovin.json` | web `test/animations/bodymovin.json` | MIT | real world, 1 MB: masks, merge paths, trim |
|
|
74
|
+
| `web-footage-data.json` | web `test/animations/footage/data.json` | MIT | image layers (external), text (glyphs), data footage (expressions stripped); **3 expression(s) stripped**; text ships glyphs (chars): comparable |
|
|
75
|
+
| `skottie-auto-orient.json` | skia `resources/skottie/skottie-auto-orient.json` | BSD-3-Clause | auto-orient along a motion path |
|
|
76
|
+
| `skottie-auto-orient-2.json` | skia `resources/skottie/skottie-auto-orient-2.json` | BSD-3-Clause | auto-orient, parenting |
|
|
77
|
+
| `skottie-bezier-extranormal.json` | skia `resources/skottie/skottie-bezier-extranormal.json` | BSD-3-Clause | spatial bezier tangents |
|
|
78
|
+
| `skottie-spatial-supernormal.json` | skia `resources/skottie/skottie-spatial-supernormal.json` | BSD-3-Clause | spatial bezier tangents, trim |
|
|
79
|
+
| `skottie-transform-skew.json` | skia `resources/skottie/skottie-transform-skew.json` | BSD-3-Clause | skew |
|
|
80
|
+
| `skottie-hidden-shapes-layers.json` | skia `resources/skottie/skottie-hidden-shapes-layers.json` | BSD-3-Clause | hidden shapes and layers (hd) |
|
|
81
|
+
| `skottie-fill-rule.json` | skia `resources/skottie/skottie_fill_rule.json` | BSD-3-Clause | even-odd fill rule |
|
|
82
|
+
| `skottie-gradient-opacity.json` | skia `resources/skottie/skottie-gradient-opacity.json` | BSD-3-Clause | gradient stops with opacity |
|
|
83
|
+
| `skottie-gradient-radial-highlight.json` | skia `resources/skottie/skottie-gradient-radial-highlight.json` | BSD-3-Clause | radial gradient highlight (focal point) |
|
|
84
|
+
| `skottie-repeater.json` | skia `resources/skottie/skottie-repeater.json` | BSD-3-Clause | repeater |
|
|
85
|
+
| `skottie-mergepaths-effect.json` | skia `resources/skottie/skottie-mergepaths-effect.json` | BSD-3-Clause | merge paths modes |
|
|
86
|
+
| `skottie-offsetpaths-effect.json` | skia `resources/skottie/skottie-offsetpaths-effect.json` | BSD-3-Clause | offset path modifier |
|
|
87
|
+
| `skottie-puckerbloat-effect.json` | skia `resources/skottie/skottie-puckerbloat-effect.json` | BSD-3-Clause | pucker/bloat |
|
|
88
|
+
| `skottie-trimpath-modes.json` | skia `resources/skottie/skottie-trimpath-modes.json` | BSD-3-Clause | trim simultaneous / individual |
|
|
89
|
+
| `skottie-trimpath-fill.json` | skia `resources/skottie/skottie-trimpath-fill.json` | BSD-3-Clause | trim applied to fills, dashes |
|
|
90
|
+
| `skottie-masking-opaque.json` | skia `resources/skottie/skottie-masking-opaque.json` | BSD-3-Clause | masks: add, subtract, intersect, lighten, darken, difference, inverted |
|
|
91
|
+
| `skottie-masking-translucent.json` | skia `resources/skottie/skottie-masking-translucent.json` | BSD-3-Clause | masks of every mode with opacity |
|
|
92
|
+
| `skottie-mask-feather.json` | skia `resources/skottie/skottie-mask-feather.json` | BSD-3-Clause | mask feather |
|
|
93
|
+
| `skottie-motion-blur-mask.json` | skia `resources/skottie/skottie-motion-blur-mask.json` | BSD-3-Clause | mask feather on a solid |
|
|
94
|
+
| `skottie-luma-matte.json` | skia `resources/skottie/skottie-luma-matte.json` | BSD-3-Clause | luma matte |
|
|
95
|
+
| `skottie-chained-mattes.json` | skia `resources/skottie/skottie-chained-mattes.json` | BSD-3-Clause | inverted alpha + inverted luma mattes, chained |
|
|
96
|
+
| `skottie-matte-blendmode.json` | skia `resources/skottie/skottie-matte-blendmode.json` | BSD-3-Clause | matte with a multiply layer |
|
|
97
|
+
| `skottie-matte-nonsequential.json` | skia `resources/skottie/skottie-matte-nonsequential.json` | BSD-3-Clause | mattes with tp (non-adjacent matte source) |
|
|
98
|
+
| `skottie-matte-visible.json` | skia `resources/skottie/skottie-matte-visible.json` | BSD-3-Clause | visible matte source |
|
|
99
|
+
| `skottie-blendmode-hardmix.json` | skia `resources/skottie/skottie-blendmode-hardmix.json` | BSD-3-Clause | blend mode 17 (hard mix, not W3C) |
|
|
100
|
+
| `skottie-nested-animation.json` | skia `resources/skottie/skottie-nested-animation.json` | BSD-3-Clause | nested precomps |
|
|
101
|
+
| `skottie-time-reverse.json` | skia `resources/skottie/skottie-time-reverse.json` | BSD-3-Clause | negative time stretch |
|
|
102
|
+
| `skottie-fill-effect.json` | skia `resources/skottie/skottie-fill-effect.json` | BSD-3-Clause | fill effect (ef 21) |
|
|
103
|
+
| `skottie-tritone-effect.json` | skia `resources/skottie/skottie-tritone-effect.json` | BSD-3-Clause | tritone effect (ef 23) |
|
|
104
|
+
| `skottie-dropshadow-ramp.json` | skia `resources/skottie/skottie-dropshadow-ramp.json` | BSD-3-Clause | drop shadow effect (ef 25) |
|
|
105
|
+
| `skottie-gaussian-blur.json` | skia `resources/skottie/skottie-gaussian-blur.json` | BSD-3-Clause | gaussian blur (ef 29), text (system font); text with system fonts: NOT comparable |
|
|
106
|
+
| `skottie-invert-effect.json` | skia `resources/skottie/skottie-invert-effect.json` | BSD-3-Clause | invert effect |
|
|
107
|
+
| `skottie-huesaturation-effect.json` | skia `resources/skottie/skottie-huesaturation-effect.json` | BSD-3-Clause | hue/saturation effect |
|
|
108
|
+
| `skottie-dropshadow-style.json` | skia `resources/skottie/skottie-dropshadow-style.json` | BSD-3-Clause | drop shadow layer style |
|
|
109
|
+
| `skottie-effects-transform.json` | skia `resources/skottie/skottie-effects-transform.json` | BSD-3-Clause | transform effect, image layer |
|
|
110
|
+
| `skottie-sample-1.json` | skia `resources/skottie/skottie_sample_1.json` | BSD-3-Clause | real world strokes |
|
|
111
|
+
| `skottie-sample-search.json` | skia `resources/skottie/skottie_sample_search.json` | BSD-3-Clause | real world: trim, strokes |
|
|
112
|
+
| `skottie-phonehub-connecting.json` | skia `resources/skottie/skottie-phonehub-connecting.json` | BSD-3-Clause | real world: Chrome OS Phone Hub |
|
|
113
|
+
| `skottie-text-fill-over-stroke.json` | skia `resources/skottie/skottie-text-fill-over-stroke.json` | BSD-3-Clause | text: fill over stroke (glyphs); text ships glyphs (chars): comparable |
|
|
114
|
+
| `skottie-text-animator-1.json` | skia `resources/skottie/skottie-text-animator-1.json` | BSD-3-Clause | text animators (glyphs); text ships glyphs (chars): comparable |
|
|
115
|
+
| `skottie-text-tracking.json` | skia `resources/skottie/skottie-text-tracking.json` | BSD-3-Clause | text tracking (system font); text with system fonts: NOT comparable |
|
|
116
|
+
| `skottie-text-valign.json` | skia `resources/skottie/skottie-text-valign.json` | BSD-3-Clause | text paragraph box, alignment (system font); text with system fonts: NOT comparable |
|
|
117
|
+
| `skottie-3d-parenting-nocamera.json` | skia `resources/skottie/skottie-3d-parenting-nocamera.json` | BSD-3-Clause | 3D layers without a camera |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"lat":33.4418,"lon":-94.0377,"timezone":"America/Chicago","timezone_offset":-18000,"current":{"dt":1616783932,"sunrise":1616760679,"sunset":1616805115,"temp":294.73,"feels_like":291.14,"pressure":1017,"humidity":43,"dew_point":281.63,"uvi":7.02,"clouds":1,"visibility":10000,"wind_speed":4.63,"wind_deg":120,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}]},"minutely":[{"dt":1616783940,"precipitation":0},{"dt":1616784000,"precipitation":0},{"dt":1616784060,"precipitation":0},{"dt":1616784120,"precipitation":0},{"dt":1616784180,"precipitation":0},{"dt":1616784240,"precipitation":0},{"dt":1616784300,"precipitation":0},{"dt":1616784360,"precipitation":0},{"dt":1616784420,"precipitation":0},{"dt":1616784480,"precipitation":0},{"dt":1616784540,"precipitation":0},{"dt":1616784600,"precipitation":0},{"dt":1616784660,"precipitation":0},{"dt":1616784720,"precipitation":0},{"dt":1616784780,"precipitation":0},{"dt":1616784840,"precipitation":0},{"dt":1616784900,"precipitation":0},{"dt":1616784960,"precipitation":0},{"dt":1616785020,"precipitation":0},{"dt":1616785080,"precipitation":0},{"dt":1616785140,"precipitation":0},{"dt":1616785200,"precipitation":0},{"dt":1616785260,"precipitation":0},{"dt":1616785320,"precipitation":0},{"dt":1616785380,"precipitation":0},{"dt":1616785440,"precipitation":0},{"dt":1616785500,"precipitation":0},{"dt":1616785560,"precipitation":0},{"dt":1616785620,"precipitation":0},{"dt":1616785680,"precipitation":0},{"dt":1616785740,"precipitation":0},{"dt":1616785800,"precipitation":0},{"dt":1616785860,"precipitation":0},{"dt":1616785920,"precipitation":0},{"dt":1616785980,"precipitation":0},{"dt":1616786040,"precipitation":0},{"dt":1616786100,"precipitation":0},{"dt":1616786160,"precipitation":0},{"dt":1616786220,"precipitation":0},{"dt":1616786280,"precipitation":0},{"dt":1616786340,"precipitation":0},{"dt":1616786400,"precipitation":0},{"dt":1616786460,"precipitation":0},{"dt":1616786520,"precipitation":0},{"dt":1616786580,"precipitation":0},{"dt":1616786640,"precipitation":0},{"dt":1616786700,"precipitation":0},{"dt":1616786760,"precipitation":0},{"dt":1616786820,"precipitation":0},{"dt":1616786880,"precipitation":0},{"dt":1616786940,"precipitation":0},{"dt":1616787000,"precipitation":0},{"dt":1616787060,"precipitation":0},{"dt":1616787120,"precipitation":0},{"dt":1616787180,"precipitation":0},{"dt":1616787240,"precipitation":0},{"dt":1616787300,"precipitation":0},{"dt":1616787360,"precipitation":0},{"dt":1616787420,"precipitation":0},{"dt":1616787480,"precipitation":0},{"dt":1616787540,"precipitation":0}]}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|