import { PresEffect, PresEffectDirection, PresMovement } from './PresEnums'; /** * Utilities like enums and interfaces for spring-based transitions. */ export const springPreviewColors = ['rgb(37, 161, 255)', 'rgb(99, 37, 255)', 'rgb(182, 37, 255)', 'rgb(255, 37, 168)']; // the type of slide effect timing (spring-driven) export enum SpringType { GENTLE = 'gentle', QUICK = 'quick', BOUNCY = 'bouncy', CUSTOM = 'custom', } // settings that control slide effect spring settings export interface SpringSettings { type: SpringType; stiffness: number; damping: number; mass: number; } // Overall config // Keeps these settings in sync with the AnimationSettings interface (used by gpt); export enum AnimationSettingsProperties { effect = 'effect', direction = 'direction', stiffness = 'stiffness', damping = 'damping', mass = 'mass', } export interface AnimationSettings { effect: PresEffect; direction: PresEffectDirection; stiffness: number; damping: number; mass: number; } // Options in the movement easing dropdown export const easeItems = [ { text: 'Ease', val: 'ease', }, { text: 'Ease In', val: 'ease-in', }, { text: 'Ease Out', val: 'ease-out', }, { text: 'Ease In Out', val: 'ease-in-out', }, { text: 'Linear', val: 'linear', }, { text: 'Custom', val: 'custom', }, ]; // Options in the movement type dropdown export const movementItems = [ { text: 'None', val: PresMovement.None }, { text: 'Center', val: PresMovement.Center }, { text: 'Zoom', val: PresMovement.Zoom }, { text: 'Pan', val: PresMovement.Pan }, { text: 'Jump', val: PresMovement.Jump }, ]; // Items in the slide effect dropdown export const effectItems = Object.values(PresEffect) .filter(v => isNaN(Number(v))) .map(effect => ({ text: effect, val: effect, })); // Maps each PresEffect to the default timing configuration export const presEffectDefaultTimings: { [key: string]: SpringSettings; } = { Expand: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1 }, Bounce: { type: SpringType.BOUNCY, stiffness: 600, damping: 15, mass: 1, }, Lightspeed: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1, }, Fade: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1, }, Flip: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1, }, Rotate: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1, }, Roll: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1, }, None: { type: SpringType.GENTLE, stiffness: 100, damping: 15, mass: 1, }, }; // Dropdown items of timings for the effect export const effectTimings = [ { text: 'Gentle', val: SpringType.GENTLE, }, { text: 'Quick', val: SpringType.QUICK, }, { text: 'Bouncy', val: SpringType.BOUNCY, }, { text: 'Custom', val: SpringType.CUSTOM, }, ]; // Maps spring names to spring parameters export const springMappings: { [key: string]: { stiffness: number; damping: number; mass: number }; } = { default: { stiffness: 600, damping: 15, mass: 1, }, gentle: { stiffness: 100, damping: 15, mass: 1, }, quick: { stiffness: 300, damping: 20, mass: 1, }, bouncy: { stiffness: 600, damping: 15, mass: 1, }, custom: { stiffness: 100, damping: 10, mass: 1, }, };