@leafer-ui/interface 1.0.0-beta.15 → 1.0.0-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@leafer-ui/interface",
3
- "version": "1.0.0-beta.15",
3
+ "version": "1.0.0-beta.16",
4
4
  "description": "@leafer-ui/interface",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
7
7
  "main": "src/index.ts",
8
8
  "types": "types/index.d.ts",
9
9
  "files": [
10
+ "src",
10
11
  "types",
11
12
  "dist"
12
13
  ],
@@ -21,6 +22,6 @@
21
22
  "leaferjs"
22
23
  ],
23
24
  "dependencies": {
24
- "@leafer/interface": "1.0.0-beta.15"
25
+ "@leafer/interface": "1.0.0-beta.16"
25
26
  }
26
27
  }
@@ -0,0 +1,8 @@
1
+ import { ILeaferCanvas, IBoundsData, ICachedLeaf } from '@leafer/interface'
2
+
3
+ export interface ICachedShape extends ICachedLeaf {
4
+ worldCanvas?: ILeaferCanvas
5
+ shapeBounds: IBoundsData
6
+ scaleX: number
7
+ scaleY: number
8
+ }
@@ -0,0 +1,148 @@
1
+ import { IPaint, IStrokeAlign, IStrokeCap, IStrokeJoin, IBlurEffect, IFontWeight, ITextCase, ITextDecoration, IShadowEffect, IGrayscaleEffect, ITextAlign, IVerticalAlign, IOverflow, IUnitData } from './type/IType'
2
+ import { ILeafStrokePaint, ILeafShadowEffect, ILeafPaint } from './type/IComputedType'
3
+ import { IPaintString, IDashPatternString, IShadowString, IColorString, IStrokeWidthString, ICornerRadiusString } from './type/IStringType'
4
+
5
+ // corner---
6
+ export interface ICornerRadiusAttrData {
7
+ cornerRadius: number | number[] | ICornerRadiusString
8
+ cornerSmoothing: number
9
+ }
10
+ export interface ICornerRadiusInputData {
11
+ cornerRadius?: number | number[] | ICornerRadiusString
12
+ cornerSmoothing?: number
13
+ }
14
+ export interface ICornerRadiusComputedData {
15
+ cornerRadius?: number
16
+ cornerSmoothing?: number
17
+ }
18
+
19
+ // fill---
20
+ export interface IFillAttrData {
21
+ fill: IPaint | IPaint[] | IPaintString
22
+ }
23
+ export interface IFillInputData {
24
+ fill?: IPaint | IPaint[] | IPaintString
25
+ }
26
+ export interface IFillComputedData {
27
+ fill?: IColorString | ILeafPaint[]
28
+ }
29
+
30
+ // border
31
+ export interface IBorderComputedData {
32
+ borderWidth?: number | number[]
33
+ borderRadius?: number | number[]
34
+ }
35
+
36
+ // stroke---
37
+ export interface IStrokeAttrData {
38
+ stroke: IPaint | IPaint[] | IPaintString
39
+
40
+ strokeAlign: IStrokeAlign
41
+ strokeWidth: number | number[] | IStrokeWidthString
42
+ strokeCap: IStrokeCap
43
+ strokeJoin: IStrokeJoin
44
+ dashPattern: number[] | IDashPatternString
45
+ dashOffset: number
46
+ miterLimit: number
47
+ }
48
+ export interface IStrokeInputData {
49
+ stroke?: IPaint | IPaint[] | IPaintString
50
+
51
+ strokeAlign?: IStrokeAlign
52
+ strokeWidth?: number | number[] | IStrokeWidthString
53
+ strokeCap?: IStrokeCap
54
+ strokeJoin?: IStrokeJoin
55
+ dashPattern?: number[] | IDashPatternString
56
+ dashOffset?: number
57
+ miterLimit?: number
58
+ }
59
+ export interface IStrokeComputedData {
60
+ stroke?: IColorString | ILeafStrokePaint[]
61
+
62
+ strokeAlign?: IStrokeAlign
63
+ strokeWidth?: number
64
+ strokeWidths?: number[]
65
+ strokeCap?: IStrokeCap
66
+ strokeJoin?: IStrokeJoin
67
+ dashPattern?: number[]
68
+ dashOffset?: number
69
+ miterLimit?: number
70
+ }
71
+
72
+ // text---
73
+ export interface ITextStyleAttrData {
74
+ fontFamily: string
75
+ fontSize: number
76
+ fontWeight: IFontWeight
77
+ italic: boolean
78
+ textCase: ITextCase
79
+ textDecoration: ITextDecoration
80
+ letterSpacing: number | IUnitData
81
+ lineHeight: number | IUnitData
82
+
83
+ paraIndent: number
84
+ paraSpacing: number
85
+
86
+ textAlign: ITextAlign
87
+ verticalAlign: IVerticalAlign
88
+
89
+ textOverflow: IOverflow | string
90
+ }
91
+ export interface ITextStyleInputData {
92
+ fontFamily?: string
93
+ fontSize?: number
94
+ fontWeight?: IFontWeight
95
+ italic?: boolean
96
+ textCase?: ITextCase
97
+ textDecoration?: ITextDecoration
98
+ letterSpacing?: number | IUnitData
99
+ lineHeight?: number | IUnitData
100
+
101
+ paraIndent?: number
102
+ paraSpacing?: number
103
+
104
+ textAlign?: ITextAlign
105
+ verticalAlign?: IVerticalAlign
106
+
107
+ textOverflow?: IOverflow | string
108
+ }
109
+ export interface ITextStyleComputedData {
110
+ fontFamily?: string
111
+ fontSize?: number
112
+ fontWeight?: IFontWeight
113
+ italic?: boolean
114
+ textCase?: ITextCase
115
+ textDecoration?: ITextDecoration
116
+ letterSpacing?: number
117
+ lineHeight?: number
118
+
119
+ paraIndent?: number
120
+ paraSpacing?: number
121
+
122
+ textAlign?: ITextAlign
123
+ verticalAlign?: IVerticalAlign
124
+ textOverflow?: IOverflow
125
+ }
126
+
127
+ // effect---
128
+ export interface IEffectAttrData {
129
+ shadow: IShadowEffect | IShadowEffect[] | IShadowString
130
+ innerShadow: IShadowEffect | IShadowEffect[] | IShadowString
131
+ blur: number | IBlurEffect
132
+ backgroundBlur: number | IBlurEffect
133
+ grayscale: number | IGrayscaleEffect
134
+ }
135
+ export interface IEffectInputData {
136
+ shadow?: IShadowEffect | IShadowEffect[] | IShadowString
137
+ innerShadow?: IShadowEffect | IShadowEffect[] | IShadowString
138
+ blur?: number | IBlurEffect
139
+ backgroundBlur?: number | IBlurEffect
140
+ grayscale?: number | IGrayscaleEffect
141
+ }
142
+ export interface IEffectComputedData {
143
+ shadow?: ILeafShadowEffect[]
144
+ innerShadow?: ILeafShadowEffect[]
145
+ blur?: number
146
+ backgroundBlur?: number
147
+ grayscale?: number
148
+ }
package/src/IUI.ts ADDED
@@ -0,0 +1,335 @@
1
+ import { ILeaf, ILeafComputedData, ILeafData, ILeafInputData, ILeaferCanvas, IRenderOptions, IPathDrawer, IPointData, IPath2D, IPathCommandData, IWindingRule, ILeaferImageConfig, IBoundsData, IObject, __Number, IPathString, ILeaferImage, IBlob, IPathCreator } from '@leafer/interface'
2
+
3
+ import {
4
+ IFillAttrData, IFillInputData, IFillComputedData,
5
+ IBorderComputedData,
6
+ ICornerRadiusAttrData, ICornerRadiusInputData, ICornerRadiusComputedData,
7
+ IStrokeAttrData, IStrokeComputedData, IStrokeInputData,
8
+ IEffectAttrData, IEffectInputData, IEffectComputedData,
9
+ ITextStyleAttrData, ITextStyleInputData, ITextStyleComputedData
10
+ } from './ICommonAttr'
11
+ import { IOverflow } from './type/IType'
12
+ import { IExportOptions } from './module/IExport'
13
+
14
+
15
+ // Line
16
+ export interface ILine extends IUI {
17
+ __: ILineData
18
+ toPoint: IPointData
19
+ points: number[]
20
+ curve: boolean | number
21
+ }
22
+ export interface ILineData extends IUIData { }
23
+ export interface ILineInputData extends IUIBaseInputData {
24
+ toPoint?: IPointData
25
+ points?: number[]
26
+ curve?: boolean | number
27
+ }
28
+
29
+
30
+ // Rect
31
+ export interface IRect extends IUI {
32
+ __: IRectData
33
+ }
34
+ export interface IRectData extends IUIData { }
35
+ export interface IRectInputData extends IUIBaseInputData { }
36
+
37
+
38
+ // Ellipse
39
+ export interface IEllipse extends IUI {
40
+ __: IEllipseData
41
+ startAngle: number
42
+ endAngle: number
43
+ innerRadius: number
44
+ }
45
+ interface IEllipseAttrData {
46
+ startAngle?: number
47
+ endAngle?: number
48
+ innerRadius?: number
49
+ }
50
+ export interface IEllipseData extends IEllipseAttrData, IUIData { }
51
+ export interface IEllipseInputData extends IEllipseAttrData, IUIBaseInputData { }
52
+
53
+
54
+ // Polygon
55
+ export interface IPolygon extends IUI {
56
+ __: IPolygonData
57
+ sides: number
58
+ points: number[]
59
+ curve: boolean | number
60
+ }
61
+ interface IPolygonAttrData {
62
+ sides?: number
63
+ points?: number[]
64
+ curve?: boolean | number
65
+ }
66
+ export interface IPolygonData extends IPolygonAttrData, IUIData { }
67
+ export interface IPolygonInputData extends IPolygonAttrData, IUIBaseInputData { }
68
+
69
+
70
+ // Star
71
+ export interface IStar extends IUI {
72
+ __: IStarData
73
+ corners: number
74
+ innerRadius: number
75
+ }
76
+ interface IStarAttrData {
77
+ corners?: number
78
+ innerRadius?: number
79
+ }
80
+
81
+ export interface IStarData extends IStarAttrData, IUIData { }
82
+ export interface IStarInputData extends IStarAttrData, IUIBaseInputData { }
83
+
84
+ // Path
85
+ export interface IPath extends IUI {
86
+ __: IPathData
87
+ path: IPathCommandData | IPathString
88
+ windingRule: IWindingRule
89
+ }
90
+ export interface IPathData extends IUIData {
91
+ path?: IPathCommandData
92
+ windingRule?: IWindingRule
93
+ }
94
+ export interface IPathInputData extends IUIBaseInputData {
95
+ path?: IPathCommandData | IPathString
96
+ windingRule?: IWindingRule
97
+ }
98
+
99
+ // Pen
100
+
101
+ export interface IPen extends IGroup, IPathCreator {
102
+ __: IPenData
103
+ pathElement: IPath
104
+ pathStyle: IPathInputData
105
+ path: IPathCommandData
106
+ paint(): void
107
+ clear(): void
108
+ }
109
+
110
+ export interface IPenData extends IGroupData { }
111
+ export interface IPenInputData extends IGroupInputData { }
112
+
113
+
114
+ // Text
115
+ export interface IText extends ITextStyleAttrData, IUI {
116
+ __: ITextData
117
+ text: string
118
+ }
119
+ interface ITextAttrData {
120
+ text?: string
121
+ }
122
+
123
+ export interface ITextData extends ITextAttrData, ITextStyleComputedData, IUIData {
124
+ __baseLine?: number
125
+ __lineHeight?: number
126
+ __letterSpacing?: number
127
+ }
128
+ export interface ITextInputData extends ITextAttrData, ITextStyleInputData, IUIBaseInputData {
129
+
130
+ }
131
+
132
+ export interface ITextRowData {
133
+ x?: number
134
+ y?: number
135
+ width?: number
136
+ height?: number
137
+ text?: string
138
+ data?: ITextCharData[]
139
+ words?: ITextWordData[]
140
+
141
+ paraStart?: boolean // paragraph start
142
+ paraEnd?: boolean // paragraph end
143
+ isOverflow?: boolean
144
+ }
145
+
146
+ export interface ITextWordData {
147
+ x?: number
148
+ y?: number
149
+ width?: number
150
+ height?: number
151
+ data?: ITextCharData[]
152
+ }
153
+
154
+ export interface ITextCharData {
155
+ x?: number
156
+ y?: number
157
+ width?: number
158
+ height?: number
159
+ char?: string
160
+ }
161
+
162
+ export interface ITextDrawData {
163
+ bounds: IBoundsData
164
+ rows: ITextRowData[]
165
+ paraNumber: number
166
+ font: string
167
+ decorationY?: number
168
+ decorationHeight?: number
169
+ overflow?: number // overflowed row number, not index
170
+ }
171
+
172
+ // Image
173
+ export interface IImage extends IRect, ILeaferImageConfig {
174
+ __: IImageData
175
+ url: string
176
+ ready: boolean
177
+ image?: ILeaferImage
178
+ }
179
+ interface IImageAttrData {
180
+ url?: string
181
+ }
182
+ export interface IImageData extends IImageAttrData, IRectData { }
183
+ export interface IImageInputData extends IImageAttrData, IUIBaseInputData { }
184
+
185
+ export interface ICanvas extends IRect {
186
+ __: ICanvasData
187
+ pixelRatio: number
188
+ smooth: boolean
189
+ canvas: ILeaferCanvas
190
+ __updateSize(): void
191
+ }
192
+ interface ICanvasAttrData {
193
+ pixelRatio?: number
194
+ smooth?: boolean
195
+ }
196
+ export interface ICanvasData extends ICanvasAttrData, IRectData { }
197
+ export interface ICanvasInputData extends ICanvasAttrData, IUIBaseInputData { }
198
+
199
+
200
+ // Leafer
201
+ export interface ILeaferData extends IGroupData {
202
+ pixelRatio?: number
203
+ }
204
+
205
+ export interface ILeaferInputData extends IGroupInputData {
206
+ pixelRatio?: number
207
+ }
208
+
209
+
210
+ // Frame
211
+ export interface IFrame extends IBox {
212
+ __: IFrameData
213
+ }
214
+ export interface IFrameData extends IBoxData {
215
+
216
+ }
217
+ export interface IFrameInputData extends IBoxInputData {
218
+
219
+ }
220
+
221
+
222
+ // Box
223
+ export interface IBox extends IGroup {
224
+ __: IBoxData
225
+ overflow: IOverflow
226
+ __updateRectRenderBounds(): void
227
+ __renderGroup(canvas: ILeaferCanvas, options: IRenderOptions): void
228
+ }
229
+ export interface IBoxData extends IGroupData {
230
+ overflow?: IOverflow
231
+ }
232
+ export interface IBoxInputData extends IGroupInputData {
233
+ overflow?: IOverflow
234
+ }
235
+
236
+
237
+ // Group
238
+ export interface IGroup extends IUI {
239
+ __: IGroupData
240
+ children: IUI[]
241
+ mask?: IUI
242
+ add(child: IUI, index?: number): void
243
+ addAt(child: IUI, index: number): void
244
+ addAfter(child: IUI, after: IUI): void
245
+ addBefore(child: IUI, before: IUI): void
246
+ remove(child?: IUI): void
247
+ removeAll(): void
248
+ }
249
+ export interface IGroupData extends IUIData { }
250
+ export interface IGroupInputData extends IUIBaseInputData { }
251
+
252
+ // UI
253
+ export interface IUI extends IFillAttrData, IStrokeAttrData, ICornerRadiusAttrData, IEffectAttrData, ILeaf {
254
+ __: IUIData
255
+ parent?: IGroup
256
+
257
+ set(data: IUIInputData): void
258
+ toJSON(): IUIInputData
259
+
260
+ getPath(curve?: boolean): IPathCommandData
261
+ getPathString(curve?: boolean): IPathString
262
+
263
+ __drawPathByData(drawer: IPathDrawer, data: IPathCommandData): void
264
+ __drawAfterFill?(canvas: ILeaferCanvas, options: IRenderOptions): void
265
+
266
+ export(filename: string, options?: IExportOptions | number): Promise<IBlob | string | boolean>
267
+ clone(): IUI
268
+
269
+ }
270
+
271
+ export interface IUIData extends IUIComputedData, ILeafData {
272
+
273
+ padding?: number | number[]
274
+ locked?: boolean
275
+
276
+ // 非数据属性, 自动计算的缓存数据
277
+ __isFills?: boolean
278
+ __isStrokes?: boolean
279
+ __drawAfterFill?: boolean
280
+ __isOverflow?: boolean
281
+ __blendLayer?: boolean
282
+
283
+ __isTranslucentFill?: boolean // 半透明的
284
+ __isTranslucentStroke?: boolean
285
+
286
+ __useEffect?: boolean
287
+
288
+ // path
289
+ path?: IPathCommandData
290
+ windingRule?: IWindingRule
291
+
292
+ __pathForRender?: IPathCommandData
293
+ __path2DForRender?: IPath2D
294
+
295
+ __boxStroke?: boolean
296
+
297
+ // text
298
+ __font?: string
299
+ __textDrawData?: ITextDrawData
300
+
301
+ }
302
+ export interface IUIComputedData extends IFillComputedData, IBorderComputedData, IStrokeComputedData, ITextStyleComputedData, ICornerRadiusComputedData, IEffectComputedData, ILeafComputedData {
303
+ padding?: number | number[]
304
+
305
+ locked?: boolean
306
+ }
307
+
308
+ export interface IUIBaseInputData extends IFillInputData, IStrokeInputData, ITextStyleInputData, ICornerRadiusInputData, IEffectInputData, ILeafInputData {
309
+ padding?: number | number[]
310
+ locked?: boolean
311
+ children?: IUIBaseInputData[]
312
+ }
313
+
314
+
315
+ export type IUITag =
316
+ | 'App'
317
+ | 'Leafer'
318
+ | 'Rect'
319
+ | 'Ellipse'
320
+ | 'Polygon'
321
+ | 'Star'
322
+ | 'Line'
323
+ | 'Path'
324
+ | 'Pen'
325
+ | 'Text'
326
+ | 'Image'
327
+ | 'Canvas'
328
+ | 'Group'
329
+ | 'Frame'
330
+ | 'Box'
331
+
332
+
333
+ export interface IUIInputData extends IRectInputData, IEllipseInputData, IPolygonInputData, IStarInputData, ILineInputData, IPathInputData, ITextInputData, IImageInputData, IGroupInputData, IFrameInputData, IUIBaseInputData, IObject {
334
+
335
+ }
@@ -0,0 +1,5 @@
1
+ import { IColor } from '../type/IType'
2
+
3
+ export interface IColorConvertModule {
4
+ string?(color: IColor, opacity?: number): string
5
+ }
@@ -0,0 +1,12 @@
1
+ import { ILeaferCanvas, IRenderOptions } from '@leafer/interface'
2
+
3
+ import { IUI } from '../IUI'
4
+ import { ICachedShape } from '../ICachedShape'
5
+
6
+
7
+ export interface IEffectModule {
8
+ shadow?(ui: IUI, current: ILeaferCanvas, shape: ICachedShape, options: IRenderOptions): void
9
+ innerShadow?(ui: IUI, current: ILeaferCanvas, shape: ICachedShape, options: IRenderOptions): void
10
+ blur?(ui: IUI, current: ILeaferCanvas, origin: ILeaferCanvas, options: IRenderOptions): void
11
+ backgroundBlur?(ui: IUI, current: ILeaferCanvas, shape: ICachedShape, options: IRenderOptions): void
12
+ }
@@ -0,0 +1,19 @@
1
+ import { ILeaf, IExportFileType, IBlob } from '@leafer/interface'
2
+
3
+ export interface IExportOptions {
4
+ quality?: number
5
+ blob?: boolean
6
+ }
7
+
8
+ export interface IExportResult {
9
+ data: IBlob | string | boolean
10
+ }
11
+
12
+ export interface IExportResultFunction {
13
+ (data: IExportResult): void
14
+ }
15
+
16
+
17
+ export interface IExportModule {
18
+ export?(leaf: ILeaf, filename: IExportFileType | string, options?: IExportOptions | number | boolean): Promise<IExportResult>
19
+ }
@@ -0,0 +1,26 @@
1
+ import { ILeaferCanvas, IRenderOptions, IBooleanMap } from '@leafer/interface'
2
+
3
+ import { ILeafPaint } from '../type/IComputedType'
4
+ import { IUI, IUIData } from '../IUI'
5
+ import { ICachedShape } from '../ICachedShape'
6
+
7
+ export interface IPaintModule {
8
+ compute?(ui: IUI, attrName: 'fill' | 'stroke'): void
9
+
10
+ fill?(ui: IUI, canvas: ILeaferCanvas, fill: string): void
11
+ fills?(ui: IUI, canvas: ILeaferCanvas, fills: ILeafPaint[]): void
12
+
13
+ fillText?(ui: IUI, canvas: ILeaferCanvas): void
14
+
15
+ stroke?(ui: IUI, canvas: ILeaferCanvas, stroke: string): void
16
+ strokes?(ui: IUI, canvas: ILeaferCanvas, strokes: ILeafPaint[]): void
17
+
18
+ strokeText?(ui: IUI, canvas: ILeaferCanvas, stroke: string): void
19
+ strokesText?(ui: IUI, canvas: ILeaferCanvas, strokes: ILeafPaint[]): void
20
+
21
+ drawTextStroke?(ui: IUI, canvas: ILeaferCanvas): void
22
+
23
+ shape?(ui: IUI, current: ILeaferCanvas, options: IRenderOptions): ICachedShape
24
+
25
+ recycleImage?(data: IUIData, attrName: string): IBooleanMap
26
+ }
@@ -0,0 +1,5 @@
1
+ import { ITextData, ITextDrawData } from '../IUI'
2
+
3
+ export interface ITextConvertModule {
4
+ getDrawData?(content: string, style: ITextData): ITextDrawData
5
+ }
@@ -0,0 +1,8 @@
1
+ import { ILeafBounds } from '@leafer/interface'
2
+
3
+ import { IUI } from '../IUI'
4
+
5
+ export type IUIBoundsModule = IUIBounds & ThisType<IUI>
6
+
7
+ interface IUIBounds extends ILeafBounds {
8
+ }
@@ -0,0 +1,5 @@
1
+ import { ILeafHit } from '@leafer/interface'
2
+
3
+ import { IUI } from '../IUI'
4
+
5
+ export type IUIHitModule = ILeafHit & ThisType<IUI>
@@ -0,0 +1,40 @@
1
+ import { ILeafRender, ILeaferCanvas, IRenderOptions } from '@leafer/interface'
2
+
3
+ import { IUI, IRect, IImage, IText, IFrame, IGroup } from '../IUI'
4
+
5
+ export type IUIRenderModule = IUIRender & ThisType<IUI>
6
+
7
+ export interface IUIRender extends ILeafRender {
8
+ __drawAfterFill?(canvas: ILeaferCanvas, options: IRenderOptions): void
9
+ }
10
+
11
+ export type IRectRenderModule = IRectRender & ThisType<IRect>
12
+
13
+ export interface IRectRender extends IUIRender {
14
+
15
+ }
16
+
17
+ export type IImageRenderModule = IImageRender & ThisType<IImage>
18
+
19
+ export interface IImageRender extends IUIRender {
20
+
21
+ }
22
+
23
+ export type ITextRenderModule = ITextRender & ThisType<IText>
24
+
25
+ export interface ITextRender extends IUIRender {
26
+
27
+ }
28
+
29
+ export type IGroupRenderModule = IGroupRender & ThisType<IGroup>
30
+
31
+ export interface IGroupRender extends IUIRender {
32
+
33
+ }
34
+
35
+ export type IFrameRenderModule = IFrameRender & ThisType<IFrame>
36
+
37
+ export interface IFrameRender extends IGroupRender {
38
+
39
+ }
40
+
@@ -0,0 +1,50 @@
1
+ import { IBlendMode, ILeaferImage, IMatrixData } from '@leafer/interface'
2
+
3
+ import { IColorString } from './IStringType'
4
+ import { IStrokeAlign, IStrokeJoin, IStrokeCap, IImagePaintMode } from './IType'
5
+ import { IPaintType } from './IType'
6
+
7
+ export type ILeafPaintColor = IColorString | CanvasGradient | CanvasPattern
8
+
9
+ export interface ILeafPaint {
10
+ type?: IPaintType
11
+ style?: ILeafPaintColor
12
+ transform?: IMatrixData
13
+ blendMode?: IBlendMode
14
+ opacity?: number
15
+ image?: ILeaferImage
16
+ loadId?: number
17
+ patternId?: string
18
+ data?: ILeafPaintPatternData
19
+ }
20
+
21
+ export interface ILeafPaintPatternData {
22
+ width?: number
23
+ height?: number
24
+ scaleX?: number
25
+ scaleY?: number
26
+ opacity?: number
27
+ transform?: IMatrixData
28
+ mode?: IImagePaintMode
29
+ }
30
+
31
+ export type ILeafFill = ILeafPaint
32
+
33
+ export interface ILeafStrokePaint extends ILeafPaint {
34
+ strokeAlign?: IStrokeAlign
35
+ strokeWidth?: number
36
+ strokeCap?: IStrokeCap
37
+ strokeJoin?: IStrokeJoin
38
+ dashPattern?: number[]
39
+ miterLimit?: number
40
+ }
41
+
42
+ export interface ILeafShadowEffect {
43
+ x: number
44
+ y: number
45
+ blur: number
46
+ spread?: number
47
+ color: IColorString
48
+ blendMode?: IBlendMode
49
+ box?: boolean
50
+ }
@@ -0,0 +1,13 @@
1
+ export type IPercent = string
2
+ export type IColorString = string
3
+
4
+ export type ICornerRadiusString = string
5
+ export type IStrokeWidthString = string
6
+ export type IDashPatternString = string
7
+
8
+ export type IPaintString = ISolidPaintString | IGradientPaintString | IImagePaintString
9
+ export type ISolidPaintString = string
10
+ export type IGradientPaintString = string
11
+ export type IImagePaintString = string
12
+
13
+ export type IShadowString = string
@@ -0,0 +1,134 @@
1
+ import { IPointData, IPathCommandData, IWindingRule, IBlendMode, IExportFileType } from '@leafer/interface'
2
+ import { IColorString } from './IStringType'
3
+
4
+ export interface IUnitData {
5
+ type: 'percent' | 'px'
6
+ value: number
7
+ }
8
+
9
+ export type IPaint = ISolidPaint | IGradientPaint | IImagePaint
10
+
11
+ export interface IPaintBase {
12
+ type: IPaintType
13
+ blendMode?: IBlendMode
14
+ visible?: boolean
15
+ opacity?: number
16
+
17
+ }
18
+
19
+ export type IPaintType =
20
+ | 'image'
21
+ | 'solid'
22
+ | IGradientType
23
+
24
+ export type IGradientType =
25
+ | 'linear'
26
+ | 'radial'
27
+ | 'angular'
28
+
29
+ // ---
30
+ export interface ISolidPaint extends IPaintBase {
31
+ type: 'solid'
32
+ color: IColor
33
+ }
34
+
35
+ export type IColor = IColorString | IRGB | IRGBA
36
+ export interface IRGB {
37
+ r: number
38
+ g: number
39
+ b: number
40
+ a?: number
41
+ }
42
+ export interface IRGBA extends IRGB {
43
+ a: number
44
+ }
45
+
46
+ // ---
47
+ export interface IGradientPaint extends IPaintBase {
48
+ type: IGradientType
49
+ from?: IPointData
50
+ to?: IPointData
51
+ stretch?: number
52
+ stops: IColorStop[]
53
+ }
54
+ export interface IColorStop {
55
+ offset: number
56
+ color: IColor
57
+ }
58
+
59
+ // ---
60
+ export interface IImagePaint extends IPaintBase {
61
+ type: "image"
62
+ url: string
63
+ mode?: IImagePaintMode
64
+ format?: IExportFileType
65
+
66
+ filters?: IImageFilters
67
+
68
+ offset?: IPointData
69
+ scale?: number | IPointData
70
+ rotation?: number
71
+ }
72
+ export interface IImageFilters {
73
+ exposure?: number // 曝光
74
+ contrast?: number // 对比度
75
+ saturation?: number // 饱和度
76
+ temperature?: number // 色温
77
+ tint?: number // 色调
78
+ highlights?: number // 高光
79
+ shadows?: number // 阴影
80
+ }
81
+ export type IImagePaintMode = 'cover' | 'fit' | 'strench' | 'clip' | 'repeat'
82
+
83
+ // 描边
84
+ export type IStrokeAlign = 'inside' | 'outside' | 'center'
85
+ export type IStrokeCap = 'none' | 'round' | 'square' | 'arrow-lines' | 'arrow-equilateral'
86
+ export type IStrokeJoin = 'bevel' | 'round' | 'miter'
87
+
88
+ // 文本
89
+ export type ITextAlign = 'left' | 'center' | 'right' | 'justify'
90
+ export type IVerticalAlign = 'top' | 'middle' | 'bottom'
91
+ export type ITextCase = | 'upper' | 'lower' | 'title' | 'none' | 'small-caps'
92
+ export type IFontWeight = IFontWeightNumer | IFontWeightString
93
+ export type IFontWeightNumer = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
94
+ export type IFontWeightString =
95
+ | 'thin'
96
+ | 'extra-light'
97
+ | 'light'
98
+ | 'normal'
99
+ | 'medium'
100
+ | 'semi-bold'
101
+ | 'bold'
102
+ | 'extra-bold'
103
+ | 'black'
104
+ export type ITextDecoration = 'none' | 'under' | 'delete'
105
+
106
+ // 路径
107
+ export interface IVectorPath {
108
+ rule?: IWindingRule,
109
+ data: string | IPathCommandData
110
+ }
111
+
112
+ // 特效
113
+ export interface IShadowEffect {
114
+ x: number
115
+ y: number
116
+ blur: number
117
+ spread?: number
118
+ color: IColorString | IColor
119
+ blendMode?: IBlendMode
120
+ visible?: boolean
121
+ box?: boolean
122
+ }
123
+
124
+ export interface IBlurEffect {
125
+ blur: number
126
+ visible?: boolean
127
+ }
128
+
129
+ export interface IGrayscaleEffect {
130
+ grayscale: number
131
+ visible?: boolean
132
+ }
133
+
134
+ export type IOverflow = 'show' | 'hide'