import type { Vec2 } from "./vec2"; /** Returns the arguments of a given function type */ export type Arguments<T extends (...args: any) => any> = T extends ( ...args: infer U ) => any ? U : never; export interface VisualKey { position: Vec2; size: Vec2; angle?: number; } export type VisualLayout = VisualKey[]; export enum SpecialSymbols { TL, TR, } export type KeySymbol = SpecialSymbols | string; export interface KeyboardKey { main: KeySymbol; tlLayer: KeySymbol; trLayer: KeySymbol; blLayer: KeySymbol; } export interface LayoutColorscheme { keyFill: string; keyStroke: string; mainLayerColor: string; tlLayerColor: string; trLayerColor: string; blLayerColor: string; } export interface LayoutMeasurements { keySize: number; keyPadding: number; keyCornerRadius: number; keyStrokeWidth: number; } export enum PredefinedLayoutName { split_3x5_2, alpha_staggered_double_switch, } export type ChordName = string; export interface ChordConfig { input: KeySymbol[]; output: KeySymbol; fill: string; stroke?: string; fontSizeModifier?: number; } export interface ElementLayout { groupsPerRow: number; groupPadding: number; imagePadding: number; mainToChordsGap: number; } export interface Config { keys: KeySymbol[][]; chords: ChordConfig[][]; layout: PredefinedLayoutName; colorscheme: LayoutColorscheme; measurements: LayoutMeasurements; elementLayout: ElementLayout; } export type PredefinedLayout = { visual: VisualLayout; size: Vec2; }; export interface Layout extends PredefinedLayout { colorscheme: LayoutColorscheme; measurements: LayoutMeasurements; elementLayout: ElementLayout; keys: KeyboardKey[]; chords: ChordConfig[][]; }