11import { computed , inject , markRaw , nextTick , reactive , useAttrs } from 'vue'
22import { tryOnUnmounted } from '@vueuse/core'
3- import type { Component } from 'vue'
43import VueFinalModal from './components/VueFinalModal/VueFinalModal.vue'
54import type CoreModal from './components/CoreModal/CoreModal.vue'
65import { internalVfmSymbol } from './injectionSymbols'
76
8- import type { ComponentProps , Constructor , InternalVfm , ModalSlot , ModalSlotOptions , RawProps , UseModalOptions , UseModalOptionsPrivate , UseModalReturnType , Vfm } from './Modal'
7+ import type { ComponentProps , ComponentType , InternalVfm , ModalSlot , ModalSlotOptions , UseModalOptions , UseModalOptionsPrivate , UseModalReturnType , Vfm } from './Modal'
98import { activeVfm , getActiveVfm } from './plugin'
109import { isString } from '~/utils'
1110
@@ -34,7 +33,7 @@ export function useInternalVfm(): InternalVfm {
3433 return inject ( internalVfmSymbol ) !
3534}
3635
37- function withMarkRaw < P > ( options : Partial < UseModalOptions < P > > , DefaultComponent : Component = VueFinalModal ) {
36+ function withMarkRaw < T extends ComponentType > ( options : Partial < UseModalOptions < T > > , DefaultComponent : ComponentType = VueFinalModal ) {
3837 const { component, slots : innerSlots , ...rest } = options
3938
4039 const slots = typeof innerSlots === 'undefined'
@@ -55,23 +54,23 @@ function withMarkRaw<P>(options: Partial<UseModalOptions<P>>, DefaultComponent:
5554
5655 return {
5756 ...rest ,
58- component : markRaw ( component || DefaultComponent ) as Constructor < P > ,
57+ component : markRaw ( component || DefaultComponent ) ,
5958 slots,
6059 }
6160}
6261
6362/**
6463 * Create a dynamic modal.
6564 */
66- export function useModal < P = InstanceType < typeof VueFinalModal > [ '$props' ] > ( _options : UseModalOptions < P > ) : UseModalReturnType < P > {
65+ export function useModal < T extends ComponentType = typeof VueFinalModal > ( _options : UseModalOptions < T > ) : UseModalReturnType < T > {
6766 const options = reactive ( {
6867 id : Symbol ( 'useModal' ) ,
6968 modelValue : ! ! _options ?. defaultModelValue ,
7069 resolveOpened : ( ) => { } ,
7170 resolveClosed : ( ) => { } ,
7271 attrs : { } ,
73- ...withMarkRaw < P > ( _options ) ,
74- } ) as UseModalOptions < P > & UseModalOptionsPrivate
72+ ...withMarkRaw < T > ( _options ) ,
73+ } ) as UseModalOptions < T > & UseModalOptionsPrivate
7574 tryOnUnmounted ( ( ) => {
7675 if ( ! options ?. keepAlive )
7776 destroy ( )
@@ -122,7 +121,7 @@ export function useModal<P = InstanceType<typeof VueFinalModal>['$props']>(_opti
122121 } )
123122 }
124123
125- function patchOptions ( _options : Partial < UseModalOptions < P > > ) {
124+ function patchOptions ( _options : Partial < UseModalOptions < T > > ) {
126125 const { slots, ...rest } = withMarkRaw ( _options , options . component )
127126
128127 if ( _options . defaultModelValue !== undefined )
@@ -147,9 +146,9 @@ export function useModal<P = InstanceType<typeof VueFinalModal>['$props']>(_opti
147146 }
148147 }
149148
150- function patchComponentOptions < P > (
151- options : UseModalOptions < P > | ModalSlotOptions ,
152- newOptions : Partial < UseModalOptions < P > > | ModalSlotOptions ,
149+ function patchComponentOptions < T extends ComponentType > (
150+ options : UseModalOptions < T > | ModalSlotOptions ,
151+ newOptions : Partial < UseModalOptions < T > > | ModalSlotOptions ,
153152 ) {
154153 if ( newOptions . component )
155154 options . component = newOptions . component
@@ -182,9 +181,9 @@ export function useModal<P = InstanceType<typeof VueFinalModal>['$props']>(_opti
182181 }
183182}
184183
185- export function useModalSlot < P > ( options : {
186- component : Constructor < P >
187- attrs ?: ( RawProps & P ) | ( { } extends P ? null : never )
184+ export function useModalSlot < T extends ComponentType > ( options : {
185+ component : T
186+ attrs ?: ComponentProps < T >
188187} ) {
189188 return options
190189}
@@ -217,8 +216,8 @@ export function byPassAllModalEvents(emit?: InstanceType<typeof CoreModal>['$emi
217216}
218217
219218export function useVfmAttrs ( options : {
220- props : ComponentProps
221- modalProps : ComponentProps
219+ props : Record < any , any >
220+ modalProps : Record < any , any >
222221 emit ?: any
223222} ) {
224223 const { props, modalProps, emit } = options
0 commit comments