@netless/appliance-plugin 1.1.22-beta.1 → 1.1.22-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/cdn/cdn.js +1 -1
  2. package/cdn/fullWorker-Cmt1v9.js +516 -0
  3. package/cdn/subWorker-B8K4_U.js +516 -0
  4. package/dist/appliance-plugin.js +1 -1
  5. package/dist/appliance-plugin.mjs +13 -13
  6. package/dist/component/textEditor/manager.d.ts +2 -0
  7. package/dist/core/enum.d.ts +0 -2
  8. package/dist/core/mainEngine.d.ts +19 -7
  9. package/dist/core/mainThread/base.d.ts +2 -2
  10. package/dist/core/mainThread/index.d.ts +1 -1
  11. package/dist/core/msgEvent/baseForWorker.d.ts +2 -1
  12. package/dist/core/tools/arrow.d.ts +3 -20
  13. package/dist/core/tools/base.d.ts +2 -0
  14. package/dist/core/tools/ellipse.d.ts +3 -20
  15. package/dist/core/tools/image.d.ts +2 -2
  16. package/dist/core/tools/pencil.d.ts +6 -5
  17. package/dist/core/tools/polygon.d.ts +3 -20
  18. package/dist/core/tools/rectangle.d.ts +3 -20
  19. package/dist/core/tools/selector.d.ts +10 -21
  20. package/dist/core/tools/speechBalloon.d.ts +3 -20
  21. package/dist/core/tools/star.d.ts +3 -20
  22. package/dist/core/tools/straight.d.ts +3 -20
  23. package/dist/core/tools/text.d.ts +2 -1
  24. package/dist/core/types.d.ts +14 -0
  25. package/dist/core/utils/indexDB.d.ts +17 -0
  26. package/dist/core/worker/base.d.ts +17 -12
  27. package/dist/core/worker/fullWorkerLocal.d.ts +25 -15
  28. package/dist/core/worker/fullWorkerService.d.ts +9 -9
  29. package/dist/core/worker/simpleWorker.d.ts +27 -0
  30. package/dist/core/worker/snapshotWork.d.ts +27 -0
  31. package/dist/core/worker/subWorkerLocal.d.ts +1 -3
  32. package/dist/core/worker/workerManager.d.ts +48 -34
  33. package/dist/fullWorker.js +252 -176
  34. package/dist/index-CNsKOzf9.mjs +9527 -0
  35. package/dist/index-CoK9t8SC.js +1 -0
  36. package/dist/index-DLovHS7O.mjs +14783 -0
  37. package/dist/index-DiIjscTK.js +1 -0
  38. package/dist/plugin/baseApplianceManager.d.ts +10 -7
  39. package/dist/plugin/baseViewContainerManager.d.ts +46 -80
  40. package/dist/plugin/displayerView.d.ts +2 -2
  41. package/dist/plugin/multi/displayer/appViewDisplayerManager.d.ts +2 -2
  42. package/dist/plugin/multi/displayer/mainViewDisplayerManager.d.ts +2 -2
  43. package/dist/plugin/single/displayer/mainViewDisplayerManager.d.ts +2 -3
  44. package/dist/plugin/types.d.ts +13 -8
  45. package/dist/style.css +1 -1
  46. package/dist/subWorker.js +252 -176
  47. package/package.json +4 -2
  48. package/cdn/fullWorker-BQclbf.js +0 -440
  49. package/cdn/subWorker-Co2GgG.js +0 -440
  50. package/dist/core/mainThread/workerMainThread.d.ts +0 -100
  51. package/dist/index-7Ry75r2W.js +0 -1
  52. package/dist/index-CEBD0CPi.mjs +0 -2779
  53. package/dist/index-Cyb4w2Wb.mjs +0 -21456
  54. package/dist/index-ggI7Ru6d.js +0 -1
@@ -3,7 +3,7 @@ import { MemberState, AppliancePluginLike } from "./types";
3
3
  import { Collector, ViewId } from "../collector";
4
4
  import { RoomMemberManager } from "../members";
5
5
  import { TextEditorManager } from "../component/textEditor";
6
- import type { Camera, Displayer, DisplayerCallbacks, IconifyInformation, Player, PriorityType, Rectangle, RequiredAppliancePluginOptions, Room, RoomMember, _ArrayTrue } from "./types";
6
+ import type { Camera, Displayer, DisplayerCallbacks, IconifyInformation, Player, Rectangle, RequiredAppliancePluginOptions, Room, RoomMember, _ArrayTrue } from "./types";
7
7
  import { CursorManager } from "../cursors";
8
8
  import { ViewContainerManager } from "./baseViewContainerManager";
9
9
  import { MasterControlForWorker } from "../core/mainEngine";
@@ -35,7 +35,6 @@ export declare abstract class BaseApplianceManager {
35
35
  private _disableEraseText?;
36
36
  private _disableCameraTransform?;
37
37
  private _disableUseWorker?;
38
- priority: PriorityType;
39
38
  effectResolve?: (value: boolean) => void;
40
39
  readonly hotkeyManager: HotkeyManager;
41
40
  readonly pluginOptions: RequiredAppliancePluginOptions;
@@ -45,8 +44,8 @@ export declare abstract class BaseApplianceManager {
45
44
  readonly worker: MasterControlForWorker;
46
45
  abstract readonly viewContainerManager: ViewContainerManager;
47
46
  readonly renderControl: RenderCotrolImple;
48
- readonly miniMapManager: MiniMapManagerImpl;
49
- readonly pluginManager: PluginManager;
47
+ readonly miniMapManager?: MiniMapManagerImpl;
48
+ readonly pluginManager?: PluginManager;
50
49
  private _isPolyfill;
51
50
  constructor(params: BaseApplianceManagerProps);
52
51
  hasPolyfillMethod(methodName: "requestIdleCallback" | "cancelIdleCallback"): boolean;
@@ -67,8 +66,11 @@ export declare abstract class BaseApplianceManager {
67
66
  set disableCameraTransform(bol: boolean);
68
67
  get disableUseWorker(): boolean;
69
68
  set disableUseWorker(bol: boolean);
70
- setPriority(priority: PriorityType): void;
71
- hasOffscreenCanvas(): boolean;
69
+ get hasOffscreenCanvas(): boolean;
70
+ get canUseTransferControlToOffscreen(): boolean;
71
+ get isUseOffscreenTransfer(): boolean;
72
+ /** 是否使用简单模式, 简单模式则无需开启 miniMap 和 plugin */
73
+ get isUseSimple(): boolean;
72
74
  bindPlugin(plugin: AppliancePluginLike): void;
73
75
  /** 激活 plugin */
74
76
  abstract activePlugin(): void;
@@ -128,5 +130,6 @@ export declare abstract class BaseApplianceManager {
128
130
  createMiniMap(viewId: string, div: HTMLElement): Promise<void>;
129
131
  destroyMiniMap(viewId: string): Promise<void>;
130
132
  insertIconify(viewId: string, iconifyInfo: IconifyInformation): void;
131
- usePlugin(plugin: Plugin): void;
133
+ usePlugin(plugin: Plugin): void | undefined;
134
+ stopDraw(viewId: string): Promise<void>;
132
135
  }
@@ -2,6 +2,8 @@ import type EventEmitter2 from "eventemitter2";
2
2
  import { ICameraOpt, ILayerOptionType, IMainMessageRenderData, IOffscreenCanvasOptionType, ViewWorkerOptions } from "../core/types";
3
3
  import { BaseSubWorkModuleProps, ApplianceManagerLike } from "./types";
4
4
  import type { CameraState, View } from "./types";
5
+ import type { DebouncedFunc, DebouncedFuncLeading } from "lodash";
6
+ import { EToolsKey } from "../core/enum";
5
7
  import { ShowFloatBarMsgValue } from "../displayer/types";
6
8
  import { UndoRedoMethod } from "../undo";
7
9
  import { BaseViewDisplayer } from "./displayerView";
@@ -66,9 +68,7 @@ export declare abstract class ViewContainerManager {
66
68
  updateTextEditorInfo(viewId: string, activeTextId?: string): void;
67
69
  setActiveMiniMap(viewId: string, show?: boolean): void;
68
70
  }
69
- /** appView容器管理器抽象 */
70
- export declare abstract class AppViewDisplayerManager {
71
- viewId: string;
71
+ export declare abstract class BaseViewDisplayerManager {
72
72
  abstract dpr: number;
73
73
  abstract width: number;
74
74
  abstract height: number;
@@ -78,8 +78,8 @@ export declare abstract class AppViewDisplayerManager {
78
78
  abstract vDom?: BaseViewDisplayer;
79
79
  abstract eventTragetElement?: HTMLDivElement;
80
80
  abstract canvasContainerRef: React.RefObject<HTMLDivElement>;
81
- abstract subLocalCanvasContainerRef: React.RefObject<HTMLDivElement>;
82
- abstract canvasTopRef: React.RefObject<HTMLCanvasElement>;
81
+ abstract subLocalCanvasContainerRef?: React.RefObject<HTMLDivElement>;
82
+ abstract canvasTopRef?: React.RefObject<HTMLCanvasElement>;
83
83
  abstract canvasServiceFloatRef: React.RefObject<HTMLCanvasElement>;
84
84
  abstract canvasFloatRef: React.RefObject<HTMLCanvasElement>;
85
85
  abstract canvasBgRef: React.RefObject<HTMLCanvasElement>;
@@ -88,26 +88,42 @@ export declare abstract class AppViewDisplayerManager {
88
88
  x: number;
89
89
  y: number;
90
90
  };
91
- private cachePoint?;
92
- private cacheCursorPoint?;
93
- private active;
94
- private toolsKey?;
95
- private cursorMouseMove;
96
- constructor(viewId: string, control: ApplianceManagerLike, internalMsgEmitter: EventEmitter2);
97
- get worker(): import("../core/mainEngine").MasterControlForWorker;
91
+ protected cachePoint?: [number, number];
92
+ protected cacheCursorPoint?: [number | undefined, number | undefined];
93
+ protected active: boolean;
94
+ protected toolsKey?: EToolsKey;
95
+ protected cursorMouseMove: (e: MouseEvent) => void;
96
+ protected cursorMouseMoveDebounced: DebouncedFunc<(e: MouseEvent) => void>;
97
+ protected cursorMouseMoveThrottled: DebouncedFuncLeading<(e: MouseEvent) => void>;
98
+ protected cursorMouseMoveFun: (e: MouseEvent) => void;
99
+ private _transferControlToOffscreenCanvas?;
100
+ get moveDelayTime(): number;
101
+ constructor(control: ApplianceManagerLike, internalMsgEmitter: EventEmitter2, viewId: string);
102
+ protected cursorMouseLeave: () => void;
98
103
  abstract setCanvassStyle(): void;
104
+ setTransferControlToOffscreenCanvas(canvas: {
105
+ bgCanvas: HTMLCanvasElement;
106
+ serviceCanvas: HTMLCanvasElement;
107
+ localCanvas: HTMLCanvasElement;
108
+ }): void;
109
+ get transferControlToOffscreenCanvas(): {
110
+ bgCanvas: OffscreenCanvas;
111
+ serviceCanvas: OffscreenCanvas;
112
+ localCanvas: OffscreenCanvas;
113
+ } | undefined;
114
+ get worker(): import("../core/mainEngine").MasterControlForWorker;
99
115
  bindToolsClass(): void;
100
116
  mountView(): void;
101
- reflashContainerOffset(): void;
102
117
  updateSize(): void;
103
- setViewId(viewId: string): void;
118
+ reflashContainerOffset(): void;
104
119
  get parentElement(): HTMLElement | null | undefined;
105
120
  destroy(): void;
106
121
  getPoint(e: any): [number, number] | undefined;
107
- getActive(): void;
122
+ getActive(): boolean;
108
123
  setActive(bol: boolean): void;
124
+ focusElement(): void;
109
125
  stopEventHandler(): Promise<void>;
110
- private getTranslate;
126
+ protected getTranslate(element: any): any[];
111
127
  protected getContainerOffset(eventTraget: HTMLDivElement, offset: {
112
128
  x: number;
113
129
  y: number;
@@ -115,83 +131,33 @@ export declare abstract class AppViewDisplayerManager {
115
131
  x: any;
116
132
  y: any;
117
133
  };
118
- get isBezier(): boolean;
119
- get moveDelayTime(): number;
120
- get maxDrawCount(): number;
121
- private checkConsumeCount;
134
+ abstract get viewId(): string;
122
135
  protected mousedown: (e: MouseEvent) => void;
123
136
  protected mousemove: (e: MouseEvent) => void;
124
137
  protected mouseup: (e: MouseEvent) => void;
125
138
  protected touchstart: (e: TouchEvent) => void;
126
139
  protected touchmove: (e: TouchEvent) => void;
127
140
  protected touchend: (e: TouchEvent) => void;
128
- protected cursorMouseLeave: () => void;
129
141
  protected keydown: (e: KeyboardEvent) => void;
130
142
  protected bindDisplayerEvent(div: HTMLDivElement): void;
131
143
  protected removeDisplayerEvent(div: HTMLDivElement): void;
144
+ get isBezier(): boolean;
145
+ get maxDrawCount(): number;
146
+ /** 检查是否超过最大绘制数量 */
147
+ checkConsumeCount(): boolean;
148
+ }
149
+ /** appView容器管理器抽象 */
150
+ export declare abstract class AppViewDisplayerManager extends BaseViewDisplayerManager {
151
+ private _viewId;
152
+ constructor(viewId: string, control: ApplianceManagerLike, internalMsgEmitter: EventEmitter2);
153
+ get viewId(): string;
154
+ setViewId(viewId: string): void;
132
155
  }
133
156
  /** 主容器管理器抽象 */
134
- export declare abstract class MainViewDisplayerManager {
135
- readonly viewId: string;
136
- readonly control: ApplianceManagerLike;
137
- readonly internalMsgEmitter: EventEmitter2;
138
- readonly commiter: UndoRedoMethod;
139
- abstract dpr: number;
140
- abstract width: number;
141
- abstract height: number;
142
- abstract vDom?: BaseViewDisplayer;
143
- abstract eventTragetElement?: HTMLDivElement;
157
+ export declare abstract class MainViewDisplayerManager extends BaseViewDisplayerManager {
144
158
  abstract snapshotContainerRef?: React.RefObject<HTMLDivElement>;
145
- abstract canvasContainerRef: React.RefObject<HTMLDivElement>;
146
- abstract subLocalCanvasContainerRef: React.RefObject<HTMLDivElement>;
147
- abstract canvasTopRef: React.RefObject<HTMLCanvasElement>;
148
- abstract canvasServiceFloatRef: React.RefObject<HTMLCanvasElement>;
149
- abstract canvasFloatRef: React.RefObject<HTMLCanvasElement>;
150
- abstract canvasBgRef: React.RefObject<HTMLCanvasElement>;
151
- abstract floatBarRef: React.RefObject<HTMLDivElement>;
152
- abstract containerOffset: {
153
- x: number;
154
- y: number;
155
- };
156
- private cachePoint?;
157
- private cacheCursorPoint?;
158
- private active;
159
- private toolsKey?;
160
- private cursorMouseMove;
161
159
  constructor(control: ApplianceManagerLike, internalMsgEmitter: EventEmitter2);
162
- abstract setCanvassStyle(): void;
163
- get worker(): import("../core/mainEngine").MasterControlForWorker;
164
- bindToolsClass(): void;
165
- mountView(): void;
160
+ get viewId(): string;
166
161
  updateSize(): void;
167
- reflashContainerOffset(): void;
168
- get parentElement(): HTMLElement | null | undefined;
169
162
  destroy(): void;
170
- getPoint(e: any): [number, number] | undefined;
171
- getActive(): boolean;
172
- setActive(bol: boolean): void;
173
- stopEventHandler(): Promise<void>;
174
- private getTranslate;
175
- protected getContainerOffset(eventTraget: HTMLDivElement, offset: {
176
- x: number;
177
- y: number;
178
- }): {
179
- x: any;
180
- y: any;
181
- };
182
- get moveDelayTime(): number;
183
- get isBezier(): boolean;
184
- get maxDrawCount(): number;
185
- /** 检查是否超过最大绘制数量 */
186
- private checkConsumeCount;
187
- protected mousedown: (e: MouseEvent) => void;
188
- protected mousemove: (e: MouseEvent) => void;
189
- protected mouseup: (e: MouseEvent) => void;
190
- protected touchstart: (e: TouchEvent) => void;
191
- protected touchmove: (e: TouchEvent) => void;
192
- protected touchend: (e: TouchEvent) => void;
193
- protected cursorMouseLeave: () => void;
194
- protected keydown: (e: KeyboardEvent) => void;
195
- protected bindDisplayerEvent(div: HTMLDivElement): void;
196
- protected removeDisplayerEvent(div: HTMLDivElement): void;
197
163
  }
@@ -8,11 +8,11 @@ export interface BaseDisplayerProps {
8
8
  refs: {
9
9
  snapshotContainerRef?: React.RefObject<HTMLDivElement>;
10
10
  canvasContainerRef: React.RefObject<HTMLDivElement>;
11
- subLocalCanvasContainerRef: React.RefObject<HTMLDivElement>;
11
+ subLocalCanvasContainerRef?: React.RefObject<HTMLDivElement>;
12
12
  canvasServiceFloatRef: React.RefObject<HTMLCanvasElement>;
13
13
  canvasFloatRef: React.RefObject<HTMLCanvasElement>;
14
14
  canvasBgRef: React.RefObject<HTMLCanvasElement>;
15
- canvasTopRef: React.RefObject<HTMLCanvasElement>;
15
+ canvasTopRef?: React.RefObject<HTMLCanvasElement>;
16
16
  floatBarRef: React.RefObject<HTMLDivElement>;
17
17
  };
18
18
  }
@@ -10,8 +10,8 @@ export declare class AppViewDisplayerManagerImpl extends AppViewDisplayerManager
10
10
  vDom?: BaseViewDisplayer;
11
11
  eventTragetElement?: HTMLDivElement;
12
12
  canvasContainerRef: React.RefObject<HTMLDivElement>;
13
- subLocalCanvasContainerRef: React.RefObject<HTMLDivElement>;
14
- canvasTopRef: React.RefObject<HTMLCanvasElement>;
13
+ subLocalCanvasContainerRef?: React.RefObject<HTMLDivElement>;
14
+ canvasTopRef?: React.RefObject<HTMLCanvasElement>;
15
15
  canvasServiceFloatRef: React.RefObject<HTMLCanvasElement>;
16
16
  canvasFloatRef: React.RefObject<HTMLCanvasElement>;
17
17
  canvasBgRef: React.RefObject<HTMLCanvasElement>;
@@ -11,8 +11,8 @@ export declare class MainViewMultiDisplayerManager extends MainViewDisplayerMana
11
11
  eventTragetElement?: HTMLDivElement;
12
12
  snapshotContainerRef?: React.RefObject<HTMLDivElement>;
13
13
  canvasContainerRef: React.RefObject<HTMLDivElement>;
14
- subLocalCanvasContainerRef: React.RefObject<HTMLDivElement>;
15
- canvasTopRef: React.RefObject<HTMLCanvasElement>;
14
+ subLocalCanvasContainerRef?: React.RefObject<HTMLDivElement>;
15
+ canvasTopRef?: React.RefObject<HTMLCanvasElement>;
16
16
  canvasServiceFloatRef: React.RefObject<HTMLCanvasElement>;
17
17
  canvasFloatRef: React.RefObject<HTMLCanvasElement>;
18
18
  canvasBgRef: React.RefObject<HTMLCanvasElement>;
@@ -8,12 +8,11 @@ export declare class MainViewSingleDisplayerManager extends MainViewDisplayerMan
8
8
  height: number;
9
9
  dpr: number;
10
10
  vDom?: BaseViewDisplayer;
11
- viewId: string;
12
11
  eventTragetElement?: HTMLDivElement;
13
12
  snapshotContainerRef?: React.RefObject<HTMLDivElement>;
14
13
  canvasContainerRef: React.RefObject<HTMLDivElement>;
15
- subLocalCanvasContainerRef: React.RefObject<HTMLDivElement>;
16
- canvasTopRef: React.RefObject<HTMLCanvasElement>;
14
+ subLocalCanvasContainerRef?: React.RefObject<HTMLDivElement>;
15
+ canvasTopRef?: React.RefObject<HTMLCanvasElement>;
17
16
  canvasServiceFloatRef: React.RefObject<HTMLCanvasElement>;
18
17
  canvasFloatRef: React.RefObject<HTMLCanvasElement>;
19
18
  canvasBgRef: React.RefObject<HTMLCanvasElement>;
@@ -1,4 +1,4 @@
1
- import type { ISerializableEventData, ISerializableStorageViewData, Uid } 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";
@@ -208,12 +208,6 @@ export interface AppliancePluginInstance {
208
208
  setWritable(writable: boolean): Promise<void>;
209
209
  /** setMemberState */
210
210
  setMemberState(modifyState: Partial<MemberState>): void;
211
- /** 设置性能优先项
212
- * @param priority 优先项, 可以是 ``ui`` 或 ``cpu``
213
- * ui: 优先绘制UI,适用于需要绘制高跟手度
214
- * cpu: 优先降低主进程CPU消耗,适用于底端设备
215
- */
216
- setPerformancePriority(priority: PriorityType): void;
217
211
  /** 获取undo */
218
212
  canUndoSteps(): number;
219
213
  /** 获取redo */
@@ -284,6 +278,15 @@ export interface AppliancePluginInstance {
284
278
  * @returns 是否存在元素
285
279
  */
286
280
  hasElements(scenePath?: string, filter?: (toolsType: EToolsKey) => boolean): boolean;
281
+ /**
282
+ * 获取场景下的所有元素
283
+ * @param scenePath 场景路径, 默认取当前聚焦的场景
284
+ * @param filter 过滤条件
285
+ * @returns 所有元素
286
+ */
287
+ getElements(scenePath?: string, filter?: (toolsType: EToolsKey) => boolean): BaseCollectorReducerAction[];
288
+ /** 停止Draw事件 */
289
+ stopDraw(viewId: string): Promise<void>;
287
290
  }
288
291
  export type Logger = {
289
292
  readonly info: (...messages: any[]) => void;
@@ -296,6 +299,8 @@ export type ExtrasOptions = {
296
299
  * mainThread: 使用主线程
297
300
  */
298
301
  useWorker?: UseWorkerType;
302
+ /** 是否使用简单模式, 默认值为 ``false`` */
303
+ useSimple?: boolean;
299
304
  /** 同步数据配置项 */
300
305
  syncOpt?: SyncOpt;
301
306
  /** 画布配置项 */
@@ -321,6 +326,7 @@ export type AppliancePluginOptions = {
321
326
  };
322
327
  export type RequiredExtrasOptions = {
323
328
  useWorker: Required<UseWorkerType>;
329
+ useSimple: Required<boolean>;
324
330
  syncOpt: Required<SyncOpt>;
325
331
  canvasOpt: Required<CanvasOpt>;
326
332
  cursor: Required<CursorOpt>;
@@ -509,7 +515,6 @@ export declare enum ActiveContainerType {
509
515
  }
510
516
  export type SpeechBalloonPlacement = "top" | "left" | "right" | "bottom" | "topLeft" | "topRight" | "bottomLeft" | "bottomRight" | "leftTop" | "leftBottom" | "rightTop" | "rightBottom";
511
517
  export type TeleBoxState = "normal" | "minimized" | "maximized";
512
- export type PriorityType = "ui" | "cpu";
513
518
  export type FilterRenderType = "show" | "hide";
514
519
  export type FilterPublishAutType = "write" | "readOnly";
515
520
  export type FilterRenderDataType = "page" | "uid";
package/dist/style.css CHANGED
@@ -1 +1 @@
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}.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-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;font-family:sans-serif;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}.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}
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}.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-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}