UNPKG

@disjukr/croquis-js

Version:
18 lines (17 loc) 1.36 kB
import { StylusState } from './stylus'; export interface StrokeProtocol<TConfig = unknown, TState = unknown, TResult = unknown> { resume(config: TConfig, prevState: TState): StrokeDrawingContext<TConfig, TState, TResult>; down(config: TConfig, stylusState: StylusState): StrokeDrawingContext<TConfig, TState, TResult>; } export interface StrokeDrawingContext<TConfig = unknown, TState = unknown, TResult = unknown> { getConfig(): TConfig; getConfig<TStroke extends StrokeProtocol>(target: TStroke): ConfigOfStrokeProtocol<TStroke>; getState(): TState; getState<TStroke extends StrokeProtocol>(target: TStroke): StateOfStrokeProtocol<TStroke>; move(stylusState: StylusState): void; up(stylusState: StylusState): TResult; } export declare type StrokeDrawingContextFromProtocol<T> = T extends StrokeProtocol<infer TConfig, infer TState, infer TResult> ? StrokeDrawingContext<TConfig, TState, TResult> : StrokeDrawingContext<unknown, unknown, unknown>; export declare type ConfigOfStrokeProtocol<T> = T extends StrokeProtocol<infer TConfig, unknown, unknown> ? TConfig : unknown; export declare type StateOfStrokeProtocol<T> = T extends StrokeProtocol<unknown, infer TState, unknown> ? TState : unknown; export declare type ResultOfStrokeProtocol<T> = T extends StrokeProtocol<unknown, unknown, infer TResult> ? TResult : unknown;