documentation-site/components/theming/animations.jsx (135 lines of code) (raw):
/*
Copyright (c) Uber Technologies, Inc.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*/
//
import * as React from "react";
import { useStyletron } from "baseui";
import { Property } from "./common.jsx";
const move = {
from: {
width: "0px",
},
to: {
width: "100%",
},
};
// adds delays so that bars are in sync
const animations = {
timing100: {
...move,
["10%"]: {
width: "100%",
},
},
timing200: {
...move,
["20%"]: {
width: "100%",
},
},
timing300: {
...move,
["30%"]: {
width: "100%",
},
},
timing400: {
...move,
["40%"]: {
width: "100%",
},
},
timing500: {
...move,
["50%"]: {
width: "100%",
},
},
timing600: {
...move,
["60%"]: {
width: "100%",
},
},
timing700: {
...move,
["70%"]: {
width: "100%",
},
},
timing800: {
...move,
["80%"]: {
width: "100%",
},
},
timing900: {
...move,
["90%"]: {
width: "100%",
},
},
timing1000: {
...move,
},
};
export function Timing({ name }) {
const [css, theme] = useStyletron();
return (
<Property
name={name}
concern="animation"
renderPreview={() => (
<div
className={css({
backgroundColor: theme.colors.contentInverseSecondary,
})}
>
<div
className={css({
animationName: animations[name],
animationDuration: "1s",
animationDirection: "alternate",
animationIterationCount: "infinite",
animationTimingFunction: "linear",
height: theme.sizing.scale100,
backgroundColor: theme.colors.contentPrimary,
})}
></div>
</div>
)}
renderValue={() => theme.animation[name]}
/>
);
}
export function Easing({ name }) {
const [css, theme] = useStyletron();
return (
<Property
name={name}
concern="animation"
renderValue={() => theme.animation[name]}
renderPreview={() => (
<div
className={css({
backgroundColor: theme.colors.contentInverseSecondary,
})}
>
<div
className={css({
animationName: move,
animationDuration: "1s",
animationDirection: "alternate",
animationIterationCount: "infinite",
animationTimingFunction: theme.animation[name],
height: theme.sizing.scale100,
backgroundColor: theme.colors.contentPrimary,
})}
></div>
</div>
)}
/>
);
}