diff --git a/packages/vue-final-modal/src/Modal.ts b/packages/vue-final-modal/src/Modal.ts index 8065fe7f..c503712a 100644 --- a/packages/vue-final-modal/src/Modal.ts +++ b/packages/vue-final-modal/src/Modal.ts @@ -1,71 +1,37 @@ -import type { App, CSSProperties, Component, ComponentOptions, ComponentPublicInstance, ComputedRef, ConcreteComponent, Raw, Ref, VNodeProps } from 'vue' -import type { VueFinalModal } from '.' +import type { App, CSSProperties, Component, ComponentPublicInstance, ComputedRef, Raw, Ref, VNodeProps } from 'vue' export type ComponentProps = ComponentPublicInstance['$props'] export type ModalId = number | string | symbol export type StyleValue = string | CSSProperties | (string | CSSProperties)[] -type RawProps = VNodeProps & { +export interface Constructor
{
+ __isFragment?: never
+ __isTeleport?: never
+ __isSuspense?: never
+ new (...args: any[]): { $props: P }
+}
+
+export type RawProps = VNodeProps & {
// used to differ from a single VNode object as children
__v_isVNode?: never
// used to differ from Array children
[Symbol.iterator]?: never
} & Record = (RawProps & P) | ({} extends P ? InstanceType { component?: ConcreteComponent ; attrs?: VfmAttrs }
-interface UseModalOptionsComponentOptions { component?: ComponentOptions ; attrs?: VfmAttrs }
-
-type SlotAttrs = (RawProps & P) | ({} extends P ? null : never)
-interface ModalSlotOptionsConcreteComponent { component: ConcreteComponent ; attrs?: SlotAttrs }
-interface ModalSlotOptionsComponentOptions { component: ComponentOptions ; attrs?: SlotAttrs }
-
export interface ModalSlotOptions { component: Raw = {
+ defaultModelValue?: boolean
+ context?: Vfm
+ component?: Constructor
+ attrs?: (RawProps & P) | ({} extends P ? null : never)
slots?: {
- default: ModalSlot
[key: string]: ModalSlot
}
}
-export type UseModalOptions = {
- defaultModelValue?: boolean
- context?: Vfm
- component?: Raw (options: UseModalOptionsConcreteComponent & UseModalOptionsSlots): UseModalReturnType
- (options: UseModalOptionsComponentOptions & UseModalOptionsSlots): UseModalReturnType
- (options:
- | UseModalOptionsConcreteComponent & UseModalOptionsSlots
- | UseModalOptionsComponentOptions & UseModalOptionsSlots
- | UseModalOptions
- ): UseModalReturnType
-}
-
-interface IOverloadedPatchOptionsFn {
- (options: UseModalOptionsConcreteComponent & UseModalOptionsSlots): void
- (options: UseModalOptionsComponentOptions & UseModalOptionsSlots): void
- (options:
- | UseModalOptionsConcreteComponent & UseModalOptionsSlots
- | UseModalOptionsComponentOptions & UseModalOptionsSlots
- | Omit (options: ModalSlotOptionsConcreteComponent ): ModalSlot
- (options: ModalSlotOptionsComponentOptions ): ModalSlot
- (options: ModalSlotOptionsConcreteComponent | ModalSlotOptionsComponentOptions | ModalSlot): ModalSlot
-}
-
-export const useModalSlot: IOverloadedUseModalSlotFn = (options: ModalSlot): ModalSlot => options
-
export type UseModalOptionsPrivate = {
id: symbol
modelValue: boolean
@@ -73,11 +39,11 @@ export type UseModalOptionsPrivate = {
resolveClosed: () => void
}
-export interface UseModalReturnType {
- options: UseModalOptions & UseModalOptionsPrivate
+export interface UseModalReturnType {
+ options: UseModalOptions & UseModalOptionsPrivate
open: () => Promise (options: Partial ,
slots,
}
}
@@ -51,15 +51,15 @@ function withMarkRaw(options: Partial ['$props']>(_options: UseModalOptions ): UseModalReturnType {
const options = reactive({
id: Symbol('useModal'),
modelValue: !!_options?.defaultModelValue,
- resolveOpened: () => {},
- resolveClosed: () => {},
+ resolveOpened: () => { },
+ resolveClosed: () => { },
attrs: {},
- ...withMarkRaw(_options),
- }) as UseModalOptions & UseModalOptionsPrivate
+ ...withMarkRaw (_options),
+ }) as UseModalOptions & UseModalOptionsPrivate
if (!options.context) {
const currentInstance = getCurrentInstance()
@@ -89,7 +89,7 @@ export const useModal: IOverloadedUseModalFn = function (_options: UseModalOptio
})
}
- function patchOptions(_options: Partial (options: {
+ component: Constructor
+ attrs?: (RawProps & P) | ({} extends P ? null : never)
+}) {
+ return options
+}
+
function patchAttrs (
+ options: Omit