@netless/appliance-plugin 1.1.36-beta.0 → 1.1.36-beta.2
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 +47 -48
- package/README.md +17 -49
- package/dist/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +1 -1
- package/dist/assets/fullWorker-D9xRgd20.js +593 -0
- package/dist/assets/subWorker-DDz22vt8.js +593 -0
- package/dist/{bridge-DO3A2FRh.js → bridge-BKHuhuVK.js} +1 -1
- package/dist/bridge-g7eU9k12.mjs +67 -0
- package/dist/bridge.js +1 -1
- package/dist/bridge.mjs +1 -1
- package/dist/collector/collector.d.ts +1 -0
- package/dist/collector/types.d.ts +5 -1
- package/dist/component/textEditor/manager.d.ts +8 -1
- package/dist/component/textEditor/types.d.ts +5 -0
- package/dist/component/textEditor/utils.d.ts +21 -0
- package/dist/component/textEditor/view.d.ts +0 -4
- package/dist/core/enum.d.ts +3 -1
- package/dist/core/mainEngine.d.ts +4 -1
- package/dist/core/msgEvent/copyNode/forMain.d.ts +3 -0
- package/dist/core/msgEvent/copyNode/utils.d.ts +9 -0
- package/dist/core/msgEvent/deleteNode/forMain.d.ts +1 -0
- package/dist/core/msgEvent/setColor/forMain.d.ts +2 -0
- package/dist/core/msgEvent/setFont/forMain.d.ts +1 -0
- package/dist/core/msgEvent/setLock/forMain.d.ts +1 -0
- package/dist/core/msgEvent/setShape/forMain.d.ts +1 -0
- package/dist/core/msgEvent/setZIndex/forMain.d.ts +2 -0
- package/dist/core/tools/pencil.d.ts +1 -0
- package/dist/core/tools/selector.d.ts +4 -0
- package/dist/core/types.d.ts +6 -0
- package/dist/core/worker/fullWorkerLocal.d.ts +4 -4
- package/dist/core/worker/simpleWorker.d.ts +2 -2
- package/dist/displayer/floatBar/dragBox/activateSelectorText.d.ts +13 -0
- package/dist/displayer/floatBar/dragBox/selectorSwitch.d.ts +19 -0
- package/dist/fullWorker.js +110 -110
- package/dist/index-B7w-GcID.js +1 -0
- package/dist/index-BLzjGoXh.js +1 -0
- package/dist/{index-CqQPnW7_.js → index-BjEjHeEF.js} +1 -1
- package/dist/{index-B4Npl8dw.mjs → index-C019qtsS.mjs} +3234 -3057
- package/dist/index-CfKLCV2y.mjs +19590 -0
- package/dist/{index-DDULymwD.mjs → index-L2uoKaSf.mjs} +3234 -3057
- package/dist/index-L470yte_.js +1 -0
- package/dist/index-LBCXcuGb.mjs +19564 -0
- package/dist/{index-vfn-RVQz.js → index-PebKJQE3.js} +1 -1
- package/dist/index-Yc4OIUoM.js +1 -0
- package/dist/{index-BBcEMXkc.mjs → index-bMvJ4igq.mjs} +1 -1
- package/dist/{index-BVkfyJQn.mjs → index-hePUiGEB.mjs} +1 -1
- package/dist/plugin/baseApplianceManager.d.ts +7 -0
- package/dist/plugin/baseViewContainerManager.d.ts +23 -9
- package/dist/plugin/displayerView.d.ts +4 -1
- package/dist/plugin/elementCapability.d.ts +29 -0
- package/dist/plugin/multi/displayer/appViewDisplayerManager.d.ts +1 -0
- package/dist/plugin/multi/displayer/mainViewDisplayerManager.d.ts +1 -0
- package/dist/plugin/selectorApi.d.ts +141 -0
- package/dist/plugin/single/displayer/mainViewDisplayerManager.d.ts +1 -0
- package/dist/plugin/types.d.ts +339 -5
- package/dist/plugin/utils.d.ts +9 -0
- package/dist/style.css +1 -1
- package/dist/subWorker.js +110 -110
- package/dist/undo/index.d.ts +44 -4
- package/dist/undo/timing.d.ts +50 -0
- package/package.json +13 -4
- package/cdn/cdn.js +0 -1
- package/cdn/fullWorker-Cu37fr.js +0 -486
- package/cdn/subWorker-le1nnC.js +0 -486
- package/dist/assets/fullWorker-C_pHxd3d.js +0 -593
- package/dist/assets/subWorker-mLNCeIEX.js +0 -593
- package/dist/bridge-DskXXarZ.mjs +0 -67
- package/dist/bridge-white-web-sdk.d.ts +0 -1
- package/dist/index-B00mKJ2E.js +0 -1
- package/dist/index-BAT55jp1.mjs +0 -16599
- package/dist/index-D50QxS0c.js +0 -1
- package/dist/index-DTMQbvIh.mjs +0 -16625
- package/dist/index-DlkXPynh.js +0 -1
- package/dist/index-DoKk1ccL.js +0 -1
package/dist/plugin/types.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
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
|
+
import type { CSSProperties } from "react";
|
|
4
5
|
import type { ApplianceSingleManager } from "./single/applianceSingleManager";
|
|
5
6
|
import type { ApplianceMultiManager, WindowManager } from "./multi/applianceMultiManager";
|
|
6
7
|
import type { BaseApplianceManager } from "./baseApplianceManager";
|
|
7
8
|
import type { AppViewDisplayerManager, MainViewDisplayerManager } from "./baseViewContainerManager";
|
|
8
9
|
import type { ApplianceSinglePlugin } from "./applianceSinglePlugin";
|
|
9
10
|
import type { ApplianceMultiPlugin } from "./applianceMultiPlugin";
|
|
10
|
-
import type { ECanvasContextType, EToolsKey, EventWorkState } from "../core/enum";
|
|
11
|
+
import type { ECanvasContextType, EToolsKey, EventWorkState, EScaleType, ElayerType } from "../core/enum";
|
|
11
12
|
import type { AuthRenderScenesData } from "../core/renderCotrol";
|
|
12
13
|
import type { Plugin } from "../core/plugin";
|
|
13
|
-
import type { TextEditorInfo } from "../component/textEditor/types";
|
|
14
|
+
import type { TextEditorInfo, FontWeightType, FontStyleType, TextAlignType, VerticalAlignType, TextOptions } from "../component/textEditor/types";
|
|
14
15
|
import type { IMarkmapOptions } from "../component/svg/markmap";
|
|
15
16
|
import type { AutoShapeKind, AutoShapeMetrics } from "../core/autoShape/types";
|
|
17
|
+
import type { ShapeOptType } from "../displayer/types";
|
|
16
18
|
export type { Room, ImageInformation, Point, Size, Rectangle, RoomMember, RoomState, Player, HotKeys, Camera, Displayer, DisplayerCallbacks, CameraState, View, Cursor, CursorAdapter, RenderEngine, _MemberState, };
|
|
17
19
|
export declare enum ApplianceNames {
|
|
18
20
|
/**
|
|
@@ -133,7 +135,7 @@ export type ApplianceAdaptor = {
|
|
|
133
135
|
logger?: Logger;
|
|
134
136
|
cursorAdapter?: CursorAdapter;
|
|
135
137
|
};
|
|
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">;
|
|
138
|
+
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" | "getSelectedElements" | "updateSelectedElements" | "copySelectedElements" | "deleteSelectedElements" | "getFloatbarContainer" | "getViewOffsetToContainer">;
|
|
137
139
|
export interface AppliancePluginInstance {
|
|
138
140
|
readonly displayer: Displayer;
|
|
139
141
|
readonly currentManager?: ApplianceManagerLike;
|
|
@@ -299,6 +301,58 @@ export interface AppliancePluginInstance {
|
|
|
299
301
|
updateMarkmap(viewId: string, markmapId: MarkmapId, markdownInfo: ISVGMarkmapInformation): Promise<void>;
|
|
300
302
|
/** 插入背景图片 */
|
|
301
303
|
insertBackgroundImage(viewId: string, imageInfo: ISVGUrlInformation): void;
|
|
304
|
+
/**
|
|
305
|
+
* 获取当前 selector 选中元素的快照。
|
|
306
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的 appID。省略时取当前 focuedView / mainView。
|
|
307
|
+
* @returns 当前选中态快照;若未选中任何元素则返回 `undefined`。
|
|
308
|
+
*/
|
|
309
|
+
getSelectedElements(viewId?: string): SelectedElementsSnapshot | undefined;
|
|
310
|
+
/**
|
|
311
|
+
* 判断某个属性字段是否属于指定 toolsType 的可编辑能力。
|
|
312
|
+
* 可用于业务层按当前 selectedElements 的 toolsType 动态显示 selector floatbar 按钮。
|
|
313
|
+
*/
|
|
314
|
+
isElementPropertySupported(toolsType: EToolsKey, field: ElementPropertyField): boolean;
|
|
315
|
+
/**
|
|
316
|
+
* 取消当前 selector 选中态。异步确认模型:在 selector 真正清空并派发完相关事件后 resolve。
|
|
317
|
+
* 若当前 selector 处于 translate/scale/rotate/setPoint 中间态,会返回失败结果而不是盲清。
|
|
318
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的 appID。省略时取当前 focuedView / mainView。
|
|
319
|
+
*/
|
|
320
|
+
blurSelector(viewId?: string): Promise<ClearSelectedElementsResult>;
|
|
321
|
+
/**
|
|
322
|
+
* 更新当前 selector 选中的元素集合属性。
|
|
323
|
+
* 单白板下 arg1 为 UpdateSelectedElementChanges,arg2 可省略。
|
|
324
|
+
* 多窗口下 arg1 为 viewId,arg2 为 UpdateSelectedElementChanges。
|
|
325
|
+
*
|
|
326
|
+
*/
|
|
327
|
+
updateSelectedElements(arg1: string | UpdateSelectedElementChanges, changes?: UpdateSelectedElementChanges): Promise<UpdateSelectedElementsResult>;
|
|
328
|
+
/**
|
|
329
|
+
* 单元素最终态更新通知接口。
|
|
330
|
+
* storage-first,不表达调用返回时已经渲染完成。
|
|
331
|
+
* 不支持直接修改selector。
|
|
332
|
+
* useUndoRedoStack: 是否使用撤销重做堆栈,默认为 true。若为 false,则不会记录撤销重做堆栈。
|
|
333
|
+
*/
|
|
334
|
+
updateElement(elementId: string, scenePath: string, viewId: string, updateElementInfo: UpdateElementInfo, useUndoRedoStack?: boolean): Promise<boolean>;
|
|
335
|
+
/**
|
|
336
|
+
* 复制当前 selector 选中的元素,返回新创建的元素 id 列表。
|
|
337
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的 appID。省略时取当前 focuedView / mainView。
|
|
338
|
+
*/
|
|
339
|
+
copySelectedElements(viewId?: string): Promise<CopySelectedElementsResult>;
|
|
340
|
+
/**
|
|
341
|
+
* 删除当前 selector 选中的元素,返回被删除的元素 id 列表。
|
|
342
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的 appID。省略时取当前 focuedView / mainView。
|
|
343
|
+
*/
|
|
344
|
+
deleteSelectedElements(viewId?: string): Promise<DeleteSelectedElementsResult>;
|
|
345
|
+
/**
|
|
346
|
+
* 获取当前 view 内供业务自定义 floatbar 使用的挂载容器。
|
|
347
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的 appID。省略时取当前 focuedView / mainView。
|
|
348
|
+
*/
|
|
349
|
+
getFloatbarContainer(viewId?: string): HTMLElement | undefined;
|
|
350
|
+
/**
|
|
351
|
+
* 获取 view DOM 原点到指定 container DOM 原点的偏移。
|
|
352
|
+
* @param container 自定义 floatbar 实际挂载的外部容器。
|
|
353
|
+
* @param viewId 多白板下白板ID, 主白板ID为 `mainView`, 其他白板ID为 addApp() return 的 appID。省略时取当前 focuedView / mainView。
|
|
354
|
+
*/
|
|
355
|
+
getViewOffsetToContainer(container: HTMLElement, viewId?: string): SelectorViewOffset | undefined;
|
|
302
356
|
}
|
|
303
357
|
export type Logger = {
|
|
304
358
|
readonly info: (...messages: any[]) => void;
|
|
@@ -341,12 +395,35 @@ export type ExtrasOptions = {
|
|
|
341
395
|
undoRedo?: UndoRedoOpt;
|
|
342
396
|
/** markmap 配置项 */
|
|
343
397
|
markmap?: MarkmapOpt;
|
|
398
|
+
/** 覆盖 selector DOM 的内联样式 */
|
|
399
|
+
overwriteSelectorStyles?: SelectorStyleOverrides;
|
|
400
|
+
};
|
|
401
|
+
export type SelectorStyleOverrides = {
|
|
402
|
+
/** `.appliance-plugin-highlight-box` 外框样式 */
|
|
403
|
+
highlightBox?: CSSProperties;
|
|
404
|
+
/** `.appliance-plugin-highlight-box .point` 控制点样式 */
|
|
405
|
+
highlightBoxPoint?: CSSProperties;
|
|
406
|
+
/** 按方向覆盖普通 resize 控制点样式 */
|
|
407
|
+
highlightBoxPoints?: Partial<Record<SelectorResizePointName, CSSProperties>>;
|
|
408
|
+
/** `.appliance-plugin-highlight-box .point.point-dot` 端点控制点样式 */
|
|
409
|
+
highlightBoxPointDot?: CSSProperties;
|
|
410
|
+
/** `.appliance-plugin-highlight-box .lock` 锁定图标样式 */
|
|
411
|
+
highlightBoxLock?: CSSProperties;
|
|
344
412
|
};
|
|
413
|
+
export type SelectorResizePointName = "LT" | "LC" | "LB" | "TC" | "RT" | "RC" | "RB" | "BC";
|
|
345
414
|
export type UndoRedoOpt = {
|
|
346
415
|
/** 是否启用全局撤销重做, 默认值为 false */
|
|
347
|
-
enableGlobal
|
|
416
|
+
enableGlobal?: boolean;
|
|
348
417
|
/** 撤销重做最大堆栈长度, 默认值为 20 */
|
|
349
418
|
maxStackLength?: number;
|
|
419
|
+
/** 是否启用 undo 时序补丁, 默认值为 true */
|
|
420
|
+
timingFix?: boolean;
|
|
421
|
+
/** 首个 ack 到达后的兜底超时时间,单位:毫秒,默认值为 5000 */
|
|
422
|
+
ackTimeout?: number;
|
|
423
|
+
/** 新 ticker 抢占旧 ticker 时的宽限超时时间,单位:毫秒,默认值为 3000 */
|
|
424
|
+
gracePeriodTimeout?: number;
|
|
425
|
+
/** Doing 链路无 ack 时的兜底超时时间,单位:毫秒,默认值为 30000 */
|
|
426
|
+
doingFallbackTimeout?: number;
|
|
350
427
|
};
|
|
351
428
|
export type MarkmapOpt = {
|
|
352
429
|
/** 是否启用 markmap, 默认值为 true */
|
|
@@ -403,6 +480,7 @@ export type RequiredExtrasOptions = {
|
|
|
403
480
|
normalStroke: Required<NormalOpt>;
|
|
404
481
|
undoRedo: Required<UndoRedoOpt>;
|
|
405
482
|
markmap: Required<MarkmapOpt>;
|
|
483
|
+
overwriteSelectorStyles: SelectorStyleOverrides;
|
|
406
484
|
};
|
|
407
485
|
export type RequiredAppliancePluginOptions = {
|
|
408
486
|
cdn: CdnOpt;
|
|
@@ -569,7 +647,9 @@ export declare enum EmitEventType {
|
|
|
569
647
|
/** 激活方法动作 */
|
|
570
648
|
ActiveMethod = "ActiveMethod",
|
|
571
649
|
/** 隐藏浮动按钮 */
|
|
572
|
-
HidFloatBarBtn = "HidFloatBarBtn"
|
|
650
|
+
HidFloatBarBtn = "HidFloatBarBtn",
|
|
651
|
+
/** 选择中动作 */
|
|
652
|
+
SelectMethod = "SelectMethod"
|
|
573
653
|
}
|
|
574
654
|
export declare enum InternalMsgEmitterType {
|
|
575
655
|
MainEngine = "MainEngine",
|
|
@@ -636,6 +716,14 @@ export type PublicListener = {
|
|
|
636
716
|
autoShape: (info: AutoShapeDebugInfo) => void;
|
|
637
717
|
/** 同步数据变化 */
|
|
638
718
|
syncStorageChange: (storage: ISerializableStorageViewData) => void;
|
|
719
|
+
/** selector 选中集合变化(仅 selectedIds 变化时触发,不携带中间态) */
|
|
720
|
+
selectedElementsChange: (payload: SelectedElementsChangeInfo) => void;
|
|
721
|
+
/** selector 几何变化(只表示最终 geometry 结果) */
|
|
722
|
+
selectorGeometryChange: (payload: SelectorGeometryChangeInfo) => void;
|
|
723
|
+
/** selector 拖拽/拉伸/旋转/端点编辑等过程态 */
|
|
724
|
+
selectorTransformChange: (payload: SelectorTransformChangeInfo) => void;
|
|
725
|
+
/** 远端 / 被同步端 selector 的同步结果变化(不承诺 phase) */
|
|
726
|
+
remoteSelectorChange: (payload: RemoteSelectorChangeInfo) => void;
|
|
639
727
|
};
|
|
640
728
|
export type PublicEvent = keyof PublicListener;
|
|
641
729
|
export type PublicCallback<T extends PublicEvent> = PublicListener[T];
|
|
@@ -725,3 +813,249 @@ export type ISVGMarkmapInformation = ISVGBaseInformation & {
|
|
|
725
813
|
};
|
|
726
814
|
export type ISVGInformation = ISVGUrlInformation | ISVGMarkmapInformation;
|
|
727
815
|
export type MarkmapId = string;
|
|
816
|
+
/** selector 视图坐标系下的矩形(当前 view / DOM 视图坐标系,非 worldRect) */
|
|
817
|
+
export type SelectorViewRect = {
|
|
818
|
+
x: number;
|
|
819
|
+
y: number;
|
|
820
|
+
w: number;
|
|
821
|
+
h: number;
|
|
822
|
+
};
|
|
823
|
+
/** view DOM 原点相对外部 container DOM 原点的偏移 */
|
|
824
|
+
export type SelectorViewOffset = {
|
|
825
|
+
x: number;
|
|
826
|
+
y: number;
|
|
827
|
+
viewId: string;
|
|
828
|
+
};
|
|
829
|
+
/** 当前选中元素的单条结构化信息 */
|
|
830
|
+
export type SelectedElementInfo = {
|
|
831
|
+
id: string;
|
|
832
|
+
toolsType: EToolsKey;
|
|
833
|
+
rect?: SelectorViewRect;
|
|
834
|
+
centerPos?: [number, number];
|
|
835
|
+
canRotate?: boolean;
|
|
836
|
+
canLock?: boolean;
|
|
837
|
+
scaleType?: EScaleType;
|
|
838
|
+
isLocked?: boolean;
|
|
839
|
+
style: SelectedElementStyle;
|
|
840
|
+
text?: SelectedElementTextInfo;
|
|
841
|
+
shape?: SelectedElementShapeInfo;
|
|
842
|
+
};
|
|
843
|
+
export type SelectedElementStyle = {
|
|
844
|
+
strokeColor?: string;
|
|
845
|
+
fillColor?: string;
|
|
846
|
+
thickness?: number;
|
|
847
|
+
strokeType?: EStrokeType;
|
|
848
|
+
fontColor?: string;
|
|
849
|
+
fontBgColor?: string;
|
|
850
|
+
zIndex?: number;
|
|
851
|
+
};
|
|
852
|
+
export type SelectedElementTextInfo = {
|
|
853
|
+
text?: string;
|
|
854
|
+
fontSize?: number;
|
|
855
|
+
fontFamily?: string;
|
|
856
|
+
bold?: FontWeightType;
|
|
857
|
+
italic?: FontStyleType;
|
|
858
|
+
underline?: boolean;
|
|
859
|
+
lineThrough?: boolean;
|
|
860
|
+
textAlign?: TextAlignType;
|
|
861
|
+
verticalAlign?: VerticalAlignType;
|
|
862
|
+
boxPoint?: [number, number];
|
|
863
|
+
boxSize?: [number, number];
|
|
864
|
+
};
|
|
865
|
+
export type SelectedElementShapeInfo = {
|
|
866
|
+
vertices?: number;
|
|
867
|
+
innerVerticeStep?: number;
|
|
868
|
+
innerRatio?: number;
|
|
869
|
+
placement?: SpeechBalloonPlacement;
|
|
870
|
+
};
|
|
871
|
+
export type SelectorInfo = {
|
|
872
|
+
canRotate?: boolean;
|
|
873
|
+
canLock?: boolean;
|
|
874
|
+
isLocked?: boolean;
|
|
875
|
+
scaleType?: EScaleType;
|
|
876
|
+
selectorColor?: string;
|
|
877
|
+
strokeColor?: string;
|
|
878
|
+
fillColor?: string;
|
|
879
|
+
thickness?: number;
|
|
880
|
+
strokeType?: EStrokeType;
|
|
881
|
+
useStroke?: boolean;
|
|
882
|
+
toolsTypes?: EToolsKey[];
|
|
883
|
+
shapeOpt?: ShapeOptType;
|
|
884
|
+
textOpt?: TextOptions;
|
|
885
|
+
};
|
|
886
|
+
/** 主动查询当前选中态的返回快照 */
|
|
887
|
+
export type SelectedElementsSnapshot = {
|
|
888
|
+
viewId: string;
|
|
889
|
+
scenePath?: string;
|
|
890
|
+
/** 当前 view / DOM 视图坐标系下的 selector 矩形 */
|
|
891
|
+
viewRect?: SelectorViewRect;
|
|
892
|
+
selectedIds: string[];
|
|
893
|
+
selectedElements: SelectedElementInfo[];
|
|
894
|
+
};
|
|
895
|
+
/** `selectedElementsChange` 事件载荷:只在 selectedIds 变化时触发 */
|
|
896
|
+
export type SelectedElementsChangeInfo = {
|
|
897
|
+
viewId: string;
|
|
898
|
+
scenePath?: string;
|
|
899
|
+
selectorId: string;
|
|
900
|
+
reason: "select" | "clear";
|
|
901
|
+
viewRect?: SelectorViewRect;
|
|
902
|
+
selectedIds: string[];
|
|
903
|
+
selectorInfo?: SelectorInfo;
|
|
904
|
+
};
|
|
905
|
+
/** `selectorGeometryChange` 事件载荷 */
|
|
906
|
+
export type SelectorGeometryChangeInfo = {
|
|
907
|
+
viewId: string;
|
|
908
|
+
scenePath?: string;
|
|
909
|
+
selectorId: string;
|
|
910
|
+
source: "selector-action" | "property-change" | "camera-change";
|
|
911
|
+
action: "select" | "clear" | "selectorTransform" | "setFontStyle" | "setStyle" | "cameraTransform";
|
|
912
|
+
/** 当前 view / DOM 视图坐标系下的 selector 矩形 */
|
|
913
|
+
viewRect?: SelectorViewRect;
|
|
914
|
+
/** 触发本次变化的请求 id(仅来自 updateSelectedElements/blurSelector 时存在) */
|
|
915
|
+
requestId?: string;
|
|
916
|
+
};
|
|
917
|
+
export type SelectorTransformChangeInfo = {
|
|
918
|
+
viewId: string;
|
|
919
|
+
emitEventType: EmitEventType;
|
|
920
|
+
workState: EventWorkState;
|
|
921
|
+
};
|
|
922
|
+
export type UpdateSelectedElementChanges = {
|
|
923
|
+
/**
|
|
924
|
+
* Shape 参数更新时传给 SetShapeOpt 的真实教具类型。
|
|
925
|
+
* 例如更新 Star 的 shape.vertices 时传 EToolsKey.Star。
|
|
926
|
+
*/
|
|
927
|
+
toolsType?: EToolsKey;
|
|
928
|
+
strokeColor?: string;
|
|
929
|
+
fillColor?: string;
|
|
930
|
+
thickness?: number;
|
|
931
|
+
strokeType?: EStrokeType;
|
|
932
|
+
fontColor?: string;
|
|
933
|
+
fontBgColor?: string;
|
|
934
|
+
fontSize?: number;
|
|
935
|
+
bold?: FontWeightType;
|
|
936
|
+
italic?: FontStyleType;
|
|
937
|
+
underline?: boolean;
|
|
938
|
+
lineThrough?: boolean;
|
|
939
|
+
isLocked?: boolean;
|
|
940
|
+
zIndexLayer?: ElayerType;
|
|
941
|
+
shape?: {
|
|
942
|
+
vertices?: number;
|
|
943
|
+
innerVerticeStep?: number;
|
|
944
|
+
innerRatio?: number;
|
|
945
|
+
placement?: SpeechBalloonPlacement;
|
|
946
|
+
};
|
|
947
|
+
};
|
|
948
|
+
export type ElementPropertyField = "strokeColor" | "fillColor" | "thickness" | "strokeType" | "fontColor" | "fontBgColor" | "fontSize" | "bold" | "italic" | "underline" | "lineThrough" | "isLocked" | "zIndexLayer" | "shape.vertices" | "shape.innerVerticeStep" | "shape.innerRatio" | "shape.placement";
|
|
949
|
+
type UpdateElementBaseInfo<T extends EToolsKey> = {
|
|
950
|
+
toolsType: T;
|
|
951
|
+
isLocked?: boolean;
|
|
952
|
+
zIndexLayer?: ElayerType;
|
|
953
|
+
};
|
|
954
|
+
type UpdateStrokeStyleInfo = {
|
|
955
|
+
strokeColor?: string;
|
|
956
|
+
thickness?: number;
|
|
957
|
+
strokeType?: EStrokeType;
|
|
958
|
+
};
|
|
959
|
+
type UpdateFillStyleInfo = {
|
|
960
|
+
fillColor?: string;
|
|
961
|
+
};
|
|
962
|
+
type UpdateTextStyleInfo = {
|
|
963
|
+
fontColor?: string;
|
|
964
|
+
fontBgColor?: string;
|
|
965
|
+
fontSize?: number;
|
|
966
|
+
bold?: FontWeightType;
|
|
967
|
+
italic?: FontStyleType;
|
|
968
|
+
underline?: boolean;
|
|
969
|
+
lineThrough?: boolean;
|
|
970
|
+
};
|
|
971
|
+
export type UpdateTextElementInfo = UpdateElementBaseInfo<EToolsKey.Text> & UpdateTextStyleInfo;
|
|
972
|
+
export type UpdateLineElementInfo = UpdateElementBaseInfo<EToolsKey.Pencil | EToolsKey.LaserPen | EToolsKey.Arrow | EToolsKey.Straight> & UpdateStrokeStyleInfo;
|
|
973
|
+
export type UpdateBasicShapeElementInfo = UpdateElementBaseInfo<EToolsKey.Rectangle | EToolsKey.Ellipse | EToolsKey.Triangle | EToolsKey.Rhombus> & UpdateStrokeStyleInfo & UpdateFillStyleInfo;
|
|
974
|
+
export type UpdatePolygonElementInfo = UpdateElementBaseInfo<EToolsKey.Polygon> & UpdateStrokeStyleInfo & UpdateFillStyleInfo & {
|
|
975
|
+
shape?: {
|
|
976
|
+
vertices?: number;
|
|
977
|
+
};
|
|
978
|
+
};
|
|
979
|
+
export type UpdateStarElementInfo = UpdateElementBaseInfo<EToolsKey.Star> & UpdateStrokeStyleInfo & UpdateFillStyleInfo & {
|
|
980
|
+
shape?: {
|
|
981
|
+
vertices?: number;
|
|
982
|
+
innerVerticeStep?: number;
|
|
983
|
+
innerRatio?: number;
|
|
984
|
+
};
|
|
985
|
+
};
|
|
986
|
+
export type UpdateSpeechBalloonElementInfo = UpdateElementBaseInfo<EToolsKey.SpeechBalloon> & UpdateStrokeStyleInfo & UpdateFillStyleInfo & {
|
|
987
|
+
shape?: {
|
|
988
|
+
placement?: SpeechBalloonPlacement;
|
|
989
|
+
};
|
|
990
|
+
};
|
|
991
|
+
export type UpdateImageElementInfo = UpdateElementBaseInfo<EToolsKey.Image>;
|
|
992
|
+
export type UpdateBackgroundSvgElementInfo = UpdateElementBaseInfo<EToolsKey.BackgroundSVG>;
|
|
993
|
+
export type UpdateElementInfo = UpdateTextElementInfo | UpdateLineElementInfo | UpdateBasicShapeElementInfo | UpdatePolygonElementInfo | UpdateStarElementInfo | UpdateSpeechBalloonElementInfo | UpdateImageElementInfo | UpdateBackgroundSvgElementInfo;
|
|
994
|
+
export type UpdateSelectedElementsFailReason = "no-selection" | "busy" | "selector-transforming" | "unsupported-change" | "worker-failed" | "no-writable permission";
|
|
995
|
+
export type UpdateSelectedElementsResult = {
|
|
996
|
+
ok: true;
|
|
997
|
+
requestId: string;
|
|
998
|
+
viewId: string;
|
|
999
|
+
selectedIds: string[];
|
|
1000
|
+
appliedIds: string[];
|
|
1001
|
+
skippedIds?: string[];
|
|
1002
|
+
warnings?: Array<UpdateElementWarning>;
|
|
1003
|
+
geometryChanged?: boolean;
|
|
1004
|
+
} | {
|
|
1005
|
+
ok: false;
|
|
1006
|
+
requestId: string;
|
|
1007
|
+
viewId: string;
|
|
1008
|
+
reason: UpdateSelectedElementsFailReason;
|
|
1009
|
+
selectedIds?: string[];
|
|
1010
|
+
skippedIds?: string[];
|
|
1011
|
+
warnings?: Array<UpdateElementWarning>;
|
|
1012
|
+
geometryChanged?: boolean;
|
|
1013
|
+
};
|
|
1014
|
+
export type ClearSelectedElementsFailReason = "busy" | "selector-transforming" | "no-selection";
|
|
1015
|
+
export type ClearSelectedElementsResult = {
|
|
1016
|
+
ok: true;
|
|
1017
|
+
requestId: string;
|
|
1018
|
+
} | {
|
|
1019
|
+
ok: false;
|
|
1020
|
+
requestId: string;
|
|
1021
|
+
reason: ClearSelectedElementsFailReason;
|
|
1022
|
+
};
|
|
1023
|
+
/** 远端 / 被同步端 selector 同步结果变化 */
|
|
1024
|
+
export type RemoteSelectorChangeInfo = {
|
|
1025
|
+
viewId: string;
|
|
1026
|
+
scenePath?: string;
|
|
1027
|
+
uid: string;
|
|
1028
|
+
selectorId: string;
|
|
1029
|
+
source: "sync";
|
|
1030
|
+
action: "select" | "clear" | "update";
|
|
1031
|
+
viewRect?: SelectorViewRect;
|
|
1032
|
+
selectedIds: string[];
|
|
1033
|
+
selectedElements?: SelectedElementInfo[];
|
|
1034
|
+
};
|
|
1035
|
+
export type UpdateElementWarningCode = "unsupported-by-toolsType" | "unsupported-value" | "normalized-value";
|
|
1036
|
+
export type UpdateElementWarning = {
|
|
1037
|
+
id: string;
|
|
1038
|
+
field: string;
|
|
1039
|
+
code: UpdateElementWarningCode;
|
|
1040
|
+
toolsType?: EToolsKey;
|
|
1041
|
+
message: string;
|
|
1042
|
+
};
|
|
1043
|
+
export type CopySelectedElementsResult = {
|
|
1044
|
+
ok: true;
|
|
1045
|
+
requestId: string;
|
|
1046
|
+
sourceSelectedIds: string[];
|
|
1047
|
+
createdIds: string[];
|
|
1048
|
+
} | {
|
|
1049
|
+
ok: false;
|
|
1050
|
+
requestId: string;
|
|
1051
|
+
reason: ClearSelectedElementsFailReason;
|
|
1052
|
+
};
|
|
1053
|
+
export type DeleteSelectedElementsResult = {
|
|
1054
|
+
ok: true;
|
|
1055
|
+
requestId: string;
|
|
1056
|
+
removedIds: string[];
|
|
1057
|
+
} | {
|
|
1058
|
+
ok: false;
|
|
1059
|
+
requestId: string;
|
|
1060
|
+
reason: ClearSelectedElementsFailReason;
|
|
1061
|
+
};
|
package/dist/plugin/utils.d.ts
CHANGED
|
@@ -7,8 +7,17 @@ export declare function getPosition(event: any): {
|
|
|
7
7
|
};
|
|
8
8
|
export declare class LoggerUtils implements Logger {
|
|
9
9
|
private _logger?;
|
|
10
|
+
private pendingArgsByChannel;
|
|
11
|
+
private flushTimerByChannel;
|
|
10
12
|
constructor(_logger?: Logger);
|
|
13
|
+
private emit;
|
|
14
|
+
private flush;
|
|
15
|
+
private debounce;
|
|
11
16
|
error(...args: any[]): void;
|
|
12
17
|
info(...args: any[]): void;
|
|
13
18
|
warn(...args: any[]): void;
|
|
19
|
+
errorDebounced(channel: string, ...args: any[]): void;
|
|
20
|
+
infoDebounced(channel: string, ...args: any[]): void;
|
|
21
|
+
warnDebounced(channel: string, ...args: any[]): void;
|
|
22
|
+
destroy(): void;
|
|
14
23
|
}
|
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}.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}
|
|
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-custom-floatbar-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none;z-index:3}.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-highlight-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-highlight-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-highlight-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-highlight-box .LT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .LC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .LB{left:0}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .LT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .TC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .RT{top:0}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .RT,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .RC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .RB{right:-7px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .RB,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .BC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .LB{bottom:-7px}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .RC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .LC{top:50%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .TC,.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-box .BC{left:50%}.index-module__Container__nLsM3 .index-module__FloatBar__cm-EL .appliance-plugin-highlight-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}
|