0
Fork 0
mirror of https://github.com/penpot/penpot-plugins.git synced 2025-01-10 08:52:12 -05:00
penpot-plugins/libs/plugin-types/index.d.ts
2024-04-30 09:43:21 +02:00

212 lines
4.5 KiB
TypeScript

export interface PenpotFile {
id: string;
name: string;
revn: number;
}
export interface PenpotPage {
id: string;
name: string;
getShapeById(id: string): PenpotShape | null;
findShapes(): PenpotShape[];
}
export type PenpotGradient = {
type: 'linear' | 'radial';
startX: number;
startY: number;
endX: number;
endY: number;
width: number;
stops: Array<{ color: string; opacity?: number; offset: number }>;
};
export type PenpotImageData = {
name?: string;
width: number;
height: number;
mtype?: string;
id: string;
keepApectRatio?: boolean;
};
export interface PenpotFill {
fillColor?: string;
fillOpacity?: number;
fillColorGradient?: PenpotGradient;
fillColorRefFile?: string;
fillColorRefId?: string;
fillImage?: PenpotImageData;
}
export type PenpotStrokeCap =
| 'round'
| 'square'
| 'line-arrow'
| 'triangle-arrow'
| 'square-marker'
| 'circle-marker'
| 'diamond-marker';
export interface PenpotStroke {
strokeColor?: string;
strokeColorRefFile?: string;
strokeColorRefId?: string;
strokeOpacity?: number;
strokeStyle?: 'solid' | 'dotted' | 'dashed' | 'mixed' | 'none' | 'svg';
strokeWidth?: number;
strokeAlignment?: 'center' | 'inner' | 'outer';
strokeCapStart?: PenpotStrokeCap;
strokeCapEnd?: PenpotStrokeCap;
strokeColorGradient: PenpotGradient;
}
export interface PenpotShapeBase {
id: string;
name: string;
x: number;
y: number;
width: number;
height: number;
fills: PenpotFill[];
strokes: PenpotStroke[];
resize(width: number, height: number);
}
export interface PenpotText extends PenpotShape {
type: 'text';
characters: string;
}
export interface PenpotFrame extends PenpotShapeBase {
readonly type: 'frame';
readonly children: PenpotShape[];
}
export interface PenpotGroup extends PenpotShapeBase {
readonly type: 'group';
readonly children: PenpotShape[];
}
export interface PenpotBool extends PenpotShapeBase {
readonly type: 'bool';
readonly children: PenpotShape[];
}
export interface PenpotRectangle extends PenpotShapeBase {
readonly type: 'rect';
}
export interface PenpotPath extends PenpotShapeBase {
readonly type: 'rect';
}
export interface PenpotText extends PenpotShapeBase {
readonly type: 'text';
characters: string;
}
export interface PenpotCircle extends PenpotShapeBase {
type: 'circle';
}
export interface PenpotSvgRaw extends PenpotShapeBase {
type: 'svg-raw';
}
export interface PenpotImage extends PenpotShapeBase {
type: 'image';
}
export type PenpotPoint = { x: number; y: number };
export type PenpotBounds = {
x: number;
y: number;
width: number;
height: number;
};
export interface PenpotViewport {
center: PenpotPoint;
zoom: number;
readonly bounds: PenpotBounds;
}
export type PenpotShape =
| PenpotFrame
| PenpotGroup
| PenpotBool
| PenpotRectangle
| PenpotPath
| PenpotText
| PenpotCircle
| PenpotSvgRaw
| PenpotImage;
export interface EventsMap {
pagechange: PenpotPage;
filechange: PenpotFile;
selectionchange: string[];
themechange: PenpotTheme;
}
export type PenpotTheme = 'light' | 'dark';
export interface PenpotContext {
root: PenpotShape;
currentPage: PenpotPage;
selection: PenpotShape[];
viewport: PenpotViewport;
getFile(): PenpotFile | null;
getPage(): PenpotPage | null;
getSelected(): string[];
getSelectedShapes(): PenpotShape[];
getTheme(): PenpotTheme;
uploadMediaUrl(name: string, url: string): Promise<PenpotImageData>;
group(first: PenpotShape, ...rest: PenpotShape): PenpotGroup;
ungroup(first: PenpotShape, ...rest: PenpotShape);
createRectangle(): PenpotRectangle;
createFrame(): PepotFrame;
}
export interface Penpot extends PenpotContext {
ui: {
open: (
name: string,
url: string,
options: { width: number; height: number }
) => void;
sendMessage: (message: unknown) => void;
onMessage: <T>(callback: (message: T) => void) => void;
};
utils: {
types: {
isText(shape: PenpotShape): shape is PenpotText;
isRectangle(shape: PenpotShape): shape is PenpotRectangle;
isFrame(shape: PenpotShape): shape is PenpotFrame;
};
};
log: (...data: unknown[]) => void;
setTimeout: (callback: () => void, time: number) => void;
closePlugin: () => void;
on: <T extends keyof EventsMap>(
type: T,
callback: (event: EventsMap[T]) => void
) => void;
off: <T extends keyof EventsMap>(
type: T,
callback: (event: EventsMap[T]) => void
) => void;
fetch: typeof fetch;
}
declare global {
const penpot: Penpot;
}