@opentiny/fluent-editor 4.1.0 → 4.1.2

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 (128) hide show
  1. package/es/config/editor.config.es.js +1 -1
  2. package/es/config/editor.config.es.js.map +1 -1
  3. package/es/config/editor.utils.es.js +33 -0
  4. package/es/config/editor.utils.es.js.map +1 -1
  5. package/es/config/i18n/en-us.es.js +4 -1
  6. package/es/config/i18n/en-us.es.js.map +1 -1
  7. package/es/config/i18n/zh-cn.es.js +4 -1
  8. package/es/config/i18n/zh-cn.es.js.map +1 -1
  9. package/es/config/index.es.js +3 -1
  10. package/es/core/fluent-editor.es.js +29 -4
  11. package/es/core/fluent-editor.es.js.map +1 -1
  12. package/es/fluent-editor.es.js +2 -11
  13. package/es/fluent-editor.es.js.map +1 -1
  14. package/es/formats/strike.es.js +1 -1
  15. package/es/formats/strike.es.js.map +1 -1
  16. package/es/index.es.js +6 -4
  17. package/es/index.es.js.map +1 -1
  18. package/es/modules/counter.es.js +2 -3
  19. package/es/modules/counter.es.js.map +1 -1
  20. package/es/modules/custom-clipboard.es.js +14 -16
  21. package/es/modules/custom-clipboard.es.js.map +1 -1
  22. package/es/modules/custom-image/blot-formatter.es.js +2 -2
  23. package/es/modules/custom-image/blot-formatter.es.js.map +1 -1
  24. package/es/modules/custom-image/index.es.js +1 -1
  25. package/es/modules/custom-image/preview/preview-modal.es.js +17 -6
  26. package/es/modules/custom-image/preview/preview-modal.es.js.map +1 -1
  27. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -1
  28. package/es/modules/custom-uploader.es.js.map +1 -1
  29. package/es/modules/file/modules/file-module.es.js.map +1 -1
  30. package/es/modules/flow-chart/i18n/index.es.js +3 -5
  31. package/es/modules/flow-chart/i18n/index.es.js.map +1 -1
  32. package/es/modules/flow-chart/modules/context-menu.es.js +10 -13
  33. package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -1
  34. package/es/modules/flow-chart/modules/control-panel.es.js +13 -16
  35. package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -1
  36. package/es/modules/index.es.js +2 -2
  37. package/es/modules/index.es.js.map +1 -1
  38. package/es/modules/link/modules/tooltip.es.js +42 -27
  39. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  40. package/es/modules/mind-map/i18n/index.es.js +3 -5
  41. package/es/modules/mind-map/i18n/index.es.js.map +1 -1
  42. package/es/modules/mind-map/modules/context-menu.es.js +11 -11
  43. package/es/modules/mind-map/modules/context-menu.es.js.map +1 -1
  44. package/es/modules/mind-map/modules/control-panel.es.js +7 -9
  45. package/es/modules/mind-map/modules/control-panel.es.js.map +1 -1
  46. package/es/modules/shortcut-key/index.es.js +6 -6
  47. package/es/modules/shortcut-key/index.es.js.map +1 -1
  48. package/es/modules/table-up/index.es.js +23 -33
  49. package/es/modules/table-up/index.es.js.map +1 -1
  50. package/es/modules/toolbar/toolbar-tip.es.js +27 -5
  51. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  52. package/es/themes/snow.es.js +21 -4
  53. package/es/themes/snow.es.js.map +1 -1
  54. package/lib/config/editor.config.cjs.js +1 -1
  55. package/lib/config/editor.config.cjs.js.map +1 -1
  56. package/lib/config/editor.utils.cjs.js +33 -0
  57. package/lib/config/editor.utils.cjs.js.map +1 -1
  58. package/lib/config/i18n/en-us.cjs.js +4 -1
  59. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  60. package/lib/config/i18n/zh-cn.cjs.js +4 -1
  61. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  62. package/lib/config/index.cjs.js +2 -0
  63. package/lib/config/index.cjs.js.map +1 -1
  64. package/lib/core/fluent-editor.cjs.js +29 -4
  65. package/lib/core/fluent-editor.cjs.js.map +1 -1
  66. package/lib/fluent-editor.cjs.js +2 -11
  67. package/lib/fluent-editor.cjs.js.map +1 -1
  68. package/lib/formats/strike.cjs.js +1 -1
  69. package/lib/formats/strike.cjs.js.map +1 -1
  70. package/lib/index.cjs.js +18 -5
  71. package/lib/index.cjs.js.map +1 -1
  72. package/lib/modules/counter.cjs.js +2 -3
  73. package/lib/modules/counter.cjs.js.map +1 -1
  74. package/lib/modules/custom-clipboard.cjs.js +14 -16
  75. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  76. package/lib/modules/custom-image/blot-formatter.cjs.js +2 -2
  77. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -1
  78. package/lib/modules/custom-image/index.cjs.js +1 -1
  79. package/lib/modules/custom-image/preview/preview-modal.cjs.js +17 -6
  80. package/lib/modules/custom-image/preview/preview-modal.cjs.js.map +1 -1
  81. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -1
  82. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  83. package/lib/modules/file/modules/file-module.cjs.js.map +1 -1
  84. package/lib/modules/flow-chart/i18n/index.cjs.js +3 -5
  85. package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -1
  86. package/lib/modules/flow-chart/modules/context-menu.cjs.js +10 -13
  87. package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -1
  88. package/lib/modules/flow-chart/modules/control-panel.cjs.js +13 -16
  89. package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -1
  90. package/lib/modules/index.cjs.js +14 -2
  91. package/lib/modules/index.cjs.js.map +1 -1
  92. package/lib/modules/link/modules/tooltip.cjs.js +42 -27
  93. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  94. package/lib/modules/mind-map/i18n/index.cjs.js +3 -5
  95. package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -1
  96. package/lib/modules/mind-map/modules/context-menu.cjs.js +11 -11
  97. package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -1
  98. package/lib/modules/mind-map/modules/control-panel.cjs.js +7 -9
  99. package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -1
  100. package/lib/modules/shortcut-key/index.cjs.js +4 -4
  101. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  102. package/lib/modules/table-up/index.cjs.js +23 -33
  103. package/lib/modules/table-up/index.cjs.js.map +1 -1
  104. package/lib/modules/toolbar/toolbar-tip.cjs.js +26 -4
  105. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  106. package/lib/themes/snow.cjs.js +20 -3
  107. package/lib/themes/snow.cjs.js.map +1 -1
  108. package/package.json +4 -2
  109. package/style.css +176 -144
  110. package/types/config/editor.config.d.ts +4 -2
  111. package/types/config/editor.utils.d.ts +8 -0
  112. package/types/config/i18n/en-us.d.ts +4 -1
  113. package/types/config/i18n/zh-cn.d.ts +4 -1
  114. package/types/config/types/editor-modules.interface.d.ts +3 -2
  115. package/types/core/fluent-editor.d.ts +1 -1
  116. package/types/modules/custom-clipboard.d.ts +2 -0
  117. package/types/modules/custom-image/index.d.ts +1 -1
  118. package/types/modules/custom-image/preview/preview-modal.d.ts +1 -0
  119. package/types/modules/flow-chart/i18n/index.d.ts +1 -1
  120. package/types/modules/index.d.ts +2 -1
  121. package/types/modules/link/modules/tooltip.d.ts +1 -0
  122. package/types/modules/mind-map/i18n/index.d.ts +1 -1
  123. package/types/modules/table-up/index.d.ts +3 -26
  124. package/es/modules/i18n.es.js +0 -62
  125. package/es/modules/i18n.es.js.map +0 -1
  126. package/lib/modules/i18n.cjs.js +0 -62
  127. package/lib/modules/i18n.cjs.js.map +0 -1
  128. package/types/modules/i18n.d.ts +0 -14
@@ -85,7 +85,7 @@ const FULL_TOOLBAR = [
85
85
  ],
86
86
  ["bold", "italic", "strike", "underline", "divider"],
87
87
  [{ color: [] }, { background: [] }],
88
- [{ align: "" }, { align: "center" }, { align: "right" }, { align: "justify" }],
88
+ [{ align: ["", "center", "right"] }, { align: "" }, { align: "center" }, { align: "right" }, { align: "justify" }],
89
89
  [{ list: "ordered" }, { list: "bullet" }, { list: "check" }],
90
90
  [{ script: "sub" }, { script: "super" }],
91
91
  [{ indent: "-1" }, { indent: "+1" }],
@@ -1 +1 @@
1
- {"version":3,"file":"editor.config.es.js","sources":["../../../src/config/editor.config.ts"],"sourcesContent":["// Delta数据行太多超出该限制时,加载会比较慢,需要提示用户\nexport const BIG_DELTA_LIMIT = 2000\n\nexport const CHANGE_LANGUAGE_EVENT = 'change-language'\nexport const defaultLanguage = 'zh-CN'\n\n// Image\nexport const IMAGE_UPLOADER_MIME_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/svg+xml',\n]\n\n// 常用文件格式\nexport const OTHER_FILE_UPLOADER_MIME_TYPES = [\n 'text/plain',\n 'application/json',\n 'application/pdf',\n]\n\nexport const AUDIO_VIDEO_UPLOADER_MIME_TYPES = [\n 'audio/wave',\n 'audio/wav',\n 'audio/x-wav',\n 'audio/x-pn-wav',\n 'audio/mpeg',\n 'video/mpeg',\n 'video/x-msvideo',\n]\n\n// MS office\nexport const DOC_UPLOADER_MIME_TYPES = [\n 'application/msword',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n 'application/vnd.ms-word.document.macroEnabled.12',\n 'application/vnd.ms-word.template.macroEnabled.12',\n]\n\nexport const XSL_UPLOADER_MIME_TYPES = [\n 'application/vnd.ms-excel',\n 'application/vnd.ms-excel',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n 'application/vnd.ms-excel.sheet.macroEnabled.12',\n 'application/vnd.ms-excel.template.macroEnabled.12',\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n]\n\nexport const PPT_UPLOADER_MIME_TYPES = [\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.openxmlformats-officedocument.presentationml.template',\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n]\n\n// Compressed files\nexport const COMPRESSED_UPLOADER_MIME_TYPES = [\n 'application/x-tar',\n 'application/x-zip-compressed',\n 'application/zip-compressed',\n 'application/gzip',\n '.rar',\n '.7z',\n]\n\n// default\nexport const FILE_UPLOADER_MIME_TYPES = [\n ...OTHER_FILE_UPLOADER_MIME_TYPES,\n ...AUDIO_VIDEO_UPLOADER_MIME_TYPES,\n ...DOC_UPLOADER_MIME_TYPES,\n ...XSL_UPLOADER_MIME_TYPES,\n ...PPT_UPLOADER_MIME_TYPES,\n ...COMPRESSED_UPLOADER_MIME_TYPES,\n]\n\nexport const DEFAULT_TOOLBAR = [\n [{ header: [] }],\n ['bold', 'italic', 'underline', 'link'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['clean'],\n]\n\nexport const FULL_TOOLBAR = [\n ['undo', 'redo', 'clean', 'format-painter'],\n [\n { header: [1, 2, 3, 4, 5, 6, false] },\n { font: [false, '宋体', '微软雅黑', '楷体', '黑体', '隶书', 'andale mono', 'arial', 'arial black', 'comic sans ms', 'impact', 'times new roman'] },\n { size: [false, '12px', '14px', '16px', '18px', '20px', '24px', '32px', '36px', '48px', '72px'] },\n { 'line-height': [false, '1.2', '1.5', '1.75', '2', '3', '4', '5'] },\n ],\n ['bold', 'italic', 'strike', 'underline', 'divider'],\n [{ color: [] }, { background: [] }],\n [{ align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }],\n [{ list: 'ordered' }, { list: 'bullet' }, { list: 'check' }],\n [{ script: 'sub' }, { script: 'super' }],\n [{ indent: '-1' }, { indent: '+1' }],\n [{ direction: 'rtl' }],\n ['link', 'blockquote', 'code', 'code-block'],\n ['image', 'file', { 'table-up': [] }],\n ['emoji', 'video', 'formula', 'screenshot', 'fullscreen'],\n]\n"],"names":[],"mappings":"AACO,MAAM,kBAAkB;AAExB,MAAM,wBAAwB;AAC9B,MAAM,kBAAkB;AAGxB,MAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEO,MAAM,kBAAkB;AAAA,EAC7B,CAAC,EAAE,QAAQ,CAAA,GAAI;AAAA,EACf,CAAC,QAAQ,UAAU,aAAa,MAAM;AAAA,EACtC,CAAC,EAAE,MAAM,UAAA,GAAa,EAAE,MAAM,UAAU;AAAA,EACxC,CAAC,OAAO;AACV;AAEO,MAAM,eAAe;AAAA,EAC1B,CAAC,QAAQ,QAAQ,SAAS,gBAAgB;AAAA,EAC1C;AAAA,IACE,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAA;AAAA,IAClC,EAAE,MAAM,CAAC,OAAO,MAAM,QAAQ,MAAM,MAAM,MAAM,eAAe,SAAS,eAAe,iBAAiB,UAAU,iBAAiB,EAAA;AAAA,IACnI,EAAE,MAAM,CAAC,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,EAAA;AAAA,IAC9F,EAAE,eAAe,CAAC,OAAO,OAAO,OAAO,QAAQ,KAAK,KAAK,KAAK,GAAG,EAAA;AAAA,EAAE;AAAA,EAErE,CAAC,QAAQ,UAAU,UAAU,aAAa,SAAS;AAAA,EACnD,CAAC,EAAE,OAAO,CAAA,EAAC,GAAK,EAAE,YAAY,CAAA,EAAC,CAAG;AAAA,EAClC,CAAC,EAAE,OAAO,MAAM,EAAE,OAAO,SAAA,GAAY,EAAE,OAAO,QAAA,GAAW,EAAE,OAAO,WAAW;AAAA,EAC7E,CAAC,EAAE,MAAM,UAAA,GAAa,EAAE,MAAM,YAAY,EAAE,MAAM,SAAS;AAAA,EAC3D,CAAC,EAAE,QAAQ,MAAA,GAAS,EAAE,QAAQ,SAAS;AAAA,EACvC,CAAC,EAAE,QAAQ,KAAA,GAAQ,EAAE,QAAQ,MAAM;AAAA,EACnC,CAAC,EAAE,WAAW,OAAO;AAAA,EACrB,CAAC,QAAQ,cAAc,QAAQ,YAAY;AAAA,EAC3C,CAAC,SAAS,QAAQ,EAAE,YAAY,CAAA,GAAI;AAAA,EACpC,CAAC,SAAS,SAAS,WAAW,cAAc,YAAY;AAC1D;"}
1
+ {"version":3,"file":"editor.config.es.js","sources":["../../../src/config/editor.config.ts"],"sourcesContent":["// Delta数据行太多超出该限制时,加载会比较慢,需要提示用户\nexport const BIG_DELTA_LIMIT = 2000\n\nexport const CHANGE_LANGUAGE_EVENT = 'change-language'\nexport const defaultLanguage = 'zh-CN'\n\n// Image\nexport const IMAGE_UPLOADER_MIME_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/svg+xml',\n]\n\n// 常用文件格式\nexport const OTHER_FILE_UPLOADER_MIME_TYPES = [\n 'text/plain',\n 'application/json',\n 'application/pdf',\n]\n\nexport const AUDIO_VIDEO_UPLOADER_MIME_TYPES = [\n 'audio/wave',\n 'audio/wav',\n 'audio/x-wav',\n 'audio/x-pn-wav',\n 'audio/mpeg',\n 'video/mpeg',\n 'video/x-msvideo',\n]\n\n// MS office\nexport const DOC_UPLOADER_MIME_TYPES = [\n 'application/msword',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n 'application/vnd.ms-word.document.macroEnabled.12',\n 'application/vnd.ms-word.template.macroEnabled.12',\n]\n\nexport const XSL_UPLOADER_MIME_TYPES = [\n 'application/vnd.ms-excel',\n 'application/vnd.ms-excel',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n 'application/vnd.ms-excel.sheet.macroEnabled.12',\n 'application/vnd.ms-excel.template.macroEnabled.12',\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n]\n\nexport const PPT_UPLOADER_MIME_TYPES = [\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.openxmlformats-officedocument.presentationml.template',\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n]\n\n// Compressed files\nexport const COMPRESSED_UPLOADER_MIME_TYPES = [\n 'application/x-tar',\n 'application/x-zip-compressed',\n 'application/zip-compressed',\n 'application/gzip',\n '.rar',\n '.7z',\n]\n\n// default\nexport const FILE_UPLOADER_MIME_TYPES = [\n ...OTHER_FILE_UPLOADER_MIME_TYPES,\n ...AUDIO_VIDEO_UPLOADER_MIME_TYPES,\n ...DOC_UPLOADER_MIME_TYPES,\n ...XSL_UPLOADER_MIME_TYPES,\n ...PPT_UPLOADER_MIME_TYPES,\n ...COMPRESSED_UPLOADER_MIME_TYPES,\n]\n\nexport const DEFAULT_TOOLBAR = [\n [{ header: [] }],\n ['bold', 'italic', 'underline', 'link'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['clean'],\n]\n\nexport const FULL_TOOLBAR = [\n ['undo', 'redo', 'clean', 'format-painter'],\n [\n { header: [1, 2, 3, 4, 5, 6, false] },\n { font: [false, '宋体', '微软雅黑', '楷体', '黑体', '隶书', 'andale mono', 'arial', 'arial black', 'comic sans ms', 'impact', 'times new roman'] },\n { size: [false, '12px', '14px', '16px', '18px', '20px', '24px', '32px', '36px', '48px', '72px'] },\n { 'line-height': [false, '1.2', '1.5', '1.75', '2', '3', '4', '5'] },\n ],\n ['bold', 'italic', 'strike', 'underline', 'divider'],\n [{ color: [] }, { background: [] }],\n [{ align: ['', 'center', 'right'] }, { align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }],\n [{ list: 'ordered' }, { list: 'bullet' }, { list: 'check' }],\n [{ script: 'sub' }, { script: 'super' }],\n [{ indent: '-1' }, { indent: '+1' }],\n [{ direction: 'rtl' }],\n ['link', 'blockquote', 'code', 'code-block'],\n ['image', 'file', { 'table-up': [] }],\n ['emoji', 'video', 'formula', 'screenshot', 'fullscreen'],\n]\n"],"names":[],"mappings":"AACO,MAAM,kBAAkB;AAExB,MAAM,wBAAwB;AAC9B,MAAM,kBAAkB;AAGxB,MAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEO,MAAM,kBAAkB;AAAA,EAC7B,CAAC,EAAE,QAAQ,CAAA,GAAI;AAAA,EACf,CAAC,QAAQ,UAAU,aAAa,MAAM;AAAA,EACtC,CAAC,EAAE,MAAM,UAAA,GAAa,EAAE,MAAM,UAAU;AAAA,EACxC,CAAC,OAAO;AACV;AAEO,MAAM,eAAe;AAAA,EAC1B,CAAC,QAAQ,QAAQ,SAAS,gBAAgB;AAAA,EAC1C;AAAA,IACE,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAA;AAAA,IAClC,EAAE,MAAM,CAAC,OAAO,MAAM,QAAQ,MAAM,MAAM,MAAM,eAAe,SAAS,eAAe,iBAAiB,UAAU,iBAAiB,EAAA;AAAA,IACnI,EAAE,MAAM,CAAC,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,EAAA;AAAA,IAC9F,EAAE,eAAe,CAAC,OAAO,OAAO,OAAO,QAAQ,KAAK,KAAK,KAAK,GAAG,EAAA;AAAA,EAAE;AAAA,EAErE,CAAC,QAAQ,UAAU,UAAU,aAAa,SAAS;AAAA,EACnD,CAAC,EAAE,OAAO,CAAA,EAAC,GAAK,EAAE,YAAY,CAAA,EAAC,CAAG;AAAA,EAClC,CAAC,EAAE,OAAO,CAAC,IAAI,UAAU,OAAO,EAAA,GAAK,EAAE,OAAO,GAAA,GAAM,EAAE,OAAO,SAAA,GAAY,EAAE,OAAO,WAAW,EAAE,OAAO,WAAW;AAAA,EACjH,CAAC,EAAE,MAAM,UAAA,GAAa,EAAE,MAAM,YAAY,EAAE,MAAM,SAAS;AAAA,EAC3D,CAAC,EAAE,QAAQ,MAAA,GAAS,EAAE,QAAQ,SAAS;AAAA,EACvC,CAAC,EAAE,QAAQ,KAAA,GAAQ,EAAE,QAAQ,MAAM;AAAA,EACnC,CAAC,EAAE,WAAW,OAAO;AAAA,EACrB,CAAC,QAAQ,cAAc,QAAQ,YAAY;AAAA,EAC3C,CAAC,SAAS,QAAQ,EAAE,YAAY,CAAA,GAAI;AAAA,EACpC,CAAC,SAAS,SAAS,WAAW,cAAc,YAAY;AAC1D;"}
@@ -60,6 +60,37 @@ function replaceDeltaImage(delta, imageUrls, imagePlaceholder) {
60
60
  return newDelta;
61
61
  }, new Delta());
62
62
  }
63
+ const WHITE_SPACE_CHAR_RE = /^[\u3000\u0020]$/;
64
+ const WHITE_SPACE_OR_NBSP_RE = /^[\u3000\u0020\u00A0]$/;
65
+ function replaceStrWhiteSpace(str) {
66
+ let textWithWhiteSpace = "";
67
+ let beginHasChar = false;
68
+ let consecutiveSpaces = 0;
69
+ for (const char of str) {
70
+ if (WHITE_SPACE_CHAR_RE.test(char)) {
71
+ consecutiveSpaces += 1;
72
+ if (!beginHasChar) {
73
+ textWithWhiteSpace += " ";
74
+ } else if (consecutiveSpaces === 1) {
75
+ textWithWhiteSpace += char;
76
+ } else {
77
+ textWithWhiteSpace += " ";
78
+ }
79
+ } else {
80
+ consecutiveSpaces = 0;
81
+ textWithWhiteSpace += char;
82
+ beginHasChar = true;
83
+ }
84
+ }
85
+ return textWithWhiteSpace;
86
+ }
87
+ function shouldInsertNbspOnSpace(prefix) {
88
+ if (!prefix) {
89
+ return true;
90
+ }
91
+ const lastChar = prefix.slice(-1);
92
+ return WHITE_SPACE_OR_NBSP_RE.test(lastChar);
93
+ }
63
94
  function splitWithBreak(insertContent) {
64
95
  const lines = [];
65
96
  const insertStr = insertContent;
@@ -131,7 +162,9 @@ export {
131
162
  isNullOrUndefined,
132
163
  omit,
133
164
  replaceDeltaImage,
165
+ replaceStrWhiteSpace,
134
166
  sanitize,
167
+ shouldInsertNbspOnSpace,
135
168
  splitWithBreak
136
169
  };
137
170
  //# sourceMappingURL=editor.utils.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor.utils.es.js","sources":["../../../src/config/editor.utils.ts"],"sourcesContent":["import Quill from 'quill'\n\nconst Delta = Quill.import('delta')\n\n// color hex to rgba\nexport function hexToRgbA(hex: string) {\n let color\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\n color = hex.substring(1).split('')\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]]\n }\n color = `0x${color.join('')}`\n return (\n `rgba(${\n [(color >> 16) & 255, (color >> 8) & 255, color & 255].join(',')\n },1)`\n )\n }\n}\n\n/**\n * 将File格式的图片转换成Url格式\n * @param imageFile File格式的图片\n */\nexport function imageFileToUrl(imageFile) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.readAsDataURL(imageFile)\n reader.onload = function (e) {\n resolve(e.target.result)\n }\n reader.onerror = reject\n }).catch((error) => {\n console.error('Error reading file:', error)\n })\n}\n\n/**\n * 将Url格式的图片转换成File格式\n * @param imageUrl 图片的URL\n */\nexport function imageUrlToFile(imageUrl, isErrorImage?: boolean) {\n return new Promise((resolve, reject) => {\n fetch(imageUrl, {\n method: 'get',\n mode: 'no-cors',\n })\n .then(res => res.blob())\n .then((blob) => {\n if (!blob.type.includes('image') || !blob.type) {\n return reject()\n }\n const fileType = blob.type.replace(/^.*\\//, '')\n const fileName = isErrorImage\n ? 'editorx-error-image.png'\n : `image-${new Date().getTime()}.${fileType}`\n const file = new File([blob], fileName, blob)\n resolve(file)\n })\n .catch(reject)\n })\n}\n\nexport function isNullOrUndefined(param) {\n return param === null || param === undefined\n}\n\n/**\n * omit\n * @param obj target Object\n * @param uselessKeys keys of removed properties\n * @return new Object without useless properties\n */\nexport function omit(obj, uselessKeys) {\n return (\n obj\n && Object.keys(obj).reduce((acc, key) => {\n return uselessKeys.includes(key) ? acc : { ...acc, [key]: obj[key] }\n }, {})\n )\n}\n\n/**\n * 将delta中的图片替换成制定的图片数组,用于图片上传到服务器的场景\n * @param delta 原始delta\n * @param imageUrls 图片数组\n * @param imagePlaceholder 标识是否是占位图的数组,与图片数组一一对应\n * @return 替换之后的delta\n */\nexport function replaceDeltaImage(delta, imageUrls, imagePlaceholder) {\n let imageIndex = 0\n return delta.reduce((newDelta, op) => {\n if (op.insert.image && !op.insert.image.hasExisted) {\n const attributes = imagePlaceholder[imageIndex]\n ? { ...op.attributes, width: 'auto', height: 225 } // 占位图片应该固定大小\n : op.attributes\n newDelta.insert({ image: imageUrls[imageIndex] }, attributes)\n imageIndex++\n }\n else {\n newDelta.insert(op.insert, op.attributes)\n }\n return newDelta\n }, new Delta())\n}\n\nexport function splitWithBreak(insertContent: string) {\n const lines = []\n const insertStr = insertContent\n let start = 0\n for (let i = 0; i < insertContent.length; i++) {\n if (insertStr.charAt(i) === '\\n') {\n if (i === 0) {\n lines.push('\\n')\n }\n else {\n lines.push(insertStr.substring(start, i))\n lines.push('\\n')\n }\n start = i + 1\n }\n }\n\n const tailStr = insertStr.substring(start)\n if (tailStr) {\n lines.push(tailStr)\n }\n\n return lines\n}\n\n/**\n * getEventComposedPath\n * compatibility fixed for Event.path/Event.composedPath\n * Event.path is only for chrome/opera\n * Event.composedPath is for Safari, FF\n * Neither for Micro Edge\n * @return an array of event.path\n */\nexport function getEventComposedPath(evt) {\n let path\n // chrome, opera, safari, firefox\n path = evt.path || (evt.composedPath && evt.composedPath())\n\n // other: edge\n if (path === undefined && evt.target) {\n path = []\n let target = evt.target\n path.push(target)\n\n while (target && target.parentNode) {\n target = target.parentNode\n path.push(target)\n }\n }\n\n return path\n}\n\nexport function sanitize(url, protocols) {\n const anchor = document.createElement('a')\n anchor.href = url\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'))\n return protocols.includes(protocol)\n}\n\nexport function hadProtocol(url: string) {\n if (!url || !/^(?:f|ht)tps?\\:\\/\\//.test(url)) {\n return false\n }\n return true\n}\n\nexport function isInside(position, dom) {\n const areaPosition = dom.getBoundingClientRect()\n const { pageX, pageY } = position\n // getBoundingClientRect是不考虑窗口滚动的\n const left = pageX - window.scrollX\n const top = pageY - window.scrollY\n const {\n left: areaLeft,\n top: areaTop,\n width: areaWidth,\n height: areaHeight,\n } = areaPosition\n const inside\n = left > areaLeft\n && left < areaLeft + areaWidth\n && top > areaTop\n && top < areaTop + areaHeight\n return inside\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.utils.es.js","sources":["../../../src/config/editor.utils.ts"],"sourcesContent":["import Quill from 'quill'\n\nconst Delta = Quill.import('delta')\n\n// color hex to rgba\nexport function hexToRgbA(hex: string) {\n let color\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\n color = hex.substring(1).split('')\n if (color.length === 3) {\n color = [color[0], color[0], color[1], color[1], color[2], color[2]]\n }\n color = `0x${color.join('')}`\n return (\n `rgba(${\n [(color >> 16) & 255, (color >> 8) & 255, color & 255].join(',')\n },1)`\n )\n }\n}\n\n/**\n * 将File格式的图片转换成Url格式\n * @param imageFile File格式的图片\n */\nexport function imageFileToUrl(imageFile) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.readAsDataURL(imageFile)\n reader.onload = function (e) {\n resolve(e.target.result)\n }\n reader.onerror = reject\n }).catch((error) => {\n console.error('Error reading file:', error)\n })\n}\n\n/**\n * 将Url格式的图片转换成File格式\n * @param imageUrl 图片的URL\n */\nexport function imageUrlToFile(imageUrl, isErrorImage?: boolean) {\n return new Promise((resolve, reject) => {\n fetch(imageUrl, {\n method: 'get',\n mode: 'no-cors',\n })\n .then(res => res.blob())\n .then((blob) => {\n if (!blob.type.includes('image') || !blob.type) {\n return reject()\n }\n const fileType = blob.type.replace(/^.*\\//, '')\n const fileName = isErrorImage\n ? 'editorx-error-image.png'\n : `image-${new Date().getTime()}.${fileType}`\n const file = new File([blob], fileName, blob)\n resolve(file)\n })\n .catch(reject)\n })\n}\n\nexport function isNullOrUndefined(param) {\n return param === null || param === undefined\n}\n\n/**\n * omit\n * @param obj target Object\n * @param uselessKeys keys of removed properties\n * @return new Object without useless properties\n */\nexport function omit(obj, uselessKeys) {\n return (\n obj\n && Object.keys(obj).reduce((acc, key) => {\n return uselessKeys.includes(key) ? acc : { ...acc, [key]: obj[key] }\n }, {})\n )\n}\n\n/**\n * 将delta中的图片替换成制定的图片数组,用于图片上传到服务器的场景\n * @param delta 原始delta\n * @param imageUrls 图片数组\n * @param imagePlaceholder 标识是否是占位图的数组,与图片数组一一对应\n * @return 替换之后的delta\n */\nexport function replaceDeltaImage(delta, imageUrls, imagePlaceholder) {\n let imageIndex = 0\n return delta.reduce((newDelta, op) => {\n if (op.insert.image && !op.insert.image.hasExisted) {\n const attributes = imagePlaceholder[imageIndex]\n ? { ...op.attributes, width: 'auto', height: 225 } // 占位图片应该固定大小\n : op.attributes\n newDelta.insert({ image: imageUrls[imageIndex] }, attributes)\n imageIndex++\n }\n else {\n newDelta.insert(op.insert, op.attributes)\n }\n return newDelta\n }, new Delta())\n}\n\nconst WHITE_SPACE_CHAR_RE = /^[\\u3000\\u0020]$/\nconst WHITE_SPACE_OR_NBSP_RE = /^[\\u3000\\u0020\\u00A0]$/\n\n/**\n * 将连续空格转为不间断空格,以便 innerHTML 输出 &nbsp; 并在预览中保留间距。\n * - 行首空白:全部转为 \\u00A0\n * - 正文内连续空白:保留第一个普通空格,其余转为 \\u00A0\n */\nexport function replaceStrWhiteSpace(str: string) {\n let textWithWhiteSpace = ''\n let beginHasChar = false\n let consecutiveSpaces = 0\n for (const char of str) {\n if (WHITE_SPACE_CHAR_RE.test(char)) {\n consecutiveSpaces += 1\n if (!beginHasChar) {\n textWithWhiteSpace += '\\u00A0'\n }\n else if (consecutiveSpaces === 1) {\n textWithWhiteSpace += char\n }\n else {\n textWithWhiteSpace += '\\u00A0'\n }\n }\n else {\n consecutiveSpaces = 0\n textWithWhiteSpace += char\n beginHasChar = true\n }\n }\n return textWithWhiteSpace\n}\n\n/** 空格键是否应插入不间断空格(与 replaceStrWhiteSpace 规则一致) */\nexport function shouldInsertNbspOnSpace(prefix: string) {\n if (!prefix) {\n return true\n }\n const lastChar = prefix.slice(-1)\n return WHITE_SPACE_OR_NBSP_RE.test(lastChar)\n}\n\nexport function splitWithBreak(insertContent: string) {\n const lines = []\n const insertStr = insertContent\n let start = 0\n for (let i = 0; i < insertContent.length; i++) {\n if (insertStr.charAt(i) === '\\n') {\n if (i === 0) {\n lines.push('\\n')\n }\n else {\n lines.push(insertStr.substring(start, i))\n lines.push('\\n')\n }\n start = i + 1\n }\n }\n\n const tailStr = insertStr.substring(start)\n if (tailStr) {\n lines.push(tailStr)\n }\n\n return lines\n}\n\n/**\n * getEventComposedPath\n * compatibility fixed for Event.path/Event.composedPath\n * Event.path is only for chrome/opera\n * Event.composedPath is for Safari, FF\n * Neither for Micro Edge\n * @return an array of event.path\n */\nexport function getEventComposedPath(evt) {\n let path\n // chrome, opera, safari, firefox\n path = evt.path || (evt.composedPath && evt.composedPath())\n\n // other: edge\n if (path === undefined && evt.target) {\n path = []\n let target = evt.target\n path.push(target)\n\n while (target && target.parentNode) {\n target = target.parentNode\n path.push(target)\n }\n }\n\n return path\n}\n\nexport function sanitize(url, protocols) {\n const anchor = document.createElement('a')\n anchor.href = url\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'))\n return protocols.includes(protocol)\n}\n\nexport function hadProtocol(url: string) {\n if (!url || !/^(?:f|ht)tps?\\:\\/\\//.test(url)) {\n return false\n }\n return true\n}\n\nexport function isInside(position, dom) {\n const areaPosition = dom.getBoundingClientRect()\n const { pageX, pageY } = position\n // getBoundingClientRect是不考虑窗口滚动的\n const left = pageX - window.scrollX\n const top = pageY - window.scrollY\n const {\n left: areaLeft,\n top: areaTop,\n width: areaWidth,\n height: areaHeight,\n } = areaPosition\n const inside\n = left > areaLeft\n && left < areaLeft + areaWidth\n && top > areaTop\n && top < areaTop + areaHeight\n return inside\n}\n"],"names":[],"mappings":";AAEA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAG3B,SAAS,UAAU,KAAa;AACrC,MAAI;AACJ,MAAI,2BAA2B,KAAK,GAAG,GAAG;AACxC,YAAQ,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE;AACjC,QAAI,MAAM,WAAW,GAAG;AACtB,cAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,IACrE;AACA,YAAQ,KAAK,MAAM,KAAK,EAAE,CAAC;AAC3B,WACE,QACE,CAAE,SAAS,KAAM,KAAM,SAAS,IAAK,KAAK,QAAQ,GAAG,EAAE,KAAK,GAAG,CACjE;AAAA,EAEJ;AACF;AAMO,SAAS,eAAe,WAAW;AACxC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,IAAI,WAAA;AACnB,WAAO,cAAc,SAAS;AAC9B,WAAO,SAAS,SAAU,GAAG;AAC3B,cAAQ,EAAE,OAAO,MAAM;AAAA,IACzB;AACA,WAAO,UAAU;AAAA,EACnB,CAAC,EAAE,MAAM,CAAC,UAAU;AAClB,YAAQ,MAAM,uBAAuB,KAAK;AAAA,EAC5C,CAAC;AACH;AAMO,SAAS,eAAe,UAAU,cAAwB;AAC/D,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA,CACP,EACE,KAAK,CAAA,QAAO,IAAI,MAAM,EACtB,KAAK,CAAC,SAAS;AACd,UAAI,CAAC,KAAK,KAAK,SAAS,OAAO,KAAK,CAAC,KAAK,MAAM;AAC9C,eAAO,OAAA;AAAA,MACT;AACA,YAAM,WAAW,KAAK,KAAK,QAAQ,SAAS,EAAE;AAC9C,YAAM,WAAW,eACb,4BACA,UAAS,oBAAI,QAAO,QAAA,CAAS,IAAI,QAAQ;AAC7C,YAAM,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,UAAU,IAAI;AAC5C,cAAQ,IAAI;AAAA,IACd,CAAC,EACA,MAAM,MAAM;AAAA,EACjB,CAAC;AACH;AAEO,SAAS,kBAAkB,OAAO;AACvC,SAAO,UAAU,QAAQ,UAAU;AACrC;AAQO,SAAS,KAAK,KAAK,aAAa;AACrC,SACE,OACG,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,QAAQ;AACvC,WAAO,YAAY,SAAS,GAAG,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,EAAA;AAAA,EACnE,GAAG,CAAA,CAAE;AAET;AASO,SAAS,kBAAkB,OAAO,WAAW,kBAAkB;AACpE,MAAI,aAAa;AACjB,SAAO,MAAM,OAAO,CAAC,UAAU,OAAO;AACpC,QAAI,GAAG,OAAO,SAAS,CAAC,GAAG,OAAO,MAAM,YAAY;AAClD,YAAM,aAAa,iBAAiB,UAAU,IAC1C,EAAE,GAAG,GAAG,YAAY,OAAO,QAAQ,QAAQ,IAAA,IAC3C,GAAG;AACP,eAAS,OAAO,EAAE,OAAO,UAAU,UAAU,EAAA,GAAK,UAAU;AAC5D;AAAA,IACF,OACK;AACH,eAAS,OAAO,GAAG,QAAQ,GAAG,UAAU;AAAA,IAC1C;AACA,WAAO;AAAA,EACT,GAAG,IAAI,OAAO;AAChB;AAEA,MAAM,sBAAsB;AAC5B,MAAM,yBAAyB;AAOxB,SAAS,qBAAqB,KAAa;AAChD,MAAI,qBAAqB;AACzB,MAAI,eAAe;AACnB,MAAI,oBAAoB;AACxB,aAAW,QAAQ,KAAK;AACtB,QAAI,oBAAoB,KAAK,IAAI,GAAG;AAClC,2BAAqB;AACrB,UAAI,CAAC,cAAc;AACjB,8BAAsB;AAAA,MACxB,WACS,sBAAsB,GAAG;AAChC,8BAAsB;AAAA,MACxB,OACK;AACH,8BAAsB;AAAA,MACxB;AAAA,IACF,OACK;AACH,0BAAoB;AACpB,4BAAsB;AACtB,qBAAe;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,wBAAwB,QAAgB;AACtD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,QAAM,WAAW,OAAO,MAAM,EAAE;AAChC,SAAO,uBAAuB,KAAK,QAAQ;AAC7C;AAEO,SAAS,eAAe,eAAuB;AACpD,QAAM,QAAQ,CAAA;AACd,QAAM,YAAY;AAClB,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,QAAI,UAAU,OAAO,CAAC,MAAM,MAAM;AAChC,UAAI,MAAM,GAAG;AACX,cAAM,KAAK,IAAI;AAAA,MACjB,OACK;AACH,cAAM,KAAK,UAAU,UAAU,OAAO,CAAC,CAAC;AACxC,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,cAAQ,IAAI;AAAA,IACd;AAAA,EACF;AAEA,QAAM,UAAU,UAAU,UAAU,KAAK;AACzC,MAAI,SAAS;AACX,UAAM,KAAK,OAAO;AAAA,EACpB;AAEA,SAAO;AACT;AAUO,SAAS,qBAAqB,KAAK;AACxC,MAAI;AAEJ,SAAO,IAAI,QAAS,IAAI,gBAAgB,IAAI,aAAA;AAG5C,MAAI,SAAS,UAAa,IAAI,QAAQ;AACpC,WAAO,CAAA;AACP,QAAI,SAAS,IAAI;AACjB,SAAK,KAAK,MAAM;AAEhB,WAAO,UAAU,OAAO,YAAY;AAClC,eAAS,OAAO;AAChB,WAAK,KAAK,MAAM;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,SAAS,KAAK,WAAW;AACvC,QAAM,SAAS,SAAS,cAAc,GAAG;AACzC,SAAO,OAAO;AACd,QAAM,WAAW,OAAO,KAAK,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,CAAC;AAC9D,SAAO,UAAU,SAAS,QAAQ;AACpC;AAEO,SAAS,YAAY,KAAa;AACvC,MAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,GAAG,GAAG;AAC5C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,SAAS,UAAU,KAAK;AACtC,QAAM,eAAe,IAAI,sBAAA;AACzB,QAAM,EAAE,OAAO,MAAA,IAAU;AAEzB,QAAM,OAAO,QAAQ,OAAO;AAC5B,QAAM,MAAM,QAAQ,OAAO;AAC3B,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,IACN;AACJ,QAAM,SACF,OAAO,YACJ,OAAO,WAAW,aAClB,MAAM,WACN,MAAM,UAAU;AACvB,SAAO;AACT;"}
@@ -61,7 +61,10 @@ const EN_US = {
61
61
  "file": "File",
62
62
  "mind-map": "Mind Map",
63
63
  "flow-chart": "Flow Chart",
64
- "link": "Hyperlink",
64
+ "link": {
65
+ "": "Hyperlink",
66
+ "enter-link": "Enter link: "
67
+ },
65
68
  "code": "Inline Code",
66
69
  "table": "Table",
67
70
  "table-up": "Table",
@@ -1 +1 @@
1
- {"version":3,"file":"en-us.es.js","sources":["../../../../src/config/i18n/en-us.ts"],"sourcesContent":["export const EN_US = {\n\n 'header': 'Paragraph Formatting',\n 'normal': 'Normal',\n 'h1': 'Heading 1',\n 'h2': 'Heading 2',\n 'h3': 'Heading 3',\n 'h4': 'Heading 4',\n 'h5': 'Heading 5',\n 'h6': 'Heading 6',\n\n 'line-height': 'Line Height',\n 'songti': 'SimSun',\n 'yahei': 'Microsoft Yahei',\n 'kaiti': 'KaiTi',\n 'heiti': 'SimHei',\n 'lishu': 'LiSu',\n\n 'left': 'Left',\n 'center': 'Centered',\n 'right': 'Right',\n\n 'codeblock': 'Code Block',\n 'globallink': 'Link',\n\n 'exit-fullscreen': 'Exit Full Screen',\n 'help': 'Help',\n 'more': 'More',\n\n 'help-format': 'Format',\n 'help-insert': 'Insert',\n 'help-operation': 'Edit',\n 'mention': 'Mention People',\n 'quick-menu': 'Shortcut',\n 'toggle-help-panel': 'Open/Close Help Panel',\n 'scroll-table': 'Horizontal Scroll',\n 'mouse-wheel': 'Mouse Wheel',\n 'save': 'Save',\n\n 'default-link-text': 'Link',\n 'basicblock': 'Card',\n 'linkplaceholder': 'Enter an address and press Enter.',\n 'counter-template': `{{count}}/{{totalCount}} {{countUnit}}`,\n 'char': 'characters',\n 'word': 'words',\n 'counter-limit-tips':\n 'The number of {{countUnit}} exceeds the maximum allowed limit.',\n 'ie-msg':\n 'In order to have a better experience, it is recommended to use the latest version of Chrome browser.',\n\n 'loading': 'Loading...',\n 'pasting': 'A large amount of content to paste. Loading...',\n 'img-error': 'Image Copy Error',\n 'img-error-info':\n 'Failed to copy the image. Save it to your local computer and then upload it by clicking Image on the toolbar.',\n\n 'last-modified': 'Last Modified Date:',\n 'screenshot': 'Screenshot',\n 'uploading': 'Uploading...',\n 'sub-title-bg-color': 'Background Color',\n\n // blot tip name\n 'emoji': 'Emoji',\n 'fullscreen': 'Full Screen',\n 'blockquote': 'Quote',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'clean': 'Clear Formatting',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strike': 'Strikethrough',\n 'image': 'Image',\n 'file': 'File',\n 'mind-map': 'Mind Map',\n 'flow-chart': 'Flow Chart',\n 'link': 'Hyperlink',\n 'code': 'Inline Code',\n 'table': 'Table',\n 'table-up': 'Table',\n 'code-block': 'Code Block',\n 'formula': 'Formula',\n 'format-painter': 'Format Painter',\n 'divider': 'Divider',\n 'video': 'Video',\n 'color': 'Font Color',\n 'background': 'Background Color',\n 'font': 'Font',\n 'size': 'Size',\n 'list': 'List',\n 'list-ordered': 'Ordered List',\n 'list-bullet': 'Unordered List',\n 'list-check': 'Task List',\n 'align-left': 'Left aligned',\n 'align-center': 'Center aligned',\n 'align-right': 'Right aligned',\n 'align-justify': 'Justify aligned',\n 'direction-ltr': 'Text Direction Left To Right',\n 'direction-rtl': 'Text Direction Right To Left',\n 'indent--1': 'Minus Indent',\n 'indent-+1': 'Add Indent',\n 'script-super': 'Superscript',\n 'script-sub': 'Subscript',\n 'header-normal': 'Text',\n 'header-1': 'Heading 1',\n 'header-2': 'Heading 2',\n 'header-3': 'Heading 3',\n 'header-4': 'Heading 4',\n 'header-5': 'Heading 5',\n 'header-6': 'Heading 6',\n 'header-list': 'Heading List',\n 'input-recall-menu-placeholder': 'Input / recall menu',\n 'clear-color': 'Clear color',\n 'custom-color': 'Color picker',\n // table-up texts\n 'fullCheckboxText': 'Insert full width table',\n 'customBtnText': 'Custom',\n 'confirmText': 'Confirm',\n 'cancelText': 'Cancel',\n 'rowText': 'Row',\n 'colText': 'Column',\n 'notPositiveNumberError': 'Please enter a positive integer',\n 'custom': 'Custom',\n 'clear': 'Clear',\n 'transparent': 'Transparent',\n 'perWidthInsufficient': 'The percentage width is insufficient. To complete the operation, the table needs to be converted to a fixed width. Do you want to continue?',\n 'CopyCell': 'Copy cell',\n 'CutCell': 'Cut cell',\n 'InsertTop': 'Insert row above',\n 'InsertRight': 'Insert column right',\n 'InsertBottom': 'Insert row below',\n 'InsertLeft': 'Insert column Left',\n 'MergeCell': 'Merge Cell',\n 'SplitCell': 'Split Cell',\n 'DeleteRow': 'Delete Row',\n 'DeleteColumn': 'Delete Column',\n 'DeleteTable': 'Delete table',\n 'BackgroundColor': 'Set background color',\n 'BorderColor': 'Set border color',\n}\n"],"names":[],"mappings":"AAAO,MAAM,QAAQ;AAAA,EAEnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EAEN,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EAET,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EAET,aAAa;AAAA,EACb,cAAc;AAAA,EAEd,mBAAmB;AAAA,EACnB,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,QAAQ;AAAA,EAER,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,sBACE;AAAA,EACF,UACE;AAAA,EAEF,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,kBACE;AAAA,EAEF,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,sBAAsB;AAAA;AAAA,EAGtB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,iCAAiC;AAAA,EACjC,eAAe;AAAA,EACf,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,0BAA0B;AAAA,EAC1B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,eAAe;AACjB;"}
1
+ {"version":3,"file":"en-us.es.js","sources":["../../../../src/config/i18n/en-us.ts"],"sourcesContent":["export const EN_US = {\n\n 'header': 'Paragraph Formatting',\n 'normal': 'Normal',\n 'h1': 'Heading 1',\n 'h2': 'Heading 2',\n 'h3': 'Heading 3',\n 'h4': 'Heading 4',\n 'h5': 'Heading 5',\n 'h6': 'Heading 6',\n\n 'line-height': 'Line Height',\n 'songti': 'SimSun',\n 'yahei': 'Microsoft Yahei',\n 'kaiti': 'KaiTi',\n 'heiti': 'SimHei',\n 'lishu': 'LiSu',\n\n 'left': 'Left',\n 'center': 'Centered',\n 'right': 'Right',\n\n 'codeblock': 'Code Block',\n 'globallink': 'Link',\n\n 'exit-fullscreen': 'Exit Full Screen',\n 'help': 'Help',\n 'more': 'More',\n\n 'help-format': 'Format',\n 'help-insert': 'Insert',\n 'help-operation': 'Edit',\n 'mention': 'Mention People',\n 'quick-menu': 'Shortcut',\n 'toggle-help-panel': 'Open/Close Help Panel',\n 'scroll-table': 'Horizontal Scroll',\n 'mouse-wheel': 'Mouse Wheel',\n 'save': 'Save',\n\n 'default-link-text': 'Link',\n 'basicblock': 'Card',\n 'linkplaceholder': 'Enter an address and press Enter.',\n 'counter-template': `{{count}}/{{totalCount}} {{countUnit}}`,\n 'char': 'characters',\n 'word': 'words',\n 'counter-limit-tips':\n 'The number of {{countUnit}} exceeds the maximum allowed limit.',\n 'ie-msg':\n 'In order to have a better experience, it is recommended to use the latest version of Chrome browser.',\n\n 'loading': 'Loading...',\n 'pasting': 'A large amount of content to paste. Loading...',\n 'img-error': 'Image Copy Error',\n 'img-error-info':\n 'Failed to copy the image. Save it to your local computer and then upload it by clicking Image on the toolbar.',\n\n 'last-modified': 'Last Modified Date:',\n 'screenshot': 'Screenshot',\n 'uploading': 'Uploading...',\n 'sub-title-bg-color': 'Background Color',\n\n // blot tip name\n 'emoji': 'Emoji',\n 'fullscreen': 'Full Screen',\n 'blockquote': 'Quote',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'clean': 'Clear Formatting',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strike': 'Strikethrough',\n 'image': 'Image',\n 'file': 'File',\n 'mind-map': 'Mind Map',\n 'flow-chart': 'Flow Chart',\n 'link': {\n '': 'Hyperlink',\n 'enter-link': 'Enter link: ',\n },\n 'code': 'Inline Code',\n 'table': 'Table',\n 'table-up': 'Table',\n 'code-block': 'Code Block',\n 'formula': 'Formula',\n 'format-painter': 'Format Painter',\n 'divider': 'Divider',\n 'video': 'Video',\n 'color': 'Font Color',\n 'background': 'Background Color',\n 'font': 'Font',\n 'size': 'Size',\n 'list': 'List',\n 'list-ordered': 'Ordered List',\n 'list-bullet': 'Unordered List',\n 'list-check': 'Task List',\n 'align-left': 'Left aligned',\n 'align-center': 'Center aligned',\n 'align-right': 'Right aligned',\n 'align-justify': 'Justify aligned',\n 'direction-ltr': 'Text Direction Left To Right',\n 'direction-rtl': 'Text Direction Right To Left',\n 'indent--1': 'Minus Indent',\n 'indent-+1': 'Add Indent',\n 'script-super': 'Superscript',\n 'script-sub': 'Subscript',\n 'header-normal': 'Text',\n 'header-1': 'Heading 1',\n 'header-2': 'Heading 2',\n 'header-3': 'Heading 3',\n 'header-4': 'Heading 4',\n 'header-5': 'Heading 5',\n 'header-6': 'Heading 6',\n 'header-list': 'Heading List',\n 'input-recall-menu-placeholder': 'Input / recall menu',\n 'clear-color': 'Clear color',\n 'custom-color': 'Color picker',\n // table-up texts\n 'fullCheckboxText': 'Insert full width table',\n 'customBtnText': 'Custom',\n 'confirmText': 'Confirm',\n 'cancelText': 'Cancel',\n 'rowText': 'Row',\n 'colText': 'Column',\n 'notPositiveNumberError': 'Please enter a positive integer',\n 'custom': 'Custom',\n 'clear': 'Clear',\n 'transparent': 'Transparent',\n 'perWidthInsufficient': 'The percentage width is insufficient. To complete the operation, the table needs to be converted to a fixed width. Do you want to continue?',\n 'CopyCell': 'Copy cell',\n 'CutCell': 'Cut cell',\n 'InsertTop': 'Insert row above',\n 'InsertRight': 'Insert column right',\n 'InsertBottom': 'Insert row below',\n 'InsertLeft': 'Insert column Left',\n 'MergeCell': 'Merge Cell',\n 'SplitCell': 'Split Cell',\n 'DeleteRow': 'Delete Row',\n 'DeleteColumn': 'Delete Column',\n 'DeleteTable': 'Delete table',\n 'BackgroundColor': 'Set background color',\n 'BorderColor': 'Set border color',\n}\n"],"names":[],"mappings":"AAAO,MAAM,QAAQ;AAAA,EAEnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EAEN,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EAET,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EAET,aAAa;AAAA,EACb,cAAc;AAAA,EAEd,mBAAmB;AAAA,EACnB,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,QAAQ;AAAA,EAER,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,sBACE;AAAA,EACF,UACE;AAAA,EAEF,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,kBACE;AAAA,EAEF,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,sBAAsB;AAAA;AAAA,EAGtB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,cAAc;AAAA,EAAA;AAAA,EAEhB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,iCAAiC;AAAA,EACjC,eAAe;AAAA,EACf,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,0BAA0B;AAAA,EAC1B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,eAAe;AACjB;"}
@@ -61,7 +61,10 @@ const ZH_CN = {
61
61
  "file": "文件",
62
62
  "mind-map": "思维导图",
63
63
  "flow-chart": "流程图",
64
- "link": "超链接",
64
+ "link": {
65
+ "": "超链接",
66
+ "enter-link": "输入链接: "
67
+ },
65
68
  "divider": "分割线",
66
69
  "code": "行内代码",
67
70
  "table": "表格",
@@ -1 +1 @@
1
- {"version":3,"file":"zh-cn.es.js","sources":["../../../../src/config/i18n/zh-cn.ts"],"sourcesContent":["export const ZH_CN = {\n\n 'header': '段落格式',\n 'normal': '正文',\n 'h1': '标题1',\n 'h2': '标题2',\n 'h3': '标题3',\n 'h4': '标题4',\n 'h5': '标题5',\n 'h6': '标题6',\n\n 'line-height': '行距',\n 'songti': '宋体',\n 'yahei': '微软雅黑',\n 'kaiti': '楷体',\n 'heiti': '黑体',\n 'lishu': '隶书',\n\n 'left': '左对齐',\n 'center': '居中对齐',\n 'right': '右对齐',\n\n 'codeblock': '代码块',\n 'globallink': '全局链接',\n\n 'exit-fullscreen': '退出全屏',\n 'help': '帮助',\n 'more': '更多',\n\n 'help-format': '格式',\n 'help-insert': '插入',\n 'help-operation': '操作',\n 'mention': '提及某人',\n 'quick-menu': '快捷菜单',\n 'toggle-help-panel': '打开/关闭帮助面板',\n 'scroll-table': '水平滚动表格',\n 'mouse-wheel': '鼠标滚轮',\n 'save': '保存',\n\n 'default-link-text': '链接',\n 'basicblock': '卡片',\n 'linkplaceholder': '请输入链接地址,按回车键确认',\n 'counter-template': '{{count}}/{{totalCount}}',\n 'char': '字符',\n 'word': '单词',\n 'counter-limit-tips': '{{countUnit}}数超出最大允许值',\n 'ie-msg': '为了有更好的体验,推荐使用最新版Chrome浏览器。',\n\n 'loading': '正在加载中...',\n 'pasting': '您粘贴的内容较多,正在努力加载中,请耐心等待...',\n 'img-error': '图片复制出错',\n 'img-error-info':\n '此图片不支持复制,请将原图下载至本地后点击工具栏【插入图片】,重新上传。',\n\n 'last-modified': '最后修改时间:',\n 'screenshot': '截图',\n 'uploading': '上传中...',\n 'sub-title-bg-color': '背景颜色',\n\n // blot tip name\n 'emoji': '表情',\n 'fullscreen': '全屏',\n 'blockquote': '引用',\n 'undo': '撤销',\n 'redo': '重做',\n 'clean': '清除格式',\n 'bold': '粗体',\n 'italic': '斜体',\n 'underline': '下划线',\n 'strike': '删除线',\n 'image': '图片',\n 'file': '文件',\n 'mind-map': '思维导图',\n 'flow-chart': '流程图',\n 'link': '超链接',\n 'divider': '分割线',\n 'code': '行内代码',\n 'table': '表格',\n 'table-up': '表格',\n 'code-block': '代码块',\n 'formula': '公式',\n 'format-painter': '格式刷',\n 'video': '视频',\n 'color': '字体颜色',\n 'background': '背景色',\n 'font': '字体',\n 'size': '字号',\n 'list': '列表',\n 'list-ordered': '有序列表',\n 'list-bullet': '无序列表',\n 'list-check': '任务列表',\n 'align-left': '左对齐',\n 'align-center': '居中对齐',\n 'align-right': '右对齐',\n 'align-justify': '两端对齐',\n 'direction-ltr': '文本方向左到右',\n 'direction-rtl': '文本方向右到左',\n 'indent--1': '减少缩进',\n 'indent-+1': '增加缩进',\n 'script-super': '上标',\n 'script-sub': '下标',\n 'header-normal': '正文',\n 'header-1': '标题1',\n 'header-2': '标题2',\n 'header-3': '标题3',\n 'header-4': '标题4',\n 'header-5': '标题5',\n 'header-6': '标题6',\n 'header-list': '标题列表',\n 'input-recall-menu-placeholder': '输入 / 唤起菜单',\n 'clear-color': '清除颜色',\n 'custom-color': '选择颜色',\n // table-up texts\n 'fullCheckboxText': '插入满宽度表格',\n 'customBtnText': '自定义行列数',\n 'confirmText': '确认',\n 'cancelText': '取消',\n 'rowText': '行数',\n 'colText': '列数',\n 'notPositiveNumberError': '请输入正整数',\n 'custom': '自定义',\n 'clear': '清除',\n 'transparent': '透明',\n 'perWidthInsufficient': '百分比宽度不足, 如需完成操作需要转换表格为固定宽度,是否继续?',\n 'CopyCell': '复制单元格',\n 'CutCell': '剪切单元格',\n 'InsertTop': '向上插入一行',\n 'InsertRight': '向右插入一列',\n 'InsertBottom': '向下插入一行',\n 'InsertLeft': '向左插入一列',\n 'MergeCell': '合并单元格',\n 'SplitCell': '拆分单元格',\n 'DeleteRow': '删除当前行',\n 'DeleteColumn': '删除当前列',\n 'DeleteTable': '删除当前表格',\n 'BackgroundColor': '设置背景颜色',\n 'BorderColor': '设置边框颜色',\n}\n"],"names":[],"mappings":"AAAO,MAAM,QAAQ;AAAA,EAEnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EAEN,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EAET,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EAET,aAAa;AAAA,EACb,cAAc;AAAA,EAEd,mBAAmB;AAAA,EACnB,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,QAAQ;AAAA,EAER,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,sBAAsB;AAAA,EACtB,UAAU;AAAA,EAEV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,kBACE;AAAA,EAEF,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,sBAAsB;AAAA;AAAA,EAGtB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,iCAAiC;AAAA,EACjC,eAAe;AAAA,EACf,gBAAgB;AAAA;AAAA,EAEhB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,0BAA0B;AAAA,EAC1B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,eAAe;AACjB;"}
1
+ {"version":3,"file":"zh-cn.es.js","sources":["../../../../src/config/i18n/zh-cn.ts"],"sourcesContent":["export const ZH_CN = {\n\n 'header': '段落格式',\n 'normal': '正文',\n 'h1': '标题1',\n 'h2': '标题2',\n 'h3': '标题3',\n 'h4': '标题4',\n 'h5': '标题5',\n 'h6': '标题6',\n\n 'line-height': '行距',\n 'songti': '宋体',\n 'yahei': '微软雅黑',\n 'kaiti': '楷体',\n 'heiti': '黑体',\n 'lishu': '隶书',\n\n 'left': '左对齐',\n 'center': '居中对齐',\n 'right': '右对齐',\n\n 'codeblock': '代码块',\n 'globallink': '全局链接',\n\n 'exit-fullscreen': '退出全屏',\n 'help': '帮助',\n 'more': '更多',\n\n 'help-format': '格式',\n 'help-insert': '插入',\n 'help-operation': '操作',\n 'mention': '提及某人',\n 'quick-menu': '快捷菜单',\n 'toggle-help-panel': '打开/关闭帮助面板',\n 'scroll-table': '水平滚动表格',\n 'mouse-wheel': '鼠标滚轮',\n 'save': '保存',\n\n 'default-link-text': '链接',\n 'basicblock': '卡片',\n 'linkplaceholder': '请输入链接地址,按回车键确认',\n 'counter-template': '{{count}}/{{totalCount}}',\n 'char': '字符',\n 'word': '单词',\n 'counter-limit-tips': '{{countUnit}}数超出最大允许值',\n 'ie-msg': '为了有更好的体验,推荐使用最新版Chrome浏览器。',\n\n 'loading': '正在加载中...',\n 'pasting': '您粘贴的内容较多,正在努力加载中,请耐心等待...',\n 'img-error': '图片复制出错',\n 'img-error-info':\n '此图片不支持复制,请将原图下载至本地后点击工具栏【插入图片】,重新上传。',\n\n 'last-modified': '最后修改时间:',\n 'screenshot': '截图',\n 'uploading': '上传中...',\n 'sub-title-bg-color': '背景颜色',\n\n // blot tip name\n 'emoji': '表情',\n 'fullscreen': '全屏',\n 'blockquote': '引用',\n 'undo': '撤销',\n 'redo': '重做',\n 'clean': '清除格式',\n 'bold': '粗体',\n 'italic': '斜体',\n 'underline': '下划线',\n 'strike': '删除线',\n 'image': '图片',\n 'file': '文件',\n 'mind-map': '思维导图',\n 'flow-chart': '流程图',\n 'link': {\n '': '超链接',\n 'enter-link': '输入链接: ',\n },\n 'divider': '分割线',\n 'code': '行内代码',\n 'table': '表格',\n 'table-up': '表格',\n 'code-block': '代码块',\n 'formula': '公式',\n 'format-painter': '格式刷',\n 'video': '视频',\n 'color': '字体颜色',\n 'background': '背景色',\n 'font': '字体',\n 'size': '字号',\n 'list': '列表',\n 'list-ordered': '有序列表',\n 'list-bullet': '无序列表',\n 'list-check': '任务列表',\n 'align-left': '左对齐',\n 'align-center': '居中对齐',\n 'align-right': '右对齐',\n 'align-justify': '两端对齐',\n 'direction-ltr': '文本方向左到右',\n 'direction-rtl': '文本方向右到左',\n 'indent--1': '减少缩进',\n 'indent-+1': '增加缩进',\n 'script-super': '上标',\n 'script-sub': '下标',\n 'header-normal': '正文',\n 'header-1': '标题1',\n 'header-2': '标题2',\n 'header-3': '标题3',\n 'header-4': '标题4',\n 'header-5': '标题5',\n 'header-6': '标题6',\n 'header-list': '标题列表',\n 'input-recall-menu-placeholder': '输入 / 唤起菜单',\n 'clear-color': '清除颜色',\n 'custom-color': '选择颜色',\n // table-up texts\n 'fullCheckboxText': '插入满宽度表格',\n 'customBtnText': '自定义行列数',\n 'confirmText': '确认',\n 'cancelText': '取消',\n 'rowText': '行数',\n 'colText': '列数',\n 'notPositiveNumberError': '请输入正整数',\n 'custom': '自定义',\n 'clear': '清除',\n 'transparent': '透明',\n 'perWidthInsufficient': '百分比宽度不足, 如需完成操作需要转换表格为固定宽度,是否继续?',\n 'CopyCell': '复制单元格',\n 'CutCell': '剪切单元格',\n 'InsertTop': '向上插入一行',\n 'InsertRight': '向右插入一列',\n 'InsertBottom': '向下插入一行',\n 'InsertLeft': '向左插入一列',\n 'MergeCell': '合并单元格',\n 'SplitCell': '拆分单元格',\n 'DeleteRow': '删除当前行',\n 'DeleteColumn': '删除当前列',\n 'DeleteTable': '删除当前表格',\n 'BackgroundColor': '设置背景颜色',\n 'BorderColor': '设置边框颜色',\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { isNullOrUndefined } from "./editor.utils.es.js";
2
- import { getEventComposedPath, hadProtocol, hexToRgbA, imageFileToUrl, imageUrlToFile, isInside, omit, replaceDeltaImage, sanitize, splitWithBreak } from "./editor.utils.es.js";
2
+ import { getEventComposedPath, hadProtocol, hexToRgbA, imageFileToUrl, imageUrlToFile, isInside, omit, replaceDeltaImage, replaceStrWhiteSpace, sanitize, shouldInsertNbspOnSpace, splitWithBreak } from "./editor.utils.es.js";
3
3
  import { AUDIO_VIDEO_UPLOADER_MIME_TYPES, BIG_DELTA_LIMIT, CHANGE_LANGUAGE_EVENT, COMPRESSED_UPLOADER_MIME_TYPES, DEFAULT_TOOLBAR, DOC_UPLOADER_MIME_TYPES, FILE_UPLOADER_MIME_TYPES, FULL_TOOLBAR, IMAGE_UPLOADER_MIME_TYPES, OTHER_FILE_UPLOADER_MIME_TYPES, PPT_UPLOADER_MIME_TYPES, XSL_UPLOADER_MIME_TYPES, defaultLanguage } from "./editor.config.es.js";
4
4
  import "./types/index.es.js";
5
5
  function inputFile(type, accept) {
@@ -64,7 +64,9 @@ export {
64
64
  namespace,
65
65
  omit,
66
66
  replaceDeltaImage,
67
+ replaceStrWhiteSpace,
67
68
  sanitize,
69
+ shouldInsertNbspOnSpace,
68
70
  splitWithBreak
69
71
  };
70
72
  //# sourceMappingURL=index.es.js.map
@@ -3,10 +3,33 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import Quill from "quill";
5
5
  import "../config/index.es.js";
6
- import { I18N } from "../modules/i18n.es.js";
6
+ import { EN_US } from "../config/i18n/en-us.es.js";
7
+ import { ZH_CN } from "../config/i18n/zh-cn.es.js";
8
+ import { merge } from "../utils/merge.es.js";
7
9
  import { defaultLanguage } from "../config/editor.config.es.js";
10
+ const LEGACY_I18N_KEY_REGEX = /^_i18n(?:"([^"]+)"|'([^']+)'|`([^`]+)`)$/;
11
+ function resolveLegacyI18nKey(name) {
12
+ const key = name.trim();
13
+ const matched = key.match(LEGACY_I18N_KEY_REGEX);
14
+ if (!matched) return name;
15
+ return matched[1] || matched[2] || matched[3] || name;
16
+ }
8
17
  class FluentEditor extends Quill {
9
18
  constructor(container, options = {}) {
19
+ if (!options.modules) options.modules = {};
20
+ if (!options.modules.i18n) options.modules.i18n = {};
21
+ const i18nOptions = options.modules.i18n;
22
+ const defaultMessages = {
23
+ "en-US": EN_US,
24
+ "zh-CN": ZH_CN
25
+ };
26
+ const userMessages = i18nOptions.messages || {};
27
+ i18nOptions.messages = merge({}, defaultMessages, userMessages);
28
+ if (!i18nOptions.interpolate) {
29
+ i18nOptions.interpolate = (template, params) => {
30
+ return template.replaceAll(/\{\{([\w]+)\}\}/g, (match, key) => params[key] != null ? String(params[key]) : match);
31
+ };
32
+ }
10
33
  super(container, options);
11
34
  __publicField(this, "isFullscreen", false);
12
35
  }
@@ -15,10 +38,12 @@ class FluentEditor extends Quill {
15
38
  }
16
39
  get lang() {
17
40
  const i18nModule = this.getModule("i18n");
18
- return i18nModule ? i18nModule.options.lang : defaultLanguage;
41
+ return i18nModule ? i18nModule.getLocale() : defaultLanguage;
19
42
  }
20
- getLangText(name) {
21
- return I18N.parserText(name, this.lang);
43
+ getLangText(name, params, defaultValue) {
44
+ const i18nModule = this.getModule("i18n");
45
+ if (!i18nModule) return name;
46
+ return i18nModule.t(resolveLegacyI18nKey(name), params, defaultValue);
22
47
  }
23
48
  }
24
49
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"fluent-editor.es.js","sources":["../../../src/core/fluent-editor.ts"],"sourcesContent":["import type { ExpandedQuillOptions } from 'quill'\nimport type { IEditorConfig } from '../config/types'\nimport type { FileUploader } from '../modules/custom-uploader'\nimport Quill from 'quill'\nimport { defaultLanguage } from '../config'\nimport I18N from '../modules/i18n'\n\nclass FluentEditor extends Quill {\n isFullscreen: boolean = false\n declare options: IEditorConfig & ExpandedQuillOptions\n declare uploader: FileUploader\n\n static register(...args: any[]): void {\n super.register(...args as Parameters<typeof Quill.register>)\n }\n\n get lang() {\n const i18nModule = this.getModule('i18n') as I18N\n return i18nModule ? i18nModule.options.lang : defaultLanguage\n }\n\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\n super(container, options)\n }\n\n getLangText(name: string) {\n return I18N.parserText(name, this.lang)\n }\n}\n\nexport default FluentEditor\n"],"names":[],"mappings":";;;;;;;AAOA,MAAM,qBAAqB,MAAM;AAAA,EAc/B,YAAY,WAAiC,UAAyB,IAAI;AACxE,UAAM,WAAW,OAAO;AAd1B,wCAAwB;AAAA,EAexB;AAAA,EAXA,OAAO,YAAY,MAAmB;AACpC,UAAM,SAAS,GAAG,IAAyC;AAAA,EAC7D;AAAA,EAEA,IAAI,OAAO;AACT,UAAM,aAAa,KAAK,UAAU,MAAM;AACxC,WAAO,aAAa,WAAW,QAAQ,OAAO;AAAA,EAChD;AAAA,EAMA,YAAY,MAAc;AACxB,WAAO,KAAK,WAAW,MAAM,KAAK,IAAI;AAAA,EACxC;AACF;"}
1
+ {"version":3,"file":"fluent-editor.es.js","sources":["../../../src/core/fluent-editor.ts"],"sourcesContent":["import type { ExpandedQuillOptions } from 'quill'\nimport type { I18n, I18nOptions } from 'quill-i18n'\nimport type { IEditorConfig } from '../config/types'\nimport type { FileUploader } from '../modules/custom-uploader'\nimport Quill from 'quill'\nimport { defaultLanguage } from '../config'\nimport { EN_US } from '../config/i18n/en-us'\nimport { ZH_CN } from '../config/i18n/zh-cn'\nimport { merge } from '../utils/merge'\n\n// Temporary backward-compat syntax support: `_i18n\"key\"`\n// TODO: remove this legacy syntax support in a future major version.\nconst LEGACY_I18N_KEY_REGEX = /^_i18n(?:\"([^\"]+)\"|'([^']+)'|`([^`]+)`)$/\n\nfunction resolveLegacyI18nKey(name: string): string {\n const key = name.trim()\n const matched = key.match(LEGACY_I18N_KEY_REGEX)\n if (!matched) return name\n return matched[1] || matched[2] || matched[3] || name\n}\n\nclass FluentEditor extends Quill {\n isFullscreen: boolean = false\n declare options: IEditorConfig & ExpandedQuillOptions\n declare uploader: FileUploader\n\n static register(...args: any[]): void {\n super.register(...args as Parameters<typeof Quill.register>)\n }\n\n get lang() {\n const i18nModule = this.getModule('i18n') as I18n\n return i18nModule ? i18nModule.getLocale() : defaultLanguage\n }\n\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\n if (!options.modules) options.modules = {}\n if (!options.modules.i18n) options.modules.i18n = {}\n\n const i18nOptions = options.modules.i18n as I18nOptions\n const defaultMessages = {\n 'en-US': EN_US,\n 'zh-CN': ZH_CN,\n }\n const userMessages = i18nOptions.messages || {}\n i18nOptions.messages = merge({}, defaultMessages, userMessages)\n\n if (!i18nOptions.interpolate) {\n i18nOptions.interpolate = (template: string, params: Record<string, any>) => {\n return template.replaceAll(/\\{\\{([\\w]+)\\}\\}/g, (match, key) => params[key] != null ? String(params[key]) : match)\n }\n }\n\n super(container, options)\n }\n\n getLangText(name: string, params?: Record<string, any>, defaultValue?: string) {\n const i18nModule = this.getModule('i18n') as I18n\n if (!i18nModule) return name\n return i18nModule.t(resolveLegacyI18nKey(name), params, defaultValue)\n }\n}\n\nexport default FluentEditor\n"],"names":[],"mappings":";;;;;;;;;AAYA,MAAM,wBAAwB;AAE9B,SAAS,qBAAqB,MAAsB;AAClD,QAAM,MAAM,KAAK,KAAA;AACjB,QAAM,UAAU,IAAI,MAAM,qBAAqB;AAC/C,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,CAAC,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,KAAK;AACnD;AAEA,MAAM,qBAAqB,MAAM;AAAA,EAc/B,YAAY,WAAiC,UAAyB,IAAI;AACxE,QAAI,CAAC,QAAQ,QAAS,SAAQ,UAAU,CAAA;AACxC,QAAI,CAAC,QAAQ,QAAQ,KAAM,SAAQ,QAAQ,OAAO,CAAA;AAElD,UAAM,cAAc,QAAQ,QAAQ;AACpC,UAAM,kBAAkB;AAAA,MACtB,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAEX,UAAM,eAAe,YAAY,YAAY,CAAA;AAC7C,gBAAY,WAAW,MAAM,CAAA,GAAI,iBAAiB,YAAY;AAE9D,QAAI,CAAC,YAAY,aAAa;AAC5B,kBAAY,cAAc,CAAC,UAAkB,WAAgC;AAC3E,eAAO,SAAS,WAAW,oBAAoB,CAAC,OAAO,QAAQ,OAAO,GAAG,KAAK,OAAO,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK;AAAA,MAClH;AAAA,IACF;AAEA,UAAM,WAAW,OAAO;AA/B1B,wCAAwB;AAAA,EAgCxB;AAAA,EA5BA,OAAO,YAAY,MAAmB;AACpC,UAAM,SAAS,GAAG,IAAyC;AAAA,EAC7D;AAAA,EAEA,IAAI,OAAO;AACT,UAAM,aAAa,KAAK,UAAU,MAAM;AACxC,WAAO,aAAa,WAAW,UAAA,IAAc;AAAA,EAC/C;AAAA,EAuBA,YAAY,MAAc,QAA8B,cAAuB;AAC7E,UAAM,aAAa,KAAK,UAAU,MAAM;AACxC,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,WAAW,EAAE,qBAAqB,IAAI,GAAG,QAAQ,YAAY;AAAA,EACtE;AACF;"}
@@ -1,6 +1,5 @@
1
+ import I18n__default from "quill-i18n";
1
2
  import "./attributors/index.es.js";
2
- import { EN_US } from "./config/i18n/en-us.es.js";
3
- import { ZH_CN } from "./config/i18n/zh-cn.es.js";
4
3
  import FluentEditor from "./core/fluent-editor.es.js";
5
4
  import "./formats/index.es.js";
6
5
  import { AI } from "./modules/ai/index.es.js";
@@ -12,7 +11,6 @@ import { DividerBlot } from "./modules/divider.es.js";
12
11
  import { EmojiModule } from "./modules/emoji.es.js";
13
12
  import "./modules/file/index.es.js";
14
13
  import { FlowChartModule } from "./modules/flow-chart/index.es.js";
15
- import { I18N } from "./modules/i18n.es.js";
16
14
  import "./modules/link/index.es.js";
17
15
  import "./modules/mathlive/index.es.js";
18
16
  import "./modules/mention/index.es.js";
@@ -37,13 +35,6 @@ import { EmojiBlot } from "./formats/emoji.es.js";
37
35
  import { SizeStyle } from "./attributors/font-size.es.js";
38
36
  import { LineHeightStyle } from "./attributors/line-height.es.js";
39
37
  import { FontStyle } from "./attributors/font-style.es.js";
40
- I18N.register(
41
- {
42
- "en-US": EN_US,
43
- "zh-CN": ZH_CN
44
- },
45
- true
46
- );
47
38
  FluentEditor.register(
48
39
  {
49
40
  "attributors/style/font": FontStyle,
@@ -63,7 +54,7 @@ FluentEditor.register(
63
54
  "modules/counter": Counter,
64
55
  "modules/emoji": EmojiModule,
65
56
  "modules/file": FileModule,
66
- "modules/i18n": I18N,
57
+ "modules/i18n": I18n__default,
67
58
  "modules/image": BlotFormatter,
68
59
  "modules/mathlive": MathliveModule,
69
60
  "modules/ai": AI,
@@ -1 +1 @@
1
- {"version":3,"file":"fluent-editor.es.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors'\nimport { EN_US } from './config/i18n/en-us'\nimport { ZH_CN } from './config/i18n/zh-cn'\nimport FluentEditor from './core/fluent-editor'\nimport { EmojiBlot, SoftBreak, StrikeBlot, Video } from './formats'\nimport { AI } from './modules/ai' // AI\nimport Counter from './modules/counter' // 字符统计\nimport { CustomClipboard } from './modules/custom-clipboard' // 粘贴板\nimport { BlotFormatter } from './modules/custom-image' // 图片\nimport { FileUploader } from './modules/custom-uploader' // 上传\nimport { DividerBlot } from './modules/divider' // 分割线\nimport { EmojiModule } from './modules/emoji'\nimport { FileModule } from './modules/file' // 文件\nimport { FlowChartModule } from './modules/flow-chart' // 流程图\nimport I18N from './modules/i18n'\nimport { LinkBlot } from './modules/link' // 超链接\nimport { MathliveModule } from './modules/mathlive' // latex公式\nimport { Mention } from './modules/mention' // @提醒\nimport { MindMapModule } from './modules/mind-map' // 思维导图\nimport { ShortCutKey } from './modules/shortcut-key'\nimport Syntax from './modules/syntax' // 代码块高亮\nimport { BetterToolbar } from './modules/toolbar' // 工具栏\nimport { ColorPicker, Picker } from './modules/toolbar/better-picker'\nimport SnowTheme from './themes/snow'\nimport Icons from './ui/icons'\n\nI18N.register(\n {\n 'en-US': EN_US,\n 'zh-CN': ZH_CN,\n },\n true,\n)\nFluentEditor.register(\n {\n 'attributors/style/font': FontStyle,\n 'attributors/style/size': SizeStyle,\n 'attributors/style/line-height': LineHeightStyle,\n\n 'formats/font': FontStyle,\n 'formats/line-height': LineHeightStyle,\n 'formats/size': SizeStyle,\n 'formats/emoji': EmojiBlot,\n 'formats/softBreak': SoftBreak,\n 'formats/strike': StrikeBlot,\n 'formats/text-indent': TextIndentStyle,\n 'formats/video': Video,\n 'formats/divider': DividerBlot,\n 'formats/link': LinkBlot,\n\n 'modules/clipboard': CustomClipboard,\n 'modules/counter': Counter,\n 'modules/emoji': EmojiModule,\n 'modules/file': FileModule,\n 'modules/i18n': I18N,\n 'modules/image': BlotFormatter,\n 'modules/mathlive': MathliveModule,\n 'modules/ai': AI,\n 'modules/mention': Mention,\n 'modules/syntax': Syntax,\n 'modules/toolbar': BetterToolbar,\n 'modules/uploader': FileUploader,\n 'modules/shortcut-key': ShortCutKey,\n 'modules/mind-map': MindMapModule,\n 'modules/flow-chart': FlowChartModule,\n\n 'themes/snow': SnowTheme,\n\n 'ui/icons': Icons,\n 'ui/picker': Picker,\n 'ui/color-picker': ColorPicker,\n },\n true, // 覆盖内部模块\n)\n\nexport default FluentEditor\n"],"names":["Syntax"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,KAAK;AAAA,EACH;AAAA,IACE,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAAA,EAEX;AACF;AACA,aAAa;AAAA,EACX;AAAA,IACE,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,iCAAiC;AAAA,IAEjC,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAEhB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,kBAAkBA;AAAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IAEtB,eAAe;AAAA,IAEf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,mBAAmB;AAAA,EAAA;AAAA,EAErB;AAAA;AACF;"}
1
+ {"version":3,"file":"fluent-editor.es.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import I18n from 'quill-i18n'\nimport { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors'\nimport FluentEditor from './core/fluent-editor'\nimport { EmojiBlot, SoftBreak, StrikeBlot, Video } from './formats'\nimport { AI } from './modules/ai' // AI\nimport Counter from './modules/counter' // 字符统计\nimport { CustomClipboard } from './modules/custom-clipboard' // 粘贴板\nimport { BlotFormatter } from './modules/custom-image' // 图片\nimport { FileUploader } from './modules/custom-uploader' // 上传\nimport { DividerBlot } from './modules/divider' // 分割线\nimport { EmojiModule } from './modules/emoji'\nimport { FileModule } from './modules/file' // 文件\nimport { FlowChartModule } from './modules/flow-chart' // 流程图\nimport { LinkBlot } from './modules/link' // 超链接\nimport { MathliveModule } from './modules/mathlive' // latex公式\nimport { Mention } from './modules/mention' // @提醒\nimport { MindMapModule } from './modules/mind-map' // 思维导图\nimport { ShortCutKey } from './modules/shortcut-key'\nimport Syntax from './modules/syntax' // 代码块高亮\nimport { BetterToolbar } from './modules/toolbar' // 工具栏\nimport { ColorPicker, Picker } from './modules/toolbar/better-picker'\nimport SnowTheme from './themes/snow'\nimport Icons from './ui/icons'\n\nFluentEditor.register(\n {\n 'attributors/style/font': FontStyle,\n 'attributors/style/size': SizeStyle,\n 'attributors/style/line-height': LineHeightStyle,\n\n 'formats/font': FontStyle,\n 'formats/line-height': LineHeightStyle,\n 'formats/size': SizeStyle,\n 'formats/emoji': EmojiBlot,\n 'formats/softBreak': SoftBreak,\n 'formats/strike': StrikeBlot,\n 'formats/text-indent': TextIndentStyle,\n 'formats/video': Video,\n 'formats/divider': DividerBlot,\n 'formats/link': LinkBlot,\n\n 'modules/clipboard': CustomClipboard,\n 'modules/counter': Counter,\n 'modules/emoji': EmojiModule,\n 'modules/file': FileModule,\n 'modules/i18n': I18n,\n 'modules/image': BlotFormatter,\n 'modules/mathlive': MathliveModule,\n 'modules/ai': AI,\n 'modules/mention': Mention,\n 'modules/syntax': Syntax,\n 'modules/toolbar': BetterToolbar,\n 'modules/uploader': FileUploader,\n 'modules/shortcut-key': ShortCutKey,\n 'modules/mind-map': MindMapModule,\n 'modules/flow-chart': FlowChartModule,\n\n 'themes/snow': SnowTheme,\n\n 'ui/icons': Icons,\n 'ui/picker': Picker,\n 'ui/color-picker': ColorPicker,\n },\n true, // 覆盖内部模块\n)\n\nexport default FluentEditor\n"],"names":["I18n","Syntax"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,aAAa;AAAA,EACX;AAAA,IACE,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,IAC1B,iCAAiC;AAAA,IAEjC,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAEhB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,gBAAgBA;AAAAA,IAChB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,kBAAkBC;AAAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IAEtB,eAAe;AAAA,IAEf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,mBAAmB;AAAA,EAAA;AAAA,EAErB;AAAA;AACF;"}
@@ -7,7 +7,7 @@ class StrikeBlot extends Inline {
7
7
  // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法
8
8
  }
9
9
  __publicField(StrikeBlot, "blotName", "strike");
10
- __publicField(StrikeBlot, "tagName", "u");
10
+ __publicField(StrikeBlot, "tagName", "s");
11
11
  __publicField(StrikeBlot, "className", "ql-custom-strike");
12
12
  export {
13
13
  StrikeBlot
@@ -1 +1 @@
1
- {"version":3,"file":"strike.es.js","sources":["../../../src/formats/strike.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\nimport Quill from 'quill'\n\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\n\nexport class StrikeBlot extends Inline {\n static blotName = 'strike'\n static tagName = 'u'\n static className = 'ql-custom-strike'\n // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法\n}\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAS,MAAM,OAAO,cAAc;AAEnC,MAAM,mBAAmB,OAAO;AAAA;AAKvC;AAJE,cADW,YACJ,YAAW;AAClB,cAFW,YAEJ,WAAU;AACjB,cAHW,YAGJ,aAAY;"}
1
+ {"version":3,"file":"strike.es.js","sources":["../../../src/formats/strike.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\nimport Quill from 'quill'\n\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\n\nexport class StrikeBlot extends Inline {\n static blotName = 'strike'\n static tagName = 's'\n static className = 'ql-custom-strike'\n // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法\n}\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAS,MAAM,OAAO,cAAc;AAEnC,MAAM,mBAAmB,OAAO;AAAA;AAKvC;AAJE,cADW,YACJ,YAAW;AAClB,cAFW,YAEJ,WAAU;AACjB,cAHW,YAGJ,aAAY;"}
package/es/index.es.js CHANGED
@@ -3,6 +3,7 @@ import "./attributors/index.es.js";
3
3
  import { getListValue, inputFile, namespace } from "./config/index.es.js";
4
4
  import "./formats/index.es.js";
5
5
  import "./modules/index.es.js";
6
+ export * from "quill-shortcut-key";
6
7
  import { generateTableUpShortKeyMenu } from "quill-shortcut-key";
7
8
  import { AttributeMap, Delta, Op, OpIterator, Parchment, Range } from "quill/core";
8
9
  import FluentEditor from "./core/fluent-editor.es.js";
@@ -11,7 +12,7 @@ import { FontStyle } from "./attributors/font-style.es.js";
11
12
  import { LineHeightStyle } from "./attributors/line-height.es.js";
12
13
  import { TextIndentStyle } from "./attributors/text-indent.es.js";
13
14
  import { AUDIO_VIDEO_UPLOADER_MIME_TYPES, BIG_DELTA_LIMIT, CHANGE_LANGUAGE_EVENT, COMPRESSED_UPLOADER_MIME_TYPES, DEFAULT_TOOLBAR, DOC_UPLOADER_MIME_TYPES, FILE_UPLOADER_MIME_TYPES, FULL_TOOLBAR, IMAGE_UPLOADER_MIME_TYPES, OTHER_FILE_UPLOADER_MIME_TYPES, PPT_UPLOADER_MIME_TYPES, XSL_UPLOADER_MIME_TYPES, defaultLanguage } from "./config/editor.config.es.js";
14
- import { getEventComposedPath, hadProtocol, hexToRgbA, imageFileToUrl, imageUrlToFile, isInside, isNullOrUndefined, omit, replaceDeltaImage, sanitize, splitWithBreak } from "./config/editor.utils.es.js";
15
+ import { getEventComposedPath, hadProtocol, hexToRgbA, imageFileToUrl, imageUrlToFile, isInside, isNullOrUndefined, omit, replaceDeltaImage, replaceStrWhiteSpace, sanitize, shouldInsertNbspOnSpace, splitWithBreak } from "./config/editor.utils.es.js";
15
16
  import { EmojiBlot } from "./formats/emoji.es.js";
16
17
  import { SoftBreak } from "./formats/soft-break.es.js";
17
18
  import { StrikeBlot } from "./formats/strike.es.js";
@@ -26,10 +27,10 @@ import { ImageToolbar } from "./modules/custom-image/actions/toolbar.es.js";
26
27
  import { ImageToolbarAction } from "./modules/custom-image/actions/toolbar-action.es.js";
27
28
  import { BlotFormatter } from "./modules/custom-image/blot-formatter.es.js";
28
29
  import { CustomImage } from "./modules/custom-image/image.es.js";
30
+ import { ImagePreviewModal, getImagePreviewModal } from "./modules/custom-image/preview/preview-modal.es.js";
29
31
  import { BlotSpec } from "./modules/custom-image/specs/blot-spec.es.js";
30
32
  import { CustomImageSpec } from "./modules/custom-image/specs/custom-image-spec.es.js";
31
33
  import { ImageSpec } from "./modules/custom-image/specs/image-spec.es.js";
32
- import { ImagePreviewModal, getImagePreviewModal } from "./modules/custom-image/preview/preview-modal.es.js";
33
34
  import { FileUploader } from "./modules/custom-uploader.es.js";
34
35
  import { DividerBlot } from "./modules/divider.es.js";
35
36
  import { EmojiModule } from "./modules/emoji.es.js";
@@ -37,7 +38,6 @@ import { File } from "./modules/file/formats/file.es.js";
37
38
  import { FileBar } from "./modules/file/modules/file-bar.es.js";
38
39
  import { FileModule } from "./modules/file/modules/file-module.es.js";
39
40
  import { FlowChartModule } from "./modules/flow-chart/index.es.js";
40
- import { I18N } from "./modules/i18n.es.js";
41
41
  import { LinkBlot } from "./modules/link/formats/link.es.js";
42
42
  import { LinkTooltip } from "./modules/link/modules/tooltip.es.js";
43
43
  import { MathliveBlot } from "./modules/mathlive/formats.es.js";
@@ -51,6 +51,7 @@ import { generateTableUp } from "./modules/table-up/index.es.js";
51
51
  import { ColorPicker, Picker } from "./modules/toolbar/better-picker.es.js";
52
52
  import { BetterToolbar } from "./modules/toolbar/better-toolbar.es.js";
53
53
  import { generateToolbarTip } from "./modules/toolbar/toolbar-tip.es.js";
54
+ export * from "quill-i18n";
54
55
  export {
55
56
  ALIGN_ATTR,
56
57
  AUDIO_VIDEO_UPLOADER_MIME_TYPES,
@@ -83,7 +84,6 @@ export {
83
84
  FileUploader,
84
85
  FlowChartModule,
85
86
  FontStyle,
86
- I18N,
87
87
  IMAGE_UPLOADER_MIME_TYPES,
88
88
  ImagePreviewModal,
89
89
  ImageSpec,
@@ -132,9 +132,11 @@ export {
132
132
  namespace,
133
133
  omit,
134
134
  replaceDeltaImage,
135
+ replaceStrWhiteSpace,
135
136
  sanitize,
136
137
  setAlignStyle,
137
138
  shortKey,
139
+ shouldInsertNbspOnSpace,
138
140
  splitWithBreak
139
141
  };
140
142
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,8 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import Quill from "quill";
5
- import "../config/index.es.js";
6
- import { CHANGE_LANGUAGE_EVENT } from "../config/editor.config.es.js";
5
+ import { I18N_LOCALE_CHANGE } from "quill-i18n";
7
6
  class Counter {
8
7
  constructor(quill, options) {
9
8
  __publicField(this, "container");
@@ -35,7 +34,7 @@ class Counter {
35
34
  this.options = this.resolveOptions(options);
36
35
  this.container = quill.addContainer("ql-counter");
37
36
  quill.on(Quill.events.TEXT_CHANGE, this.renderCount);
38
- this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {
37
+ this.quill.on(I18N_LOCALE_CHANGE, () => {
39
38
  this.options = this.resolveOptions(options);
40
39
  this.renderCount();
41
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"counter.es.js","sources":["../../../src/modules/counter.ts"],"sourcesContent":["import type { AnyFunction } from '../config'\nimport type FluentEditor from '../fluent-editor'\nimport Quill from 'quill'\nimport { CHANGE_LANGUAGE_EVENT } from '../config'\n\nexport interface ICounterOption {\n format?: 'text' | 'html'\n unit?: 'word' | 'char'\n count?: number\n template?: string | AnyFunction\n errorTemplate?: string | AnyFunction\n}\n\nexport default class Counter {\n container: HTMLDivElement\n options: ICounterOption\n\n constructor(public quill: FluentEditor, options: ICounterOption) {\n this.options = this.resolveOptions(options)\n this.container = quill.addContainer('ql-counter')\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\n this.options = this.resolveOptions(options)\n this.renderCount()\n })\n this.renderCount()\n }\n\n resolveOptions(options: ICounterOption) {\n return Object.assign({\n format: 'text',\n unit: 'char',\n template: this.quill.getLangText('counter-template'),\n count: 500,\n }, options)\n }\n\n renderCount = () => {\n setTimeout(() => {\n // @ts-ignore\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\n const count = this.getContentLength(format)\n const restCount = totalCount - count\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\n let template: any = counterTemplate\n if (typeof template === 'function') {\n template = template(count, restCount)\n }\n const desc = template.replace('{{count}}', count)\n .replace('{{totalCount}}', String(totalCount))\n .replace('{{restCount}}', String(restCount))\n .replace(/{{countUnit}}/g, countUnit)\n\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\n if (typeof limitTemplate === 'function') {\n limitTemplate = limitTemplate(count, restCount)\n }\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\n if (restCount < 0) {\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\n }\n else {\n this.container.innerHTML = desc\n }\n })\n }\n\n getContentLength(format) {\n let content = this.quill.getText()\n if (format === 'html') {\n let html = this.quill.root.innerHTML\n // 编辑器初始时\n if (html === '<p><br></p>' || html === '<div><br><div>') {\n html = ''\n }\n content = html\n }\n const text = content.replace(/\\s/g, '').trim()\n if (this.options.unit === 'word') {\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\n }\n return text.length\n }\n}\n"],"names":[],"mappings":";;;;;;AAaA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAHjE;AACA;AAsBA,uCAAc,MAAM;AAClB,iBAAW,MAAM;AAEf,cAAM,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AAC3F,cAAM,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AAC/B,cAAM,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AACpB,YAAI,OAAO,aAAa,YAAY;AAClC,qBAAW,SAAS,OAAO,SAAS;AAAA,QACtC;AACA,cAAM,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACrF,YAAI,OAAO,kBAAkB,YAAY;AACvC,0BAAgB,cAAc,OAAO,SAAS;AAAA,QAChD;AACA,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAC7F,OACK;AACH,eAAK,UAAU,YAAY;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AAhDmB,SAAA,QAAA;AACjB,SAAK,UAAU,KAAK,eAAe,OAAO;AAC1C,SAAK,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,QAAQ,GAAG,uBAAuB,MAAM;AACjD,WAAK,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAA;AAAA,IACP,CAAC;AACD,SAAK,YAAA;AAAA,EACP;AAAA,EAEA,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,IAAA,GACN,OAAO;AAAA,EACZ;AAAA,EAgCA,iBAAiB,QAAQ;AACvB,QAAI,UAAU,KAAK,MAAM,QAAA;AACzB,QAAI,WAAW,QAAQ;AACrB,UAAI,OAAO,KAAK,MAAM,KAAK;AAE3B,UAAI,SAAS,iBAAiB,SAAS,kBAAkB;AACvD,eAAO;AAAA,MACT;AACA,gBAAU;AAAA,IACZ;AACA,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAA;AACxC,QAAI,KAAK,QAAQ,SAAS,QAAQ;AAChC,aAAO,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAC3D;AACA,WAAO,KAAK;AAAA,EACd;AACF;"}
1
+ {"version":3,"file":"counter.es.js","sources":["../../../src/modules/counter.ts"],"sourcesContent":["import type { AnyFunction } from '../config'\nimport type FluentEditor from '../fluent-editor'\nimport Quill from 'quill'\nimport { I18N_LOCALE_CHANGE } from 'quill-i18n'\n\nexport interface ICounterOption {\n format?: 'text' | 'html'\n unit?: 'word' | 'char'\n count?: number\n template?: string | AnyFunction\n errorTemplate?: string | AnyFunction\n}\n\nexport default class Counter {\n container: HTMLDivElement\n options: ICounterOption\n\n constructor(public quill: FluentEditor, options: ICounterOption) {\n this.options = this.resolveOptions(options)\n this.container = quill.addContainer('ql-counter')\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\n this.quill.on(I18N_LOCALE_CHANGE, () => {\n this.options = this.resolveOptions(options)\n this.renderCount()\n })\n this.renderCount()\n }\n\n resolveOptions(options: ICounterOption) {\n return Object.assign({\n format: 'text',\n unit: 'char',\n template: this.quill.getLangText('counter-template'),\n count: 500,\n }, options)\n }\n\n renderCount = () => {\n setTimeout(() => {\n // @ts-ignore\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\n const count = this.getContentLength(format)\n const restCount = totalCount - count\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\n let template: any = counterTemplate\n if (typeof template === 'function') {\n template = template(count, restCount)\n }\n const desc = template.replace('{{count}}', count)\n .replace('{{totalCount}}', String(totalCount))\n .replace('{{restCount}}', String(restCount))\n .replace(/{{countUnit}}/g, countUnit)\n\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\n if (typeof limitTemplate === 'function') {\n limitTemplate = limitTemplate(count, restCount)\n }\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\n if (restCount < 0) {\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\n }\n else {\n this.container.innerHTML = desc\n }\n })\n }\n\n getContentLength(format) {\n let content = this.quill.getText()\n if (format === 'html') {\n let html = this.quill.root.innerHTML\n // 编辑器初始时\n if (html === '<p><br></p>' || html === '<div><br><div>') {\n html = ''\n }\n content = html\n }\n const text = content.replace(/\\s/g, '').trim()\n if (this.options.unit === 'word') {\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\n }\n return text.length\n }\n}\n"],"names":[],"mappings":";;;;;AAaA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAHjE;AACA;AAsBA,uCAAc,MAAM;AAClB,iBAAW,MAAM;AAEf,cAAM,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AAC3F,cAAM,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AAC/B,cAAM,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AACpB,YAAI,OAAO,aAAa,YAAY;AAClC,qBAAW,SAAS,OAAO,SAAS;AAAA,QACtC;AACA,cAAM,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACrF,YAAI,OAAO,kBAAkB,YAAY;AACvC,0BAAgB,cAAc,OAAO,SAAS;AAAA,QAChD;AACA,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAC7F,OACK;AACH,eAAK,UAAU,YAAY;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AAhDmB,SAAA,QAAA;AACjB,SAAK,UAAU,KAAK,eAAe,OAAO;AAC1C,SAAK,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,GAAG,oBAAoB,MAAM;AACtC,WAAK,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAA;AAAA,IACP,CAAC;AACD,SAAK,YAAA;AAAA,EACP;AAAA,EAEA,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,IAAA,GACN,OAAO;AAAA,EACZ;AAAA,EAgCA,iBAAiB,QAAQ;AACvB,QAAI,UAAU,KAAK,MAAM,QAAA;AACzB,QAAI,WAAW,QAAQ;AACrB,UAAI,OAAO,KAAK,MAAM,KAAK;AAE3B,UAAI,SAAS,iBAAiB,SAAS,kBAAkB;AACvD,eAAO;AAAA,MACT;AACA,gBAAU;AAAA,IACZ;AACA,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAA;AACxC,QAAI,KAAK,QAAQ,SAAS,QAAQ;AAChC,aAAO,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAC3D;AACA,WAAO,KAAK;AAAA,EACd;AACF;"}
@@ -1,11 +1,22 @@
1
1
  import Quill from "quill";
2
2
  import { ERROR_IMAGE_PLACEHOLDER_EN, ERROR_IMAGE_PLACEHOLDER_CN } from "../config/base64-image.es.js";
3
3
  import { BIG_DELTA_LIMIT } from "../config/editor.config.es.js";
4
- import { isNullOrUndefined, replaceDeltaImage, imageUrlToFile, splitWithBreak, omit, hexToRgbA } from "../config/editor.utils.es.js";
4
+ import { isNullOrUndefined, replaceDeltaImage, imageUrlToFile, splitWithBreak, omit, hexToRgbA, replaceStrWhiteSpace } from "../config/editor.utils.es.js";
5
5
  import { isString } from "../utils/is.es.js";
6
6
  const Clipboard = Quill.import("modules/clipboard");
7
7
  const Delta = Quill.import("delta");
8
8
  class CustomClipboard extends Clipboard {
9
+ constructor(quill) {
10
+ super(quill);
11
+ this.quill = quill;
12
+ this.quill.root.addEventListener("input", () => {
13
+ if (this.quill.root.innerText !== "\\n" && this.quill.root.classList.contains("ql-blank")) {
14
+ this.quill.root.classList.toggle("ql-blank", false);
15
+ } else {
16
+ this.quill.options.placeholder = this.quill.getLangText("editor-placeholder");
17
+ }
18
+ });
19
+ }
9
20
  prepareMatching(container, nodeMatches) {
10
21
  const elementMatchers = [];
11
22
  const textMatchers = [];
@@ -189,7 +200,8 @@ class CustomClipboard extends Clipboard {
189
200
  });
190
201
  } else {
191
202
  const range = this.getImgSelection(pastedDelta, imageIndexs[index]);
192
- this.quill.uploader.upload(range, [imageFile]);
203
+ const urls = await this.quill.uploader.getFileUrls([imageFile], range);
204
+ return urls[0] || void 0;
193
205
  }
194
206
  })
195
207
  );
@@ -335,20 +347,6 @@ function rebuildDelta(delta, cellLine) {
335
347
  }, new Delta());
336
348
  return buildedDelta;
337
349
  }
338
- function replaceStrWhiteSpace(str) {
339
- const isWhiteSpace = (value) => /^(\u3000|\u0020){1}$/.test(value);
340
- let textWithWhiteSpace = "";
341
- let beginHasChar = false;
342
- for (const char of str) {
343
- if (isWhiteSpace(char) && !beginHasChar) {
344
- textWithWhiteSpace += " ";
345
- } else {
346
- textWithWhiteSpace += char;
347
- beginHasChar = true;
348
- }
349
- }
350
- return textWithWhiteSpace;
351
- }
352
350
  function replaceDeltaWhiteSpace(delta, rootBgColor) {
353
351
  return delta.reduce((newDelta, op) => {
354
352
  if (rootBgColor && op.attributes && op.attributes.color && !op.attributes.background) {