@tmagic/stage 1.0.0-beta.11 → 1.0.0-beta.14
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/README.md +1 -0
- package/dist/tmagic-stage.es.js +270 -187
- package/dist/tmagic-stage.es.js.map +1 -1
- package/dist/tmagic-stage.umd.js +271 -189
- package/dist/tmagic-stage.umd.js.map +1 -1
- package/dist/types/src/StageCore.d.ts +4 -4
- package/dist/types/src/StageDragResize.d.ts +2 -2
- package/dist/types/src/StageHighlight.d.ts +2 -0
- package/dist/types/src/StageMask.d.ts +16 -0
- package/dist/types/src/TargetCalibrate.d.ts +18 -0
- package/dist/types/src/const.d.ts +1 -0
- package/dist/types/src/types.d.ts +7 -0
- package/package.json +6 -5
- package/src/StageCore.ts +8 -8
- package/src/StageDragResize.ts +5 -3
- package/src/StageHighlight.ts +14 -2
- package/src/StageMask.ts +57 -25
- package/src/TargetCalibrate.ts +135 -0
- package/src/const.ts +2 -0
- package/src/types.ts +8 -1
- package/tsconfig.json +0 -9
- package/vite.config.ts +0 -27
package/src/StageDragResize.ts
CHANGED
|
@@ -46,11 +46,11 @@ export default class StageDragResize extends EventEmitter {
|
|
|
46
46
|
public horizontalGuidelines: number[] = [];
|
|
47
47
|
public verticalGuidelines: number[] = [];
|
|
48
48
|
public elementGuidelines: HTMLElement[] = [];
|
|
49
|
+
public mode: Mode = Mode.ABSOLUTE;
|
|
49
50
|
|
|
50
51
|
private moveableOptions: MoveableOptions = {};
|
|
51
52
|
private dragStatus: ActionStatus = ActionStatus.END;
|
|
52
53
|
private ghostEl: HTMLElement | undefined;
|
|
53
|
-
private mode: Mode = Mode.ABSOLUTE;
|
|
54
54
|
private moveableHelper?: MoveableHelper;
|
|
55
55
|
|
|
56
56
|
constructor(config: StageDragResizeConfig) {
|
|
@@ -354,6 +354,7 @@ export default class StageDragResize extends EventEmitter {
|
|
|
354
354
|
top: ${offset.top}px;
|
|
355
355
|
width: ${width}px;
|
|
356
356
|
height: ${height}px;
|
|
357
|
+
z-index: 9;
|
|
357
358
|
`;
|
|
358
359
|
|
|
359
360
|
this.dragEl.id = `${DRAG_EL_ID_PREFIX}${el.id}`;
|
|
@@ -367,6 +368,7 @@ export default class StageDragResize extends EventEmitter {
|
|
|
367
368
|
if (!this.target) return {};
|
|
368
369
|
|
|
369
370
|
const isAbsolute = this.mode === Mode.ABSOLUTE;
|
|
371
|
+
const isFixed = this.mode === Mode.FIXED;
|
|
370
372
|
|
|
371
373
|
let { moveableOptions = {} } = this.core.config;
|
|
372
374
|
|
|
@@ -381,8 +383,8 @@ export default class StageDragResize extends EventEmitter {
|
|
|
381
383
|
dragArea: false,
|
|
382
384
|
draggable: true,
|
|
383
385
|
resizable: true,
|
|
384
|
-
snappable: isAbsolute,
|
|
385
|
-
snapGap: isAbsolute,
|
|
386
|
+
snappable: isAbsolute || isFixed,
|
|
387
|
+
snapGap: isAbsolute || isFixed,
|
|
386
388
|
snapThreshold: 5,
|
|
387
389
|
snapDigit: 0,
|
|
388
390
|
throttleDrag: 0,
|
package/src/StageHighlight.ts
CHANGED
|
@@ -21,19 +21,27 @@ import { EventEmitter } from 'events';
|
|
|
21
21
|
|
|
22
22
|
import Moveable from 'moveable';
|
|
23
23
|
|
|
24
|
+
import { HIGHLIGHT_EL_ID_PREFIX } from './const';
|
|
24
25
|
import StageCore from './StageCore';
|
|
26
|
+
import TargetCalibrate from './TargetCalibrate';
|
|
25
27
|
import type { StageHighlightConfig } from './types';
|
|
26
28
|
export default class StageHighlight extends EventEmitter {
|
|
27
29
|
public core: StageCore;
|
|
28
30
|
public container: HTMLElement;
|
|
29
31
|
public target?: HTMLElement;
|
|
30
32
|
public moveable?: Moveable;
|
|
33
|
+
public calibrationTarget: TargetCalibrate;
|
|
31
34
|
|
|
32
35
|
constructor(config: StageHighlightConfig) {
|
|
33
36
|
super();
|
|
34
37
|
|
|
35
38
|
this.core = config.core;
|
|
36
39
|
this.container = config.container;
|
|
40
|
+
this.calibrationTarget = new TargetCalibrate({
|
|
41
|
+
parent: this.core.mask.content,
|
|
42
|
+
mask: this.core.mask,
|
|
43
|
+
dr: this.core.dr,
|
|
44
|
+
});
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
/**
|
|
@@ -44,10 +52,12 @@ export default class StageHighlight extends EventEmitter {
|
|
|
44
52
|
if (!el || el === this.target) return;
|
|
45
53
|
this.target = el;
|
|
46
54
|
this.moveable?.destroy();
|
|
55
|
+
|
|
47
56
|
this.moveable = new Moveable(this.container, {
|
|
48
|
-
target: this.
|
|
49
|
-
scrollable: true,
|
|
57
|
+
target: this.calibrationTarget.update(el, HIGHLIGHT_EL_ID_PREFIX),
|
|
50
58
|
origin: false,
|
|
59
|
+
rootContainer: this.core.container,
|
|
60
|
+
zoom: 1,
|
|
51
61
|
});
|
|
52
62
|
}
|
|
53
63
|
|
|
@@ -56,6 +66,7 @@ export default class StageHighlight extends EventEmitter {
|
|
|
56
66
|
*/
|
|
57
67
|
public clearHighlight(): void {
|
|
58
68
|
if (!this.moveable) return;
|
|
69
|
+
this.target = undefined;
|
|
59
70
|
this.moveable.target = null;
|
|
60
71
|
this.moveable.updateTarget();
|
|
61
72
|
}
|
|
@@ -65,5 +76,6 @@ export default class StageHighlight extends EventEmitter {
|
|
|
65
76
|
*/
|
|
66
77
|
public destroy(): void {
|
|
67
78
|
this.moveable?.destroy();
|
|
79
|
+
this.calibrationTarget.destroy();
|
|
68
80
|
}
|
|
69
81
|
}
|
package/src/StageMask.ts
CHANGED
|
@@ -25,7 +25,7 @@ import type { StageMaskConfig } from './types';
|
|
|
25
25
|
import { createDiv, getScrollParent, isFixedParent } from './util';
|
|
26
26
|
|
|
27
27
|
const wrapperClassName = 'editor-mask-wrapper';
|
|
28
|
-
const throttleTime =
|
|
28
|
+
const throttleTime = 100;
|
|
29
29
|
|
|
30
30
|
const hideScrollbar = () => {
|
|
31
31
|
const style = globalThis.document.createElement('style');
|
|
@@ -81,6 +81,8 @@ export default class StageMask extends Rule {
|
|
|
81
81
|
public height = 0;
|
|
82
82
|
public wrapperHeight = 0;
|
|
83
83
|
public wrapperWidth = 0;
|
|
84
|
+
public maxScrollTop = 0;
|
|
85
|
+
public maxScrollLeft = 0;
|
|
84
86
|
|
|
85
87
|
private mode: Mode = Mode.ABSOLUTE;
|
|
86
88
|
private pageResizeObserver: ResizeObserver | null = null;
|
|
@@ -104,6 +106,7 @@ export default class StageMask extends Rule {
|
|
|
104
106
|
this.wrapper.appendChild(this.content);
|
|
105
107
|
this.content.addEventListener('wheel', this.mouseWheelHandler);
|
|
106
108
|
this.content.addEventListener('mousemove', this.highlightHandler);
|
|
109
|
+
this.content.addEventListener('mouseleave', this.mouseLeaveHandler);
|
|
107
110
|
}
|
|
108
111
|
|
|
109
112
|
public setMode(mode: Mode) {
|
|
@@ -136,6 +139,10 @@ export default class StageMask extends Rule {
|
|
|
136
139
|
const { clientHeight, clientWidth } = entry.target;
|
|
137
140
|
this.setHeight(clientHeight);
|
|
138
141
|
this.setWidth(clientWidth);
|
|
142
|
+
|
|
143
|
+
this.fixScrollValue();
|
|
144
|
+
this.scroll();
|
|
145
|
+
this.core.dr.updateMoveable();
|
|
139
146
|
});
|
|
140
147
|
|
|
141
148
|
this.pageResizeObserver.observe(page);
|
|
@@ -145,6 +152,8 @@ export default class StageMask extends Rule {
|
|
|
145
152
|
const { clientHeight, clientWidth } = entry.target;
|
|
146
153
|
this.wrapperHeight = clientHeight;
|
|
147
154
|
this.wrapperWidth = clientWidth;
|
|
155
|
+
this.setMaxScrollLeft();
|
|
156
|
+
this.setMaxScrollTop();
|
|
148
157
|
});
|
|
149
158
|
this.wrapperResizeObserver.observe(this.wrapper);
|
|
150
159
|
}
|
|
@@ -173,12 +182,21 @@ export default class StageMask extends Rule {
|
|
|
173
182
|
this.pageScrollParent = null;
|
|
174
183
|
this.pageResizeObserver?.disconnect();
|
|
175
184
|
this.wrapperResizeObserver?.disconnect();
|
|
185
|
+
|
|
186
|
+
this.content.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
176
187
|
super.destroy();
|
|
177
188
|
}
|
|
178
189
|
|
|
179
190
|
private scroll() {
|
|
180
191
|
let { scrollLeft, scrollTop } = this;
|
|
181
192
|
|
|
193
|
+
if (this.pageScrollParent) {
|
|
194
|
+
this.pageScrollParent.scrollTo({
|
|
195
|
+
top: scrollTop,
|
|
196
|
+
left: scrollLeft,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
182
200
|
if (this.mode === Mode.FIXED) {
|
|
183
201
|
scrollLeft = 0;
|
|
184
202
|
scrollTop = 0;
|
|
@@ -198,6 +216,7 @@ export default class StageMask extends Rule {
|
|
|
198
216
|
*/
|
|
199
217
|
private setHeight(height: number): void {
|
|
200
218
|
this.height = height;
|
|
219
|
+
this.setMaxScrollTop();
|
|
201
220
|
this.content.style.height = `${height}px`;
|
|
202
221
|
}
|
|
203
222
|
|
|
@@ -207,9 +226,35 @@ export default class StageMask extends Rule {
|
|
|
207
226
|
*/
|
|
208
227
|
private setWidth(width: number): void {
|
|
209
228
|
this.width = width;
|
|
229
|
+
this.setMaxScrollLeft();
|
|
210
230
|
this.content.style.width = `${width}px`;
|
|
211
231
|
}
|
|
212
232
|
|
|
233
|
+
/**
|
|
234
|
+
* 计算并设置最大滚动宽度
|
|
235
|
+
*/
|
|
236
|
+
private setMaxScrollLeft(): void {
|
|
237
|
+
this.maxScrollLeft = this.width - this.wrapperWidth;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* 计算并设置最大滚动高度
|
|
242
|
+
*/
|
|
243
|
+
private setMaxScrollTop(): void {
|
|
244
|
+
this.maxScrollTop = this.height - this.wrapperHeight;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* 修复滚动距离
|
|
249
|
+
* 由于滚动容器变化等因素,会导致当前滚动的距离不正确
|
|
250
|
+
*/
|
|
251
|
+
private fixScrollValue(): void {
|
|
252
|
+
if (this.scrollTop < 0) this.scrollTop = 0;
|
|
253
|
+
if (this.scrollLeft < 0) this.scrollLeft = 0;
|
|
254
|
+
if (this.maxScrollTop < this.scrollTop) this.scrollTop = this.maxScrollTop;
|
|
255
|
+
if (this.maxScrollLeft < this.scrollLeft) this.scrollLeft = this.maxScrollLeft;
|
|
256
|
+
}
|
|
257
|
+
|
|
213
258
|
/**
|
|
214
259
|
* 点击事件处理函数
|
|
215
260
|
* @param event 事件对象
|
|
@@ -246,39 +291,26 @@ export default class StageMask extends Rule {
|
|
|
246
291
|
if (!this.page) throw new Error('page 未初始化');
|
|
247
292
|
|
|
248
293
|
const { deltaY, deltaX } = event;
|
|
249
|
-
const { height, wrapperHeight, width, wrapperWidth } = this;
|
|
250
294
|
|
|
251
|
-
|
|
252
|
-
|
|
295
|
+
if (this.page.clientHeight < this.wrapperHeight && deltaY) return;
|
|
296
|
+
if (this.page.clientWidth < this.wrapperWidth && deltaX) return;
|
|
253
297
|
|
|
254
|
-
if (maxScrollTop > 0) {
|
|
255
|
-
|
|
256
|
-
this.scrollTop = this.scrollTop + Math.min(maxScrollTop - this.scrollTop, deltaY);
|
|
257
|
-
} else {
|
|
258
|
-
this.scrollTop = Math.max(this.scrollTop + deltaY, 0);
|
|
259
|
-
}
|
|
298
|
+
if (this.maxScrollTop > 0) {
|
|
299
|
+
this.scrollTop = this.scrollTop + deltaY;
|
|
260
300
|
}
|
|
261
301
|
|
|
262
|
-
if (
|
|
263
|
-
|
|
264
|
-
this.scrollLeft = this.scrollLeft + Math.min(maxScrollLeft - this.scrollLeft, deltaX);
|
|
265
|
-
} else {
|
|
266
|
-
this.scrollLeft = Math.max(this.scrollLeft + deltaX, 0);
|
|
267
|
-
}
|
|
302
|
+
if (this.maxScrollLeft > 0) {
|
|
303
|
+
this.scrollLeft = this.scrollLeft + deltaX;
|
|
268
304
|
}
|
|
269
305
|
|
|
270
|
-
|
|
271
|
-
this.scrollTo(this.scrollLeft, this.scrollTop);
|
|
272
|
-
}
|
|
306
|
+
this.fixScrollValue();
|
|
273
307
|
|
|
274
|
-
if (this.pageScrollParent) {
|
|
275
|
-
this.pageScrollParent.scrollTo({
|
|
276
|
-
top: this.scrollTop,
|
|
277
|
-
left: this.scrollLeft,
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
308
|
this.scroll();
|
|
281
309
|
|
|
282
310
|
this.emit('scroll', event);
|
|
283
311
|
};
|
|
312
|
+
|
|
313
|
+
private mouseLeaveHandler = () => {
|
|
314
|
+
setTimeout(() => this.emit('clearHighlight'), throttleTime);
|
|
315
|
+
};
|
|
284
316
|
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/* eslint-disable no-param-reassign */
|
|
20
|
+
import { EventEmitter } from 'events';
|
|
21
|
+
|
|
22
|
+
import { Mode } from './const';
|
|
23
|
+
import StageDragResize from './StageDragResize';
|
|
24
|
+
import StageMask from './StageMask';
|
|
25
|
+
import type { Offset, TargetCalibrateConfig } from './types';
|
|
26
|
+
import { getMode } from './util';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 将选中的节点修正定位后,添加一个操作节点到蒙层上
|
|
30
|
+
*/
|
|
31
|
+
export default class TargetCalibrate extends EventEmitter {
|
|
32
|
+
public parent: HTMLElement;
|
|
33
|
+
public mask: StageMask;
|
|
34
|
+
public dr: StageDragResize;
|
|
35
|
+
public operationEl: HTMLElement;
|
|
36
|
+
|
|
37
|
+
constructor(config: TargetCalibrateConfig) {
|
|
38
|
+
super();
|
|
39
|
+
|
|
40
|
+
this.parent = config.parent;
|
|
41
|
+
this.mask = config.mask;
|
|
42
|
+
this.dr = config.dr;
|
|
43
|
+
|
|
44
|
+
this.operationEl = globalThis.document.createElement('div');
|
|
45
|
+
this.parent.append(this.operationEl);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public update(el: HTMLElement, prefix: String): HTMLElement {
|
|
49
|
+
const { width, height } = el.getBoundingClientRect();
|
|
50
|
+
const { left, top } = this.getOffset(el);
|
|
51
|
+
this.operationEl.style.cssText = `
|
|
52
|
+
position: absolute;
|
|
53
|
+
left: ${left}px;
|
|
54
|
+
top: ${top}px;
|
|
55
|
+
width: ${width}px;
|
|
56
|
+
height: ${height}px;
|
|
57
|
+
`;
|
|
58
|
+
|
|
59
|
+
this.operationEl.id = `${prefix}${el.id}`;
|
|
60
|
+
return this.operationEl;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public destroy(): void {
|
|
64
|
+
this.operationEl?.remove();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private getOffset(el: HTMLElement): Offset {
|
|
68
|
+
const { transform } = getComputedStyle(el);
|
|
69
|
+
const { offsetParent } = el;
|
|
70
|
+
|
|
71
|
+
let left = el.offsetLeft;
|
|
72
|
+
let top = el.offsetTop;
|
|
73
|
+
|
|
74
|
+
if (transform.indexOf('matrix') > -1) {
|
|
75
|
+
let a = 1;
|
|
76
|
+
let b = 1;
|
|
77
|
+
let c = 1;
|
|
78
|
+
let d = 1;
|
|
79
|
+
let e = 0;
|
|
80
|
+
let f = 0;
|
|
81
|
+
transform.replace(
|
|
82
|
+
/matrix\((.+), (.+), (.+), (.+), (.+), (.+)\)/,
|
|
83
|
+
($0: string, $1: string, $2: string, $3: string, $4: string, $5: string, $6: string): string => {
|
|
84
|
+
a = +$1;
|
|
85
|
+
b = +$2;
|
|
86
|
+
c = +$3;
|
|
87
|
+
d = +$4;
|
|
88
|
+
e = +$5;
|
|
89
|
+
f = +$6;
|
|
90
|
+
return transform;
|
|
91
|
+
},
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
left = a * left + c * top + e;
|
|
95
|
+
top = b * left + d * top + f;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (offsetParent) {
|
|
99
|
+
const parentOffset = this.getOffset(offsetParent as HTMLElement);
|
|
100
|
+
return {
|
|
101
|
+
left: left + parentOffset.left,
|
|
102
|
+
top: top + parentOffset.top,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// 选中固定定位元素后editor-mask高度被置为视窗大小
|
|
107
|
+
if (this.dr.mode === Mode.FIXED) {
|
|
108
|
+
// 弹窗的情况
|
|
109
|
+
if (getMode(el) === Mode.FIXED) {
|
|
110
|
+
return {
|
|
111
|
+
left,
|
|
112
|
+
top,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
left: left - this.mask.scrollLeft,
|
|
118
|
+
top: top - this.mask.scrollTop,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 无父元素的固定定位需按滚动值计算
|
|
123
|
+
if (getMode(el) === Mode.FIXED) {
|
|
124
|
+
return {
|
|
125
|
+
left: left + this.mask.scrollLeft,
|
|
126
|
+
top: top + this.mask.scrollTop,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
left,
|
|
132
|
+
top,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
package/src/const.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -22,6 +22,8 @@ import { Id, MApp, MNode } from '@tmagic/schema';
|
|
|
22
22
|
|
|
23
23
|
import { GuidesType } from './const';
|
|
24
24
|
import StageCore from './StageCore';
|
|
25
|
+
import StageDragResize from './StageDragResize';
|
|
26
|
+
import StageMask from './StageMask';
|
|
25
27
|
|
|
26
28
|
export type CanSelect = (el: HTMLElement, event: MouseEvent, stop: () => boolean) => boolean | Promise<boolean>;
|
|
27
29
|
|
|
@@ -54,7 +56,6 @@ export type Rect = {
|
|
|
54
56
|
width: number;
|
|
55
57
|
height: number;
|
|
56
58
|
} & Offset;
|
|
57
|
-
|
|
58
59
|
export interface Offset {
|
|
59
60
|
left: number;
|
|
60
61
|
top: number;
|
|
@@ -119,3 +120,9 @@ export interface StageHighlightConfig {
|
|
|
119
120
|
core: StageCore;
|
|
120
121
|
container: HTMLElement;
|
|
121
122
|
}
|
|
123
|
+
|
|
124
|
+
export interface TargetCalibrateConfig {
|
|
125
|
+
parent: HTMLElement;
|
|
126
|
+
mask: StageMask;
|
|
127
|
+
dr: StageDragResize;
|
|
128
|
+
}
|
package/tsconfig.json
DELETED
package/vite.config.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
|
|
5
|
-
*
|
|
6
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
* you may not use this file except in compliance with the License.
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
*
|
|
10
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
*
|
|
12
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
* See the License for the specific language governing permissions and
|
|
16
|
-
* limitations under the License.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { defineConfig } from 'vite';
|
|
20
|
-
|
|
21
|
-
import { getBaseConfig } from '../vite-config';
|
|
22
|
-
|
|
23
|
-
import pkg from './package.json';
|
|
24
|
-
|
|
25
|
-
const deps = Object.keys(pkg.dependencies);
|
|
26
|
-
|
|
27
|
-
export default defineConfig(getBaseConfig(deps, 'TMagicStage'));
|