dotting
Version:
Dotting is a pixel art editor component library for react
153 lines (152 loc) • 4.38 kB
TypeScript
import { DottingDataLayer } from "../../helpers/DottingDataLayer";
export interface Coord {
x: number;
y: number;
}
export interface Dimensions {
width: number;
height: number;
}
export type ButtonDimensions = Coord & Dimensions;
export type PanZoom = {
scale: number;
offset: Coord;
};
export type PixelData = {
color: string;
};
export interface ImageDownloadOptions {
isGridVisible?: boolean;
type: "png" | "svg";
}
export type DottingData = Map<number, Map<number, PixelData>>;
export interface PixelModifyItem {
rowIndex: number;
columnIndex: number;
color: string;
}
export interface ColorChangeItem extends PixelModifyItem {
previousColor: string;
}
export declare enum CanvasEvents {
DATA_CHANGE = "dataChange",
GRID_CHANGE = "gridChange",
STROKE_END = "strokeEnd",
BRUSH_CHANGE = "brushChange",
HOVER_PIXEL_CHANGE = "hoverPixelChange",
LAYER_CHANGE = "layerChange",
CANVAS_INFO_CHANGE = "canvasInfoChange"
}
export declare enum BrushTool {
DOT = "DOT",
ERASER = "ERASER",
PAINT_BUCKET = "PAINT_BUCKET",
SELECT = "SELECT",
NONE = "NONE",
LINE = "LINE",
RECTANGLE = "RECTANGLE",
RECTANGLE_FILLED = "RECTANGLE_FILLED",
ELLIPSE = "ELLIPSE",
ELLIPSE_FILLED = "ELLIPSE_FILLED"
}
export interface CanvasDelta {
modifiedPixels: Array<PixelModifyItem>;
addedOrDeletedRows?: Array<{
isDelete: boolean;
index: number;
}>;
addedOrDeletedColumns?: Array<{
isDelete: boolean;
index: number;
}>;
}
export type CanvasDataChangeParams = {
isLocalChange: boolean;
data: DottingData;
layerId: string;
delta?: CanvasDelta;
};
export type CanvasDataChangeHandler = (params: CanvasDataChangeParams) => void;
export type CanvasGridChangeParams = {
dimensions: {
columnCount: number;
rowCount: number;
};
indices: {
topRowIndex: number;
bottomRowIndex: number;
leftColumnIndex: number;
rightColumnIndex: number;
};
};
export type CanvasGridChangeHandler = (params: CanvasGridChangeParams) => void;
export type CanvasStrokeEndParams = {
strokedPixels: Array<ColorChangeItem>;
strokeTool: BrushTool;
};
export type CanvasStrokeEndHandler = (params: CanvasStrokeEndParams) => void;
export type CanvasBrushChangeParams = {
brushColor: string;
brushTool: BrushTool;
brushPattern: Array<Array<BRUSH_PATTERN_ELEMENT>>;
};
export type CanvasBrushChangeHandler = (params: CanvasBrushChangeParams) => void;
export type CanvasHoverPixelChangeParams = {
indices: {
rowIndex: number;
columnIndex: number;
} | null;
};
export type CanvasHoverPixelChangeHandler = (params: CanvasHoverPixelChangeParams) => void;
export type LayerChangeParams = {
layers: Array<DottingDataLayer>;
currentLayer: DottingDataLayer;
};
export type LayerChangeHandler = (params: LayerChangeParams) => void;
export type CanvasInfoChangeParams = {
panZoom: PanZoom;
topLeftCornerOffset: Coord;
topRightCornerOffset: Coord;
bottomLeftCornerOffset: Coord;
bottomRightCornerOffset: Coord;
gridSquareSize: number;
};
export type CanvasInfoChangeHandler = (params: CanvasInfoChangeParams) => void;
export type GridIndices = {
topRowIndex: number;
bottomRowIndex: number;
leftColumnIndex: number;
rightColumnIndex: number;
};
export type SelectAreaRange = {
startWorldPos: Coord;
endWorldPos: Coord;
startPixelIndex: Omit<PixelModifyItem, "color">;
endPixelIndex: Omit<PixelModifyItem, "color">;
};
export declare enum BRUSH_PATTERN_ELEMENT {
FILL = 1,
EMPTY = 0
}
export interface LayerProps {
id: string;
data: Array<Array<PixelModifyItem>>;
}
export type LayerDataForHook = {
id: string;
isVisible: boolean;
data: Array<Array<PixelModifyItem>>;
};
export type AddGridIndicesParams = {
rowIndices: Array<number>;
columnIndices: Array<number>;
data?: Array<PixelModifyItem>;
layerId?: string;
isLocalChange?: boolean;
};
export type DeleteGridIndicesParams = {
rowIndices: Array<number>;
columnIndices: Array<number>;
layerId?: string;
isLocalChange?: boolean;
};