polotno 2.36.10 → 2.37.1
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/canvas/context-menu/context-menu.js +1 -1
- package/canvas/element.js +1 -1
- package/canvas/hotkeys.js +1 -1
- package/canvas/html-element.js +2 -2
- package/canvas/page.js +1 -1
- package/canvas/table-element.d.ts +11 -0
- package/canvas/table-element.js +1 -0
- package/canvas/text-element.js +1 -1
- package/model/group-model.d.ts +352 -0
- package/model/group-model.js +1 -1
- package/model/node-model.js +1 -1
- package/model/page-model.js +1 -1
- package/model/schema.d.ts +72 -3
- package/model/store.js +1 -1
- package/model/table-model.d.ts +481 -0
- package/model/table-model.js +1 -0
- package/model/text-model.js +1 -1
- package/package.json +3 -2
- package/polotno.bundle.js +125 -123
- package/side-panel/elements-panel.js +7 -5
- package/side-panel/images-grid.js +1 -1
- package/side-panel/tab-button.js +2 -2
- package/toolbar/table-toolbar.d.ts +49 -0
- package/toolbar/table-toolbar.js +1 -0
- package/toolbar/text-toolbar.d.ts +13 -0
- package/toolbar/text-toolbar.js +2 -2
- package/toolbar/toolbar.js +3 -3
- package/toolbar/use-copy-style.d.ts +2 -0
- package/toolbar/use-copy-style.js +1 -1
- package/utils/fonts.js +1 -1
- package/utils/l10n.d.ts +24 -0
- package/utils/l10n.js +1 -1
- package/utils/to-html.js +1 -1
- package/utils/to-svg.d.ts +1 -1
- package/utils/to-svg.js +1 -1
- package/utils/validate-key.js +1 -1
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
import { Instance } from 'mobx-state-tree';
|
|
2
|
+
export type BorderSideName = 'top' | 'right' | 'bottom' | 'left';
|
|
3
|
+
export type BorderAttrs = {
|
|
4
|
+
color?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
style?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const TableCell: import("mobx-state-tree").IModelType<{
|
|
9
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
10
|
+
type: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<"tablecell">, [undefined]>;
|
|
11
|
+
text: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
12
|
+
_fontSize: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
13
|
+
_fontFamily: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
14
|
+
_fontWeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
15
|
+
_fontStyle: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
16
|
+
_textDecoration: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
17
|
+
_textTransform: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
18
|
+
_fill: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
19
|
+
_align: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
20
|
+
_verticalAlign: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
21
|
+
_lineHeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree/dist/internal").IUnionType<[import("mobx-state-tree").ISimpleType<number>, import("mobx-state-tree").ISimpleType<string>]>>;
|
|
22
|
+
_letterSpacing: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
23
|
+
_strokeWidth: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
24
|
+
_stroke: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
25
|
+
_cellBackground: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
26
|
+
_cellPadding: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
27
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
28
|
+
rowSpan: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
29
|
+
colSpan: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
30
|
+
mergedInto: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
31
|
+
borders: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
32
|
+
top: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
33
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
34
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
35
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
36
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
37
|
+
right: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
38
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
39
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
40
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
41
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
42
|
+
bottom: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
43
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
44
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
45
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
46
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
47
|
+
left: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
48
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
49
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
50
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
51
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
52
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
53
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
54
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
55
|
+
}, {
|
|
56
|
+
_editModeEnabled: boolean;
|
|
57
|
+
filters: import("mobx").ObservableMap<string, number>;
|
|
58
|
+
} & {
|
|
59
|
+
readonly row: number;
|
|
60
|
+
readonly col: number;
|
|
61
|
+
readonly store: any;
|
|
62
|
+
readonly page: any;
|
|
63
|
+
readonly fontSize: number;
|
|
64
|
+
readonly fontFamily: string;
|
|
65
|
+
readonly fontWeight: string;
|
|
66
|
+
readonly fontStyle: string;
|
|
67
|
+
readonly textDecoration: string;
|
|
68
|
+
readonly textTransform: string;
|
|
69
|
+
readonly fill: string;
|
|
70
|
+
readonly align: string;
|
|
71
|
+
readonly verticalAlign: string;
|
|
72
|
+
readonly lineHeight: number | string;
|
|
73
|
+
readonly letterSpacing: number;
|
|
74
|
+
readonly strokeWidth: number;
|
|
75
|
+
readonly stroke: string;
|
|
76
|
+
readonly cellBackground: string;
|
|
77
|
+
readonly cellPadding: number;
|
|
78
|
+
readonly width: number;
|
|
79
|
+
readonly height: number;
|
|
80
|
+
readonly a: {
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
rotation: number;
|
|
86
|
+
opacity: number;
|
|
87
|
+
fontSize: number;
|
|
88
|
+
};
|
|
89
|
+
getEffectiveBorder(side: BorderSideName): {
|
|
90
|
+
color: string;
|
|
91
|
+
width: number;
|
|
92
|
+
style: string;
|
|
93
|
+
};
|
|
94
|
+
readonly x: number;
|
|
95
|
+
readonly y: number;
|
|
96
|
+
readonly rotation: number;
|
|
97
|
+
readonly draggable: boolean;
|
|
98
|
+
readonly resizable: boolean;
|
|
99
|
+
readonly selectable: boolean;
|
|
100
|
+
readonly removable: boolean;
|
|
101
|
+
readonly contentEditable: boolean;
|
|
102
|
+
readonly visible: boolean;
|
|
103
|
+
readonly showInExport: boolean;
|
|
104
|
+
readonly alwaysOnTop: boolean;
|
|
105
|
+
readonly placeholder: string;
|
|
106
|
+
readonly backgroundEnabled: boolean;
|
|
107
|
+
readonly backgroundOpacity: number;
|
|
108
|
+
readonly backgroundColor: string;
|
|
109
|
+
readonly backgroundCornerRadius: number;
|
|
110
|
+
readonly backgroundPadding: number;
|
|
111
|
+
readonly curveEnabled: boolean;
|
|
112
|
+
readonly curvePower: number;
|
|
113
|
+
readonly shadowEnabled: boolean;
|
|
114
|
+
readonly shadowBlur: number;
|
|
115
|
+
readonly shadowOffsetX: number;
|
|
116
|
+
readonly shadowOffsetY: number;
|
|
117
|
+
readonly shadowColor: string;
|
|
118
|
+
readonly shadowOpacity: number;
|
|
119
|
+
readonly blurEnabled: boolean;
|
|
120
|
+
readonly blurRadius: number;
|
|
121
|
+
readonly brightnessEnabled: boolean;
|
|
122
|
+
readonly brightness: number;
|
|
123
|
+
readonly sepiaEnabled: boolean;
|
|
124
|
+
readonly grayscaleEnabled: boolean;
|
|
125
|
+
readonly animations: readonly never[];
|
|
126
|
+
} & {
|
|
127
|
+
toJSON(): any;
|
|
128
|
+
set(attrs: any): void;
|
|
129
|
+
setBorder(side: BorderSideName, attrs: BorderAttrs): void;
|
|
130
|
+
toggleEditMode(editing?: boolean): void;
|
|
131
|
+
}, any, any>;
|
|
132
|
+
export type TableCellType = Instance<typeof TableCell>;
|
|
133
|
+
export declare const TableElement: import("mobx-state-tree").IModelType<{
|
|
134
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
135
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
136
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
137
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
138
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
139
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
140
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
141
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
142
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
143
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
144
|
+
} & {
|
|
145
|
+
x: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
146
|
+
y: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
147
|
+
width: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
148
|
+
height: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
149
|
+
rotation: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
150
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
151
|
+
animations: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
152
|
+
delay: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
153
|
+
duration: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
154
|
+
enabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
155
|
+
type: import("mobx-state-tree").ISimpleType<string>;
|
|
156
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
157
|
+
data: import("mobx-state-tree").IType<{} | null | undefined, {}, {}>;
|
|
158
|
+
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
159
|
+
blurEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
160
|
+
blurRadius: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
161
|
+
brightnessEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
162
|
+
brightness: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
163
|
+
sepiaEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
164
|
+
grayscaleEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
165
|
+
filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
|
|
166
|
+
intensity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
167
|
+
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
168
|
+
shadowEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
169
|
+
shadowBlur: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
170
|
+
shadowOffsetX: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
171
|
+
shadowOffsetY: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
172
|
+
shadowColor: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
173
|
+
shadowOpacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
174
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
175
|
+
draggable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
176
|
+
resizable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
177
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
178
|
+
contentEditable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
179
|
+
styleEditable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
180
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
181
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
182
|
+
} & {
|
|
183
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
184
|
+
width: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
185
|
+
height: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
186
|
+
rows: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
187
|
+
cols: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
188
|
+
colWidths: import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<number>>;
|
|
189
|
+
rowHeights: import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<number>>;
|
|
190
|
+
cells: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
191
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
192
|
+
type: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<"tablecell">, [undefined]>;
|
|
193
|
+
text: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
194
|
+
_fontSize: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
195
|
+
_fontFamily: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
196
|
+
_fontWeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
197
|
+
_fontStyle: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
198
|
+
_textDecoration: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
199
|
+
_textTransform: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
200
|
+
_fill: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
201
|
+
_align: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
202
|
+
_verticalAlign: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
203
|
+
_lineHeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree/dist/internal").IUnionType<[import("mobx-state-tree").ISimpleType<number>, import("mobx-state-tree").ISimpleType<string>]>>;
|
|
204
|
+
_letterSpacing: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
205
|
+
_strokeWidth: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
206
|
+
_stroke: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
207
|
+
_cellBackground: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
208
|
+
_cellPadding: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
209
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
210
|
+
rowSpan: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
211
|
+
colSpan: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
212
|
+
mergedInto: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
213
|
+
borders: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
214
|
+
top: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
215
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
216
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
217
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
218
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
219
|
+
right: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
220
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
221
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
222
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
223
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
224
|
+
bottom: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
225
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
226
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
227
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
228
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
229
|
+
left: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
|
|
230
|
+
color: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
|
|
231
|
+
width: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
|
|
232
|
+
style: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<"none" | "solid" | "dashed" | "dotted">>;
|
|
233
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
234
|
+
}, {}, import("mobx-state-tree")._NotCustomized, any>>;
|
|
235
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
236
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
237
|
+
}, {
|
|
238
|
+
_editModeEnabled: boolean;
|
|
239
|
+
filters: import("mobx").ObservableMap<string, number>;
|
|
240
|
+
} & {
|
|
241
|
+
readonly row: number;
|
|
242
|
+
readonly col: number;
|
|
243
|
+
readonly store: any;
|
|
244
|
+
readonly page: any;
|
|
245
|
+
readonly fontSize: number;
|
|
246
|
+
readonly fontFamily: string;
|
|
247
|
+
readonly fontWeight: string;
|
|
248
|
+
readonly fontStyle: string;
|
|
249
|
+
readonly textDecoration: string;
|
|
250
|
+
readonly textTransform: string;
|
|
251
|
+
readonly fill: string;
|
|
252
|
+
readonly align: string;
|
|
253
|
+
readonly verticalAlign: string;
|
|
254
|
+
readonly lineHeight: number | string;
|
|
255
|
+
readonly letterSpacing: number;
|
|
256
|
+
readonly strokeWidth: number;
|
|
257
|
+
readonly stroke: string;
|
|
258
|
+
readonly cellBackground: string;
|
|
259
|
+
readonly cellPadding: number;
|
|
260
|
+
readonly width: number;
|
|
261
|
+
readonly height: number;
|
|
262
|
+
readonly a: {
|
|
263
|
+
x: number;
|
|
264
|
+
y: number;
|
|
265
|
+
width: number;
|
|
266
|
+
height: number;
|
|
267
|
+
rotation: number;
|
|
268
|
+
opacity: number;
|
|
269
|
+
fontSize: number;
|
|
270
|
+
};
|
|
271
|
+
getEffectiveBorder(side: BorderSideName): {
|
|
272
|
+
color: string;
|
|
273
|
+
width: number;
|
|
274
|
+
style: string;
|
|
275
|
+
};
|
|
276
|
+
readonly x: number;
|
|
277
|
+
readonly y: number;
|
|
278
|
+
readonly rotation: number;
|
|
279
|
+
readonly draggable: boolean;
|
|
280
|
+
readonly resizable: boolean;
|
|
281
|
+
readonly selectable: boolean;
|
|
282
|
+
readonly removable: boolean;
|
|
283
|
+
readonly contentEditable: boolean;
|
|
284
|
+
readonly visible: boolean;
|
|
285
|
+
readonly showInExport: boolean;
|
|
286
|
+
readonly alwaysOnTop: boolean;
|
|
287
|
+
readonly placeholder: string;
|
|
288
|
+
readonly backgroundEnabled: boolean;
|
|
289
|
+
readonly backgroundOpacity: number;
|
|
290
|
+
readonly backgroundColor: string;
|
|
291
|
+
readonly backgroundCornerRadius: number;
|
|
292
|
+
readonly backgroundPadding: number;
|
|
293
|
+
readonly curveEnabled: boolean;
|
|
294
|
+
readonly curvePower: number;
|
|
295
|
+
readonly shadowEnabled: boolean;
|
|
296
|
+
readonly shadowBlur: number;
|
|
297
|
+
readonly shadowOffsetX: number;
|
|
298
|
+
readonly shadowOffsetY: number;
|
|
299
|
+
readonly shadowColor: string;
|
|
300
|
+
readonly shadowOpacity: number;
|
|
301
|
+
readonly blurEnabled: boolean;
|
|
302
|
+
readonly blurRadius: number;
|
|
303
|
+
readonly brightnessEnabled: boolean;
|
|
304
|
+
readonly brightness: number;
|
|
305
|
+
readonly sepiaEnabled: boolean;
|
|
306
|
+
readonly grayscaleEnabled: boolean;
|
|
307
|
+
readonly animations: readonly never[];
|
|
308
|
+
} & {
|
|
309
|
+
toJSON(): any;
|
|
310
|
+
set(attrs: any): void;
|
|
311
|
+
setBorder(side: BorderSideName, attrs: BorderAttrs): void;
|
|
312
|
+
toggleEditMode(editing?: boolean): void;
|
|
313
|
+
}, any, any>>;
|
|
314
|
+
borderColor: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
315
|
+
borderWidth: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
316
|
+
borderStyle: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
317
|
+
fontSize: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
318
|
+
fontFamily: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
319
|
+
fontWeight: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
320
|
+
fontStyle: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
321
|
+
textDecoration: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
322
|
+
textTransform: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
323
|
+
fill: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
324
|
+
align: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
325
|
+
verticalAlign: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
326
|
+
lineHeight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree/dist/internal").IUnionType<[import("mobx-state-tree").ISimpleType<number>, import("mobx-state-tree").ISimpleType<string>]>, [undefined]>;
|
|
327
|
+
letterSpacing: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
328
|
+
strokeWidth: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
329
|
+
stroke: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
330
|
+
cellBackground: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
331
|
+
cellPadding: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
332
|
+
}, {
|
|
333
|
+
readonly page: any;
|
|
334
|
+
readonly store: any;
|
|
335
|
+
readonly top: import("mobx-state-tree").ModelInstanceTypeProps<{
|
|
336
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
337
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
338
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
339
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
340
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
341
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
342
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
343
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
344
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
345
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
346
|
+
}> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
|
|
347
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
348
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
349
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
350
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
351
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
352
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
353
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
354
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
355
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
356
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
357
|
+
}, {}, import("mobx-state-tree").ModelCreationType<{
|
|
358
|
+
id: string;
|
|
359
|
+
type: string | undefined;
|
|
360
|
+
name: string | undefined;
|
|
361
|
+
opacity: number | undefined;
|
|
362
|
+
custom: any;
|
|
363
|
+
visible: boolean | undefined;
|
|
364
|
+
selectable: boolean | undefined;
|
|
365
|
+
removable: boolean | undefined;
|
|
366
|
+
alwaysOnTop: boolean | undefined;
|
|
367
|
+
showInExport: boolean | undefined;
|
|
368
|
+
}>, import("mobx-state-tree").ModelSnapshotType<{
|
|
369
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
370
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
371
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
372
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
373
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
374
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
375
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
376
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
377
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
378
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
379
|
+
}>>>;
|
|
380
|
+
readonly parent: any;
|
|
381
|
+
readonly zIndex: any;
|
|
382
|
+
} & {
|
|
383
|
+
toJSON(): {
|
|
384
|
+
id: string;
|
|
385
|
+
type: string;
|
|
386
|
+
name: string;
|
|
387
|
+
opacity: number;
|
|
388
|
+
custom: any;
|
|
389
|
+
visible: boolean;
|
|
390
|
+
selectable: boolean;
|
|
391
|
+
removable: boolean;
|
|
392
|
+
alwaysOnTop: boolean;
|
|
393
|
+
showInExport: boolean;
|
|
394
|
+
};
|
|
395
|
+
} & {
|
|
396
|
+
clone(attrs?: any, { skipSelect }?: {
|
|
397
|
+
skipSelect?: boolean | undefined;
|
|
398
|
+
}): import("./node-model.js").NodeType;
|
|
399
|
+
set(attrs: any): void;
|
|
400
|
+
moveUp(): void;
|
|
401
|
+
moveTop(): void;
|
|
402
|
+
moveDown(): void;
|
|
403
|
+
moveBottom(): void;
|
|
404
|
+
setZIndex(zIndex: number): void;
|
|
405
|
+
beforeDestroy(): void;
|
|
406
|
+
} & {
|
|
407
|
+
readonly locked: boolean;
|
|
408
|
+
readonly a: import("./shape-model.js").AnimatedAttrs;
|
|
409
|
+
animated(attr: any): any;
|
|
410
|
+
} & {
|
|
411
|
+
setAnimation(type: any, attrs: any): void;
|
|
412
|
+
setFilter(type: any, value: any): void;
|
|
413
|
+
} & {
|
|
414
|
+
_focusedCellIds: string[];
|
|
415
|
+
_editingCellId: string | undefined;
|
|
416
|
+
_anchorCellId: string | undefined;
|
|
417
|
+
_cellContentHeights: import("mobx").ObservableMap<string, number>;
|
|
418
|
+
_baseRowHeights: number[] | null;
|
|
419
|
+
_baseHeight: number | null;
|
|
420
|
+
_isResizingRows: boolean;
|
|
421
|
+
_isTransforming: boolean;
|
|
422
|
+
} & {
|
|
423
|
+
afterCreate(): void;
|
|
424
|
+
} & {
|
|
425
|
+
readonly _cellMap: Map<string, TableCellType>;
|
|
426
|
+
getActualRowHeight(rowIndex: number): number;
|
|
427
|
+
} & {
|
|
428
|
+
getCell(row: number, col: number): TableCellType | undefined;
|
|
429
|
+
readonly minWidth: number;
|
|
430
|
+
readonly minHeight: number;
|
|
431
|
+
readonly actualHeight: number;
|
|
432
|
+
getCellRect(row: number, col: number, rowSpan?: number, colSpan?: number): {
|
|
433
|
+
x: number;
|
|
434
|
+
y: number;
|
|
435
|
+
width: number;
|
|
436
|
+
height: number;
|
|
437
|
+
};
|
|
438
|
+
readonly visibleCells: TableCellType[];
|
|
439
|
+
readonly focusedCells: TableCellType[];
|
|
440
|
+
readonly editingCell: TableCellType | undefined;
|
|
441
|
+
readonly _fitRowsToContent: {
|
|
442
|
+
rowHeights: number[];
|
|
443
|
+
height: number;
|
|
444
|
+
} | null;
|
|
445
|
+
} & {
|
|
446
|
+
setCellContentHeight(cellId: string, height: number): void;
|
|
447
|
+
_applyFitRowsToContent(): void;
|
|
448
|
+
focusCell(cellId: string, addToSelection?: boolean): void;
|
|
449
|
+
focusCellRange(targetRow: number, targetCol: number): void;
|
|
450
|
+
clearCellFocus(): void;
|
|
451
|
+
enterCellEdit(cellId: string): void;
|
|
452
|
+
exitCellEdit(): void;
|
|
453
|
+
_resetBaseRowHeights(): void;
|
|
454
|
+
_setIsResizingRows(value: boolean): void;
|
|
455
|
+
_setIsTransforming(value: boolean): void;
|
|
456
|
+
addRow(index: number): void;
|
|
457
|
+
removeRow(index: number): void;
|
|
458
|
+
addColumn(index: number): void;
|
|
459
|
+
removeColumn(index: number): void;
|
|
460
|
+
distributeRowsEvenly(): void;
|
|
461
|
+
distributeColumnsEvenly(): void;
|
|
462
|
+
resizeColumn(index: number, delta: number): void;
|
|
463
|
+
resizeRow(index: number, delta: number): void;
|
|
464
|
+
setCellBorders(cellIds: string[], sides: BorderSideName[], attrs: BorderAttrs): void;
|
|
465
|
+
} & {
|
|
466
|
+
clone(attrs?: any, { skipSelect }?: {
|
|
467
|
+
skipSelect?: boolean | undefined;
|
|
468
|
+
}): any;
|
|
469
|
+
}, import("mobx-state-tree").ModelCreationType<{
|
|
470
|
+
id: string;
|
|
471
|
+
type: string | undefined;
|
|
472
|
+
name: string | undefined;
|
|
473
|
+
opacity: number | undefined;
|
|
474
|
+
custom: any;
|
|
475
|
+
visible: boolean | undefined;
|
|
476
|
+
selectable: boolean | undefined;
|
|
477
|
+
removable: boolean | undefined;
|
|
478
|
+
alwaysOnTop: boolean | undefined;
|
|
479
|
+
showInExport: boolean | undefined;
|
|
480
|
+
}>, any>;
|
|
481
|
+
export type TableElementType = Instance<typeof TableElement>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{types as e,getParent as t,getSnapshot as l,isAlive as o,getRoot as r,cast as n}from"mobx-state-tree";import{observable as s}from"mobx";import{nanoid as i}from"nanoid";import{Shape as d}from"./shape-model.js";const c=.05,a=e.enumeration(["solid","dashed","dotted","none"]);function g(e){return t(e,2)}function u(e,t,l){const r=e[`_${t}`];return null!=r?r:o(e)?g(e)[t]:l}function h(e){return t(e,1)}const f=e.model("BorderSide",{color:e.maybe(e.string),width:e.maybe(e.number),style:e.maybe(a)}).postProcessSnapshot(e=>{const t={};for(const[l,o]of Object.entries(e)){null!=o&&(t[l]=o)}return t}),b=e.model("CellBorders",{top:e.maybe(f),right:e.maybe(f),bottom:e.maybe(f),left:e.maybe(f)}).postProcessSnapshot(e=>{const t={};for(const[l,o]of Object.entries(e)){null!=o&&"object"==typeof o&&Object.keys(o).length>0&&(t[l]=o)}return t}),w=["fontSize","fontFamily","fontWeight","fontStyle","textDecoration","textTransform","fill","align","verticalAlign","lineHeight","letterSpacing","strokeWidth","stroke","cellBackground","cellPadding"],p=new Set(w),m=["blurEnabled","blurRadius","brightnessEnabled","brightness","sepiaEnabled","grayscaleEnabled","filters","shadowEnabled","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","shadowOpacity"],_=["id","type","text","opacity","rowSpan","colSpan","mergedInto","name","custom","borders"],y=new Set(["row","col","x","y","width","height","rotation","draggable","resizable","selectable","removable","contentEditable","visible","showInExport","alwaysOnTop","backgroundEnabled","backgroundOpacity","backgroundColor","backgroundCornerRadius","backgroundPadding","curveEnabled","curvePower","shadowEnabled","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","shadowOpacity","blurEnabled","blurRadius","brightnessEnabled","brightness","sepiaEnabled","grayscaleEnabled","placeholder","animations","filters"]),C={opacity:1,rowSpan:1,colSpan:1,name:""},v=[];export const TableCell=e.model("TableCell",{id:e.identifier,type:e.optional(e.literal("tablecell"),"tablecell"),text:"",_fontSize:e.maybe(e.number),_fontFamily:e.maybe(e.string),_fontWeight:e.maybe(e.string),_fontStyle:e.maybe(e.string),_textDecoration:e.maybe(e.string),_textTransform:e.maybe(e.string),_fill:e.maybe(e.string),_align:e.maybe(e.string),_verticalAlign:e.maybe(e.string),_lineHeight:e.maybe(e.union(e.number,e.string)),_letterSpacing:e.maybe(e.number),_strokeWidth:e.maybe(e.number),_stroke:e.maybe(e.string),_cellBackground:e.maybe(e.string),_cellPadding:e.maybe(e.number),opacity:1,rowSpan:1,colSpan:1,mergedInto:e.maybe(e.string),borders:e.maybe(b),name:"",custom:e.frozen()}).volatile(()=>({_editModeEnabled:!1,filters:s.map()})).preProcessSnapshot(e=>{if(!e){return e}for(const l in e){null===e[l]&&(e[l]=void 0)}const t={};for(const l of _){l in e&&(t[l]=e[l])}for(const l of w){void 0!==e[l]&&(t[`_${l}`]=e[l])}return t}).postProcessSnapshot(e=>{const t={};for(const[l,o]of Object.entries(e)){if(l.startsWith("_")){null!=o&&(t[l.slice(1)]=o)}else if("borders"===l){null!=o&&"object"==typeof o&&Object.keys(o).length>0&&(t.borders=o)}else{if(l in C&&o===C[l]){continue}t[l]=o}}return t}).views(e=>{const t={get row(){if(!o(e)){return 0}const t=g(e),l=h(e).indexOf(e);return-1===l?0:Math.floor(l/t.cols)},get col(){if(!o(e)){return 0}const t=g(e),l=h(e).indexOf(e);return-1===l?0:l%t.cols},get store(){return o(e)?r(e):null},get page(){if(!o(e)){return null}try{return g(e).page}catch(t){return null}},get fontSize(){return u(e,"fontSize",30)},get fontFamily(){return u(e,"fontFamily","Roboto")},get fontWeight(){return u(e,"fontWeight","normal")},get fontStyle(){return u(e,"fontStyle","normal")},get textDecoration(){return u(e,"textDecoration","")},get textTransform(){return u(e,"textTransform","none")},get fill(){return u(e,"fill","black")},get align(){return u(e,"align","left")},get verticalAlign(){return u(e,"verticalAlign","top")},get lineHeight(){return u(e,"lineHeight",1.2)},get letterSpacing(){return u(e,"letterSpacing",0)},get strokeWidth(){return u(e,"strokeWidth",0)},get stroke(){return u(e,"stroke","black")},get cellBackground(){return u(e,"cellBackground","transparent")},get cellPadding(){return u(e,"cellPadding",4)},get width(){if(!o(e)){return 100}try{return g(e).getCellRect(t.row,t.col,e.rowSpan,e.colSpan).width}catch(l){return 100}},get height(){if(!o(e)){return 100}try{return g(e).getCellRect(t.row,t.col,e.rowSpan,e.colSpan).height}catch(l){return 100}},get a(){var l;if(!o(e)){return{x:0,y:0,width:100,height:100,rotation:0,opacity:1,fontSize:16}}const r=g(e).getCellRect(t.row,t.col,e.rowSpan,e.colSpan),n=t.cellPadding;return{x:r.x+n,y:r.y+n,width:r.width-2*n,height:r.height-2*n,rotation:0,opacity:null!==(l=e.opacity)&&void 0!==l?l:1,fontSize:t.fontSize}},getEffectiveBorder(t){var l,r,n,s,i,d,c;const a=o(e)?g(e):null,u=null===(l=e.borders)||void 0===l?void 0:l[t];return{color:null!==(n=null!==(r=null==u?void 0:u.color)&&void 0!==r?r:null==a?void 0:a.borderColor)&&void 0!==n?n:"#000000",width:null!==(i=null!==(s=null==u?void 0:u.width)&&void 0!==s?s:null==a?void 0:a.borderWidth)&&void 0!==i?i:1,style:null!==(c=null!==(d=null==u?void 0:u.style)&&void 0!==d?d:null==a?void 0:a.borderStyle)&&void 0!==c?c:"solid"}},get x(){return 0},get y(){return 0},get rotation(){return 0},get draggable(){return!1},get resizable(){return!1},get selectable(){return!1},get removable(){return!1},get contentEditable(){return!0},get visible(){return!0},get showInExport(){return!0},get alwaysOnTop(){return!1},get placeholder(){return""},get backgroundEnabled(){return!1},get backgroundOpacity(){return 1},get backgroundColor(){return"transparent"},get backgroundCornerRadius(){return 0},get backgroundPadding(){return 0},get curveEnabled(){return!1},get curvePower(){return 0},get shadowEnabled(){return!1},get shadowBlur(){return 0},get shadowOffsetX(){return 0},get shadowOffsetY(){return 0},get shadowColor(){return"black"},get shadowOpacity(){return 1},get blurEnabled(){return!1},get blurRadius(){return 0},get brightnessEnabled(){return!1},get brightness(){return 0},get sepiaEnabled(){return!1},get grayscaleEnabled(){return!1},get animations(){return v}};return t}).actions(e=>({toJSON:()=>Object.assign({},l(e)),set(t){const l={};for(const[e,o]of Object.entries(t)){p.has(e)?l[`_${e}`]=o:"borders"===e?l.borders=o?JSON.parse(JSON.stringify(o)):o:y.has(e)||(l[e]=o)}Object.assign(e,l)},setBorder(t,o){const r=e.borders?Object.assign({},l(e.borders)):{},s=r[t]||{},i=Object.assign({},s);void 0!==o.color&&(i.color=o.color),void 0!==o.width&&(i.width=o.width),void 0!==o.style&&(i.style=o.style),r[t]=i,e.borders=n(r)},toggleEditMode(t){const l=null!=t?t:!e._editModeEnabled;l!==e._editModeEnabled&&(e._editModeEnabled=l,e._editModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction())}}));function H(e){return Array.from({length:e},()=>1/e)}function S(e){const t=e.reduce((e,t)=>e+t,0);return 0===t?H(e.length):e.map(e=>e/t)}export const TableElement=d.named("Table").props({type:"table",width:300,height:200,rows:3,cols:3,colWidths:e.array(e.number),rowHeights:e.array(e.number),cells:e.array(TableCell),borderColor:"#000000",borderWidth:1,borderStyle:e.optional(e.enumeration(["solid","dashed","dotted","none"]),"solid"),fontSize:30,fontFamily:"Roboto",fontWeight:"normal",fontStyle:"normal",textDecoration:"",textTransform:"none",fill:"black",align:"left",verticalAlign:"top",lineHeight:e.optional(e.union(e.number,e.string),1.2),letterSpacing:0,strokeWidth:0,stroke:"black",cellBackground:"transparent",cellPadding:4}).postProcessSnapshot(e=>{e.cells&&((e=Object.assign({},e)).cells=e.cells.map(t=>{const l={};for(const[o,r]of Object.entries(t)){p.has(o)&&r===e[o]||(l[o]=r)}return l}));for(const t of m){delete e[t]}return e}).volatile(()=>({_focusedCellIds:[],_editingCellId:void 0,_anchorCellId:void 0,_cellContentHeights:s.map(),_baseRowHeights:null,_baseHeight:null,_isResizingRows:!1,_isTransforming:!1})).actions(e=>({afterCreate(){const t=e.rows*e.cols;if(0===e.cells.length){e.cells.replace(n(function(e,t){const l=[];for(let o=0;o<e*t;o++){l.push({id:i(10),text:""})}return l}(e.rows,e.cols)))}else if(e.cells.length<t){for(;e.cells.length<t;){e.cells.push(n({id:i(10),text:""}))}}else{e.cells.length>t&&e.cells.splice(t)}0===e.colWidths.length&&e.colWidths.replace(H(e.cols)),0===e.rowHeights.length&&e.rowHeights.replace(H(e.rows))}})).views(e=>({get _cellMap(){const t=new Map,l=e.cols;return e.cells.forEach((e,o)=>{t.set(`${Math.floor(o/l)}:${o%l}`,e)}),t},getActualRowHeight:t=>e.rowHeights[t]*e.height})).views(e=>{const t={getCell:(t,l)=>e._cellMap.get(`${t}:${l}`),get minWidth(){return 20*e.cols},get minHeight(){return 20*e.rows},get actualHeight(){let t=0;for(let l=0;l<e.rows;l++){t+=e.getActualRowHeight(l)}return t},getCellRect(t,l,o=1,r=1){let n=0;for(let c=0;c<l;c++){n+=e.colWidths[c]*e.width}let s=0;for(let c=0;c<t;c++){s+=e.getActualRowHeight(c)}let i=0;for(let c=l;c<l+r;c++){i+=(e.colWidths[c]||0)*e.width}let d=0;for(let c=t;c<t+o;c++){d+=e.getActualRowHeight(c)}return{x:n,y:s,width:i,height:d}},get visibleCells(){return e.cells.filter(e=>!e.mergedInto)},get focusedCells(){return e.cells.filter(t=>e._focusedCellIds.includes(t.id))},get editingCell(){if(e._editingCellId){return e.cells.find(t=>t.id===e._editingCellId)}},get _fitRowsToContent(){var l,o;if(e._isResizingRows){return null}if(e._isTransforming){return null}if(0===e._cellContentHeights.size){return null}const r=null!==(l=e._baseHeight)&&void 0!==l?l:e.height,n=null!==(o=e._baseRowHeights)&&void 0!==o?o:[...e.rowHeights];let s=!1;const i=[];for(let c=0;c<e.rows;c++){const l=e.rowHeights[c]*e.height,o=n[c]*r;let d=0;for(let r=0;r<e.cols;r++){const l=t.getCell(c,r);if(!l){continue}const o=e._cellContentHeights.get(l.id);if(void 0!==o){const e=o+2*l.cellPadding;d=Math.max(d,e)}}const a=Math.max(d,o);Math.abs(a-l)>1?(i.push(a),s=!0):i.push(l)}if(!s){return null}const d=i.reduce((e,t)=>e+t,0);return{rowHeights:i.map(e=>e/d),height:d}}};return t}).actions(e=>{const t={setCellContentHeight(t,l){e._cellContentHeights.set(t,l)},_applyFitRowsToContent(){null===e._baseRowHeights&&(e._baseRowHeights=[...e.rowHeights],e._baseHeight=e.height);const t=e._fitRowsToContent;t&&(e.height=t.height,e.rowHeights.replace(t.rowHeights))},focusCell(t,l=!1){l?e._focusedCellIds.includes(t)||(e._focusedCellIds=[...e._focusedCellIds,t]):(e._focusedCellIds=[t],e._anchorCellId=t)},focusCellRange(t,l){const o=e.cells.find(t=>t.id===e._anchorCellId);if(!o){return}const r=Math.min(o.row,t),n=Math.max(o.row,t),s=Math.min(o.col,l),i=Math.max(o.col,l),d=[];for(const c of e.cells){c.row>=r&&c.row<=n&&c.col>=s&&c.col<=i&&d.push(c.id)}e._focusedCellIds=d},clearCellFocus(){if(o(e)){if(e._editingCellId){const t=e.cells.find(t=>t.id===e._editingCellId);t&&t.toggleEditMode(!1)}e._focusedCellIds=[],e._editingCellId=void 0,e._anchorCellId=void 0}},enterCellEdit(t){e._editingCellId=t,e._focusedCellIds.includes(t)||(e._focusedCellIds=[t]);const l=e.cells.find(e=>e.id===t);l&&l.toggleEditMode(!0)},exitCellEdit(){if(e._editingCellId){const t=e.cells.find(t=>t.id===e._editingCellId);t&&t.toggleEditMode(!1)}e._editingCellId=void 0},_resetBaseRowHeights(){e._baseRowHeights=null,e._baseHeight=null},_setIsResizingRows(t){e._isResizingRows=t},_setIsTransforming(t){e._isTransforming=t},addRow(l){t._resetBaseRowHeights();const o=l>0?l-1:0,r=(e.rowHeights[o]||1/(e.rows+1))*e.height,s=e.height+r,d=[];for(let t=0;t<e.rows;t++){d.push(e.rowHeights[t]*e.height/s)}d.splice(l,0,r/s);const c=l*e.cols,a=Array.from({length:e.cols},()=>({id:i(10),text:""}));e.cells.splice(c,0,...n(a)),e.rows+=1,e.height=s,e.rowHeights.replace(S(d))},removeRow(l){if(e.rows<=1){return}t._resetBaseRowHeights();const o=l*e.cols,r=[];for(let t=o;t<o+e.cols;t++){r.push(e.cells[t].id)}if(e._editingCellId&&r.includes(e._editingCellId)){const t=e.cells.find(t=>t.id===e._editingCellId);t&&t.toggleEditMode(!1),e._editingCellId=void 0}e._focusedCellIds=e._focusedCellIds.filter(e=>!r.includes(e)),r.forEach(t=>e._cellContentHeights.delete(t)),e.cells.splice(o,e.cols);const n=[...e.rowHeights];n.splice(l,1),e.rows-=1,e.rowHeights.replace(S(n))},addColumn(t){const l=t>0?t-1:0,o=(e.colWidths[l]||1/(e.cols+1))*e.width,r=e.width+o,s=[];for(let n=0;n<e.cols;n++){s.push(e.colWidths[n]*e.width/r)}s.splice(t,0,o/r);const d=e.cols;for(let c=e.rows-1;c>=0;c--){e.cells.splice(c*d+t,0,n({id:i(10),text:""}))}e.cols+=1,e.width=r,e.colWidths.replace(S(s))},removeColumn(t){if(e.cols<=1){return}const l=e.cols,o=[];for(let n=0;n<e.rows;n++){o.push(e.cells[n*l+t].id)}if(e._editingCellId&&o.includes(e._editingCellId)){const t=e.cells.find(t=>t.id===e._editingCellId);t&&t.toggleEditMode(!1),e._editingCellId=void 0}e._focusedCellIds=e._focusedCellIds.filter(e=>!o.includes(e)),o.forEach(t=>e._cellContentHeights.delete(t));for(let n=e.rows-1;n>=0;n--){e.cells.splice(n*l+t,1)}const r=[...e.colWidths];r.splice(t,1),e.cols-=1,e.colWidths.replace(S(r))},distributeRowsEvenly(){t._resetBaseRowHeights(),e.rowHeights.replace(H(e.rows))},distributeColumnsEvenly(){e.colWidths.replace(H(e.cols))},resizeColumn(t,l){if(t>=e.cols-1){return}const o=[...e.colWidths],r=o[t]+o[t+1],n=o[t]+l,s=o[t+1]-l;n<c?(o[t]=c,o[t+1]=r-c):s<c?(o[t+1]=c,o[t]=r-c):(o[t]=n,o[t+1]=s),e.colWidths.replace(o)},resizeRow(t,l){if(t>=e.rows-1){return}const o=[...e.rowHeights],r=o[t]+o[t+1],n=o[t]+l,s=o[t+1]-l;n<c?(o[t]=c,o[t+1]=r-c):s<c?(o[t+1]=c,o[t]=r-c):(o[t]=n,o[t+1]=s),e.rowHeights.replace(o)},setCellBorders(t,l,o){const r={top:{side:"bottom",dr:-1,dc:0},bottom:{side:"top",dr:1,dc:0},left:{side:"right",dr:0,dc:-1},right:{side:"left",dr:0,dc:1}};for(const n of t){const t=e.cells.find(e=>e.id===n);if(t){for(const n of l){t.setBorder(n,o);const l=r[n],s=t.row+l.dr,i=t.col+l.dc,d=e.getCell(s,i);d&&d.setBorder(l.side,o)}}}}};return t}).actions(e=>({clone(t={},{skipSelect:l=!1}={}){const o=JSON.parse(JSON.stringify(e.toJSON()));if(t.id=t.id||i(10),o.cells){const e=new Map;o.cells.forEach(t=>{const l=t.id,o=i(10);e.set(l,o),t.id=o}),o.cells.forEach(t=>{t.mergedInto&&e.has(t.mergedInto)&&(t.mergedInto=e.get(t.mergedInto))})}return Object.assign(o,t),e.page.addElement(o,{skipSelect:l})}}));
|
package/model/text-model.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{types as e}from"mobx-state-tree";import{Shape as t}from"./shape-model.js";export const TextElement=t.named("Text").props({type:"text",text:"",placeholder:"",fontSize:14,fontFamily:"Roboto",fontStyle:"normal",fontWeight:"normal",textDecoration:"",textTransform:"none",fill:"black",align:"center",width:100,height:0,verticalAlign:"top",strokeWidth:0,stroke:"black",lineHeight:e.optional(e.union(e.number,e.string),1.2),letterSpacing:0,_editModeEnabled:!1,backgroundEnabled:!1,backgroundColor:"#7ED321",backgroundOpacity:1,backgroundCornerRadius:.5,backgroundPadding:.5,curveEnabled:!1,curvePower:.5}).preProcessSnapshot(e=>Object.assign({},e)).actions(e=>({afterCreate(){if(!e.height){const t=e.lineHeight,o="number"==typeof t?t:parseFloat(t)||1.2;e.height=Math.round(e.fontSize*o)}},toggleEditMode(t){
|
|
1
|
+
import{types as e}from"mobx-state-tree";import{Shape as t}from"./shape-model.js";export const TextElement=t.named("Text").props({type:"text",text:"",placeholder:"",fontSize:14,fontFamily:"Roboto",fontStyle:"normal",fontWeight:"normal",textDecoration:"",textTransform:"none",fill:"black",align:"center",width:100,height:0,verticalAlign:"top",strokeWidth:0,stroke:"black",lineHeight:e.optional(e.union(e.number,e.string),1.2),letterSpacing:0,_editModeEnabled:!1,backgroundEnabled:!1,backgroundColor:"#7ED321",backgroundOpacity:1,backgroundCornerRadius:.5,backgroundPadding:.5,curveEnabled:!1,curvePower:.5}).preProcessSnapshot(e=>Object.assign({},e)).actions(e=>({afterCreate(){if(!e.height){const t=e.lineHeight,o="number"==typeof t?t:parseFloat(t)||1.2;e.height=Math.round(e.fontSize*o)}},toggleEditMode(t){const o=null!=t?t:!e._editModeEnabled;o!==e._editModeEnabled&&(e._editModeEnabled=o,e._editModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction())}}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polotno",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.37.1",
|
|
4
4
|
"description": "Design Editor Framework",
|
|
5
5
|
"author": "Anton Lavrenov",
|
|
6
6
|
"keywords": [
|
|
@@ -158,7 +158,8 @@
|
|
|
158
158
|
"clean": "rm -rf ./lib && rm -rf ./.parcel-cache",
|
|
159
159
|
"tsc": "tsc --outDir ./lib --removeComments --sourceMap false || echo \"tsc faild for some file(s).\"",
|
|
160
160
|
"minify": "node minify.cjs",
|
|
161
|
-
"build": "
|
|
161
|
+
"build:schema": "node scripts/generate-schema.cjs",
|
|
162
|
+
"build": "npm run clean && npm run tsc && npm run add_version && node rename-imports.js && npm run minify && npm run build:bundle && node blueprint-scope.js && cp ./package.json ./lib && cp ./README.md ./lib && cp ./LICENSE.md ./lib && npm run remove-test-from-lib && npm run build:schema",
|
|
162
163
|
"remove-test-from-lib": "find . -name \"*.test.js\" -type f -exec rm -f {} \\;",
|
|
163
164
|
"add_version": "sed -i.bak 's/SDK_VERSION/'$npm_package_version'/' ./lib/utils/validate-key.js && rm -f ./lib/utils/validate-key.js.bak",
|
|
164
165
|
"build:bundle": "parcel build && find ./lib -name '*.js.map' -type f -delete",
|