@jnrs/lingshu-smart 2.2.33 → 2.2.35

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 (68) hide show
  1. package/AGENTS.md +60 -4
  2. package/README.md +141 -0
  3. package/dist/components/debug/DataLogPanel.vue.d.ts +44 -0
  4. package/dist/components/debug/DebugPanel.vue.d.ts +61 -0
  5. package/dist/components/debug/PerformanceStats.vue.d.ts +42 -0
  6. package/dist/components/debug/ScriptRunner/ConfigPanel.vue.d.ts +39 -0
  7. package/dist/components/debug/ScriptRunner/StepsPanel.vue.d.ts +50 -0
  8. package/dist/components/debug/ScriptRunner/index.vue.d.ts +16 -0
  9. package/dist/components/debug/ScriptRunner/script.d.ts +100 -0
  10. package/dist/components/debug/WsProxy/ConfigEditor.vue.d.ts +18 -0
  11. package/dist/components/debug/WsProxy/ConnPanel.vue.d.ts +24 -0
  12. package/dist/components/debug/WsProxy/WsProxyPage.vue.d.ts +14 -0
  13. package/dist/components/debug/WsProxy/broadcast.d.ts +31 -0
  14. package/dist/components/debug/WsProxy/index.vue.d.ts +39 -0
  15. package/dist/components/debug/WsProxy/proxy.d.ts +159 -0
  16. package/dist/components/editor/ControlBar/CaseTitleEdit.vue.d.ts +100 -100
  17. package/dist/components/editor/DrawingBoard.vue.d.ts +3 -1
  18. package/dist/components/editor/OptionCard/Equipment/models/PartConfig.vue.d.ts +2 -0
  19. package/dist/components/editor/index.vue.d.ts +3 -1
  20. package/dist/components/index.d.ts +5 -1
  21. package/dist/components/index.js +31930 -2056
  22. package/dist/components/preview/index.vue.d.ts +1859 -3
  23. package/dist/composables/useDebugEasterEgg.d.ts +2 -0
  24. package/dist/controller/AppController.d.ts +11 -0
  25. package/dist/controller/EditorController.d.ts +1 -1
  26. package/dist/index.js +153 -17
  27. package/dist/lingshu-smart/wsProxyConfig.json +495 -0
  28. package/dist/locales/en.d.ts +45 -0
  29. package/dist/locales/i18next.d.ts +102 -1
  30. package/dist/locales/index.js +94 -4
  31. package/dist/locales/zhCn.d.ts +45 -0
  32. package/dist/playground/ViewPageDemo.vue.d.ts +3802 -6
  33. package/dist/stores/index.d.ts +1 -0
  34. package/dist/stores/useAppStore.d.ts +5565 -3
  35. package/dist/stores/useDataStore.d.ts +5565 -3
  36. package/dist/stores/useDebugStore.d.ts +485 -0
  37. package/dist/stores/useEditorStore.d.ts +5 -2
  38. package/dist/types/app.types.d.ts +3 -0
  39. package/dist/types/components/config.types.d.ts +1 -0
  40. package/dist/types/components/operating.types.d.ts +1 -0
  41. package/dist/types/enums.d.ts +1 -0
  42. package/dist/types/guards.d.ts +1 -0
  43. package/dist/types/models/config.types.d.ts +9 -1
  44. package/dist/types/models/operating.types.d.ts +21 -1
  45. package/dist/ui/abstract/BaseAbs.d.ts +23 -0
  46. package/dist/ui/abstract/ComponentAbs.d.ts +3 -15
  47. package/dist/ui/abstract/ModelAbs.d.ts +17 -17
  48. package/dist/ui/components/Light.d.ts +5 -0
  49. package/dist/ui/components/StationSlot.d.ts +7 -2
  50. package/dist/ui/components/StationSlotGroup.d.ts +5 -0
  51. package/dist/ui/models/CleaningMachine.d.ts +2 -0
  52. package/dist/ui/models/DoubleJointRobot.d.ts +2 -0
  53. package/dist/ui/models/LoadingStation.d.ts +2 -0
  54. package/dist/ui/models/MachineTool.d.ts +2 -0
  55. package/dist/ui/models/MarkingMachine.d.ts +2 -0
  56. package/dist/ui/models/ResourceStore.d.ts +7 -0
  57. package/dist/ui/models/Rgv.d.ts +2 -0
  58. package/dist/ui/models/ShuttleStation.d.ts +21 -0
  59. package/dist/ui/models/SingleJointRobot.d.ts +2 -0
  60. package/dist/utils/debug-flags.d.ts +9 -0
  61. package/dist/utils/formatOperating.d.ts +7 -0
  62. package/dist/utils/index.d.ts +19 -15
  63. package/dist/utils/logger.d.ts +22 -0
  64. package/dist/utils/performance-stats.d.ts +38 -0
  65. package/package.json +5 -3
  66. package/dist/index-g6O0IWAC.js +0 -24879
  67. package/dist/playground/mockWebSocketData.d.ts +0 -23
  68. /package/dist/{json → lingshu-smart}/cases.json +0 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @File : broadcast.ts
3
+ * @Desc. : WsProxy 跨标签页数据流转(BroadcastChannel)
4
+ * 独立标签页运行代理器(standalone)时,将转换后的 operating / raw / 状态
5
+ * 通过 BroadcastChannel 广播给同源的其他标签页(如数字孪生预览页),
6
+ * 实现「独立 tab 配置代理 → 预览页驱动图形运转」的数据流转。
7
+ */
8
+ /** 广播频道名:同源多个标签页共享 */
9
+ export declare const PROXY_CHANNEL = "jnrs-wsproxy-v1";
10
+ /** 广播消息类型 */
11
+ export type ProxyBroadcastMsg = {
12
+ type: 'operating';
13
+ data: unknown;
14
+ } | {
15
+ type: 'raw';
16
+ data: unknown;
17
+ } | {
18
+ type: 'status';
19
+ connected: boolean;
20
+ };
21
+ /**
22
+ * 创建广播通道
23
+ * @returns BroadcastChannel 实例(浏览器不支持时返回 null)
24
+ */
25
+ export declare function createProxyChannel(): BroadcastChannel | null;
26
+ /** 向广播通道发送消息(standalone 代理器广播用) */
27
+ export declare function broadcastProxy(channel: BroadcastChannel | null, msg: ProxyBroadcastMsg): void;
28
+ /** 订阅广播通道消息(预览页接收用),返回取消订阅函数 */
29
+ export declare function subscribeProxy(channel: BroadcastChannel | null, handler: (msg: ProxyBroadcastMsg) => void): () => void;
30
+ /** 关闭广播通道 */
31
+ export declare function closeProxyChannel(channel: BroadcastChannel | null): void;
@@ -0,0 +1,39 @@
1
+ import { ILayerOperating, IScene } from '../../../types';
2
+ import { WsProxyConfig, ProxyRule, DictFn } from './proxy';
3
+ type __VLS_Props = {
4
+ /** 是否自动应用注入的消息(父组件调用 expose 的 feedMessage 时) */
5
+ autoApply?: boolean;
6
+ /** 初始配置 */
7
+ config?: WsProxyConfig;
8
+ /** 场景信息:用于字段映射中 percentToPixel 换算(如 currentCase.scene) */
9
+ scene?: IScene | null;
10
+ /** 字典转换函数:用于「字典 Label / 字典 Color」特殊处理
11
+ * 入参 (name: string, value?: string|number, type: 'label'|'color'),返回 string 赋给画布字段 */
12
+ dictFn?: DictFn;
13
+ /** 独立标签页模式:全屏布局,自动打开,并将 operating/raw/状态 通过 BroadcastChannel 广播 */
14
+ standalone?: boolean;
15
+ /** 远程接收模式:监听 BroadcastChannel,将独立代理器广播的 operating/raw/状态 透传给父组件 */
16
+ remote?: boolean;
17
+ };
18
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {
19
+ open: () => void;
20
+ feedMessage: (rawMessage: any) => void;
21
+ setConfig: (cfg: WsProxyConfig) => void;
22
+ isConnected: import('vue').Ref<boolean, boolean>;
23
+ rules: import('vue').ComputedRef<ProxyRule[]>;
24
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
25
+ operating: (data: ILayerOperating) => any;
26
+ raw: (data: unknown) => any;
27
+ "status-change": (connected: boolean) => any;
28
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
29
+ onOperating?: ((data: ILayerOperating) => any) | undefined;
30
+ onRaw?: ((data: unknown) => any) | undefined;
31
+ "onStatus-change"?: ((connected: boolean) => any) | undefined;
32
+ }>, {
33
+ scene: IScene | null;
34
+ config: WsProxyConfig;
35
+ remote: boolean;
36
+ autoApply: boolean;
37
+ standalone: boolean;
38
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
39
+ export default _default;
@@ -0,0 +1,159 @@
1
+ import { ILayerOperating, IScene } from '../../../types';
2
+ /** 条件判断项:当源值满足 operator + operand 条件时,将 value 赋给画布字段 */
3
+ export interface ConditionRule {
4
+ /** 比较运算符 */
5
+ operator: 'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte' | 'includes' | 'in';
6
+ /** 比较目标值('in' 运算符时为逗号分隔的列表,如 '1,2,3') */
7
+ operand: string;
8
+ /** 条件为 true 时赋给画布字段的值 */
9
+ value: string | number | boolean;
10
+ }
11
+ /** 字段映射项:将一个 operating 目标字段映射到 payload 源字段/常量/值映射 */
12
+ export interface FieldMapper {
13
+ /** operating 目标路径(支持点号嵌套,如 light.color) */
14
+ target: string;
15
+ /** payload 源字段路径(支持点号嵌套,如 displayColor) */
16
+ source?: string;
17
+ /** 常量值(与 source 互斥,优先级最高) */
18
+ constant?: boolean | number | string;
19
+ /** 值映射:把源字段的取值映射为指定值(键为源值字符串,如 { '1': true }) */
20
+ valueMap?: Record<string, boolean | number | string>;
21
+ /** 源字段为空或未命中 valueMap 时的兜底值 */
22
+ defaultValue?: boolean | number | string;
23
+ /** 是否启用该映射(默认 true) */
24
+ enabled?: boolean;
25
+ /** 特殊处理:'percentToPixel' 百分比转像素 / 'runtimeToPixel' 运行时坐标转像素 / 'dictLabel' 字典Label / 'dictColor' 字典Color / 'condition' 条件判断;为空表示不处理 */
26
+ transform?: 'percentToPixel' | 'runtimeToPixel' | 'dictLabel' | 'dictColor' | 'condition';
27
+ /** 换算维度(transform 为 percentToPixel / runtimeToPixel 时必填):'width' 横向 / 'height' 纵向 */
28
+ transformType?: 'width' | 'height';
29
+ /** 换算精度(transform 为 percentToPixel 时生效,默认 2) */
30
+ transformPrecision?: number;
31
+ /** 字典名称(transform 为 dictLabel / dictColor 时生效,传给 dictFn 的 name 入参) */
32
+ dictName?: string;
33
+ /** 条件判断列表(transform 为 'condition' 时生效,按顺序匹配首个为 true 的条件,赋其 value 给画布字段;无匹配时保持源值) */
34
+ conditions?: ConditionRule[];
35
+ }
36
+ /** 字典转换函数:将「源业务数据」字段值按字典名称转换为「画布字段」值
37
+ * @param name 特殊处理配置下的字典名称(dictName)
38
+ * @param value 源业务数据字段所对应的值
39
+ * @param type 'label' 字典Label / 'color' 字典Color
40
+ * @returns 转换后的字符串值,赋值给画布字段 */
41
+ export type DictFn = (name: string, value: string | number | undefined, type: 'label' | 'color') => string;
42
+ /** 资源操作字段配置:定义 payload 中各字段的来源路径 */
43
+ export interface ResourceFieldConfig {
44
+ /** 资源 className 的源字段路径(如 addType / removeType) */
45
+ className: string;
46
+ /** 资源 ID 的源字段路径(如 addId / removeId) */
47
+ id: string;
48
+ /** 资源类型的源字段路径(如 resourceType) */
49
+ resourceType: string;
50
+ /** 资源 ID 的源字段路径(用于全局查找匹配,如 resourceId) */
51
+ resourceId?: string;
52
+ /** 工位索引的源字段路径(如 addSiteNumber / removeSiteNumber) */
53
+ index: string;
54
+ /** 资源名称的源字段路径(仅 add 需要,如 name) */
55
+ name?: string;
56
+ /** 资源颜色的源字段路径(仅 add 需要,如 displayColor) */
57
+ color?: string;
58
+ }
59
+ /** 资源增删字段映射:分别配置 add / remove 两组字段来源 */
60
+ export interface ResourceFieldMap {
61
+ /** 新增资源字段映射(不需要新增时可不配置) */
62
+ add?: ResourceFieldConfig;
63
+ /** 移除资源字段映射(不需要移除时可不配置) */
64
+ remove?: ResourceFieldConfig;
65
+ }
66
+ /** 全局操作字段配置(operate: 'global' 时生效) */
67
+ export interface GlobalFieldConfig {
68
+ /** resourceIds 的源字段路径(从源消息中提取资源 ID 数组;为空时使用 payloadKey,如 'data') */
69
+ resourceIds: string;
70
+ }
71
+ /** 单条类型代理规则 */
72
+ export interface ProxyRule {
73
+ /** 源 type:后端消息头的 type 原始值(如 '7'),配置后优先用于匹配,匹配该规则的 operating */
74
+ sourceType?: string;
75
+ /** 前端 operating 的 className(EnumModel 值),同时作为类型列表的唯一标识 */
76
+ className: string;
77
+ /** 设备名称(画布模型类对应的 equipmentName,用于类型列表上行展示) */
78
+ equipmentName?: string;
79
+ /** 是否启用该规则 */
80
+ enabled: boolean;
81
+ /** 操作模式:single 单条 operating;resource 资源增删(生成 add/remove 两条);global 全局操作(如批量移除) */
82
+ operate: 'single' | 'resource' | 'global';
83
+ /** 字段映射列表(operate: 'single' 时生效) */
84
+ mappings: FieldMapper[];
85
+ /** 资源增删字段映射(operate: 'resource' 时生效,未配置时使用内置默认字段名) */
86
+ resourceFields?: ResourceFieldMap;
87
+ /** 全局操作字段映射(operate: 'global' 时生效) */
88
+ globalFields?: GlobalFieldConfig;
89
+ }
90
+ /** WsProxy 代理配置(可导出为 JSON) */
91
+ export interface WsProxyConfig {
92
+ /** 配置文件相对路径(不含 .json,支持嵌套如 lingshu-smart/wsProxyConfig) */
93
+ name: string;
94
+ /** 配置版本 */
95
+ version: number;
96
+ /** 默认 WebSocket 地址(可选) */
97
+ wsUrl?: string;
98
+ /** 业务数据字段名:源消息下该字段的数据作为画布运行 payload(默认 data) */
99
+ payloadKey?: string;
100
+ /** 源类型字段名:从源消息中提取设备类型的字段路径(默认 type,可设为 data.type 等) */
101
+ sourceTypeField?: string;
102
+ /** 心跳检测间隔(秒):0=关闭;>0=开启,定期发送心跳消息检测连接活性 */
103
+ heartbeatInterval?: number;
104
+ /** 各消息类型的代理规则 */
105
+ rules: ProxyRule[];
106
+ }
107
+ /** 按点号路径从对象取值 */
108
+ export declare function getPath(obj: unknown, path: string): unknown;
109
+ /** 按点号路径在对象上设值(自动创建中间对象) */
110
+ export declare function setPath(obj: Record<string, unknown>, path: string, value: unknown): void;
111
+ /** 解析单个字段映射:常量 > 值映射 > 源字段 > 默认值
112
+ * @param dictFn 字典转换函数(可选,未传入时按默认规则:label 原样返回 value,color 返回 '#fff') */
113
+ export declare function resolveMapper(payload: Record<string, unknown>, mapper: FieldMapper, scene?: IScene | null, dictFn?: DictFn): unknown;
114
+ /** 根据单条规则构建 operating 对象(operate: 'single') */
115
+ export declare function buildOperating(payload: Record<string, unknown>, rule: ProxyRule, scene?: IScene | null, dictFn?: DictFn): ILayerOperating | null;
116
+ /** 根据 Resource 规则构建资源增删 operating 列表(operate: 'resource')
117
+ * 字段来源由 rule.resourceFields 配置,未配置时使用内置默认字段名 */
118
+ export declare function buildResourceOperating(payload: Record<string, unknown>, rule: ProxyRule): ILayerOperating[];
119
+ /** 根据全局操作规则构建 operating(operate: 'global')
120
+ * resourceIds 从源消息中按 globalFields.resourceIds 路径提取,为空时使用 payloadKey */
121
+ export declare function buildGlobalOperating(msg: Record<string, unknown>, rule: ProxyRule, payloadKey: string): ILayerOperating[];
122
+ /**
123
+ * 将原始 WebSocket 消息转换为 operating 列表
124
+ * 标准化数据(payload 为对象)走 @operating;非标准化数据(payload 为数组)返回空数组,由 @raw 事件透出供父组件处理。
125
+ * @param rawMessage 原始消息
126
+ * @param rules 规则列表
127
+ * @param scene 场景信息(用于 percentToPixel 换算)
128
+ * @param payloadKey 业务数据字段名:源消息下该字段的数据作为画布运行 payload(默认 data,回退到 payload)
129
+ * @param sourceTypeField 源类型字段名:从源消息中提取设备类型的字段路径(默认 type)
130
+ * @param dictFn 字典转换函数(可选,用于 dictLabel / dictColor 特殊处理)
131
+ * @returns operating 列表(可能为空数组;非标准数组数据返回空数组由 @raw 处理)
132
+ */
133
+ export declare function applyProxy(rawMessage: unknown, rules: ProxyRule[], scene?: IScene | null, payloadKey?: string, sourceTypeField?: string, dictFn?: DictFn): ILayerOperating[];
134
+ /** 默认代理配置 */
135
+ export declare function createDefaultConfig(): WsProxyConfig;
136
+ /** 校验导入的配置结构是否合法 */
137
+ export declare function validateConfig(raw: unknown): WsProxyConfig | null;
138
+ /** 将配置序列化为 JSON 字符串 */
139
+ export declare function serializeConfig(config: WsProxyConfig): string;
140
+ /** 触发浏览器下载 JSON 配置文件(文件名:wsProxyConfig_ + 年月日时分秒) */
141
+ export declare function downloadConfig(config: WsProxyConfig): void;
142
+ /** 生成导出文件名:wsProxyConfig_yyyy_MM_dd_HH_mm_ss */
143
+ export declare function timestampName(): string;
144
+ /** 本地文件配置加载结果 */
145
+ export type LocalFileConfigResult = {
146
+ status: 'ok';
147
+ config: WsProxyConfig;
148
+ } | {
149
+ status: 'missing';
150
+ reason: string;
151
+ } | {
152
+ status: 'invalid';
153
+ reason: string;
154
+ } | {
155
+ status: 'unknown';
156
+ reason: string;
157
+ };
158
+ /** 从业务工程 public 目录读取配置文件(name 为相对路径,如 lingshu-smart/wsProxyConfig) */
159
+ export declare function loadLocalFileConfig(name: string): Promise<LocalFileConfigResult>;
@@ -17,36 +17,36 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
17
17
  }> & Omit<{
18
18
  readonly type: import('element-plus').InputType;
19
19
  readonly modelValue: string | number | null;
20
- readonly validateEvent: boolean;
20
+ readonly modelModifiers: import('element-plus').InputModelModifiers;
21
21
  readonly autocomplete: string;
22
+ readonly wordLimitPosition: "inside" | "outside";
22
23
  readonly tabindex: string | number;
24
+ readonly validateEvent: boolean;
23
25
  readonly inputStyle: string | false | import('vue').CSSProperties | import('vue').StyleValue[] | null;
24
- readonly modelModifiers: import('element-plus').InputModelModifiers;
25
- readonly wordLimitPosition: "inside" | "outside";
26
26
  readonly rows: number;
27
27
  readonly name?: string | undefined;
28
28
  readonly disabled?: boolean | undefined;
29
29
  readonly id?: string | undefined;
30
30
  readonly placeholder?: string | undefined;
31
- readonly size?: import('element-plus').ComponentSize | undefined;
32
31
  readonly form?: string | undefined;
33
- readonly readonly?: boolean | undefined;
34
- readonly ariaLabel?: string | undefined;
35
- readonly inputmode?: "none" | "text" | "search" | "url" | "email" | "tel" | "numeric" | "decimal" | undefined;
36
- readonly clearable?: boolean | undefined;
37
- readonly clearIcon?: import('element-plus/es/utils/index.mjs').IconPropType | undefined;
38
- readonly suffixIcon?: import('element-plus/es/utils/index.mjs').IconPropType | undefined;
32
+ readonly size?: import('element-plus').ComponentSize | undefined;
33
+ readonly resize?: "none" | "both" | "horizontal" | "vertical" | undefined;
39
34
  readonly autofocus?: boolean | undefined;
40
35
  readonly maxlength?: string | number | undefined;
41
36
  readonly minlength?: string | number | undefined;
42
- readonly resize?: "none" | "both" | "horizontal" | "vertical" | undefined;
43
37
  readonly autosize?: import('element-plus').InputAutoSize | undefined;
44
38
  readonly formatter?: ((value: string) => string) | undefined;
45
39
  readonly parser?: ((value: string) => string) | undefined;
40
+ readonly readonly?: boolean | undefined;
41
+ readonly clearable?: boolean | undefined;
42
+ readonly clearIcon?: import('element-plus/es/utils/index.mjs').IconPropType | undefined;
46
43
  readonly showPassword?: boolean | undefined;
47
44
  readonly showWordLimit?: boolean | undefined;
45
+ readonly suffixIcon?: import('element-plus/es/utils/index.mjs').IconPropType | undefined;
48
46
  readonly prefixIcon?: import('element-plus/es/utils/index.mjs').IconPropType | undefined;
49
47
  readonly containerRole?: string | undefined;
48
+ readonly ariaLabel?: string | undefined;
49
+ readonly inputmode?: "none" | "search" | "url" | "text" | "email" | "tel" | "numeric" | "decimal" | undefined;
50
50
  "onUpdate:modelValue"?: ((value: string) => any) | undefined | undefined;
51
51
  onInput?: ((value: string) => any) | undefined | undefined;
52
52
  onFocus?: ((evt: FocusEvent) => any) | undefined | undefined;
@@ -59,7 +59,7 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
59
59
  onMouseenter?: ((evt: MouseEvent) => any) | undefined | undefined;
60
60
  onMouseleave?: ((evt: MouseEvent) => any) | undefined | undefined;
61
61
  onClear?: (() => any) | undefined | undefined;
62
- } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "disabled" | "type" | "modelValue" | "validateEvent" | "autocomplete" | "clearIcon" | "tabindex" | "inputStyle" | "modelModifiers" | "wordLimitPosition" | "rows">;
62
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "disabled" | "type" | "modelValue" | "modelModifiers" | "autocomplete" | "clearIcon" | "wordLimitPosition" | "tabindex" | "validateEvent" | "inputStyle" | "rows">;
63
63
  $attrs: {
64
64
  [x: string]: unknown;
65
65
  };
@@ -72,7 +72,7 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
72
72
  $root: import('vue').ComponentPublicInstance | null;
73
73
  $parent: import('vue').ComponentPublicInstance | null;
74
74
  $host: Element | null;
75
- $emit: ((event: "blur", evt: FocusEvent) => void) & ((event: "focus", evt: FocusEvent) => void) & ((event: "clear") => void) & ((event: "input", value: string) => void) & ((event: "update:modelValue", value: string) => void) & ((event: "change", value: string, evt?: Event | undefined) => void) & ((event: "compositionend", evt: CompositionEvent) => void) & ((event: "compositionstart", evt: CompositionEvent) => void) & ((event: "compositionupdate", evt: CompositionEvent) => void) & ((event: "keydown", evt: Event | KeyboardEvent) => void) & ((event: "mouseenter", evt: MouseEvent) => void) & ((event: "mouseleave", evt: MouseEvent) => void);
75
+ $emit: ((event: "blur", evt: FocusEvent) => void) & ((event: "focus", evt: FocusEvent) => void) & ((event: "clear") => void) & ((event: "input", value: string) => void) & ((event: "change", value: string, evt?: Event | undefined) => void) & ((event: "compositionend", evt: CompositionEvent) => void) & ((event: "compositionstart", evt: CompositionEvent) => void) & ((event: "compositionupdate", evt: CompositionEvent) => void) & ((event: "keydown", evt: Event | KeyboardEvent) => void) & ((event: "mouseenter", evt: MouseEvent) => void) & ((event: "mouseleave", evt: MouseEvent) => void) & ((event: "update:modelValue", value: string) => void);
76
76
  $el: any;
77
77
  $options: import('vue').ComponentOptionsBase<Readonly<import('vue').ExtractPropTypes<{
78
78
  name: {
@@ -92,54 +92,22 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
92
92
  placeholder: {
93
93
  type: import('vue').PropType<string>;
94
94
  };
95
- size: {
96
- type: import('vue').PropType<"" | "default" | "small" | "large">;
97
- };
98
95
  form: {
99
96
  type: import('vue').PropType<string>;
100
97
  };
101
- modelValue: {
102
- type: import('vue').PropType<string | number | null>;
103
- default: "";
104
- };
105
- readonly: {
106
- type: import('vue').PropType<boolean>;
107
- };
108
- validateEvent: {
109
- type: import('vue').PropType<boolean>;
110
- default: true;
111
- };
112
- ariaLabel: {
113
- type: import('vue').PropType<string>;
114
- };
115
- inputmode: {
116
- type: import('vue').PropType<"none" | "text" | "search" | "url" | "email" | "tel" | "numeric" | "decimal">;
117
- };
118
- autocomplete: {
119
- type: import('vue').PropType<string>;
120
- default: "off";
121
- };
122
- clearable: {
123
- type: import('vue').PropType<boolean>;
124
- };
125
- clearIcon: {
126
- type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
127
- default: any;
128
- };
129
- suffixIcon: {
130
- type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
131
- };
132
- tabindex: {
133
- type: import('vue').PropType<string | number>;
134
- default: 0;
98
+ size: {
99
+ type: import('vue').PropType<"" | "small" | "default" | "large">;
135
100
  };
136
- inputStyle: {
137
- type: import('vue').PropType<string | false | import('vue').CSSProperties | import('vue').StyleValue[] | null>;
138
- default: () => {};
101
+ resize: {
102
+ type: import('vue').PropType<"horizontal" | "vertical" | "none" | "both">;
139
103
  };
140
104
  autofocus: {
141
105
  type: import('vue').PropType<boolean>;
142
106
  };
107
+ modelValue: {
108
+ type: import('vue').PropType<string | number | null>;
109
+ default: "";
110
+ };
143
111
  modelModifiers: {
144
112
  type: import('vue').PropType<import('element-plus').InputModelModifiers>;
145
113
  default: () => {};
@@ -150,18 +118,29 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
150
118
  minlength: {
151
119
  type: import('vue').PropType<string | number>;
152
120
  };
153
- resize: {
154
- type: import('vue').PropType<"horizontal" | "vertical" | "none" | "both">;
155
- };
156
121
  autosize: {
157
122
  type: import('vue').PropType<import('element-plus').InputAutoSize>;
158
123
  };
124
+ autocomplete: {
125
+ type: import('vue').PropType<string>;
126
+ default: "off";
127
+ };
159
128
  formatter: {
160
129
  type: import('vue').PropType<(value: string) => string>;
161
130
  };
162
131
  parser: {
163
132
  type: import('vue').PropType<(value: string) => string>;
164
133
  };
134
+ readonly: {
135
+ type: import('vue').PropType<boolean>;
136
+ };
137
+ clearable: {
138
+ type: import('vue').PropType<boolean>;
139
+ };
140
+ clearIcon: {
141
+ type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
142
+ default: any;
143
+ };
165
144
  showPassword: {
166
145
  type: import('vue').PropType<boolean>;
167
146
  };
@@ -172,16 +151,37 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
172
151
  type: import('vue').PropType<"inside" | "outside">;
173
152
  default: "inside";
174
153
  };
154
+ suffixIcon: {
155
+ type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
156
+ };
175
157
  prefixIcon: {
176
158
  type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
177
159
  };
178
160
  containerRole: {
179
161
  type: import('vue').PropType<string>;
180
162
  };
163
+ tabindex: {
164
+ type: import('vue').PropType<string | number>;
165
+ default: 0;
166
+ };
167
+ validateEvent: {
168
+ type: import('vue').PropType<boolean>;
169
+ default: true;
170
+ };
171
+ inputStyle: {
172
+ type: import('vue').PropType<string | false | import('vue').CSSProperties | import('vue').StyleValue[] | null>;
173
+ default: () => {};
174
+ };
181
175
  rows: {
182
176
  type: import('vue').PropType<number>;
183
177
  default: 2;
184
178
  };
179
+ ariaLabel: {
180
+ type: import('vue').PropType<string>;
181
+ };
182
+ inputmode: {
183
+ type: import('vue').PropType<"none" | "search" | "url" | "text" | "email" | "tel" | "numeric" | "decimal">;
184
+ };
185
185
  }>> & {
186
186
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
187
187
  onInput?: ((value: string) => any) | undefined;
@@ -282,54 +282,22 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
282
282
  placeholder: {
283
283
  type: import('vue').PropType<string>;
284
284
  };
285
- size: {
286
- type: import('vue').PropType<"" | "default" | "small" | "large">;
287
- };
288
285
  form: {
289
286
  type: import('vue').PropType<string>;
290
287
  };
291
- modelValue: {
292
- type: import('vue').PropType<string | number | null>;
293
- default: "";
294
- };
295
- readonly: {
296
- type: import('vue').PropType<boolean>;
297
- };
298
- validateEvent: {
299
- type: import('vue').PropType<boolean>;
300
- default: true;
301
- };
302
- ariaLabel: {
303
- type: import('vue').PropType<string>;
304
- };
305
- inputmode: {
306
- type: import('vue').PropType<"none" | "text" | "search" | "url" | "email" | "tel" | "numeric" | "decimal">;
307
- };
308
- autocomplete: {
309
- type: import('vue').PropType<string>;
310
- default: "off";
311
- };
312
- clearable: {
313
- type: import('vue').PropType<boolean>;
314
- };
315
- clearIcon: {
316
- type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
317
- default: any;
318
- };
319
- suffixIcon: {
320
- type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
321
- };
322
- tabindex: {
323
- type: import('vue').PropType<string | number>;
324
- default: 0;
288
+ size: {
289
+ type: import('vue').PropType<"" | "small" | "default" | "large">;
325
290
  };
326
- inputStyle: {
327
- type: import('vue').PropType<string | false | import('vue').CSSProperties | import('vue').StyleValue[] | null>;
328
- default: () => {};
291
+ resize: {
292
+ type: import('vue').PropType<"horizontal" | "vertical" | "none" | "both">;
329
293
  };
330
294
  autofocus: {
331
295
  type: import('vue').PropType<boolean>;
332
296
  };
297
+ modelValue: {
298
+ type: import('vue').PropType<string | number | null>;
299
+ default: "";
300
+ };
333
301
  modelModifiers: {
334
302
  type: import('vue').PropType<import('element-plus').InputModelModifiers>;
335
303
  default: () => {};
@@ -340,18 +308,29 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
340
308
  minlength: {
341
309
  type: import('vue').PropType<string | number>;
342
310
  };
343
- resize: {
344
- type: import('vue').PropType<"horizontal" | "vertical" | "none" | "both">;
345
- };
346
311
  autosize: {
347
312
  type: import('vue').PropType<import('element-plus').InputAutoSize>;
348
313
  };
314
+ autocomplete: {
315
+ type: import('vue').PropType<string>;
316
+ default: "off";
317
+ };
349
318
  formatter: {
350
319
  type: import('vue').PropType<(value: string) => string>;
351
320
  };
352
321
  parser: {
353
322
  type: import('vue').PropType<(value: string) => string>;
354
323
  };
324
+ readonly: {
325
+ type: import('vue').PropType<boolean>;
326
+ };
327
+ clearable: {
328
+ type: import('vue').PropType<boolean>;
329
+ };
330
+ clearIcon: {
331
+ type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
332
+ default: any;
333
+ };
355
334
  showPassword: {
356
335
  type: import('vue').PropType<boolean>;
357
336
  };
@@ -362,16 +341,37 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
362
341
  type: import('vue').PropType<"inside" | "outside">;
363
342
  default: "inside";
364
343
  };
344
+ suffixIcon: {
345
+ type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
346
+ };
365
347
  prefixIcon: {
366
348
  type: import('vue').PropType<import('element-plus/es/utils/index.mjs').IconPropType>;
367
349
  };
368
350
  containerRole: {
369
351
  type: import('vue').PropType<string>;
370
352
  };
353
+ tabindex: {
354
+ type: import('vue').PropType<string | number>;
355
+ default: 0;
356
+ };
357
+ validateEvent: {
358
+ type: import('vue').PropType<boolean>;
359
+ default: true;
360
+ };
361
+ inputStyle: {
362
+ type: import('vue').PropType<string | false | import('vue').CSSProperties | import('vue').StyleValue[] | null>;
363
+ default: () => {};
364
+ };
371
365
  rows: {
372
366
  type: import('vue').PropType<number>;
373
367
  default: 2;
374
368
  };
369
+ ariaLabel: {
370
+ type: import('vue').PropType<string>;
371
+ };
372
+ inputmode: {
373
+ type: import('vue').PropType<"none" | "search" | "url" | "text" | "email" | "tel" | "numeric" | "decimal">;
374
+ };
375
375
  }>> & {
376
376
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
377
377
  onInput?: ((value: string) => any) | undefined;
@@ -385,7 +385,7 @@ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import
385
385
  onMouseenter?: ((evt: MouseEvent) => any) | undefined;
386
386
  onMouseleave?: ((evt: MouseEvent) => any) | undefined;
387
387
  onClear?: (() => any) | undefined;
388
- }, "disabled" | "type" | "blur" | "focus" | "clear" | "input" | "select" | "textarea" | "ref" | "modelValue" | "validateEvent" | "autocomplete" | "clearIcon" | "tabindex" | "inputStyle" | "modelModifiers" | "autosize" | "wordLimitPosition" | "rows" | "textareaStyle" | "isComposing" | "resizeTextarea"> & import('vue').ShallowUnwrapRef<{
388
+ }, "disabled" | "type" | "blur" | "focus" | "clear" | "input" | "select" | "textarea" | "ref" | "modelValue" | "modelModifiers" | "autosize" | "autocomplete" | "clearIcon" | "wordLimitPosition" | "tabindex" | "validateEvent" | "inputStyle" | "rows" | "textareaStyle" | "isComposing" | "resizeTextarea"> & import('vue').ShallowUnwrapRef<{
389
389
  input: import('vue').ShallowRef<HTMLInputElement | undefined>;
390
390
  textarea: import('vue').ShallowRef<HTMLTextAreaElement | undefined>;
391
391
  ref: import('vue').ComputedRef<HTMLInputElement | HTMLTextAreaElement | undefined>;
@@ -1,2 +1,4 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLCanvasElement>;
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
2
+ canvasRef: HTMLCanvasElement;
3
+ }, HTMLCanvasElement>;
2
4
  export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
@@ -25,7 +25,9 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {
25
25
  actions: EditorActions;
26
26
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
27
27
  visualRef: HTMLDivElement;
28
- drawingBoardRef: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, import('vue').PublicProps, {}, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {}, HTMLCanvasElement, import('vue').ComponentProvideOptions, {
28
+ drawingBoardRef: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, import('vue').PublicProps, {}, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
29
+ canvasRef: HTMLCanvasElement;
30
+ }, HTMLCanvasElement, import('vue').ComponentProvideOptions, {
29
31
  P: {};
30
32
  B: {};
31
33
  D: {};
@@ -1,3 +1,7 @@
1
1
  import { default as LingshuSmartEditor } from './editor/index.vue';
2
2
  import { default as LingshuSmartPreview } from './preview/index.vue';
3
- export { LingshuSmartEditor, LingshuSmartPreview };
3
+ import { default as PerformanceStats } from './debug/PerformanceStats.vue';
4
+ import { default as ScriptRunner } from './debug/ScriptRunner/index.vue';
5
+ import { default as WsProxy } from './debug/WsProxy/index.vue';
6
+ import { default as WsProxyPage } from './debug/WsProxy/WsProxyPage.vue';
7
+ export { LingshuSmartEditor, LingshuSmartPreview, PerformanceStats, ScriptRunner, WsProxy, WsProxyPage };