feat: add core domain model foundations
This commit is contained in:
11
core/artboard.ts
Normal file
11
core/artboard.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import type { Rect } from "./geometry";
|
||||
import type { ArtboardId } from "./id";
|
||||
import type { Layer } from "./layer";
|
||||
|
||||
export type Artboard = {
|
||||
id: ArtboardId;
|
||||
name: string;
|
||||
bounds: Rect;
|
||||
backgroundColor: string;
|
||||
layers: Layer[];
|
||||
};
|
||||
8
core/asset.ts
Normal file
8
core/asset.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import type { AssetId } from "./id";
|
||||
|
||||
export type Asset = {
|
||||
id: AssetId;
|
||||
name: string;
|
||||
mimeType: string;
|
||||
source: string;
|
||||
};
|
||||
16
core/base-layer.ts
Normal file
16
core/base-layer.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import type { Transform } from "./geometry";
|
||||
import type { LayerId } from "./id";
|
||||
|
||||
export type LayerClippingMask = {
|
||||
maskLayerId: LayerId;
|
||||
};
|
||||
|
||||
export type BaseLayer = {
|
||||
id: LayerId;
|
||||
name: string;
|
||||
visible: boolean;
|
||||
locked: boolean;
|
||||
opacity: number;
|
||||
transform: Transform;
|
||||
clippingMask?: LayerClippingMask;
|
||||
};
|
||||
11
core/document.ts
Normal file
11
core/document.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import type { Artboard } from "./artboard";
|
||||
import type { Asset } from "./asset";
|
||||
import type { DocumentId } from "./id";
|
||||
|
||||
export type ImageDocument = {
|
||||
id: DocumentId;
|
||||
name: string;
|
||||
version: number;
|
||||
artboards: Artboard[];
|
||||
assets: Asset[];
|
||||
};
|
||||
32
core/geometry.ts
Normal file
32
core/geometry.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
export type Vec2D = {
|
||||
x: number;
|
||||
y: number;
|
||||
};
|
||||
|
||||
export type Size = {
|
||||
w: number;
|
||||
h: number;
|
||||
};
|
||||
|
||||
export type Rect = Vec2D & Size;
|
||||
|
||||
export type Bounds = Rect;
|
||||
|
||||
export type Angle = number;
|
||||
|
||||
export type Transform = {
|
||||
position: Vec2D;
|
||||
scale: Vec2D;
|
||||
rotation: Angle;
|
||||
};
|
||||
|
||||
export type Mat2D = {
|
||||
a: number;
|
||||
b: number;
|
||||
c: number;
|
||||
d: number;
|
||||
tx: number;
|
||||
ty: number;
|
||||
};
|
||||
|
||||
export type CoordinateSpace = "document" | "artboard" | "viewport" | "layer";
|
||||
4
core/id.ts
Normal file
4
core/id.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export type DocumentId = string;
|
||||
export type ArtboardId = string;
|
||||
export type LayerId = string;
|
||||
export type AssetId = string;
|
||||
7
core/image-layer.ts
Normal file
7
core/image-layer.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { BaseLayer } from "./base-layer";
|
||||
import type { AssetId } from "./id";
|
||||
|
||||
export type ImageLayer = BaseLayer & {
|
||||
type: "image";
|
||||
assetId: AssetId;
|
||||
};
|
||||
18
core/index.ts
Normal file
18
core/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
export type { Artboard } from "./artboard";
|
||||
export type { Asset } from "./asset";
|
||||
export type { BaseLayer, LayerClippingMask } from "./base-layer";
|
||||
export type { ImageDocument } from "./document";
|
||||
export type {
|
||||
Angle,
|
||||
Bounds,
|
||||
CoordinateSpace,
|
||||
Mat2D,
|
||||
Rect,
|
||||
Size,
|
||||
Transform,
|
||||
Vec2D,
|
||||
} from "./geometry";
|
||||
export type { ArtboardId, AssetId, DocumentId, LayerId } from "./id";
|
||||
export type { ImageLayer } from "./image-layer";
|
||||
export type { Layer } from "./layer";
|
||||
export type { LayerGroup } from "./layer-group";
|
||||
7
core/layer-group.ts
Normal file
7
core/layer-group.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { BaseLayer } from "./base-layer";
|
||||
import type { Layer } from "./layer";
|
||||
|
||||
export type LayerGroup = BaseLayer & {
|
||||
type: "group";
|
||||
children: Layer[];
|
||||
};
|
||||
4
core/layer.ts
Normal file
4
core/layer.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import type { ImageLayer } from "./image-layer";
|
||||
import type { LayerGroup } from "./layer-group";
|
||||
|
||||
export type Layer = ImageLayer | LayerGroup;
|
||||
Reference in New Issue
Block a user