@idraw/util 0.4.2 → 1.0.0-alpha.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.
Files changed (96) hide show
  1. package/dist/esm/converter/data-svg.d.ts +2 -0
  2. package/dist/esm/converter/data-svg.js +19 -0
  3. package/dist/esm/converter/material-svg.d.ts +2 -0
  4. package/dist/esm/converter/material-svg.js +63 -0
  5. package/dist/esm/converter/svg-material.d.ts +2 -0
  6. package/dist/esm/converter/svg-material.js +188 -0
  7. package/dist/esm/index.d.ts +32 -21
  8. package/dist/esm/index.js +32 -21
  9. package/dist/esm/static.d.ts +1 -0
  10. package/dist/esm/static.js +1 -0
  11. package/dist/esm/tool/file.js +2 -2
  12. package/dist/esm/tool/html.js +27 -27
  13. package/dist/esm/tool/id.d.ts +1 -0
  14. package/dist/esm/tool/id.js +4 -0
  15. package/dist/esm/tool/image.js +6 -6
  16. package/dist/esm/tool/path-to-box.d.ts +3 -0
  17. package/dist/esm/tool/path-to-box.js +353 -0
  18. package/dist/esm/tool/path-to-command.d.ts +4 -0
  19. package/dist/esm/tool/path-to-command.js +392 -0
  20. package/dist/esm/tool/path.d.ts +18 -0
  21. package/dist/esm/tool/path.js +421 -0
  22. package/dist/esm/tool/svg-path.d.ts +3 -0
  23. package/dist/esm/{view → tool}/svg-path.js +4 -16
  24. package/dist/esm/tool/time.d.ts +2 -2
  25. package/dist/esm/tool/time.js +4 -4
  26. package/dist/esm/tool/uuid.d.ts +1 -1
  27. package/dist/esm/tool/uuid.js +6 -6
  28. package/dist/esm/view/box.d.ts +0 -2
  29. package/dist/esm/view/box.js +1 -173
  30. package/dist/esm/view/canvas.js +3 -3
  31. package/dist/esm/view/check.d.ts +8 -7
  32. package/dist/esm/view/check.js +34 -34
  33. package/dist/esm/view/config.d.ts +0 -9
  34. package/dist/esm/view/config.js +1 -71
  35. package/dist/esm/view/context2d.d.ts +10 -3
  36. package/dist/esm/view/context2d.js +39 -18
  37. package/dist/esm/view/controller.d.ts +5 -5
  38. package/dist/esm/view/controller.js +105 -102
  39. package/dist/esm/view/data.d.ts +2 -2
  40. package/dist/esm/view/data.js +65 -65
  41. package/dist/esm/view/dom.d.ts +23 -0
  42. package/dist/esm/view/dom.js +190 -0
  43. package/dist/esm/view/flat.d.ts +2 -2
  44. package/dist/esm/view/flat.js +53 -53
  45. package/dist/esm/view/group.d.ts +3 -3
  46. package/dist/esm/view/group.js +25 -28
  47. package/dist/esm/view/handle-material.d.ts +24 -0
  48. package/dist/esm/view/{handle-element.js → handle-material.js} +98 -75
  49. package/dist/esm/view/is.d.ts +10 -12
  50. package/dist/esm/view/is.js +15 -19
  51. package/dist/esm/view/load.d.ts +2 -2
  52. package/dist/esm/view/load.js +7 -7
  53. package/dist/esm/view/material.d.ts +40 -0
  54. package/dist/esm/view/material.js +476 -0
  55. package/dist/esm/view/middleware.d.ts +1 -0
  56. package/dist/esm/view/middleware.js +14 -2
  57. package/dist/esm/view/modify-record.d.ts +4 -4
  58. package/dist/esm/view/modify-record.js +2 -2
  59. package/dist/esm/view/parser.d.ts +2 -2
  60. package/dist/esm/view/parser.js +3 -3
  61. package/dist/esm/view/path.d.ts +2 -0
  62. package/dist/esm/view/path.js +30 -0
  63. package/dist/esm/view/point-move-material.d.ts +5 -0
  64. package/dist/esm/view/{point-move-element.js → point-move-material.js} +6 -6
  65. package/dist/esm/view/point.d.ts +3 -8
  66. package/dist/esm/view/point.js +1 -21
  67. package/dist/esm/view/position.d.ts +9 -9
  68. package/dist/esm/view/position.js +1 -1
  69. package/dist/esm/view/rect.d.ts +2 -2
  70. package/dist/esm/view/rect.js +4 -4
  71. package/dist/esm/view/resize-material.d.ts +4 -0
  72. package/dist/esm/view/resize-material.js +266 -0
  73. package/dist/esm/view/rotate.d.ts +11 -11
  74. package/dist/esm/view/rotate.js +24 -24
  75. package/dist/esm/view/static.d.ts +13 -0
  76. package/dist/esm/view/static.js +89 -0
  77. package/dist/esm/view/styles.d.ts +11 -0
  78. package/dist/esm/view/styles.js +78 -0
  79. package/dist/esm/view/vertex.d.ts +8 -8
  80. package/dist/esm/view/vertex.js +28 -28
  81. package/dist/esm/view/view-box.d.ts +2 -6
  82. package/dist/esm/view/view-box.js +8 -64
  83. package/dist/esm/view/view-calc.d.ts +23 -20
  84. package/dist/esm/view/view-calc.js +104 -93
  85. package/dist/esm/view/view-content.d.ts +2 -2
  86. package/dist/esm/view/view-content.js +34 -34
  87. package/dist/index.global.js +3144 -1548
  88. package/dist/index.global.min.js +1 -1
  89. package/package.json +1 -1
  90. package/dist/esm/view/element.d.ts +0 -35
  91. package/dist/esm/view/element.js +0 -471
  92. package/dist/esm/view/handle-element.d.ts +0 -24
  93. package/dist/esm/view/point-move-element.d.ts +0 -5
  94. package/dist/esm/view/resize-element.d.ts +0 -4
  95. package/dist/esm/view/resize-element.js +0 -255
  96. package/dist/esm/view/svg-path.d.ts +0 -10
@@ -1,255 +0,0 @@
1
- import { istype } from '../tool/istype';
2
- import { formatNumber } from '../tool/number';
3
- import { toFlattenElement } from '../view/modify-record';
4
- const doNum = (n) => {
5
- return formatNumber(n, { decimalPlaces: 4 });
6
- };
7
- function resizeElementBaseDetailByRatio(elem, opts) {
8
- const beforeElem = { detail: {} };
9
- const afterElem = { detail: {} };
10
- const record = {
11
- type: 'modifyElement',
12
- time: Date.now(),
13
- content: {
14
- method: 'modifyElement',
15
- uuid: elem.uuid,
16
- before: null,
17
- after: null
18
- }
19
- };
20
- const { detail } = elem;
21
- const { xRatio, yRatio, maxRatio } = opts;
22
- const middleRatio = (xRatio + yRatio) / 2;
23
- const { borderWidth, borderRadius, borderDash, shadowOffsetX, shadowOffsetY, shadowBlur } = detail;
24
- if (typeof borderWidth === 'number') {
25
- detail.borderWidth = doNum(borderWidth * middleRatio);
26
- beforeElem.detail.borderWidth = borderWidth;
27
- afterElem.detail.borderWidth = detail.borderWidth;
28
- }
29
- else if (Array.isArray(detail.borderWidth)) {
30
- const bw = borderWidth;
31
- detail.borderWidth = [doNum(bw[0] * yRatio), doNum(bw[1] * xRatio), doNum(bw[2] * yRatio), doNum(bw[3] * xRatio)];
32
- beforeElem.detail.borderWidth = [...bw];
33
- afterElem.detail.borderWidth = [...detail.borderWidth];
34
- }
35
- if (typeof borderRadius === 'number') {
36
- detail.borderRadius = doNum(borderRadius * middleRatio);
37
- beforeElem.detail.borderRadius = borderRadius;
38
- afterElem.detail.borderRadius = detail.borderRadius;
39
- }
40
- else if (Array.isArray(detail.borderRadius)) {
41
- const br = borderRadius;
42
- detail.borderRadius = [br[0] * xRatio, br[1] * xRatio, br[2] * yRatio, br[3] * yRatio];
43
- beforeElem.detail.borderRadius = [...br];
44
- afterElem.detail.borderRadius = [...detail.borderRadius];
45
- }
46
- if (Array.isArray(borderDash)) {
47
- borderDash.forEach((dash, i) => {
48
- detail.borderDash[i] = doNum(dash * maxRatio);
49
- });
50
- beforeElem.detail.borderDash = [...borderDash];
51
- afterElem.detail.borderDash = [...detail.borderDash];
52
- }
53
- if (typeof shadowOffsetX === 'number') {
54
- detail.shadowOffsetX = doNum(shadowOffsetX * maxRatio);
55
- beforeElem.detail.shadowOffsetX = shadowOffsetX;
56
- afterElem.detail.shadowOffsetX = detail.shadowOffsetX;
57
- }
58
- if (typeof shadowOffsetY === 'number') {
59
- detail.shadowOffsetY = doNum(shadowOffsetY * maxRatio);
60
- beforeElem.detail.shadowOffsetY = shadowOffsetY;
61
- afterElem.detail.shadowOffsetY = detail.shadowOffsetY;
62
- }
63
- if (typeof shadowBlur === 'number') {
64
- detail.shadowBlur = doNum(shadowBlur * maxRatio);
65
- beforeElem.detail.shadowBlur = shadowBlur;
66
- afterElem.detail.shadowBlur = detail.shadowBlur;
67
- }
68
- record.content.before = toFlattenElement(beforeElem);
69
- record.content.after = toFlattenElement(afterElem);
70
- return record;
71
- }
72
- function resizeElementBaseByRatio(elem, opts) {
73
- const { xRatio, yRatio } = opts;
74
- const { uuid, x, y, w, h } = elem;
75
- elem.x = doNum(x * xRatio);
76
- elem.y = doNum(y * yRatio);
77
- elem.w = doNum(w * xRatio);
78
- elem.h = doNum(h * yRatio);
79
- const record = {
80
- type: 'modifyElement',
81
- time: Date.now(),
82
- content: {
83
- method: 'modifyElement',
84
- uuid: uuid,
85
- before: { x, y, w, h },
86
- after: { x: elem.x, y: elem.y, w: elem.w, h: elem.h }
87
- }
88
- };
89
- const detailRecord = resizeElementBaseDetailByRatio(elem, opts);
90
- record.content.before = Object.assign(Object.assign({}, record.content.before), detailRecord.content.before);
91
- record.content.after = Object.assign(Object.assign({}, record.content.after), detailRecord.content.after);
92
- return record;
93
- }
94
- function resizeTextElementDetailByRatio(elem, opts) {
95
- const { minRatio, maxRatio } = opts;
96
- const { fontSize, lineHeight } = elem.detail;
97
- const ratio = (minRatio + maxRatio) / 2;
98
- const beforeFlattenElem = {};
99
- const afterFlattenElem = {};
100
- if (fontSize && fontSize > 0) {
101
- elem.detail.fontSize = doNum(fontSize * ratio);
102
- beforeFlattenElem['detail.fontSize'] = fontSize;
103
- afterFlattenElem['detail.fontSize'] = elem.detail.fontSize;
104
- }
105
- if (lineHeight && lineHeight > 0) {
106
- elem.detail.lineHeight = doNum(lineHeight * ratio);
107
- beforeFlattenElem['detail.lineHeight'] = lineHeight;
108
- afterFlattenElem['detail.lineHeight'] = elem.detail.lineHeight;
109
- }
110
- const record = {
111
- type: 'modifyElement',
112
- time: Date.now(),
113
- content: {
114
- method: 'modifyElement',
115
- uuid: elem.uuid,
116
- before: beforeFlattenElem,
117
- after: afterFlattenElem
118
- }
119
- };
120
- return record;
121
- }
122
- function deepResizeElementByRatio(elem, opts, record) {
123
- const { type, uuid } = elem;
124
- const rootRecord = resizeElementBaseByRatio(elem, opts);
125
- const rootRecordBefore = Object.assign(Object.assign({}, rootRecord.content.before), { uuid });
126
- const rootRecordAfter = Object.assign(Object.assign({}, rootRecord.content.after), { uuid });
127
- record === null || record === void 0 ? void 0 : record.content.before.push(rootRecordBefore);
128
- record === null || record === void 0 ? void 0 : record.content.after.push(rootRecordAfter);
129
- if (type === 'circle') {
130
- }
131
- else if (type === 'text') {
132
- const textRecord = resizeTextElementDetailByRatio(elem, opts);
133
- Object.keys(textRecord.content.before || {}).forEach((key) => {
134
- var _a;
135
- rootRecordBefore[key] = (_a = textRecord.content.before) === null || _a === void 0 ? void 0 : _a[key];
136
- });
137
- Object.keys(textRecord.content.after || {}).forEach((key) => {
138
- var _a;
139
- rootRecordAfter[key] = (_a = textRecord.content.after) === null || _a === void 0 ? void 0 : _a[key];
140
- });
141
- }
142
- else if (type === 'image') {
143
- }
144
- else if (type === 'svg') {
145
- }
146
- else if (type === 'html') {
147
- }
148
- else if (type === 'path') {
149
- }
150
- else if (type === 'group' && Array.isArray(elem.detail.children)) {
151
- elem.detail.children.forEach((child) => {
152
- deepResizeElementByRatio(child, opts, record);
153
- });
154
- }
155
- }
156
- function fixedResizeGroupElementChildren(elem, opts, record) {
157
- if (!(elem.type === 'group' && Array.isArray(elem.detail.children))) {
158
- return;
159
- }
160
- const { moveX, moveY, moveH, moveW } = opts;
161
- let childChangedX = 0;
162
- let childChangedY = 0;
163
- let needReszieChildren = false;
164
- if ((moveX !== 0 || moveY !== 0) && (moveH !== 0 || moveW !== 0)) {
165
- needReszieChildren = true;
166
- childChangedX = -moveX;
167
- childChangedY = -moveY;
168
- }
169
- if (needReszieChildren !== true) {
170
- return;
171
- }
172
- elem.detail.children.forEach((child) => {
173
- const { uuid, x, y } = child;
174
- const afterX = x + childChangedX;
175
- const afterY = y + childChangedY;
176
- const before = { uuid, x, y };
177
- const after = { uuid, x: afterX, y: afterY };
178
- child.x = afterX;
179
- child.y = afterY;
180
- record === null || record === void 0 ? void 0 : record.content.before.push(before);
181
- record === null || record === void 0 ? void 0 : record.content.after.push(after);
182
- });
183
- }
184
- export function resizeEffectGroupElement(elem, size, opts) {
185
- const record = {
186
- type: 'resizeElements',
187
- time: Date.now(),
188
- content: {
189
- method: 'modifyElements',
190
- before: [],
191
- after: []
192
- }
193
- };
194
- const uuid = elem.uuid;
195
- const originX = elem.x;
196
- const originY = elem.y;
197
- const originW = elem.w;
198
- const originH = elem.h;
199
- const resizeX = (istype.number(size.x) ? size.x : elem.x);
200
- const resizeY = (istype.number(size.y) ? size.y : elem.y);
201
- const resizeW = (size.w && size.w > 0 ? size.w : elem.w) || 0;
202
- const resizeH = (size.h && size.h > 0 ? size.h : elem.h) || 0;
203
- const beforeGroupElem = { uuid, x: originX, y: originY, w: originW, h: originH };
204
- const afterGroupElem = { uuid, x: resizeX, y: resizeY, w: resizeW, h: resizeH };
205
- if ((opts === null || opts === void 0 ? void 0 : opts.resizeEffect) === 'deepResize') {
206
- record.content.before.push(beforeGroupElem);
207
- record.content.after.push(afterGroupElem);
208
- const xRatio = resizeW / elem.w;
209
- const yRatio = resizeH / elem.h;
210
- if (xRatio === yRatio && xRatio === 1) {
211
- return record;
212
- }
213
- const minRatio = Math.min(xRatio, yRatio);
214
- const maxRatio = Math.max(xRatio, yRatio);
215
- elem.w = resizeW;
216
- elem.h = resizeH;
217
- const resizeRadioOpts = { xRatio, yRatio, minRatio, maxRatio };
218
- if (elem.type === 'group' && Array.isArray(elem.detail.children)) {
219
- elem.detail.children.forEach((child) => {
220
- deepResizeElementByRatio(child, resizeRadioOpts, record);
221
- });
222
- }
223
- const groupDetailRecord = resizeElementBaseDetailByRatio(elem, resizeRadioOpts);
224
- Object.keys(groupDetailRecord.content.before || {}).forEach((key) => {
225
- var _a;
226
- beforeGroupElem[key] = (_a = groupDetailRecord.content.before) === null || _a === void 0 ? void 0 : _a[key];
227
- });
228
- Object.keys(groupDetailRecord.content.after || {}).forEach((key) => {
229
- var _a;
230
- afterGroupElem[key] = (_a = groupDetailRecord.content.after) === null || _a === void 0 ? void 0 : _a[key];
231
- });
232
- return record;
233
- }
234
- if ((opts === null || opts === void 0 ? void 0 : opts.resizeEffect) === 'fixed') {
235
- record.content.before.push(beforeGroupElem);
236
- record.content.after.push(afterGroupElem);
237
- const moveX = resizeX - elem.x;
238
- const moveY = resizeY - elem.y;
239
- const moveW = resizeW - elem.w;
240
- const moveH = resizeH - elem.h;
241
- fixedResizeGroupElementChildren(elem, { moveX, moveY, moveH, moveW }, record);
242
- elem.w = resizeW;
243
- elem.h = resizeH;
244
- elem.x = resizeX;
245
- elem.y = resizeY;
246
- return record;
247
- }
248
- elem.w = resizeW;
249
- elem.h = resizeH;
250
- elem.x = resizeX;
251
- elem.y = resizeY;
252
- record.content.before.push(beforeGroupElem);
253
- record.content.after.push(afterGroupElem);
254
- return record;
255
- }
@@ -1,10 +0,0 @@
1
- import type { SVGPathCommand, ElementSize } from '@idraw/types';
2
- export declare function parseSVGPath(path: string): SVGPathCommand[];
3
- export declare function generateSVGPath(commands: SVGPathCommand[]): string;
4
- type FilterSVGPathResult = ElementSize & {
5
- detail: {
6
- commands: SVGPathCommand[];
7
- };
8
- };
9
- export declare function filterSVGPath(commands: SVGPathCommand[]): FilterSVGPathResult;
10
- export {};