{"version":3,"sources":["../src/transition-utils.ts"],"sourcesContent":["import type { Target, TargetAndTransition, Transition } from \"framer-motion\"\n\nexport type TransitionProperties = {\n  /**\n   * Custom `transition` definition for `enter` and `exit`\n   */\n  transition?: TransitionConfig\n  /**\n   * Custom `transitionEnd` definition for `enter` and `exit`\n   */\n  transitionEnd?: TransitionEndConfig\n  /**\n   * Custom `delay` definition for `enter` and `exit`\n   */\n  delay?: number | DelayConfig\n}\n\ntype TargetResolver<P = {}> = (\n  props: P & TransitionProperties,\n) => TargetAndTransition\n\ntype Variant<P = {}> = TargetAndTransition | TargetResolver<P>\n\nexport type Variants<P = {}> = {\n  enter: Variant<P>\n  exit: Variant<P>\n  initial?: Variant<P>\n}\n\ntype WithMotionState<P> = Partial<Record<\"enter\" | \"exit\", P>>\n\nexport type TransitionConfig = WithMotionState<Transition>\n\nexport type TransitionEndConfig = WithMotionState<Target>\n\nexport type DelayConfig = WithMotionState<number>\n\nexport const TRANSITION_EASINGS = {\n  ease: [0.25, 0.1, 0.25, 1],\n  easeIn: [0.4, 0, 1, 1],\n  easeOut: [0, 0, 0.2, 1],\n  easeInOut: [0.4, 0, 0.2, 1],\n} as const\n\nexport const TRANSITION_VARIANTS = {\n  scale: {\n    enter: { scale: 1 },\n    exit: { scale: 0.95 },\n  },\n  fade: {\n    enter: { opacity: 1 },\n    exit: { opacity: 0 },\n  },\n  pushLeft: {\n    enter: { x: \"100%\" },\n    exit: { x: \"-30%\" },\n  },\n  pushRight: {\n    enter: { x: \"-100%\" },\n    exit: { x: \"30%\" },\n  },\n  pushUp: {\n    enter: { y: \"100%\" },\n    exit: { y: \"-30%\" },\n  },\n  pushDown: {\n    enter: { y: \"-100%\" },\n    exit: { y: \"30%\" },\n  },\n  slideLeft: {\n    position: { left: 0, top: 0, bottom: 0, width: \"100%\" },\n    enter: { x: 0, y: 0 },\n    exit: { x: \"-100%\", y: 0 },\n  },\n  slideRight: {\n    position: { right: 0, top: 0, bottom: 0, width: \"100%\" },\n    enter: { x: 0, y: 0 },\n    exit: { x: \"100%\", y: 0 },\n  },\n  slideUp: {\n    position: { top: 0, left: 0, right: 0, maxWidth: \"100vw\" },\n    enter: { x: 0, y: 0 },\n    exit: { x: 0, y: \"-100%\" },\n  },\n  slideDown: {\n    position: { bottom: 0, left: 0, right: 0, maxWidth: \"100vw\" },\n    enter: { x: 0, y: 0 },\n    exit: { x: 0, y: \"100%\" },\n  },\n}\n\nexport type SlideDirection = \"top\" | \"left\" | \"bottom\" | \"right\"\n\nexport function getSlideTransition(options?: { direction?: SlideDirection }) {\n  const side = options?.direction ?? \"right\"\n  switch (side) {\n    case \"right\":\n      return TRANSITION_VARIANTS.slideRight\n    case \"left\":\n      return TRANSITION_VARIANTS.slideLeft\n    case \"bottom\":\n      return TRANSITION_VARIANTS.slideDown\n    case \"top\":\n      return TRANSITION_VARIANTS.slideUp\n    default:\n      return TRANSITION_VARIANTS.slideRight\n  }\n}\n\nexport const TRANSITION_DEFAULTS = {\n  enter: {\n    duration: 0.2,\n    ease: TRANSITION_EASINGS.easeOut,\n  },\n  exit: {\n    duration: 0.1,\n    ease: TRANSITION_EASINGS.easeIn,\n  },\n} as const\n\nexport type WithTransitionConfig<P extends object> = Omit<P, \"transition\"> &\n  TransitionProperties & {\n    /**\n     * If `true`, the element will unmount when `in={false}` and animation is done\n     */\n    unmountOnExit?: boolean\n    /**\n     * Show the component; triggers when enter or exit states\n     */\n    in?: boolean\n  }\n\nexport const withDelay = {\n  enter: (\n    transition: Transition,\n    delay?: number | DelayConfig,\n  ): Transition & { delay: number | undefined } => ({\n    ...transition,\n    delay: typeof delay === \"number\" ? delay : delay?.[\"enter\"],\n  }),\n  exit: (\n    transition: Transition,\n    delay?: number | DelayConfig,\n  ): Transition & { delay: number | undefined } => ({\n    ...transition,\n    delay: typeof delay === \"number\" ? delay : delay?.[\"exit\"],\n  }),\n}\n"],"mappings":"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","names":[]}