@sepveneto/dnde 0.7.5 → 0.8.1
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/dist/{lib/App.vue.d.ts → App.vue.d.ts} +21 -0
- package/dist/{lib/Editor.vue.d.ts → Editor.vue.d.ts} +25 -1
- package/dist/agents/context.d.ts +14 -0
- package/dist/agents/loader.d.ts +36 -0
- package/dist/agents/types.d.ts +44 -0
- package/dist/{lib/components → components}/NodePlugin.vue.d.ts +4 -1
- package/dist/composables/dragCore.d.ts +69 -0
- package/dist/composables/useNodeListDrag.d.ts +15 -0
- package/dist/editor.js +63027 -65604
- package/dist/main.d.ts +33 -0
- package/dist/{lib/props.d.ts → props.d.ts} +9 -0
- package/dist/{lib/store → store}/editor.d.ts +4 -1
- package/dist/{lib/utils.d.ts → utils.d.ts} +9 -0
- package/package.json +7 -4
- package/dist/lib/main.d.ts +0 -5
- /package/dist/{lib/assets → assets}/container.vue.d.ts +0 -0
- /package/dist/{lib/assets → assets}/leftArrow.vue.d.ts +0 -0
- /package/dist/{lib/assets → assets}/puzzle.vue.d.ts +0 -0
- /package/dist/{lib/assets → assets}/widget.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/ColorPicker.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/ConfigForm.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/ConfigItem.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/ConfigRender.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/NodeContainer.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/NodeOperate.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/NodeWrap.vue.d.ts +0 -0
- /package/dist/{lib/components → components}/StyleNumber.vue.d.ts +0 -0
- /package/dist/{lib/layout → layout}/configPanel.vue.d.ts +0 -0
- /package/dist/{lib/layout → layout}/treePanel.item.vue.d.ts +0 -0
- /package/dist/{lib/layout → layout}/treePanel.vue.d.ts +0 -0
- /package/dist/{lib/layout → layout}/widgetsMenu.vue.d.ts +0 -0
- /package/dist/{lib/store → store}/app.d.ts +0 -0
- /package/dist/{lib/store → store}/index.d.ts +0 -0
|
@@ -11,6 +11,15 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
11
11
|
readonly type: import("vue").PropType<Record<string, any>>;
|
|
12
12
|
readonly default: () => {};
|
|
13
13
|
};
|
|
14
|
+
readonly agent: BooleanConstructor;
|
|
15
|
+
readonly capabilities: {
|
|
16
|
+
readonly type: import("vue").PropType<any[]>;
|
|
17
|
+
readonly default: () => never[];
|
|
18
|
+
};
|
|
19
|
+
readonly workflows: {
|
|
20
|
+
readonly type: import("vue").PropType<any[]>;
|
|
21
|
+
readonly default: () => never[];
|
|
22
|
+
};
|
|
14
23
|
}>, {
|
|
15
24
|
validate(): Promise<void> | undefined;
|
|
16
25
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -26,9 +35,21 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
26
35
|
readonly type: import("vue").PropType<Record<string, any>>;
|
|
27
36
|
readonly default: () => {};
|
|
28
37
|
};
|
|
38
|
+
readonly agent: BooleanConstructor;
|
|
39
|
+
readonly capabilities: {
|
|
40
|
+
readonly type: import("vue").PropType<any[]>;
|
|
41
|
+
readonly default: () => never[];
|
|
42
|
+
};
|
|
43
|
+
readonly workflows: {
|
|
44
|
+
readonly type: import("vue").PropType<any[]>;
|
|
45
|
+
readonly default: () => never[];
|
|
46
|
+
};
|
|
29
47
|
}>> & Readonly<{}>, {
|
|
30
48
|
readonly name: string;
|
|
49
|
+
readonly agent: boolean;
|
|
31
50
|
readonly widgets: import("./store").LikeWidget[];
|
|
32
51
|
readonly extra: Record<string, any>;
|
|
52
|
+
readonly capabilities: any[];
|
|
53
|
+
readonly workflows: any[];
|
|
33
54
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
34
55
|
export default _default;
|
|
@@ -12,6 +12,7 @@ declare const editor: import("pinia").Store<"editor", Pick<{
|
|
|
12
12
|
selectedNodeOperates: Vue.ComputedRef<import("./type.js").HelperAction[]>;
|
|
13
13
|
addNode: (node: import("@sepveneto/dnde-core/class").Node, pNode?: import("@sepveneto/dnde-core/class").Node, manual?: boolean) => void;
|
|
14
14
|
delNode: (wid: string) => void;
|
|
15
|
+
setRoot: (node: import("@sepveneto/dnde-core/class").Node) => void;
|
|
15
16
|
isPreview: Vue.Ref<boolean, boolean>;
|
|
16
17
|
dragging: Vue.Ref<import("@sepveneto/dnde-core/class").Node | null, import("@sepveneto/dnde-core/class").Node | null>;
|
|
17
18
|
plugins: {
|
|
@@ -47,6 +48,7 @@ declare const editor: import("pinia").Store<"editor", Pick<{
|
|
|
47
48
|
selectedNodeOperates: Vue.ComputedRef<import("./type.js").HelperAction[]>;
|
|
48
49
|
addNode: (node: import("@sepveneto/dnde-core/class").Node, pNode?: import("@sepveneto/dnde-core/class").Node, manual?: boolean) => void;
|
|
49
50
|
delNode: (wid: string) => void;
|
|
51
|
+
setRoot: (node: import("@sepveneto/dnde-core/class").Node) => void;
|
|
50
52
|
isPreview: Vue.Ref<boolean, boolean>;
|
|
51
53
|
dragging: Vue.Ref<import("@sepveneto/dnde-core/class").Node | null, import("@sepveneto/dnde-core/class").Node | null>;
|
|
52
54
|
plugins: {
|
|
@@ -82,6 +84,7 @@ declare const editor: import("pinia").Store<"editor", Pick<{
|
|
|
82
84
|
selectedNodeOperates: Vue.ComputedRef<import("./type.js").HelperAction[]>;
|
|
83
85
|
addNode: (node: import("@sepveneto/dnde-core/class").Node, pNode?: import("@sepveneto/dnde-core/class").Node, manual?: boolean) => void;
|
|
84
86
|
delNode: (wid: string) => void;
|
|
87
|
+
setRoot: (node: import("@sepveneto/dnde-core/class").Node) => void;
|
|
85
88
|
isPreview: Vue.Ref<boolean, boolean>;
|
|
86
89
|
dragging: Vue.Ref<import("@sepveneto/dnde-core/class").Node | null, import("@sepveneto/dnde-core/class").Node | null>;
|
|
87
90
|
plugins: {
|
|
@@ -104,7 +107,7 @@ declare const editor: import("pinia").Store<"editor", Pick<{
|
|
|
104
107
|
getData: () => Record<string, any>;
|
|
105
108
|
setData: (data: any) => void;
|
|
106
109
|
setSchema: (schema: import("@sepveneto/dnde-core").IWidget["schema"]) => void;
|
|
107
|
-
}, "selectNode" | "addNode" | "delNode" | "getData" | "setData" | "setSchema">>;
|
|
110
|
+
}, "selectNode" | "addNode" | "delNode" | "setRoot" | "getData" | "setData" | "setSchema">>;
|
|
108
111
|
declare const _default: Vue.DefineComponent<Vue.ExtractPropTypes<{
|
|
109
112
|
readonly name: {
|
|
110
113
|
readonly type: StringConstructor;
|
|
@@ -118,6 +121,15 @@ declare const _default: Vue.DefineComponent<Vue.ExtractPropTypes<{
|
|
|
118
121
|
readonly type: Vue.PropType<Record<string, any>>;
|
|
119
122
|
readonly default: () => {};
|
|
120
123
|
};
|
|
124
|
+
readonly agent: BooleanConstructor;
|
|
125
|
+
readonly capabilities: {
|
|
126
|
+
readonly type: Vue.PropType<any[]>;
|
|
127
|
+
readonly default: () => never[];
|
|
128
|
+
};
|
|
129
|
+
readonly workflows: {
|
|
130
|
+
readonly type: Vue.PropType<any[]>;
|
|
131
|
+
readonly default: () => never[];
|
|
132
|
+
};
|
|
121
133
|
}>, {
|
|
122
134
|
register(fn: (ctx: typeof editor) => {
|
|
123
135
|
init: () => void;
|
|
@@ -143,11 +155,23 @@ declare const _default: Vue.DefineComponent<Vue.ExtractPropTypes<{
|
|
|
143
155
|
readonly type: Vue.PropType<Record<string, any>>;
|
|
144
156
|
readonly default: () => {};
|
|
145
157
|
};
|
|
158
|
+
readonly agent: BooleanConstructor;
|
|
159
|
+
readonly capabilities: {
|
|
160
|
+
readonly type: Vue.PropType<any[]>;
|
|
161
|
+
readonly default: () => never[];
|
|
162
|
+
};
|
|
163
|
+
readonly workflows: {
|
|
164
|
+
readonly type: Vue.PropType<any[]>;
|
|
165
|
+
readonly default: () => never[];
|
|
166
|
+
};
|
|
146
167
|
}>> & Readonly<{
|
|
147
168
|
onChange?: ((...args: any[]) => any) | undefined;
|
|
148
169
|
}>, {
|
|
149
170
|
readonly name: string;
|
|
171
|
+
readonly agent: boolean;
|
|
150
172
|
readonly widgets: import("./store").LikeWidget[];
|
|
151
173
|
readonly extra: Record<string, any>;
|
|
174
|
+
readonly capabilities: any[];
|
|
175
|
+
readonly workflows: any[];
|
|
152
176
|
}, {}, {}, {}, string, Vue.ComponentProvideOptions, true, {}, any>;
|
|
153
177
|
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { LayoutWidgetDescriptor } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 把编辑器组件列表拍平成 Layout Agent 需要的描述。
|
|
4
|
+
*
|
|
5
|
+
* 输入可能是分组、Widget 实例或原始 IWidget,这里统一递归处理。
|
|
6
|
+
* 只有带 `agent` 描述的组件才会进入布局候选。
|
|
7
|
+
*/
|
|
8
|
+
export declare function toLayoutWidgets(widgets?: any[]): LayoutWidgetDescriptor[];
|
|
9
|
+
/** 当前页面节点的轻量快照,供 Edit Agent 定位组件。 */
|
|
10
|
+
export declare function snapshotNodes(nodes?: any[]): Array<{
|
|
11
|
+
wid: string;
|
|
12
|
+
type: string;
|
|
13
|
+
name: string;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 可选 agent 能力的加载器。
|
|
3
|
+
*
|
|
4
|
+
* agent 被设计成独立的 web component(`<dnd-agent>`),编辑器自身**不**在构建期依赖
|
|
5
|
+
* `@sepveneto/dnde-agent`:业务侧不安装它也能正常打包、使用编辑器。
|
|
6
|
+
*
|
|
7
|
+
* 加载方式由宿主在 `register({ agent })` 时**显式注入**(通常是
|
|
8
|
+
* `() => import('@sepveneto/dnde-agent/element')`),这样业务侧的打包器才能正确解析依赖。
|
|
9
|
+
* 只开启 `agent` 却没注入、或依赖缺失时,会在控制台提示安装。
|
|
10
|
+
*/
|
|
11
|
+
/** agent web component 注册的标签名。 */
|
|
12
|
+
export declare const AGENT_ELEMENT_TAG = "dnd-agent";
|
|
13
|
+
/** 可选的 agent 依赖包名。 */
|
|
14
|
+
export declare const AGENT_PACKAGE_NAME = "@sepveneto/dnde-agent";
|
|
15
|
+
/** agent 的 web component 入口(注册 `<dnd-agent>`,并 re-export 库方法)。 */
|
|
16
|
+
export declare const AGENT_ELEMENT_ENTRY = "@sepveneto/dnde-agent/element";
|
|
17
|
+
/** 按需加载 agent 包的方式,宿主可以注入自定义实现(如走 import map / CDN)。 */
|
|
18
|
+
export type AgentImporter = () => Promise<unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* 注入 agent 的加载方式,由 `register({ agent })` 调用。
|
|
21
|
+
*
|
|
22
|
+
* 传入 `undefined` 可清除(一般不需要)。注入后未完成的加载会被丢弃,允许用新的
|
|
23
|
+
* importer 重新加载。
|
|
24
|
+
*/
|
|
25
|
+
export declare function setAgentImporter(importer?: AgentImporter): void;
|
|
26
|
+
/** `<dnd-agent>` 是否已经注册(业务侧自行 import 过该包时即为 true)。 */
|
|
27
|
+
export declare function isAgentRegistered(tag?: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* 确保 agent web component 可用。
|
|
30
|
+
*
|
|
31
|
+
* - 已注册:直接返回 `true`;
|
|
32
|
+
* - 未注册:调用宿主注入的加载器,成功后返回 `true`;
|
|
33
|
+
* - 未注入加载器 / 依赖缺失 / 加载失败:在控制台提示安装,并返回 `false`。失败不会缓存,
|
|
34
|
+
* 业务侧后续补上依赖或注入后可以重新触发。
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadAgent(tag?: string, importer?: AgentImporter | undefined): Promise<boolean>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent 相关的轻量类型定义。
|
|
3
|
+
*
|
|
4
|
+
* 这些结构本来来自可选的 `@sepveneto/dnde-agent` 包,但编辑器不应当强依赖它
|
|
5
|
+
* (业务侧可以不安装)。因此这里保留编辑器真正用到的字段做本地声明,
|
|
6
|
+
* 运行时由 agent web component 通过事件/属性传回,结构保持一致即可。
|
|
7
|
+
*/
|
|
8
|
+
/** 供 Layout Agent 选取组件的描述信息。 */
|
|
9
|
+
export interface LayoutWidgetDescriptor {
|
|
10
|
+
typeId: string;
|
|
11
|
+
description: string;
|
|
12
|
+
layout: Record<string, any>;
|
|
13
|
+
}
|
|
14
|
+
/** Layout Agent 生成的一个组件片段。 */
|
|
15
|
+
export interface LayoutWidgetItem {
|
|
16
|
+
widget: string;
|
|
17
|
+
items: Array<{
|
|
18
|
+
category: string;
|
|
19
|
+
id: any;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export type LayoutIR = LayoutWidgetItem[];
|
|
23
|
+
export interface AddComponentIR {
|
|
24
|
+
type: 'add-component';
|
|
25
|
+
widget: string;
|
|
26
|
+
items: Array<Record<string, any>>;
|
|
27
|
+
}
|
|
28
|
+
export interface DeleteComponentIR {
|
|
29
|
+
type: 'delete-component';
|
|
30
|
+
target: string;
|
|
31
|
+
}
|
|
32
|
+
export interface UpdateComponentIR {
|
|
33
|
+
type: 'update-component';
|
|
34
|
+
target: string;
|
|
35
|
+
changes: Record<string, any>;
|
|
36
|
+
}
|
|
37
|
+
export interface MoveComponentIR {
|
|
38
|
+
type: 'move-component';
|
|
39
|
+
target: string;
|
|
40
|
+
before?: string;
|
|
41
|
+
after?: string;
|
|
42
|
+
}
|
|
43
|
+
/** Edit Agent 生成的单条编辑指令。 */
|
|
44
|
+
export type EditIR = AddComponentIR | DeleteComponentIR | UpdateComponentIR | MoveComponentIR;
|
|
@@ -13,6 +13,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
13
13
|
selectedNodeOperates: import("vue").ComputedRef<HelperAction[]>;
|
|
14
14
|
addNode: (node: import("@sepveneto/dnde-core/class").Node, pNode?: import("@sepveneto/dnde-core/class").Node, manual?: boolean) => void;
|
|
15
15
|
delNode: (wid: string) => void;
|
|
16
|
+
setRoot: (node: import("@sepveneto/dnde-core/class").Node) => void;
|
|
16
17
|
isPreview: import("vue").Ref<boolean, boolean>;
|
|
17
18
|
dragging: import("vue").Ref<import("@sepveneto/dnde-core/class").Node | null, import("@sepveneto/dnde-core/class").Node | null>;
|
|
18
19
|
plugins: {
|
|
@@ -48,6 +49,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
48
49
|
selectedNodeOperates: import("vue").ComputedRef<HelperAction[]>;
|
|
49
50
|
addNode: (node: import("@sepveneto/dnde-core/class").Node, pNode?: import("@sepveneto/dnde-core/class").Node, manual?: boolean) => void;
|
|
50
51
|
delNode: (wid: string) => void;
|
|
52
|
+
setRoot: (node: import("@sepveneto/dnde-core/class").Node) => void;
|
|
51
53
|
isPreview: import("vue").Ref<boolean, boolean>;
|
|
52
54
|
dragging: import("vue").Ref<import("@sepveneto/dnde-core/class").Node | null, import("@sepveneto/dnde-core/class").Node | null>;
|
|
53
55
|
plugins: {
|
|
@@ -83,6 +85,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
83
85
|
selectedNodeOperates: import("vue").ComputedRef<HelperAction[]>;
|
|
84
86
|
addNode: (node: import("@sepveneto/dnde-core/class").Node, pNode?: import("@sepveneto/dnde-core/class").Node, manual?: boolean) => void;
|
|
85
87
|
delNode: (wid: string) => void;
|
|
88
|
+
setRoot: (node: import("@sepveneto/dnde-core/class").Node) => void;
|
|
86
89
|
isPreview: import("vue").Ref<boolean, boolean>;
|
|
87
90
|
dragging: import("vue").Ref<import("@sepveneto/dnde-core/class").Node | null, import("@sepveneto/dnde-core/class").Node | null>;
|
|
88
91
|
plugins: {
|
|
@@ -105,7 +108,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
105
108
|
getData: () => Record<string, any>;
|
|
106
109
|
setData: (data: any) => void;
|
|
107
110
|
setSchema: (schema: import("@sepveneto/dnde-core").IWidget["schema"]) => void;
|
|
108
|
-
}, "selectNode" | "addNode" | "delNode" | "getData" | "setData" | "setSchema">>;
|
|
111
|
+
}, "selectNode" | "addNode" | "delNode" | "setRoot" | "getData" | "setData" | "setSchema">>;
|
|
109
112
|
ctx: import("@sepveneto/dnde-core").EditorContext;
|
|
110
113
|
actionWrap: (action: HelperAction) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
111
114
|
[key: string]: any;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Node } from '@sepveneto/dnde-core/class';
|
|
2
|
+
/** 拖拽逻辑作用的目标列表 */
|
|
3
|
+
export interface DragTarget {
|
|
4
|
+
/** 当前列表(响应式数组) */
|
|
5
|
+
list: Node[];
|
|
6
|
+
/** 列表所属的父节点,根列表传 rootNode */
|
|
7
|
+
parent: Node;
|
|
8
|
+
/** 用新数组替换当前列表 */
|
|
9
|
+
setList: (list: Node[]) => void;
|
|
10
|
+
}
|
|
11
|
+
/** 拖拽逻辑需要的外部能力,由编辑器 store 提供 */
|
|
12
|
+
export interface DragHost {
|
|
13
|
+
/** 跨容器拖动被撤销时,把节点还原回指定容器的指定位置 */
|
|
14
|
+
restoreToContainer: (containerId: string, index: number, node: Node) => void;
|
|
15
|
+
/** 把节点登记到目标父节点下 */
|
|
16
|
+
addNode: (node: Node, parent: Node) => void;
|
|
17
|
+
}
|
|
18
|
+
/** 只取逻辑用到的字段,便于在测试中构造 */
|
|
19
|
+
export interface DragAddEvent {
|
|
20
|
+
newIndex: number;
|
|
21
|
+
newDraggableIndex: number;
|
|
22
|
+
oldIndex: number;
|
|
23
|
+
from: {
|
|
24
|
+
dataset: {
|
|
25
|
+
id?: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
to: {
|
|
29
|
+
dataset: {
|
|
30
|
+
id?: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 找出列表中第一处重复出现的 wid。
|
|
36
|
+
*
|
|
37
|
+
* vuedraggable 在同级跨列表拖动时,会在目标列表里留下源列表的重复项,
|
|
38
|
+
* 靠这个函数定位需要清理的节点。
|
|
39
|
+
*/
|
|
40
|
+
export declare function findDuplicatedWid(list: Node[]): string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* 该位置是否紧邻 fixed 节点(header 之后 / footer 之前都不允许插入)。
|
|
43
|
+
*
|
|
44
|
+
* 注意:入参是 `Widget.isFixed` 归一化之后的值,即 `meta.fixed: true` 会变成 `'header'`。
|
|
45
|
+
*/
|
|
46
|
+
export declare function isFixedBoundary(list: Node[], index: number): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* 计算跨列表拖动后应从后一个数组中移除的重复项下标。
|
|
49
|
+
*
|
|
50
|
+
* `originIndex` 是被拖动节点在原数组中的位置,用来判断它在新数组里是上移还是下移。
|
|
51
|
+
* 返回 -1 表示不删除(没有重复,或相邻是 fixed 边界需要保留)。
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveDuplicateRemovalIndex(current: Node[], next: Node[], wid: string, originIndex: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* 处理一次「放入」:
|
|
56
|
+
* - 落点紧邻 fixed 节点时撤销这次插入;
|
|
57
|
+
* - 跨容器拖动被撤销时,把节点还原回原容器;
|
|
58
|
+
* - 否则把节点登记到目标父节点下。
|
|
59
|
+
*/
|
|
60
|
+
export declare function handleNodeAdd(target: DragTarget, evt: DragAddEvent, host: DragHost): void;
|
|
61
|
+
/**
|
|
62
|
+
* 处理列表更新:
|
|
63
|
+
* - 长度没有增加(同级重排)→ 直接整体替换;
|
|
64
|
+
* - 长度增加(跨列表拖动)→ 清理 vuedraggable 留下的重复项,
|
|
65
|
+
* 若重复项紧邻 fixed 边界则保留。
|
|
66
|
+
*
|
|
67
|
+
* `defer` 用于把清理后的写入推迟到下一个 tick(与 vuedraggable 的更新时机对齐)。
|
|
68
|
+
*/
|
|
69
|
+
export declare function handleNodeInput(target: DragTarget, val: Node[], defer: (fn: () => void) => void): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DraggableEvt } from '@/type';
|
|
2
|
+
import type { Node } from '@sepveneto/dnde-core/class';
|
|
3
|
+
import type { DragTarget } from './dragCore';
|
|
4
|
+
export type NodeListDragTarget = DragTarget;
|
|
5
|
+
/**
|
|
6
|
+
* 编辑区与大纲面板中所有可拖拽列表共用的拖拽处理。
|
|
7
|
+
*
|
|
8
|
+
* 逻辑本体在 `./dragCore`(不依赖 store / vue,便于单测),
|
|
9
|
+
* 这里只负责取 store 并接线。
|
|
10
|
+
*/
|
|
11
|
+
export declare function useNodeListDrag(target: NodeListDragTarget): {
|
|
12
|
+
onStart: (evt: DraggableEvt) => void;
|
|
13
|
+
onAdd: (evt: DraggableEvt) => void;
|
|
14
|
+
onInput: (val: Node[]) => void;
|
|
15
|
+
};
|