{"version":3,"sources":["../src/utils/refreshScrollTrigger.ts","../src/animation/constants.ts","../src/utils/toAOSProps.ts"],"sourcesContent":["import gsap from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\n\ngsap.registerPlugin(ScrollTrigger);\n\n/**\n * 原始 ScrollTrigger.refresh 封裝\n *\n * @see https://greensock.com/docs/v3/Plugins/ScrollTrigger/static.refresh()\n */\nexport default function refreshScrollTrigger(safe?: boolean | undefined) {\n  ScrollTrigger.refresh(safe);\n}\n","import type { AnchorPlacement, AnimationOptions, Easing } from \"@/types\";\n\n/** 預設選項 */\nexport const DEFAULT_OPTIONS: AnimationOptions = {\n  offset: 120,\n  delay: 0,\n  duration: 400,\n  easing: \"none\",\n  once: false,\n  mirror: false,\n  anchorPlacement: \"top-bottom\",\n  markers: false,\n};\n\n/** 動畫曲線 */\nexport const easings: Easing[] = [\n  \"none\",\n  \"power1\",\n  \"power1.in\",\n  \"power1.out\",\n  \"power1.inOut\",\n  \"power2\",\n  \"power2.in\",\n  \"power2.out\",\n  \"power2.inOut\",\n  \"power3\",\n  \"power3.in\",\n  \"power3.out\",\n  \"power3.inOut\",\n  \"power4\",\n  \"power4.in\",\n  \"power4.out\",\n  \"power4.inOut\",\n  \"back\",\n  \"back.in\",\n  \"back.out\",\n  \"back.inOut\",\n  \"bounce\",\n  \"bounce.in\",\n  \"bounce.out\",\n  \"bounce.inOut\",\n  \"circ\",\n  \"circ.in\",\n  \"circ.out\",\n  \"circ.inOut\",\n  \"elastic\",\n  \"elastic.in\",\n  \"elastic.out\",\n  \"elastic.inOut\",\n  \"expo\",\n  \"expo.in\",\n  \"expo.out\",\n  \"expo.inOut\",\n  \"sine\",\n  \"sine.in\",\n  \"sine.out\",\n  \"sine.inOut\",\n];\n\n/** 動畫錨點 */\nexport const anchorPlacements: AnchorPlacement[] = [\n  \"top-bottom\",\n  \"top-center\",\n  \"top-top\",\n  \"center-bottom\",\n  \"center-center\",\n  \"center-top\",\n  \"bottom-bottom\",\n  \"bottom-center\",\n  \"bottom-top\",\n];\n","import { anchorPlacements, easings } from \"@/constants\";\nimport type { Animation, AnimationOptions, AOSAttributeKey } from \"@/types\";\n\ninterface AOSDataAttributes extends Partial<Record<AOSAttributeKey, string>> {\n  \"data-aos\": Animation;\n}\n\nexport interface AOSAttributeOptions extends Partial<AnimationOptions> {\n  animation: Animation;\n}\n\n/**\n * 將動畫選項轉成可直接使用的 AOS data attributes\n *\n * > 不合法的值會被過濾掉\n */\nexport default function toAOSProps(\n  options?: AOSAttributeOptions,\n): Partial<AOSDataAttributes> {\n  if (!options) return {};\n\n  return omitNil({\n    \"data-aos\": options.animation,\n    \"data-aos-offset\": toNumberAttr(options.offset),\n    \"data-aos-delay\": toNumberAttr(options.delay, 0),\n    \"data-aos-duration\": toNumberAttr(options.duration, 0),\n    \"data-aos-easing\": toEnumAttr(easings, options.easing),\n    \"data-aos-mirror\": toBooleanAttr(options.mirror),\n    \"data-aos-once\": toBooleanAttr(options.once),\n    \"data-aos-anchor-placement\": toEnumAttr(\n      anchorPlacements,\n      options.anchorPlacement,\n    ),\n    \"data-aos-markers\": toBooleanAttr(options.markers),\n  } satisfies AOSDataAttributes);\n}\n\nfunction omitNil<T extends object>(obj: T): Partial<T> {\n  const result: Partial<T> = {};\n\n  const keys = Object.keys(obj) as Array<keyof T>;\n\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    const value = obj[key];\n\n    if (value != null) {\n      result[key] = value;\n    }\n  }\n\n  return result;\n}\n\nfunction toBooleanAttr(value?: boolean) {\n  return typeof value === \"boolean\" ? String(value) : undefined;\n}\n\nfunction toNumberAttr(value?: number, min?: number) {\n  if (typeof value !== \"number\" || !Number.isInteger(value)) {\n    return undefined;\n  }\n\n  const next = typeof min === \"number\" ? Math.max(min, value) : value;\n\n  return String(next);\n}\n\nfunction toEnumAttr<T>(list: readonly T[], value: T) {\n  return list.includes(value) ? value : undefined;\n}\n"],"mappings":";AAAA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,KAAK,eAAe,aAAa;AAOlB,SAAR,qBAAsC,MAA4B;AACvE,gBAAc,QAAQ,IAAI;AAC5B;;;ACGO,IAAM,UAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,mBAAsC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACtDe,SAAR,WACL,SAC4B;AAC5B,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,SAAO,QAAQ;AAAA,IACb,YAAY,QAAQ;AAAA,IACpB,mBAAmB,aAAa,QAAQ,MAAM;AAAA,IAC9C,kBAAkB,aAAa,QAAQ,OAAO,CAAC;AAAA,IAC/C,qBAAqB,aAAa,QAAQ,UAAU,CAAC;AAAA,IACrD,mBAAmB,WAAW,SAAS,QAAQ,MAAM;AAAA,IACrD,mBAAmB,cAAc,QAAQ,MAAM;AAAA,IAC/C,iBAAiB,cAAc,QAAQ,IAAI;AAAA,IAC3C,6BAA6B;AAAA,MAC3B;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA,oBAAoB,cAAc,QAAQ,OAAO;AAAA,EACnD,CAA6B;AAC/B;AAEA,SAAS,QAA0B,KAAoB;AACrD,QAAM,SAAqB,CAAC;AAE5B,QAAM,OAAO,OAAO,KAAK,GAAG;AAE5B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,QAAQ,IAAI,GAAG;AAErB,QAAI,SAAS,MAAM;AACjB,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,OAAiB;AACtC,SAAO,OAAO,UAAU,YAAY,OAAO,KAAK,IAAI;AACtD;AAEA,SAAS,aAAa,OAAgB,KAAc;AAClD,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACzD,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,OAAO,QAAQ,WAAW,KAAK,IAAI,KAAK,KAAK,IAAI;AAE9D,SAAO,OAAO,IAAI;AACpB;AAEA,SAAS,WAAc,MAAoB,OAAU;AACnD,SAAO,KAAK,SAAS,KAAK,IAAI,QAAQ;AACxC;","names":[]}