@opentiny/fluent-editor 4.1.0-alpha.4 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) 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/i18n/en-us.es.js +4 -1
  4. package/es/config/i18n/en-us.es.js.map +1 -1
  5. package/es/config/i18n/zh-cn.es.js +4 -1
  6. package/es/config/i18n/zh-cn.es.js.map +1 -1
  7. package/es/core/fluent-editor.es.js +29 -4
  8. package/es/core/fluent-editor.es.js.map +1 -1
  9. package/es/fluent-editor.es.js +2 -11
  10. package/es/fluent-editor.es.js.map +1 -1
  11. package/es/formats/strike.es.js +1 -1
  12. package/es/formats/strike.es.js.map +1 -1
  13. package/es/index.es.js +3 -3
  14. package/es/index.es.js.map +1 -1
  15. package/es/modules/counter.es.js +2 -3
  16. package/es/modules/counter.es.js.map +1 -1
  17. package/es/modules/custom-clipboard.es.js +13 -1
  18. package/es/modules/custom-clipboard.es.js.map +1 -1
  19. package/es/modules/custom-image/blot-formatter.es.js +2 -2
  20. package/es/modules/custom-image/blot-formatter.es.js.map +1 -1
  21. package/es/modules/custom-image/index.es.js +1 -1
  22. package/es/modules/custom-image/preview/preview-modal.es.js +17 -6
  23. package/es/modules/custom-image/preview/preview-modal.es.js.map +1 -1
  24. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -1
  25. package/es/modules/custom-uploader.es.js.map +1 -1
  26. package/es/modules/file/modules/file-module.es.js.map +1 -1
  27. package/es/modules/flow-chart/i18n/index.es.js +3 -5
  28. package/es/modules/flow-chart/i18n/index.es.js.map +1 -1
  29. package/es/modules/flow-chart/modules/context-menu.es.js +10 -13
  30. package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -1
  31. package/es/modules/flow-chart/modules/control-panel.es.js +13 -16
  32. package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -1
  33. package/es/modules/index.es.js +2 -2
  34. package/es/modules/index.es.js.map +1 -1
  35. package/es/modules/link/modules/tooltip.es.js +42 -27
  36. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  37. package/es/modules/mind-map/i18n/index.es.js +3 -5
  38. package/es/modules/mind-map/i18n/index.es.js.map +1 -1
  39. package/es/modules/mind-map/modules/context-menu.es.js +11 -11
  40. package/es/modules/mind-map/modules/context-menu.es.js.map +1 -1
  41. package/es/modules/mind-map/modules/control-panel.es.js +7 -9
  42. package/es/modules/mind-map/modules/control-panel.es.js.map +1 -1
  43. package/es/modules/shortcut-key/index.es.js +6 -6
  44. package/es/modules/shortcut-key/index.es.js.map +1 -1
  45. package/es/modules/table-up/index.es.js +23 -33
  46. package/es/modules/table-up/index.es.js.map +1 -1
  47. package/es/modules/toolbar/toolbar-tip.es.js +27 -5
  48. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  49. package/es/themes/snow.es.js +2 -2
  50. package/es/themes/snow.es.js.map +1 -1
  51. package/lib/config/editor.config.cjs.js +1 -1
  52. package/lib/config/editor.config.cjs.js.map +1 -1
  53. package/lib/config/i18n/en-us.cjs.js +4 -1
  54. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  55. package/lib/config/i18n/zh-cn.cjs.js +4 -1
  56. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  57. package/lib/core/fluent-editor.cjs.js +29 -4
  58. package/lib/core/fluent-editor.cjs.js.map +1 -1
  59. package/lib/fluent-editor.cjs.js +2 -11
  60. package/lib/fluent-editor.cjs.js.map +1 -1
  61. package/lib/formats/strike.cjs.js +1 -1
  62. package/lib/formats/strike.cjs.js.map +1 -1
  63. package/lib/index.cjs.js +16 -5
  64. package/lib/index.cjs.js.map +1 -1
  65. package/lib/modules/counter.cjs.js +2 -3
  66. package/lib/modules/counter.cjs.js.map +1 -1
  67. package/lib/modules/custom-clipboard.cjs.js +13 -1
  68. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  69. package/lib/modules/custom-image/blot-formatter.cjs.js +2 -2
  70. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -1
  71. package/lib/modules/custom-image/index.cjs.js +1 -1
  72. package/lib/modules/custom-image/preview/preview-modal.cjs.js +17 -6
  73. package/lib/modules/custom-image/preview/preview-modal.cjs.js.map +1 -1
  74. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -1
  75. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  76. package/lib/modules/file/modules/file-module.cjs.js.map +1 -1
  77. package/lib/modules/flow-chart/i18n/index.cjs.js +3 -5
  78. package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -1
  79. package/lib/modules/flow-chart/modules/context-menu.cjs.js +10 -13
  80. package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -1
  81. package/lib/modules/flow-chart/modules/control-panel.cjs.js +13 -16
  82. package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -1
  83. package/lib/modules/index.cjs.js +14 -2
  84. package/lib/modules/index.cjs.js.map +1 -1
  85. package/lib/modules/link/modules/tooltip.cjs.js +42 -27
  86. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  87. package/lib/modules/mind-map/i18n/index.cjs.js +3 -5
  88. package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -1
  89. package/lib/modules/mind-map/modules/context-menu.cjs.js +11 -11
  90. package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -1
  91. package/lib/modules/mind-map/modules/control-panel.cjs.js +7 -9
  92. package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -1
  93. package/lib/modules/shortcut-key/index.cjs.js +4 -4
  94. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  95. package/lib/modules/table-up/index.cjs.js +23 -33
  96. package/lib/modules/table-up/index.cjs.js.map +1 -1
  97. package/lib/modules/toolbar/toolbar-tip.cjs.js +26 -4
  98. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  99. package/lib/themes/snow.cjs.js +2 -2
  100. package/lib/themes/snow.cjs.js.map +1 -1
  101. package/package.json +3 -2
  102. package/style.css +149 -144
  103. package/types/config/editor.config.d.ts +4 -2
  104. package/types/config/i18n/en-us.d.ts +4 -1
  105. package/types/config/i18n/zh-cn.d.ts +4 -1
  106. package/types/config/types/editor-modules.interface.d.ts +3 -2
  107. package/types/core/fluent-editor.d.ts +1 -1
  108. package/types/modules/custom-clipboard.d.ts +2 -0
  109. package/types/modules/custom-image/index.d.ts +1 -1
  110. package/types/modules/custom-image/preview/preview-modal.d.ts +1 -0
  111. package/types/modules/flow-chart/i18n/index.d.ts +1 -1
  112. package/types/modules/index.d.ts +2 -1
  113. package/types/modules/link/modules/tooltip.d.ts +1 -0
  114. package/types/modules/mind-map/i18n/index.d.ts +1 -1
  115. package/types/modules/table-up/index.d.ts +3 -26
  116. package/es/modules/i18n.es.js +0 -62
  117. package/es/modules/i18n.es.js.map +0 -1
  118. package/lib/modules/i18n.cjs.js +0 -62
  119. package/lib/modules/i18n.cjs.js.map +0 -1
  120. package/types/modules/i18n.d.ts +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isFunction } from '../../utils/is'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\n\r\nexport function generateTableUp(QuillTableUp: Constructor) {\r\n return class extends QuillTableUp {\r\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n if (!this.quill.options['format-painter']) this.quill.options['format-painter'] = {}\r\n const currentIgnoreFormat = this.quill.options['format-painter'].ignoreFormat || []\r\n this.quill.options['format-painter'].ignoreFormat = Array.from(\r\n new Set([\r\n ...currentIgnoreFormat,\r\n 'table-up-cell-inner',\r\n ]),\r\n )\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options.texts = this.resolveTexts(options.texts)\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n\r\n Object.keys(this.modules).forEach((key) => {\r\n if (isFunction(this.modules[key].destroy)) {\r\n this.modules[key].destroy()\r\n }\r\n })\r\n this.modules = {}\r\n this.initModules()\r\n })\r\n }\r\n\r\n resolveTexts(options: Record<string, string> = {}) {\r\n return Object.assign({\r\n fullCheckboxText: this.quill.getLangText('fullCheckboxText'),\r\n customBtnText: this.quill.getLangText('customBtnText'),\r\n confirmText: this.quill.getLangText('confirmText'),\r\n cancelText: this.quill.getLangText('cancelText'),\r\n rowText: this.quill.getLangText('rowText'),\r\n colText: this.quill.getLangText('colText'),\r\n notPositiveNumberError: this.quill.getLangText('notPositiveNumberError'),\r\n custom: this.quill.getLangText('custom'),\r\n clear: this.quill.getLangText('clear'),\r\n transparent: this.quill.getLangText('transparent'),\r\n perWidthInsufficient: this.quill.getLangText('perWidthInsufficient'),\r\n CopyCell: this.quill.getLangText('CopyCell'),\r\n CutCell: this.quill.getLangText('CutCell'),\r\n InsertTop: this.quill.getLangText('InsertTop'),\r\n InsertRight: this.quill.getLangText('InsertRight'),\r\n InsertBottom: this.quill.getLangText('InsertBottom'),\r\n InsertLeft: this.quill.getLangText('InsertLeft'),\r\n MergeCell: this.quill.getLangText('MergeCell'),\r\n SplitCell: this.quill.getLangText('SplitCell'),\r\n DeleteRow: this.quill.getLangText('DeleteRow'),\r\n DeleteColumn: this.quill.getLangText('DeleteColumn'),\r\n DeleteTable: this.quill.getLangText('DeleteTable'),\r\n BackgroundColor: this.quill.getLangText('BackgroundColor'),\r\n BorderColor: this.quill.getLangText('BorderColor'),\r\n }, Object.entries(options).reduce((pre, [key, value]) => {\r\n pre[key] = this.quill.getLangText(value)\r\n return pre\r\n }, {} as Record<string, string>))\r\n }\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","picker","isFunction"],"mappings":";;;;;AAaO,SAAS,gBAAgB,cAA2B;AACzD,SAAO,cAAc,aAAa;AAAA,IAChC,YAAmB,OAAqB,SAAuB;AAC7D,YAAM,OAAO,OAAO;AADH,WAAA,QAAA;AAGjB,UAAI,CAAC,KAAK,MAAM,QAAQ,gBAAgB,EAAG,MAAK,MAAM,QAAQ,gBAAgB,IAAI,CAAA;AAClF,YAAM,sBAAsB,KAAK,MAAM,QAAQ,gBAAgB,EAAE,gBAAgB,CAAA;AACjF,WAAK,MAAM,QAAQ,gBAAgB,EAAE,eAAe,MAAM;AAAA,4BACpD,IAAI;AAAA,UACN,GAAG;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MAAA;AAGH,WAAK,MAAM,QAAQ,GAAGA,cAAAA,uBAAuB,MAAM;AACjD,aAAK,QAAQ,QAAQ,KAAK,aAAa,QAAQ,KAAK;AACpD,cAAM,UAAU,KAAK,MAAM,UAAU,SAAS;AAC9C,YAAI,WAAY,KAAK,MAAM,MAAqB,SAAS;AACvD,gBAAM,CAAA,EAAG,MAAM,KAAK,QAAQ,YAAuC,CAAA,GAAI,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,KAAK,QAAQ,QAAQ,KAAK,CAAA;AAC3H,cAAI,UAAU,OAAO,QAAQ,kBAAA,MAAwB,UAAU;AAC7D,kBAAM,SAAU,KAAK,MAAM,MAAqB,QAAQ,KAAK,CAAAC,YAAUA,QAAO,WAAW,MAAM;AAC/F,gBAAI,QAAQ;AACV,mBAAK,kBAAkB,KAAK,QAAQ,cAAc,MAAM;AAAA,YAC1D;AAAA,UACF;AAAA,QACF;AAEA,eAAO,KAAK,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACzC,cAAIC,GAAAA,WAAW,KAAK,QAAQ,GAAG,EAAE,OAAO,GAAG;AACzC,iBAAK,QAAQ,GAAG,EAAE,QAAA;AAAA,UACpB;AAAA,QACF,CAAC;AACD,aAAK,UAAU,CAAA;AACf,aAAK,YAAA;AAAA,MACP,CAAC;AAAA,IACH;AAAA,IAEA,aAAa,UAAkC,IAAI;AACjD,aAAO,OAAO,OAAO;AAAA,QACnB,kBAAkB,KAAK,MAAM,YAAY,kBAAkB;AAAA,QAC3D,eAAe,KAAK,MAAM,YAAY,eAAe;AAAA,QACrD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,YAAY,KAAK,MAAM,YAAY,YAAY;AAAA,QAC/C,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,wBAAwB,KAAK,MAAM,YAAY,wBAAwB;AAAA,QACvE,QAAQ,KAAK,MAAM,YAAY,QAAQ;AAAA,QACvC,OAAO,KAAK,MAAM,YAAY,OAAO;AAAA,QACrC,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,sBAAsB,KAAK,MAAM,YAAY,sBAAsB;AAAA,QACnE,UAAU,KAAK,MAAM,YAAY,UAAU;AAAA,QAC3C,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,cAAc,KAAK,MAAM,YAAY,cAAc;AAAA,QACnD,YAAY,KAAK,MAAM,YAAY,YAAY;AAAA,QAC/C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,cAAc,KAAK,MAAM,YAAY,cAAc;AAAA,QACnD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,iBAAiB,KAAK,MAAM,YAAY,iBAAiB;AAAA,QACzD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,MAAA,GAChD,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACvD,YAAI,GAAG,IAAI,KAAK,MAAM,YAAY,KAAK;AACvC,eAAO;AAAA,MACT,GAAG,CAAA,CAA4B,CAAC;AAAA,IAClC;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { I18N_LOCALE_CHANGE } from 'quill-i18n'\r\nimport { isFunction } from '../../utils/is'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\n\r\nexport function generateTableUp(QuillTableUp: Constructor) {\n return class extends QuillTableUp {\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n if (!this.quill.options['format-painter']) this.quill.options['format-painter'] = {}\r\n const currentIgnoreFormat = this.quill.options['format-painter'].ignoreFormat || []\r\n this.quill.options['format-painter'].ignoreFormat = Array.from(\r\n new Set([\r\n ...currentIgnoreFormat,\r\n 'table-up-cell-inner',\r\n ]),\r\n )\r\n\r\n this.quill.on(I18N_LOCALE_CHANGE, () => {\r\n this.refreshUI()\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n\r\n Object.keys(this.modules).forEach((key) => {\r\n if (isFunction(this.modules[key].destroy)) {\r\n this.modules[key].destroy()\r\n }\r\n })\r\n this.modules = {}\r\n this.initModules()\n })\n }\n\n resolveOptions(options: Partial<any> = {}) {\n const { texts, ...rest } = options || {}\n const resolvedOptions = super.resolveOptions(rest)\n resolvedOptions.texts = super.resolveTexts(this.createTextResolver(texts))\n return resolvedOptions\n }\n\n resolveTexts(options: Record<string, string> | ((key: string) => string) = {}) {\n return super.resolveTexts(this.createTextResolver(options))\n }\n\n createTextResolver(options: Record<string, string> | ((key: string) => string) = {}) {\n const textResolver = isFunction(options) ? options : null\n const textMap = textResolver ? {} : options\n\n return (key: string) => {\n if (textResolver) {\n const customText = textResolver.call(this, key)\n if (customText !== undefined) return customText\n }\n else if (textMap[key] !== undefined) {\n return textMap[key]\n }\n\n return this.quill.getLangText(key)\n }\n }\n }\n}\n"],"names":["I18N_LOCALE_CHANGE","picker","isFunction"],"mappings":";;;;AAaO,SAAS,gBAAgB,cAA2B;AACzD,SAAO,cAAc,aAAa;AAAA,IAChC,YAAmB,OAAqB,SAAuB;AAC7D,YAAM,OAAO,OAAO;AADH,WAAA,QAAA;AAGjB,UAAI,CAAC,KAAK,MAAM,QAAQ,gBAAgB,EAAG,MAAK,MAAM,QAAQ,gBAAgB,IAAI,CAAA;AAClF,YAAM,sBAAsB,KAAK,MAAM,QAAQ,gBAAgB,EAAE,gBAAgB,CAAA;AACjF,WAAK,MAAM,QAAQ,gBAAgB,EAAE,eAAe,MAAM;AAAA,4BACpD,IAAI;AAAA,UACN,GAAG;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MAAA;AAGH,WAAK,MAAM,GAAGA,KAAAA,oBAAoB,MAAM;AACtC,aAAK,UAAA;AACL,cAAM,UAAU,KAAK,MAAM,UAAU,SAAS;AAC9C,YAAI,WAAY,KAAK,MAAM,MAAqB,SAAS;AACvD,gBAAM,CAAA,EAAG,MAAM,KAAK,QAAQ,YAAuC,CAAA,GAAI,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,KAAK,QAAQ,QAAQ,KAAK,CAAA;AAC3H,cAAI,UAAU,OAAO,QAAQ,kBAAA,MAAwB,UAAU;AAC7D,kBAAM,SAAU,KAAK,MAAM,MAAqB,QAAQ,KAAK,CAAAC,YAAUA,QAAO,WAAW,MAAM;AAC/F,gBAAI,QAAQ;AACV,mBAAK,kBAAkB,KAAK,QAAQ,cAAc,MAAM;AAAA,YAC1D;AAAA,UACF;AAAA,QACF;AAEA,eAAO,KAAK,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACzC,cAAIC,GAAAA,WAAW,KAAK,QAAQ,GAAG,EAAE,OAAO,GAAG;AACzC,iBAAK,QAAQ,GAAG,EAAE,QAAA;AAAA,UACpB;AAAA,QACF,CAAC;AACD,aAAK,UAAU,CAAA;AACf,aAAK,YAAA;AAAA,MACP,CAAC;AAAA,IACH;AAAA,IAEA,eAAe,UAAwB,IAAI;AACzC,YAAM,EAAE,OAAO,GAAG,KAAA,IAAS,WAAW,CAAA;AACtC,YAAM,kBAAkB,MAAM,eAAe,IAAI;AACjD,sBAAgB,QAAQ,MAAM,aAAa,KAAK,mBAAmB,KAAK,CAAC;AACzE,aAAO;AAAA,IACT;AAAA,IAEA,aAAa,UAA8D,IAAI;AAC7E,aAAO,MAAM,aAAa,KAAK,mBAAmB,OAAO,CAAC;AAAA,IAC5D;AAAA,IAEA,mBAAmB,UAA8D,IAAI;AACnF,YAAM,eAAeA,GAAAA,WAAW,OAAO,IAAI,UAAU;AACrD,YAAM,UAAU,eAAe,CAAA,IAAK;AAEpC,aAAO,CAAC,QAAgB;AACtB,YAAI,cAAc;AAChB,gBAAM,aAAa,aAAa,KAAK,MAAM,GAAG;AAC9C,cAAI,eAAe,OAAW,QAAO;AAAA,QACvC,WACS,QAAQ,GAAG,MAAM,QAAW;AACnC,iBAAO,QAAQ,GAAG;AAAA,QACpB;AAEA,eAAO,KAAK,MAAM,YAAY,GAAG;AAAA,MACnC;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- require("../../config/index.cjs.js");
3
+ const I18n = require("quill-i18n");
4
4
  const is = require("../../utils/is.cjs.js");
5
- const editor_config = require("../../config/editor.config.cjs.js");
6
5
  function generateToolbarTip(QuillToolbarTip) {
7
6
  return class extends QuillToolbarTip {
8
7
  constructor(quill, options) {
@@ -11,7 +10,7 @@ function generateToolbarTip(QuillToolbarTip) {
11
10
  }
12
11
  super(quill, options);
13
12
  this.quill = quill;
14
- this.quill.emitter.on(editor_config.CHANGE_LANGUAGE_EVENT, () => {
13
+ this.quill.on(I18n.I18N_LOCALE_CHANGE, () => {
15
14
  this.destroyAllTips();
16
15
  this.options = this.resolveOptions(options);
17
16
  this.createToolbarTip();
@@ -126,7 +125,30 @@ ${shortKey}` : "";
126
125
  }
127
126
  };
128
127
  const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {
129
- pre[key] = is.isString(value) ? this.quill.getLangText(value) : value;
128
+ if (is.isString(value)) {
129
+ pre[key] = { msg: this.quill.getLangText(value) };
130
+ } else if (value && is.isObject(value)) {
131
+ const isNewConfig = "values" in value || "onShow" in value || "msg" in value || "content" in value;
132
+ if (!isNewConfig) {
133
+ pre[key] = {
134
+ values: Object.fromEntries(
135
+ Object.entries(value).map(([k, v]) => [k, is.isString(v) ? this.quill.getLangText(v) : v])
136
+ )
137
+ };
138
+ } else {
139
+ const config = { ...value };
140
+ if (is.isString(config.msg)) config.msg = this.quill.getLangText(config.msg);
141
+ if (is.isString(config.content)) config.content = this.quill.getLangText(config.content);
142
+ if (config.values) {
143
+ config.values = Object.fromEntries(
144
+ Object.entries(config.values).map(([k, v]) => [k, is.isString(v) ? this.quill.getLangText(v) : v])
145
+ );
146
+ }
147
+ pre[key] = config;
148
+ }
149
+ } else {
150
+ pre[key] = value;
151
+ }
130
152
  return pre;
131
153
  }, {});
132
154
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar-tip.cjs.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isString } from '../../utils/is'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {\r\n pre[key] = isString(value) ? this.quill.getLangText(value) : value\r\n return pre\r\n }, {})\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...inputTipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","isString"],"mappings":"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"}
1
+ {"version":3,"file":"toolbar-tip.cjs.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { I18N_LOCALE_CHANGE } from 'quill-i18n'\r\nimport { isObject, isString } from '../../utils/is'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.on(I18N_LOCALE_CHANGE, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {\r\n if (isString(value)) {\r\n pre[key] = { msg: this.quill.getLangText(value) }\r\n }\r\n else if (value && isObject(value)) {\r\n const isNewConfig = 'values' in value || 'onShow' in value || 'msg' in value || 'content' in value\r\n if (!isNewConfig) {\r\n pre[key] = {\r\n values: Object.fromEntries(\r\n Object.entries(value).map(([k, v]) => [k, isString(v) ? this.quill.getLangText(v as string) : v]),\r\n ),\r\n }\r\n }\r\n else {\r\n const config = { ...value } as any\r\n if (isString(config.msg)) config.msg = this.quill.getLangText(config.msg)\r\n if (isString(config.content)) config.content = this.quill.getLangText(config.content)\r\n if (config.values) {\r\n config.values = Object.fromEntries(\r\n Object.entries(config.values).map(([k, v]) => [k, isString(v) ? this.quill.getLangText(v as string) : v]),\r\n )\r\n }\r\n pre[key] = config\r\n }\r\n }\r\n else {\r\n pre[key] = value\r\n }\r\n return pre\r\n }, {} as Record<string, any>)\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...inputTipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["I18N_LOCALE_CHANGE","isString","isObject"],"mappings":";;;;AAKO,SAAS,mBAAmB,iBAA8B;AAC/D,SAAO,cAAc,gBAAgB;AAAA,IACnC,YAAmB,OAAqB,SAAuC;AAC7E,UAAI,EAAC,mCAAS,aAAY;AACxB,gBAAQ,aAAa,CAAA;AAAA,MACvB;AACA,YAAM,OAAO,OAAO;AAJH,WAAA,QAAA;AAMjB,WAAK,MAAM,GAAGA,KAAAA,oBAAoB,MAAM;AACtC,aAAK,eAAA;AACL,aAAK,UAAU,KAAK,eAAe,OAAO;AAC1C,aAAK,iBAAA;AAAA,MACP,CAAC;AAAA,IACH;AAAA,IAEA,eAAe,SAA4D;AACzE,YAAM,SAAS,MAAM,eAAe,OAAO;AAC3C,UAAI,CAAC,KAAK,MAAM,KAAM,QAAO;AAC7B,YAAM,cAAc;AAAA,QAClB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,aAAa;AAAA,QACb,UAAU;AAAA,QACV,SAAS;AAAA,QACT,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,aAAa;AAAA,QACb,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQ;AAAA,MAAA;AAEV,YAAM,iBAAiB,KAAK,MAAM,UAAU,cAAc;AAC1D,YAAM,cAAc,CAAC,SAAiB;AACpC,YAAI,CAAC,eAAgB,QAAO;AAC5B,cAAM,WAAW,YAAY,IAAI;AACjC,eAAO,WAAW;AAAA,EAAK,QAAQ,KAAK;AAAA,MACtC;AACA,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EACA,OAAO,CAAC,KAAK,SAAS;AACtB,YAAI,IAAI,IAAI,KAAK,MAAM,YAAY,IAAI,IAAI,YAAY,IAAI;AAC3D,eAAO;AAAA,MACT,GAAG,CAAA,CAA4B;AAC/B,YAAM,aAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EACA,OAAO,CAAC,KAAK,SAAS;AACtB,YAAI,IAAI,IAAI;AAAA,UACV,QAAQ,MAAM;AACZ,mBAAO,KAAK,MAAM,YAAY,IAAI,IAAI,YAAY,IAAI;AAAA,UACxD;AAAA,QAAA;AAEF,eAAO;AAAA,MACT,GAAG,CAAA,CAAE;AACL,YAAM,mBAAmB;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EACA,OAAO,CAAC,KAAK,SAAS;AACtB,YAAI,IAAI,IAAI;AAAA,UACV,QAAQ,CAAC,QAAqB,UAAkB;AAC9C,gBAAI,SAAS,aAAa;AACxB,sBAAQ,OAAO,UAAU,SAAS,WAAW,IAAI,QAAQ;AAAA,YAC3D;AACA,gBAAI,CAAC,OAAO;AACV,kBAAI,SAAS,SAAS;AACpB,wBAAQ;AAAA,cACV,WACS,SAAS,UAAU;AAC1B,wBAAQ;AAAA,cACV;AAAA,YACF;AACA,mBAAO,KAAK,MAAM,YAAY,GAAG,IAAI,IAAI,KAAK,EAAE,IAAI,YAAY,GAAG,IAAI,IAAI,KAAK,EAAE;AAAA,UACpF;AAAA,QAAA;AAEF,eAAO;AAAA,MACT,GAAG,CAAA,CAAE;AACL,YAAM,UAAU;AAAA,QACd,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,YAAY;AAAA,UACV,QAAQ,MAAM;AACZ,mBAAO,KAAK,MAAM,YAAY,KAAK,MAAM,eAAe,oBAAoB,YAAY;AAAA,UAC1F;AAAA,QAAA;AAAA,MACF;AAEF,YAAM,kBAAkB,OAAO,QAAQ,QAAQ,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACvF,YAAIC,GAAAA,SAAS,KAAK,GAAG;AACnB,cAAI,GAAG,IAAI,EAAE,KAAK,KAAK,MAAM,YAAY,KAAK,EAAA;AAAA,QAChD,WACS,SAASC,GAAAA,SAAS,KAAK,GAAG;AACjC,gBAAM,cAAc,YAAY,SAAS,YAAY,SAAS,SAAS,SAAS,aAAa;AAC7F,cAAI,CAAC,aAAa;AAChB,gBAAI,GAAG,IAAI;AAAA,cACT,QAAQ,OAAO;AAAA,gBACb,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAGD,GAAAA,SAAS,CAAC,IAAI,KAAK,MAAM,YAAY,CAAW,IAAI,CAAC,CAAC;AAAA,cAAA;AAAA,YAClG;AAAA,UAEJ,OACK;AACH,kBAAM,SAAS,EAAE,GAAG,MAAA;AACpB,gBAAIA,YAAS,OAAO,GAAG,EAAG,QAAO,MAAM,KAAK,MAAM,YAAY,OAAO,GAAG;AACxE,gBAAIA,YAAS,OAAO,OAAO,EAAG,QAAO,UAAU,KAAK,MAAM,YAAY,OAAO,OAAO;AACpF,gBAAI,OAAO,QAAQ;AACjB,qBAAO,SAAS,OAAO;AAAA,gBACrB,OAAO,QAAQ,OAAO,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAGA,GAAAA,SAAS,CAAC,IAAI,KAAK,MAAM,YAAY,CAAW,IAAI,CAAC,CAAC;AAAA,cAAA;AAAA,YAE5G;AACA,gBAAI,GAAG,IAAI;AAAA,UACb;AAAA,QACF,OACK;AACH,cAAI,GAAG,IAAI;AAAA,QACb;AACA,eAAO;AAAA,MACT,GAAG,CAAA,CAAyB;AAC5B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY;AAAA,UACV,GAAG;AAAA,UACH,GAAG;AAAA,QAAA;AAAA,MACL;AAAA,IAEJ;AAAA,EAAA;AAEJ;;"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const I18n = require("quill-i18n");
3
4
  const index$1 = require("../config/index.cjs.js");
4
5
  const fluentEditor = require("../core/fluent-editor.cjs.js");
5
6
  const customImageSpec = require("../modules/custom-image/specs/custom-image-spec.cjs.js");
@@ -9,7 +10,6 @@ const betterPicker = require("../modules/toolbar/better-picker.cjs.js");
9
10
  const formatPainter = require("../tools/format-painter.cjs.js");
10
11
  const fullscreen = require("../tools/fullscreen.cjs.js");
11
12
  const screenshot = require("../tools/screenshot.cjs.js");
12
- const editor_config = require("../config/editor.config.cjs.js");
13
13
  const editor_utils = require("../config/editor.utils.cjs.js");
14
14
  const tooltip = require("../modules/link/modules/tooltip.cjs.js");
15
15
  const OriginSnowTheme = fluentEditor.default.import("themes/snow");
@@ -155,7 +155,7 @@ class SnowTheme extends OriginSnowTheme {
155
155
  constructor(quill, options) {
156
156
  super(quill, options);
157
157
  this.quill = quill;
158
- this.quill.emitter.on(editor_config.CHANGE_LANGUAGE_EVENT, () => {
158
+ this.quill.on(I18n.I18N_LOCALE_CHANGE, () => {
159
159
  this.i18nTextToolbar();
160
160
  });
161
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snow.cjs.js","sources":["../../../src/themes/snow.ts"],"sourcesContent":["import type { ThemeOptions } from 'quill/core/theme'\nimport type TypeToolbar from 'quill/modules/toolbar'\nimport type TypeIconPicker from 'quill/ui/icon-picker'\nimport { CHANGE_LANGUAGE_EVENT, inputFile, isNullOrUndefined } from '../config'\nimport FluentEditor from '../core/fluent-editor'\nimport { CustomImageSpec } from '../modules/custom-image/specs/custom-image-spec'\nimport { LinkTooltip } from '../modules/link'\nimport { shortKey } from '../modules/shortcut-key'\nimport { ColorPicker, Picker } from '../modules/toolbar/better-picker'\nimport { FormatPainter } from '../tools/format-painter'\nimport { fullscreenHandler } from '../tools/fullscreen'\nimport { Screenshot } from '../tools/screenshot'\n\nconst OriginSnowTheme = FluentEditor.import('themes/snow') as any\nconst IconPicker = FluentEditor.import('ui/icon-picker') as typeof TypeIconPicker\n\nOriginSnowTheme.DEFAULTS = {\n modules: {\n 'i18n': true,\n 'keyboard': {\n bindings: {\n ...shortKey,\n },\n },\n 'toolbar': {\n handlers: {\n ...(OriginSnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\n 'formula': function () {\n if (!this.quill.isEnabled()) return\n const mathlive = this.quill.getModule('mathlive')\n if (!mathlive) {\n this.quill.theme.tooltip.edit('formula')\n }\n else {\n mathlive.createDialog()\n }\n },\n 'undo': function () {\n this.quill.history.undo()\n },\n 'redo': function () {\n this.quill.history.redo()\n },\n 'file': function () {\n const accept = (this.quill as FluentEditor).uploader.getAccept('file')\n inputFile.call(this, 'file', accept)\n },\n 'image': function () {\n const accept = (this.quill as FluentEditor).uploader.getAccept('image')\n inputFile.call(this, 'image', accept)\n },\n 'video': function () {\n const accept = (this.quill as FluentEditor).uploader.getAccept('video')\n inputFile.call(this, 'video', accept)\n },\n 'ai': function () {},\n 'emoji': function () {},\n 'fullscreen': fullscreenHandler,\n [FormatPainter.toolName]: FormatPainter,\n [Screenshot.toolName]: Screenshot,\n 'line-height': function (value) {\n this.quill.format('line-height', value)\n },\n 'divider': function () {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', FluentEditor.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'divider', true, FluentEditor.sources.USER)\n this.quill.setSelection(range.index + 2, FluentEditor.sources.SILENT)\n },\n },\n },\n 'image': {\n specs: [CustomImageSpec],\n overlay: {\n style: {\n border: '1px dashed rgb(68, 68, 68)',\n },\n },\n },\n 'shortcut-key': false,\n 'file': true,\n },\n}\n\nconst ALIGNS = [false, 'center', 'right']\nconst COLORS = [\n '',\n 'rgb(255, 255, 255)',\n 'rgb(0, 0, 0)',\n 'rgb(72, 83, 104)',\n 'rgb(41, 114, 244)',\n 'rgb(0, 163, 245)',\n 'rgb(49, 155, 98)',\n 'rgb(222, 60, 54)',\n 'rgb(248, 136, 37)',\n 'rgb(245, 196, 0)',\n 'rgb(153, 56, 215)',\n\n 'rgb(242, 242, 242)',\n 'rgb(127, 127, 127)',\n 'rgb(243, 245, 247)',\n 'rgb(229, 239, 255)',\n 'rgb(229, 246, 255)',\n 'rgb(234, 250, 241)',\n 'rgb(254, 233, 232)',\n 'rgb(254, 243, 235)',\n 'rgb(254, 249, 227)',\n 'rgb(253, 235, 255)',\n\n 'rgb(216, 216, 216)',\n 'rgb(89, 89, 89)',\n 'rgb(197, 202, 211)',\n 'rgb(199, 220, 255)',\n 'rgb(199, 236, 255)',\n 'rgb(195, 234, 213)',\n 'rgb(255, 201, 199)',\n 'rgb(255, 220, 196)',\n 'rgb(255, 238, 173)',\n 'rgb(242, 199, 255)',\n\n 'rgb(191, 191, 191)',\n 'rgb(63, 63, 63)',\n 'rgb(128, 139, 158)',\n 'rgb(153, 190, 255)',\n 'rgb(153, 221, 255)',\n 'rgb(152, 215, 182)',\n 'rgb(255, 156, 153)',\n 'rgb(255, 186, 132)',\n 'rgb(255, 226, 112)',\n 'rgb(213, 142, 255)',\n\n 'rgb(165, 165, 165)',\n 'rgb(38, 38, 38)',\n 'rgb(53, 59, 69)',\n 'rgb(20, 80, 184)',\n 'rgb(18, 116, 165)',\n 'rgb(39, 124, 79)',\n 'rgb(158, 30, 26)',\n 'rgb(184, 96, 20)',\n 'rgb(163, 130, 0)',\n 'rgb(94, 34, 129)',\n\n 'rgb(147, 147, 147)',\n 'rgb(13, 13, 13)',\n 'rgb(36, 39, 46)',\n 'rgb(12, 48, 110)',\n 'rgb(10, 65, 92)',\n 'rgb(24, 78, 50)',\n 'rgb(88, 17, 14)',\n 'rgb(92, 48, 10)',\n 'rgb(102, 82, 0)',\n 'rgb(59, 21, 81)',\n\n 'custom',\n]\nconst FONTS = [false, 'serif', 'monospace']\nconst HEADERS = ['1', '2', '3', false]\nconst SIZES = ['small', false, 'large', 'huge']\nconst LINEHEIGHT = [false, '1.2', '1.5', '2']\n\nclass SnowTheme extends OriginSnowTheme {\n constructor(public quill: FluentEditor, options: ThemeOptions) {\n super(quill, options)\n\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\n this.i18nTextToolbar()\n })\n }\n\n i18nTextToolbar() {\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\n ColorPicker.clearText = this.quill.getLangText('clear-color')\n ColorPicker.customText = this.quill.getLangText('custom-color')\n\n if (!toolbar || !this.pickers) return\n\n this.pickers.forEach((picker) => {\n if (picker instanceof ColorPicker) {\n // EasyColorPicker have not dts. abd origin quill ColorPicker dts not complete. use any to resovle ts type error\n const colorPicker = picker as any\n colorPicker.options.remove()\n Array.from(colorPicker.select.options).forEach((option: any) => {\n if (option.hasAttribute('custom')) {\n option.remove()\n }\n })\n colorPicker.buildOptions()\n colorPicker.createUsedColor()\n }\n\n if (picker.select && picker.select.classList.contains('ql-header')) {\n const getLabelKey = (v: string | null) => (v ? `header-${v}` : 'header-normal')\n\n // 更新 label 文本\n const labelValue = picker.label.getAttribute('data-value')\n picker.label.setAttribute('data-label', this.quill.getLangText(getLabelKey(labelValue)))\n\n const select = picker.select as HTMLSelectElement\n Array.from(select.options).forEach((option) => {\n const value = option.getAttribute('value')\n option.textContent = this.quill.getLangText(getLabelKey(value))\n })\n\n picker.options.remove()\n picker.buildOptions()\n }\n })\n }\n\n buildPickers(selects: NodeListOf<HTMLSelectElement>, icons: Record<string, string | Record<string, string>>) {\n this.pickers = Array.from(selects).map((select) => {\n if (select.classList.contains('ql-align')) {\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(select, ALIGNS)\n }\n return new IconPicker(select, icons.align as Record<string, string>)\n }\n\n if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n const format = select.classList.contains('ql-background') ? 'background' : 'color'\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillColorSelect(select, COLORS, format, format === 'background' ? '#ffffff' : '#000000')\n }\n return new ColorPicker(select, icons[format] as string, {\n expandIcon: '<i class=\"icon\" />',\n closeAfterChange: false,\n })\n }\n\n if (isNullOrUndefined(select.querySelector('option'))) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS)\n }\n else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS)\n }\n else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES)\n }\n else if (select.classList.contains('ql-line-height')) {\n fillSelect(select, LINEHEIGHT)\n }\n }\n return new Picker(select)\n })\n\n const update = () => {\n this.pickers.forEach((picker) => {\n if (picker instanceof ColorPicker) return\n picker.update()\n })\n }\n this.quill.on(FluentEditor.events.EDITOR_CHANGE, update)\n }\n\n extendToolbar(toolbar) {\n const icons = FluentEditor.import('ui/icons') as Record<string, any>\n toolbar.container.classList.add('ql-snow')\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\n this.tooltip = new LinkTooltip(this.quill, this.options.bounds)\n }\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n values.forEach((value) => {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n option.setAttribute('value', value)\n }\n select.appendChild(option)\n })\n}\n\nfunction fillColorSelect(\n select: HTMLSelectElement,\n values: Array<string | boolean>,\n format: string,\n defaultValue: unknown = false,\n) {\n const colorGetter = document.createElement('span') as HTMLElement\n for (const value of values) {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n if (value !== 'custom') {\n colorGetter.style[format] = String(value)\n option.setAttribute('value', colorGetter.style[format])\n }\n else {\n option.setAttribute('value', value)\n }\n }\n select.appendChild(option)\n }\n}\n\nexport default SnowTheme\n"],"names":["FluentEditor","shortKey","inputFile","fullscreenHandler","FormatPainter","Screenshot","CustomImageSpec","CHANGE_LANGUAGE_EVENT","ColorPicker","isNullOrUndefined","Picker","LinkTooltip"],"mappings":"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"}
1
+ {"version":3,"file":"snow.cjs.js","sources":["../../../src/themes/snow.ts"],"sourcesContent":["import type { ThemeOptions } from 'quill/core/theme'\nimport type TypeToolbar from 'quill/modules/toolbar'\nimport type TypeIconPicker from 'quill/ui/icon-picker'\nimport { I18N_LOCALE_CHANGE } from 'quill-i18n'\nimport { inputFile, isNullOrUndefined } from '../config'\nimport FluentEditor from '../core/fluent-editor'\nimport { CustomImageSpec } from '../modules/custom-image/specs/custom-image-spec'\nimport { LinkTooltip } from '../modules/link'\nimport { shortKey } from '../modules/shortcut-key'\nimport { ColorPicker, Picker } from '../modules/toolbar/better-picker'\nimport { FormatPainter } from '../tools/format-painter'\nimport { fullscreenHandler } from '../tools/fullscreen'\nimport { Screenshot } from '../tools/screenshot'\n\nconst OriginSnowTheme = FluentEditor.import('themes/snow') as any\nconst IconPicker = FluentEditor.import('ui/icon-picker') as typeof TypeIconPicker\n\nOriginSnowTheme.DEFAULTS = {\n modules: {\n 'i18n': true,\n 'keyboard': {\n bindings: {\n ...shortKey,\n },\n },\n 'toolbar': {\n handlers: {\n ...(OriginSnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\n 'formula': function () {\n if (!this.quill.isEnabled()) return\n const mathlive = this.quill.getModule('mathlive')\n if (!mathlive) {\n this.quill.theme.tooltip.edit('formula')\n }\n else {\n mathlive.createDialog()\n }\n },\n 'undo': function () {\n this.quill.history.undo()\n },\n 'redo': function () {\n this.quill.history.redo()\n },\n 'file': function () {\n const accept = (this.quill as FluentEditor).uploader.getAccept('file')\n inputFile.call(this, 'file', accept)\n },\n 'image': function () {\n const accept = (this.quill as FluentEditor).uploader.getAccept('image')\n inputFile.call(this, 'image', accept)\n },\n 'video': function () {\n const accept = (this.quill as FluentEditor).uploader.getAccept('video')\n inputFile.call(this, 'video', accept)\n },\n 'ai': function () {},\n 'emoji': function () {},\n 'fullscreen': fullscreenHandler,\n [FormatPainter.toolName]: FormatPainter,\n [Screenshot.toolName]: Screenshot,\n 'line-height': function (value) {\n this.quill.format('line-height', value)\n },\n 'divider': function () {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', FluentEditor.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'divider', true, FluentEditor.sources.USER)\n this.quill.setSelection(range.index + 2, FluentEditor.sources.SILENT)\n },\n },\n },\n 'image': {\n specs: [CustomImageSpec],\n overlay: {\n style: {\n border: '1px dashed rgb(68, 68, 68)',\n },\n },\n },\n 'shortcut-key': false,\n 'file': true,\n },\n}\n\nconst ALIGNS = [false, 'center', 'right']\nconst COLORS = [\n '',\n 'rgb(255, 255, 255)',\n 'rgb(0, 0, 0)',\n 'rgb(72, 83, 104)',\n 'rgb(41, 114, 244)',\n 'rgb(0, 163, 245)',\n 'rgb(49, 155, 98)',\n 'rgb(222, 60, 54)',\n 'rgb(248, 136, 37)',\n 'rgb(245, 196, 0)',\n 'rgb(153, 56, 215)',\n\n 'rgb(242, 242, 242)',\n 'rgb(127, 127, 127)',\n 'rgb(243, 245, 247)',\n 'rgb(229, 239, 255)',\n 'rgb(229, 246, 255)',\n 'rgb(234, 250, 241)',\n 'rgb(254, 233, 232)',\n 'rgb(254, 243, 235)',\n 'rgb(254, 249, 227)',\n 'rgb(253, 235, 255)',\n\n 'rgb(216, 216, 216)',\n 'rgb(89, 89, 89)',\n 'rgb(197, 202, 211)',\n 'rgb(199, 220, 255)',\n 'rgb(199, 236, 255)',\n 'rgb(195, 234, 213)',\n 'rgb(255, 201, 199)',\n 'rgb(255, 220, 196)',\n 'rgb(255, 238, 173)',\n 'rgb(242, 199, 255)',\n\n 'rgb(191, 191, 191)',\n 'rgb(63, 63, 63)',\n 'rgb(128, 139, 158)',\n 'rgb(153, 190, 255)',\n 'rgb(153, 221, 255)',\n 'rgb(152, 215, 182)',\n 'rgb(255, 156, 153)',\n 'rgb(255, 186, 132)',\n 'rgb(255, 226, 112)',\n 'rgb(213, 142, 255)',\n\n 'rgb(165, 165, 165)',\n 'rgb(38, 38, 38)',\n 'rgb(53, 59, 69)',\n 'rgb(20, 80, 184)',\n 'rgb(18, 116, 165)',\n 'rgb(39, 124, 79)',\n 'rgb(158, 30, 26)',\n 'rgb(184, 96, 20)',\n 'rgb(163, 130, 0)',\n 'rgb(94, 34, 129)',\n\n 'rgb(147, 147, 147)',\n 'rgb(13, 13, 13)',\n 'rgb(36, 39, 46)',\n 'rgb(12, 48, 110)',\n 'rgb(10, 65, 92)',\n 'rgb(24, 78, 50)',\n 'rgb(88, 17, 14)',\n 'rgb(92, 48, 10)',\n 'rgb(102, 82, 0)',\n 'rgb(59, 21, 81)',\n\n 'custom',\n]\nconst FONTS = [false, 'serif', 'monospace']\nconst HEADERS = ['1', '2', '3', false]\nconst SIZES = ['small', false, 'large', 'huge']\nconst LINEHEIGHT = [false, '1.2', '1.5', '2']\n\nclass SnowTheme extends OriginSnowTheme {\n constructor(public quill: FluentEditor, options: ThemeOptions) {\n super(quill, options)\n\n this.quill.on(I18N_LOCALE_CHANGE, () => {\n this.i18nTextToolbar()\n })\n }\n\n i18nTextToolbar() {\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\n ColorPicker.clearText = this.quill.getLangText('clear-color')\n ColorPicker.customText = this.quill.getLangText('custom-color')\n\n if (!toolbar || !this.pickers) return\n\n this.pickers.forEach((picker) => {\n if (picker instanceof ColorPicker) {\n // EasyColorPicker have not dts. abd origin quill ColorPicker dts not complete. use any to resovle ts type error\n const colorPicker = picker as any\n colorPicker.options.remove()\n Array.from(colorPicker.select.options).forEach((option: any) => {\n if (option.hasAttribute('custom')) {\n option.remove()\n }\n })\n colorPicker.buildOptions()\n colorPicker.createUsedColor()\n }\n\n if (picker.select && picker.select.classList.contains('ql-header')) {\n const getLabelKey = (v: string | null) => (v ? `header-${v}` : 'header-normal')\n\n // 更新 label 文本\n const labelValue = picker.label.getAttribute('data-value')\n picker.label.setAttribute('data-label', this.quill.getLangText(getLabelKey(labelValue)))\n\n const select = picker.select as HTMLSelectElement\n Array.from(select.options).forEach((option) => {\n const value = option.getAttribute('value')\n option.textContent = this.quill.getLangText(getLabelKey(value))\n })\n\n picker.options.remove()\n picker.buildOptions()\n }\n })\n }\n\n buildPickers(selects: NodeListOf<HTMLSelectElement>, icons: Record<string, string | Record<string, string>>) {\n this.pickers = Array.from(selects).map((select) => {\n if (select.classList.contains('ql-align')) {\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(select, ALIGNS)\n }\n return new IconPicker(select, icons.align as Record<string, string>)\n }\n\n if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n const format = select.classList.contains('ql-background') ? 'background' : 'color'\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillColorSelect(select, COLORS, format, format === 'background' ? '#ffffff' : '#000000')\n }\n return new ColorPicker(select, icons[format] as string, {\n expandIcon: '<i class=\"icon\" />',\n closeAfterChange: false,\n })\n }\n\n if (isNullOrUndefined(select.querySelector('option'))) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS)\n }\n else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS)\n }\n else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES)\n }\n else if (select.classList.contains('ql-line-height')) {\n fillSelect(select, LINEHEIGHT)\n }\n }\n return new Picker(select)\n })\n\n const update = () => {\n this.pickers.forEach((picker) => {\n if (picker instanceof ColorPicker) return\n picker.update()\n })\n }\n this.quill.on(FluentEditor.events.EDITOR_CHANGE, update)\n }\n\n extendToolbar(toolbar) {\n const icons = FluentEditor.import('ui/icons') as Record<string, any>\n toolbar.container.classList.add('ql-snow')\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\n this.tooltip = new LinkTooltip(this.quill, this.options.bounds)\n }\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n values.forEach((value) => {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n option.setAttribute('value', value)\n }\n select.appendChild(option)\n })\n}\n\nfunction fillColorSelect(\n select: HTMLSelectElement,\n values: Array<string | boolean>,\n format: string,\n defaultValue: unknown = false,\n) {\n const colorGetter = document.createElement('span') as HTMLElement\n for (const value of values) {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n if (value !== 'custom') {\n colorGetter.style[format] = String(value)\n option.setAttribute('value', colorGetter.style[format])\n }\n else {\n option.setAttribute('value', value)\n }\n }\n select.appendChild(option)\n }\n}\n\nexport default SnowTheme\n"],"names":["FluentEditor","shortKey","inputFile","fullscreenHandler","FormatPainter","Screenshot","CustomImageSpec","I18N_LOCALE_CHANGE","ColorPicker","isNullOrUndefined","Picker","LinkTooltip"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@opentiny/fluent-editor",
3
3
  "type": "module",
4
- "version": "4.1.0-alpha.4",
4
+ "version": "4.1.1",
5
5
  "description": "A rich text editor based on Quill 2.0, which extends rich modules and formats on the basis of Quill. It's powerful and out-of-the-box.",
6
6
  "author": "OpenTiny Team",
7
7
  "license": "MIT",
@@ -29,7 +29,8 @@
29
29
  "dependencies": {
30
30
  "quill": "^2.0.0",
31
31
  "quill-easy-color": "^0.0.10",
32
- "quill-shortcut-key": "^0.0.5"
32
+ "quill-i18n": "^0.2.0",
33
+ "quill-shortcut-key": "^0.2.1"
33
34
  },
34
35
  "exports": {
35
36
  ".": {
package/style.css CHANGED
@@ -81,7 +81,7 @@ html.dark .toolbar-tip__tooltip {
81
81
  .ql-editor s {
82
82
  text-decoration: line-through;
83
83
  }
84
- .ql-editor u.ql-custom-strike {
84
+ .ql-editor s.ql-custom-strike {
85
85
  text-decoration: line-through;
86
86
  }
87
87
  .ql-editor u {
@@ -101,9 +101,6 @@ html.dark .toolbar-tip__tooltip {
101
101
  position: absolute;
102
102
  color: #000;
103
103
  }
104
- .ql-editor li > .ql-ui {
105
- bottom: 0;
106
- }
107
104
  .ql-editor li::before {
108
105
  display: inline-block;
109
106
  margin-left: -1.5em;
@@ -671,107 +668,6 @@ li.unchecked > .ql-ui {
671
668
  }
672
669
 
673
670
  /* 图片预览 */
674
- .ql-snow .ql-tooltip {
675
- position: absolute;
676
- transform: translateY(10px);
677
- background-color: #fff;
678
- border: 1px solid #adb0b8;
679
- box-shadow: 0 2px 8px 0 rgba(37, 43, 58, 0.2);
680
- color: #252b3a;
681
- padding: 5px 3px;
682
- white-space: nowrap;
683
- z-index: 1;
684
- }
685
- .ql-snow .ql-tooltip[data-mode=link]::before {
686
- content: none;
687
- }
688
- .ql-snow .ql-tooltip.ql-flip {
689
- transform: translateY(-10px);
690
- }
691
- .ql-snow .ql-tooltip.ql-editing input[type=text] {
692
- display: inline-block;
693
- }
694
- .ql-snow .ql-tooltip.ql-editing a.ql-remove,
695
- .ql-snow .ql-tooltip.ql-editing a.ql-preview {
696
- display: inline-block !important;
697
- }
698
- .ql-snow .ql-tooltip.ql-editing a.ql-remove::before,
699
- .ql-snow .ql-tooltip.ql-editing a.ql-preview::before {
700
- content: none;
701
- }
702
- .ql-snow .ql-tooltip input[type=text] {
703
- display: none;
704
- border: 0;
705
- outline: none;
706
- font-size: 13px;
707
- height: 28px;
708
- margin: 0;
709
- padding: 0 6px;
710
- width: 200px;
711
- background-color: #fff;
712
- }
713
- .ql-snow .ql-tooltip .ql-split {
714
- width: 1px;
715
- height: 16px;
716
- line-height: 16px;
717
- margin: 6px 4px 6px 12px;
718
- border-left: 1px solid #adb0b8;
719
- display: inline-block;
720
- vertical-align: bottom;
721
- }
722
- .ql-snow .ql-tooltip .ql-preview .icon-share {
723
- display: block;
724
- font-size: 16px;
725
- color: #252b3a;
726
- line-height: 28px;
727
- font-family: "iconfont" !important;
728
- font-size: 16px;
729
- font-style: normal;
730
- -webkit-font-smoothing: antialiased;
731
- -moz-osx-font-smoothing: grayscale;
732
- }
733
- .ql-snow .ql-tooltip .ql-preview .icon-share::before {
734
- content: "\e683";
735
- }
736
- .ql-snow .ql-tooltip .ql-remove .icon-delete {
737
- display: block;
738
- font-size: 16px;
739
- color: #252b3a;
740
- line-height: 28px;
741
- font-family: "iconfont" !important;
742
- font-size: 16px;
743
- font-style: normal;
744
- -webkit-font-smoothing: antialiased;
745
- -moz-osx-font-smoothing: grayscale;
746
- }
747
- .ql-snow .ql-tooltip .ql-remove .icon-delete::before {
748
- content: "\ec45";
749
- }
750
- .ql-snow .ql-tooltip a {
751
- line-height: 28px;
752
- margin: 0 3px;
753
- padding: 0 3px;
754
- min-width: 28px;
755
- display: inline-block;
756
- text-align: center;
757
- color: #babbc0;
758
- border-radius: 2px 2px;
759
- text-decoration: none;
760
- -webkit-transition: background-color 0.3s ease-in-out;
761
- transition: background-color 0.3s ease-in-out;
762
- cursor: pointer;
763
- vertical-align: bottom;
764
- }
765
- .ql-snow .ql-tooltip a i {
766
- display: block;
767
- font-size: 16px;
768
- color: #babbc0;
769
- line-height: 28px;
770
- }
771
- .ql-snow .ql-tooltip a:hover {
772
- background-color: #949597;
773
- }
774
-
775
671
  :-webkit-full-screen {
776
672
  background-color: white !important;
777
673
  }
@@ -2459,14 +2355,14 @@ li.unchecked > .ql-ui {
2459
2355
  --qsf-menu-break-color-active:#f4f4f5;
2460
2356
  --qsf-menu-text-color-active:#18181b;
2461
2357
  --qsf-menu-hint-color:#8a8f8d;
2462
- width: 240px;
2463
- max-height: 370px;
2464
- padding: 4px;
2465
- border: 1px solid var(--qsf-menu-border-color);
2466
- border-radius: 6px;
2358
+ width: 15rem;
2359
+ max-height: 23.125rem;
2360
+ padding: 0.25rem;
2361
+ border: 0.0625rem solid var(--qsf-menu-border-color);
2362
+ border-radius: 0.375rem;
2467
2363
  background-color: var(--qsf-menu-bg-color);
2468
2364
  color: var(--qsf-menu-text-color);
2469
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
2365
+ box-shadow: 0 0.25rem 0.375rem -0.0625rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem -0.125rem rgba(0, 0, 0, 0.1);
2470
2366
  opacity: 1;
2471
2367
  transition-property: opacity, transform;
2472
2368
  transition-duration: 0.15s;
@@ -2478,10 +2374,10 @@ li.unchecked > .ql-ui {
2478
2374
  box-sizing: content-box;
2479
2375
  display: block;
2480
2376
  content: "暂无匹配的内容";
2481
- height: 22px;
2482
- line-height: 22px;
2483
- padding: 10px 0;
2484
- font-size: 14px;
2377
+ height: 1.375rem;
2378
+ line-height: 1.375rem;
2379
+ padding: 0.625rem 0;
2380
+ font-size: 0.875rem;
2485
2381
  color: var(--qsf-menu-hint-color);
2486
2382
  text-align: center;
2487
2383
  }
@@ -2493,12 +2389,12 @@ li.unchecked > .ql-ui {
2493
2389
  .qsf-menu__item {
2494
2390
  display: flex;
2495
2391
  align-items: center;
2496
- gap: 10px;
2497
- margin-bottom: 6px;
2498
- padding: 6px 8px;
2499
- border-radius: 6px;
2500
- font-size: 14px;
2501
- line-height: 20px;
2392
+ gap: 0.625rem;
2393
+ margin-bottom: 0.375rem;
2394
+ padding: 0.375rem 0.5rem;
2395
+ border-radius: 0.375rem;
2396
+ font-size: 0.875rem;
2397
+ line-height: 1.25rem;
2502
2398
  transition-property: background-color, color;
2503
2399
  transition-duration: 0.15s;
2504
2400
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -2524,8 +2420,8 @@ li.unchecked > .ql-ui {
2524
2420
  }
2525
2421
 
2526
2422
  .qsf-menu__item.is-break {
2527
- height: 1px;
2528
- margin: 4px -4px;
2423
+ height: 0.0625rem;
2424
+ margin: 0.25rem -0.25rem;
2529
2425
  padding: 0;
2530
2426
  background-color: var(--qsf-menu-break-bg-color-active);
2531
2427
  }
@@ -2545,15 +2441,15 @@ li.unchecked > .ql-ui {
2545
2441
  display: flex;
2546
2442
  justify-content: center;
2547
2443
  align-items: center;
2548
- width: 36px;
2549
- height: 36px;
2550
- margin-right: 8px;
2551
- border-radius: 8px;
2552
- border: 1px solid #ccc;
2444
+ width: 2.25rem;
2445
+ height: 2.25rem;
2446
+ margin-right: 0.5rem;
2447
+ border-radius: 0.5rem;
2448
+ border: 0.0625rem solid #ccc;
2553
2449
  }
2554
2450
 
2555
2451
  .qsf-menu__item-icon .qsf-menu__icon {
2556
- font-size: 26px;
2452
+ font-size: 1.625rem;
2557
2453
  stroke: #444;
2558
2454
  }
2559
2455
 
@@ -2567,20 +2463,20 @@ li.unchecked > .ql-ui {
2567
2463
 
2568
2464
  .qsf-menu__item-title {
2569
2465
  width: 100%;
2570
- font-size: 14px;
2571
- line-height: 18px;
2466
+ font-size: 0.875rem;
2467
+ line-height: 1.125rem;
2572
2468
  }
2573
2469
 
2574
2470
  .qsf-menu__item-hint {
2575
2471
  float: right;
2576
- font-size: 12px;
2577
- line-height: 18px;
2472
+ font-size: 0.75rem;
2473
+ line-height: 1.125rem;
2578
2474
  color: var(--qsf-menu-hint-color);
2579
2475
  }
2580
2476
 
2581
2477
  .qsf-menu__item-descriptions {
2582
- font-size: 12px;
2583
- line-height: 18px;
2478
+ font-size: 0.75rem;
2479
+ line-height: 1.125rem;
2584
2480
  color: var(--qsf-menu-hint-color);
2585
2481
  }
2586
2482
 
@@ -2591,7 +2487,7 @@ li.unchecked > .ql-ui {
2591
2487
  justify-content: center;
2592
2488
  width: 1em;
2593
2489
  height: 1em;
2594
- font-size: 20px;
2490
+ font-size: 1.25rem;
2595
2491
  }
2596
2492
 
2597
2493
  .qsf-menu__icon.is-arrow {
@@ -2607,12 +2503,7 @@ li.unchecked > .ql-ui {
2607
2503
 
2608
2504
  .qsf-placeholder {
2609
2505
  position: absolute;
2610
- font-size: 14px;
2611
- line-height: 1.42;
2612
- -webkit-user-select: none;
2613
- -moz-user-select: none;
2614
- user-select: none;
2615
- pointer-events: none;
2506
+ font-size: 0.875rem;
2616
2507
  }
2617
2508
 
2618
2509
  .qsf-placeholder.is-hidden {
@@ -2621,9 +2512,9 @@ li.unchecked > .ql-ui {
2621
2512
 
2622
2513
  .qsf-placeholder::before {
2623
2514
  content: attr(data-placeholder);
2624
- padding: 0 4px;
2515
+ padding: 0 0.25rem;
2625
2516
  white-space: nowrap;
2626
- font-size: 14px;
2517
+ font-size: 0.875rem;
2627
2518
  color: #d8dad9;
2628
2519
  }
2629
2520
 
@@ -2631,6 +2522,19 @@ li.unchecked > .ql-ui {
2631
2522
  transform: translateX(-100%);
2632
2523
  }
2633
2524
 
2525
+ .qsf-placeholder__wrapper {
2526
+ position: absolute;
2527
+ top: 0;
2528
+ left: 0;
2529
+ width: 100%;
2530
+ height: 100%;
2531
+ -webkit-user-select: none;
2532
+ -moz-user-select: none;
2533
+ user-select: none;
2534
+ pointer-events: none;
2535
+ overflow: hidden;
2536
+ }
2537
+
2634
2538
  .ql-editor.ql-blank::before {
2635
2539
  content: none;
2636
2540
  }
@@ -3469,4 +3373,105 @@ li.unchecked > .ql-ui {
3469
3373
  }
3470
3374
  .image-preview__overlay .icon-maxmize:before {
3471
3375
  content: url('data:image/svg+xml;utf8,<svg t="1642681601748" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2834" width="20" height="20"><path d="M460.8 940.8h-320l262.4-262.4c12.8-12.8 12.8-38.4 0-51.2-12.8-19.2-38.4-19.2-57.6 0l-262.4 262.4v-345.6c0-19.2-19.2-38.4-38.4-38.4s-38.4 19.2-38.4 38.4v364.8c0 51.2 38.4 115.2 96 115.2h358.4c19.2 0 38.4-19.2 38.4-38.4 0-25.6-19.2-44.8-38.4-44.8zM940.8 6.4h-377.6c-19.2 0-38.4 19.2-38.4 38.4s19.2 38.4 38.4 38.4h320l-268.8 262.4c-12.8 12.8-12.8 38.4 0 57.6 19.2 12.8 44.8 12.8 57.6 0l262.4-262.4v320c0 19.2 19.2 38.4 38.4 38.4s38.4-19.2 38.4-38.4v-352c6.4-64-25.6-102.4-70.4-102.4z" p-id="2835"></path></svg>');
3376
+ }
3377
+
3378
+ .ql-snow .ql-tooltip {
3379
+ position: absolute;
3380
+ transform: translateY(10px);
3381
+ background-color: #fff;
3382
+ border: 1px solid #adb0b8;
3383
+ box-shadow: 0 2px 8px 0 rgba(37, 43, 58, 0.2);
3384
+ color: #252b3a;
3385
+ padding: 5px 3px;
3386
+ white-space: nowrap;
3387
+ z-index: 1;
3388
+ }
3389
+ .ql-snow .ql-tooltip[data-mode=link]::before {
3390
+ content: attr(data-before-title);
3391
+ }
3392
+ .ql-snow .ql-tooltip.ql-flip {
3393
+ transform: translateY(-10px);
3394
+ }
3395
+ .ql-snow .ql-tooltip.ql-editing input[type=text] {
3396
+ display: inline-block;
3397
+ }
3398
+ .ql-snow .ql-tooltip.ql-editing a.ql-remove,
3399
+ .ql-snow .ql-tooltip.ql-editing a.ql-preview {
3400
+ display: inline-block !important;
3401
+ }
3402
+ .ql-snow .ql-tooltip.ql-editing a.ql-remove::before,
3403
+ .ql-snow .ql-tooltip.ql-editing a.ql-preview::before {
3404
+ content: none;
3405
+ }
3406
+ .ql-snow .ql-tooltip input[type=text] {
3407
+ display: none;
3408
+ border: 0;
3409
+ outline: none;
3410
+ font-size: 13px;
3411
+ height: 28px;
3412
+ margin: 0;
3413
+ padding: 0 6px;
3414
+ width: 200px;
3415
+ background-color: #fff;
3416
+ }
3417
+ .ql-snow .ql-tooltip .ql-split {
3418
+ width: 1px;
3419
+ height: 16px;
3420
+ line-height: 16px;
3421
+ margin: 6px 4px 6px 12px;
3422
+ border-left: 1px solid #adb0b8;
3423
+ display: inline-block;
3424
+ vertical-align: bottom;
3425
+ }
3426
+ .ql-snow .ql-tooltip .ql-preview .icon-share {
3427
+ display: block;
3428
+ font-size: 16px;
3429
+ color: #252b3a;
3430
+ line-height: 28px;
3431
+ font-family: "iconfont" !important;
3432
+ font-size: 16px;
3433
+ font-style: normal;
3434
+ -webkit-font-smoothing: antialiased;
3435
+ -moz-osx-font-smoothing: grayscale;
3436
+ }
3437
+ .ql-snow .ql-tooltip .ql-preview .icon-share::before {
3438
+ content: "\e683";
3439
+ }
3440
+ .ql-snow .ql-tooltip .ql-remove .icon-delete {
3441
+ display: block;
3442
+ font-size: 16px;
3443
+ color: #252b3a;
3444
+ line-height: 28px;
3445
+ font-family: "iconfont" !important;
3446
+ font-size: 16px;
3447
+ font-style: normal;
3448
+ -webkit-font-smoothing: antialiased;
3449
+ -moz-osx-font-smoothing: grayscale;
3450
+ }
3451
+ .ql-snow .ql-tooltip .ql-remove .icon-delete::before {
3452
+ content: "\ec45";
3453
+ }
3454
+ .ql-snow .ql-tooltip a {
3455
+ line-height: 28px;
3456
+ margin: 0 3px;
3457
+ padding: 0 3px;
3458
+ min-width: 28px;
3459
+ display: inline-block;
3460
+ text-align: center;
3461
+ color: #babbc0;
3462
+ border-radius: 2px 2px;
3463
+ text-decoration: none;
3464
+ -webkit-transition: background-color 0.3s ease-in-out;
3465
+ transition: background-color 0.3s ease-in-out;
3466
+ cursor: pointer;
3467
+ vertical-align: bottom;
3468
+ }
3469
+ .ql-snow .ql-tooltip a i {
3470
+ display: block;
3471
+ font-size: 16px;
3472
+ color: #babbc0;
3473
+ line-height: 28px;
3474
+ }
3475
+ .ql-snow .ql-tooltip a:hover {
3476
+ background-color: #949597;
3472
3477
  }