@hufe921/canvas-editor-plugin-mention 0.0.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/dist/mention.js +160 -0
- package/dist/mention.js.map +1 -0
- package/dist/mention.umd.cjs +3 -0
- package/dist/mention.umd.cjs.map +1 -0
- package/dist/src/mention/constant/index.d.ts +6 -0
- package/dist/src/mention/index.d.ts +9 -0
- package/dist/src/mention/interface/index.d.ts +27 -0
- package/dist/src/mention/style/index.d.ts +1 -0
- package/package.json +49 -0
package/dist/mention.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.id="mention-style",e.appendChild(document.createTextNode(".ce-mention{position:absolute;z-index:9;min-width:120px;max-height:200px;overflow-y:auto;padding:4px 0;background:#ffffff;border-radius:4px;box-shadow:0 2px 12px #38383833;font-size:14px;color:#333}.ce-mention-item{padding:6px 12px;white-space:nowrap;cursor:pointer}.ce-mention-item:hover{background:#f2f6fc}.ce-mention-empty{padding:6px 12px;white-space:nowrap;color:#999}")),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
2
|
+
var p = Object.defineProperty;
|
|
3
|
+
var L = (r, t, e) => t in r ? p(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
4
|
+
var s = (r, t, e) => (L(r, typeof t != "symbol" ? t + "" : t, e), e);
|
|
5
|
+
import { EDITOR_COMPONENT as x, EditorComponent as O, ElementType as C } from "@hufe921/canvas-editor";
|
|
6
|
+
const c = "ce-mention", g = "zhCN", u = "@", T = 5, m = {
|
|
7
|
+
zhCN: {
|
|
8
|
+
emptyText: "无匹配结果",
|
|
9
|
+
placeholderText: "输入以筛选"
|
|
10
|
+
},
|
|
11
|
+
en: {
|
|
12
|
+
emptyText: "No results",
|
|
13
|
+
placeholderText: "Type to filter"
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
class I {
|
|
17
|
+
constructor(t, e) {
|
|
18
|
+
s(this, "editor");
|
|
19
|
+
s(this, "defaultOptions");
|
|
20
|
+
s(this, "options");
|
|
21
|
+
s(this, "lang");
|
|
22
|
+
s(this, "trigger");
|
|
23
|
+
s(this, "container", null);
|
|
24
|
+
// 触发符所在元素索引(程序化打开时为当前光标索引)
|
|
25
|
+
s(this, "triggerIndex", -1);
|
|
26
|
+
// 是否由 executeMention 程序化打开(无触发符文本,选中后直接插入)
|
|
27
|
+
s(this, "isProgrammatic", !1);
|
|
28
|
+
s(this, "isOpen", !1);
|
|
29
|
+
s(this, "inputHandler", (t) => {
|
|
30
|
+
if (!this.isOpen) {
|
|
31
|
+
t.data === this.trigger && this.open(!1);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (this.isProgrammatic) {
|
|
35
|
+
this.updatePosition();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.refresh();
|
|
39
|
+
});
|
|
40
|
+
s(this, "rangeChangeHandler", (t) => {
|
|
41
|
+
this.isOpen && t.startIndex <= this.triggerIndex && this.close();
|
|
42
|
+
});
|
|
43
|
+
s(this, "labelMousedownHandler", (t) => {
|
|
44
|
+
var e, n;
|
|
45
|
+
(n = (e = this.options).onClick) == null || n.call(e, t.element);
|
|
46
|
+
});
|
|
47
|
+
this.editor = t, this.defaultOptions = e, this.options = this.mergeOptions(), this.lang = this.getLang(), this.trigger = this.options.trigger || u, t.eventBus.on("input", this.inputHandler), t.eventBus.on("labelMousedown", this.labelMousedownHandler);
|
|
48
|
+
}
|
|
49
|
+
mergeOptions(t) {
|
|
50
|
+
var e, n;
|
|
51
|
+
return {
|
|
52
|
+
...this.defaultOptions,
|
|
53
|
+
...t,
|
|
54
|
+
dataList: (t == null ? void 0 : t.dataList) ?? ((e = this.defaultOptions) == null ? void 0 : e.dataList) ?? [],
|
|
55
|
+
label: {
|
|
56
|
+
...(n = this.defaultOptions) == null ? void 0 : n.label,
|
|
57
|
+
...t == null ? void 0 : t.label
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
getLang(t) {
|
|
62
|
+
var a, o, l, h, d;
|
|
63
|
+
const e = (o = (a = this.editor.command).getOptions) == null ? void 0 : o.call(a).locale, n = ((t == null ? void 0 : t.locale) || ((l = this.defaultOptions) == null ? void 0 : l.locale) || e || g).toLowerCase().replace(/[-_]/g, "");
|
|
64
|
+
return {
|
|
65
|
+
...((h = Object.entries(m).find(([f]) => f.toLowerCase() === n)) == null ? void 0 : h[1]) || m[g],
|
|
66
|
+
...(d = this.defaultOptions) == null ? void 0 : d.lang,
|
|
67
|
+
...t == null ? void 0 : t.lang
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
getDataList() {
|
|
71
|
+
const { dataList: t } = this.options;
|
|
72
|
+
return typeof t == "function" ? t() : t || [];
|
|
73
|
+
}
|
|
74
|
+
filterDataList(t) {
|
|
75
|
+
const e = this.options.max ?? T, n = t.toLowerCase();
|
|
76
|
+
return this.getDataList().filter((i) => i.name.toLowerCase().includes(n)).slice(0, e);
|
|
77
|
+
}
|
|
78
|
+
renderList(t, e) {
|
|
79
|
+
if (this.container) {
|
|
80
|
+
if (this.container.innerHTML = "", !t.length) {
|
|
81
|
+
const n = document.createElement("div");
|
|
82
|
+
n.classList.add(`${c}-empty`), n.innerText = e ? this.lang.emptyText : this.lang.placeholderText, this.container.append(n);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
t.forEach((n) => {
|
|
86
|
+
const i = document.createElement("div");
|
|
87
|
+
i.classList.add(`${c}-item`), i.innerText = n.name, i.onmousedown = (a) => {
|
|
88
|
+
a.preventDefault(), this.select(n);
|
|
89
|
+
}, this.container.append(i);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
updatePosition() {
|
|
94
|
+
var n;
|
|
95
|
+
if (!this.container)
|
|
96
|
+
return;
|
|
97
|
+
const t = this.editor.command.getRangeContext(), e = (n = t == null ? void 0 : t.rangeRects) == null ? void 0 : n[0];
|
|
98
|
+
if (!e) {
|
|
99
|
+
this.close();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.container.style.left = `${e.x}px`, this.container.style.top = `${e.y + e.height + 4}px`;
|
|
103
|
+
}
|
|
104
|
+
open(t) {
|
|
105
|
+
const e = this.editor.command, { startIndex: n } = e.getRange();
|
|
106
|
+
this.triggerIndex = n, this.isProgrammatic = t, this.isOpen = !0, this.container || (this.container = document.createElement("div"), this.container.setAttribute(x, O.COMPONENT), this.container.classList.add(c)), e.getContainer().append(this.container), this.renderList(this.filterDataList(""), ""), this.updatePosition(), this.editor.eventBus.on("rangeChange", this.rangeChangeHandler);
|
|
107
|
+
}
|
|
108
|
+
close() {
|
|
109
|
+
var t;
|
|
110
|
+
this.isOpen && (this.isOpen = !1, this.editor.eventBus.off("rangeChange", this.rangeChangeHandler), (t = this.container) == null || t.remove());
|
|
111
|
+
}
|
|
112
|
+
refresh() {
|
|
113
|
+
var a;
|
|
114
|
+
const t = this.editor.command, e = t.getValue().data.main, { startIndex: n } = t.getRange();
|
|
115
|
+
if (((a = e[this.triggerIndex]) == null ? void 0 : a.value) !== this.trigger) {
|
|
116
|
+
this.close();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (n <= this.triggerIndex) {
|
|
120
|
+
this.close();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const i = e.slice(this.triggerIndex + 1, n + 1).map((o) => o.value).join("");
|
|
124
|
+
this.renderList(this.filterDataList(i), i), this.updatePosition();
|
|
125
|
+
}
|
|
126
|
+
select(t) {
|
|
127
|
+
var n, i;
|
|
128
|
+
const e = this.editor.command;
|
|
129
|
+
if (!this.isProgrammatic) {
|
|
130
|
+
const { startIndex: a } = e.getRange();
|
|
131
|
+
e.executeSetRange(this.triggerIndex - 1, a);
|
|
132
|
+
}
|
|
133
|
+
e.executeInsertElementList([
|
|
134
|
+
{
|
|
135
|
+
type: C.LABEL,
|
|
136
|
+
value: `${this.trigger}${t.name}`,
|
|
137
|
+
labelId: t.id,
|
|
138
|
+
label: {
|
|
139
|
+
color: "#347ef2",
|
|
140
|
+
backgroundColor: "#f2f6fc",
|
|
141
|
+
borderRadius: 4,
|
|
142
|
+
...this.options.label
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
]), (i = (n = this.options).onSelect) == null || i.call(n, t), this.close();
|
|
146
|
+
}
|
|
147
|
+
execute(t) {
|
|
148
|
+
this.options = this.mergeOptions(t), this.lang = this.getLang(t), this.trigger = this.options.trigger || u, this.open(!0);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function y(r, t) {
|
|
152
|
+
const e = r.command, n = new I(r, t);
|
|
153
|
+
e.executeMention = (i) => {
|
|
154
|
+
n.execute(i);
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export {
|
|
158
|
+
y as default
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=mention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.js","sources":["../../src/mention/constant/index.ts","../../src/mention/index.ts"],"sourcesContent":[null,null],"names":["PLUGIN_PREFIX","DEFAULT_LOCALE","DEFAULT_TRIGGER","DEFAULT_MAX_COUNT","PLUGIN_LANG_MAP","Mention","editor","defaultOptions","__publicField","evt","range","payload","_b","_a","options","editorLocale","currentLocale","_c","_d","key","_e","dataList","query","max","keyword","item","itemList","empty","itemDom","context","rect","isProgrammatic","command","startIndex","EDITOR_COMPONENT","EditorComponent","elementList","element","ElementType","mentionPlugin","mention"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.id="mention-style",e.appendChild(document.createTextNode(".ce-mention{position:absolute;z-index:9;min-width:120px;max-height:200px;overflow-y:auto;padding:4px 0;background:#ffffff;border-radius:4px;box-shadow:0 2px 12px #38383833;font-size:14px;color:#333}.ce-mention-item{padding:6px 12px;white-space:nowrap;cursor:pointer}.ce-mention-item:hover{background:#f2f6fc}.ce-mention-empty{padding:6px 12px;white-space:nowrap;color:#999}")),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
2
|
+
(function(r,i){typeof exports=="object"&&typeof module<"u"?module.exports=i(require("@hufe921/canvas-editor")):typeof define=="function"&&define.amd?define(["@hufe921/canvas-editor"],i):(r=typeof globalThis<"u"?globalThis:r||self,r.mention=i(r.canvasEditor))})(this,function(r){"use strict";var O=Object.defineProperty;var T=(r,i,c)=>i in r?O(r,i,{enumerable:!0,configurable:!0,writable:!0,value:c}):r[i]=c;var a=(r,i,c)=>(T(r,typeof i!="symbol"?i+"":i,c),c);const i="ce-mention",c="zhCN",d="@",g={zhCN:{emptyText:"无匹配结果",placeholderText:"输入以筛选"},en:{emptyText:"No results",placeholderText:"Type to filter"}},I="";class p{constructor(e,t){a(this,"editor");a(this,"defaultOptions");a(this,"options");a(this,"lang");a(this,"trigger");a(this,"container",null);a(this,"triggerIndex",-1);a(this,"isProgrammatic",!1);a(this,"isOpen",!1);a(this,"inputHandler",e=>{if(!this.isOpen){e.data===this.trigger&&this.open(!1);return}if(this.isProgrammatic){this.updatePosition();return}this.refresh()});a(this,"rangeChangeHandler",e=>{this.isOpen&&e.startIndex<=this.triggerIndex&&this.close()});a(this,"labelMousedownHandler",e=>{var t,n;(n=(t=this.options).onClick)==null||n.call(t,e.element)});this.editor=e,this.defaultOptions=t,this.options=this.mergeOptions(),this.lang=this.getLang(),this.trigger=this.options.trigger||d,e.eventBus.on("input",this.inputHandler),e.eventBus.on("labelMousedown",this.labelMousedownHandler)}mergeOptions(e){var t,n;return{...this.defaultOptions,...e,dataList:(e==null?void 0:e.dataList)??((t=this.defaultOptions)==null?void 0:t.dataList)??[],label:{...(n=this.defaultOptions)==null?void 0:n.label,...e==null?void 0:e.label}}}getLang(e){var o,h,u,m,f;const t=(h=(o=this.editor.command).getOptions)==null?void 0:h.call(o).locale,n=((e==null?void 0:e.locale)||((u=this.defaultOptions)==null?void 0:u.locale)||t||c).toLowerCase().replace(/[-_]/g,"");return{...((m=Object.entries(g).find(([x])=>x.toLowerCase()===n))==null?void 0:m[1])||g[c],...(f=this.defaultOptions)==null?void 0:f.lang,...e==null?void 0:e.lang}}getDataList(){const{dataList:e}=this.options;return typeof e=="function"?e():e||[]}filterDataList(e){const t=this.options.max??5,n=e.toLowerCase();return this.getDataList().filter(s=>s.name.toLowerCase().includes(n)).slice(0,t)}renderList(e,t){if(this.container){if(this.container.innerHTML="",!e.length){const n=document.createElement("div");n.classList.add(`${i}-empty`),n.innerText=t?this.lang.emptyText:this.lang.placeholderText,this.container.append(n);return}e.forEach(n=>{const s=document.createElement("div");s.classList.add(`${i}-item`),s.innerText=n.name,s.onmousedown=o=>{o.preventDefault(),this.select(n)},this.container.append(s)})}}updatePosition(){var n;if(!this.container)return;const e=this.editor.command.getRangeContext(),t=(n=e==null?void 0:e.rangeRects)==null?void 0:n[0];if(!t){this.close();return}this.container.style.left=`${t.x}px`,this.container.style.top=`${t.y+t.height+4}px`}open(e){const t=this.editor.command,{startIndex:n}=t.getRange();this.triggerIndex=n,this.isProgrammatic=e,this.isOpen=!0,this.container||(this.container=document.createElement("div"),this.container.setAttribute(r.EDITOR_COMPONENT,r.EditorComponent.COMPONENT),this.container.classList.add(i)),t.getContainer().append(this.container),this.renderList(this.filterDataList(""),""),this.updatePosition(),this.editor.eventBus.on("rangeChange",this.rangeChangeHandler)}close(){var e;this.isOpen&&(this.isOpen=!1,this.editor.eventBus.off("rangeChange",this.rangeChangeHandler),(e=this.container)==null||e.remove())}refresh(){var o;const e=this.editor.command,t=e.getValue().data.main,{startIndex:n}=e.getRange();if(((o=t[this.triggerIndex])==null?void 0:o.value)!==this.trigger){this.close();return}if(n<=this.triggerIndex){this.close();return}const s=t.slice(this.triggerIndex+1,n+1).map(h=>h.value).join("");this.renderList(this.filterDataList(s),s),this.updatePosition()}select(e){var n,s;const t=this.editor.command;if(!this.isProgrammatic){const{startIndex:o}=t.getRange();t.executeSetRange(this.triggerIndex-1,o)}t.executeInsertElementList([{type:r.ElementType.LABEL,value:`${this.trigger}${e.name}`,labelId:e.id,label:{color:"#347ef2",backgroundColor:"#f2f6fc",borderRadius:4,...this.options.label}}]),(s=(n=this.options).onSelect)==null||s.call(n,e),this.close()}execute(e){this.options=this.mergeOptions(e),this.lang=this.getLang(e),this.trigger=this.options.trigger||d,this.open(!0)}}function L(l,e){const t=l.command,n=new p(l,e);t.executeMention=s=>{n.execute(s)}}return L});
|
|
3
|
+
//# sourceMappingURL=mention.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.umd.cjs","sources":["../../src/mention/constant/index.ts","../../src/mention/index.ts"],"sourcesContent":[null,null],"names":["PLUGIN_PREFIX","DEFAULT_LOCALE","DEFAULT_TRIGGER","PLUGIN_LANG_MAP","Mention","editor","defaultOptions","__publicField","evt","range","payload","_b","_a","options","editorLocale","currentLocale","_c","_d","key","_e","dataList","query","max","keyword","item","itemList","empty","itemDom","context","rect","isProgrammatic","command","startIndex","EDITOR_COMPONENT","EditorComponent","elementList","element","ElementType","mentionPlugin","mention"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IMentionLang } from '../interface';
|
|
2
|
+
export declare const PLUGIN_PREFIX = "ce-mention";
|
|
3
|
+
export declare const DEFAULT_LOCALE = "zhCN";
|
|
4
|
+
export declare const DEFAULT_TRIGGER = "@";
|
|
5
|
+
export declare const DEFAULT_MAX_COUNT = 5;
|
|
6
|
+
export declare const PLUGIN_LANG_MAP: Record<string, IMentionLang>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Editor } from '@hufe921/canvas-editor';
|
|
2
|
+
import type { IMentionOptions } from './interface';
|
|
3
|
+
import './style';
|
|
4
|
+
declare module '@hufe921/canvas-editor' {
|
|
5
|
+
interface Command {
|
|
6
|
+
executeMention(options?: IMentionOptions): void;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default function mentionPlugin(editor: Editor, defaultOptions?: IMentionOptions): void;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IElement } from '@hufe921/canvas-editor';
|
|
2
|
+
export interface IMentionItem {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
export type IMentionPadding = [number, number, number, number];
|
|
8
|
+
export interface IMentionLabelStyle {
|
|
9
|
+
color?: string;
|
|
10
|
+
backgroundColor?: string;
|
|
11
|
+
borderRadius?: number;
|
|
12
|
+
padding?: IMentionPadding;
|
|
13
|
+
}
|
|
14
|
+
export interface IMentionLang {
|
|
15
|
+
emptyText: string;
|
|
16
|
+
placeholderText: string;
|
|
17
|
+
}
|
|
18
|
+
export interface IMentionOptions {
|
|
19
|
+
trigger?: string;
|
|
20
|
+
dataList: IMentionItem[] | (() => IMentionItem[]);
|
|
21
|
+
onSelect?: (item: IMentionItem) => void;
|
|
22
|
+
onClick?: (element: IElement) => void;
|
|
23
|
+
label?: IMentionLabelStyle;
|
|
24
|
+
max?: number;
|
|
25
|
+
locale?: string;
|
|
26
|
+
lang?: Partial<IMentionLang>;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './index.scss';
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hufe921/canvas-editor-plugin-mention",
|
|
3
|
+
"author": "Hufe",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"version": "0.0.1",
|
|
6
|
+
"description": "mention plugin for canvas-editor",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"registry": "https://registry.npmjs.org/",
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE",
|
|
16
|
+
"package.json"
|
|
17
|
+
],
|
|
18
|
+
"typings": "./dist/src/mention/index.d.ts",
|
|
19
|
+
"main": "./dist/mention.umd.cjs",
|
|
20
|
+
"module": "./dist/mention.js",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/Hufe921/canvas-editor-plugin.git"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"canvas-editor",
|
|
27
|
+
"mention"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"dev": "vite",
|
|
31
|
+
"build": "vite build --mode lib",
|
|
32
|
+
"type:check": "tsc --noEmit"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@hufe921/canvas-editor": ">=1.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@hufe921/canvas-editor": "1.0.2",
|
|
39
|
+
"@rollup/plugin-typescript": "^10.0.1",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "4.33.0",
|
|
41
|
+
"@typescript-eslint/parser": "4.33.0",
|
|
42
|
+
"eslint": "7.32.0",
|
|
43
|
+
"sass": "^1.97.3",
|
|
44
|
+
"simple-git-hooks": "^2.8.1",
|
|
45
|
+
"typescript": "^5.0.2",
|
|
46
|
+
"vite": "^4.3.9",
|
|
47
|
+
"vite-plugin-css-injected-by-js": "^3.3.0"
|
|
48
|
+
}
|
|
49
|
+
}
|