quasar
Version:
Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
190 lines (160 loc) • 4.74 kB
TypeScript
import { QUploader, LiteralUnion } from "quasar";
import {
ComponentOptionsMixin,
ComponentPropsOptions,
ComponentPublicInstance,
DefineComponent,
EmitsOptions,
ExtractPropTypes,
Ref,
SetupContext,
} from "vue";
import { MetaOptions } from "./meta";
export * from "./utils/colors";
export * from "./utils/date";
export * from "./utils/dom";
export * from "./utils/event";
export * from "./utils/format";
export * from "./utils/scroll";
export * from "./utils/is";
export * from "./utils/patterns";
export * from "./utils/run-sequential-promises";
import { BrandColor } from "./api/color";
import { VueStyleObjectProp } from "./api/vue-prop-types";
interface ExportFileOpts {
mimeType?: string;
byteOrderMark?: string | Uint8Array;
encoding?: string;
}
// others utils
export function copyToClipboard(text: string): Promise<void>;
export function debounce<F extends (...args: any[]) => any>(
fn: F,
wait?: number,
immediate?: boolean,
): ((this: ThisParameterType<F>, ...args: Parameters<F>) => void) & {
cancel(): void;
};
export function frameDebounce<F extends (...args: any[]) => any>(
fn: F,
): ((this: ThisParameterType<F>, ...args: Parameters<F>) => void) & {
cancel(): void;
};
export function exportFile(
fileName: string,
rawData: string | ArrayBuffer | ArrayBufferView | Blob,
opts?: string | ExportFileOpts,
): true | Error;
export function extend<R>(deep: boolean, target: any, ...sources: any[]): R;
export function extend<R>(target: object, ...sources: any[]): R;
export function openURL<F extends (...args: any[]) => any>(
url: string,
reject?: F,
windowFeatures?: Object,
): void;
export function throttle<F extends (...args: any[]) => any>(
fn: F,
limit: number,
): F;
export function uid(): string;
interface MorphOptions {
from: Element | string | (() => Element | null | undefined);
to?: Element | string | (() => Element | null | undefined);
onToggle?: () => void;
waitFor?: number | "transitionend" | Promise<any>;
duration?: number;
easing?: string;
delay?: number;
fill?: string;
style?: string | VueStyleObjectProp;
classes?: string;
resize?: boolean;
useCSS?: boolean;
hideFromClone?: boolean;
keepToClone?: boolean;
tween?: boolean;
tweenFromOpacity?: number;
tweenToOpacity?: number;
onEnd?: (direction: "to" | "from", aborted: boolean) => void;
}
export function morph(options: MorphOptions): (abort?: boolean) => boolean;
export function getCssVar(
varName: LiteralUnion<BrandColor>,
element?: Element,
): string | null;
export function setCssVar(
varName: LiteralUnion<BrandColor>,
value: string,
element?: Element,
): void;
interface Callbacks {
[key: string]: (...args: any[]) => void;
}
export class EventBus<T extends Callbacks = Callbacks> {
on<K extends keyof T>(
event: K,
callback: T[K],
...ctx: unknown extends ThisParameterType<T[K]>
? []
: [ctx: ThisParameterType<T[K]>]
): this;
once<K extends keyof T>(
event: K,
callback: T[K],
...ctx: unknown extends ThisParameterType<T[K]>
? []
: [ctx: ThisParameterType<T[K]>]
): this;
emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): this;
off<K extends keyof T>(event: K, callback?: T[K]): this;
}
interface CreateMetaMixinContext extends ComponentPublicInstance {
[index: string]: any;
}
export function createMetaMixin<
CustomInstanceProperties extends Record<string, any> = {},
>(
options:
| MetaOptions
| ((
this: CreateMetaMixinContext & CustomInstanceProperties,
) => MetaOptions),
): ComponentOptionsMixin;
interface InjectPluginFnHelpers {
queuedFiles: Ref<File[]>;
uploadedFiles: Ref<File[]>;
uploadedSize: Ref<number>;
updateFileStatus: (
file: File,
status: "failed" | "idle" | "uploaded" | "uploading",
uploadedSize?: number,
) => void;
isAlive: () => boolean;
}
interface InjectPluginFnOptions<Props> {
props: ExtractPropTypes<Props>;
emit: SetupContext["emit"];
helpers: InjectPluginFnHelpers;
exposeApi: (api: Record<string, any>) => void;
}
interface InjectPluginFnReturn {
isUploading: Ref<boolean>;
isBusy: Ref<boolean>;
abort: () => void;
upload: () => void;
}
interface CreateUploaderComponentOptions<
Props extends ComponentPropsOptions = {},
Emits extends EmitsOptions = [],
> {
name: string;
props?: Props;
emits?: Emits;
injectPlugin(options: InjectPluginFnOptions<Props>): InjectPluginFnReturn;
}
export function createUploaderComponent<
Props extends ComponentPropsOptions = {},
Emits extends EmitsOptions = [],
>(
options: CreateUploaderComponentOptions<Props, Emits>,
): QUploader & DefineComponent<Props, {}, {}, {}, {}, {}, {}, Emits>;