@opentiny/fluent-editor 4.1.0 → 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.
- package/es/config/editor.config.es.js +1 -1
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js +4 -1
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js +4 -1
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/core/fluent-editor.es.js +29 -4
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js +2 -11
- package/es/fluent-editor.es.js.map +1 -1
- package/es/formats/strike.es.js +1 -1
- package/es/formats/strike.es.js.map +1 -1
- package/es/index.es.js +3 -3
- package/es/index.es.js.map +1 -1
- package/es/modules/counter.es.js +2 -3
- package/es/modules/counter.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js +13 -1
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/custom-image/blot-formatter.es.js +2 -2
- package/es/modules/custom-image/blot-formatter.es.js.map +1 -1
- package/es/modules/custom-image/index.es.js +1 -1
- package/es/modules/custom-image/preview/preview-modal.es.js +17 -6
- package/es/modules/custom-image/preview/preview-modal.es.js.map +1 -1
- package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -1
- package/es/modules/custom-uploader.es.js.map +1 -1
- package/es/modules/file/modules/file-module.es.js.map +1 -1
- package/es/modules/flow-chart/i18n/index.es.js +3 -5
- package/es/modules/flow-chart/i18n/index.es.js.map +1 -1
- package/es/modules/flow-chart/modules/context-menu.es.js +10 -13
- package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -1
- package/es/modules/flow-chart/modules/control-panel.es.js +13 -16
- package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -1
- package/es/modules/index.es.js +2 -2
- package/es/modules/index.es.js.map +1 -1
- package/es/modules/link/modules/tooltip.es.js +42 -27
- package/es/modules/link/modules/tooltip.es.js.map +1 -1
- package/es/modules/mind-map/i18n/index.es.js +3 -5
- package/es/modules/mind-map/i18n/index.es.js.map +1 -1
- package/es/modules/mind-map/modules/context-menu.es.js +11 -11
- package/es/modules/mind-map/modules/context-menu.es.js.map +1 -1
- package/es/modules/mind-map/modules/control-panel.es.js +7 -9
- package/es/modules/mind-map/modules/control-panel.es.js.map +1 -1
- package/es/modules/shortcut-key/index.es.js +6 -6
- package/es/modules/shortcut-key/index.es.js.map +1 -1
- package/es/modules/table-up/index.es.js +23 -33
- package/es/modules/table-up/index.es.js.map +1 -1
- package/es/modules/toolbar/toolbar-tip.es.js +27 -5
- package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
- package/es/themes/snow.es.js +2 -2
- package/es/themes/snow.es.js.map +1 -1
- package/lib/config/editor.config.cjs.js +1 -1
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js +4 -1
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js +4 -1
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js +29 -4
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +2 -11
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/formats/strike.cjs.js +1 -1
- package/lib/formats/strike.cjs.js.map +1 -1
- package/lib/index.cjs.js +16 -5
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/counter.cjs.js +2 -3
- package/lib/modules/counter.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js +13 -1
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/custom-image/blot-formatter.cjs.js +2 -2
- package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -1
- package/lib/modules/custom-image/index.cjs.js +1 -1
- package/lib/modules/custom-image/preview/preview-modal.cjs.js +17 -6
- package/lib/modules/custom-image/preview/preview-modal.cjs.js.map +1 -1
- package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -1
- package/lib/modules/custom-uploader.cjs.js.map +1 -1
- package/lib/modules/file/modules/file-module.cjs.js.map +1 -1
- package/lib/modules/flow-chart/i18n/index.cjs.js +3 -5
- package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -1
- package/lib/modules/flow-chart/modules/context-menu.cjs.js +10 -13
- package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -1
- package/lib/modules/flow-chart/modules/control-panel.cjs.js +13 -16
- package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -1
- package/lib/modules/index.cjs.js +14 -2
- package/lib/modules/index.cjs.js.map +1 -1
- package/lib/modules/link/modules/tooltip.cjs.js +42 -27
- package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/modules/mind-map/i18n/index.cjs.js +3 -5
- package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -1
- package/lib/modules/mind-map/modules/context-menu.cjs.js +11 -11
- package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -1
- package/lib/modules/mind-map/modules/control-panel.cjs.js +7 -9
- package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -1
- package/lib/modules/shortcut-key/index.cjs.js +4 -4
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
- package/lib/modules/table-up/index.cjs.js +23 -33
- package/lib/modules/table-up/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/toolbar-tip.cjs.js +26 -4
- package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
- package/lib/themes/snow.cjs.js +2 -2
- package/lib/themes/snow.cjs.js.map +1 -1
- package/package.json +3 -2
- package/style.css +149 -144
- package/types/config/editor.config.d.ts +4 -2
- package/types/config/i18n/en-us.d.ts +4 -1
- package/types/config/i18n/zh-cn.d.ts +4 -1
- package/types/config/types/editor-modules.interface.d.ts +3 -2
- package/types/core/fluent-editor.d.ts +1 -1
- package/types/modules/custom-clipboard.d.ts +2 -0
- package/types/modules/custom-image/index.d.ts +1 -1
- package/types/modules/custom-image/preview/preview-modal.d.ts +1 -0
- package/types/modules/flow-chart/i18n/index.d.ts +1 -1
- package/types/modules/index.d.ts +2 -1
- package/types/modules/link/modules/tooltip.d.ts +1 -0
- package/types/modules/mind-map/i18n/index.d.ts +1 -1
- package/types/modules/table-up/index.d.ts +3 -26
- package/es/modules/i18n.es.js +0 -62
- package/es/modules/i18n.es.js.map +0 -1
- package/lib/modules/i18n.cjs.js +0 -62
- package/lib/modules/i18n.cjs.js.map +0 -1
- 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 {
|
|
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("
|
|
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.
|
|
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
|
-
|
|
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 {
|
|
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":"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"}
|
package/lib/themes/snow.cjs.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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-
|
|
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
|
|
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:
|
|
2463
|
-
max-height:
|
|
2464
|
-
padding:
|
|
2465
|
-
border:
|
|
2466
|
-
border-radius:
|
|
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
|
|
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:
|
|
2482
|
-
line-height:
|
|
2483
|
-
padding:
|
|
2484
|
-
font-size:
|
|
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:
|
|
2497
|
-
margin-bottom:
|
|
2498
|
-
padding:
|
|
2499
|
-
border-radius:
|
|
2500
|
-
font-size:
|
|
2501
|
-
line-height:
|
|
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:
|
|
2528
|
-
margin:
|
|
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:
|
|
2549
|
-
height:
|
|
2550
|
-
margin-right:
|
|
2551
|
-
border-radius:
|
|
2552
|
-
border:
|
|
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:
|
|
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:
|
|
2571
|
-
line-height:
|
|
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:
|
|
2577
|
-
line-height:
|
|
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:
|
|
2583
|
-
line-height:
|
|
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:
|
|
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:
|
|
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
|
|
2515
|
+
padding: 0 0.25rem;
|
|
2625
2516
|
white-space: nowrap;
|
|
2626
|
-
font-size:
|
|
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
|
}
|