{"version":3,"file":"defineComponent.mjs","names":["injectDefaults","internalUseDefaults","defineComponent","_defineComponent","consoleWarn","pick","propsFactory","options","_options$_setup","_setup","setup","name","_options$props","props","propKeys","Object","keys","filterProps","_as","String","ctx","_props$_as","defaults","value","_internalUseDefaults","_props","provideSubDefaults","setupBindings","genericComponent","exposeDefaults","arguments","length","undefined","defineFunctionalComponent","render"],"sources":["../../src/utils/defineComponent.tsx"],"sourcesContent":["// Composables\nimport { injectDefaults, internalUseDefaults } from '@/composables/defaults'\n\n// Utilities\nimport {\n  defineComponent as _defineComponent, // eslint-disable-line no-restricted-imports\n} from 'vue'\nimport { consoleWarn } from '@/utils/console'\nimport { pick } from '@/utils/helpers'\nimport { propsFactory } from '@/utils/propsFactory'\n\n// Types\nimport type {\n  AllowedComponentProps,\n  ComponentCustomProps,\n  ComponentInjectOptions,\n  ComponentObjectPropsOptions,\n  ComponentOptions,\n  ComponentOptionsMixin,\n  ComponentOptionsWithObjectProps,\n  ComponentOptionsWithoutProps,\n  ComponentPropsOptions,\n  ComputedOptions,\n  DefineComponent,\n  EmitsOptions,\n  ExtractDefaultPropTypes,\n  ExtractPropTypes,\n  FunctionalComponent,\n  MethodOptions,\n  ObjectEmitsOptions,\n  SlotsType,\n  VNode,\n  VNodeChild,\n  VNodeProps,\n} from 'vue'\n\n// No props\nexport function defineComponent<\n  Props = {},\n  RawBindings = {},\n  D = {},\n  C extends ComputedOptions = {},\n  M extends MethodOptions = {},\n  Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,\n  Extends extends ComponentOptionsMixin = ComponentOptionsMixin,\n  E extends EmitsOptions = {},\n  EE extends string = string,\n  I extends {} = {},\n  II extends string = string,\n  S extends SlotsType = {}\n>(\n  options: ComponentOptionsWithoutProps<\n    Props,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E,\n    EE,\n    I,\n    II,\n    S\n  >\n): DefineComponent<Props, RawBindings, D, C, M, Mixin, Extends, E, EE>\n\n// Object Props\nexport function defineComponent<\n  PropsOptions extends Readonly<ComponentPropsOptions>,\n  RawBindings,\n  D,\n  C extends ComputedOptions = {},\n  M extends MethodOptions = {},\n  Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,\n  Extends extends ComponentOptionsMixin = ComponentOptionsMixin,\n  E extends EmitsOptions = {},\n  EE extends string = string,\n  I extends {} = {},\n  II extends string = string,\n  S extends SlotsType = {}\n>(\n  options: ComponentOptionsWithObjectProps<\n    PropsOptions,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E,\n    EE,\n    I,\n    II,\n    S\n  >\n): DefineComponent<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE> &\n  FilterPropsOptions<PropsOptions>\n\n// Implementation\nexport function defineComponent(options: ComponentOptions) {\n  options._setup = options._setup ?? options.setup\n\n  if (!options.name) {\n    consoleWarn(\n      'The component is missing an explicit name, unable to generate default prop value'\n    )\n\n    return options\n  }\n\n  if (options._setup) {\n    options.props = propsFactory(options.props ?? {}, options.name)()\n    const propKeys = Object.keys(options.props)\n    options.filterProps = function filterProps(props: Record<string, any>) {\n      return pick(props, propKeys, ['class', 'style'])\n    }\n\n    options.props._as = String\n    options.setup = function setup(props: Record<string, any>, ctx) {\n      const defaults = injectDefaults()\n\n      // Skip props proxy if defaults are not provided\n      if (!defaults.value) return options._setup(props, ctx)\n\n      const { props: _props, provideSubDefaults } = internalUseDefaults(\n        props,\n        props._as ?? options.name,\n        defaults\n      )\n\n      const setupBindings = options._setup(_props, ctx)\n\n      provideSubDefaults()\n\n      return setupBindings\n    }\n  }\n\n  return options\n}\n\ntype ToListeners<T extends string | number | symbol> = {\n  [K in T]: K extends `on${infer U}` ? Uncapitalize<U> : K\n}[T]\n\nexport type SlotsToProps<U extends RawSlots, T = MakeInternalSlots<U>> = {\n  $children?:\n    | VNodeChild\n    | (T extends { default: infer V } ? V : {})\n    | { [K in keyof T]?: T[K] }\n  'v-slots'?: { [K in keyof T]?: T[K] | false }\n} & {\n  [K in keyof T as `v-slot:${K & string}`]?: T[K] | false\n}\n\ntype RawSlots = Record<string, unknown>\ntype Slot<T> = [T] extends [never] ? () => VNodeChild : (arg: T) => VNodeChild\ntype VueSlot<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[]\ntype MakeInternalSlots<T extends RawSlots> = {\n  [K in keyof T]: Slot<T[K]>\n}\ntype MakeSlots<T extends RawSlots> = {\n  [K in keyof T]: VueSlot<T[K]>\n}\n\nexport type GenericProps<Props, Slots extends Record<string, unknown>> = {\n  $props: Props & SlotsToProps<Slots>\n  $slots: MakeSlots<Slots>\n}\n\ntype DefineComponentWithGenericProps<\n  T extends new (props: Record<string, any>, slots: RawSlots) => {\n    $props?: Record<string, any>\n  }\n> = <\n  PropsOptions extends Readonly<ComponentObjectPropsOptions>,\n  RawBindings,\n  D,\n  C extends ComputedOptions = {},\n  M extends MethodOptions = {},\n  Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,\n  Extends extends ComponentOptionsMixin = ComponentOptionsMixin,\n  E extends EmitsOptions = Record<string, any>,\n  EE extends string = string,\n  I extends ComponentInjectOptions = {},\n  II extends string = string,\n  // Slots extends RawSlots = ConstructorParameters<T> extends [any, infer SS extends RawSlots | undefined] ? Exclude<SS, undefined> : {},\n  Slots extends RawSlots = ConstructorParameters<T>[1],\n  S extends SlotsType = SlotsType<Partial<MakeSlots<Slots>>>,\n  III = InstanceType<T>,\n  P = III extends Record<'$props', any>\n    ? Omit<PropsOptions, keyof III['$props']>\n    : PropsOptions,\n  Base = DefineComponent<\n    P,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E extends any[]\n      ? E\n      : III extends Record<'$props', any>\n      ? Omit<E, ToListeners<keyof III['$props']>>\n      : E,\n    EE,\n    PublicProps,\n    ExtractPropTypes<P> & ({} extends E ? {} : EmitsToProps<E>),\n    ExtractDefaultPropTypes<P>,\n    S\n  >\n>(\n  options: ComponentOptionsWithObjectProps<\n    PropsOptions,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E,\n    EE,\n    I,\n    II,\n    S\n  >\n) => Base & T & FilterPropsOptions<PropsOptions>\n\ntype DefineComponentWithSlots<Slots extends RawSlots> = <\n  PropsOptions extends Readonly<ComponentPropsOptions>,\n  RawBindings,\n  D,\n  C extends ComputedOptions = {},\n  M extends MethodOptions = {},\n  Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,\n  Extends extends ComponentOptionsMixin = ComponentOptionsMixin,\n  E extends EmitsOptions = Record<string, any>,\n  EE extends string = string,\n  I extends ComponentInjectOptions = {},\n  II extends string = string,\n  S extends SlotsType = SlotsType<Partial<MakeSlots<Slots>>>\n>(\n  options: ComponentOptionsWithObjectProps<\n    PropsOptions,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E,\n    EE,\n    I,\n    II,\n    S\n  >\n) => DefineComponent<\n  ExtractPropTypes<PropsOptions> & SlotsToProps<Slots>,\n  RawBindings,\n  D,\n  C,\n  M,\n  Mixin,\n  Extends,\n  E,\n  EE,\n  PublicProps,\n  ExtractPropTypes<PropsOptions> &\n    SlotsToProps<Slots> &\n    ({} extends E ? {} : EmitsToProps<E>),\n  ExtractDefaultPropTypes<PropsOptions>,\n  S\n> &\n  FilterPropsOptions<PropsOptions>\n\n// No argument - simple default slot\nexport function genericComponent(\n  exposeDefaults?: boolean\n): DefineComponentWithSlots<{ default: never }>\n\n// Generic constructor argument - generic props and slots\nexport function genericComponent<\n  T extends new (props: Record<string, any>, slots: any) => {\n    $props?: Record<string, any>\n  }\n>(exposeDefaults?: boolean): DefineComponentWithGenericProps<T>\n\n// Slots argument - simple slots\nexport function genericComponent<Slots extends RawSlots>(\n  exposeDefaults?: boolean\n): DefineComponentWithSlots<Slots>\n\n// Implementation\nexport function genericComponent(exposeDefaults = true) {\n  return (options: any) =>\n    ((exposeDefaults ? defineComponent : _defineComponent) as any)(options)\n}\n\nexport function defineFunctionalComponent<\n  T extends FunctionalComponent<Props>,\n  PropsOptions = ComponentObjectPropsOptions,\n  Defaults = ExtractDefaultPropTypes<PropsOptions>,\n  Props = Readonly<ExtractPropTypes<PropsOptions>>\n>(\n  props: PropsOptions,\n  render: T\n): FunctionalComponent<Partial<Defaults> & Omit<Props, keyof Defaults>> {\n  render.props = props as any\n  return render as any\n}\n\ntype EmitsToProps<T extends EmitsOptions> = T extends string[]\n  ? {\n      [K in string & `on${Capitalize<T[number]>}`]?: (...args: any[]) => any\n    }\n  : T extends ObjectEmitsOptions\n  ? {\n      [K in string &\n        `on${Capitalize<string & keyof T>}`]?: K extends `on${infer C}`\n        ? T[Uncapitalize<C>] extends null\n          ? (...args: any[]) => any\n          : (\n              ...args: T[Uncapitalize<C>] extends (...args: infer P) => any\n                ? P\n                : never\n            ) => any\n        : never\n    }\n  : {}\n\ntype PublicProps = VNodeProps & AllowedComponentProps & ComponentCustomProps\n\n// Adds a filterProps method to the component options\nexport interface FilterPropsOptions<\n  PropsOptions extends Readonly<ComponentPropsOptions>,\n  Props = ExtractPropTypes<PropsOptions>\n> {\n  filterProps<\n    T extends Partial<Props>,\n    U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>\n  >(\n    props: T\n  ): [yes: Partial<Pick<T, U>>, no: Omit<T, U>]\n}\n"],"mappings":"AAAA;AAAA,SACSA,cAAc,EAAEC,mBAAmB,uCAE5C;AACA,SACEC,eAAe,IAAIC,gBAAgB,CAAE;AAAA,OAChC,KAAK;AAAA,SACHC,WAAW;AAAA,SACXC,IAAI;AAAA,SACJC,YAAY,8BAErB;AAyBA;AA+BA;AAgCA;AACA,OAAO,SAASJ,eAAeA,CAACK,OAAyB,EAAE;EAAA,IAAAC,eAAA;EACzDD,OAAO,CAACE,MAAM,IAAAD,eAAA,GAAGD,OAAO,CAACE,MAAM,YAAAD,eAAA,GAAID,OAAO,CAACG,KAAK;EAEhD,IAAI,CAACH,OAAO,CAACI,IAAI,EAAE;IACjBP,WAAW,CACT,kFACF,CAAC;IAED,OAAOG,OAAO;EAChB;EAEA,IAAIA,OAAO,CAACE,MAAM,EAAE;IAAA,IAAAG,cAAA;IAClBL,OAAO,CAACM,KAAK,GAAGP,YAAY,EAAAM,cAAA,GAACL,OAAO,CAACM,KAAK,YAAAD,cAAA,GAAI,CAAC,CAAC,EAAEL,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC;IACjE,IAAMG,QAAQ,GAAGC,MAAM,CAACC,IAAI,CAACT,OAAO,CAACM,KAAK,CAAC;IAC3CN,OAAO,CAACU,WAAW,GAAG,SAASA,WAAWA,CAACJ,KAA0B,EAAE;MACrE,OAAOR,IAAI,CAACQ,KAAK,EAAEC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAEDP,OAAO,CAACM,KAAK,CAACK,GAAG,GAAGC,MAAM;IAC1BZ,OAAO,CAACG,KAAK,GAAG,SAASA,KAAKA,CAACG,KAA0B,EAAEO,GAAG,EAAE;MAAA,IAAAC,UAAA;MAC9D,IAAMC,QAAQ,GAAGtB,cAAc,CAAC,CAAC;;MAEjC;MACA,IAAI,CAACsB,QAAQ,CAACC,KAAK,EAAE,OAAOhB,OAAO,CAACE,MAAM,CAACI,KAAK,EAAEO,GAAG,CAAC;MAEtD,IAAAI,oBAAA,GAA8CvB,mBAAmB,CAC/DY,KAAK,GAAAQ,UAAA,GACLR,KAAK,CAACK,GAAG,YAAAG,UAAA,GAAId,OAAO,CAACI,IAAI,EACzBW,QACF,CAAC;QAJcG,MAAM,GAAAD,oBAAA,CAAbX,KAAK;QAAUa,kBAAkB,GAAAF,oBAAA,CAAlBE,kBAAkB;MAMzC,IAAMC,aAAa,GAAGpB,OAAO,CAACE,MAAM,CAACgB,MAAM,EAAEL,GAAG,CAAC;MAEjDM,kBAAkB,CAAC,CAAC;MAEpB,OAAOC,aAAa;IACtB,CAAC;EACH;EAEA,OAAOpB,OAAO;AAChB;;AAyIA;;AAKA;;AAOA;;AAKA;AACA,OAAO,SAASqB,gBAAgBA,CAAA,EAAwB;EAAA,IAAvBC,cAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EACpD,OAAO,UAACvB,OAAY;IAAA,OAClB,CAAEsB,cAAc,GAAG3B,eAAe,GAAGC,gBAAgB,EAAUI,OAAO,CAAC;EAAA;AAC3E;AAEA,OAAO,SAAS0B,yBAAyBA,CAMvCpB,KAAmB,EACnBqB,MAAS,EAC6D;EACtEA,MAAM,CAACrB,KAAK,GAAGA,KAAY;EAC3B,OAAOqB,MAAM;AACf;;AAuBA"}