@idraw/core 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 (149) hide show
  1. package/dist/esm/board/index.d.ts +2 -2
  2. package/dist/esm/board/index.js +23 -12
  3. package/dist/esm/board/sharer.d.ts +3 -3
  4. package/dist/esm/board/sharer.js +10 -10
  5. package/dist/esm/board/viewer.d.ts +3 -3
  6. package/dist/esm/board/viewer.js +14 -14
  7. package/dist/esm/board/watcher.d.ts +3 -3
  8. package/dist/esm/board/watcher.js +68 -43
  9. package/dist/esm/core.d.ts +52 -0
  10. package/dist/esm/core.js +393 -0
  11. package/dist/esm/cursor/cursor-image.d.ts +2 -0
  12. package/dist/esm/cursor/cursor-image.js +2 -0
  13. package/dist/esm/cursor/cursor.js +60 -24
  14. package/dist/esm/index.d.ts +12 -61
  15. package/dist/esm/index.js +11 -389
  16. package/dist/esm/middlewares/common.d.ts +4 -0
  17. package/dist/esm/middlewares/common.js +13 -0
  18. package/dist/esm/middlewares/creator/dom.d.ts +11 -0
  19. package/dist/esm/middlewares/creator/dom.js +52 -0
  20. package/dist/esm/middlewares/creator/index.d.ts +5 -0
  21. package/dist/esm/middlewares/creator/index.js +136 -0
  22. package/dist/esm/middlewares/creator/static.d.ts +14 -0
  23. package/dist/esm/middlewares/creator/static.js +19 -0
  24. package/dist/esm/middlewares/creator/styles.d.ts +4 -0
  25. package/dist/esm/middlewares/creator/styles.js +32 -0
  26. package/dist/esm/middlewares/creator/types.d.ts +7 -0
  27. package/dist/esm/middlewares/creator/types.js +1 -0
  28. package/dist/esm/middlewares/creator/util.d.ts +10 -0
  29. package/dist/esm/middlewares/creator/util.js +52 -0
  30. package/dist/esm/middlewares/dragger/index.js +5 -5
  31. package/dist/esm/middlewares/info/draw-info.d.ts +11 -11
  32. package/dist/esm/middlewares/info/draw-info.js +18 -18
  33. package/dist/esm/middlewares/info/index.d.ts +2 -1
  34. package/dist/esm/middlewares/info/index.js +48 -51
  35. package/dist/esm/middlewares/info/static.d.ts +6 -0
  36. package/dist/esm/middlewares/info/{config.js → static.js} +6 -1
  37. package/dist/esm/middlewares/info/types.d.ts +2 -2
  38. package/dist/esm/middlewares/layout-selector/dom.d.ts +10 -0
  39. package/dist/esm/middlewares/layout-selector/dom.js +108 -0
  40. package/dist/esm/middlewares/layout-selector/index.d.ts +1 -1
  41. package/dist/esm/middlewares/layout-selector/index.js +89 -141
  42. package/dist/esm/middlewares/layout-selector/static.d.ts +32 -0
  43. package/dist/esm/middlewares/layout-selector/static.js +39 -0
  44. package/dist/esm/middlewares/layout-selector/styles.d.ts +4 -0
  45. package/dist/esm/middlewares/layout-selector/styles.js +127 -0
  46. package/dist/esm/middlewares/layout-selector/types.d.ts +6 -6
  47. package/dist/esm/middlewares/layout-selector/types.js +2 -2
  48. package/dist/esm/middlewares/layout-selector/util.d.ts +4 -4
  49. package/dist/esm/middlewares/layout-selector/util.js +19 -19
  50. package/dist/esm/middlewares/path-creator/dom.d.ts +29 -0
  51. package/dist/esm/middlewares/path-creator/dom.js +145 -0
  52. package/dist/esm/middlewares/path-creator/index.d.ts +5 -0
  53. package/dist/esm/middlewares/path-creator/index.js +203 -0
  54. package/dist/esm/middlewares/path-creator/static.d.ts +23 -0
  55. package/dist/esm/middlewares/path-creator/static.js +49 -0
  56. package/dist/esm/middlewares/path-creator/types.d.ts +1 -0
  57. package/dist/esm/middlewares/path-editor/calc.d.ts +6 -0
  58. package/dist/esm/middlewares/path-editor/calc.js +51 -0
  59. package/dist/esm/middlewares/path-editor/dom.d.ts +32 -0
  60. package/dist/esm/middlewares/path-editor/dom.js +575 -0
  61. package/dist/esm/middlewares/path-editor/draw.d.ts +7 -0
  62. package/dist/esm/middlewares/path-editor/draw.js +113 -0
  63. package/dist/esm/middlewares/path-editor/index.d.ts +5 -0
  64. package/dist/esm/middlewares/path-editor/index.js +312 -0
  65. package/dist/esm/middlewares/path-editor/parse.d.ts +5 -0
  66. package/dist/esm/middlewares/path-editor/parse.js +37 -0
  67. package/dist/esm/middlewares/path-editor/static.d.ts +34 -0
  68. package/dist/esm/middlewares/path-editor/static.js +82 -0
  69. package/dist/esm/middlewares/path-editor/types.d.ts +26 -0
  70. package/dist/esm/middlewares/path-editor/types.js +1 -0
  71. package/dist/esm/middlewares/path-editor/util.d.ts +5 -0
  72. package/dist/esm/middlewares/path-editor/util.js +21 -0
  73. package/dist/esm/middlewares/pointer/index.js +5 -5
  74. package/dist/esm/middlewares/pointer/types.d.ts +2 -2
  75. package/dist/esm/middlewares/ruler/index.d.ts +2 -0
  76. package/dist/esm/middlewares/ruler/index.js +12 -19
  77. package/dist/esm/middlewares/ruler/static.d.ts +8 -0
  78. package/dist/esm/middlewares/ruler/{config.js → static.js} +16 -3
  79. package/dist/esm/middlewares/ruler/types.d.ts +2 -2
  80. package/dist/esm/middlewares/ruler/util.d.ts +6 -6
  81. package/dist/esm/middlewares/ruler/util.js +31 -31
  82. package/dist/esm/middlewares/scaler/index.js +2 -2
  83. package/dist/esm/middlewares/scroller/dom.d.ts +14 -0
  84. package/dist/esm/middlewares/scroller/dom.js +53 -0
  85. package/dist/esm/middlewares/scroller/index.d.ts +2 -0
  86. package/dist/esm/middlewares/scroller/index.js +111 -46
  87. package/dist/esm/middlewares/scroller/static.d.ts +21 -0
  88. package/dist/esm/middlewares/scroller/static.js +29 -0
  89. package/dist/esm/middlewares/scroller/styles.d.ts +4 -0
  90. package/dist/esm/middlewares/scroller/styles.js +73 -0
  91. package/dist/esm/middlewares/scroller/types.d.ts +8 -6
  92. package/dist/esm/middlewares/scroller/types.js +1 -1
  93. package/dist/esm/middlewares/scroller/util.d.ts +6 -13
  94. package/dist/esm/middlewares/scroller/util.js +15 -144
  95. package/dist/esm/middlewares/selector/dom.d.ts +21 -0
  96. package/dist/esm/middlewares/selector/dom.js +395 -0
  97. package/dist/esm/middlewares/selector/draw-base.d.ts +9 -21
  98. package/dist/esm/middlewares/selector/draw-base.js +19 -43
  99. package/dist/esm/middlewares/selector/draw-reference.d.ts +4 -5
  100. package/dist/esm/middlewares/selector/draw-reference.js +5 -5
  101. package/dist/esm/middlewares/selector/index.d.ts +4 -2
  102. package/dist/esm/middlewares/selector/index.js +315 -439
  103. package/dist/esm/middlewares/selector/reference.d.ts +5 -5
  104. package/dist/esm/middlewares/selector/reference.js +36 -30
  105. package/dist/esm/middlewares/selector/render-frame.d.ts +11 -0
  106. package/dist/esm/middlewares/selector/render-frame.js +107 -0
  107. package/dist/esm/middlewares/selector/resize.d.ts +7 -0
  108. package/dist/esm/middlewares/selector/resize.js +27 -0
  109. package/dist/esm/middlewares/selector/static.d.ts +67 -0
  110. package/dist/esm/middlewares/selector/static.js +92 -0
  111. package/dist/esm/middlewares/selector/styles.d.ts +4 -0
  112. package/dist/esm/middlewares/selector/styles.js +153 -0
  113. package/dist/esm/middlewares/selector/types.d.ts +27 -27
  114. package/dist/esm/middlewares/selector/types.js +1 -1
  115. package/dist/esm/middlewares/selector/util.d.ts +22 -32
  116. package/dist/esm/middlewares/selector/util.js +226 -243
  117. package/dist/esm/middlewares/text-editor/dom.d.ts +5 -0
  118. package/dist/esm/middlewares/text-editor/dom.js +135 -0
  119. package/dist/esm/middlewares/text-editor/index.d.ts +5 -20
  120. package/dist/esm/middlewares/text-editor/index.js +201 -207
  121. package/dist/esm/middlewares/text-editor/static.d.ts +10 -0
  122. package/dist/esm/middlewares/text-editor/static.js +17 -0
  123. package/dist/esm/middlewares/text-editor/types.d.ts +21 -0
  124. package/dist/esm/middlewares/text-editor/types.js +1 -0
  125. package/dist/esm/record.d.ts +5 -5
  126. package/dist/esm/record.js +14 -14
  127. package/dist/esm/{config.d.ts → static.d.ts} +16 -0
  128. package/dist/esm/{config.js → static.js} +18 -2
  129. package/dist/index.global.js +8934 -5646
  130. package/dist/index.global.min.js +1 -1
  131. package/package.json +4 -4
  132. package/dist/esm/middlewares/info/config.d.ts +0 -5
  133. package/dist/esm/middlewares/layout-selector/config.d.ts +0 -11
  134. package/dist/esm/middlewares/layout-selector/config.js +0 -12
  135. package/dist/esm/middlewares/ruler/config.d.ts +0 -7
  136. package/dist/esm/middlewares/scroller/config.d.ts +0 -10
  137. package/dist/esm/middlewares/scroller/config.js +0 -16
  138. package/dist/esm/middlewares/selector/config.d.ts +0 -30
  139. package/dist/esm/middlewares/selector/config.js +0 -38
  140. package/dist/esm/middlewares/selector/draw-auxiliary.js +0 -12
  141. package/dist/esm/middlewares/selector/draw-debug.d.ts +0 -5
  142. package/dist/esm/middlewares/selector/draw-debug.js +0 -30
  143. package/dist/esm/middlewares/selector/draw-wrapper.d.ts +0 -37
  144. package/dist/esm/middlewares/selector/draw-wrapper.js +0 -139
  145. package/dist/esm/middlewares/selector/pattern/icon-rotate.d.ts +0 -4
  146. package/dist/esm/middlewares/selector/pattern/icon-rotate.js +0 -88
  147. package/dist/esm/middlewares/selector/pattern/index.d.ts +0 -8
  148. package/dist/esm/middlewares/selector/pattern/index.js +0 -38
  149. /package/dist/esm/middlewares/{selector/draw-auxiliary.d.ts → path-creator/types.js} +0 -0
@@ -0,0 +1,395 @@
1
+ import { ATTR_VALID_WATCH, createHTMLElement, calcViewMaterialSize, assembleHTMLElement, addClassName, removeClassName, getMaterialSize, calcMaterialListSize, calcViewPoint, setHTMLCSSProps, bubbleHTMLElement, } from '@idraw/util';
2
+ import { classNameMap, ATTR_BOX_TYPE, ATTR_MATERIAL_ID, ATTR_HANDLER_TYPE, BOX_TARGET, BOX_GROUP, cornerHandlerSize, } from './static';
3
+ function createNestedBox(opts) {
4
+ const { viewMaterialSize, viewGroupSizeQueue, className, targetClassName } = opts;
5
+ let $target = null;
6
+ if (viewMaterialSize) {
7
+ $target = createHTMLElement('div', {
8
+ [ATTR_BOX_TYPE]: BOX_TARGET,
9
+ [ATTR_VALID_WATCH]: 'true',
10
+ [ATTR_MATERIAL_ID]: viewMaterialSize.id,
11
+ className: classNameMap.materialBox,
12
+ style: {
13
+ display: 'block',
14
+ position: 'absolute',
15
+ top: viewMaterialSize.y,
16
+ left: viewMaterialSize.x,
17
+ width: viewMaterialSize.width,
18
+ height: viewMaterialSize.height,
19
+ transform: `rotate(${viewMaterialSize.angle || 0}deg)`,
20
+ },
21
+ });
22
+ addClassName($target, [targetClassName]);
23
+ }
24
+ let $result = $target;
25
+ for (let i = viewGroupSizeQueue.length - 1; i >= 0; i--) {
26
+ const groupSize = viewGroupSizeQueue[i];
27
+ const children = [];
28
+ if ($result) {
29
+ children.push($result);
30
+ }
31
+ $result = createHTMLElement('div', {
32
+ [ATTR_BOX_TYPE]: BOX_GROUP,
33
+ [ATTR_VALID_WATCH]: 'true',
34
+ [ATTR_MATERIAL_ID]: groupSize.id,
35
+ className: `${classNameMap.materialBox} ${classNameMap.groupBox}`,
36
+ style: {
37
+ position: 'absolute',
38
+ top: groupSize.y,
39
+ left: groupSize.x,
40
+ width: groupSize.width,
41
+ height: groupSize.height,
42
+ transform: `rotate(${groupSize.angle || 0}deg)`,
43
+ },
44
+ }, children);
45
+ }
46
+ if ($result) {
47
+ addClassName($result, [className]);
48
+ }
49
+ return $result;
50
+ }
51
+ function calcBoxSizes(opts) {
52
+ const { material, groupQueue, viewScaleInfo } = opts;
53
+ let viewMaterialSize = material ? getMaterialSize(material) : null;
54
+ const viewGroupSizeQueue = groupQueue.map((group) => getMaterialSize(group));
55
+ if (Array.isArray(viewGroupSizeQueue) && viewGroupSizeQueue.length > 0) {
56
+ viewMaterialSize = viewMaterialSize
57
+ ? calcViewMaterialSize(viewMaterialSize, { viewScaleInfo: { scale: viewScaleInfo.scale } })
58
+ : null;
59
+ viewGroupSizeQueue[0] = calcViewMaterialSize(viewGroupSizeQueue[0], { viewScaleInfo });
60
+ for (let i = 1; i < viewGroupSizeQueue.length; i++) {
61
+ viewGroupSizeQueue[i] = calcViewMaterialSize(viewGroupSizeQueue[i], {
62
+ viewScaleInfo: { scale: viewScaleInfo.scale },
63
+ });
64
+ }
65
+ }
66
+ else {
67
+ viewMaterialSize = viewMaterialSize ? calcViewMaterialSize(viewMaterialSize, { viewScaleInfo }) : null;
68
+ }
69
+ return {
70
+ viewMaterialSize: viewMaterialSize,
71
+ viewGroupSizeQueue: viewGroupSizeQueue,
72
+ };
73
+ }
74
+ function generateBoxsBySizes($root, opts) {
75
+ if (!$root) {
76
+ return null;
77
+ }
78
+ const { className, targetClassName, viewMaterialSize, viewGroupSizeQueue } = opts;
79
+ const $box = createNestedBox({
80
+ viewMaterialSize,
81
+ viewGroupSizeQueue,
82
+ className,
83
+ targetClassName,
84
+ });
85
+ if ($box) {
86
+ assembleHTMLElement($root, {}, [$box]);
87
+ }
88
+ return $box;
89
+ }
90
+ function generateBoxs($root, opts) {
91
+ if (!$root) {
92
+ return null;
93
+ }
94
+ const { className, targetClassName } = opts;
95
+ const { viewMaterialSize, viewGroupSizeQueue } = calcBoxSizes(opts);
96
+ return generateBoxsBySizes($root, {
97
+ viewMaterialSize,
98
+ viewGroupSizeQueue,
99
+ className,
100
+ targetClassName,
101
+ });
102
+ }
103
+ function resetBoxs($root, opts) {
104
+ var _a, _b;
105
+ if (!$root) {
106
+ return null;
107
+ }
108
+ const { className, targetClassName, renderTargetInner, destoryTargetInner, afterRender } = opts;
109
+ const $boxs = $root.getElementsByClassName(className);
110
+ const { viewMaterialSize, viewGroupSizeQueue } = calcBoxSizes(opts);
111
+ const remove = () => {
112
+ Array.from($boxs).forEach(($box) => {
113
+ $box.remove();
114
+ });
115
+ };
116
+ if (!viewMaterialSize && !viewGroupSizeQueue.length) {
117
+ remove();
118
+ }
119
+ if ($boxs.length === 1) {
120
+ const $box = $boxs[0];
121
+ addClassName($box, [className]);
122
+ if (viewGroupSizeQueue.length > 0) {
123
+ let index = 0;
124
+ let $current = $boxs[0];
125
+ let $parent = $current.parentElement;
126
+ while (index < viewGroupSizeQueue.length) {
127
+ const groupSize = viewGroupSizeQueue[index];
128
+ if ($current) {
129
+ removeClassName($current, [targetClassName]);
130
+ assembleHTMLElement($current, {
131
+ [ATTR_BOX_TYPE]: BOX_GROUP,
132
+ [ATTR_VALID_WATCH]: 'true',
133
+ [ATTR_MATERIAL_ID]: groupSize.id,
134
+ style: {
135
+ position: 'absolute',
136
+ top: groupSize.y,
137
+ left: groupSize.x,
138
+ width: groupSize.width,
139
+ height: groupSize.height,
140
+ transform: `rotate(${groupSize.angle || 0}deg)`,
141
+ },
142
+ });
143
+ }
144
+ else {
145
+ $current = createHTMLElement('div', {
146
+ [ATTR_BOX_TYPE]: BOX_GROUP,
147
+ [ATTR_VALID_WATCH]: 'true',
148
+ [ATTR_MATERIAL_ID]: groupSize.id,
149
+ className: `${classNameMap.materialBox} ${classNameMap.groupBox}`,
150
+ style: {
151
+ position: 'absolute',
152
+ top: groupSize.y,
153
+ left: groupSize.x,
154
+ width: groupSize.width,
155
+ height: groupSize.height,
156
+ transform: `rotate(${groupSize.angle || 0}deg)`,
157
+ },
158
+ });
159
+ $parent === null || $parent === void 0 ? void 0 : $parent.appendChild($current);
160
+ }
161
+ $parent = $current;
162
+ if (index + 1 === viewGroupSizeQueue.length) {
163
+ break;
164
+ }
165
+ $current = (_a = $current === null || $current === void 0 ? void 0 : $current.children) === null || _a === void 0 ? void 0 : _a[0];
166
+ index++;
167
+ }
168
+ if (viewMaterialSize) {
169
+ let $target = (_b = $current === null || $current === void 0 ? void 0 : $current.children) === null || _b === void 0 ? void 0 : _b[0];
170
+ if (!$target) {
171
+ $target = createHTMLElement('div');
172
+ $parent === null || $parent === void 0 ? void 0 : $parent.appendChild($target);
173
+ }
174
+ assembleHTMLElement($target, {
175
+ [ATTR_BOX_TYPE]: BOX_TARGET,
176
+ [ATTR_VALID_WATCH]: 'true',
177
+ [ATTR_MATERIAL_ID]: viewMaterialSize.id,
178
+ style: {
179
+ display: 'block',
180
+ position: 'absolute',
181
+ top: viewMaterialSize.y,
182
+ left: viewMaterialSize.x,
183
+ width: viewMaterialSize.width,
184
+ height: viewMaterialSize.height,
185
+ transform: `rotate(${viewMaterialSize.angle || 0}deg)`,
186
+ },
187
+ });
188
+ renderTargetInner === null || renderTargetInner === void 0 ? void 0 : renderTargetInner($target);
189
+ }
190
+ else {
191
+ destoryTargetInner === null || destoryTargetInner === void 0 ? void 0 : destoryTargetInner($current);
192
+ }
193
+ }
194
+ else {
195
+ if (viewMaterialSize) {
196
+ destoryTargetInner === null || destoryTargetInner === void 0 ? void 0 : destoryTargetInner($box);
197
+ assembleHTMLElement($box, {
198
+ [ATTR_BOX_TYPE]: BOX_TARGET,
199
+ [ATTR_VALID_WATCH]: 'true',
200
+ [ATTR_MATERIAL_ID]: viewMaterialSize.id,
201
+ style: {
202
+ display: 'block',
203
+ position: 'absolute',
204
+ top: viewMaterialSize.y,
205
+ left: viewMaterialSize.x,
206
+ width: viewMaterialSize.width,
207
+ height: viewMaterialSize.height,
208
+ transform: `rotate(${viewMaterialSize.angle || 0}deg)`,
209
+ },
210
+ });
211
+ addClassName($box, [targetClassName]);
212
+ renderTargetInner === null || renderTargetInner === void 0 ? void 0 : renderTargetInner($box);
213
+ }
214
+ else {
215
+ remove();
216
+ }
217
+ }
218
+ afterRender === null || afterRender === void 0 ? void 0 : afterRender({ $rootBox: $box, viewGroupSizeQueue, viewMaterialSize });
219
+ return $box;
220
+ }
221
+ else {
222
+ remove();
223
+ const $box = generateBoxsBySizes($root, {
224
+ viewMaterialSize,
225
+ viewGroupSizeQueue,
226
+ className,
227
+ targetClassName,
228
+ });
229
+ addClassName($box, [targetClassName]);
230
+ renderTargetInner === null || renderTargetInner === void 0 ? void 0 : renderTargetInner($box);
231
+ afterRender === null || afterRender === void 0 ? void 0 : afterRender({ $rootBox: $box, viewGroupSizeQueue, viewMaterialSize });
232
+ }
233
+ }
234
+ function destroyBoxs($root, opts) {
235
+ if (!$root) {
236
+ return;
237
+ }
238
+ const { className } = opts;
239
+ const $prevBoxs = Array.from($root.getElementsByClassName(className));
240
+ $prevBoxs.forEach(($box) => {
241
+ $box.remove();
242
+ });
243
+ }
244
+ export function initRoot(opts) {
245
+ const { rootClassName, $container } = opts;
246
+ const create = createHTMLElement;
247
+ const $root = create('div', {
248
+ className: rootClassName,
249
+ [ATTR_VALID_WATCH]: 'true',
250
+ });
251
+ $container.appendChild($root);
252
+ return $root;
253
+ }
254
+ function clearMaterialNestedBox($root) {
255
+ return destroyBoxs($root, { className: classNameMap.nestedBox });
256
+ }
257
+ export function resetMaterialNestedBox($root, opts) {
258
+ const { groupQueue } = opts;
259
+ if (Array.isArray(groupQueue) && groupQueue.length) {
260
+ resetBoxs($root, Object.assign(Object.assign({}, opts), { className: classNameMap.nestedBox, targetClassName: classNameMap.nestedTargetBox }));
261
+ }
262
+ else {
263
+ clearMaterialNestedBox($root);
264
+ }
265
+ }
266
+ export function clearMaterialHoverBox($root) {
267
+ return destroyBoxs($root, { className: classNameMap.hoverBox });
268
+ }
269
+ export function renderMaterialHoverBox($root, opts) {
270
+ clearMaterialHoverBox($root);
271
+ resetBoxs($root, Object.assign(Object.assign({}, opts), { className: classNameMap.hoverBox, targetClassName: classNameMap.hoverTargetBox }));
272
+ }
273
+ export function clearMaterialLockedBox($root) {
274
+ return destroyBoxs($root, { className: classNameMap.lockedBox });
275
+ }
276
+ export function renderMaterialLockedBox($root, opts) {
277
+ clearMaterialLockedBox($root);
278
+ generateBoxs($root, Object.assign(Object.assign({}, opts), { className: classNameMap.lockedBox, targetClassName: classNameMap.lockedTargetBox }));
279
+ }
280
+ function clearMaterialSelectedBox($root) {
281
+ return destroyBoxs($root, { className: classNameMap.selectedBox });
282
+ }
283
+ function renderSelectedBoxInnerHandlers($target) {
284
+ const $existHandlers = $target.querySelectorAll(`[${ATTR_HANDLER_TYPE}]`);
285
+ if ($existHandlers.length > 0) {
286
+ return;
287
+ }
288
+ const create = createHTMLElement;
289
+ const baseAttrs = {
290
+ [ATTR_VALID_WATCH]: 'true',
291
+ };
292
+ assembleHTMLElement($target, {}, [
293
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'left' }, baseAttrs), { className: `${classNameMap.edgeHandler} ${classNameMap.edgeLeftHandler}` })),
294
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'top' }, baseAttrs), { className: `${classNameMap.edgeHandler} ${classNameMap.edgeTopHandler}` })),
295
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'right' }, baseAttrs), { className: `${classNameMap.edgeHandler} ${classNameMap.edgeRightHandler}` })),
296
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'bottom' }, baseAttrs), { className: `${classNameMap.edgeHandler} ${classNameMap.edgeBottomHandler}` })),
297
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'top-left' }, baseAttrs), { className: `${classNameMap.cornerHandler} ${classNameMap.cornerTopLeftHandler}` })),
298
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'top-right' }, baseAttrs), { className: `${classNameMap.cornerHandler} ${classNameMap.cornerTopRightHandler}` })),
299
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'bottom-left' }, baseAttrs), { className: `${classNameMap.cornerHandler} ${classNameMap.cornerBottomLeftHandler}` })),
300
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'bottom-right' }, baseAttrs), { className: `${classNameMap.cornerHandler} ${classNameMap.cornerBottomRightHandler}` })),
301
+ create('div', Object.assign(Object.assign({ [ATTR_HANDLER_TYPE]: 'rotate' }, baseAttrs), { className: classNameMap.rotateHandler })),
302
+ ]);
303
+ }
304
+ export function resetMaterialSelectedBox($root, opts) {
305
+ const { material } = opts;
306
+ if (material) {
307
+ resetBoxs($root, Object.assign(Object.assign({}, opts), { className: classNameMap.selectedBox, targetClassName: classNameMap.selectedTargetBox, renderTargetInner: renderSelectedBoxInnerHandlers, destoryTargetInner: ($target) => ($target.innerHTML = ''), afterRender: ({ $rootBox, viewMaterialSize }) => {
308
+ if (viewMaterialSize && $rootBox) {
309
+ const { width, height } = viewMaterialSize;
310
+ const size = Math.min(width, height);
311
+ if (size > cornerHandlerSize * 4) {
312
+ removeClassName($rootBox, [classNameMap.hideHandler]);
313
+ }
314
+ else {
315
+ addClassName($rootBox, [classNameMap.hideHandler]);
316
+ }
317
+ }
318
+ } }));
319
+ }
320
+ else {
321
+ clearMaterialSelectedBox($root);
322
+ }
323
+ }
324
+ export function clearMaterialSelectionAreaBox($root) {
325
+ return destroyBoxs($root, { className: classNameMap.selectionAreaBox });
326
+ }
327
+ function getSelectionAreaBox($root) {
328
+ const $boxs = $root.getElementsByClassName(classNameMap.selectionAreaBox);
329
+ if ($boxs[0]) {
330
+ return $boxs[0];
331
+ }
332
+ const $box = createHTMLElement('div', { [ATTR_VALID_WATCH]: 'true', className: classNameMap.selectionAreaBox });
333
+ assembleHTMLElement($root, {}, [$box]);
334
+ return $box;
335
+ }
336
+ export function resetMaterialSelectionAreaBox($root, opts) {
337
+ if (!$root) {
338
+ return;
339
+ }
340
+ const { areaStart, areaEnd, selectedMaterials, viewScaleInfo } = opts;
341
+ let start = null;
342
+ let end = null;
343
+ let needCalcInView = false;
344
+ if (selectedMaterials.length > 1 || (selectedMaterials.length === 1 && areaStart && areaEnd)) {
345
+ const listSize = calcMaterialListSize(selectedMaterials);
346
+ const { x, y, width, height } = listSize;
347
+ start = { x, y };
348
+ end = {
349
+ x: x + width,
350
+ y: y + height,
351
+ };
352
+ needCalcInView = true;
353
+ }
354
+ else if (areaStart && areaEnd) {
355
+ start = Object.assign({}, areaStart);
356
+ end = Object.assign({}, areaEnd);
357
+ }
358
+ if (start && end) {
359
+ const $box = getSelectionAreaBox($root);
360
+ if (needCalcInView) {
361
+ start = calcViewPoint(start, { viewScaleInfo });
362
+ end = calcViewPoint(end, { viewScaleInfo });
363
+ }
364
+ setHTMLCSSProps($box, {
365
+ left: Math.min(start.x, end.x),
366
+ top: Math.min(start.y, end.y),
367
+ width: Math.abs(end.x - start.x),
368
+ height: Math.abs(end.y - start.y),
369
+ });
370
+ }
371
+ else {
372
+ clearMaterialSelectionAreaBox($root);
373
+ }
374
+ }
375
+ export function isPointInActiveGroup(e, opts) {
376
+ const { groupQueue, $root } = opts;
377
+ if (!groupQueue || !((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) || !$root) {
378
+ return false;
379
+ }
380
+ const id = groupQueue[groupQueue.length - 1].id;
381
+ const $target = e.target;
382
+ if (typeof id === 'string' && id) {
383
+ if (($target === null || $target === void 0 ? void 0 : $target.getAttribute(ATTR_BOX_TYPE)) === BOX_GROUP && ($target === null || $target === void 0 ? void 0 : $target.getAttribute(ATTR_MATERIAL_ID)) === id) {
384
+ return true;
385
+ }
386
+ const $targetGroup = bubbleHTMLElement($target, $root, {
387
+ [ATTR_BOX_TYPE]: BOX_GROUP,
388
+ });
389
+ if (($targetGroup === null || $targetGroup === void 0 ? void 0 : $targetGroup.getAttribute(ATTR_BOX_TYPE)) === BOX_GROUP &&
390
+ ($targetGroup === null || $targetGroup === void 0 ? void 0 : $targetGroup.getAttribute(ATTR_MATERIAL_ID)) === id) {
391
+ return true;
392
+ }
393
+ }
394
+ return false;
395
+ }
@@ -1,30 +1,18 @@
1
- import type { PointSize, ViewContext2D, ViewRectVertexes } from '@idraw/types';
1
+ import type { Point, ViewContext2D, ViewRectVertexes } from '@idraw/types';
2
2
  export declare function drawVertexes(ctx: ViewContext2D, vertexes: ViewRectVertexes, opts: {
3
- borderColor: string;
4
- borderWidth: number;
3
+ stroke: string;
4
+ strokeWidth: number;
5
5
  background: string;
6
6
  lineDash: number[];
7
7
  }): void;
8
- export declare function drawLine(ctx: ViewContext2D, start: PointSize, end: PointSize, opts: {
9
- borderColor: string;
10
- borderWidth: number;
8
+ export declare function drawLine(ctx: ViewContext2D, start: Point, end: Point, opts: {
9
+ stroke: string;
10
+ strokeWidth: number;
11
11
  lineDash: number[];
12
12
  }): void;
13
- export declare function drawCircleController(ctx: ViewContext2D, circleCenter: PointSize, opts: {
14
- borderColor: string;
15
- borderWidth: number;
16
- background: string;
17
- lineDash: number[];
18
- size: number;
19
- }): void;
20
- export declare function drawCrossVertexes(ctx: ViewContext2D, vertexes: ViewRectVertexes, opts: {
21
- borderColor: string;
22
- borderWidth: number;
23
- lineDash: number[];
24
- }): void;
25
- export declare function drawCrossByCenter(ctx: ViewContext2D, center: PointSize, opts: {
13
+ export declare function drawCrossByCenter(ctx: ViewContext2D, center: Point, opts: {
26
14
  size: number;
27
- borderColor: string;
28
- borderWidth: number;
15
+ stroke: string;
16
+ strokeWidth: number;
29
17
  lineDash: number[];
30
18
  }): void;
@@ -1,8 +1,8 @@
1
1
  export function drawVertexes(ctx, vertexes, opts) {
2
- const { borderColor, borderWidth, background, lineDash } = opts;
2
+ const { stroke, strokeWidth, background, lineDash } = opts;
3
3
  ctx.setLineDash([]);
4
- ctx.lineWidth = borderWidth;
5
- ctx.strokeStyle = borderColor;
4
+ ctx.lineWidth = strokeWidth;
5
+ ctx.strokeStyle = stroke;
6
6
  ctx.fillStyle = background;
7
7
  ctx.setLineDash(lineDash);
8
8
  ctx.beginPath();
@@ -16,10 +16,10 @@ export function drawVertexes(ctx, vertexes, opts) {
16
16
  ctx.fill('nonzero');
17
17
  }
18
18
  export function drawLine(ctx, start, end, opts) {
19
- const { borderColor, borderWidth, lineDash } = opts;
19
+ const { stroke, strokeWidth, lineDash } = opts;
20
20
  ctx.setLineDash([]);
21
- ctx.lineWidth = borderWidth;
22
- ctx.strokeStyle = borderColor;
21
+ ctx.lineWidth = strokeWidth;
22
+ ctx.strokeStyle = stroke;
23
23
  ctx.setLineDash(lineDash);
24
24
  ctx.beginPath();
25
25
  ctx.moveTo(start.x, start.y);
@@ -27,35 +27,11 @@ export function drawLine(ctx, start, end, opts) {
27
27
  ctx.closePath();
28
28
  ctx.stroke();
29
29
  }
30
- export function drawCircleController(ctx, circleCenter, opts) {
31
- const { size, borderColor, borderWidth, background } = opts;
32
- const center = circleCenter;
33
- const r = size / 2;
34
- const a = r;
35
- const b = r;
36
- if (a >= 0 && b >= 0) {
37
- if (typeof borderWidth === 'number' && borderWidth > 0) {
38
- const ba = borderWidth / 2 + a;
39
- const bb = borderWidth / 2 + b;
40
- ctx.beginPath();
41
- ctx.strokeStyle = borderColor;
42
- ctx.lineWidth = borderWidth;
43
- ctx.circle(center.x, center.y, ba, bb, 0, 0, 2 * Math.PI);
44
- ctx.closePath();
45
- ctx.stroke();
46
- }
47
- ctx.beginPath();
48
- ctx.fillStyle = background;
49
- ctx.circle(center.x, center.y, a, b, 0, 0, 2 * Math.PI);
50
- ctx.closePath();
51
- ctx.fill('nonzero');
52
- }
53
- }
54
- export function drawCrossVertexes(ctx, vertexes, opts) {
55
- const { borderColor, borderWidth, lineDash } = opts;
30
+ function drawCrossVertexes(ctx, vertexes, opts) {
31
+ const { stroke, strokeWidth, lineDash } = opts;
56
32
  ctx.setLineDash([]);
57
- ctx.lineWidth = borderWidth;
58
- ctx.strokeStyle = borderColor;
33
+ ctx.lineWidth = strokeWidth;
34
+ ctx.strokeStyle = stroke;
59
35
  ctx.setLineDash(lineDash);
60
36
  ctx.beginPath();
61
37
  ctx.moveTo(vertexes[0].x, vertexes[0].y);
@@ -69,7 +45,7 @@ export function drawCrossVertexes(ctx, vertexes, opts) {
69
45
  ctx.stroke();
70
46
  }
71
47
  export function drawCrossByCenter(ctx, center, opts) {
72
- const { size, borderColor, borderWidth, lineDash } = opts;
48
+ const { size, stroke, strokeWidth, lineDash } = opts;
73
49
  const minX = center.x - size / 2;
74
50
  const maxX = center.x + size / 2;
75
51
  const minY = center.y - size / 2;
@@ -77,24 +53,24 @@ export function drawCrossByCenter(ctx, center, opts) {
77
53
  const vertexes = [
78
54
  {
79
55
  x: minX,
80
- y: minY
56
+ y: minY,
81
57
  },
82
58
  {
83
59
  x: maxX,
84
- y: minY
60
+ y: minY,
85
61
  },
86
62
  {
87
63
  x: maxX,
88
- y: maxY
64
+ y: maxY,
89
65
  },
90
66
  {
91
67
  x: minX,
92
- y: maxY
93
- }
68
+ y: maxY,
69
+ },
94
70
  ];
95
71
  drawCrossVertexes(ctx, vertexes, {
96
- borderColor,
97
- borderWidth,
98
- lineDash
72
+ stroke,
73
+ strokeWidth,
74
+ lineDash,
99
75
  });
100
76
  }
@@ -1,7 +1,6 @@
1
- import type { ViewContext2D, PointSize } from '@idraw/types';
2
- import { MiddlewareSelectorStyle } from './types';
1
+ import type { ViewContext2D, Point, MiddlewareSelectorStyles } from '@idraw/types';
3
2
  export declare function drawReferenceLines(ctx: ViewContext2D, opts: {
4
- xLines?: Array<PointSize[]>;
5
- yLines?: Array<PointSize[]>;
6
- style: MiddlewareSelectorStyle;
3
+ xLines?: Array<Point[]>;
4
+ yLines?: Array<Point[]>;
5
+ styles: MiddlewareSelectorStyles;
7
6
  }): void;
@@ -1,11 +1,11 @@
1
1
  import { drawLine, drawCrossByCenter } from './draw-base';
2
2
  export function drawReferenceLines(ctx, opts) {
3
- const { xLines, yLines, style } = opts;
4
- const { referenceColor } = style;
3
+ const { xLines, yLines, styles } = opts;
4
+ const { referenceColor } = styles;
5
5
  const lineOpts = {
6
- borderColor: referenceColor,
7
- borderWidth: 1,
8
- lineDash: []
6
+ stroke: referenceColor,
7
+ strokeWidth: 1,
8
+ lineDash: [],
9
9
  };
10
10
  const crossOpts = Object.assign(Object.assign({}, lineOpts), { size: 6 });
11
11
  if (xLines) {
@@ -1,9 +1,11 @@
1
1
  import type { CoreEventMap, MiddlewareSelectorConfig } from '@idraw/types';
2
2
  import type { Middleware, ActionType, DeepSelectorSharedStorage } from './types';
3
- import { keyActionType, keyResizeType, keyGroupQueue, keyHoverElement, keySelectedElementList } from './config';
3
+ import { keyActionType, keyResizeType, keyGroupQueue, keyHoverMaterial, keySelectedMaterialList } from './static';
4
4
  import { MIDDLEWARE_INTERNAL_EVENT_SHOW_INFO_ANGLE } from '../info';
5
- export { keySelectedElementList, keyHoverElement, keyActionType, keyResizeType, keyGroupQueue };
5
+ import { getMiddlewareSelectorStyles } from './styles';
6
+ export { keySelectedMaterialList, keyHoverMaterial, keyActionType, keyResizeType, keyGroupQueue };
6
7
  export type { DeepSelectorSharedStorage, ActionType };
8
+ export { getMiddlewareSelectorStyles };
7
9
  export declare const MiddlewareSelector: Middleware<DeepSelectorSharedStorage, CoreEventMap & {
8
10
  [MIDDLEWARE_INTERNAL_EVENT_SHOW_INFO_ANGLE]: {
9
11
  show: boolean;