diff --git a/packages/blade/docs/tokens/Motion.stories.mdx b/packages/blade/docs/tokens/Motion.stories.mdx
index 584d4ab64d8..d0dbb33e526 100644
--- a/packages/blade/docs/tokens/Motion.stories.mdx
+++ b/packages/blade/docs/tokens/Motion.stories.mdx
@@ -13,11 +13,7 @@ import MovingDiv from '../components/MovingDiv';
const colorScheme = context.store.globals.globals.colorScheme;
return (
-
+
{children}
@@ -113,7 +109,7 @@ export const MotionExample = () => {
background-color: ${(props) => props.theme.colors.surface.background.primary.subtle};
animation: ${(props) =>
`resize ${makeMotionTime(props.theme.motion.duration.xgentle)} ${
- props.theme.motion.easing.standard.effective
+ props.theme.motion.easing.standard
} infinite`};
@keyframes resize {
0% {
@@ -127,7 +123,7 @@ export const MotionExample = () => {
}
}
`;
- return ;
+ return ;
};
@@ -153,7 +149,7 @@ const ExampleDiv = styled.div`
props.theme.colors.surface.background.primary.subtle};
animation: ${(props) =>
`resize ${makeMotionTime(props.theme.motion.duration.xgentle)} ${
- props.theme.motion.easing.standard.effective
+ props.theme.motion.easing.standard
} infinite`};
@keyframes resize {
0% {
@@ -177,7 +173,7 @@ import { makeMotionTime } from '@razorpay/blade/utils';
const CustomComponent = () => {
const { theme } = useTheme();
- const easing = theme.motion.easing.standard.effective;
+ const easing = theme.motion.easing.standard;
const duration = makeMotionTime(theme.motion.duration.xgentle);
const delay = makeMotionTime(theme.motion.delay.short);
diff --git a/packages/blade/src/components/Accordion/commonStyles.ts b/packages/blade/src/components/Accordion/commonStyles.ts
index c2842d99a39..1acc92c9595 100644
--- a/packages/blade/src/components/Accordion/commonStyles.ts
+++ b/packages/blade/src/components/Accordion/commonStyles.ts
@@ -7,7 +7,7 @@ import { makeMotionTime } from '~utils';
const getTransitionDuration = (theme: Theme) => makeMotionTime(theme.motion.duration['2xquick']);
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
-const getTransitionEasing = (theme: Theme) => theme.motion.easing.standard.effective;
+const getTransitionEasing = (theme: Theme) => theme.motion.easing.standard;
const getBackgroundColor = ({
theme,
diff --git a/packages/blade/src/components/ActionList/ActionList.tsx b/packages/blade/src/components/ActionList/ActionList.tsx
index 0e0f726b949..f340cd03935 100644
--- a/packages/blade/src/components/ActionList/ActionList.tsx
+++ b/packages/blade/src/components/ActionList/ActionList.tsx
@@ -36,6 +36,8 @@ const _ActionList = ({ children, testID }: ActionListProps): React.ReactElement
[children],
);
+ console.log({ actionListOptions });
+
React.useEffect(() => {
setOptions(actionListOptions);
// eslint-disable-next-line react-hooks/exhaustive-deps
diff --git a/packages/blade/src/components/BladeProvider/__tests__/bladeLightTheme/bladeLightTheme.native.ts b/packages/blade/src/components/BladeProvider/__tests__/bladeLightTheme/bladeLightTheme.native.ts
index 507660d6db8..76e6d26d027 100644
--- a/packages/blade/src/components/BladeProvider/__tests__/bladeLightTheme/bladeLightTheme.native.ts
+++ b/packages/blade/src/components/BladeProvider/__tests__/bladeLightTheme/bladeLightTheme.native.ts
@@ -13,22 +13,13 @@ const bladeLightTheme: Theme = {
motion: {
...bladeTheme.motion,
easing: {
- standard: {
- attentive: Easing.bezier(0.5, 0, 0.3, 1.5),
- effective: Easing.bezier(0.3, 0, 0.2, 1),
- revealing: Easing.bezier(0.5, 0, 0, 1),
- wary: Easing.bezier(1, 0.5, 0, 0.5),
- },
- entrance: {
- attentive: Easing.bezier(0.5, 0, 0.3, 1.5),
- effective: Easing.bezier(0, 0, 0.2, 1),
- revealing: Easing.bezier(0, 0, 0, 1),
- },
- exit: {
- attentive: Easing.bezier(0.7, 0, 0.5, 1),
- effective: Easing.bezier(0.17, 0, 1, 1),
- revealing: Easing.bezier(0.5, 0, 1, 1),
- },
+ linear: Easing.bezier(0, 0, 0, 0),
+ entrance: Easing.bezier(0, 0, 0.2, 1),
+ exit: Easing.bezier(0.17, 0, 1, 1),
+ standard: Easing.bezier(0.3, 0, 0.2, 1),
+ emphasized: Easing.bezier(0.5, 0, 0, 1),
+ overshoot: Easing.bezier(0.5, 0, 0.3, 1.5),
+ shake: Easing.bezier(1, 0.5, 0, 0.5),
},
},
};
diff --git a/packages/blade/src/components/BottomSheet/BottomSheetBackdrop.web.tsx b/packages/blade/src/components/BottomSheet/BottomSheetBackdrop.web.tsx
index 583dde5e7cd..d065881fa55 100644
--- a/packages/blade/src/components/BottomSheet/BottomSheetBackdrop.web.tsx
+++ b/packages/blade/src/components/BottomSheet/BottomSheetBackdrop.web.tsx
@@ -11,8 +11,8 @@ const StyledBottomSheetBackdrop = styled(BaseBox)<{ isOpen: boolean }>(({ theme,
return {
transitionDuration: `${makeMotionTime(theme.motion.duration.moderate)}`,
transitionTimingFunction: isOpen
- ? castWebType(theme.motion.easing.entrance.revealing)
- : castWebType(theme.motion.easing.exit.revealing),
+ ? castWebType(theme.motion.easing.entrance)
+ : castWebType(theme.motion.easing.exit),
pointerEvents: isOpen ? 'all' : 'none',
transitionProperty: 'opacity',
};
diff --git a/packages/blade/src/components/Button/BaseButton/BaseButton.tsx b/packages/blade/src/components/Button/BaseButton/BaseButton.tsx
index f1285723012..b6c84db1a56 100644
--- a/packages/blade/src/components/Button/BaseButton/BaseButton.tsx
+++ b/packages/blade/src/components/Button/BaseButton/BaseButton.tsx
@@ -257,7 +257,7 @@ const getProps = ({
borderWidth: variant == 'secondary' ? makeBorderSize(theme.border.width.thin) : '0px',
borderRadius: makeBorderSize(theme.border.radius.medium),
motionDuration: 'duration.xquick',
- motionEasing: 'easing.standard.effective',
+ motionEasing: 'easing.standard',
};
if (isDisabled) {
diff --git a/packages/blade/src/components/Button/IconButton/StyledIconButton.web.tsx b/packages/blade/src/components/Button/IconButton/StyledIconButton.web.tsx
index 57753398562..91e1d772be7 100644
--- a/packages/blade/src/components/Button/IconButton/StyledIconButton.web.tsx
+++ b/packages/blade/src/components/Button/IconButton/StyledIconButton.web.tsx
@@ -56,7 +56,7 @@ const StyledButton = styled.button((props) => {
: theme.colors.interactive.icon[emphasisColor].muted,
transitionProperty: 'color, box-shadow',
transitionDuration: castWebType(makeMotionTime(motionToken.duration.xquick)),
- transitionTimingFunction: motionToken.easing.standard.effective as string,
+ transitionTimingFunction: motionToken.easing.standard as string,
'&:hover:not([disabled])': {
color: theme.colors.interactive.icon[emphasisColor].subtle,
diff --git a/packages/blade/src/components/Card/CardRoot.native.tsx b/packages/blade/src/components/Card/CardRoot.native.tsx
index 757288d0edc..aacd50672e4 100644
--- a/packages/blade/src/components/Card/CardRoot.native.tsx
+++ b/packages/blade/src/components/Card/CardRoot.native.tsx
@@ -51,7 +51,7 @@ const CardRoot = ({
const { theme } = useTheme();
const [isPressed, setIsPressed] = React.useState(false);
const duration = castNativeType(makeMotionTime(theme.motion.duration.xquick));
- const easing = castNativeType(theme.motion.easing.standard.effective);
+ const easing = castNativeType(theme.motion.easing.standard);
const styles = useAnimatedStyle(() => {
return {
diff --git a/packages/blade/src/components/Card/CardRoot.web.tsx b/packages/blade/src/components/Card/CardRoot.web.tsx
index 4689dc3be52..1948a35b745 100644
--- a/packages/blade/src/components/Card/CardRoot.web.tsx
+++ b/packages/blade/src/components/Card/CardRoot.web.tsx
@@ -20,7 +20,7 @@ const StyledCardRoot = styled(BaseBox) {
const { theme } = useTheme();
- const easing = castNativeType(theme.motion.easing.standard.effective);
+ const easing = castNativeType(theme.motion.easing.standard);
const duration = castNativeType(makeMotionTime(theme.motion.duration.gentle));
const style = useAnimatedStyle(() => {
diff --git a/packages/blade/src/components/Carousel/Indicators/getIndicatorButtonStyles.ts b/packages/blade/src/components/Carousel/Indicators/getIndicatorButtonStyles.ts
index 6f61afacbb1..5edc09c2222 100644
--- a/packages/blade/src/components/Carousel/Indicators/getIndicatorButtonStyles.ts
+++ b/packages/blade/src/components/Carousel/Indicators/getIndicatorButtonStyles.ts
@@ -17,7 +17,7 @@ const getIndicatorButtonStyles = ({
blue: theme.colors.interactive.icon.primary.subtle,
};
- const easing = castWebType(theme.motion.easing.standard.effective);
+ const easing = castWebType(theme.motion.easing.standard);
const duration = castWebType(makeMotionTime(theme.motion.duration.gentle));
return {
diff --git a/packages/blade/src/components/Carousel/NavigationButton/getNavigationButtonStyles.ts b/packages/blade/src/components/Carousel/NavigationButton/getNavigationButtonStyles.ts
index b2494f678a6..822d1ecb651 100644
--- a/packages/blade/src/components/Carousel/NavigationButton/getNavigationButtonStyles.ts
+++ b/packages/blade/src/components/Carousel/NavigationButton/getNavigationButtonStyles.ts
@@ -66,7 +66,7 @@ const getNavigationButtonStyles = (props: {
: {
transitionProperty: 'color, box-shadow',
transitionDuration: castWebType(makeMotionTime(motionToken.duration.xquick)),
- transitionTimingFunction: castWebType(motionToken.easing.standard.effective),
+ transitionTimingFunction: castWebType(motionToken.easing.standard),
boxShadow: variant === 'filled' ? castWebType(theme.elevation.midRaised) : undefined,
'&:hover': {
diff --git a/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.native.tsx b/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.native.tsx
index 8562c25463f..9c7b0a070eb 100644
--- a/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.native.tsx
+++ b/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.native.tsx
@@ -17,8 +17,8 @@ const StyledFade = styled(Animated.View)<{ styles: CSSObject }>(({ styles }) =>
const Fade = ({ children, show, styles }: FadeProps) => {
const { theme } = useTheme();
- const fadeInEasing = (theme.motion.easing.entrance.effective as unknown) as EasingFn;
- const fadeOutEasing = (theme.motion.easing.exit.effective as unknown) as EasingFn;
+ const fadeInEasing = (theme.motion.easing.entrance as unknown) as EasingFn;
+ const fadeOutEasing = (theme.motion.easing.exit as unknown) as EasingFn;
const fadeIn = new Keyframe({
from: {
transform: [{ scale: 0.6 }],
diff --git a/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.web.tsx b/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.web.tsx
index 395153af838..3fb9cdcaea7 100644
--- a/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.web.tsx
+++ b/packages/blade/src/components/Checkbox/CheckboxIcon/Fade.web.tsx
@@ -46,13 +46,11 @@ const Fade = ({ show, children, styles }: FadeProps) => {
const duration = theme.motion.duration.xquick;
const enter = css`
- animation: ${fadeIn} ${makeMotionTime(duration)}
- ${theme.motion.easing.entrance.effective as string};
+ animation: ${fadeIn} ${makeMotionTime(duration)} ${theme.motion.easing.entrance as string};
`;
const exit = css`
- animation: ${fadeOut} ${makeMotionTime(duration)}
- ${theme.motion.easing.exit.effective as string};
+ animation: ${fadeOut} ${makeMotionTime(duration)} ${theme.motion.easing.exit as string};
`;
// if show is undefined do not initialize the animation to prevent flash of animation
diff --git a/packages/blade/src/components/Chip/chipTokens.ts b/packages/blade/src/components/Chip/chipTokens.ts
index f3498cece12..05d79b88336 100644
--- a/packages/blade/src/components/Chip/chipTokens.ts
+++ b/packages/blade/src/components/Chip/chipTokens.ts
@@ -195,7 +195,7 @@ const chipTextSizes = {
const chipMotionTokens: Record<'duration' | 'easing', DurationString | EasingString> = {
duration: 'duration.xquick',
- easing: 'easing.standard.effective',
+ easing: 'easing.standard',
};
export {
diff --git a/packages/blade/src/components/Collapsible/commonStyles.ts b/packages/blade/src/components/Collapsible/commonStyles.ts
index ee23e117b83..25be289ca30 100644
--- a/packages/blade/src/components/Collapsible/commonStyles.ts
+++ b/packages/blade/src/components/Collapsible/commonStyles.ts
@@ -28,10 +28,10 @@ const getCollapsibleBodyContentBoxProps = ({
const getOpacity = ({ isExpanded }: { isExpanded: boolean }): number => (isExpanded ? 1 : 0.8);
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
-const getTransitionDuration = (theme: Theme) => makeMotionTime(theme.motion.duration.xmoderate);
+const getTransitionDuration = (theme: Theme) => makeMotionTime(theme.motion.duration.moderate);
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
-const getTransitionEasing = (theme: Theme) => theme.motion.easing.standard.effective;
+const getTransitionEasing = (theme: Theme) => theme.motion.easing.standard;
const getCollapsibleChevronIconTransforms = (): {
transformExpanded: number;
diff --git a/packages/blade/src/components/Drawer/Drawer.web.tsx b/packages/blade/src/components/Drawer/Drawer.web.tsx
index 1587b6205a6..69cb67fc290 100644
--- a/packages/blade/src/components/Drawer/Drawer.web.tsx
+++ b/packages/blade/src/components/Drawer/Drawer.web.tsx
@@ -28,12 +28,12 @@ const AnimatedDrawerContainer = styled(BaseBox)<{
isVisible: boolean;
}>(({ theme, isFirstDrawerInStack, isVisible }) => {
const entranceTransition: CSSProperties['transition'] = `all ${castWebType(
- castWebType(makeMotionTime(theme.motion.duration.gentle)),
- )} ${castWebType(theme.motion.easing.entrance.revealing)}`;
+ castWebType(makeMotionTime(theme.motion.duration.xmoderate)),
+ )} ${castWebType(theme.motion.easing.entrance)}`;
const exitTransition: CSSProperties['transition'] = `all
- ${castWebType(makeMotionTime(theme.motion.duration.xmoderate))}
- ${castWebType(theme.motion.easing.exit.revealing)}`;
+ ${castWebType(makeMotionTime(theme.motion.duration.moderate))}
+ ${castWebType(theme.motion.easing.exit)}`;
return {
opacity: isVisible ? 1 : 0,
@@ -52,13 +52,13 @@ const DrawerOverlay = styled(FloatingOverlay)(({ theme }) => {
opacity: 0,
transition: `opacity
${makeMotionTime(theme.motion.duration.xmoderate)}
- ${castWebType(theme.motion.easing.exit.revealing)}`,
+ ${castWebType(theme.motion.easing.exit)}`,
backgroundColor: theme.colors.overlay.background.subtle,
[`&.${SHOW_DRAWER}`]: {
opacity: 1,
transition: `opacity ${makeMotionTime(theme.motion.duration.gentle)} ${castWebType(
- theme.motion.easing.entrance.revealing,
+ theme.motion.easing.entrance,
)}`,
},
};
diff --git a/packages/blade/src/components/FileUpload/fileUploadTokens.ts b/packages/blade/src/components/FileUpload/fileUploadTokens.ts
index 82e6eec6662..a441851cf98 100644
--- a/packages/blade/src/components/FileUpload/fileUploadTokens.ts
+++ b/packages/blade/src/components/FileUpload/fileUploadTokens.ts
@@ -20,7 +20,7 @@ const getFileUploadInputHoverTokens = (): SelectorInputHoverTokens => {
const fileUploadMotionTokens: Record<'duration' | 'easing', DurationString | EasingString> = {
duration: 'duration.2xquick',
- easing: 'easing.standard.effective',
+ easing: 'easing.standard',
};
const fileUploadHeightTokens = {
diff --git a/packages/blade/src/components/Form/Selector/SelectorInput.web.tsx b/packages/blade/src/components/Form/Selector/SelectorInput.web.tsx
index cce296e8a9a..4f4f512e5b6 100644
--- a/packages/blade/src/components/Form/Selector/SelectorInput.web.tsx
+++ b/packages/blade/src/components/Form/Selector/SelectorInput.web.tsx
@@ -31,7 +31,7 @@ const getHoverStyles = ({
return {
borderColor: borderColor ? getIn(theme, borderColor) : undefined,
backgroundColor: getIn(theme, backgroundColor),
- transitionTimingFunction: theme.motion.easing.standard.effective as string,
+ transitionTimingFunction: theme.motion.easing.standard as string,
transitionDuration: castWebType(makeMotionTime(theme.motion.duration['2xquick'])),
};
};
diff --git a/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.native.tsx b/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.native.tsx
index 17edc86131b..257c3cd5286 100644
--- a/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.native.tsx
+++ b/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.native.tsx
@@ -67,7 +67,7 @@ const _AnimatedBaseInputWrapper: React.ForwardRefRenderFunction<
showAllTags ? baseInputWrapperMaxHeight[rest.size] : baseInputHeight[rest.size],
{
duration: theme.motion.duration.xquick,
- easing: castNativeType(theme.motion.easing.exit.effective),
+ easing: castNativeType(theme.motion.easing.exit),
},
(isComplete) => {
if (isComplete && !showAllTags) {
@@ -122,11 +122,10 @@ const _AnimatedBaseInputWrapper: React.ForwardRefRenderFunction<
),
),
easing: castNativeType(
- getIn(
- theme.motion.easing,
+ theme.motion.easing[
baseInputBorderBackgroundMotion[rest.currentInteraction === 'focus' ? 'enter' : 'exit']
- .easing,
- ),
+ .easing
+ ],
),
};
diff --git a/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.web.tsx b/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.web.tsx
index 22405021217..91c7abf98c2 100644
--- a/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.web.tsx
+++ b/packages/blade/src/components/Input/BaseInput/AnimatedBaseInputWrapper.web.tsx
@@ -46,7 +46,7 @@ const StyledBaseInputWrapper = styled(BaseBox)<
}),
transitionProperty: 'background-color',
transitionDuration: castWebType(makeMotionTime(props.theme.motion.duration.xquick)),
- transitionTimingFunction: castWebType(props.theme.motion.easing.standard.effective),
+ transitionTimingFunction: castWebType(props.theme.motion.easing.standard),
},
':focus-within': {
...getInputBackgroundAndBorderStyles({
@@ -113,12 +113,12 @@ to {
const expandTransition = css`
animation: ${expandAnimation} ${makeMotionTime(motion.duration.quick)}
- ${String(motion.easing.entrance.effective)};
+ ${String(motion.easing.entrance)};
`;
const collapseTransition = css`
animation: ${collapseAnimation} ${makeMotionTime(motion.duration.quick)}
- ${String(motion.easing.exit.effective)};
+ ${String(motion.easing.exit)};
`;
const noTransition = css`
diff --git a/packages/blade/src/components/Input/BaseInput/BaseInput.tsx b/packages/blade/src/components/Input/BaseInput/BaseInput.tsx
index 6d4466321f0..efec0c03bba 100644
--- a/packages/blade/src/components/Input/BaseInput/BaseInput.tsx
+++ b/packages/blade/src/components/Input/BaseInput/BaseInput.tsx
@@ -752,11 +752,10 @@ const FocusRingWrapper = styled(BaseBox)<{
),
),
transitionTimingFunction: castWebType(
- getIn(
- theme.motion.easing,
+ theme.motion.easing[
baseInputBorderBackgroundMotion[currentInteraction === 'focus' ? 'enter' : 'exit']
- .easing,
- ),
+ .easing
+ ],
),
}
: {},
diff --git a/packages/blade/src/components/Input/BaseInput/baseInputTokens.ts b/packages/blade/src/components/Input/BaseInput/baseInputTokens.ts
index 889cc337acb..d6d6a4864bc 100644
--- a/packages/blade/src/components/Input/BaseInput/baseInputTokens.ts
+++ b/packages/blade/src/components/Input/BaseInput/baseInputTokens.ts
@@ -64,8 +64,8 @@ export const baseInputBorderWidth = {
} as const;
export const baseInputBorderBackgroundMotion = {
- enter: { duration: 'xgentle', easing: 'standard.revealing' },
- exit: { duration: 'gentle', easing: 'standard.effective' },
+ enter: { duration: 'xgentle', easing: 'emphasized' },
+ exit: { duration: 'gentle', easing: 'standard' },
} as const;
export const baseInputPaddingTokens = {
diff --git a/packages/blade/src/components/Input/DropdownInputTriggers/AutoComplete.stories.tsx b/packages/blade/src/components/Input/DropdownInputTriggers/AutoComplete.stories.tsx
index dbcacd505a7..fb3bc4214de 100644
--- a/packages/blade/src/components/Input/DropdownInputTriggers/AutoComplete.stories.tsx
+++ b/packages/blade/src/components/Input/DropdownInputTriggers/AutoComplete.stories.tsx
@@ -325,37 +325,75 @@ export const InternalAutoCompleteControlledSelection = (): React.ReactElement =>
);
};
-const cities = [
- {
- title: 'Mumbai',
- value: 'mumbai',
- keywords: ['maharashtra'],
- },
- {
- title: 'Pune',
- value: 'pune',
- keywords: ['maharashtra'],
- },
- {
- title: 'Bengaluru',
- value: 'bengaluru',
- keywords: ['karnataka', 'bangalore'],
- },
- {
- title: 'Ooty',
- value: 'ooty',
- keywords: ['tamil nadu'],
- },
-];
+const getCities = () => {
+ const cities = [
+ {
+ title: 'Mumbai',
+ value: 'mumbai',
+ keywords: ['maharashtra'],
+ },
+ {
+ title: 'Pune',
+ value: 'pune',
+ keywords: ['maharashtra'],
+ },
+ {
+ title: 'Bengaluru',
+ value: 'bengaluru',
+ keywords: ['karnataka', 'bangalore'],
+ },
+ {
+ title: 'Ooty',
+ value: 'ooty',
+ keywords: ['tamil nadu'],
+ },
+ ];
+
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ resolve(cities);
+ }, 500);
+ });
+};
+
export const InternalAutoCompleteControlled = (): React.ReactElement => {
+ const [cities, setCities] = React.useState([]);
+ React.useEffect(() => {
+ getCities().then((data) => {
+ setCities(data);
+ setFilteredValues(data);
+ });
+
+ // setTimeout(() => {
+ // setFilteredValues(['mumbai', 'bengaluru']);
+ // }, 5000);
+ }, []);
+
+ console.log(cities);
+
const cityValues = cities.map((city) => city.value);
const [filteredValues, setFilteredValues] = React.useState(cityValues);
+ const [inputValue, setInputValue] = React.useState('Pune');
+ const [selectedValue, setSelectedValue] = React.useState('pune');
return (
-
+ {
+ // if (isOpen) {
+ // setFilteredValues(cities);
+ // }
+ // console.log(filteredValues);
+ }}
+ >
{
+ console.log('onInputValueChange called');
+ setInputValue(value ?? '');
+
if (value) {
const filteredItems = cities
.filter(
@@ -376,6 +414,10 @@ export const InternalAutoCompleteControlled = (): React.ReactElement => {
setFilteredValues(cityValues);
}
}}
+ onChange={({ values }) => {
+ console.log('onChange called');
+ setSelectedValue(values[0]);
+ }}
filteredValues={filteredValues}
helpText="Try typing 'maharashtra' in input"
/>
diff --git a/packages/blade/src/components/Link/BaseLink/BaseLink.tsx b/packages/blade/src/components/Link/BaseLink/BaseLink.tsx
index 0c78ab66946..42b4328d0fb 100644
--- a/packages/blade/src/components/Link/BaseLink/BaseLink.tsx
+++ b/packages/blade/src/components/Link/BaseLink/BaseLink.tsx
@@ -246,7 +246,7 @@ const getProps = ({
}) as BaseTextProps['color'],
focusRingColor: getIn(theme.colors, 'interactive.background.primary.faded'),
motionDuration: 'duration.2xquick',
- motionEasing: 'easing.standard.effective',
+ motionEasing: 'easing.standard',
cursor: isButton && isDisabled ? 'not-allowed' : 'pointer',
disabled: isButton && isDisabled,
role: isButton ? 'button' : 'link',
diff --git a/packages/blade/src/components/Modal/Modal.web.tsx b/packages/blade/src/components/Modal/Modal.web.tsx
index 041afb5b45a..2937f693fa5 100644
--- a/packages/blade/src/components/Modal/Modal.web.tsx
+++ b/packages/blade/src/components/Modal/Modal.web.tsx
@@ -59,10 +59,10 @@ const ModalContent = styled(BaseBox)<{ isVisible: boolean }>(({ isVisible, theme
transform: translate(-50%, -50%);
opacity: ${isVisible ? 1 : 0};
animation: ${isVisible ? entry : exit}
- ${castWebType(makeMotionTime(theme.motion.duration.xmoderate))}
+ ${castWebType(makeMotionTime(theme.motion.duration.moderate))}
${isVisible
- ? castWebType(theme.motion.easing.entrance.revealing)
- : castWebType(theme.motion.easing.exit.revealing)};
+ ? castWebType(theme.motion.easing.entrance)
+ : castWebType(theme.motion.easing.exit)};
`;
});
@@ -77,7 +77,7 @@ const Modal = ({
}: ModalProps): React.ReactElement => {
const { theme, platform } = useTheme();
const { isMounted, isVisible } = usePresence(isOpen, {
- transitionDuration: theme.motion.duration.xmoderate,
+ transitionDuration: theme.motion.duration.moderate,
initialEnter: true,
});
diff --git a/packages/blade/src/components/Modal/ModalBackdrop.tsx b/packages/blade/src/components/Modal/ModalBackdrop.tsx
index 00168c36e16..cda34b65001 100644
--- a/packages/blade/src/components/Modal/ModalBackdrop.tsx
+++ b/packages/blade/src/components/Modal/ModalBackdrop.tsx
@@ -10,10 +10,10 @@ const StyledModalBackdrop = styled(FloatingOverlay)(({ theme }) => {
const { isVisible } = useModalContext();
return {
- transitionDuration: `${makeMotionTime(theme.motion.duration.xmoderate)}`,
+ transitionDuration: `${makeMotionTime(theme.motion.duration.moderate)}`,
transitionTimingFunction: isVisible
- ? castWebType(theme.motion.easing.entrance.revealing)
- : castWebType(theme.motion.easing.exit.revealing),
+ ? castWebType(theme.motion.easing.entrance)
+ : castWebType(theme.motion.easing.exit),
transitionProperty: 'opacity',
opacity: isVisible ? 1 : 0,
backgroundColor: theme.colors.overlay.background.subtle,
diff --git a/packages/blade/src/components/Popover/PopoverContentWrapper.native.tsx b/packages/blade/src/components/Popover/PopoverContentWrapper.native.tsx
index a65fc0c6c33..e35ce3f59eb 100644
--- a/packages/blade/src/components/Popover/PopoverContentWrapper.native.tsx
+++ b/packages/blade/src/components/Popover/PopoverContentWrapper.native.tsx
@@ -38,7 +38,7 @@ const PopoverContentWrapper = React.forwardRef
const translate = useSharedValue(offset);
const opacity = useSharedValue(0);
- const easing = (theme.motion.easing.entrance.effective as unknown) as EasingFn;
+ const easing = (theme.motion.easing.entrance as unknown) as EasingFn;
const duration = theme.motion.duration.quick;
React.useEffect(() => {
diff --git a/packages/blade/src/components/ProgressBar/CircularProgressBar.web.tsx b/packages/blade/src/components/ProgressBar/CircularProgressBar.web.tsx
index f87ce6f2301..a2f9a3958b9 100644
--- a/packages/blade/src/components/ProgressBar/CircularProgressBar.web.tsx
+++ b/packages/blade/src/components/ProgressBar/CircularProgressBar.web.tsx
@@ -138,7 +138,7 @@ const CircularProgressBarFilled = ({
strokeDashoffset={dashOffset}
pulseMotionDuration="duration.2xgentle"
pulseMotionDelay="delay.long"
- motionEasing="easing.standard.revealing"
+ motionEasing="easing.emphasized"
/>
{showPercentage && size !== 'small' && (
) : (
diff --git a/packages/blade/src/components/Radio/RadioIcon/Fade.native.tsx b/packages/blade/src/components/Radio/RadioIcon/Fade.native.tsx
index 3ca846a0b73..44641b44c53 100644
--- a/packages/blade/src/components/Radio/RadioIcon/Fade.native.tsx
+++ b/packages/blade/src/components/Radio/RadioIcon/Fade.native.tsx
@@ -17,8 +17,8 @@ const StyledFade = styled(Animated.View)<{ styles: CSSObject }>(({ styles }) =>
const Fade = ({ children, show, styles }: FadeProps) => {
const { theme } = useTheme();
- const enterEasing = (theme.motion.easing.entrance.effective as unknown) as EasingFn;
- const exitEasing = (theme.motion.easing.exit.effective as unknown) as EasingFn;
+ const enterEasing = (theme.motion.easing.entrance as unknown) as EasingFn;
+ const exitEasing = (theme.motion.easing.exit as unknown) as EasingFn;
const scaleIn = new Keyframe({
from: {
transform: [{ scale: 0.3 }],
diff --git a/packages/blade/src/components/Radio/RadioIcon/Fade.web.tsx b/packages/blade/src/components/Radio/RadioIcon/Fade.web.tsx
index ef6d78f2fab..5a5ae76c91e 100644
--- a/packages/blade/src/components/Radio/RadioIcon/Fade.web.tsx
+++ b/packages/blade/src/components/Radio/RadioIcon/Fade.web.tsx
@@ -46,13 +46,11 @@ const Fade = ({ show, children, styles }: FadeProps) => {
const duration = theme.motion.duration.xquick;
const enter = css`
- animation: ${scaleIn} ${makeMotionTime(duration)}
- ${theme.motion.easing.entrance.effective as string};
+ animation: ${scaleIn} ${makeMotionTime(duration)} ${theme.motion.easing.entrance as string};
`;
const exit = css`
- animation: ${fadeOut} ${makeMotionTime(duration)}
- ${theme.motion.easing.exit.effective as string};
+ animation: ${fadeOut} ${makeMotionTime(duration)} ${theme.motion.easing.exit as string};
`;
// usePresence hook waits for the animation to finish before unmounting the component
diff --git a/packages/blade/src/components/Radio/RadioIcon/RadioIconWrapperStyles.ts b/packages/blade/src/components/Radio/RadioIcon/RadioIconWrapperStyles.ts
index 81c3d3ae064..dc85f138d5c 100644
--- a/packages/blade/src/components/Radio/RadioIcon/RadioIconWrapperStyles.ts
+++ b/packages/blade/src/components/Radio/RadioIcon/RadioIconWrapperStyles.ts
@@ -44,7 +44,7 @@ const getRadioIconWrapperStyles = ({
borderColor,
...(!isReactNative && {
transitionDuration: castWebType(makeMotionTime(theme.motion.duration.xquick)),
- transitionTimingFunction: castWebType(theme.motion.easing.exit.attentive),
+ transitionTimingFunction: castWebType(theme.motion.easing.exit),
}),
};
};
diff --git a/packages/blade/src/components/SideNav/SideNav.web.tsx b/packages/blade/src/components/SideNav/SideNav.web.tsx
index a408ddfc227..cfa5ed7533b 100644
--- a/packages/blade/src/components/SideNav/SideNav.web.tsx
+++ b/packages/blade/src/components/SideNav/SideNav.web.tsx
@@ -37,12 +37,12 @@ const MobileL1Container = styled(BaseBox)(() => {
});
const StyledL1Menu = styled(BaseBox)((props) => {
- const moderate = makeMotionTime(props.theme.motion.duration.moderate);
- const gentle = makeMotionTime(props.theme.motion.duration.gentle);
+ const quick = makeMotionTime(props.theme.motion.duration.quick);
+ const xmoderate = makeMotionTime(props.theme.motion.duration.xmoderate);
const easing = props.theme.motion.easing;
- const l1Expand = `width ${gentle} ${easing.entrance.revealing}`;
- const l1Collapse = `width ${moderate} ${easing.exit.revealing}`;
+ const l1Expand = `width ${xmoderate} ${easing.entrance}`;
+ const l1Collapse = `width ${quick} ${easing.exit}`;
return {
width: '100%',
diff --git a/packages/blade/src/components/SideNav/tokens.ts b/packages/blade/src/components/SideNav/tokens.ts
index b9436d28905..67c07acedba 100644
--- a/packages/blade/src/components/SideNav/tokens.ts
+++ b/packages/blade/src/components/SideNav/tokens.ts
@@ -28,9 +28,7 @@ const HOVER_AGAIN_DELAY = 500;
const L1_EXIT_HOVER_DELAY = 150;
const getNavItemTransition = ({ motion }: Theme): string => {
- return `background-color ${makeMotionTime(motion.duration['2xquick'])} ${
- motion.easing.standard.effective
- }`;
+ return `background-color ${makeMotionTime(motion.duration['2xquick'])} ${motion.easing.standard}`;
};
export {
diff --git a/packages/blade/src/components/Skeleton/PulseAnimation.native.tsx b/packages/blade/src/components/Skeleton/PulseAnimation.native.tsx
index ecebd076f75..233930b0054 100644
--- a/packages/blade/src/components/Skeleton/PulseAnimation.native.tsx
+++ b/packages/blade/src/components/Skeleton/PulseAnimation.native.tsx
@@ -22,7 +22,7 @@ const PulseAnimation = (props: SkeletonProps): React.ReactElement => {
const durationPluseOff = theme.motion.duration.xmoderate;
const durationPluseOn = theme.motion.duration['2xgentle'];
const totalDuration = castNativeType(makeMotionTime(durationPluseOn + durationPluseOff));
- const easing = castNativeType(theme.motion.easing.standard.revealing);
+ const easing = castNativeType(theme.motion.easing.emphasized);
const progress = useSharedValue(0);
const fadeIn = () => {
diff --git a/packages/blade/src/components/Skeleton/PulseAnimation.web.tsx b/packages/blade/src/components/Skeleton/PulseAnimation.web.tsx
index 1352ed59b5d..f93683d6213 100644
--- a/packages/blade/src/components/Skeleton/PulseAnimation.web.tsx
+++ b/packages/blade/src/components/Skeleton/PulseAnimation.web.tsx
@@ -33,7 +33,7 @@ const PulseAnimation = styled(BaseBox)(({ theme }) => {
const durationPulseOn = theme.motion.duration['2xgentle'];
const totalDuration = castWebType(makeMotionTime(durationPulseOn + durationPluseOff));
const duration = castWebType(makeMotionTime(theme.motion.duration['2xgentle']));
- const easing = castWebType(theme.motion.easing.standard.effective);
+ const easing = castWebType(theme.motion.easing.standard);
return css`
opacity: 0;
diff --git a/packages/blade/src/components/Spinner/BaseSpinner/spinnerTokens.ts b/packages/blade/src/components/Spinner/BaseSpinner/spinnerTokens.ts
index a801891b8b8..f0d1a70c3ad 100644
--- a/packages/blade/src/components/Spinner/BaseSpinner/spinnerTokens.ts
+++ b/packages/blade/src/components/Spinner/BaseSpinner/spinnerTokens.ts
@@ -11,7 +11,7 @@ const motion: {
easing: EasingString;
} = {
duration: 'duration.2xgentle',
- easing: 'easing.standard.attentive',
+ easing: 'easing.overshoot',
};
export { dimensions, motion };
diff --git a/packages/blade/src/components/SpotlightPopoverTour/TourMask.web.tsx b/packages/blade/src/components/SpotlightPopoverTour/TourMask.web.tsx
index 4b41e60ddbf..42bf9a02514 100644
--- a/packages/blade/src/components/SpotlightPopoverTour/TourMask.web.tsx
+++ b/packages/blade/src/components/SpotlightPopoverTour/TourMask.web.tsx
@@ -67,13 +67,13 @@ const FadeRect = React.memo(
const duration = theme.motion.duration.gentle;
const enter = css`
animation: ${scaleIn} ${makeMotionTime(duration)}
- ${(theme.motion.easing.entrance.effective as unknown) as string};
+ ${(theme.motion.easing.entrance as unknown) as string};
animation-fill-mode: forwards;
`;
const exit = css`
animation: ${fadeOut} ${makeMotionTime(duration)}
- ${(theme.motion.easing.exit.effective as unknown) as string};
+ ${(theme.motion.easing.exit as unknown) as string};
animation-fill-mode: forwards;
`;
diff --git a/packages/blade/src/components/StepGroup/StepItem.web.tsx b/packages/blade/src/components/StepGroup/StepItem.web.tsx
index adc4313a6b5..4be3511860c 100644
--- a/packages/blade/src/components/StepGroup/StepItem.web.tsx
+++ b/packages/blade/src/components/StepGroup/StepItem.web.tsx
@@ -43,7 +43,7 @@ const InteractiveItemHeaderBox = styled.button((prop
: props.theme.colors.transparent,
borderRadius: props.theme.border.radius.medium,
width: '100%',
- transition: `background-color ${props.theme.motion.duration.xquick} ${props.theme.motion.easing.standard.effective}`,
+ transition: `background-color ${props.theme.motion.duration.xquick} ${props.theme.motion.easing.standard}`,
':not([disabled]):hover': {
backgroundColor: props.isSelected
? props.theme.colors.interactive.background.primary.fadedHighlighted
diff --git a/packages/blade/src/components/Switch/AnimatedThumbIcon.web.tsx b/packages/blade/src/components/Switch/AnimatedThumbIcon.web.tsx
index 07b82d64396..4425e8d84a4 100644
--- a/packages/blade/src/components/Switch/AnimatedThumbIcon.web.tsx
+++ b/packages/blade/src/components/Switch/AnimatedThumbIcon.web.tsx
@@ -11,7 +11,7 @@ const AnimatedThumbIcon = styled(Svg)<{ isChecked?: boolean }>(({ isChecked, the
return {
transitionDuration: `${makeMotionTime(duration)}`,
transitionTimingFunction: easing,
- transitionDelay: isChecked ? `${makeMotionTime(theme.motion.delay['2xshort'])}` : `0ms`,
+ transitionDelay: isChecked ? `${makeMotionTime(theme.motion.delay['2xquick'])}` : `0ms`,
opacity: isChecked ? 1 : 0,
};
});
diff --git a/packages/blade/src/components/Switch/getTrackStyles.ts b/packages/blade/src/components/Switch/getTrackStyles.ts
index 4547267d28e..d7a38ec6d09 100644
--- a/packages/blade/src/components/Switch/getTrackStyles.ts
+++ b/packages/blade/src/components/Switch/getTrackStyles.ts
@@ -42,7 +42,7 @@ const getTrackStyles = ({
height,
borderRadius: makeSize(theme.border.radius.max),
backgroundColor,
- transitionTimingFunction: `${theme.motion.easing.standard.effective}`,
+ transitionTimingFunction: `${theme.motion.easing.standard}`,
transitionDuration: isReactNative()
? undefined
: `${makeMotionTime(theme.motion.duration['2xquick'])}`,
diff --git a/packages/blade/src/components/Switch/switchTokens.ts b/packages/blade/src/components/Switch/switchTokens.ts
index 0d900d4ba98..c921e855a7c 100644
--- a/packages/blade/src/components/Switch/switchTokens.ts
+++ b/packages/blade/src/components/Switch/switchTokens.ts
@@ -82,14 +82,14 @@ const switchColors = {
const switchMotion = {
easing: {
- thumb: 'motion.easing.standard.effective',
- thumbIcon: 'motion.easing.standard.effective',
- track: 'motion.easing.standard.effective',
+ thumb: 'motion.easing.standard',
+ thumbIcon: 'motion.easing.standard',
+ track: 'motion.easing.standard',
},
duration: {
- thumb: 'motion.duration.xquick',
- thumbIcon: 'motion.duration.xquick',
- track: 'motion.duration.xquick',
+ thumb: 'motion.duration.quick',
+ thumbIcon: 'motion.duration.quick',
+ track: 'motion.duration.quick',
},
} as const;
diff --git a/packages/blade/src/components/Table/Table.web.tsx b/packages/blade/src/components/Table/Table.web.tsx
index 9125178c311..93be84157fc 100644
--- a/packages/blade/src/components/Table/Table.web.tsx
+++ b/packages/blade/src/components/Table/Table.web.tsx
@@ -111,9 +111,9 @@ const RefreshWrapper = styled(BaseBox)<{
opacity: isRefreshSpinnerVisible ? 1 : 0,
transition: `opacity ${makeMotionTime(theme.motion.duration.quick)} ${
isRefreshSpinnerEntering
- ? theme.motion.easing.entrance.effective
+ ? theme.motion.easing.entrance
: isRefreshSpinnerExiting
- ? theme.motion.easing.exit.effective
+ ? theme.motion.easing.exit
: ''
}`,
};
diff --git a/packages/blade/src/components/Table/tokens.ts b/packages/blade/src/components/Table/tokens.ts
index ebdedd5def3..206371de5cf 100644
--- a/packages/blade/src/components/Table/tokens.ts
+++ b/packages/blade/src/components/Table/tokens.ts
@@ -88,14 +88,14 @@ const tableRow = {
},
borderBottomWidth: 'thin',
borderColor: 'surface.border.gray.muted',
- backgroundColorMotionEasing: 'easing.standard.effective',
+ backgroundColorMotionEasing: 'easing.standard',
backgroundColorMotionDuration: 'duration.xquick',
} as const;
const tableToolbar = {
backgroundColor: 'transparent',
backgroundColorSelected: 'interactive.background.primary.faded',
- backgroundColorMotionEasing: 'easing.standard.effective',
+ backgroundColorMotionEasing: 'easing.standard',
backgroundColorMotionDuration: 'duration.xquick',
} as const;
diff --git a/packages/blade/src/components/Tabs/TabIndicator.web.tsx b/packages/blade/src/components/Tabs/TabIndicator.web.tsx
index 76806f9a3b9..4cef7e04a9d 100644
--- a/packages/blade/src/components/Tabs/TabIndicator.web.tsx
+++ b/packages/blade/src/components/Tabs/TabIndicator.web.tsx
@@ -100,7 +100,7 @@ const TabIndicator = ({
transitionDuration: hasMeasured
? castWebType(makeMotionTime(theme.motion.duration.gentle))
: '0ms',
- transitionTimingFunction: castWebType(theme.motion.easing.standard.effective),
+ transitionTimingFunction: castWebType(theme.motion.easing.standard),
};
if (variant === 'filled') {
diff --git a/packages/blade/src/components/Tabs/TabItem.web.tsx b/packages/blade/src/components/Tabs/TabItem.web.tsx
index 5293b30a248..71335ea4097 100644
--- a/packages/blade/src/components/Tabs/TabItem.web.tsx
+++ b/packages/blade/src/components/Tabs/TabItem.web.tsx
@@ -88,11 +88,11 @@ const StyledTabButton = styled.button<{
},
transitionProperty: 'all',
- transitionTimingFunction: castWebType(theme.motion.easing.standard.effective),
+ transitionTimingFunction: castWebType(theme.motion.easing.standard),
transitionDuration: castWebType(makeMotionTime(theme.motion.duration.gentle)),
'*': {
transitionProperty: 'color, fill',
- transitionTimingFunction: castWebType(theme.motion.easing.standard.effective),
+ transitionTimingFunction: castWebType(theme.motion.easing.standard),
transitionDuration: castWebType(makeMotionTime(theme.motion.duration.xquick)),
},
};
diff --git a/packages/blade/src/components/Tag/AnimatedTag.native.tsx b/packages/blade/src/components/Tag/AnimatedTag.native.tsx
index b8d51273536..635db1201e0 100644
--- a/packages/blade/src/components/Tag/AnimatedTag.native.tsx
+++ b/packages/blade/src/components/Tag/AnimatedTag.native.tsx
@@ -40,7 +40,7 @@ const useAnimatedTag = (
},
100: {
opacity: TAG_OPACITY_START,
- easing: (theme.motion.easing.exit.effective as unknown) as EasingFn,
+ easing: (theme.motion.easing.exit as unknown) as EasingFn,
},
}).duration(makeMotionTime(theme.motion.duration.xquick));
@@ -49,7 +49,7 @@ const useAnimatedTag = (
TAG_MAX_WIDTH_END,
{
duration: makeMotionTime(theme.motion.duration.xquick),
- easing: castNativeType(theme.motion.easing.exit.effective),
+ easing: castNativeType(theme.motion.easing.exit),
},
(isComplete) => {
if (isComplete) {
diff --git a/packages/blade/src/components/Tag/AnimatedTag.web.tsx b/packages/blade/src/components/Tag/AnimatedTag.web.tsx
index fcb87568d64..b0b27aa7251 100644
--- a/packages/blade/src/components/Tag/AnimatedTag.web.tsx
+++ b/packages/blade/src/components/Tag/AnimatedTag.web.tsx
@@ -61,12 +61,12 @@ const AnimatedTag = ({
const hideTagTransition = css`
animation: ${tagDissappearKeyframe} ${makeMotionTime(theme.motion.duration.xquick)}
- ${String(theme.motion.easing.exit.effective)};
+ ${String(theme.motion.easing.exit)};
`;
const showTagTransition = css`
animation: ${tagShowKeyframe} ${makeMotionTime(theme.motion.duration.xquick)}
- ${String(theme.motion.easing.entrance.effective)};
+ ${String(theme.motion.easing.entrance)};
`;
return (
diff --git a/packages/blade/src/components/Toast/Toast.web.tsx b/packages/blade/src/components/Toast/Toast.web.tsx
index 7c4bfba4227..d368dc02e26 100644
--- a/packages/blade/src/components/Toast/Toast.web.tsx
+++ b/packages/blade/src/components/Toast/Toast.web.tsx
@@ -108,13 +108,13 @@ const Toast = ({
const enter = css`
opacity: 0;
animation: ${slideIn} ${makeMotionTime(theme.motion.duration.gentle)}
- ${castWebType(theme.motion.easing.entrance.effective)} forwards;
+ ${castWebType(theme.motion.easing.entrance)} forwards;
`;
const exit = css`
opacity: 1;
animation: ${slideOut} ${makeMotionTime(theme.motion.duration.moderate)}
- ${castWebType(theme.motion.easing.exit.effective)} forwards;
+ ${castWebType(theme.motion.easing.exit)} forwards;
`;
return (
diff --git a/packages/blade/src/components/Toast/ToastContainer.web.tsx b/packages/blade/src/components/Toast/ToastContainer.web.tsx
index 38856a93d7a..e77e1d63a74 100644
--- a/packages/blade/src/components/Toast/ToastContainer.web.tsx
+++ b/packages/blade/src/components/Toast/ToastContainer.web.tsx
@@ -77,9 +77,7 @@ const getPositionStyle = (
display: 'flex',
position: 'absolute',
transformOrigin: 'center',
- transition: `${makeMotionTime(theme.motion.duration.gentle)} ${
- theme.motion.easing.standard.effective
- }`,
+ transition: `${makeMotionTime(theme.motion.duration.gentle)} ${theme.motion.easing.standard}`,
transitionProperty: 'transform, opacity, height',
transform: `translateY(${offset * (top ? 1 : -1)}px) scale(${scale})`,
...verticalStyle,
diff --git a/packages/blade/src/components/Tooltip/TooltipContentWrapper.native.tsx b/packages/blade/src/components/Tooltip/TooltipContentWrapper.native.tsx
index deb296cf6a7..f8f6a2de1f8 100644
--- a/packages/blade/src/components/Tooltip/TooltipContentWrapper.native.tsx
+++ b/packages/blade/src/components/Tooltip/TooltipContentWrapper.native.tsx
@@ -35,7 +35,7 @@ const TooltipContentWrapper = React.forwardRef
const translate = useSharedValue(offset);
const opacity = useSharedValue(0);
- const easing = (theme.motion.easing.entrance.effective as unknown) as EasingFn;
+ const easing = (theme.motion.easing.entrance as unknown) as EasingFn;
const duration = theme.motion.duration.quick;
React.useEffect(() => {
diff --git a/packages/blade/src/components/TopNav/TabNav/TabNavItem.web.tsx b/packages/blade/src/components/TopNav/TabNav/TabNavItem.web.tsx
index f911864bc2a..45b4ede9a4f 100644
--- a/packages/blade/src/components/TopNav/TabNav/TabNavItem.web.tsx
+++ b/packages/blade/src/components/TopNav/TabNav/TabNavItem.web.tsx
@@ -76,9 +76,7 @@ const StyledTabNavItemWrapper = styled(BaseBox)<{
borderBottomWidth: 0,
borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),
borderTopRightRadius: makeBorderSize(theme.border.radius.medium),
- transition: `${makeMotionTime(theme.motion.duration.moderate)} ${
- theme.motion.easing.standard.effective
- }`,
+ transition: `${makeMotionTime(theme.motion.duration.moderate)} ${theme.motion.easing.standard}`,
transitionProperty: 'background',
// Hide the left and right divider by overlaying them with a pseudo element as same color as the background
@@ -109,9 +107,7 @@ const SelectedBar = styled(BaseBox)<{ isActive?: boolean }>(({ theme, isActive }
pointerEvents: 'none',
// Animation
opacity: isActive ? 1 : 0,
- transition: `${makeMotionTime(theme.motion.duration.moderate)} ${
- theme.motion.easing.standard.effective
- }`,
+ transition: `${makeMotionTime(theme.motion.duration.moderate)} ${theme.motion.easing.standard}`,
transitionProperty: 'opacity',
};
});
diff --git a/packages/blade/src/storybook-recipes/ThemePlayground/Checkout/CheckoutHome.tsx b/packages/blade/src/storybook-recipes/ThemePlayground/Checkout/CheckoutHome.tsx
index eb659180aa7..948edf3a958 100644
--- a/packages/blade/src/storybook-recipes/ThemePlayground/Checkout/CheckoutHome.tsx
+++ b/packages/blade/src/storybook-recipes/ThemePlayground/Checkout/CheckoutHome.tsx
@@ -64,7 +64,7 @@ const ClickableRow = styled.button(({ theme }) => ({
width: '100%',
borderBottom: `2px solid ${theme.colors.surface.border.gray.muted}`,
transition: `background-color ${makeMotionTime(theme.motion.duration.gentle)} ${
- theme.motion.easing.standard.revealing
+ theme.motion.easing.emphasized
}}`,
padding: `${makeSpace(theme.spacing[4])} ${makeSpace(theme.spacing[4])}`,
'&:hover': {
diff --git a/packages/blade/src/tokens/global/motion.ts b/packages/blade/src/tokens/global/motion.ts
index 9ec06b2174c..aab4bf6c6c2 100644
--- a/packages/blade/src/tokens/global/motion.ts
+++ b/packages/blade/src/tokens/global/motion.ts
@@ -1,37 +1,42 @@
-import type { DotNotationMotionStringToken } from '~utils/types';
import type { Platform } from '~utils';
import { makeBezier } from '~utils/makeBezier';
type Duration = {
- /** `70` milliseconds */
- '2xquick': 70;
- /** `150` milliseconds */
- xquick: 150;
+ /** `80` milliseconds */
+ '2xquick': 80;
+ /** `160` milliseconds */
+ xquick: 160;
/** `200` milliseconds */
quick: 200;
- /** `250` milliseconds */
- moderate: 250;
- /** `300` milliseconds */
- xmoderate: 300;
- /** `400` milliseconds */
- gentle: 400;
- /** `600` milliseconds */
- xgentle: 600;
- /** `900` milliseconds */
- '2xgentle': 900;
+ /** `280` milliseconds */
+ moderate: 280;
+ /** `360` milliseconds */
+ xmoderate: 360;
+ /** `480` milliseconds */
+ gentle: 480;
+ /** `640` milliseconds */
+ xgentle: 640;
+ /** `960` milliseconds */
+ '2xgentle': 960;
};
type Delay = {
- /** `70` milliseconds */
- '2xshort': 70;
- /** `120` milliseconds */
- xshort: 120;
- /** `180` milliseconds */
- short: 180;
+ /** `80` milliseconds */
+ '2xquick': 80;
+ /** `160` milliseconds */
+ xquick: 160;
+ /** `280` milliseconds */
+ moderate: 280;
+ /** `480` milliseconds */
+ gentle: 480;
+ /** `960` milliseconds */
+ xgentle: 960;
+ /** `2000` milliseconds */
+ long: 2000;
/** `3000` milliseconds */
- long: 3000;
+ xlong: 3000;
/** `5000` milliseconds */
- xlong: 5000;
+ '2xlong': 5000;
};
export type EasingFactoryFn = { factory: () => (value: number) => number }; // similar to EasingFactoryFn of `react-native-reanimated`
@@ -41,55 +46,68 @@ export type EasingType = Platform.Select<{
}>;
type Easing = {
- /** Easings for all standard animations*/
- standard: {
- /** `cubic-bezier(0.5, 0, 0.3, 1.5)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- attentive: EasingType<'cubic-bezier(0.5, 0, 0.3, 1.5)'>;
- /** `cubic-bezier(0.3, 0, 0.2, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- effective: EasingType<'cubic-bezier(0.3, 0, 0.2, 1)'>;
- /** `cubic-bezier(0.5, 0, 0, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- revealing: EasingType<'cubic-bezier(0.5, 0, 0, 1)'>;
- /** `cubic-bezier(1, 0.5, 0, 0.5)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- wary: EasingType<'cubic-bezier(1, 0.5, 0, 0.5)'>;
- };
- /** Easings for all entrance animations*/
- entrance: {
- /** `cubic-bezier(0.5, 0, 0.3, 1.5)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- attentive: EasingType<'cubic-bezier(0.5, 0, 0.3, 1.5)'>;
- /** `cubic-bezier(0, 0, 0.2, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- effective: EasingType<'cubic-bezier(0, 0, 0.2, 1)'>;
- /** `cubic-bezier(0, 0, 0, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- revealing: EasingType<'cubic-bezier(0, 0, 0, 1)'>;
- };
- /** Easings for all exit animations*/
- exit: {
- /** `cubic-bezier(0.7, 0, 0.5, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- attentive: EasingType<'cubic-bezier(0.7, 0, 0.5, 1)'>;
- /** `cubic-bezier(0.17, 0, 1, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- effective: EasingType<'cubic-bezier(0.17, 0, 1, 1)'>;
- /** `cubic-bezier(0.5, 0, 1, 1)`
- *
- * Returns a `string` of `"cubic-bezier(...)"` for web & react-native-reanimated's Easing Function of type `EasingFactoryFn` for native */
- revealing: EasingType<'cubic-bezier(0.5, 0, 1, 1)'>;
- };
+ /**
+ * Linear Easing
+ *
+ * Use Case: Marquee, Progress Bar, etc
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ linear: EasingType<'cubic-bezier(0, 0, 0, 0)'>;
+
+ /**
+ * Entrance Animation Easing
+ *
+ * Use Case: Entry of modals, drawer, dropdown, etc
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ entrance: EasingType<'cubic-bezier(0, 0, 0.2, 1)'>;
+
+ /**
+ * Exit Animation Easing
+ *
+ * Use Case: Exit of modals, drawer, dropdown, etc
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ exit: EasingType<'cubic-bezier(0.17, 0, 1, 1)'>;
+
+ /**
+ * Standard Easing
+ *
+ * Use Case: Morph
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ standard: EasingType<'cubic-bezier(0.3, 0, 0.2, 1)'>;
+
+ /**
+ * Emphasized Easing
+ *
+ * Use Case: Hover states of interactive items
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ emphasized: EasingType<'cubic-bezier(0.5, 0, 0, 1)'>;
+
+ /**
+ * Overshoot Easing
+ *
+ * Use Case: Toast notifications
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ overshoot: EasingType<'cubic-bezier(0.5, 0, 0.3, 1.5)'>;
+
+ /**
+ * Error Easing
+ *
+ * Use Case: Error States
+ *
+ * Returns cubic-bezier string in web and EasingFactoryFn of react-native-reanimated in native
+ */
+ shake: EasingType<'cubic-bezier(1, 0.5, 0, 0.5)'>;
};
export type Motion = Readonly<{
@@ -98,47 +116,41 @@ export type Motion = Readonly<{
easing: Easing;
}>;
-export type EasingString = `easing.${DotNotationMotionStringToken}`;
+export type EasingString = `easing.${keyof Easing}`;
export type DurationString = `duration.${keyof Duration}`;
export type DelayString = `delay.${keyof Delay}`;
const delay: Delay = {
- '2xshort': 70,
- xshort: 120,
- short: 180,
- long: 3000,
- xlong: 5000,
+ '2xquick': 80,
+ xquick: 160,
+ moderate: 280,
+ gentle: 480,
+ xgentle: 960,
+ long: 2000,
+ xlong: 3000,
+ '2xlong': 5000,
};
const duration: Duration = {
- '2xquick': 70,
- xquick: 150,
+ '2xquick': 80,
+ xquick: 160,
quick: 200,
- moderate: 250,
- xmoderate: 300,
- gentle: 400,
- xgentle: 600,
- '2xgentle': 900,
+ moderate: 280,
+ xmoderate: 360,
+ gentle: 480,
+ xgentle: 640,
+ '2xgentle': 960,
};
/* makeBezier returns a string of `cubic-bezier()` for web & a react-native-reanimated Easing Function of type `EasingFactoryFn` for native */
const easing: Easing = {
- standard: {
- attentive: makeBezier(0.5, 0, 0.3, 1.5),
- effective: makeBezier(0.3, 0, 0.2, 1),
- revealing: makeBezier(0.5, 0, 0, 1),
- wary: makeBezier(1, 0.5, 0, 0.5),
- },
- entrance: {
- attentive: makeBezier(0.5, 0, 0.3, 1.5),
- effective: makeBezier(0, 0, 0.2, 1),
- revealing: makeBezier(0, 0, 0, 1),
- },
- exit: {
- attentive: makeBezier(0.7, 0, 0.5, 1),
- effective: makeBezier(0.17, 0, 1, 1),
- revealing: makeBezier(0.5, 0, 1, 1),
- },
+ linear: makeBezier(0, 0, 0, 0),
+ entrance: makeBezier(0, 0, 0.2, 1),
+ exit: makeBezier(0.17, 0, 1, 1),
+ standard: makeBezier(0.3, 0, 0.2, 1),
+ emphasized: makeBezier(0.5, 0, 0, 1),
+ overshoot: makeBezier(0.5, 0, 0.3, 1.5),
+ shake: makeBezier(1, 0.5, 0, 0.5),
};
export const motion: Motion = {
diff --git a/packages/blade/src/utils/getFocusRingStyles/getFocusRingStyles.web.ts b/packages/blade/src/utils/getFocusRingStyles/getFocusRingStyles.web.ts
index ff3907c160d..415855f1ec7 100644
--- a/packages/blade/src/utils/getFocusRingStyles/getFocusRingStyles.web.ts
+++ b/packages/blade/src/utils/getFocusRingStyles/getFocusRingStyles.web.ts
@@ -18,7 +18,7 @@ function getFocusRingStyles({
outlineOffset: `${negativeOffset ? '-4px' : '1px'}${important}`,
transitionProperty: 'outline-width',
transitionDuration: castWebType(makeMotionTime(theme.motion.duration['2xquick'])),
- transitionTimingFunction: castWebType(theme.motion.easing.standard.effective),
+ transitionTimingFunction: castWebType(theme.motion.easing.standard),
} as const;
}
diff --git a/packages/blade/src/utils/makeMotionTime/makeMotionTime.native.test.ts b/packages/blade/src/utils/makeMotionTime/makeMotionTime.native.test.ts
index b9425a60478..190570a89c3 100644
--- a/packages/blade/src/utils/makeMotionTime/makeMotionTime.native.test.ts
+++ b/packages/blade/src/utils/makeMotionTime/makeMotionTime.native.test.ts
@@ -8,7 +8,7 @@ describe('makeMotionTime', () => {
});
it('should return the delay value in `number`', () => {
- const delay = makeMotionTime(motion.delay.short);
- expect(delay).toEqual(180);
+ const delay = makeMotionTime(motion.delay.xquick);
+ expect(delay).toEqual(160);
});
});
diff --git a/packages/blade/src/utils/makeMotionTime/makeMotionTime.web.test.ts b/packages/blade/src/utils/makeMotionTime/makeMotionTime.web.test.ts
index 33752302787..4af65c24ef1 100644
--- a/packages/blade/src/utils/makeMotionTime/makeMotionTime.web.test.ts
+++ b/packages/blade/src/utils/makeMotionTime/makeMotionTime.web.test.ts
@@ -4,11 +4,11 @@ import { motion } from '~tokens/global';
describe('makeMotionTime', () => {
it('should return the duration value in `ms`', () => {
const duration = makeMotionTime(motion.duration.moderate);
- expect(duration).toEqual('250ms');
+ expect(duration).toEqual('280ms');
});
it('should return the delay value in `ms`', () => {
- const delay = makeMotionTime(motion.delay.short);
- expect(delay).toEqual('180ms');
+ const delay = makeMotionTime(motion.delay.xquick);
+ expect(delay).toEqual('160ms');
});
});
diff --git a/packages/plugin-figma-blade-coverage/manifest.json b/packages/plugin-figma-blade-coverage/manifest.json
index 85481a50ef2..ea001995fa2 100644
--- a/packages/plugin-figma-blade-coverage/manifest.json
+++ b/packages/plugin-figma-blade-coverage/manifest.json
@@ -1,14 +1,10 @@
{
"api": "1.0.0",
- "editorType": [
- "figma"
- ],
+ "editorType": ["figma"],
"id": "1258393250170675750",
"name": "Blade Coverage",
"main": "build/main.js",
"ui": "build/ui.js",
- "permissions": [
- "currentuser"
- ],
+ "permissions": ["currentuser"],
"enablePrivatePluginApi": true
}
diff --git a/packages/widget-figma-dev-handoff-checklist/dev-handoff-checklist/manifest.json b/packages/widget-figma-dev-handoff-checklist/dev-handoff-checklist/manifest.json
index 660b73bc005..359b90ae20f 100644
--- a/packages/widget-figma-dev-handoff-checklist/dev-handoff-checklist/manifest.json
+++ b/packages/widget-figma-dev-handoff-checklist/dev-handoff-checklist/manifest.json
@@ -6,17 +6,11 @@
"capabilities": [],
"enableProposedApi": false,
"documentAccess": "dynamic-page",
- "editorType": [
- "figma"
- ],
+ "editorType": ["figma"],
"containsWidget": true,
"widgetApi": "1.0.0",
- "permissions": [
- "currentuser"
- ],
+ "permissions": ["currentuser"],
"networkAccess": {
- "allowedDomains": [
- "https://api.segment.io"
- ]
+ "allowedDomains": ["https://api.segment.io"]
}
-}
\ No newline at end of file
+}
diff --git a/packages/widget-figma-dev-handoff-checklist/snowflake-handoff-checklist/manifest.json b/packages/widget-figma-dev-handoff-checklist/snowflake-handoff-checklist/manifest.json
index d00a4ccff8b..c69d09ccb1e 100644
--- a/packages/widget-figma-dev-handoff-checklist/snowflake-handoff-checklist/manifest.json
+++ b/packages/widget-figma-dev-handoff-checklist/snowflake-handoff-checklist/manifest.json
@@ -9,12 +9,8 @@
"editorType": ["figma"],
"containsWidget": true,
"widgetApi": "1.0.0",
- "permissions": [
- "currentuser"
- ],
+ "permissions": ["currentuser"],
"networkAccess": {
- "allowedDomains": [
- "https://api.segment.io"
- ]
+ "allowedDomains": ["https://api.segment.io"]
}
}
diff --git a/packages/widget-figma-dev-handoff-checklist/tsconfig.json b/packages/widget-figma-dev-handoff-checklist/tsconfig.json
index fd705d83c1e..c0ca991122d 100644
--- a/packages/widget-figma-dev-handoff-checklist/tsconfig.json
+++ b/packages/widget-figma-dev-handoff-checklist/tsconfig.json
@@ -11,8 +11,12 @@
"strict": true,
"skipLibCheck": true,
"typeRoots": ["node_modules/@figma", "node_modules/@types"],
- "target": "ESNext",
+ "target": "ESNext"
},
- "include": ["components/**/*.tsx", "dev-handoff-checklist/**/*.tsx", "snowflake-handoff-checklist/**/*.tsx"],
+ "include": [
+ "components/**/*.tsx",
+ "dev-handoff-checklist/**/*.tsx",
+ "snowflake-handoff-checklist/**/*.tsx"
+ ],
"exclude": ["node_modules"]
}