42 lines
997 B
TypeScript
42 lines
997 B
TypeScript
interface SidebarAnimationSyncInput {
|
|
previousIsOpen: boolean;
|
|
nextIsOpen: boolean;
|
|
previousWindowWidth: number;
|
|
nextWindowWidth: number;
|
|
}
|
|
|
|
interface SidebarAnimationTargetInput {
|
|
isOpen: boolean;
|
|
windowWidth: number;
|
|
}
|
|
|
|
interface SidebarAnimationTargets {
|
|
translateX: number;
|
|
backdropOpacity: number;
|
|
}
|
|
|
|
export function shouldSyncSidebarAnimation(input: SidebarAnimationSyncInput): boolean {
|
|
return (
|
|
input.previousIsOpen !== input.nextIsOpen ||
|
|
input.previousWindowWidth !== input.nextWindowWidth
|
|
);
|
|
}
|
|
|
|
export function getLeftSidebarAnimationTargets(
|
|
input: SidebarAnimationTargetInput,
|
|
): SidebarAnimationTargets {
|
|
return {
|
|
translateX: input.isOpen ? 0 : -input.windowWidth,
|
|
backdropOpacity: input.isOpen ? 1 : 0,
|
|
};
|
|
}
|
|
|
|
export function getRightSidebarAnimationTargets(
|
|
input: SidebarAnimationTargetInput,
|
|
): SidebarAnimationTargets {
|
|
return {
|
|
translateX: input.isOpen ? 0 : input.windowWidth,
|
|
backdropOpacity: input.isOpen ? 1 : 0,
|
|
};
|
|
}
|