@netless/appliance-plugin 1.1.2 → 1.1.3-4.beta.0
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/READMA.zh-CN.md +993 -0
- package/README.md +963 -176
- package/cdn/cdn.js +1 -1
- package/cdn/fullWorker-Dwf7nY.js +486 -0
- package/cdn/subWorker-DXBnNm.js +486 -0
- package/dist/ObserverMap-BudneEfB.mjs +58 -0
- package/dist/ObserverMap-DTz9zucn.js +1 -0
- package/dist/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +27 -18
- package/dist/cdn.d.ts +2 -2
- package/dist/collector/base.d.ts +3 -1
- package/dist/collector/collector.d.ts +57 -14
- package/dist/collector/index.d.ts +4 -4
- package/dist/collector/types.d.ts +49 -10
- package/dist/component/autoDraw/index.d.ts +0 -0
- package/dist/component/miniMap/index.d.ts +1 -0
- package/dist/component/miniMap/manager.d.ts +37 -0
- package/dist/component/miniMap/view.d.ts +14 -0
- package/dist/component/svg/base.d.ts +30 -0
- package/dist/component/svg/manager.d.ts +44 -0
- package/dist/component/svg/markmap.d.ts +41 -0
- package/dist/component/svg/mermaid-check.d.ts +18 -0
- package/dist/component/svg/mermaid-loader.d.ts +29 -0
- package/dist/component/svg/mermaid.d.ts +109 -0
- package/dist/component/svg/snapshot.d.ts +31 -0
- package/dist/component/svg/svgElemt.d.ts +43 -0
- package/dist/component/svg/svgToImageLoader.d.ts +25 -0
- package/dist/component/svg/types.d.ts +10 -0
- package/dist/component/svg/utils.d.ts +9 -0
- package/dist/component/svg/vNodeManager.d.ts +28 -0
- package/dist/component/textEditor/index.d.ts +2 -2
- package/dist/component/textEditor/manager.d.ts +22 -3
- package/dist/component/textEditor/types.d.ts +5 -4
- package/dist/component/textEditor/utils.d.ts +1 -0
- package/dist/component/textEditor/view.d.ts +28 -48
- package/dist/core/autoShape/index.d.ts +12 -0
- package/dist/core/autoShape/mapper.d.ts +3 -0
- package/dist/core/autoShape/recognizer.d.ts +8 -0
- package/dist/core/autoShape/registry.d.ts +2 -0
- package/dist/core/autoShape/templates.d.ts +2 -0
- package/dist/core/autoShape/types.d.ts +78 -0
- package/dist/core/backGroundThread/index.d.ts +35 -0
- package/dist/core/backGroundThread/types.d.ts +12 -0
- package/dist/core/enum.d.ts +74 -13
- package/dist/core/index.d.ts +3 -3
- package/dist/core/mainEngine.d.ts +101 -27
- package/dist/core/mainThread/base.d.ts +10 -6
- package/dist/core/mainThread/index.d.ts +2 -2
- package/dist/core/mainThread/snapshotThread.d.ts +8 -4
- package/dist/core/mainThread/subLocalThread.d.ts +21 -16
- package/dist/core/mainThread/subServiceThread.d.ts +2 -2
- package/dist/core/mainThread/subTopThread.d.ts +2 -2
- package/dist/core/msgEvent/base.d.ts +1 -0
- package/dist/core/msgEvent/baseForBackgroundThread.d.ts +9 -0
- package/dist/core/msgEvent/baseForWorker.d.ts +2 -1
- package/dist/core/msgEvent/copyNode/forBackgroundThread.d.ts +8 -0
- package/dist/core/msgEvent/copyNode/forMain.d.ts +2 -2
- package/dist/core/msgEvent/forBackgroundThread.d.ts +12 -0
- package/dist/core/msgEvent/forMainThread.d.ts +4 -4
- package/dist/core/msgEvent/forWorker.d.ts +4 -4
- package/dist/core/msgEvent/index.d.ts +4 -4
- package/dist/core/msgEvent/rotateNode/forMain.d.ts +2 -2
- package/dist/core/msgEvent/scaleNode/forMain.d.ts +2 -2
- package/dist/core/msgEvent/setColor/forMain.d.ts +2 -2
- package/dist/core/msgEvent/setPoint/forMain.d.ts +2 -2
- package/dist/core/msgEvent/setZIndex/forMain.d.ts +7 -0
- package/dist/core/msgEvent/translateNode/forMain.d.ts +2 -2
- package/dist/core/plugin.d.ts +49 -0
- package/dist/core/renderCotrol.d.ts +12 -11
- package/dist/core/tools/arrow.d.ts +10 -22
- package/dist/core/tools/base.d.ts +52 -9
- package/dist/core/tools/ellipse.d.ts +10 -22
- package/dist/core/tools/image.d.ts +9 -7
- package/dist/core/tools/index.d.ts +14 -13
- package/dist/core/tools/laserPen.d.ts +1 -1
- package/dist/core/tools/pencil.d.ts +18 -8
- package/dist/core/tools/pencilEraser.d.ts +36 -41
- package/dist/core/tools/pencilEraserBitMap.d.ts +20 -27
- package/dist/core/tools/polygon.d.ts +10 -22
- package/dist/core/tools/rectangle.d.ts +10 -22
- package/dist/core/tools/selector.d.ts +42 -24
- package/dist/core/tools/shadowSvg.d.ts +36 -0
- package/dist/core/tools/speechBalloon.d.ts +10 -22
- package/dist/core/tools/star.d.ts +10 -22
- package/dist/core/tools/straight.d.ts +10 -22
- package/dist/core/tools/text.d.ts +2 -1
- package/dist/core/tools/utils.d.ts +11 -12
- package/dist/core/types.d.ts +98 -18
- package/dist/core/utils/ObserverMap.d.ts +19 -0
- package/dist/core/utils/clipper.d.ts +8 -0
- package/dist/core/utils/getSvgPathFromPoints.d.ts +1 -1
- package/dist/core/utils/index.d.ts +6 -5
- package/dist/core/utils/indexDB.d.ts +17 -0
- package/dist/core/utils/math.d.ts +1 -0
- package/dist/core/utils/polygonUtils.d.ts +8 -0
- package/dist/core/utils/primitives/Box2d.d.ts +4 -4
- package/dist/core/utils/proxy.d.ts +3 -4
- package/dist/core/utils/spriteNode.d.ts +8 -1
- package/dist/core/vNodeManager.d.ts +13 -9
- package/dist/core/worker/base.d.ts +43 -21
- package/dist/core/worker/fullWorkerLocal.d.ts +29 -25
- package/dist/core/worker/fullWorkerService.d.ts +9 -9
- package/dist/core/worker/simpleWorker.d.ts +28 -0
- package/dist/core/worker/snapshotWork.d.ts +27 -0
- package/dist/core/worker/subWorkerLocal.d.ts +2 -3
- package/dist/core/worker/subWorkerTopLayer.d.ts +2 -2
- package/dist/core/worker/workerManager.d.ts +52 -36
- package/dist/cursors/index.d.ts +9 -11
- package/dist/displayer/const.d.ts +1 -0
- package/dist/displayer/cursor/index.d.ts +1 -0
- package/dist/displayer/floatBar/dragBox/index.d.ts +9 -3
- package/dist/displayer/floatBar/index.d.ts +2 -1
- package/dist/displayer/floatBtns/index.d.ts +2 -0
- package/dist/displayer/utils.d.ts +1 -0
- package/dist/extend.d.ts +1 -0
- package/dist/fullWorker.js +242 -195
- package/dist/index-BCI9ZJly.mjs +9884 -0
- package/dist/index-CRWsZj1z.mjs +16601 -0
- package/dist/index-D2XqHUO-.js +1 -0
- package/dist/index-Dfujq78k.js +3 -0
- package/dist/index-TQPJgovl.mjs +1263 -0
- package/dist/index-ZvQrVWzu.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/plugin/applianceMultiPlugin.d.ts +2 -3
- package/dist/plugin/applianceSinglePlugin.d.ts +3 -4
- package/dist/plugin/baseApplianceManager.d.ts +58 -13
- package/dist/plugin/baseViewContainerManager.d.ts +72 -73
- package/dist/plugin/const.d.ts +2 -22
- package/dist/plugin/displayerView.d.ts +18 -4
- package/dist/plugin/index.d.ts +1 -0
- package/dist/plugin/multi/applianceMultiManager.d.ts +0 -1
- package/dist/plugin/multi/containerManager.d.ts +8 -1
- package/dist/plugin/multi/displayer/appViewDisplayerManager.d.ts +3 -2
- package/dist/plugin/multi/displayer/mainViewDisplayerManager.d.ts +4 -2
- package/dist/plugin/single/displayer/mainViewDisplayerManager.d.ts +4 -3
- package/dist/plugin/types.d.ts +393 -32
- package/dist/style.css +1 -1
- package/dist/subWorker.js +242 -195
- package/dist/svgToImageLoader-DPRAAhwW.js +1 -0
- package/dist/svgToImageLoader-mXH53h-l.mjs +18 -0
- package/dist/undo/index.d.ts +25 -31
- package/dist/undo/proxyArray.d.ts +37 -0
- package/package.json +31 -9
- package/cdn/fullWorker-DMz46H.js +0 -439
- package/cdn/subWorker-B_zAQR.js +0 -439
- package/dist/collector/eventCollector.d.ts +0 -31
- package/dist/collector/magixEventCollector.d.ts +0 -31
- package/dist/core/mainThread/workerMainThread.d.ts +0 -99
- package/dist/core/msgEvent/deleteNode/forMainThread.d.ts +0 -6
- package/dist/core/msgEvent/deleteNode/forWorker.d.ts +0 -6
- package/dist/index-B-Nowr4E.mjs +0 -14865
- package/dist/index-BDVvqw7g.js +0 -1
- package/dist/index-DwakKeHT.mjs +0 -2497
- package/dist/index-cRE5FY5s.js +0 -1
package/dist/plugin/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ISerializableEventData, ISerializableStorageViewData } from "../collector/types";
|
|
1
|
+
import type { BaseCollectorReducerAction, ISerializableEventData, ISerializableStorageViewData, Uid } from "../collector/types";
|
|
2
2
|
import type { Cursor, View, CameraState, DisplayerCallbacks, HotKeys, Player, Room, Point, RoomMember, RoomState, Size, Callbacks, Camera, Color, CursorAdapter, Displayer, ImageInformation, Rectangle, RenderEngine, MemberState as _MemberState } from "white-web-sdk";
|
|
3
3
|
import type EventEmitter2 from "eventemitter2";
|
|
4
4
|
import type { ApplianceSingleManager } from "./single/applianceSingleManager";
|
|
@@ -7,8 +7,13 @@ import type { BaseApplianceManager } from "./baseApplianceManager";
|
|
|
7
7
|
import type { AppViewDisplayerManager, MainViewDisplayerManager } from "./baseViewContainerManager";
|
|
8
8
|
import type { ApplianceSinglePlugin } from "./applianceSinglePlugin";
|
|
9
9
|
import type { ApplianceMultiPlugin } from "./applianceMultiPlugin";
|
|
10
|
-
import type { ECanvasContextType } from "../core/enum";
|
|
11
|
-
|
|
10
|
+
import type { ECanvasContextType, EToolsKey, EventWorkState } from "../core/enum";
|
|
11
|
+
import type { AuthRenderScenesData } from "../core/renderCotrol";
|
|
12
|
+
import type { Plugin } from "../core/plugin";
|
|
13
|
+
import type { TextEditorInfo } from "../component/textEditor/types";
|
|
14
|
+
import type { IMarkmapOptions } from "../component/svg/markmap";
|
|
15
|
+
import type { AutoShapeKind, AutoShapeMetrics } from "../core/autoShape/types";
|
|
16
|
+
export type { Room, ImageInformation, Point, Size, Rectangle, RoomMember, RoomState, Player, HotKeys, Camera, Displayer, DisplayerCallbacks, CameraState, View, Cursor, CursorAdapter, RenderEngine, _MemberState, };
|
|
12
17
|
export declare enum ApplianceNames {
|
|
13
18
|
/**
|
|
14
19
|
* 选择工具
|
|
@@ -85,6 +90,8 @@ export type ExtendMemberState = {
|
|
|
85
90
|
duration?: number;
|
|
86
91
|
/** 是否使用新铅笔教具 */
|
|
87
92
|
useNewPencil?: boolean;
|
|
93
|
+
/** 是否开启铅笔自动识别规则图形 */
|
|
94
|
+
autoShape?: boolean;
|
|
88
95
|
/** 填充样式 */
|
|
89
96
|
fillColor?: Color;
|
|
90
97
|
/** 填充透明度 */
|
|
@@ -112,24 +119,28 @@ export type ExtendMemberState = {
|
|
|
112
119
|
/** 位置 */
|
|
113
120
|
placement?: SpeechBalloonPlacement;
|
|
114
121
|
};
|
|
115
|
-
export type MemberState = Omit<_MemberState,
|
|
122
|
+
export type MemberState = Omit<_MemberState, "currentApplianceName" | "shapeType"> & ExtendMemberState;
|
|
116
123
|
export type AppliancePluginLike = ApplianceMultiPlugin | ApplianceSinglePlugin;
|
|
117
124
|
export type ApplianceManagerLike = ApplianceMultiManager | ApplianceSingleManager | BaseApplianceManager;
|
|
118
125
|
export type ApplianceViewManagerLike = AppViewDisplayerManager | MainViewDisplayerManager;
|
|
119
126
|
export interface BaseSubWorkModuleProps {
|
|
120
127
|
control: ApplianceManagerLike;
|
|
121
128
|
internalMsgEmitter: EventEmitter2;
|
|
129
|
+
publicMsgEmitter: EventEmitter2;
|
|
122
130
|
}
|
|
123
131
|
export type ApplianceAdaptor = {
|
|
124
132
|
options: AppliancePluginOptions;
|
|
125
133
|
logger?: Logger;
|
|
126
134
|
cursorAdapter?: CursorAdapter;
|
|
127
135
|
};
|
|
128
|
-
export type canBindMethodType = keyof Omit<AppliancePluginInstance,
|
|
136
|
+
export type canBindMethodType = keyof Omit<AppliancePluginInstance, "displayer" | "windowManager" | "disableDeviceInputs" | "disableEraseImage" | "disableCameraTransform" | "injectMethodToObject" | "callbacksOn" | "callbacksOnce" | "callbacksOff" | "_injectTargetObject" | "createMiniMap" | "destroyMiniMap" | "filterRenderByUid" | "cancelFilterRender" | "addListener" | "removeListener" | "usePlugin" | "stopDraw" | "setViewLocalScenePathChange" | "getElements" | "hasElements" | "blurText" | "insertMarkmap" | "updateMarkmap" | "insertBackgroundImage">;
|
|
129
137
|
export interface AppliancePluginInstance {
|
|
130
138
|
readonly displayer: Displayer;
|
|
131
139
|
readonly currentManager?: ApplianceManagerLike;
|
|
132
140
|
readonly windowManager?: WindowManager;
|
|
141
|
+
disableDeviceInputs: boolean;
|
|
142
|
+
disableEraseImage: boolean;
|
|
143
|
+
disableCameraTransform: boolean;
|
|
133
144
|
/**
|
|
134
145
|
* 获取某个场景里包含所有元素的矩形
|
|
135
146
|
*/
|
|
@@ -174,6 +185,20 @@ export interface AppliancePluginInstance {
|
|
|
174
185
|
* @param scenePath 需要导出图片信息的场景路径,必须是 ``ScenePathType`` 为 ``page`` 的路径。
|
|
175
186
|
*/
|
|
176
187
|
getImagesInformation(scenePath: string): ImageInformation[];
|
|
188
|
+
/**
|
|
189
|
+
* 在指定位置插入文字
|
|
190
|
+
* @param x 第一个字的的左侧边中点,世界坐标系中的 x 坐标
|
|
191
|
+
* @param y 第一个字的的左侧边中点,世界坐标系中的 y 坐标
|
|
192
|
+
* @param textContent 初始化文字的内容,不传则为空
|
|
193
|
+
* @returns 该文字的标识符
|
|
194
|
+
*/
|
|
195
|
+
insertText(x: number, y: number, textContent?: string): string | undefined;
|
|
196
|
+
/**
|
|
197
|
+
* 编辑指定文字的内容
|
|
198
|
+
* @param identifier 文字的标识符。为 ``insertText()`` 的返回值。
|
|
199
|
+
* @param textContent 文字要改成的内容
|
|
200
|
+
*/
|
|
201
|
+
updateText(identifier: string, textContent: string): void;
|
|
177
202
|
/** 撤销 */
|
|
178
203
|
undo(): number;
|
|
179
204
|
/** 恢复 */
|
|
@@ -183,29 +208,113 @@ export interface AppliancePluginInstance {
|
|
|
183
208
|
/** 把指定的方法注入到指定对象上 */
|
|
184
209
|
/** 销毁 */
|
|
185
210
|
destroy(): void;
|
|
211
|
+
/** 设置当前用户的读写权限 */
|
|
212
|
+
setWritable(writable: boolean): Promise<void>;
|
|
186
213
|
/** setMemberState */
|
|
187
214
|
setMemberState(modifyState: Partial<MemberState>): void;
|
|
188
|
-
/** 设置性能优先项
|
|
189
|
-
* @param priority 优先项, 可以是 ``ui`` 或 ``cpu``
|
|
190
|
-
* ui: 优先绘制UI,适用于需要绘制高跟手度
|
|
191
|
-
* cpu: 优先降低主进程CPU消耗,适用于底端设备
|
|
192
|
-
*/
|
|
193
|
-
setPerformancePriority(priority: PriorityType): void;
|
|
194
215
|
/** 获取undo */
|
|
195
216
|
canUndoSteps(): number;
|
|
196
217
|
/** 获取redo */
|
|
197
218
|
canRedoSteps(): number;
|
|
198
219
|
/** 事件监听器 */
|
|
199
220
|
callbacks: Callbacks<any>;
|
|
221
|
+
/** 创建小地图
|
|
222
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的appID
|
|
223
|
+
* @param div 小地图DOM容器
|
|
224
|
+
*/
|
|
225
|
+
createMiniMap(viewId: string, div: HTMLElement): Promise<void>;
|
|
226
|
+
/** 销毁小地图 */
|
|
227
|
+
destroyMiniMap(viewId: string): Promise<void>;
|
|
228
|
+
/** 过滤笔记
|
|
229
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的appID
|
|
230
|
+
* @param filter 过滤条件
|
|
231
|
+
* render: 定笔记是否能要渲染, [uid1, uid2, ...] 或 true. true, 即都会渲染, [uid1, uid2, ...] 为指定渲染的用户uid集合
|
|
232
|
+
* hide: 笔记是否隐藏, [uid1, uid2, ...] 或 true. true, 即都要隐藏, [uid1, uid2, ...] 为指定隐藏的用户uid集合
|
|
233
|
+
* clear: 笔记是否可被清除, [uid1, uid2, ...] 或 true. true, 即都可以被清除, [uid1, uid2, ...] 为指定可被清除的用户uid集合
|
|
234
|
+
* @param isSync 是否同步到其他用户, 默认为true, 即会同步到其他用户
|
|
235
|
+
*/
|
|
236
|
+
filterRenderByUid(viewId: string, filter: {
|
|
237
|
+
render?: _ArrayTrue;
|
|
238
|
+
hide?: _ArrayTrue;
|
|
239
|
+
clear?: _ArrayTrue;
|
|
240
|
+
}, isSync?: boolean): void;
|
|
241
|
+
/** 取消过滤笔记
|
|
242
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的appID
|
|
243
|
+
* @param isSync 是否同步到其他用户, 默认为true, 即会同步到其他用户,保持和filterRenderByUid设置的一致
|
|
244
|
+
*/
|
|
245
|
+
cancelFilterRender(viewId: string, isSync?: boolean): void;
|
|
246
|
+
/**
|
|
247
|
+
* 添加事件监听器
|
|
248
|
+
*/
|
|
249
|
+
addListener(event: PublicEvent, callback: PublicCallback<PublicEvent>): void;
|
|
250
|
+
/**
|
|
251
|
+
* 移除事件监听器
|
|
252
|
+
*/
|
|
253
|
+
removeListener(event: PublicEvent, callback: PublicCallback<PublicEvent>): void;
|
|
254
|
+
/**
|
|
255
|
+
* 使用插件
|
|
256
|
+
* @param plugin 插件
|
|
257
|
+
*/
|
|
258
|
+
usePlugin(plugin: Plugin): void;
|
|
259
|
+
/**
|
|
260
|
+
* 请求空闲回调
|
|
261
|
+
* @param callback 回调函数
|
|
262
|
+
* @param timeout 超时时间
|
|
263
|
+
*/
|
|
264
|
+
requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number;
|
|
265
|
+
/**
|
|
266
|
+
* 取消空闲回调
|
|
267
|
+
* @param id 空闲回调id
|
|
268
|
+
*/
|
|
269
|
+
cancelIdleCallback(id: number): void;
|
|
270
|
+
/**
|
|
271
|
+
* 把方法注入到对象上
|
|
272
|
+
* @param object 对象
|
|
273
|
+
* @param methodName 方法名
|
|
274
|
+
*/
|
|
275
|
+
injectMethodToObject(object: any, methodName: string): void;
|
|
276
|
+
/** 失去文本焦点 */
|
|
277
|
+
blurText(): void;
|
|
278
|
+
/**
|
|
279
|
+
* 指定场景下是否存在元素
|
|
280
|
+
* @param scenePath 场景路径, 默认取当前聚焦的场景
|
|
281
|
+
* @param filter 过滤条件
|
|
282
|
+
* @returns 是否存在元素
|
|
283
|
+
*/
|
|
284
|
+
hasElements(scenePath?: string, filter?: (toolsType: EToolsKey) => boolean): boolean;
|
|
285
|
+
/**
|
|
286
|
+
* 获取场景下的所有元素
|
|
287
|
+
* @param scenePath 场景路径, 默认取当前聚焦的场景
|
|
288
|
+
* @param filter 过滤条件
|
|
289
|
+
* @returns 所有元素
|
|
290
|
+
*/
|
|
291
|
+
getElements(scenePath?: string, filter?: (toolsType: EToolsKey) => boolean): BaseCollectorReducerAction[];
|
|
292
|
+
/** 停止Draw事件 */
|
|
293
|
+
stopDraw(viewId: string): Promise<void>;
|
|
294
|
+
/** 设置白板本地场景路径变化 */
|
|
295
|
+
setViewLocalScenePathChange(viewId: string, scenePath: string): Promise<void>;
|
|
296
|
+
/** 插入markmap */
|
|
297
|
+
insertMarkmap(viewId: string, markdownInfo: ISVGMarkmapInformation): Promise<MarkmapId | undefined>;
|
|
298
|
+
/** 更新markmap */
|
|
299
|
+
updateMarkmap(viewId: string, markmapId: MarkmapId, markdownInfo: ISVGMarkmapInformation): Promise<void>;
|
|
300
|
+
/** 插入背景图片 */
|
|
301
|
+
insertBackgroundImage(viewId: string, imageInfo: ISVGUrlInformation): void;
|
|
200
302
|
}
|
|
201
303
|
export type Logger = {
|
|
202
304
|
readonly info: (...messages: any[]) => void;
|
|
203
305
|
readonly warn: (...messages: any[]) => void;
|
|
204
306
|
readonly error: (...messages: any[]) => void;
|
|
205
307
|
};
|
|
206
|
-
export type
|
|
207
|
-
/**
|
|
208
|
-
|
|
308
|
+
export type ExtrasOptions = {
|
|
309
|
+
/** 是否使用 worker, 默认值为 ``auto``
|
|
310
|
+
* auto: 自动选择(如果浏览器支持 offscreenCanvas 则使用 webWorker, 否则使用主线程)
|
|
311
|
+
* mainThread: 使用主线程
|
|
312
|
+
*/
|
|
313
|
+
useWorker?: UseWorkerType;
|
|
314
|
+
/** 是否使用简单模式, 默认值为 ``false`` */
|
|
315
|
+
useSimple?: boolean;
|
|
316
|
+
/** 是否使用背景Svg功能, 默认值为 ``false`` */
|
|
317
|
+
useBackgroundThread?: boolean;
|
|
209
318
|
/** 同步数据配置项 */
|
|
210
319
|
syncOpt?: SyncOpt;
|
|
211
320
|
/** 画布配置项 */
|
|
@@ -218,6 +327,88 @@ export type AppliancePluginOptions = {
|
|
|
218
327
|
bezier?: BezierOpt;
|
|
219
328
|
/** 局部橡皮擦配置项 */
|
|
220
329
|
pencilEraser?: PencilEraserOpt;
|
|
330
|
+
/** 线条粗细范围配置项 */
|
|
331
|
+
strokeWidth?: StrokeWidthOpt;
|
|
332
|
+
/** 文字编辑器配置项 */
|
|
333
|
+
textEditor?: TextEditorOpt;
|
|
334
|
+
/** 长虚线配置项 */
|
|
335
|
+
longDottedStroke?: LongDottedOpt;
|
|
336
|
+
/** 虚线配置项 */
|
|
337
|
+
dottedStroke?: DottedOpt;
|
|
338
|
+
/** 实线配置项 */
|
|
339
|
+
normalStroke?: NormalOpt;
|
|
340
|
+
/** 撤销重做配置项 */
|
|
341
|
+
undoRedo?: UndoRedoOpt;
|
|
342
|
+
/** markmap 配置项 */
|
|
343
|
+
markmap?: MarkmapOpt;
|
|
344
|
+
};
|
|
345
|
+
export type UndoRedoOpt = {
|
|
346
|
+
/** 是否启用全局撤销重做, 默认值为 false */
|
|
347
|
+
enableGlobal: boolean;
|
|
348
|
+
/** 撤销重做最大堆栈长度, 默认值为 20 */
|
|
349
|
+
maxStackLength?: number;
|
|
350
|
+
};
|
|
351
|
+
export type MarkmapOpt = {
|
|
352
|
+
/** 是否启用 markmap, 默认值为 true */
|
|
353
|
+
enable: boolean;
|
|
354
|
+
/** markmap 配置项 */
|
|
355
|
+
options: Partial<IMarkmapOptions>;
|
|
356
|
+
/** 获取markmapId超时时间,单位:毫秒,默认值为 10000 */
|
|
357
|
+
timeout?: number;
|
|
358
|
+
};
|
|
359
|
+
export type SnapshotOpt = {
|
|
360
|
+
/** 获取单张图片超时时间,单位:毫秒,默认值为 10000 */
|
|
361
|
+
timeout: number;
|
|
362
|
+
};
|
|
363
|
+
export type NormalOpt = {
|
|
364
|
+
/** 虚线端点样式, square: 平头, round: 圆头, 默认值为 round */
|
|
365
|
+
lineCap: "square" | "round";
|
|
366
|
+
};
|
|
367
|
+
export type DottedOpt = {
|
|
368
|
+
/** 虚线端点样式, square: 平头, round: 圆头, 默认值为 round */
|
|
369
|
+
lineCap: "square" | "round";
|
|
370
|
+
/** 虚线,单线段长度, 默认值为 1, 即单线段长度为 1 */
|
|
371
|
+
segment: number;
|
|
372
|
+
/** 虚线,单线段间隔, 默认值为 2, 即单线段间隔为 2 * thickness */
|
|
373
|
+
gap: number;
|
|
374
|
+
};
|
|
375
|
+
export type LongDottedOpt = {
|
|
376
|
+
/** 长虚线端点样式, square: 平头, round: 圆头, 默认值为 round */
|
|
377
|
+
lineCap: "square" | "round";
|
|
378
|
+
/** 长虚线,单线段长度, 默认值为 1, 即单线段长度为 1 * thickness */
|
|
379
|
+
segment: number;
|
|
380
|
+
/** 长虚线,单线段间隔, 默认值为 2, 即单线段间隔为 2 * thickness */
|
|
381
|
+
gap: number;
|
|
382
|
+
};
|
|
383
|
+
export type AppliancePluginOptions = {
|
|
384
|
+
/** cdn配置项 */
|
|
385
|
+
cdn: CdnOpt;
|
|
386
|
+
/** 额外配置项 */
|
|
387
|
+
extras?: ExtrasOptions;
|
|
388
|
+
};
|
|
389
|
+
export type RequiredExtrasOptions = {
|
|
390
|
+
useWorker: Required<UseWorkerType>;
|
|
391
|
+
useSimple: Required<boolean>;
|
|
392
|
+
useBackgroundThread: Required<boolean>;
|
|
393
|
+
syncOpt: Required<SyncOpt>;
|
|
394
|
+
canvasOpt: Required<CanvasOpt>;
|
|
395
|
+
cursor: Required<CursorOpt>;
|
|
396
|
+
bufferSize: Required<BufferSizeOpt>;
|
|
397
|
+
bezier: Required<BezierOpt>;
|
|
398
|
+
pencilEraser: Required<PencilEraserOpt>;
|
|
399
|
+
strokeWidth: Required<StrokeWidthOpt>;
|
|
400
|
+
textEditor: Required<TextEditorOpt>;
|
|
401
|
+
longDottedStroke: Required<LongDottedOpt>;
|
|
402
|
+
dottedStroke: Required<DottedOpt>;
|
|
403
|
+
normalStroke: Required<NormalOpt>;
|
|
404
|
+
undoRedo: Required<UndoRedoOpt>;
|
|
405
|
+
markmap: Required<MarkmapOpt>;
|
|
406
|
+
};
|
|
407
|
+
export type RequiredAppliancePluginOptions = {
|
|
408
|
+
cdn: CdnOpt;
|
|
409
|
+
extras: Required<Omit<ExtrasOptions, "canvasOpt">> & {
|
|
410
|
+
canvasOpt?: CanvasOpt;
|
|
411
|
+
};
|
|
221
412
|
};
|
|
222
413
|
export interface AppliancePluginAttributes {
|
|
223
414
|
[key: string]: ISerializableStorageViewData | ISerializableEventData;
|
|
@@ -261,21 +452,28 @@ export type SyncOpt = {
|
|
|
261
452
|
* 默认值:200 (每秒同步5次)
|
|
262
453
|
*
|
|
263
454
|
*/
|
|
264
|
-
interval
|
|
455
|
+
interval: number;
|
|
456
|
+
/** 是否开启平滑同步, 默认开启 */
|
|
457
|
+
smoothSync?: boolean;
|
|
265
458
|
};
|
|
266
459
|
export type CanvasOpt = {
|
|
267
460
|
/** 指定画布上下文类型 */
|
|
268
461
|
contextType: ECanvasContextType;
|
|
269
462
|
};
|
|
463
|
+
export type UseWorkerType = "auto" | "mainThread";
|
|
270
464
|
export type CdnOpt = {
|
|
271
465
|
/** full worker url 地址, 绘制完整数据的线程 */
|
|
272
|
-
fullWorkerUrl
|
|
466
|
+
fullWorkerUrl?: string;
|
|
273
467
|
/** sub worker url 地址, 绘制一帧数据的线程 */
|
|
274
|
-
subWorkerUrl
|
|
468
|
+
subWorkerUrl?: string;
|
|
275
469
|
};
|
|
276
470
|
export type CursorOpt = {
|
|
471
|
+
/** 是否启用指针 */
|
|
472
|
+
enable: boolean;
|
|
277
473
|
/** 指针消失过期时间 */
|
|
278
|
-
expirationTime
|
|
474
|
+
expirationTime?: number;
|
|
475
|
+
/** 指针移动延迟时间 */
|
|
476
|
+
moveDelayTime?: number;
|
|
279
477
|
};
|
|
280
478
|
export type BufferSizeOpt = {
|
|
281
479
|
/** 分配给绘制完整数据cancanvas 缓存大小 */
|
|
@@ -284,12 +482,43 @@ export type BufferSizeOpt = {
|
|
|
284
482
|
sub: number;
|
|
285
483
|
};
|
|
286
484
|
export type BezierOpt = {
|
|
485
|
+
/** 是否开启贝塞尔曲线 */
|
|
486
|
+
enable: boolean;
|
|
287
487
|
/** 合并处理贝塞尔曲线的单位时间,单位:毫秒 */
|
|
288
|
-
combineUnitTime
|
|
488
|
+
combineUnitTime?: number;
|
|
489
|
+
/** 贝塞尔曲线最大绘制点数 */
|
|
490
|
+
maxDrawCount?: number;
|
|
289
491
|
};
|
|
290
492
|
export type PencilEraserOpt = {
|
|
291
493
|
/** 是否使用位图方式局部橡皮擦 */
|
|
292
494
|
useBitMap: boolean;
|
|
495
|
+
/** 最大图片宽度 */
|
|
496
|
+
maxImageWidth?: number;
|
|
497
|
+
/** 最大图片高度 */
|
|
498
|
+
maxImageHeight?: number;
|
|
499
|
+
/** 最长合并橡皮擦处理时间间隔,单位:毫秒 */
|
|
500
|
+
maxCombineTime?: number;
|
|
501
|
+
};
|
|
502
|
+
export type TextEditorOpt = {
|
|
503
|
+
/** 是否显示浮动栏 */
|
|
504
|
+
showFloatBar?: boolean;
|
|
505
|
+
/** 是否可以通过selector教具切换 */
|
|
506
|
+
canSelectorSwitch?: boolean;
|
|
507
|
+
/** 是否右边界自动换行 */
|
|
508
|
+
rightBoundBreak?: boolean;
|
|
509
|
+
/** 扩展字体列表 */
|
|
510
|
+
extendFontFaces?: {
|
|
511
|
+
fontFamily: string;
|
|
512
|
+
src: string;
|
|
513
|
+
}[];
|
|
514
|
+
/** 加载字体超时时间,单位:毫秒 */
|
|
515
|
+
loadFontFacesTimeout?: number;
|
|
516
|
+
};
|
|
517
|
+
export type StrokeWidthOpt = {
|
|
518
|
+
/** 最小线宽 */
|
|
519
|
+
min: number;
|
|
520
|
+
/** 最大线宽 */
|
|
521
|
+
max: number;
|
|
293
522
|
};
|
|
294
523
|
export declare enum EmitEventType {
|
|
295
524
|
/** 无 */
|
|
@@ -303,9 +532,10 @@ export declare enum EmitEventType {
|
|
|
303
532
|
/** 复制节点 */
|
|
304
533
|
CopyNode = "CopyNode",
|
|
305
534
|
/** 激活层级设置 */
|
|
306
|
-
ZIndexActive = "ZIndexActive",
|
|
307
535
|
/** 设置节点层级 */
|
|
308
536
|
ZIndexNode = "ZIndexNode",
|
|
537
|
+
/** 设置背景svg层级 */
|
|
538
|
+
ZIndexBackgroundSVG = "ZIndexBackgroundSVG",
|
|
309
539
|
/** 旋转节点 */
|
|
310
540
|
RotateNode = "RotateNode",
|
|
311
541
|
/** 设置节点颜色 */
|
|
@@ -337,30 +567,161 @@ export declare enum EmitEventType {
|
|
|
337
567
|
/** 切换相机角度中 */
|
|
338
568
|
CameraChange = "CameraChange",
|
|
339
569
|
/** 激活方法动作 */
|
|
340
|
-
ActiveMethod = "ActiveMethod"
|
|
570
|
+
ActiveMethod = "ActiveMethod",
|
|
571
|
+
/** 隐藏浮动按钮 */
|
|
572
|
+
HidFloatBarBtn = "HidFloatBarBtn"
|
|
341
573
|
}
|
|
342
574
|
export declare enum InternalMsgEmitterType {
|
|
343
|
-
DisplayState = "DisplayState",
|
|
344
575
|
MainEngine = "MainEngine",
|
|
345
576
|
Cursor = "Cursor",
|
|
346
577
|
BindMainView = "BindMainView"
|
|
347
578
|
}
|
|
348
|
-
export type InternalEventValue = {
|
|
349
|
-
id: string;
|
|
350
|
-
value?: _ArrayBolean<number>;
|
|
351
|
-
};
|
|
352
579
|
export declare enum ActiveContainerType {
|
|
353
580
|
MainView = 0,
|
|
354
581
|
Plugin = 1,
|
|
355
582
|
Both = 2
|
|
356
583
|
}
|
|
357
|
-
export type SpeechBalloonPlacement =
|
|
584
|
+
export type SpeechBalloonPlacement = "top" | "left" | "right" | "bottom" | "topLeft" | "topRight" | "bottomLeft" | "bottomRight" | "leftTop" | "leftBottom" | "rightTop" | "rightBottom";
|
|
358
585
|
export type TeleBoxState = "normal" | "minimized" | "maximized";
|
|
359
|
-
export type PriorityType = 'ui' | 'cpu';
|
|
360
586
|
export type FilterRenderType = "show" | "hide";
|
|
361
587
|
export type FilterPublishAutType = "write" | "readOnly";
|
|
362
588
|
export type FilterRenderDataType = "page" | "uid";
|
|
363
|
-
export type
|
|
364
|
-
export type
|
|
365
|
-
|
|
366
|
-
|
|
589
|
+
export type _SetTrue = true | Set<Uid>;
|
|
590
|
+
export type _ObjectTrue = true | {
|
|
591
|
+
[key: Uid]: true;
|
|
592
|
+
};
|
|
593
|
+
export type _ArrayTrue = true | Uid[];
|
|
594
|
+
export declare enum EForceStopReason {
|
|
595
|
+
/** 画笔过长 */
|
|
596
|
+
longPencil = "longPencil"
|
|
597
|
+
}
|
|
598
|
+
export type AutoShapeDebugInfo = {
|
|
599
|
+
workId: string;
|
|
600
|
+
viewId: string;
|
|
601
|
+
scenePath?: string;
|
|
602
|
+
recognized: boolean;
|
|
603
|
+
fallbackToPencil: boolean;
|
|
604
|
+
kind: AutoShapeKind;
|
|
605
|
+
score: number;
|
|
606
|
+
threshold: number;
|
|
607
|
+
templateId?: string;
|
|
608
|
+
mappedToolsType?: EToolsKey;
|
|
609
|
+
topCandidate?: {
|
|
610
|
+
kind: AutoShapeKind;
|
|
611
|
+
score: number;
|
|
612
|
+
threshold: number;
|
|
613
|
+
templateId?: string;
|
|
614
|
+
};
|
|
615
|
+
metrics: Pick<AutoShapeMetrics, "cornerCount" | "straightness" | "closureRatio" | "radialVariance" | "bboxCornerCloseness" | "diamondCloseness">;
|
|
616
|
+
};
|
|
617
|
+
/**
|
|
618
|
+
* 公开的监听器类型
|
|
619
|
+
*/
|
|
620
|
+
export type PublicListener = {
|
|
621
|
+
/** 同步页面分屏权限 */
|
|
622
|
+
syncPageAuth: (viewId: string, syncData: AuthRenderScenesData) => void;
|
|
623
|
+
/** 同步用户显示权限 */
|
|
624
|
+
syncRenderUids: (viewId: string, syncData: {
|
|
625
|
+
render?: _SetTrue;
|
|
626
|
+
hide?: _SetTrue;
|
|
627
|
+
clear?: _SetTrue;
|
|
628
|
+
}) => void;
|
|
629
|
+
/** 文字改变 */
|
|
630
|
+
textChange: (workId: string, target: HTMLElement, texts: string[], info: TextEditorInfo) => void;
|
|
631
|
+
/** 工作状态 */
|
|
632
|
+
workState: (workState: EventWorkState, viewId: string) => void;
|
|
633
|
+
/** 强制中断 */
|
|
634
|
+
forceStop: (reason: EForceStopReason, viewId: string) => void;
|
|
635
|
+
/** auto shape 调试信息 */
|
|
636
|
+
autoShape: (info: AutoShapeDebugInfo) => void;
|
|
637
|
+
/** 同步数据变化 */
|
|
638
|
+
syncStorageChange: (storage: ISerializableStorageViewData) => void;
|
|
639
|
+
};
|
|
640
|
+
export type PublicEvent = keyof PublicListener;
|
|
641
|
+
export type PublicCallback<T extends PublicEvent> = PublicListener[T];
|
|
642
|
+
export type IconifyInformation = {
|
|
643
|
+
/**
|
|
644
|
+
* inconify svg url
|
|
645
|
+
*/
|
|
646
|
+
src: string;
|
|
647
|
+
/**
|
|
648
|
+
* 图片的唯一识别符
|
|
649
|
+
*/
|
|
650
|
+
uuid: string;
|
|
651
|
+
/**
|
|
652
|
+
* 图片中点在世界坐标系中的 x 坐标
|
|
653
|
+
*/
|
|
654
|
+
centerX: number;
|
|
655
|
+
/**
|
|
656
|
+
* 图片中点在世界坐标系中的 y 坐标
|
|
657
|
+
*/
|
|
658
|
+
centerY: number;
|
|
659
|
+
/**
|
|
660
|
+
* 图片中点在世界坐标系中的宽
|
|
661
|
+
*/
|
|
662
|
+
width: number;
|
|
663
|
+
/**
|
|
664
|
+
* 图片中点在世界坐标系中的高
|
|
665
|
+
*/
|
|
666
|
+
height: number;
|
|
667
|
+
/**
|
|
668
|
+
* 图片是否被锁定
|
|
669
|
+
*/
|
|
670
|
+
locked: boolean;
|
|
671
|
+
/**
|
|
672
|
+
* 图片是否禁止非等比放缩
|
|
673
|
+
*/
|
|
674
|
+
uniformScale?: boolean;
|
|
675
|
+
/**
|
|
676
|
+
* 是否以跨域方式加载图片
|
|
677
|
+
*/
|
|
678
|
+
crossOrigin?: boolean | string;
|
|
679
|
+
};
|
|
680
|
+
export type ISVGBaseInformation = {
|
|
681
|
+
/**
|
|
682
|
+
* svg的唯一识别符
|
|
683
|
+
*/
|
|
684
|
+
uuid: string;
|
|
685
|
+
/**
|
|
686
|
+
* 图片中点在世界坐标系中的 x 坐标
|
|
687
|
+
*/
|
|
688
|
+
centerX: number;
|
|
689
|
+
/**
|
|
690
|
+
* 图片中点在世界坐标系中的 y 坐标
|
|
691
|
+
*/
|
|
692
|
+
centerY: number;
|
|
693
|
+
/**
|
|
694
|
+
* 图片中点在世界坐标系中的宽
|
|
695
|
+
*/
|
|
696
|
+
width: number;
|
|
697
|
+
/**
|
|
698
|
+
* 图片中点在世界坐标系中的高
|
|
699
|
+
*/
|
|
700
|
+
height: number;
|
|
701
|
+
/**
|
|
702
|
+
* 图片是否被锁定
|
|
703
|
+
*/
|
|
704
|
+
locked: boolean;
|
|
705
|
+
/**
|
|
706
|
+
* 图片是否禁止非等比放缩
|
|
707
|
+
*/
|
|
708
|
+
uniformScale?: boolean;
|
|
709
|
+
/**
|
|
710
|
+
* 是否以跨域方式加载图片
|
|
711
|
+
*/
|
|
712
|
+
crossOrigin?: boolean | string;
|
|
713
|
+
};
|
|
714
|
+
export type ISVGUrlInformation = ISVGBaseInformation & {
|
|
715
|
+
/**
|
|
716
|
+
* svg 源 url, 必须为 http 或 https 协议
|
|
717
|
+
*/
|
|
718
|
+
src: string;
|
|
719
|
+
};
|
|
720
|
+
export type ISVGMarkmapInformation = ISVGBaseInformation & {
|
|
721
|
+
/**
|
|
722
|
+
* markdown 数据 tostring
|
|
723
|
+
*/
|
|
724
|
+
data: string;
|
|
725
|
+
};
|
|
726
|
+
export type ISVGInformation = ISVGUrlInformation | ISVGMarkmapInformation;
|
|
727
|
+
export type MarkmapId = string;
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.appliance-plugin-main-view-displayer,.appliance-plugin-app-view-displayer{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:2;box-sizing:content-box}.appliance-plugin-floatbtns{position:absolute;left:3px;transform:translateY(-60px);display:flex;flex-direction:row;align-items:center;background:#fff;border:1px solid #EFEFEF;box-shadow:0 6px 12px #0000001f;border-radius:4px;color-scheme:light;pointer-events:auto;z-index:9}.appliance-plugin-floatbtns .normal-button{width:40px;height:40px;touch-action:none}.appliance-plugin-floatbtns .button{display:flex;justify-content:center;align-items:center;cursor:pointer;border:none}.appliance-plugin-floatbtns .button:hover,.appliance-plugin-floatbtns .button.active{background-color:#eef0f6}.appliance-plugin-floatbtns .shapeOpt-sub-menu,.appliance-plugin-floatbtns .font-style-menu,.appliance-plugin-floatbtns .image-layer-menu,.appliance-plugin-floatbtns .font-colors-menu{box-sizing:border-box;display:flex;flex-wrap:wrap;flex-direction:row;justify-content:flex-start;align-items:center;position:absolute;padding:4px;background:#fff;box-shadow:0 3px 6px #0000001f;border-radius:2px;top:50px;touch-action:none}.appliance-plugin-floatbtns .shapeOpt-sub-menu .normal-button,.appliance-plugin-floatbtns .font-style-menu .normal-button,.appliance-plugin-floatbtns .image-layer-menu .normal-button,.appliance-plugin-floatbtns .font-colors-menu .normal-button{width:32px;height:32px;touch-action:none}.appliance-plugin-floatbtns .font-colors-menu{justify-content:flex-start;width:128px}.appliance-plugin-floatbtns .font-colors-menu .font-color-button{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:4px;width:22px;height:22px;border-radius:50%;border-width:1px;border-style:solid;border-color:#fff;background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px;box-sizing:border-box}.appliance-plugin-floatbtns .font-colors-menu .font-color-button.active{border-color:#a7a7a7}.appliance-plugin-floatbtns .font-colors-menu .font-color-button .circle{box-sizing:border-box;width:16px;height:16px;border-radius:50%;border:1px solid rgba(0,0,0,.12);touch-action:none}.appliance-plugin-floatbtns .font-colors-menu .font-color-button .none{position:relative;background-color:#fff}.appliance-plugin-floatbtns .font-colors-menu .font-color-button .none:before{content:"";position:absolute;left:50%;width:1px;height:100%;background-color:#0000001f;transform:rotate(45deg)}.appliance-plugin-floatbtns .font-colors-icon{flex-direction:column}.appliance-plugin-floatbtns .font-colors-icon .color-bar{height:2px;width:12px;margin-top:-2px;background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px}.appliance-plugin-floatbtns .font-colors-icon .color-bar .color-bar-color{width:100%;height:100%}.appliance-plugin-floatbtns .font-colors-icon .color-bar-fill,.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring{height:12px;width:12px;border-radius:6px;border:1px solid rgba(0,0,0,.12);background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px}.appliance-plugin-floatbtns .font-colors-icon .color-bar-fill .circle,.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring .circle{width:100%;height:100%;border-radius:50%;touch-action:none}.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring{border:0}.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring .circle{transform:translate(35%,30%);width:60%;height:60%;border-radius:50%;background-color:#fff;touch-action:none}.appliance-plugin-floatbtns .font-color-opacity{box-sizing:border-box;width:100px;height:6px;margin:5px 0 10px;border-radius:3px;background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px;position:relative}.appliance-plugin-floatbtns .font-color-opacity .range-color{height:6px;box-shadow:inset 0 0 1px #00000040;border-radius:4px;top:0;right:0;bottom:0;left:0}.appliance-plugin-floatbtns .font-color-opacity .range-opacity{position:absolute;top:0;left:-10px;height:6px;width:120px;touch-action:auto}.appliance-plugin-floatbtns .font-color-opacity .range-opacity .range-opacity-data-icon{position:absolute;top:10px;left:0;width:30px;height:16px;text-align:center;background-color:#333;border-radius:4px;font-size:12px;color:#fff;display:none}.appliance-plugin-floatbtns .font-color-opacity .range-opacity:hover .range-opacity-data-icon{display:block}.appliance-plugin-floatbtns .font-color-opacity .circle{position:absolute;top:-3px;border:2px solid #ffffff;border-radius:50%;cursor:pointer;box-shadow:inset 0 0 1px #00000040,0 0 0 1px #0000000f;width:12px;height:12px;box-sizing:border-box;touch-action:none}.appliance-plugin-floatbtns .font-style-menu{justify-content:space-between;width:128px}.appliance-plugin-floatbtns .font-style-menu .font-style-button{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:4px;width:22px;height:22px;box-sizing:border-box}.appliance-plugin-floatbtns .font-style-menu .font-style-button.active{border-color:#a7a7a7}.appliance-plugin-floatbtns .font-size-barBtn .font-size-input{line-height:20px;height:20px;padding:0 2px;margin-left:2px;width:25px;border:1px solid;border-radius:3px}.appliance-plugin-floatbtns .font-size-barBtn .font-size-input:focus{background:#eef0f6}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns{width:15px;margin-left:3px;display:flex;flex-direction:column;justify-content:center}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add,.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut{position:relative;width:10px;height:10px}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add:hover,.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut:hover{background:#eef0f6}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add:after,.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut:after{content:"";position:absolute;top:0;border:4px solid #999;border-left-color:transparent;border-right-color:transparent}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add{margin-bottom:3px}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add:after{border-top-color:transparent}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut:after{border-bottom-color:transparent}.appliance-plugin-floatbtns .font-size-barBtn .font-size-menu{position:absolute;top:35px;width:50px;overflow-y:auto;display:flex;flex-direction:column;align-items:center;background:#fff;border:1px solid #EFEFEF;box-shadow:0 6px 12px #0000001f}.appliance-plugin-floatbtns .font-size-barBtn .font-size-menu .font-size-btn{font-size:12px;line-height:20px;width:100%;text-align:center}.appliance-plugin-floatbtns .font-size-barBtn .font-size-menu .font-size-btn:hover{background:#eef0f6}.appliance-plugin-floatbtns .font-size-barBtn:hover{background:#fff}.appliance-plugin-floatbtns .shapeOpt-sub-menu{flex-direction:column;touch-action:none}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-tabs{display:flex;flex-direction:row;justify-content:flex-start;width:100%}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-tabs .tab-button{width:32px;height:24px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content{flex:1;background-color:#eef0f6;display:flex;flex-direction:column;align-items:baseline;width:100%}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button{flex:1;height:32px;padding:5px 0;cursor:default;display:flex;flex-direction:row;justify-content:flex-start;width:100%}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button img{width:16px;height:16px;margin:0 5px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number{flex:1;padding:0 3px;height:20px;border:1px solid;border-radius:3px;margin-right:5px;max-width:70px;min-width:40px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns{width:15px;display:flex;flex-direction:column;justify-content:center}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add,.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut{position:relative;width:10px;height:10px;cursor:pointer}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add:hover,.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut:hover{background:#eef0f6}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add:after,.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut:after{content:"";position:absolute;top:0;border:4px solid #999;border-left-color:transparent;border-right-color:transparent}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add{margin-bottom:3px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add:after{border-top-color:transparent}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut:after{border-bottom-color:transparent}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container{flex:1;box-sizing:border-box;width:100px;height:6px;margin:7px 6px 7px 0;border-radius:3px;background-color:#3381ff;position:relative}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container .range-number-color{height:6px;box-shadow:inset 0 0 1px #00000040;border-radius:4px;top:0;right:0;bottom:0;left:0}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container .range-number{position:absolute;top:0;left:-6px;height:6px;width:112px;cursor:pointer}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container .circle{position:absolute;top:-3px;border:2px solid #ffffff;border-radius:50%;cursor:pointer;box-shadow:inset 0 0 1px #00000040,0 0 0 1px #0000000f;width:12px;height:12px;box-sizing:border-box;background-color:#3381ff;touch-action:none}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .select-option-menu{position:absolute;top:60px;left:30px;width:80px;display:flex;flex-direction:column;align-items:center;background:#fff;border:1px solid #EFEFEF;box-shadow:0 6px 12px #0000001f}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .select-option-menu .select-option-btn{font-size:12px;line-height:20px;width:100%;text-align:center}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .select-option-menu .select-option-btn:hover{background:#eef0f6}.appliance-plugin-floatbtns .font-colors-line{width:100%;height:0px;border-bottom:1px dashed #ccc;margin-bottom:3px}.appliance-plugin-floatbtns .stroke-type-box{width:100%;height:15px;display:flex;flex-direction:row;justify-content:space-around;padding-top:8px;cursor:default}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item{box-sizing:content-box;padding-top:2px;width:20px;height:3px;border:0;cursor:pointer;opacity:.3}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.active{opacity:1}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.Stroke{margin-top:2px;padding:0;height:3px;border-radius:0 10px}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.Normal{height:0;border-bottom:3px solid}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.Dotted{height:0;border-bottom:3px dotted}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.LongDotted{height:0;border-bottom:3px dashed}.appliance-plugin-fill-scene-snapshot-img{position:absolute;top:50%;left:50%;max-width:100%;max-height:100%;transform:translate(-50%,-50%);pointer-events:none}.index-module__Container__nLsM3{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;outline:none;pointer-events:none;touch-action:none}.index-module__Container__nLsM3 *{touch-action:none}.index-module__Container__nLsM3 .index-module__CanvasBox__j2Xe-{position:relative;width:100%;height:100%;pointer-events:none}.index-module__Container__nLsM3 .index-module__CanvasBox__j2Xe- .index-module__FloatCanvas__d1YR7{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.index-module__Container__nLsM3 .index-module__CanvasBox__j2Xe- .index-module__TopFloatCanvas__7IaCw{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.index-module__Container__nLsM3 .index-module__CanvasBoxSub__hcMeK{position:absolute!important;top:0;left:0;width:100%;height:100%;z-index:1}.index-module__Container__nLsM3 .index-module__SnapshotBox__--eeE{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:-1}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL{position:absolute;top:0;left:0;width:0;height:0;pointer-events:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box{position:relative;box-sizing:border-box;width:100%;height:100%;border:1px solid;z-index:1;pointer-events:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .point{position:absolute;width:7px;height:7px;transform:translate(-50%,-50%);pointer-events:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .point-dot{margin:-1px 0 0 -1px;width:5px;height:5px;border:1px solid;border-radius:3px;background-color:#fff}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LB{left:0}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .TC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RT{top:0}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RB{right:-7px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RB,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .BC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LB{bottom:-7px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LC{top:50%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .TC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .BC{left:50%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .lock{pointer-events:none;position:absolute;width:22px;height:22px;top:-11px;left:-11px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-floatCanvas-box{position:absolute;z-index:1;overflow:hidden}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-floatCanvas{width:100%;height:100%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor-box{position:absolute;touch-action:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor{position:relative;padding:5px;pointer-events:auto;font-family:sans-serif;resize:none;z-index:2;border:1px dashed;white-space:pre;box-sizing:content-box;display:flex;flex-direction:column;align-items:baseline}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor:hover{border-style:solid}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor:focus,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor:focus-visible{outline:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .readOnly{border-color:transparent}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf{position:absolute;cursor:move;top:0;left:0;width:16px;height:16px;z-index:2;pointer-events:auto}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-btn{position:absolute;left:0;top:0;width:16px;height:16px;border-radius:8px;display:flex;justify-content:center;align-items:center}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-btn img{width:12px;height:12px}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer{position:relative;width:100%;height:100%;opacity:0}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer.active{opacity:1}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer img{width:100%;height:100%}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer .angle-icon{position:absolute;top:-16px;left:-16px;width:30px;height:16px;text-align:center;background-color:#333;border-radius:4px;font-size:12px;color:#fff}.index-module__Container__nLsM3 .index-module__ResizeBtn__yjvda{position:absolute;box-sizing:content-box;top:0;width:0;left:0;z-index:1;touch-action:none}.index-module__Container__nLsM3 .index-module__CursorBox__2UHvI{position:absolute;left:0;top:0;z-index:2}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;pointer-events:none;overflow:hidden;transform:translateZ(0)}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box{position:absolute;touch-action:none}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor{position:relative;padding:5px;pointer-events:auto;font-family:sans-serif;resize:none;z-index:2;border:1px dashed;white-space:nowrap;box-sizing:content-box;display:flex;flex-direction:column;align-items:baseline}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor:hover{border-style:solid}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor:focus,.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor:focus-visible{outline:none}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .readOnly{pointer-events:none;border-color:transparent}.index-module__Container__nLsM3 .index-module__ResizeTowBox__HOllX{position:absolute;top:0;width:0;left:0}.index-module__Container__nLsM3 .index-module__ResizeTowBox__HOllX .appliance-plugin-point-btn{position:absolute;width:5px;height:5px;border:1px solid;border-radius:3px;transform:translate(-50%,-50%);background-color:#fff;z-index:2}.index-module__Container__nLsM3 .index-module__ResizeTowBox__HOllX .appliance-plugin-point-draggable-btn{position:absolute;width:10px;height:10px;margin-top:-5px;margin-left:-5px;z-index:3;pointer-events:auto;cursor:move;touch-action:none}.index-module__Container__nLsM3 .index-module__FloatBarBtn__FJrOG{position:absolute;pointer-events:none}.cursor-box{color:#fff;padding:4px;border-radius:2px;width:100%;height:100%}.cursor-pencil-image{width:26px;height:26px}.cursor-selector-image{width:24px;height:24px}.cursor-selector-avatar{border-radius:50%;border-style:solid;border-width:2px;border-color:#fff;margin-bottom:2px}.cursor-inner{border-radius:4px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:4px;padding-right:4px;font-size:12px}.cursor-inner-mellow{height:32px;border-radius:16px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:16px;padding-right:16px}.cursor-tag-name{font-size:12px;margin-left:4px;padding:2px 8px;border-radius:4px}.cursor-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px}.cursor-pencil-offset{margin-left:-20px}.cursor-selector-offset{margin-left:-22px;margin-top:56px}.cursor-text-offset{margin-left:-30px;margin-top:18px}.cursor-shape-offset{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px;margin-left:-30px;margin-top:12px}.cursor-name{width:100%;height:48px;display:flex;align-items:center;justify-content:center}
|
|
1
|
+
:root{--text-editor-border-color-unable: rgba(0, 0, 0, .12)}.appliance-plugin-main-view-displayer,.appliance-plugin-app-view-displayer{position:relative;width:100%;height:100%;transform:translateY(-100%);pointer-events:none;z-index:2;box-sizing:content-box}.appliance-plugin-floatbtns{position:absolute;left:3px;transform:translateY(-60px);display:flex;flex-direction:row;align-items:center;background:#fff;border:1px solid #efefef;box-shadow:0 6px 12px #0000001f;border-radius:4px;color-scheme:light;pointer-events:auto;z-index:9}.appliance-plugin-floatbtns .normal-button{width:40px;height:40px;touch-action:none}.appliance-plugin-floatbtns .button{display:flex;justify-content:center;align-items:center;cursor:pointer;border:none}.appliance-plugin-floatbtns .button:hover,.appliance-plugin-floatbtns .button.active{background-color:#eef0f6}.appliance-plugin-floatbtns .shapeOpt-sub-menu,.appliance-plugin-floatbtns .font-style-menu,.appliance-plugin-floatbtns .image-layer-menu,.appliance-plugin-floatbtns .font-colors-menu{box-sizing:border-box;display:flex;flex-wrap:wrap;flex-direction:row;justify-content:flex-start;align-items:center;position:absolute;padding:4px;background:#fff;box-shadow:0 3px 6px #0000001f;border-radius:2px;top:50px;touch-action:none}.appliance-plugin-floatbtns .shapeOpt-sub-menu .normal-button,.appliance-plugin-floatbtns .font-style-menu .normal-button,.appliance-plugin-floatbtns .image-layer-menu .normal-button,.appliance-plugin-floatbtns .font-colors-menu .normal-button{width:32px;height:32px;touch-action:none}.appliance-plugin-floatbtns .font-colors-menu{justify-content:flex-start;width:128px}.appliance-plugin-floatbtns .font-colors-menu .font-color-button{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:4px;width:22px;height:22px;border-radius:50%;border-width:1px;border-style:solid;border-color:#fff;background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px;box-sizing:border-box}.appliance-plugin-floatbtns .font-colors-menu .font-color-button.active{border-color:#a7a7a7}.appliance-plugin-floatbtns .font-colors-menu .font-color-button .circle{box-sizing:border-box;width:16px;height:16px;border-radius:50%;border:1px solid rgba(0,0,0,.12);touch-action:none}.appliance-plugin-floatbtns .font-colors-menu .font-color-button .none{position:relative;background-color:#fff}.appliance-plugin-floatbtns .font-colors-menu .font-color-button .none:before{content:"";position:absolute;left:50%;width:1px;height:100%;background-color:#0000001f;transform:rotate(45deg)}.appliance-plugin-floatbtns .font-colors-icon{flex-direction:column}.appliance-plugin-floatbtns .font-colors-icon .color-bar{height:2px;width:12px;margin-top:-2px;background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px}.appliance-plugin-floatbtns .font-colors-icon .color-bar .color-bar-color{width:100%;height:100%}.appliance-plugin-floatbtns .font-colors-icon .color-bar-fill,.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring{height:12px;width:12px;border-radius:6px;border:1px solid rgba(0,0,0,.12);background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px}.appliance-plugin-floatbtns .font-colors-icon .color-bar-fill .circle,.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring .circle{width:100%;height:100%;border-radius:50%;touch-action:none}.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring{border:0}.appliance-plugin-floatbtns .font-colors-icon .color-bar-ring .circle{transform:translate(35%,30%);width:60%;height:60%;border-radius:50%;background-color:#fff;touch-action:none}.appliance-plugin-floatbtns .font-color-opacity{box-sizing:border-box;width:100px;height:6px;margin:5px 0 10px;border-radius:3px;background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:6px 6px;position:relative}.appliance-plugin-floatbtns .font-color-opacity .range-color{height:6px;box-shadow:inset 0 0 1px #00000040;border-radius:4px;top:0;right:0;bottom:0;left:0}.appliance-plugin-floatbtns .font-color-opacity .range-opacity{position:absolute;top:0;left:-10px;height:6px;width:120px;touch-action:auto}.appliance-plugin-floatbtns .font-color-opacity .range-opacity .range-opacity-data-icon{position:absolute;top:10px;left:0;width:30px;height:16px;text-align:center;background-color:#333;border-radius:4px;font-size:12px;color:#fff;display:none}.appliance-plugin-floatbtns .font-color-opacity .range-opacity:hover .range-opacity-data-icon{display:block}.appliance-plugin-floatbtns .font-color-opacity .circle{position:absolute;top:-3px;border:2px solid #ffffff;border-radius:50%;cursor:pointer;box-shadow:inset 0 0 1px #00000040,0 0 0 1px #0000000f;width:12px;height:12px;box-sizing:border-box;touch-action:none}.appliance-plugin-floatbtns .font-style-menu{justify-content:space-between;width:128px}.appliance-plugin-floatbtns .font-style-menu .font-style-button{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:4px;width:22px;height:22px;box-sizing:border-box}.appliance-plugin-floatbtns .font-style-menu .font-style-button.active{border-color:#a7a7a7}.appliance-plugin-floatbtns .font-size-barBtn .font-size-input{line-height:20px;height:20px;padding:0 2px;margin-left:2px;width:25px;border:1px solid;border-radius:3px}.appliance-plugin-floatbtns .font-size-barBtn .font-size-input:focus{background:#eef0f6}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns{width:15px;margin-left:3px;display:flex;flex-direction:column;justify-content:center}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add,.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut{position:relative;width:10px;height:10px}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add:hover,.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut:hover{background:#eef0f6}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add:after,.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut:after{content:"";position:absolute;top:0;border:4px solid #999;border-left-color:transparent;border-right-color:transparent}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add{margin-bottom:3px}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-add:after{border-top-color:transparent}.appliance-plugin-floatbtns .font-size-barBtn .font-size-btns .font-size-cut:after{border-bottom-color:transparent}.appliance-plugin-floatbtns .font-size-barBtn .font-size-menu{position:absolute;top:35px;width:50px;overflow-y:auto;display:flex;flex-direction:column;align-items:center;background:#fff;border:1px solid #efefef;box-shadow:0 6px 12px #0000001f}.appliance-plugin-floatbtns .font-size-barBtn .font-size-menu .font-size-btn{font-size:12px;line-height:20px;width:100%;text-align:center}.appliance-plugin-floatbtns .font-size-barBtn .font-size-menu .font-size-btn:hover{background:#eef0f6}.appliance-plugin-floatbtns .font-size-barBtn:hover{background:#fff}.appliance-plugin-floatbtns .shapeOpt-sub-menu{flex-direction:column;touch-action:none}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-tabs{display:flex;flex-direction:row;justify-content:flex-start;width:100%}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-tabs .tab-button{width:32px;height:24px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content{flex:1;background-color:#eef0f6;display:flex;flex-direction:column;align-items:baseline;width:100%}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button{flex:1;height:32px;padding:5px 0;cursor:default;display:flex;flex-direction:row;justify-content:flex-start;width:100%}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button img{width:16px;height:16px;margin:0 5px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number{flex:1;padding:0 3px;height:20px;border:1px solid;border-radius:3px;margin-right:5px;max-width:70px;min-width:40px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns{width:15px;display:flex;flex-direction:column;justify-content:center}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add,.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut{position:relative;width:10px;height:10px;cursor:pointer}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add:hover,.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut:hover{background:#eef0f6}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add:after,.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut:after{content:"";position:absolute;top:0;border:4px solid #999;border-left-color:transparent;border-right-color:transparent}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add{margin-bottom:3px}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-add:after{border-top-color:transparent}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .input-number-btns .input-number-cut:after{border-bottom-color:transparent}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container{flex:1;box-sizing:border-box;width:100px;height:6px;margin:7px 6px 7px 0;border-radius:3px;background-color:#3381ff;position:relative}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container .range-number-color{height:6px;box-shadow:inset 0 0 1px #00000040;border-radius:4px;top:0;right:0;bottom:0;left:0}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container .range-number{position:absolute;top:0;left:-6px;height:6px;width:112px;cursor:pointer}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .range-number-container .circle{position:absolute;top:-3px;border:2px solid #ffffff;border-radius:50%;cursor:pointer;box-shadow:inset 0 0 1px #00000040,0 0 0 1px #0000000f;width:12px;height:12px;box-sizing:border-box;background-color:#3381ff;touch-action:none}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .select-option-menu{position:absolute;top:60px;left:30px;width:80px;display:flex;flex-direction:column;align-items:center;background:#fff;border:1px solid #efefef;box-shadow:0 6px 12px #0000001f}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .select-option-menu .select-option-btn{font-size:12px;line-height:20px;width:100%;text-align:center}.appliance-plugin-floatbtns .shapeOpt-sub-menu .shapeOpt-sub-menu-content .input-button .select-option-menu .select-option-btn:hover{background:#eef0f6}.appliance-plugin-floatbtns .font-colors-line{width:100%;height:0px;border-bottom:1px dashed #ccc;margin-bottom:3px}.appliance-plugin-floatbtns .stroke-type-box{width:100%;height:15px;display:flex;flex-direction:row;justify-content:space-around;padding-top:8px;cursor:default}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item{box-sizing:content-box;padding-top:2px;width:20px;height:3px;border:0;cursor:pointer;opacity:.3}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.active{opacity:1}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.Stroke{margin-top:2px;padding:0;height:3px;border-radius:0 10px}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.Normal{height:0;border-bottom:3px solid}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.Dotted{height:0;border-bottom:3px dotted}.appliance-plugin-floatbtns .stroke-type-box .stroke-type-box-item.LongDotted{height:0;border-bottom:3px dashed}.appliance-plugin-fill-scene-snapshot-img{position:absolute;top:50%;left:50%;max-width:100%;max-height:100%;transform:translate(-50%,-50%);pointer-events:none}.appliance-plugin-background-svg-active.appliance-plugin-background-isWritable .svg{pointer-events:auto;-webkit-user-select:text;user-select:text}.index-module__Container__nLsM3{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;outline:none;pointer-events:none;touch-action:none}.index-module__Container__nLsM3 *{touch-action:none}.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:-1}.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ .img,.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ .svg{position:absolute;transform:translate(-50%,-50%);touch-action:none}.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ .index-module__BackgroundSvgBox__Fv1ay,.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ .index-module__BackgroundSnapshotContent__NFLAl{overflow:hidden}.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ .index-module__BackgroundSnapshotBox__NEM-C{z-index:-1;clip-path:inset(100% 0 0 0)}.index-module__Container__nLsM3 .index-module__BackgroundBox__zfthZ .index-module__BackgroundSnapshotBox__NEM-C .index-module__BackgroundSnapshotContent__NFLAl,.index-module__Container__nLsM3 .index-module__BackgroundSvgBox__Fv1ay,.index-module__Container__nLsM3 .index-module__BackgroundSnapshotBox__NEM-C,.index-module__Container__nLsM3 .index-module__BackgroundSnapshotContent__NFLAl{position:absolute;top:0;left:0;width:100%;height:100%}.index-module__Container__nLsM3 .index-module__CanvasBox__j2Xe-{position:relative;width:100%;height:100%;pointer-events:none}.index-module__Container__nLsM3 .index-module__CanvasBox__j2Xe- .index-module__FloatCanvas__d1YR7{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.index-module__Container__nLsM3 .index-module__CanvasBox__j2Xe- .index-module__TopFloatCanvas__7IaCw{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.index-module__Container__nLsM3 .index-module__CanvasBoxSub__hcMeK{position:absolute!important;top:0;left:0;width:100%;height:100%;z-index:1}.index-module__Container__nLsM3 .index-module__SnapshotBox__--eeE{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:-1}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL{position:absolute;top:0;left:0;width:0;height:0;pointer-events:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box{position:relative;box-sizing:border-box;width:100%;height:100%;border:1px solid;z-index:1;pointer-events:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .point{position:absolute;width:7px;height:7px;transform:translate(-50%,-50%);pointer-events:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .point-dot{margin:-1px 0 0 -1px;width:5px;height:5px;border:1px solid;border-radius:3px;background-color:#fff}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LB{left:0}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .TC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RT{top:0}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RB{right:-7px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RB,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .BC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LB{bottom:-7px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .RC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .LC{top:50%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .TC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .BC{left:50%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-hightlight-box .lock{pointer-events:none;position:absolute;width:22px;height:22px;top:-11px;left:-11px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-floatCanvas-box{position:absolute;z-index:1;overflow:hidden}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-floatCanvas{width:100%;height:100%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor-box{position:absolute;touch-action:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor-box.readonly{pointer-events:none;border-color:transparent}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor{position:relative;padding:5px;pointer-events:none;resize:none;z-index:2;white-space:pre;box-sizing:content-box;display:flex;flex-direction:column;align-items:baseline}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor:focus,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor:focus-visible{outline:none}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .editor div{min-width:2px;min-height:inherit}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf{position:absolute;cursor:move;top:0;left:0;width:16px;height:16px;z-index:2;pointer-events:auto}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-btn{position:absolute;left:0;top:0;width:16px;height:16px;border-radius:8px;display:flex;justify-content:center;align-items:center;pointer-events:none}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-btn img{width:12px;height:12px}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer{position:relative;width:100%;height:100%;opacity:0;pointer-events:none}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer.active{opacity:1}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer img{width:100%;height:100%}.index-module__Container__nLsM3 .index-module__RotateBtn__HSSkf .appliance-plugin-rotate-mouse-pointer .angle-icon{position:absolute;top:-16px;left:-16px;width:30px;height:16px;text-align:center;background-color:#333;border-radius:4px;font-size:12px;color:#fff}.index-module__Container__nLsM3 .index-module__ResizeBtn__yjvda{position:absolute;box-sizing:content-box;top:0;width:0;left:0;z-index:1;touch-action:none}.index-module__Container__nLsM3 .index-module__CursorBox__2UHvI{position:absolute;left:0;top:0;z-index:2}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;pointer-events:none;overflow:hidden;transform:translateZ(0)}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box{position:absolute;touch-action:none;border:1px dashed transparent;box-sizing:border-box}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.none{display:none}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.active{pointer-events:auto}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.active:hover{border-style:solid;cursor:text}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.active .editor{opacity:0;pointer-events:none}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.editing{pointer-events:auto}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.editing .editor{opacity:1;pointer-events:none}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.editing:hover{border-color:var(--text-editor-border-color-unable)!important}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.hover:hover{border-style:solid}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor-box.hover .editor{opacity:1;pointer-events:auto}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor{position:relative;padding:5px;pointer-events:none;font-family:sans-serif;resize:none;z-index:2;white-space:nowrap;box-sizing:content-box;display:flex;flex-direction:column;align-items:baseline}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor:focus,.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor:focus-visible{outline:none}.index-module__Container__nLsM3 .index-module__TextEditorContainer__Qm8KC .editor div{min-width:2px;min-height:inherit}.index-module__Container__nLsM3 .index-module__ResizeTowBox__HOllX{position:absolute;top:0;width:0;left:0}.index-module__Container__nLsM3 .index-module__ResizeTowBox__HOllX .appliance-plugin-point-btn{position:absolute;width:5px;height:5px;border:1px solid;border-radius:3px;transform:translate(-50%,-50%);background-color:#fff;z-index:2}.index-module__Container__nLsM3 .index-module__ResizeTowBox__HOllX .appliance-plugin-point-draggable-btn{position:absolute;width:10px;height:10px;margin-top:-5px;margin-left:-5px;z-index:3;pointer-events:auto;cursor:move;touch-action:none}.index-module__Container__nLsM3 .index-module__FloatBarBtn__FJrOG{position:absolute;pointer-events:none}.cursor-box{color:#fff;padding:4px;border-radius:2px;width:100%;height:100%}.cursor-box .cursor-name-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:80px}.cursor-pencil-image{width:26px;height:26px}.cursor-selector-image{width:24px;height:24px}.cursor-selector-avatar{border-radius:50%;border-style:solid;border-width:2px;border-color:#fff;margin-bottom:2px}.cursor-inner{border-radius:4px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:4px;padding-right:4px;font-size:12px}.cursor-inner-mellow{height:32px;border-radius:16px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:16px;padding-right:16px}.cursor-tag-name{font-size:12px;margin-left:4px;padding:2px 8px;border-radius:4px}.cursor-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px}.cursor-shape-offset{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px;margin-left:-30px;margin-top:12px}
|