mail-editor-pancake 0.2.7 → 0.3.0

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 (60) hide show
  1. package/README.md +37 -4
  2. package/package.json +1 -1
  3. package/packages/blocks/dist/index.js +275 -263
  4. package/packages/blocks/dist/index.js.map +1 -1
  5. package/packages/blocks/package.json +1 -3
  6. package/packages/blocks/src/button.ts +1 -1
  7. package/packages/blocks/src/hero.ts +6 -3
  8. package/packages/blocks/src/i18n.ts +10 -11
  9. package/packages/blocks/src/image.ts +2 -1
  10. package/packages/blocks/src/index.ts +5 -3
  11. package/packages/blocks/src/social.ts +3 -3
  12. package/packages/blocks/src/socialGroup.ts +4 -4
  13. package/packages/blocks/src/socialShared.ts +23 -3
  14. package/packages/blocks/src/text.ts +8 -4
  15. package/packages/blocks/vite.config.ts +1 -1
  16. package/packages/core/dist/index.d.ts +96 -1
  17. package/packages/core/dist/index.js +4349 -3594
  18. package/packages/core/dist/index.js.map +1 -1
  19. package/packages/core/dist/style.css +1 -1
  20. package/packages/core/package.json +1 -3
  21. package/packages/core/src/editor/BlockCodeModal.ts +6 -7
  22. package/packages/core/src/editor/Canvas.ts +559 -21
  23. package/packages/core/src/editor/ColorPickerPopover.ts +2 -2
  24. package/packages/core/src/editor/Editor.ts +381 -41
  25. package/packages/core/src/editor/ExportModal.ts +7 -9
  26. package/packages/core/src/editor/FocusBreadcrumb.ts +3 -3
  27. package/packages/core/src/editor/ImportDocModal.ts +50 -7
  28. package/packages/core/src/editor/InlineEditor.ts +43 -39
  29. package/packages/core/src/editor/LeftPanel.ts +2 -4
  30. package/packages/core/src/editor/Modal.ts +1 -1
  31. package/packages/core/src/editor/PreviewModal.ts +3 -8
  32. package/packages/core/src/editor/RichTextToolbar.ts +26 -15
  33. package/packages/core/src/editor/RightPanel.ts +142 -126
  34. package/packages/core/src/editor/SourceView.ts +5 -3
  35. package/packages/core/src/editor/Topbar.ts +79 -34
  36. package/packages/core/src/editor/VariablePickerPanel.ts +3 -5
  37. package/packages/core/src/editor/imageAssets.ts +1 -1
  38. package/packages/core/src/editor/styles.css +258 -86
  39. package/packages/core/src/i18n/index.ts +139 -41
  40. package/packages/core/src/index.ts +11 -1
  41. package/packages/core/src/renderer/index.ts +3 -6
  42. package/packages/core/src/renderer/mjml.ts +5 -10
  43. package/packages/core/src/store/store.ts +2 -6
  44. package/packages/core/src/types.ts +3 -3
  45. package/packages/core/src/utils/accentColor.ts +3 -3
  46. package/packages/core/src/utils/docClipboard.ts +107 -2
  47. package/packages/core/src/utils/dynamicVariantHtml.ts +1 -1
  48. package/packages/core/src/utils/emailListStyles.ts +1 -1
  49. package/packages/core/src/utils/fontWeightSteps.ts +7 -6
  50. package/packages/core/src/utils/html.ts +3 -2
  51. package/packages/core/src/utils/inlineListEditing.ts +19 -35
  52. package/packages/core/src/utils/link.ts +3 -6
  53. package/packages/core/src/utils/lockedMjml.ts +2 -2
  54. package/packages/core/src/utils/modalSize.ts +4 -3
  55. package/packages/core/src/utils/richHtmlEmpty.ts +3 -1
  56. package/packages/core/src/variables/index.ts +4 -5
  57. package/packages/core/vite.config.ts +1 -1
  58. package/playground/vanilla/index.html +17 -0
  59. package/playground/vanilla/src/main.ts +152 -123
  60. package/playground/vanilla/vite.config.ts +5 -2
package/README.md CHANGED
@@ -128,6 +128,8 @@ http://localhost:5173/?locale=zh-CN
128
128
  http://localhost:5173/?locale=en-US
129
129
  ```
130
130
 
131
+ 也可点击页面右下角语言按钮即时切换:保留当前画布内容,销毁旧实例后按新语言重建,并同步 URL 参数。
132
+
131
133
  ---
132
134
 
133
135
  ## 安装与集成
@@ -452,6 +454,7 @@ function createBlocks(locale: SimpleMailLocale) {
452
454
  | `hideTopbarClearCanvas?` / `hideTopbarResetContent?` | 隐藏清空 / 重置 |
453
455
  | `hideTopbarDocClipboard?` | 隐藏「复制设计稿」「导入设计稿」 |
454
456
  | `hideTopbarInsertVariable?` | 隐藏顶栏「插入变量」(改由应用内其他入口插入时) |
457
+ | `hideTopbarSectionSelect?` | 隐藏顶栏「选择节」入口(Section 批量复制 / 导出 / 删除) |
455
458
  | `topbarCompact?` | 顶栏默认仅图标(窄屏/嵌入) |
456
459
  | `topbarLabels?` | `auto`(默认)\| `never` \| `always`;与 `topbarCompact` 配合 |
457
460
  | `topbarCompactMinWidth?` | `topbarLabels: auto` 时展示文案的最小宽度 px,默认 1200 |
@@ -569,20 +572,50 @@ import {
569
572
  - 复制:信封 `{ kind: 'simple-mail/doc', formatVersion: 1, doc }` 写入系统剪贴板。
570
573
  - 导入:粘贴 JSON 或裸 `EmailDoc`(`version: '1'`),覆盖当前画布(可撤销)。
571
574
 
575
+ ### 局部设计稿(追加粘贴)
576
+
577
+ Section / Block 悬浮工具条的 **复制设计稿** 按钮(双层文档图标)可只复制当前节/组件:
578
+
579
+ - 信封 `{ kind: 'simple-mail/selection', formatVersion: 1, sections, blocks, variables }`。
580
+ - 粘贴走同一个「导入设计稿」对话框:识别到局部信封时按钮自动变为「追加到画布」,不覆盖现有内容。
581
+ - 追加语义:Section 插到当前选中节之后(无选中则追加末尾);Block 插到选中块之后,否则包一层单列 Section 落到末尾。
582
+ - 未注册的 `custom:*` 类型会被跳过并在 toast 中提示;内容引用到的 `{{key}}` 变量按 key 并入目标文档变量列表(已存在的不重复)。
583
+ - 全程可撤销(⌘Z)。
584
+
572
585
  ```ts
573
- await editor.copyDocDesign();
574
- editor.openImportDocDesign();
575
- editor.importDocDesignFromJson(raw); // 与对话框「应用」相同
586
+ await editor.copySelectionDesign(); // 复制当前选中 Section/Block
587
+ await editor.copySelectionDesign({ sectionId: 'sec_x' }); // 显式指定
588
+ editor.importSelectionDesignFromJson(raw); // 程序化追加(simple-mail/selection 信封)
576
589
 
577
590
  import {
578
591
  DOC_CLIPBOARD_KIND,
592
+ SELECTION_CLIPBOARD_KIND,
579
593
  parseDocClipboard,
594
+ parseSelectionClipboard,
580
595
  regenerateDocIds,
581
596
  serializeDocClipboard,
597
+ serializeSelectionClipboard,
598
+ collectSelectionVariableKeys,
582
599
  } from '@simple-mail/core';
583
600
  ```
584
601
 
585
- 跨实例迁移时可用 `regenerateDocIds` 避免 id 冲突。
602
+ ### 节选择模式(批量复制 / 导出 / 删除)
603
+
604
+ 顶栏「选择节」按钮(勾选列表图标,可通过 `hideTopbarSectionSelect` 隐藏)进入 Section 批量操作模式:
605
+
606
+ - 进入后点击 Section 勾选 / 取消(屏蔽单选、拖拽排序、内联编辑与悬浮工具条),底部出现浮动操作条:**已选 N 节 · 全选 · 复制设计稿 · 导出 JSON · 删除 · 完成**。
607
+ - **复制设计稿**:多个 Section 一次性写入剪贴板(与局部设计稿同信封,可在其他画布「追加」粘贴)。
608
+ - **导出 JSON**:下载 `simple-mail-sections-<日期>.json`,内容与剪贴板信封同构,可手动粘贴到导入对话框。
609
+ - **删除**:弹出确认后一次 `store.update` 批量删除,单条撤销记录(⌘Z 整体恢复)。
610
+ - Esc 或再次点击顶栏按钮退出模式;文档变化(撤销 / 清空等)时已失效的勾选自动清理。
611
+
612
+ ```ts
613
+ await editor.copySectionsDesign(['sec_1', 'sec_2']); // 批量复制多节到剪贴板
614
+ editor.exportSectionsDesign(['sec_1', 'sec_2']); // 批量导出多节 JSON 文件
615
+ editor.removeSections(['sec_1', 'sec_2']); // 批量删除(返回实际删除数量)
616
+ ```
617
+
618
+ 跨实例迁移时可用 `regenerateDocIds` 避免 id 冲突;局部粘贴由编辑器自动重生成 id(`remapSectionIds` / `regenerateBlockId`)。
586
619
 
587
620
  ---
588
621
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mail-editor-pancake",
3
- "version": "0.2.7",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "面向运营的轻量邮件可视化编辑器",
6
6
  "devDependencies": {