vue-contenteditable
Version:
This plugin provides a `<contenteditable/>` element supporting `v-model`. It also provides some (optional) features, like preventing html input and paste, or new lines.
236 lines (235 loc) • 12.1 kB
TypeScript
declare module "components/__VLS_types" {
import * as vue from 'vue';
import type { FunctionalComponent, HTMLAttributes, VNodeProps, AllowedComponentProps, EmitsOptions, DefineComponent, SetupContext, ObjectDirective, FunctionDirective } from 'vue';
type IsAny<T> = boolean extends (T extends never ? true : false) ? true : false;
type IsFunctionalComponent<T> = T extends (...args: any) => JSX.Element ? true : false;
type IsConstructorComponent<T> = T extends new (...args: any) => JSX.ElementClass ? true : false;
type IsComponent_Loose<T> = IsConstructorComponent<T> extends false ? IsFunctionalComponent<T> extends false ? false : true : true;
type IsComponent_Strict<T> = IsConstructorComponent<T> extends true ? true : IsFunctionalComponent<T> extends true ? true : false;
type ComponentKeys<T> = keyof {
[K in keyof T as IsComponent_Loose<T[K]> extends true ? K : never]: any;
};
export type PickNotAny<A, B> = IsAny<A> extends true ? B : A;
type AnyArray<T = any> = T[] | readonly T[];
type ForableSource<T> = [
T extends {
[Symbol.iterator](): IterableIterator<infer T1>;
} ? T1 : T[keyof T],
typeof Symbol.iterator extends keyof T ? number : T extends T ? keyof T : never,
typeof Symbol.iterator extends keyof T ? undefined : number
][];
type CamelCase<S extends string> = S extends `${infer First}-${infer Right}` ? Capitalize<Right> extends Right ? `${First}-${CamelCase<Capitalize<Right>>}` : `${First}${CamelCase<Capitalize<Right>>}` : S;
export type GlobalComponents = PickNotAny<import('vue').GlobalComponents, {}> & PickNotAny<import('@vue/runtime-dom').GlobalComponents, {}> & Pick<typeof vue, 'Transition' | 'TransitionGroup' | 'KeepAlive' | 'Suspense' | 'Teleport'>;
export function getVforSourceType<T>(source: T): ForableSource<NonNullable<T extends number ? number[] : T extends string ? string[] : T>>;
export function getNameOption<T>(t?: T): T extends {
name: infer N;
} ? N : undefined;
export function directiveFunction<T>(dir: T): T extends ObjectDirective<infer E, infer V> ? undefined extends V ? (value?: V) => void : (value: V) => void : T extends FunctionDirective<infer E, infer V> ? undefined extends V ? (value?: V) => void : (value: V) => void : T;
export type HasScriptSlotsType<T> = T extends new (...args: any) => {
$slots?: infer _;
} ? true : false;
export type DefaultSlots<C> = HasScriptSlotsType<C> extends true ? {} : Record<string, any>;
export type WithSlots<T> = T extends new (...args: any) => {
$slots?: infer S;
} ? T : new (...args: any) => {
$slots: {};
};
export type ScriptSlots<T> = T extends {
$slots?: infer S;
} ? {
[K in keyof S]-?: S[K] extends ((obj: infer O) => any) | undefined ? O : S[K];
} : {};
export type GetComponentName<T, K extends string> = K extends keyof T ? IsAny<T[K]> extends false ? K : GetComponentName_CamelCase<T, CamelCase<K>> : GetComponentName_CamelCase<T, CamelCase<K>>;
export type GetComponentName_CamelCase<T, K extends string> = K extends keyof T ? IsAny<T[K]> extends false ? K : GetComponentName_CapitalCase<T, Capitalize<K>> : GetComponentName_CapitalCase<T, Capitalize<K>>;
export type GetComponentName_CapitalCase<T, K> = K extends keyof T ? K : never;
export type FillingEventArg_ParametersLength<E extends (...args: any) => any> = IsAny<Parameters<E>> extends true ? -1 : Parameters<E>['length'];
export type FillingEventArg<E> = E extends (...args: any) => any ? FillingEventArg_ParametersLength<E> extends 0 ? ($event?: undefined) => ReturnType<E> : E : E;
export type GetProperty<T, K, N = any> = K extends keyof T ? T[K] : N;
export type ComponentContext<T> = T extends new (...args: any) => any ? InstanceType<T> : T extends (...args: any) => any ? ReturnType<T> : T;
export type OptionsProps<T> = T extends {
props: infer R;
} ? R : {};
export type SelectComponent<T1, T2> = T1 extends (new (...args: any) => any) ? T1 : T1 extends ((...args: any) => any) ? T1 : T2;
export type ExtractEmit2<T> = T extends FunctionalComponent<infer _, infer E> ? SetupContext<E>['emit'] : T extends new (...args: any) => {
$emit: infer Emit;
} ? Emit : unknown;
export type ReturnVoid<T> = T extends (...payload: infer P) => any ? (...payload: P) => void : (...args: any) => void;
export type EmitEvent2<F, E> = F extends {
(event: E, ...payload: infer P): infer R;
} ? (...payload: P) => void : F extends {
(event: E, ...payload: infer P): infer R;
(...args: any): any;
} ? (...payload: P) => void : F extends {
(event: E, ...payload: infer P): infer R;
(...args: any): any;
(...args: any): any;
} ? (...payload: P) => void : F extends {
(event: E, ...payload: infer P): infer R;
(...args: any): any;
(...args: any): any;
(...args: any): any;
} ? (...payload: P) => void : unknown | '[Type Warning] Volar could not infer $emit event more than 4 overloads without DefineComponent. see https://github.com/johnsoncodehk/volar/issues/60';
export type EmitEvent<T, E> = T extends DefineComponent<infer _, any, any, any, any, any, any, infer E2> ? EmitEvent_3<E2, E> : T extends FunctionalComponent<infer _, infer E2> ? EmitEvent_3<E2, E> : T extends FunctionalComponent<infer _, infer E> ? EmitEvent2<SetupContext<E>['emit'], E> : unknown;
export type EmitEvent_3<E2, E> = EmitsOptions extends E2 ? unknown : E2 extends AnyArray<infer K> ? (E extends K ? (...args: any) => void : unknown) : E extends keyof E2 ? ReturnVoid<E2[E]> : unknown;
export type FirstFunction<F0 = void, F1 = void, F2 = void, F3 = void> = NonNullable<F0> extends (Function | AnyArray<Function>) ? F0 : NonNullable<F1> extends (Function | AnyArray<Function>) ? F1 : NonNullable<F2> extends (Function | AnyArray<Function>) ? F2 : NonNullable<F3> extends (Function | AnyArray<Function>) ? F3 : unknown;
export type GlobalAttrsBase = VNodeProps & AllowedComponentProps;
export type GlobalAttrs = GlobalAttrsBase & HTMLAttributes;
export type PickComponents<T> = ComponentKeys<T> extends keyof T ? Pick<T, ComponentKeys<T>> : T;
export type ConvertInvalidComponents<T> = {
[K in keyof T]: IsComponent_Strict<T[K]> extends true ? T[K] : any;
};
export type SelfComponent<N, C> = string extends N ? {} : N extends string ? {
[P in N]: C;
} : {};
}
declare module "components/contenteditable.vue.__VLS_script" {
import { defineProps, ref, computed, onMounted, watch } from 'vue';
const _default: import("vue").DefineComponent<{
tag: StringConstructor;
contenteditable: {
type: (StringConstructor | BooleanConstructor)[];
default: boolean;
};
modelValue: StringConstructor;
noHtml: {
type: BooleanConstructor;
default: boolean;
};
noNl: {
type: BooleanConstructor;
default: boolean;
};
}, {
defineProps: typeof defineProps;
ref: typeof ref;
computed: typeof import("@vue/reactivity").computed;
onMounted: (hook: () => any, target?: import("vue").ComponentInternalInstance | null | undefined) => false | Function | undefined;
watch: typeof watch;
replaceAll: (str: string, search: string, replacement: string) => string;
props: Readonly<import("vue").ExtractPropTypes<{
tag: StringConstructor;
contenteditable: {
type: (StringConstructor | BooleanConstructor)[];
default: boolean;
};
modelValue: StringConstructor;
noHtml: {
type: BooleanConstructor;
default: boolean;
};
noNl: {
type: BooleanConstructor;
default: boolean;
};
}>>;
emit: ((event: "returned", value?: any) => void) & ((event: "update:modelValue", value?: any) => void);
element: import("vue").Ref<HTMLElement | null | undefined>;
currentContent: () => string;
updateContent: (newcontent: string) => void;
update: (event: any) => void;
onPaste: (event: any) => void;
onKeypress: (event: any) => void;
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
returned: StringConstructor;
'update:modelValue': StringConstructor;
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
tag: StringConstructor;
contenteditable: {
type: (StringConstructor | BooleanConstructor)[];
default: boolean;
};
modelValue: StringConstructor;
noHtml: {
type: BooleanConstructor;
default: boolean;
};
noNl: {
type: BooleanConstructor;
default: boolean;
};
}>> & {
onReturned?: ((value?: any) => any) | undefined;
"onUpdate:modelValue"?: ((value?: any) => any) | undefined;
}, {
contenteditable: string | boolean;
noHtml: boolean;
noNl: boolean;
}>;
export default _default;
export const __VLS_options: {
props: {
tag: StringConstructor;
contenteditable: {
type: (StringConstructor | BooleanConstructor)[];
default: boolean;
};
modelValue: StringConstructor;
noHtml: {
type: BooleanConstructor;
default: boolean;
};
noNl: {
type: BooleanConstructor;
default: boolean;
};
};
emits: {
returned: StringConstructor;
'update:modelValue': StringConstructor;
};
};
export const __VLS_name: 'contenteditable';
export { defineProps as __VLS_types_defineProps, ref as __VLS_types_ref, computed as __VLS_types_computed, onMounted as __VLS_types_onMounted, watch as __VLS_types_watch, };
}
declare module "components/contenteditable.vue.__VLS_template" {
var __VLS_slots: {};
export default __VLS_slots;
}
declare module "components/contenteditable.vue" {
const _default_1: import("vue").DefineComponent<{
tag: StringConstructor;
contenteditable: {
type: (StringConstructor | BooleanConstructor)[];
default: boolean;
};
modelValue: StringConstructor;
noHtml: {
type: BooleanConstructor;
default: boolean;
};
noNl: {
type: BooleanConstructor;
default: boolean;
};
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
returned: StringConstructor;
'update:modelValue': StringConstructor;
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
tag: StringConstructor;
contenteditable: {
type: (StringConstructor | BooleanConstructor)[];
default: boolean;
};
modelValue: StringConstructor;
noHtml: {
type: BooleanConstructor;
default: boolean;
};
noNl: {
type: BooleanConstructor;
default: boolean;
};
}>> & {
onReturned?: ((value?: any) => any) | undefined;
"onUpdate:modelValue"?: ((value?: any) => any) | undefined;
}, {
contenteditable: string | boolean;
noHtml: boolean;
noNl: boolean;
}>;
export default _default_1;
}
declare module "vue-contenteditable" {
import contenteditable from "components/contenteditable.vue";
export default contenteditable;
}