@tmagic/editor 1.8.0-beta.4 → 1.8.0-beta.6

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 (76) hide show
  1. package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +1 -1
  2. package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +6 -6
  3. package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +4 -1
  4. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +8 -2
  5. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +25 -8
  6. package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +6 -4
  7. package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +25 -12
  8. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +27 -5
  9. package/dist/es/index.js +6 -3
  10. package/dist/es/initService.js +1 -1
  11. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +1 -1
  12. package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +19 -55
  13. package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +22 -39
  14. package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +149 -103
  15. package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +32 -8
  16. package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +335 -213
  17. package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +36 -7
  18. package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +47 -60
  19. package/dist/es/layouts/history-list/composables.js +73 -32
  20. package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +4 -2
  21. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +5 -1
  22. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +16 -3
  23. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +23 -1
  24. package/dist/es/services/codeBlock.js +96 -37
  25. package/dist/es/services/dataSource.js +70 -26
  26. package/dist/es/services/editor.js +266 -104
  27. package/dist/es/services/history.js +271 -212
  28. package/dist/es/services/ui.js +3 -0
  29. package/dist/es/style.css +53 -7
  30. package/dist/es/utils/data-source/index.js +2 -0
  31. package/dist/es/utils/editor.js +103 -49
  32. package/dist/es/utils/history.js +232 -0
  33. package/dist/es/utils/indexed-db.js +86 -0
  34. package/dist/es/utils/undo-redo.js +60 -1
  35. package/dist/style.css +53 -7
  36. package/dist/tmagic-editor.umd.cjs +2064 -1000
  37. package/package.json +7 -7
  38. package/src/components/CompareForm.vue +3 -1
  39. package/src/components/ToolButton.vue +2 -2
  40. package/src/fields/CodeSelectCol.vue +7 -1
  41. package/src/fields/DataSourceFieldSelect/FieldSelect.vue +16 -2
  42. package/src/fields/DataSourceFields.vue +37 -8
  43. package/src/fields/DataSourceMethodSelect.vue +9 -4
  44. package/src/fields/DataSourceMethods.vue +42 -21
  45. package/src/fields/StyleSetter/components/Border.vue +15 -6
  46. package/src/index.ts +1 -0
  47. package/src/initService.ts +1 -1
  48. package/src/layouts/Framework.vue +1 -1
  49. package/src/layouts/history-list/Bucket.vue +34 -71
  50. package/src/layouts/history-list/BucketTab.vue +46 -54
  51. package/src/layouts/history-list/GroupRow.vue +146 -111
  52. package/src/layouts/history-list/HistoryDiffDialog.vue +94 -68
  53. package/src/layouts/history-list/HistoryListPanel.vue +298 -115
  54. package/src/layouts/history-list/InitialRow.vue +28 -9
  55. package/src/layouts/history-list/PageTab.vue +57 -51
  56. package/src/layouts/history-list/composables.ts +157 -36
  57. package/src/layouts/page-bar/PageBar.vue +4 -2
  58. package/src/layouts/sidebar/Sidebar.vue +6 -1
  59. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +30 -2
  60. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +26 -1
  61. package/src/services/codeBlock.ts +113 -37
  62. package/src/services/dataSource.ts +94 -40
  63. package/src/services/editor.ts +376 -136
  64. package/src/services/history.ts +306 -209
  65. package/src/services/ui.ts +7 -0
  66. package/src/theme/history-list-panel.scss +72 -5
  67. package/src/theme/page-bar.scss +0 -4
  68. package/src/theme/style-setter/border.scss +4 -1
  69. package/src/type.ts +183 -64
  70. package/src/utils/data-source/index.ts +2 -0
  71. package/src/utils/editor.ts +166 -60
  72. package/src/utils/history.ts +308 -0
  73. package/src/utils/index.ts +2 -0
  74. package/src/utils/indexed-db.ts +122 -0
  75. package/src/utils/undo-redo.ts +88 -0
  76. package/types/index.d.ts +813 -302
@@ -1,76 +1,74 @@
1
1
  <template>
2
- <Teleport to="body">
3
- <TMagicDialog
4
- v-model="visible"
5
- class="m-editor-history-diff-dialog"
6
- :title="dialogTitle"
7
- top="5vh"
8
- destroy-on-close
9
- append-to-body
10
- :width="width"
11
- @close="onClose"
12
- >
13
- <div v-if="payload" class="m-editor-history-diff-dialog-body">
14
- <div v-if="onConfirm" class="m-editor-history-diff-dialog-notice">仅回滚有差异的字段</div>
15
-
16
- <div class="m-editor-history-diff-dialog-header">
17
- <span class="m-editor-history-diff-dialog-target">{{ targetText }}</span>
18
- <div class="m-editor-history-diff-dialog-controls">
19
- <TMagicRadioGroup v-model="viewMode" size="small" class="m-editor-history-diff-dialog-view">
20
- <TMagicRadioButton value="form">表单对比</TMagicRadioButton>
21
- <TMagicRadioButton value="code">源码对比</TMagicRadioButton>
22
- </TMagicRadioGroup>
23
-
24
- <TMagicRadioGroup v-model="mode" size="small" class="m-editor-history-diff-dialog-mode">
25
- <TMagicRadioButton value="before">与修改前对比</TMagicRadioButton>
26
- <TMagicRadioButton value="current" :disabled="!hasCurrent">与当前对比</TMagicRadioButton>
27
- </TMagicRadioGroup>
28
- </div>
29
- </div>
2
+ <TMagicDialog
3
+ v-model="visible"
4
+ class="m-editor-history-diff-dialog"
5
+ :title="dialogTitle"
6
+ top="5vh"
7
+ destroy-on-close
8
+ append-to-body
9
+ :width="width"
10
+ @close="onClose"
11
+ >
12
+ <div v-if="payload && visible" class="m-editor-history-diff-dialog-body">
13
+ <div v-if="onConfirm" class="m-editor-history-diff-dialog-notice">仅回滚有差异的字段</div>
14
+
15
+ <div class="m-editor-history-diff-dialog-header">
16
+ <span class="m-editor-history-diff-dialog-target">{{ targetText }}</span>
17
+ <div class="m-editor-history-diff-dialog-controls">
18
+ <TMagicRadioGroup v-model="viewMode" size="small" class="m-editor-history-diff-dialog-view">
19
+ <TMagicRadioButton value="form">表单对比</TMagicRadioButton>
20
+ <TMagicRadioButton value="code">源码对比</TMagicRadioButton>
21
+ </TMagicRadioGroup>
30
22
 
31
- <div class="m-editor-history-diff-dialog-legend">
32
- <TMagicTag size="small" type="danger">{{ leftLabel }}</TMagicTag>
33
- <span class="m-editor-history-diff-dialog-arrow">→</span>
34
- <TMagicTag size="small" type="success">{{ rightLabel }}</TMagicTag>
35
- <span v-if="mode === 'current' && isSameAsCurrent" class="m-editor-history-diff-dialog-tip">
36
- 当前值与该步修改后一致,无差异
37
- </span>
23
+ <TMagicRadioGroup v-model="mode" size="small" class="m-editor-history-diff-dialog-mode">
24
+ <TMagicRadioButton value="before">与修改前对比</TMagicRadioButton>
25
+ <TMagicRadioButton value="current" :disabled="!hasCurrent">与当前对比</TMagicRadioButton>
26
+ </TMagicRadioGroup>
38
27
  </div>
28
+ </div>
39
29
 
40
- <CompareForm
41
- v-if="viewMode === 'form'"
42
- :category="payload.category"
43
- :type="payload.type"
44
- :data-source-type="payload.dataSourceType"
45
- :value="rightValue"
46
- :last-value="leftValue"
47
- :extend-state="extendState"
48
- :load-config="loadConfig"
49
- :self-diff-field-types="selfDiffFieldTypes"
50
- height="70vh"
51
- />
52
-
53
- <CodeEditor
54
- v-else
55
- type="diff"
56
- language="json"
57
- :init-values="leftValue"
58
- :modified-values="rightValue"
59
- :options="codeDiffOptions"
60
- disabled-full-screen
61
- height="70vh"
62
- />
30
+ <div class="m-editor-history-diff-dialog-legend">
31
+ <TMagicTag size="small" type="danger">{{ leftLabel }}</TMagicTag>
32
+ <span class="m-editor-history-diff-dialog-arrow">→</span>
33
+ <TMagicTag size="small" type="success">{{ rightLabel }}</TMagicTag>
34
+ <span v-if="mode === 'current' && isSameAsCurrent" class="m-editor-history-diff-dialog-tip">
35
+ 当前值与该步修改后一致,无差异
36
+ </span>
63
37
  </div>
64
38
 
65
- <template #footer>
66
- <template v-if="onConfirm">
67
- <TMagicButton size="small" @click="visible = false">取消</TMagicButton>
68
- <TMagicButton size="small" type="primary" @click="onConfirmClick">确定回滚</TMagicButton>
69
- </template>
70
- <TMagicButton v-else size="small" @click="visible = false">关闭</TMagicButton>
39
+ <CompareForm
40
+ v-if="viewMode === 'form'"
41
+ :category="payload.category"
42
+ :type="payload.type"
43
+ :data-source-type="payload.dataSourceType"
44
+ :value="rightValue"
45
+ :last-value="leftValue"
46
+ :extend-state="extendState"
47
+ :load-config="loadConfig"
48
+ :self-diff-field-types="selfDiffFieldTypes"
49
+ height="70vh"
50
+ />
51
+
52
+ <CodeEditor
53
+ v-else
54
+ type="diff"
55
+ language="json"
56
+ :init-values="leftValue"
57
+ :modified-values="rightValue"
58
+ :options="codeDiffOptions"
59
+ disabled-full-screen
60
+ height="70vh"
61
+ />
62
+ </div>
63
+
64
+ <template #footer>
65
+ <template v-if="isConfirm">
66
+ <TMagicButton size="small" @click="visible = false">取消</TMagicButton>
67
+ <TMagicButton size="small" type="primary" @click="onConfirmClick">确定回滚</TMagicButton>
71
68
  </template>
72
- </TMagicDialog>
73
- </Teleport>
69
+ <TMagicButton v-else size="small" @click="visible = false">关闭</TMagicButton>
70
+ </template>
71
+ </TMagicDialog>
74
72
  </template>
75
73
 
76
74
  <script lang="ts" setup>
@@ -102,6 +100,7 @@ const props = withDefaults(
102
100
  */
103
101
  loadConfig?: CompareFormLoadConfig;
104
102
  width?: string;
103
+ isConfirm?: boolean;
105
104
  onConfirm?: () => void;
106
105
  selfDiffFieldTypes?: string[];
107
106
  }>(),
@@ -178,10 +177,15 @@ const isSameAsCurrent = computed(() => {
178
177
  return isEqual(payload.value.value, payload.value.currentValue);
179
178
  });
180
179
 
180
+ /** confirm() 的 resolve,仅在「等待用户确认回滚」期间存在 */
181
+ let confirmResolve: ((_value: boolean) => void) | null = null;
182
+
181
183
  const onConfirmClick = () => {
182
- const cb = props.onConfirm;
184
+ props.onConfirm?.();
183
185
 
184
- cb?.();
186
+ // 用户确认回滚:resolve(true),并清空以避免随后 visible=false 再 resolve(false)
187
+ confirmResolve?.(true);
188
+ confirmResolve = null;
185
189
 
186
190
  visible.value = false;
187
191
  };
@@ -210,6 +214,24 @@ const open = (p: DiffDialogPayload) => {
210
214
  visible.value = true;
211
215
  };
212
216
 
217
+ /**
218
+ * 以 Promise 形式打开确认回滚弹窗:
219
+ * - 用户点击「确定回滚」时 resolve(true);
220
+ * - 取消 / 关闭 / 按 Esc 等其他方式关闭弹窗时 resolve(false)。
221
+ *
222
+ * 同一时刻只允许一个待确认流程,重复调用会先 resolve(false) 掉上一个。
223
+ */
224
+ const confirm = (p: DiffDialogPayload): Promise<boolean> => {
225
+ // 终止上一个未完成的确认流程,避免悬挂的 Promise
226
+ confirmResolve?.(false);
227
+ confirmResolve = null;
228
+
229
+ return new Promise<boolean>((resolve) => {
230
+ confirmResolve = resolve;
231
+ open(p);
232
+ });
233
+ };
234
+
213
235
  const close = () => {
214
236
  visible.value = false;
215
237
  };
@@ -218,6 +240,9 @@ const close = () => {
218
240
  watch(visible, (v) => {
219
241
  if (!v) {
220
242
  payload.value = null;
243
+ // 非「确定回滚」方式关闭(取消 / Esc / 点遮罩等)时,resolve(false)
244
+ confirmResolve?.(false);
245
+ confirmResolve = null;
221
246
  }
222
247
  });
223
248
 
@@ -227,6 +252,7 @@ const onClose = () => {
227
252
 
228
253
  defineExpose({
229
254
  open,
255
+ confirm,
230
256
  close,
231
257
  });
232
258
  </script>