{"version":3,"file":"index.cjs","sources":["../../../src/utils/mixin.ts"],"sourcesContent":["import type { Class } from './types'\nimport type { LitElement } from 'lit'\n\nexport type Mixin<\n  Type,\n  BaseClass extends typeof LitElement & Class<Type> = typeof LitElement & Class<Type>,\n  Result extends BaseClass = BaseClass,\n> = (base: BaseClass) => Result\n\ntype ApplyMixins<TBase extends Class<unknown>, TMixins extends readonly unknown[]> = TMixins extends readonly []\n  ? TBase\n  : TMixins extends readonly [infer First, ...infer Rest]\n    ? First extends (base: Class<unknown> & typeof LitElement) => Class<infer R>\n      ? TBase & ApplyMixins<Class<R>, Rest>\n      : never\n    : TBase\n\nexport const mixin = <TBase extends Class<unknown>, TMixins extends readonly Mixin<unknown>[]>(\n  base: TBase,\n  ...mixins: TMixins\n): ApplyMixins<TBase, TMixins> =>\n  mixins.reduce(\n    (cls: Class<unknown>, mixinFn: Mixin<unknown>) => mixinFn(cls as Class<unknown> & typeof LitElement),\n    base as Class<unknown>\n  ) as ApplyMixins<TBase, TMixins>\n"],"names":["mixin","base","mixins","cls","mixinFn","currentInstance","defineElement"],"mappings":"4KAiBaA,EAAQ,CACnBC,KACGC,IAEHA,EAAO,OACL,CAACC,EAAqBC,IAA4BA,EAAQD,CAAyC,EACnGF,CACF,EAAA,QAAA,mBAAAI,EAAA,EAAA,QAAA,cAAAC,EAAA,EAAA,QAAA,YAAAA,EAAA,EAAA,QAAA,eAAAA,EAAA,EAAA,QAAA,eAAAA,EAAA,EAAA,QAAA,gBAAAA,EAAA,EAAA,QAAA,eAAAA,EAAA,EAAA,QAAA,SAAAA,EAAA,EAAA,QAAA,UAAAA,EAAA,EAAA,QAAA,aAAAA,EAAA,EAAA,QAAA,MAAAN"}