{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import parser from 'postcss-value-parser'\nimport { EasingFunctions, EasingFunctionKeys, CSSSpringEasing, registerEasingFunctions, toFixed } from 'spring-easing'\n\nimport type { FunctionNode } from 'postcss-value-parser'\nimport type { TypeCSSEasingOptions, TypeFrameFunction } from 'spring-easing'\nimport type { PluginCreator } from 'postcss'\n\nexport function toSnake(str: string) {\n  return str[0] + str.slice(1).replace(/[A-Z]/g, letter => {\n    return '-' + letter.toLowerCase()\n  })\n}\n\nexport function toCamel(str: string) {\n  return str.replace(/-[a-z]/g, letter => {\n    return letter[1].toUpperCase()\n  })\n}\n\nconst easingFns: Record<string, TypeFrameFunction> = {}\nfor (let name of EasingFunctionKeys) {\n  easingFns[name.replace(/-/g, \"\").toLowerCase()] = EasingFunctions[name]\n  easingFns[toSnake(name)] = EasingFunctions[name]\n}\n\nregisterEasingFunctions(easingFns);\n\nexport type PluginOpts = Omit<TypeCSSEasingOptions, \"easing\"> & { easings?: Record<string, TypeFrameFunction> };\nexport const springEasingPlugin: PluginCreator<PluginOpts> = function (opts = {}) {\n  const { easings, ...easingOpts } = opts;\n  const locals: Record<string, TypeFrameFunction> = Object.assign({}, EasingFunctions)\n  if (opts.easings) {\n    for (let name in Object.assign({}, opts.easings)) {\n      locals[name.replace(/-/g, \"\").toLowerCase()] = opts.easings[name]\n      locals[toSnake(name)] = opts.easings[name]\n    }\n  }\n\n  registerEasingFunctions(locals);\n\n  const localKeys = Array.from(new Set(Object.keys(locals)))\n  const localKeysStr = localKeys.join(\"|\").trim();\n\n  return {\n    postcssPlugin: 'postcss-spring-easing',\n    Declaration(decl) {\n      if (!new RegExp(localKeysStr, 'i').test(decl.value)) return\n      let root = parser(decl.value)\n      let changed = false\n      root.nodes = root.nodes.map(node => {\n        let value = node.value.trim()\n        const isFunction = node.type === 'function';\n        const isWord = node.type === 'word';\n        if ((isWord || isFunction) && value.length > 0 && new RegExp(`^(${localKeysStr})$`, 'i').test(value)) {\n          changed = true\n          const contents = isFunction ? parser.stringify(node) : value;\n          const [easings, duration] = CSSSpringEasing({\n            easing: contents,\n            ...easingOpts\n          });\n          node.type = \"function\";\n          node.value = `linear`;\n          (node as FunctionNode).nodes = parser(easings).nodes;\n          decl.before(`--spring-duration: ${toFixed(duration, 2)}ms;`)\n        }\n        return node\n      })\n      if (changed) {\n        decl.value = root.toString()\n      }\n    }\n  }\n}\nexport const postcss = true;\nspringEasingPlugin.postcss = postcss;\nexport default springEasingPlugin;"],"names":["easings"],"mappings":";;AAOO,SAAS,QAAQ,KAAa;AAC5B,SAAA,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,QAAQ,UAAU,CAAU,WAAA;AAChD,WAAA,MAAM,OAAO;EAAY,CACjC;AACH;AAEO,SAAS,QAAQ,KAAa;AAC5B,SAAA,IAAI,QAAQ,WAAW,CAAU,WAAA;AAC/B,WAAA,OAAO,CAAC,EAAE;EAAY,CAC9B;AACH;AAEA,MAAM,YAA+C,CAAA;AACrD,SAAS,QAAQ,oBAAoB;AACzB,YAAA,KAAK,QAAQ,MAAM,EAAE,EAAE,aAAa,IAAI,gBAAgB,IAAI;AACtE,YAAU,QAAQ,IAAI,CAAC,IAAI,gBAAgB,IAAI;AACjD;AAEA,wBAAwB,SAAS;AAG1B,MAAM,qBAAgD,SAAU,OAAO,IAAI;AAChF,QAAM,EAAE,SAAS,GAAG,WAAA,IAAe;AACnC,QAAM,SAA4C,OAAO,OAAO,IAAI,eAAe;AACnF,MAAI,KAAK,SAAS;AAChB,aAAS,QAAQ,OAAO,OAAO,CAAA,GAAI,KAAK,OAAO,GAAG;AACzC,aAAA,KAAK,QAAQ,MAAM,EAAE,EAAE,aAAa,IAAI,KAAK,QAAQ,IAAI;AAChE,aAAO,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI;AAAA,IAC3C;AAAA,EACF;AAEA,0BAAwB,MAAM;AAExB,QAAA,YAAY,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC;AACzD,QAAM,eAAe,UAAU,KAAK,GAAG,EAAE,KAAK;AAEvC,SAAA;AAAA,IACL,eAAe;AAAA,IACf,YAAY,MAAM;AACZ,UAAA,CAAC,IAAI,OAAO,cAAc,GAAG,EAAE,KAAK,KAAK,KAAK;AAAG;AACjD,UAAA,OAAO,OAAO,KAAK,KAAK;AAC5B,UAAI,UAAU;AACd,WAAK,QAAQ,KAAK,MAAM,IAAI,CAAQ,SAAA;AAC9B,YAAA,QAAQ,KAAK,MAAM,KAAK;AACtB,cAAA,aAAa,KAAK,SAAS;AAC3B,cAAA,SAAS,KAAK,SAAS;AAC7B,aAAK,UAAU,eAAe,MAAM,SAAS,KAAK,IAAI,OAAO,KAAK,kBAAkB,GAAG,EAAE,KAAK,KAAK,GAAG;AAC1F,oBAAA;AACV,gBAAM,WAAW,aAAa,OAAO,UAAU,IAAI,IAAI;AACvD,gBAAM,CAACA,UAAS,QAAQ,IAAI,gBAAgB;AAAA,YAC1C,QAAQ;AAAA,YACR,GAAG;AAAA,UAAA,CACJ;AACD,eAAK,OAAO;AACZ,eAAK,QAAQ;AACZ,eAAsB,QAAQ,OAAOA,QAAO,EAAE;AAC/C,eAAK,OAAO,sBAAsB,QAAQ,UAAU,CAAC,MAAM;AAAA,QAC7D;AACO,eAAA;AAAA,MAAA,CACR;AACD,UAAI,SAAS;AACN,aAAA,QAAQ,KAAK;MACpB;AAAA,IACF;AAAA,EAAA;AAEJ;AACO,MAAM,UAAU;AACvB,mBAAmB,UAAU;"}