@wtechtec/qr-generator-core
Version:
A powerful QR code generator with customizable styling options
256 lines (255 loc) • 7.2 kB
TypeScript
import type { CanvasConfig } from '../types/qr-generator';
export interface QRGeneratorConfig {
text: string;
width: number;
height: number;
qrPosition: {
x: number;
y: number;
};
qrSize: {
width: number;
height: number;
};
qrOptions: {
typeNumber: number;
mode: 'Numeric' | 'Alphanumeric' | 'Byte' | 'Kanji';
errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H';
};
imageOptions: {
hideBackgroundDots: boolean;
imageSize: number;
margin: number;
crossOrigin: string;
};
dotsOptions: {
color: string;
type: 'rounded' | 'dots' | 'classy' | 'classy-rounded' | 'square' | 'extra-rounded';
gradient?: {
type: 'linear' | 'radial';
rotation: number;
colorStops: any;
};
};
backgroundOptions: {
color: string;
gradient?: {
type: 'linear' | 'radial';
rotation: number;
colorStops: any;
};
};
cornersSquareOptions: {
color: string;
type: 'dot' | 'square' | 'extra-rounded';
gradient?: {
type: 'linear' | 'radial';
rotation: number;
colorStops: Array<{
offset: number;
color: string;
}>;
};
};
cornersDotOptions: {
color: string;
type: 'dot' | 'square';
gradient?: {
type: 'linear' | 'radial';
rotation: number;
colorStops: Array<{
offset: number;
color: string;
}>;
};
};
logo?: {
src: string;
size: number;
position?: {
x: number;
y: number;
};
};
exportOptions: {
format: 'png' | 'jpeg' | 'svg';
quality: number;
borderRadius: number;
};
backgrounds?: Array<{
src: string;
position: {
x: number;
y: number;
};
size: {
width: number;
height: number;
};
mode: 'fill' | 'contain' | 'cover' | 'stretch';
zIndex: number;
opacity: number;
}>;
texts?: Array<{
content: string;
position: {
x: number;
y: number;
};
fontSize: number;
color: string;
fontFamily: string;
fontWeight: number;
zIndex: number;
opacity: number;
textAlign?: 'left' | 'center' | 'right';
lineHeight?: number;
}>;
htmlModules?: Array<{
content: string;
position: {
x: number;
y: number;
};
size: {
width: number;
height: number;
};
zIndex: number;
opacity: number;
}>;
}
export interface PlatformQRGeneratorConfig extends CanvasConfig {
exportOptions?: {
scale?: number;
useCORS?: boolean;
allowTaint?: boolean;
backgroundColor?: string;
logging?: boolean;
};
}
export declare const defaultConfig: Partial<QRGeneratorConfig>;
export declare const calculateDefaultQRSettings: (canvasWidth: number, canvasHeight: number, qrRatio?: number) => {
qrPosition: {
x: number;
y: number;
};
qrSize: {
width: number;
height: number;
};
};
export declare class PlatformQRGenerator {
private config;
private previewElement;
private isInitialized;
constructor(config: PlatformQRGeneratorConfig);
initialize(previewElement: HTMLElement): void;
updateConfig(newConfig: Partial<PlatformQRGeneratorConfig>): void;
getConfig(): PlatformQRGeneratorConfig;
private checkInitialized;
createSnapshot(): Promise<HTMLCanvasElement>;
private applyRoundedCorners;
exportAsPNG(options?: {
quality?: number;
borderRadius?: number;
scale?: number;
}): Promise<Blob>;
exportAsDataURL(options?: {
quality?: number;
borderRadius?: number;
scale?: number;
}): Promise<string>;
downloadAsPNG(filename?: string, options?: {
quality?: number;
borderRadius?: number;
scale?: number;
}): Promise<void>;
getPreviewInfo(): {
width: number;
height: number;
element: HTMLElement | null;
};
generateConfigString(): string;
loadFromConfigString(configString: string): void;
destroy(): void;
validateConfig(): {
isValid: boolean;
errors: string[];
};
getEstimatedFileSize(): Promise<number>;
}
export declare const createPlatformQRGenerator: (config: PlatformQRGeneratorConfig) => PlatformQRGenerator;
export declare const exportPreviewAsPNG: (previewElement: HTMLElement, config: PlatformQRGeneratorConfig, options?: {
quality?: number;
borderRadius?: number;
scale?: number;
}) => Promise<Blob>;
export declare const exportPreviewAsDataURL: (previewElement: HTMLElement, config: PlatformQRGeneratorConfig, options?: {
quality?: number;
borderRadius?: number;
scale?: number;
}) => Promise<string>;
export declare class QRGenerator {
private config;
private container;
private qrCode;
private isRendered;
constructor(config: Partial<QRGeneratorConfig>);
private createCanvas;
private createGradientStyle;
private getObjectFitStyle;
private addBackgrounds;
private addQRCode;
private addTexts;
private addHtmlModules;
render(): Promise<HTMLDivElement>;
exportAsPNG(options?: {
scale?: number;
quality?: number;
useCORS?: boolean;
allowTaint?: boolean;
}): Promise<Blob>;
exportAsDataURL(options?: {
scale?: number;
quality?: number;
useCORS?: boolean;
allowTaint?: boolean;
}): Promise<string>;
downloadAsPNG(filename?: string, options?: {
scale?: number;
quality?: number;
useCORS?: boolean;
allowTaint?: boolean;
}): Promise<void>;
getPreviewElement(): HTMLDivElement | null;
updateConfig(newConfig: Partial<QRGeneratorConfig>): void;
getConfig(): QRGeneratorConfig;
getConfigString(): string;
loadFromConfigString(configString: string): void;
validateConfig(): {
isValid: boolean;
errors: string[];
};
cleanup(): void;
destroy(): void;
}
export declare const createQRGenerator: (config: Partial<QRGeneratorConfig>) => QRGenerator;
export declare const generateQRAsPNG: (config: Partial<QRGeneratorConfig>, exportOptions?: {
scale?: number;
quality?: number;
useCORS?: boolean;
allowTaint?: boolean;
}) => Promise<Blob>;
export declare const generateQRAsDataURL: (config: Partial<QRGeneratorConfig>, exportOptions?: {
scale?: number;
quality?: number;
useCORS?: boolean;
allowTaint?: boolean;
}) => Promise<string>;
export declare const generateAndDownloadQR: (config: Partial<QRGeneratorConfig>, filename?: string, exportOptions?: {
scale?: number;
quality?: number;
useCORS?: boolean;
allowTaint?: boolean;
}) => Promise<void>;