{"version":3,"file":"el-animate.cjs","sources":["../src/animate/config.ts","../src/helpers/utils.ts","../src/animate/animation-status.ts","../src/helpers/class-list.ts","../src/animate/state.ts","../src/animate/animation-information.ts","../src/helpers/enum.ts","../src/animate/animation-end-handler.ts","../src/animate/animate.ts","../src/cancel-animation.ts"],"sourcesContent":["import type { AnimationTypeUnion } from '../helpers/enum';\n\ntype Callback = (elem: HTMLElement, currentConfig: ResolvedConfig) => void;\n\nexport interface ElAnimateOptions {\n  classNames?: {\n    /**\n     * If you specify prefix, all classnames except `final` will automatically be generated with this prefix.\n     * *You can overwrite any prefixed classname, if you specify it (including that case, when you specify empty classname).*\n     * @example\n     * prefix: 'animation',\n     * classnames.initial: 'animation-initial',\n     * classnames.from: 'animation-from'...\n     * @default\n     * undefined\n     */\n    prefix?: string;\n    /**\n     * ClassName which element contains before animation starts and should be deleted when animation starts\n     * @default ''\n     */\n    initial?: string;\n    /**\n     * From wich point animation should be started\n     * (Adds: 1st frame, Removes: 2nd frame)\n     * @default ''\n     */\n    from?: string;\n    /**\n     * ClassName which element contains during the whole animation.\n     * Usually there you write `animation` or `transition` css properties.\n     * (on: 1st frame, off: last frame)\n     * @default ''\n     */\n    active?: string;\n    /**\n     * Final animation point. Note: If you want the element to have `to` state after animation end, then set `final` classname the same as `to`\n     * (on: 2nd frame, off: last frame)\n     * @default ''\n     */\n    to?: string;\n    /**\n     * ClassName which element contains after animation ends\n     * @default ''\n     */\n    final?: string;\n  };\n  /**\n   * This property is necessary for correct animation end detecting\n   */\n  animation?: {\n    /**\n     * When you add animations with css, you can do this either with `transition` or with `animation` property\n     * By default ElAnimate adds both `transitionend` and `animationend` handlers\n     * You should choose one of this for correct animation end detecting if you have problems.\n     * As a last resort, you can set `animation.name`\n     * @default 'both'\n     */\n    type?: AnimationTypeUnion | 'both';\n    /**\n     * if you have several animation, you can additionally set `animation.name` field in config\n     * Then ElAnimate can properly detect animation end with this animation name.\n     * You should type the same string as in @keyframes\n     */\n    name?: string | undefined;\n  };\n  callbacks?: {\n    /**\n     * Called before animation start, element has `initial` classname\n     */\n    beforeStart?: Callback;\n    /**\n     * Called when animation initialized: element has `from` classname, animation end handling added\n     */\n    fromStateSet?: Callback;\n    /**\n     * Called when element has `to` classname\n     */\n    toStateSet?: Callback;\n    /**\n     * Called when animation ended, element has `final` classname\n     */\n    afterEnd?: Callback;\n  };\n  /**\n   * You can set what should el-animate do, if new animate function called, but the element is currently animating\n   * - `block` means that we should abort new animation calls, while the element is animation\n   * - `restart` means that we should stop current animation and start the new one\n   * - `replaceToState` means that we only replace final points of animation\n   * (el-animate replaces `to` className and animation end handler). **Useful if `animation.type` is `transition`.\n   * Then the animation continues without interruption (See examples on github)**\n   * @default 'restart'\n   */\n  multiCallHandling?: 'block' | 'restart' | 'replaceToState';\n}\n\nconst defaultCallback: Callback = () => undefined;\n\nexport type ResolvedConfig = ReturnType<typeof getConfig>;\n\nexport function getConfig(options: ElAnimateOptions) {\n  const prefix = options.classNames?.prefix;\n\n  return {\n    // prettier-ignore\n    classNames: {\n      prefix:  options.classNames?.prefix,\n      initial: options.classNames?.initial || (prefix ? `${prefix}-initial` : ''),\n      from:    options.classNames?.from    || (prefix ? `${prefix}-from`    : ''),\n      active:  options.classNames?.active  || (prefix ? `${prefix}-active`  : ''),\n      to:      options.classNames?.to      || (prefix ? `${prefix}-to`      : ''),\n      final:   options.classNames?.final   || '',\n    },\n    animation: {\n      type: options.animation?.type || 'both',\n      name: options.animation?.name,\n    },\n    callbacks: {\n      beforeStart: options.callbacks?.beforeStart || defaultCallback,\n      fromStateSet: options.callbacks?.fromStateSet || defaultCallback,\n      toStateSet: options.callbacks?.toStateSet || defaultCallback,\n      afterEnd: options.callbacks?.afterEnd || defaultCallback,\n    },\n    multiCallHandling: options.multiCallHandling || 'restart',\n  };\n}\n","/** Fully render frame at first and then run callback */\nexport function nextFrame(callback: () => void) {\n  window.requestAnimationFrame(() => {\n    window.requestAnimationFrame(callback);\n  });\n}\n\nexport type EnumValues<T> = T[keyof T];\n","import { EnumValues } from '../helpers/utils';\n\nconst ANIMATION_STATUS_ATTRIBUTE = 'data-el-animate-status';\n\nexport const AnimationStatus = {\n  START: 'start',\n  ANIMATING: 'animating',\n} as const;\n\ntype AnimationStatusUnion = EnumValues<typeof AnimationStatus>;\n\nexport function setAnimationStatus(elem: HTMLElement, status: AnimationStatusUnion) {\n  elem.setAttribute(ANIMATION_STATUS_ATTRIBUTE, status);\n}\n\nexport function getAnimationStatus(elem: HTMLElement): AnimationStatusUnion | null {\n  return elem.getAttribute(ANIMATION_STATUS_ATTRIBUTE) as AnimationStatusUnion;\n}\n\nexport function clearAnimationStatus(elem: HTMLElement) {\n  elem.removeAttribute(ANIMATION_STATUS_ATTRIBUTE);\n}\n","const cl = {\n  add: (elem: HTMLElement, ...classNames: string[]) => {\n    classNames.forEach((className) => {\n      if (className.length !== 0) {\n        elem.classList.add(...className.split(' '));\n      }\n    });\n  },\n  remove: (elem: HTMLElement, ...classNames: string[]) => {\n    classNames.forEach((className) => {\n      if (className.length !== 0) {\n        elem.classList.remove(...className.split(' '));\n      }\n    });\n  },\n};\n\nexport default cl;\n","import cl from '../helpers/class-list';\nimport { ResolvedConfig } from './config';\nimport { clearAnimationStatus, setAnimationStatus, AnimationStatus } from './animation-status';\n\nexport function setFromState(elem: HTMLElement, classNames: ResolvedConfig['classNames']) {\n  const { initial, from, active, to, final } = classNames;\n\n  cl.remove(elem, initial, active, to, final);\n  cl.add(elem, from);\n\n  setAnimationStatus(elem, AnimationStatus.START);\n}\n\nexport function setToState(elem: HTMLElement, classNames: ResolvedConfig['classNames']) {\n  const { initial, from, active, to, final } = classNames;\n\n  cl.remove(elem, initial, from, final);\n  cl.add(elem, active, to);\n\n  setAnimationStatus(elem, AnimationStatus.ANIMATING);\n}\n\nexport function setFinalState(elem: HTMLElement, classNames: ResolvedConfig['classNames']) {\n  const { initial, from, active, to, final } = classNames;\n\n  cl.remove(elem, initial, from, active, to);\n  cl.add(elem, final);\n\n  clearAnimationStatus(elem);\n}\n\nexport function setIdleState(elem: HTMLElement, classNames: ResolvedConfig['classNames']) {\n  const { initial, from, active, to, final } = classNames;\n\n  cl.remove(elem, initial, from, active, to, final);\n\n  clearAnimationStatus(elem);\n}\n","import { ResolvedConfig } from './config';\n\nconst ANIMATION_END_HANDLER_PROPERTY = '__elAnimateAnimationEndHandler';\nconst ANIMATION_END_PROPERTY_SETTINGS: PropertyDescriptor = {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n};\n\ntype AnimationEndHandler = (evt: AnimationEvent | TransitionEvent) => void;\n\ntype EventListenerHandler = {\n  function: AnimationEndHandler;\n  eventName: AnimationEndEvent;\n};\n\ntype AnimationInformation = {\n  handlers: EventListenerHandler[];\n  classNames: ResolvedConfig['classNames'];\n};\n\nexport enum AnimationEndEvent {\n  TRANSITION = 'transitionend',\n  ANIMATION = 'animationend',\n}\n\nexport function setAnimationInformation(elem: HTMLElement, information: AnimationInformation) {\n  Object.defineProperty(elem, ANIMATION_END_HANDLER_PROPERTY, {\n    value: information,\n    ...ANIMATION_END_PROPERTY_SETTINGS,\n  });\n}\n\nexport function getAnimationInformation(elem: HTMLElement): AnimationInformation | undefined {\n  return Object.getOwnPropertyDescriptor(elem, ANIMATION_END_HANDLER_PROPERTY)?.value;\n}\n\nexport function clearAnimationInformation(elem: HTMLElement) {\n  Object.defineProperty(elem, ANIMATION_END_HANDLER_PROPERTY, {\n    value: undefined,\n    ...ANIMATION_END_PROPERTY_SETTINGS,\n  });\n}\n","import { EnumValues } from './utils';\n\nexport const AnimationType = {\n  TRANSITION: 'transition',\n  ANIMATION: 'animation',\n} as const;\n\nexport type AnimationTypeUnion = EnumValues<typeof AnimationType>;\n","import {\n  AnimationEndEvent,\n  clearAnimationInformation,\n  getAnimationInformation,\n  setAnimationInformation,\n} from './animation-information';\nimport { AnimationType, AnimationTypeUnion } from '../helpers/enum';\nimport { ResolvedConfig } from './config';\nimport { setIdleState } from './state';\n\nfunction getEventName(animationType: AnimationTypeUnion) {\n  if (animationType === AnimationType.ANIMATION) {\n    return AnimationEndEvent.ANIMATION;\n  }\n\n  if (animationType === AnimationType.TRANSITION) {\n    return AnimationEndEvent.TRANSITION;\n  }\n\n  throw new Error('Incorrect animationType setting');\n}\n\nexport function removeAnimationEndEventListener(elem: HTMLElement) {\n  const animationInfo = getAnimationInformation(elem);\n\n  if (!animationInfo) {\n    return;\n  }\n\n  animationInfo.handlers.forEach((handler) => {\n    elem.removeEventListener(handler.eventName, handler.function);\n  });\n  setIdleState(elem, animationInfo.classNames);\n  clearAnimationInformation(elem);\n}\n\nfunction addAnimationEndEventListener(elem: HTMLElement, config: ResolvedConfig, cb: () => void) {\n  const { animation, classNames } = config;\n  // Create handlers\n  const baseHandler = () => {\n    removeAnimationEndEventListener(elem);\n    cb();\n  };\n\n  const cssAnimationHandler = (evt: AnimationEvent | TransitionEvent) => {\n    const animEvt = evt as AnimationEvent;\n    // If user specified animation name, we should call cb only if event refers to the right animation\n    if (animEvt.animationName && animation.name && animEvt.animationName !== animation.name) {\n      return;\n    }\n\n    baseHandler();\n  };\n\n  // Choose which handlers should add to elem\n  if (animation.type === 'both') {\n    elem.addEventListener(AnimationEndEvent.TRANSITION, baseHandler);\n    elem.addEventListener(AnimationEndEvent.ANIMATION, cssAnimationHandler);\n    setAnimationInformation(elem, {\n      classNames,\n      handlers: [\n        {\n          eventName: AnimationEndEvent.TRANSITION,\n          function: baseHandler,\n        },\n        {\n          eventName: AnimationEndEvent.ANIMATION,\n          function: cssAnimationHandler,\n        },\n      ],\n    });\n    return;\n  }\n\n  const handler = (evt: TransitionEvent | AnimationEvent) =>\n    animation.type === AnimationType.ANIMATION\n      ? cssAnimationHandler(evt as AnimationEvent)\n      : baseHandler();\n\n  const eventName = getEventName(animation.type);\n  elem.addEventListener(eventName, handler);\n  setAnimationInformation(elem, {\n    classNames,\n    handlers: [\n      {\n        eventName,\n        function: handler,\n      },\n    ],\n  });\n}\n\nexport default function createAnimationEndHandler(\n  elem: HTMLElement,\n  config: ResolvedConfig,\n  cb: () => void,\n) {\n  removeAnimationEndEventListener(elem);\n  addAnimationEndEventListener(elem, config, cb);\n}\n","import { ElAnimateOptions, getConfig } from './config';\nimport { nextFrame } from '../helpers/utils';\nimport { getAnimationStatus } from './animation-status';\nimport { setFinalState, setFromState, setToState } from './state';\n\nimport createAnimationEndHandler from './animation-end-handler';\n\nexport default function animate(elem: HTMLElement, userConfig: ElAnimateOptions) {\n  const config = getConfig(userConfig);\n\n  // Don't execute animation function, if we should block multiClick\n  if (config.multiCallHandling === 'block' && getAnimationStatus(elem) !== null) {\n    return;\n  }\n\n  // It's easier to handle 'replaceToState' separately\n  if (config.multiCallHandling === 'replaceToState' && getAnimationStatus(elem) === 'animating') {\n    createAnimationEndHandler(elem, config, () => {\n      setFinalState(elem, config.classNames);\n      config.callbacks.afterEnd(elem, config);\n    });\n\n    setToState(elem, config.classNames);\n    config.callbacks.toStateSet(elem, config);\n\n    return;\n  }\n\n  // Before animation started\n  config.callbacks.beforeStart(elem, config);\n\n  // Animation start, 1st frame, adding animation end handling\n  setFromState(elem, config.classNames);\n\n  createAnimationEndHandler(elem, config, () => {\n    setFinalState(elem, config.classNames);\n    config.callbacks.afterEnd(elem, config);\n  });\n\n  config.callbacks.fromStateSet(elem, config);\n\n  // 2nd frame, switching 'from' -> 'to' classname\n  nextFrame(() => {\n    setToState(elem, config.classNames);\n    config.callbacks.toStateSet(elem, config);\n  });\n}\n","import { removeAnimationEndEventListener } from './animate/animation-end-handler';\nimport { getAnimationInformation } from './animate/animation-information';\nimport { setIdleState } from './animate/state';\n\nexport default function cancelAnimation(elem: HTMLElement) {\n  const animationInfo = getAnimationInformation(elem);\n\n  if (animationInfo) {\n    removeAnimationEndEventListener(elem);\n    setIdleState(elem, animationInfo.classNames);\n  }\n}\n"],"names":["defaultCallback","getConfig","options","prefix","classNames","initial","from","active","to","final","animation","type","name","callbacks","beforeStart","fromStateSet","toStateSet","afterEnd","multiCallHandling","nextFrame","callback","window","requestAnimationFrame","ANIMATION_STATUS_ATTRIBUTE","AnimationStatus","START","ANIMATING","setAnimationStatus","elem","status","setAttribute","getAnimationStatus","getAttribute","clearAnimationStatus","removeAttribute","cl","add","_len","arguments","length","Array","_key","forEach","className","classList","split","remove","_len2","_key2","setFromState","setToState","setFinalState","setIdleState","ANIMATION_END_HANDLER_PROPERTY","ANIMATION_END_PROPERTY_SETTINGS","configurable","enumerable","writable","AnimationEndEvent","setAnimationInformation","information","Object","defineProperty","value","getAnimationInformation","getOwnPropertyDescriptor","clearAnimationInformation","AnimationType","TRANSITION","ANIMATION","getEventName","animationType","Error","removeAnimationEndEventListener","animationInfo","handlers","handler","removeEventListener","eventName","function","addAnimationEndEventListener","config","cb","baseHandler","cssAnimationHandler","evt","animEvt","animationName","addEventListener","createAnimationEndHandler","animate","userConfig","cancelAnimation"],"mappings":"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"}