UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 11 kB
{"version":3,"file":"defineComponent.mjs","names":["defineComponent","_defineComponent","computed","getCurrentInstance","shallowRef","watchEffect","consoleWarn","mergeDeep","toKebabCase","injectSelf","propsFactory","DefaultsSymbol","provideDefaults","useDefaults","useToggleScope","propIsDefined","vnode","prop","props","options","_setup","setup","name","_as","String","ctx","defaults","value","vm","componentDefaults","_props","Proxy","get","target","global","Reflect","_subcomponentDefaults","subComponents","Object","entries","filter","key","startsWith","toUpperCase","length","fromEntries","setupBindings","genericComponent","exposeDefaults","defineFunctionalComponent","render"],"sources":["../../src/util/defineComponent.tsx"],"sourcesContent":["// Utils\nimport {\n defineComponent as _defineComponent, // eslint-disable-line no-restricted-imports\n computed,\n getCurrentInstance,\n shallowRef,\n watchEffect,\n} from 'vue'\nimport { consoleWarn } from '@/util/console'\nimport { mergeDeep, toKebabCase } from '@/util/helpers'\nimport { injectSelf } from '@/util/injectSelf'\nimport { propsFactory } from '@/util/propsFactory'\nimport { DefaultsSymbol, provideDefaults, useDefaults } from '@/composables/defaults'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Types\nimport type {\n AllowedComponentProps,\n ComponentCustomProps,\n ComponentObjectPropsOptions,\n ComponentOptions,\n ComponentOptionsMixin,\n ComponentOptionsWithObjectProps,\n ComponentPropsOptions,\n ComputedOptions,\n DefineComponent,\n EmitsOptions,\n ExtractDefaultPropTypes,\n ExtractPropTypes,\n FunctionalComponent,\n MethodOptions,\n ObjectEmitsOptions,\n VNode,\n VNodeChild,\n VNodeProps,\n} from 'vue'\n\nfunction propIsDefined (vnode: VNode, prop: string) {\n return typeof vnode.props?.[prop] !== 'undefined' ||\n typeof vnode.props?.[toKebabCase(prop)] !== 'undefined'\n}\n\nexport const defineComponent = (function defineComponent (options: ComponentOptions) {\n options._setup = options._setup ?? options.setup\n\n if (!options.name) {\n consoleWarn('The component is missing an explicit name, unable to generate default prop value')\n\n return options\n }\n\n if (options._setup) {\n options.props = options.props ?? {}\n\n options.props = propsFactory(options.props, toKebabCase(options.name))()\n\n options.props._as = String\n options.setup = function setup (props: Record<string, any>, ctx) {\n const defaults = useDefaults()\n\n // Skip props proxy if defaults are not provided\n if (!defaults.value) return options._setup(props, ctx)\n\n const vm = getCurrentInstance()!\n const componentDefaults = computed(() => defaults.value![props._as ?? options.name!])\n const _props = new Proxy(props, {\n get (target, prop) {\n if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {\n return componentDefaults.value?.[prop] ?? defaults.value!.global?.[prop] ?? target[prop]\n }\n return Reflect.get(target, prop)\n },\n })\n\n const _subcomponentDefaults = shallowRef()\n watchEffect(() => {\n if (componentDefaults.value) {\n const subComponents = Object.entries(componentDefaults.value).filter(([key]) => key.startsWith(key[0].toUpperCase()))\n if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents)\n }\n })\n\n const setupBindings = options._setup(_props, ctx)\n\n // If subcomponent defaults are provided, override any\n // subcomponents provided by the component's setup function.\n // This uses injectSelf so must be done after the original setup to work.\n useToggleScope(_subcomponentDefaults, () => {\n provideDefaults(mergeDeep(\n injectSelf(DefaultsSymbol)?.value ?? {},\n _subcomponentDefaults.value\n ))\n })\n\n return setupBindings\n }\n }\n\n return options\n}) as unknown as typeof _defineComponent\n\ntype ToListeners<T extends string | number | symbol> = { [K in T]: K extends `on${infer U}` ? Uncapitalize<U> : K }[T]\n\nexport type SlotsToProps<T extends Record<string, any>> = T extends Record<string, Slot> ? ({\n $children?: (\n | VNodeChild\n | (keyof T extends 'default' ? T['default'] : {})\n | { [K in keyof T]?: T[K] }\n )\n $slots?: { [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}) : T extends Record<string, any[]> ? SlotsToProps<MakeSlots<T>> : never\n\ntype Slot<T extends any[] = any[]> = (...args: T) => VNodeChild\nexport type MakeSlots<T extends Record<string, any[]>> = {\n [K in keyof T]: Slot<T[K]>\n}\n\nexport type GenericSlot = SlotsToProps<{ default: [] }>\n\ntype DefineComponentWithGenericProps<T extends (new () => {\n $props?: Record<string, any>\n})> = <\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 = InstanceType<T>,\n Base = DefineComponent<\n I extends Record<'$props', any>\n ? Omit<PropsOptions, keyof I['$props']>\n : PropsOptions,\n RawBindings,\n D,\n C,\n M,\n Mixin,\n Extends,\n E extends any[] ? E : I extends Record<'$props', any> ? Omit<E, ToListeners<keyof I['$props']>> : E,\n EE\n >\n>(\n options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE>\n) => Base & T\n\ntype DefineComponentWithSlots<Slots extends Record<string, any[]> | Record<string, Slot>> = <\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>(\n options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE>\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> & SlotsToProps<Slots> & ({} extends E ? {} : EmitsToProps<E>),\n ExtractDefaultPropTypes<PropsOptions>\n>\n\n// No argument - simple default slot\nexport function genericComponent (exposeDefaults?: boolean): DefineComponentWithSlots<{ default: [] }>\n\n// Generic constructor argument - generic props and slots\nexport function genericComponent<T extends (new () => {\n $props?: Record<string, any>\n})> (exposeDefaults?: boolean): DefineComponentWithGenericProps<T>\n\n// Slots argument - simple slots\nexport function genericComponent<\n Slots extends Record<string, any[]> | Record<string, Slot>\n> (exposeDefaults?: boolean): DefineComponentWithSlots<Slots>\n\n// Implementation\nexport function genericComponent (exposeDefaults = true) {\n return (options: any) => (exposeDefaults ? defineComponent : _defineComponent)(options) as any\n}\n\nexport function defineFunctionalComponent<\n T extends FunctionalComponent<Props>,\n PropsOptions = ComponentObjectPropsOptions,\n Defaults = ExtractDefaultPropTypes<PropsOptions>,\n Props = Readonly<ExtractPropTypes<PropsOptions>>,\n> (props: PropsOptions, render: T): 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 =\n & VNodeProps\n & AllowedComponentProps\n & ComponentCustomProps\n"],"mappings":"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"}