{"version":3,"sources":["../src/processors/keyframes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAoBa,IAAA,kBAAA,GAAN,cAAiC,aAAc,CAAA;AAAA,EAGpD,WAAA,CAAY,WAAmB,IAA2B,EAAA;AACxD,IAAA,KAAA,CAAM,CAAC,MAAO,CAAA,CAAC,CAAC,CAAA,EAAG,GAAG,IAAI,CAAA;AAC1B,IAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,MAAA,MAAM,aAAc,CAAA,IAAA;AAAA;AAEtB,IAAA,cAAA;AAAA,MACE,MAAA;AAAA,MACA,CAAC,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAAA,MAC/B,CAAA,eAAA,EAAkB,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA,KAAA;AAAA,KAC3C;AAEA,IAAM,MAAA,GAAG,UAAU,CAAI,GAAA,MAAA;AACvB,IAAI,IAAA,UAAA,CAAW,CAAC,CAAA,KAAM,MAAQ,EAAA;AAC5B,MAAA,IAAA,CAAK,YAAa,CAAA,IAAA,CAAK,UAAW,CAAA,CAAC,CAAC,CAAA;AAAA,KAC3B,MAAA,IAAA,UAAA,CAAW,CAAC,CAAA,KAAM,UAAY,EAAA;AACvC,MAAA,UAAA,CAAW,CAAC,CAAA,CAAE,OAAQ,CAAA,CAAC,OAAY,KAAA;AACjC,QAAA,IAAI,MAAU,IAAA,OAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AACzD,UAAK,IAAA,CAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA;AAChC,OACD,CAAA;AAAA;AAEH,IAAA,IAAA,CAAK,SAAY,GAAA,UAAA;AAAA;AACnB,EAEA,MAAM,MAAoB,EAAA;AACxB,IAAI,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7B,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAoB,kBAAA,CAAA,CAAA;AAAA;AAGtE,IAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,IAAK,CAAA,SAAA;AAExB,IAAA,IAAI,aAAa,UAAY,EAAA;AAC3B,MAAK,IAAA,CAAA,cAAA,CAAe,IAAK,CAAA,SAAA,EAAW,MAAM,CAAA;AAAA,KACrC,MAAA;AACL,MAAK,IAAA,CAAA,UAAA,CAAW,IAAK,CAAA,SAAA,EAAW,MAAM,CAAA;AAAA;AACxC;AACF,EAEQ,cAAe,CAAA,GAAG,QAAQ,GAAkB,MAAoB,EAAA;AACtE,IAAA,MAAM,eAAyB,EAAC;AAEhC,IAAA,YAAA,CAAa,MAAM,EAAC;AACpB,IAAA,MAAM,sBAAmC,EAAC;AAC1C,IAAM,MAAA,EAAE,SAAU,EAAA,GAAI,IAAK,CAAA,OAAA;AAE3B,IAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzB,MAAA,IAAI,UAAU,IAAM,EAAA;AAClB,QAAA,QAAQ,KAAK,IAAM;AAAA,UACjB,KAAK,UAAU,QAAU,EAAA;AACvB,YAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,GAAI,CAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACrC,YAAoB,mBAAA,CAAA,IAAA,CAAK,KAAM,CAAA,SAAS,CAAC,CAAA;AACzC,YAAA;AAAA;AACF,UACA,KAAK,SAAU,CAAA,KAAA;AACb,YAAoB,mBAAA,CAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACnC,YAAA;AAAA,UACF,KAAK,UAAU,IAAM,EAAA;AACnB,YAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,GAAI,CAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAC9C,YAAI,IAAA,OAAO,mBAAmB,UAAY,EAAA;AACxC,cAAoB,mBAAA,CAAA,IAAA,CAAK,cAAe,CAAA,SAAS,CAAC,CAAA;AAAA,aAC7C,MAAA;AACL,cAAA,mBAAA,CAAoB,KAAK,cAA2B,CAAA;AAAA;AAEtD,YAAA;AAAA;AAGA;AACJ,OACF,MAAA,IAAW,IAAK,CAAA,IAAA,KAAS,iBAAmB,EAAA;AAC1C,QAAa,YAAA,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,MAAgB,CAAA;AAE7C,QAAA,YAAA,CAAa,GAAI,CAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA;AACtC,KACD,CAAA;AACD,IAAK,IAAA,CAAA,iBAAA,CAAkB,YAAc,EAAA,GAAG,mBAAmB,CAAA;AAAA;AAC7D,EAEA,iBAAA,CAAkB,sBAAmD,IAAmB,EAAA;AApG1F,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqGI,IAAM,MAAA,EAAE,QAAW,GAAA,eAAA;AAAA,MACjB,IAAA,CAAK,SAAS,CACV,GAAA,CAAC,mBAAwC,GAAG,IAAI,CAChD,GAAA,CAAC,iBAAsC,CAAA;AAAA,MAC3C,KAAM,CAAA;AAAA,KACR;AACA,IAAM,MAAA,OAAA,GAAU,eAAe,MAAM,CAAA,CAAA,CAAA;AAErC,IAAA,MAAM,KAAe,GAAA;AAAA,MACnB,CAAC,IAAK,CAAA,UAAU,GAAG;AAAA,QACjB,WAAW,IAAK,CAAA,SAAA;AAAA,QAChB,OAAA;AAAA,QACA,aAAa,IAAK,CAAA,WAAA;AAAA,QAClB,KAAO,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,UAAf,IAAwB,GAAA,EAAA,GAAA;AAAA;AACjC,KACF;AACA,IAAA,MAAM,qBAAsC,GAAA;AAAA,MAC1C;AAAA,QACE,QAAQ,OAAQ,CAAA,MAAA;AAAA,QAChB,QAAU,EAAA;AAAA,UACR,KAAO,EAAA;AAAA,YACL,SAAQ,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,WAArB,IAA+B,GAAA,EAAA,GAAA,CAAA;AAAA,YACvC,OAAM,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAM,SAArB,IAA6B,GAAA,EAAA,GAAA;AAAA,WACrC;AAAA,UACA,GAAK,EAAA;AAAA,YACH,SAAQ,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,WAAnB,IAA6B,GAAA,EAAA,GAAA,CAAA;AAAA,YACrC,OAAM,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,SAAnB,IAA2B,GAAA,EAAA,GAAA;AAAA;AACnC;AACF;AACF,KACF;AACA,IAAK,IAAA,CAAA,SAAA,CAAU,KAAK,CAAC,KAAA,EAAO,CAAC,KAAO,EAAA,qBAAqB,CAAC,CAAC,CAAA;AAAA;AAC7D,EAEQ,UAAW,CAAA,GAAG,OAAO,GAAc,MAAoB,EAAA;AAC7D,IAAA,IAAI,QAAQ,IAAS,KAAA,SAAA,CAAU,QAAQ,OAAQ,CAAA,IAAA,KAAS,UAAU,QAAU,EAAA;AAC1E,MAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,GAAI,CAAA,OAAA,CAAQ,GAAG,IAAI,CAAA;AACxC,MAAM,MAAA,EAAE,SAAU,EAAA,GAAI,IAAK,CAAA,OAAA;AAC3B,MAAA,MAAM,WAA6B,OAAO,KAAA,KAAU,UAAa,GAAA,KAAA,CAAM,SAAS,CAAI,GAAA,KAAA;AACpF,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA;AACjC;AACF;AACF,EAEA,qBAAwB,GAAA;AACtB,IAAK,IAAA,CAAA,QAAA,CAAS,IAAK,CAAA,KAAA,EAAO,KAAK,CAAA;AAAA;AACjC,EAEA,oBAAuB,GAAA;AACrB,IAAA,IAAA,CAAK,qBAAsB,EAAA;AAAA;AAC7B,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,IAAK,CAAA,SAAA;AAAA;AACd,EAEA,IAAI,KAAoB,GAAA;AACtB,IAAA,OAAO,IAAK,CAAA,UAAA,CAAW,aAAc,CAAA,IAAA,CAAK,SAAS,CAAA;AAAA;AAEvD","file":"keyframes.mjs","sourcesContent":["import type { Expression } from '@babel/types';\nimport type {\n  CallParam,\n  TemplateParam,\n  Params,\n  TailProcessorParams,\n  ValueCache,\n} from '@wyw-in-js/processor-utils';\nimport { serializeStyles, Interpolation } from '@emotion/serialize';\nimport { type Replacements, type Rules, ValueType } from '@wyw-in-js/shared';\nimport type { CSSInterpolation } from '@emotion/serialize';\nimport { validateParams } from '@wyw-in-js/processor-utils';\nimport BaseProcessor from './base-processor';\nimport type { IOptions } from './styled';\nimport { cache } from '../utils/emotion';\n\nexport type Primitive = string | number | boolean | null | undefined;\n\nexport type TemplateCallback = (params: Record<string, unknown> | undefined) => string | number;\n\nexport class KeyframesProcessor extends BaseProcessor {\n  callParam: CallParam | TemplateParam;\n\n  constructor(params: Params, ...args: TailProcessorParams) {\n    super([params[0]], ...args);\n    if (params.length < 2) {\n      throw BaseProcessor.SKIP;\n    }\n    validateParams(\n      params,\n      ['callee', ['call', 'template']],\n      `Invalid use of ${this.tagSource.imported} tag.`,\n    );\n\n    const [, callParams] = params;\n    if (callParams[0] === 'call') {\n      this.dependencies.push(callParams[1]);\n    } else if (callParams[0] === 'template') {\n      callParams[1].forEach((element) => {\n        if ('kind' in element && element.kind !== ValueType.CONST) {\n          this.dependencies.push(element);\n        }\n      });\n    }\n    this.callParam = callParams;\n  }\n\n  build(values: ValueCache) {\n    if (this.artifacts.length > 0) {\n      throw new Error(`MUI: \"${this.tagSource.imported}\" is already built`);\n    }\n\n    const [callType] = this.callParam;\n\n    if (callType === 'template') {\n      this.handleTemplate(this.callParam, values);\n    } else {\n      this.handleCall(this.callParam, values);\n    }\n  }\n\n  private handleTemplate([, callArgs]: TemplateParam, values: ValueCache) {\n    const templateStrs: string[] = [];\n    // @ts-ignore @TODO - Fix this. No idea how to initialize a Tagged String array.\n    templateStrs.raw = [];\n    const templateExpressions: Primitive[] = [];\n    const { themeArgs } = this.options as IOptions;\n\n    callArgs.forEach((item) => {\n      if ('kind' in item) {\n        switch (item.kind) {\n          case ValueType.FUNCTION: {\n            const value = values.get(item.ex.name) as TemplateCallback;\n            templateExpressions.push(value(themeArgs));\n            break;\n          }\n          case ValueType.CONST:\n            templateExpressions.push(item.value);\n            break;\n          case ValueType.LAZY: {\n            const evaluatedValue = values.get(item.ex.name);\n            if (typeof evaluatedValue === 'function') {\n              templateExpressions.push(evaluatedValue(themeArgs));\n            } else {\n              templateExpressions.push(evaluatedValue as Primitive);\n            }\n            break;\n          }\n          default:\n            break;\n        }\n      } else if (item.type === 'TemplateElement') {\n        templateStrs.push(item.value.cooked as string);\n        // @ts-ignore\n        templateStrs.raw.push(item.value.raw);\n      }\n    });\n    this.generateArtifacts(templateStrs, ...templateExpressions);\n  }\n\n  generateArtifacts(styleObjOrTaggged: CSSInterpolation | string[], ...args: Primitive[]) {\n    const { styles } = serializeStyles(\n      args.length > 0\n        ? [styleObjOrTaggged as Interpolation<{}>, ...args]\n        : [styleObjOrTaggged as Interpolation<{}>],\n      cache.registered,\n    );\n    const cssText = `@keyframes {${styles}}`;\n\n    const rules: Rules = {\n      [this.asSelector]: {\n        className: this.className,\n        cssText,\n        displayName: this.displayName,\n        start: this.location?.start ?? null,\n      },\n    };\n    const sourceMapReplacements: Replacements = [\n      {\n        length: cssText.length,\n        original: {\n          start: {\n            column: this.location?.start.column ?? 0,\n            line: this.location?.start.line ?? 0,\n          },\n          end: {\n            column: this.location?.end.column ?? 0,\n            line: this.location?.end.line ?? 0,\n          },\n        },\n      },\n    ];\n    this.artifacts.push(['css', [rules, sourceMapReplacements]]);\n  }\n\n  private handleCall([, callArg]: CallParam, values: ValueCache) {\n    if (callArg.kind === ValueType.LAZY || callArg.kind === ValueType.FUNCTION) {\n      const value = values.get(callArg.ex.name);\n      const { themeArgs } = this.options as IOptions;\n      const styleObj: CSSInterpolation = typeof value === 'function' ? value(themeArgs) : value;\n      if (styleObj) {\n        this.generateArtifacts(styleObj);\n      }\n    }\n  }\n\n  doEvaltimeReplacement() {\n    this.replacer(this.value, false);\n  }\n\n  doRuntimeReplacement() {\n    this.doEvaltimeReplacement();\n  }\n\n  get asSelector() {\n    return this.className;\n  }\n\n  get value(): Expression {\n    return this.astService.stringLiteral(this.className);\n  }\n}\n"]}