@dvcol/neo-svelte
Version:
Neomorphic ui library for svelte 5
158 lines (157 loc) • 4.33 kB
TypeScript
export declare const KeyboardLayouts: {
readonly Qwerty: "qwerty";
readonly Azerty: "azerty";
};
export type KeyboardLayout = (typeof KeyboardLayouts)[keyof typeof KeyboardLayouts];
export interface TypeWriterRandomOptions {
/**
* Should generate typos
*/
enabled?: boolean;
/**
* How often to generate a typo
*
* @default 0.2 (20% chance)
*/
odds?: number;
/**
* Modulo to generate a typo
*
* @default 5 (every 5 characters)
*/
modulo?: number;
}
export type TypeWriterTypoOptions = TypeWriterRandomOptions & {
/**
* The keyboard layout to use for typos
*
* @default KeyboardLayouts.Qwerty
*/
layout?: KeyboardLayout;
};
export type TypeWriterPauseOptions = TypeWriterRandomOptions & {
/**
* Which mode to use for sleep value
*/
mode?: 'write' | 'delete';
/**
* Duration of the pause
*
* @default { write: 600, delete: 400 }
*/
speed?: TypeWriterSpeed;
/**
* Regex to match characters to pause on.
*
* @default /\s|[.,;:!?]/ (whitespace and punctuation)
*/
regex?: RegExp;
/**
* Whether to pause between loops and iterations
*
* @default 2000
*/
iterations?: boolean | number;
/**
* Abort controller to exit early
*/
controller?: AbortController;
};
export interface TypeWriterSpeed {
write: number | number[];
delete: number | number[];
}
export interface TypeWriterLine {
text: string;
display?: string;
mode?: 'write' | 'delete' | 'loop';
speed?: TypeWriterSpeed;
pause?: TypeWriterPauseOptions;
typo?: TypeWriterTypoOptions;
}
export interface TypeWriterContext {
line: number;
text: string;
display?: string;
mode?: 'write' | 'delete';
}
export interface TypewriterOptions<T extends (string | TypeWriterLine)[] = (string | TypeWriterLine)[]> {
/**
* The lines to iterate over
*/
lines: T;
/**
* The current display text
*/
display?: string;
/**
* The animation mode (write, delete, loop)
*
* @default 'write'
*/
mode?: TypeWriterLine['mode'];
/**
* The speed of the typewriter (ms between characters)
*
* @default { write: 120, delete: 80 }
*/
speed?: number | TypeWriterLine['speed'];
/**
* Optional pause options to semi-randomly pause between words or characters
*
* @default { enabled: false, odds: 0.1, modulo: 1, speed: { write: 600, delete: 400 } }
*/
pause?: boolean | TypeWriterPauseOptions;
/**
* Optional typo options to semi-randomly generate typos in the text
*
* @default { enabled: false, odds: 0.1, modulo: 6, layout: KeyboardLayouts.Qwerty, speed: { write: 120, delete: 80 } }
*/
typo?: boolean | TypeWriterTypoOptions;
/**
* Number of iterations to run the typewriter (0 for infinite)
*
* @default 1
*/
iterations?: number;
/**
* Abort controller to exit early
*/
controller?: AbortController;
/**
* Event handlers that fire when a new iteration starts (or when a loop change direction)
*
* @param context
*/
onStart?: (context: TypeWriterContext & {
iteration: number;
}) => void;
/**
* Event handlers that fire when a new iteration ends (or when a loop change direction)
* @param context
*/
onEnd?: (context: TypeWriterContext & {
iteration: number;
}) => void;
/**
* Event handlers that fire when a new character is typed
* @param context
*/
onType?: (context: TypeWriterContext) => void;
/**
* Event handlers that fire when a typo is generated
* @param context
*/
onTypo?: (context: TypeWriterContext) => void;
/**
* Event handlers that fire when a pause is generated
* @param context
*/
onPause?: (context: TypeWriterContext) => void;
/**
* Event handlers that fire when the typewriter is aborted via the controller.
* @param controller
*/
onAbort?: (controller: AbortController) => void;
}
export declare function typewriter<T extends (string | TypeWriterLine)[]>({ lines, iterations, controller, ...options }: TypewriterOptions<T>): Promise<string | undefined>;