mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-05-31 12:15:42 -04:00
* add vitest * initialize lib w/ tests * move to dev dep * run tests in CI * update file names * move api folder to lib * move api and api types to same folder * update generator outpath * rm husky * i guess i _did_ need those types * reorg types * extract validators into testable components * (WIP) start composable testing * fix import type * fix linter complaint * simplify icon type def * fix linter errors (maybe?) * rename client file for sorting
74 lines
1.6 KiB
TypeScript
74 lines
1.6 KiB
TypeScript
import { OcrTsvResponse } from "~/lib/api/types/ocr";
|
|
import { Recipe } from "~/lib/api/types/recipe";
|
|
|
|
export type CanvasRect = {
|
|
startX: number;
|
|
startY: number;
|
|
w: number;
|
|
h: number;
|
|
};
|
|
|
|
export type ImagePosition = {
|
|
sx: number;
|
|
sy: number;
|
|
sWidth: number;
|
|
sHeight: number;
|
|
dx: number;
|
|
dy: number;
|
|
dWidth: number;
|
|
dHeight: number;
|
|
scale: number;
|
|
panStartPoint: {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
};
|
|
|
|
export type Mouse = {
|
|
current: {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
down: boolean;
|
|
};
|
|
|
|
// https://stackoverflow.com/questions/58434389/export typescript-deep-keyof-of-a-nested-object/58436959#58436959
|
|
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...0[]];
|
|
|
|
type Join<K, P> = K extends string | number
|
|
? P extends string | number
|
|
? `${K}${"" extends P ? "" : "."}${P}`
|
|
: never
|
|
: never;
|
|
|
|
export type Leaves<T, D extends number = 10> = [D] extends [never]
|
|
? never
|
|
: T extends object
|
|
? { [K in keyof T]-?: Join<K, Leaves<T[K], Prev[D]>> }[keyof T]
|
|
: "";
|
|
|
|
export type Paths<T, D extends number = 10> = [D] extends [never]
|
|
? never
|
|
: T extends object
|
|
? {
|
|
[K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K], Prev[D]>> : never;
|
|
}[keyof T]
|
|
: "";
|
|
|
|
export type SelectedRecipeLeaves = Leaves<Recipe>;
|
|
|
|
export type CanvasModes = "selection" | "panAndZoom";
|
|
|
|
export type SelectedTextSplitModes = keyof OcrTsvResponse | "flatten";
|
|
|
|
export type ToolbarIcons<T extends string> = {
|
|
sectionTitle: string;
|
|
eventHandler(mode: T): void;
|
|
highlight: T;
|
|
icons: {
|
|
name: T;
|
|
icon: string;
|
|
tooltip: string;
|
|
}[];
|
|
}[];
|