@tmagic/editor 1.8.0-beta.4 → 1.8.0-beta.5
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/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/es/index.js +6 -3
- package/dist/es/initService.js +1 -1
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +19 -55
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +22 -39
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +149 -103
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +32 -8
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +333 -211
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +28 -7
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +47 -60
- package/dist/es/layouts/history-list/composables.js +73 -32
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/es/services/codeBlock.js +85 -37
- package/dist/es/services/dataSource.js +62 -26
- package/dist/es/services/editor.js +243 -100
- package/dist/es/services/history.js +270 -206
- package/dist/es/services/ui.js +3 -0
- package/dist/es/style.css +49 -6
- package/dist/es/utils/editor.js +35 -1
- package/dist/es/utils/history.js +223 -0
- package/dist/es/utils/indexed-db.js +86 -0
- package/dist/es/utils/undo-redo.js +60 -1
- package/dist/style.css +49 -6
- package/dist/tmagic-editor.umd.cjs +1799 -905
- package/package.json +7 -7
- package/src/components/CompareForm.vue +3 -1
- package/src/components/ToolButton.vue +2 -2
- package/src/index.ts +1 -0
- package/src/initService.ts +1 -1
- package/src/layouts/Framework.vue +1 -1
- package/src/layouts/history-list/Bucket.vue +34 -71
- package/src/layouts/history-list/BucketTab.vue +46 -54
- package/src/layouts/history-list/GroupRow.vue +146 -111
- package/src/layouts/history-list/HistoryDiffDialog.vue +94 -68
- package/src/layouts/history-list/HistoryListPanel.vue +296 -113
- package/src/layouts/history-list/InitialRow.vue +25 -9
- package/src/layouts/history-list/PageTab.vue +57 -51
- package/src/layouts/history-list/composables.ts +157 -36
- package/src/layouts/page-bar/PageBar.vue +4 -2
- package/src/layouts/sidebar/Sidebar.vue +6 -1
- package/src/services/codeBlock.ts +107 -37
- package/src/services/dataSource.ts +89 -40
- package/src/services/editor.ts +370 -134
- package/src/services/history.ts +305 -203
- package/src/services/ui.ts +7 -0
- package/src/theme/history-list-panel.scss +72 -5
- package/src/theme/page-bar.scss +0 -4
- package/src/type.ts +167 -63
- package/src/utils/editor.ts +41 -1
- package/src/utils/history.ts +298 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/indexed-db.ts +122 -0
- package/src/utils/undo-redo.ts +88 -0
- package/types/index.d.ts +783 -291
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.8.0-beta.
|
|
2
|
+
"version": "1.8.0-beta.5",
|
|
3
3
|
"name": "@tmagic/editor",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
"moveable": "^0.53.0",
|
|
59
59
|
"serialize-javascript": "^7.0.0",
|
|
60
60
|
"sortablejs": "^1.15.6",
|
|
61
|
-
"@tmagic/
|
|
62
|
-
"@tmagic/
|
|
63
|
-
"@tmagic/
|
|
64
|
-
"@tmagic/
|
|
65
|
-
"@tmagic/
|
|
61
|
+
"@tmagic/form": "1.8.0-beta.5",
|
|
62
|
+
"@tmagic/table": "1.8.0-beta.5",
|
|
63
|
+
"@tmagic/utils": "1.8.0-beta.5",
|
|
64
|
+
"@tmagic/design": "1.8.0-beta.5",
|
|
65
|
+
"@tmagic/stage": "1.8.0-beta.5"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/events": "^3.0.3",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"type-fest": "^5.2.0",
|
|
77
77
|
"typescript": "^6.0.3",
|
|
78
78
|
"vue": "^3.5.34",
|
|
79
|
-
"@tmagic/core": "1.8.0-beta.
|
|
79
|
+
"@tmagic/core": "1.8.0-beta.5"
|
|
80
80
|
},
|
|
81
81
|
"peerDependenciesMeta": {
|
|
82
82
|
"typescript": {
|
|
@@ -180,7 +180,9 @@ const defaultLoadConfig = async (): Promise<FormConfig> => {
|
|
|
180
180
|
if (!props.type) {
|
|
181
181
|
return [];
|
|
182
182
|
}
|
|
183
|
-
return removeStyleDisplayConfig(
|
|
183
|
+
return removeStyleDisplayConfig(
|
|
184
|
+
await propsService.getPropsConfig(props.type, { node: props.value as unknown as MNode }),
|
|
185
|
+
);
|
|
184
186
|
}
|
|
185
187
|
case 'data-source': {
|
|
186
188
|
return dataSourceService.getFormConfig(props.type || 'base');
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<template v-else-if="data.type === 'button'">
|
|
15
15
|
<TMagicTooltip v-if="data.tooltip" effect="dark" placement="bottom-start" :content="data.tooltip">
|
|
16
|
-
<TMagicButton size="small" link :disabled="disabled">
|
|
16
|
+
<TMagicButton size="small" link :disabled="disabled" v-bind="data.buttonProps || {}">
|
|
17
17
|
<template #icon v-if="data.icon">
|
|
18
18
|
<MIcon :icon="data.icon"></MIcon>
|
|
19
19
|
</template>
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
</TMagicButton>
|
|
22
22
|
</TMagicTooltip>
|
|
23
23
|
|
|
24
|
-
<TMagicButton v-else size="small" link :disabled="disabled" :title="data.text">
|
|
24
|
+
<TMagicButton v-else size="small" link :disabled="disabled" :title="data.text" v-bind="data.buttonProps || {}">
|
|
25
25
|
<template #icon v-if="data.icon">
|
|
26
26
|
<MIcon :icon="data.icon"></MIcon>
|
|
27
27
|
</template>
|
package/src/index.ts
CHANGED
|
@@ -72,6 +72,7 @@ export { default as Resizer } from './components/Resizer.vue';
|
|
|
72
72
|
export { default as CodeBlockEditor } from './components/CodeBlockEditor.vue';
|
|
73
73
|
export { default as CompareForm } from './components/CompareForm.vue';
|
|
74
74
|
export { default as HistoryListBucket } from './layouts/history-list/Bucket.vue';
|
|
75
|
+
export { default as HistoryListBucketTab } from './layouts/history-list/BucketTab.vue';
|
|
75
76
|
export { default as HistoryDiffDialog } from './layouts/history-list/HistoryDiffDialog.vue';
|
|
76
77
|
export { default as FloatingBox } from './components/FloatingBox.vue';
|
|
77
78
|
export { default as Tree } from './components/Tree.vue';
|
package/src/initService.ts
CHANGED
|
@@ -168,7 +168,7 @@ onBeforeUnmount(() => {
|
|
|
168
168
|
const saveCode = (value: string) => {
|
|
169
169
|
try {
|
|
170
170
|
const parseDSL = getEditorConfig('parseDSL');
|
|
171
|
-
editorService.set('root', parseDSL(value));
|
|
171
|
+
editorService.set('root', parseDSL(value), { historySource: 'root-code' });
|
|
172
172
|
} catch (e: any) {
|
|
173
173
|
console.error(e);
|
|
174
174
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="m-editor-history-list-bucket">
|
|
3
3
|
<div class="m-editor-history-list-bucket-title">
|
|
4
|
-
<span>{{ title }}</span>
|
|
4
|
+
<span>{{ config.title }}</span>
|
|
5
5
|
<code>{{ String(bucketId) }}</code>
|
|
6
6
|
<span class="m-editor-history-list-bucket-count">{{ groups.length }} 组</span>
|
|
7
7
|
</div>
|
|
@@ -9,32 +9,10 @@
|
|
|
9
9
|
<ul class="m-editor-history-list-ul">
|
|
10
10
|
<GroupRow
|
|
11
11
|
v-for="group in groups"
|
|
12
|
-
:key="
|
|
13
|
-
:group
|
|
14
|
-
:
|
|
15
|
-
:
|
|
16
|
-
:op-type="group.opType"
|
|
17
|
-
:desc="describeGroup(group)"
|
|
18
|
-
:source="groupSource(group)"
|
|
19
|
-
:time="formatHistoryTime(groupTimestamp(group))"
|
|
20
|
-
:time-title="formatHistoryFullTime(groupTimestamp(group))"
|
|
21
|
-
:step-count="group.steps.length"
|
|
22
|
-
:sub-steps="
|
|
23
|
-
group.steps.map((s: any) => ({
|
|
24
|
-
index: s.index,
|
|
25
|
-
applied: s.applied,
|
|
26
|
-
isCurrent: s.isCurrent,
|
|
27
|
-
desc: describeStep(s.step),
|
|
28
|
-
diffable: isStepDiffable ? isStepDiffable(s.step) : false,
|
|
29
|
-
revertable: s.applied && (isStepRevertable ? isStepRevertable(s.step) : true),
|
|
30
|
-
source: s.step.source,
|
|
31
|
-
time: formatHistoryTime(s.step.timestamp),
|
|
32
|
-
timeTitle: formatHistoryFullTime(s.step.timestamp),
|
|
33
|
-
}))
|
|
34
|
-
"
|
|
35
|
-
:is-current="group.isCurrent"
|
|
36
|
-
:expanded="!!expanded[`${prefix}-${bucketId}-${group.steps[0]?.index}`]"
|
|
37
|
-
:goto-enabled="gotoEnabled"
|
|
12
|
+
:key="rowKey(group)"
|
|
13
|
+
:group="toRow(group)"
|
|
14
|
+
:expanded="isHistoryGroupExpanded(expanded, rowKey(group))"
|
|
15
|
+
:goto-enabled="config.gotoEnabled"
|
|
38
16
|
@toggle="(key: string) => $emit('toggle', key)"
|
|
39
17
|
@goto="(index: number) => $emit('goto', bucketId, index)"
|
|
40
18
|
@diff-step="(index: number) => $emit('diff-step', bucketId, index)"
|
|
@@ -43,24 +21,25 @@
|
|
|
43
21
|
<!--
|
|
44
22
|
初始状态项:永远位于该 bucket 列表底部(同样按倒序展示,最底部 = 最早状态)。
|
|
45
23
|
当 bucket 内所有 group 都未 applied 时即为当前位置。
|
|
46
|
-
showInitial=false 时不展示(用于没有"撤销到初始状态"语义的自定义历史,如业务模块历史)。
|
|
24
|
+
config.showInitial=false 时不展示(用于没有"撤销到初始状态"语义的自定义历史,如业务模块历史)。
|
|
47
25
|
-->
|
|
48
26
|
<InitialRow
|
|
49
|
-
v-if="showInitial !== false"
|
|
27
|
+
v-if="config.showInitial !== false"
|
|
50
28
|
:is-current="isInitial"
|
|
51
|
-
:goto-enabled="gotoEnabled"
|
|
29
|
+
:goto-enabled="config.gotoEnabled"
|
|
52
30
|
@goto-initial="$emit('goto-initial', bucketId)"
|
|
53
31
|
/>
|
|
54
32
|
</ul>
|
|
55
33
|
</div>
|
|
56
34
|
</template>
|
|
57
35
|
|
|
58
|
-
<script lang="ts" setup>
|
|
36
|
+
<script lang="ts" setup generic="T extends BaseStepValue = BaseStepValue">
|
|
59
37
|
import { computed } from 'vue';
|
|
60
38
|
|
|
61
|
-
import type {
|
|
39
|
+
import type { BaseStepValue, HistoryBucketConfig } from '@editor/type';
|
|
62
40
|
|
|
63
|
-
import {
|
|
41
|
+
import type { HistoryBucketGroup, HistoryRowGroup } from './composables';
|
|
42
|
+
import { isHistoryGroupExpanded, toRowGroup } from './composables';
|
|
64
43
|
import GroupRow from './GroupRow.vue';
|
|
65
44
|
import InitialRow from './InitialRow.vue';
|
|
66
45
|
|
|
@@ -68,44 +47,19 @@ defineOptions({
|
|
|
68
47
|
name: 'MEditorHistoryListBucket',
|
|
69
48
|
});
|
|
70
49
|
|
|
71
|
-
const props =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
/** 当前 bucket 下的所有历史分组,按时间倒序展示(最近的操作在前)。 */
|
|
85
|
-
groups: {
|
|
86
|
-
applied: boolean;
|
|
87
|
-
isCurrent?: boolean;
|
|
88
|
-
opType: HistoryOpType;
|
|
89
|
-
steps: { index: number; applied: boolean; isCurrent?: boolean; step: any }[];
|
|
90
|
-
}[];
|
|
91
|
-
/** 组级描述文案生成器,接收一个 group,返回展示文本。由父组件按业务类型注入。 */
|
|
92
|
-
describeGroup: (_group: any) => string;
|
|
93
|
-
/** 单步描述文案生成器,接收一个 step,返回展示文本。用于合并组展开后的子步列表。 */
|
|
94
|
-
describeStep: (_step: any) => string;
|
|
95
|
-
/** 判断某个 step 是否可查看差异(前后值都存在)。由父组件按业务类型注入;不传则一律不展示差异入口。 */
|
|
96
|
-
isStepDiffable?: (_step: any) => boolean;
|
|
97
|
-
/** 判断某个 step 是否支持回滚(如更新需带 changeRecords)。由父组件按业务类型注入;不传则已应用即可回滚。 */
|
|
98
|
-
isStepRevertable?: (_step: any) => boolean;
|
|
99
|
-
/** 共享的折叠状态表(key -> 是否展开),由顶层 panel 统一维护以便跨 tab 复用。 */
|
|
100
|
-
expanded: Record<string, boolean>;
|
|
101
|
-
/** 是否支持「跳转到该记录」(goto)。默认 true。 */
|
|
102
|
-
gotoEnabled?: boolean;
|
|
103
|
-
}>(),
|
|
104
|
-
{
|
|
105
|
-
showInitial: true,
|
|
106
|
-
gotoEnabled: true,
|
|
107
|
-
},
|
|
108
|
-
);
|
|
50
|
+
const props = defineProps<{
|
|
51
|
+
/**
|
|
52
|
+
* 该类历史的整体渲染配置(title / prefix / describe* / isStep* / showInitial / gotoEnabled)。
|
|
53
|
+
* 由父组件按业务类型注入,组件内部按需读取,避免逐项透传多个 props。
|
|
54
|
+
*/
|
|
55
|
+
config: HistoryBucketConfig<T>;
|
|
56
|
+
/** 当前 bucket 对应的目标 id(dataSource.id 或 codeBlock.id),同时用于组装子项的 key。 */
|
|
57
|
+
bucketId: string | number;
|
|
58
|
+
/** 当前 bucket 下的所有历史分组,按时间倒序展示(最近的操作在前)。 */
|
|
59
|
+
groups: HistoryBucketGroup<T>[];
|
|
60
|
+
/** 共享的折叠状态表(key -> 是否展开,缺省或 true 为展开、false 为收起),由顶层 panel 统一维护以便跨 tab 复用。 */
|
|
61
|
+
expanded: Record<string, boolean>;
|
|
62
|
+
}>();
|
|
109
63
|
|
|
110
64
|
defineEmits<{
|
|
111
65
|
/** 透传子组件 GroupRow 的 toggle,由上层 panel 更新 expanded。 */
|
|
@@ -123,6 +77,15 @@ defineEmits<{
|
|
|
123
77
|
(_e: 'revert-step', _bucketId: string | number, _index: number): void;
|
|
124
78
|
}>();
|
|
125
79
|
|
|
80
|
+
/**
|
|
81
|
+
* 子项 / 折叠状态 key:`${prefix}-${bucketId}-${组内首步 index}`。
|
|
82
|
+
* 以稳定的 step 索引(而非展示位置)标识分组,历史数据更新后已展开的分组状态仍能正确保持。
|
|
83
|
+
*/
|
|
84
|
+
const rowKey = (group: HistoryBucketGroup<T>) => `${props.config.prefix}-${props.bucketId}-${group.steps[0]?.index}`;
|
|
85
|
+
|
|
86
|
+
/** 把原始分组派生为 GroupRow 直接消费的视图模型。 */
|
|
87
|
+
const toRow = (group: HistoryBucketGroup<T>): HistoryRowGroup => toRowGroup(group, rowKey(group), props.config);
|
|
88
|
+
|
|
126
89
|
/** 该 bucket 是否处于初始状态(栈 cursor=0),等价于全部 group 都未 applied。 */
|
|
127
90
|
const isInitial = computed(() => props.groups.length > 0 && props.groups.every((g) => !g.applied));
|
|
128
91
|
</script>
|
|
@@ -1,69 +1,59 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div v-if="!buckets.length" class="m-editor-history-list-empty">暂无操作记录</div>
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
3
|
+
<template v-else>
|
|
4
|
+
<div class="m-editor-history-list-toolbar">
|
|
5
|
+
<span class="m-editor-history-list-clear" :title="`清空${config.title}的历史记录`" @click="$emit('clear')"
|
|
6
|
+
>清空</span
|
|
7
|
+
>
|
|
8
|
+
</div>
|
|
9
|
+
<TMagicScrollbar max-height="360px">
|
|
10
|
+
<Bucket
|
|
11
|
+
v-for="bucket in buckets"
|
|
12
|
+
:key="`${config.prefix}-${bucket.id}`"
|
|
13
|
+
:config="config"
|
|
14
|
+
:bucket-id="bucket.id"
|
|
15
|
+
:groups="bucket.groups"
|
|
16
|
+
:expanded="expanded"
|
|
17
|
+
@toggle="(key: string) => $emit('toggle', key)"
|
|
18
|
+
@goto="(id: string | number, index: number) => $emit('goto', id, index)"
|
|
19
|
+
@goto-initial="(id: string | number) => $emit('goto-initial', id)"
|
|
20
|
+
@diff-step="(id: string | number, index: number) => $emit('diff-step', id, index)"
|
|
21
|
+
@revert-step="(id: string | number, index: number) => $emit('revert-step', id, index)"
|
|
22
|
+
/>
|
|
23
|
+
</TMagicScrollbar>
|
|
24
|
+
</template>
|
|
24
25
|
</template>
|
|
25
26
|
|
|
26
|
-
<script lang="ts" setup>
|
|
27
|
+
<script lang="ts" setup generic="T extends BaseStepValue = BaseStepValue">
|
|
27
28
|
import { TMagicScrollbar } from '@tmagic/design';
|
|
28
29
|
|
|
30
|
+
import type { BaseStepValue, HistoryBucketConfig } from '@editor/type';
|
|
31
|
+
|
|
29
32
|
import Bucket from './Bucket.vue';
|
|
33
|
+
import type { HistoryBucketGroup } from './composables';
|
|
30
34
|
|
|
31
35
|
defineOptions({
|
|
32
36
|
name: 'MEditorHistoryListBucketTab',
|
|
33
37
|
});
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
isStepRevertable?: (_step: any) => boolean;
|
|
54
|
-
/**
|
|
55
|
-
* 共享的折叠状态表(key -> 是否展开),由顶层 panel 统一维护。
|
|
56
|
-
* 本 tab 使用 `${prefix}-${id}-${组内首步 index}` 作为 key——以稳定的 step 索引而非展示位置标识分组,
|
|
57
|
-
* 这样历史数据更新后已展开的分组状态仍能正确保持。
|
|
58
|
-
*/
|
|
59
|
-
expanded: Record<string, boolean>;
|
|
60
|
-
/** 是否支持「跳转到该记录」(goto),透传给 Bucket。默认 true。 */
|
|
61
|
-
gotoEnabled?: boolean;
|
|
62
|
-
}>(),
|
|
63
|
-
{
|
|
64
|
-
gotoEnabled: true,
|
|
65
|
-
},
|
|
66
|
-
);
|
|
39
|
+
defineProps<{
|
|
40
|
+
/**
|
|
41
|
+
* 该类历史的整体渲染配置(title / prefix / describe* / isStep* / showInitial / gotoEnabled),
|
|
42
|
+
* 由父组件按业务类型注入并整体透传给 Bucket,避免逐项透传多个 props。
|
|
43
|
+
*/
|
|
44
|
+
config: HistoryBucketConfig<T>;
|
|
45
|
+
/**
|
|
46
|
+
* 已按目标 id 聚拢成的 bucket 列表,每个 bucket 内部的 groups 已按时间倒序排好。
|
|
47
|
+
* 空数组时显示空态。
|
|
48
|
+
*/
|
|
49
|
+
buckets: { id: string | number; groups: HistoryBucketGroup<T>[] }[];
|
|
50
|
+
/**
|
|
51
|
+
* 共享的折叠状态表(key -> 是否展开),由顶层 panel 统一维护。
|
|
52
|
+
* key 形如 `${prefix}-${id}-${组内首步 index}`——以稳定的 step 索引而非展示位置标识分组,
|
|
53
|
+
* 这样历史数据更新后已展开的分组状态仍能正确保持。
|
|
54
|
+
*/
|
|
55
|
+
expanded: Record<string, boolean>;
|
|
56
|
+
}>();
|
|
67
57
|
|
|
68
58
|
defineEmits<{
|
|
69
59
|
/** 透传子组件 Bucket 的 toggle 事件给上层 panel,由其更新 expanded。 */
|
|
@@ -76,5 +66,7 @@ defineEmits<{
|
|
|
76
66
|
(_e: 'diff-step', _targetId: string | number, _index: number): void;
|
|
77
67
|
/** 透传 Bucket 的 revert-step 事件,携带目标 id 与 step 索引(类 git revert)。 */
|
|
78
68
|
(_e: 'revert-step', _targetId: string | number, _index: number): void;
|
|
69
|
+
/** 用户点击"清空"按钮,请求清空该类(数据源 / 代码块)的全部历史记录(由上层弹窗二次确认后执行)。 */
|
|
70
|
+
(_e: 'clear'): void;
|
|
79
71
|
}>();
|
|
80
72
|
</script>
|