@kungal/editor-vue 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @kungal/editor-vue
2
2
 
3
+ ## 0.29.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 8609e53: Add an `insertImage({ src })` primitive so hosts can build a rich image dialog.
8
+
9
+ The editor already had `uploadImage(file)` (adapter-backed, in-document
10
+ "uploading…" placeholder). The missing piece for a custom image dialog — insert by
11
+ URL, or re-insert from an upload history — was a way to insert an image from a
12
+ ready URL. Added:
13
+
14
+ - `KunEditorToolbarApi.insertImage({ src, alt?, title? })` — for a dialog dropped
15
+ into the `#toolbar` slot.
16
+ - `KunEditorExpose.insertImage(...)` and `KunEditorExpose.uploadImage(file)` — the
17
+ same two, on the `<KunEditor>` template ref, to drive image insertion from
18
+ anywhere.
19
+
20
+ The dialog UI (KunPopover, drag-drop, "recent" history) stays entirely the host's,
21
+ matching the headless design and how TipTap/ProseMirror split this
22
+ (`setImage(url)` command + host-provided upload UI). Drop the built-in image
23
+ button with `:items` and render your own next to `<KunEditorToolbar>`.
24
+
25
+ Verified in a new docs example (`/examples/image-dialog`): a host dialog inserts
26
+ by URL (`api.insertImage`), uploads one or many picked files via the host's own
27
+ uploader then inserts each, keeps a "recent" history, and re-inserts on click; the
28
+ built-in image button is dropped via `:items`; 0 console errors.
29
+
30
+ ### Patch Changes
31
+
32
+ - @kungal/editor-core@0.29.0
33
+
3
34
  ## 0.28.0
4
35
 
5
36
  ### Minor Changes
@@ -56,6 +56,11 @@ declare var __VLS_1: {
56
56
  run: <T>(key: import("@milkdown/kit/core").CmdKey<T>, payload?: T) => void;
57
57
  insertText: (text: string) => void;
58
58
  uploadImage: (file: File) => void;
59
+ insertImage: (payload: {
60
+ src: string;
61
+ alt?: string;
62
+ title?: string;
63
+ }) => void;
59
64
  insertLink: (payload: {
60
65
  href: string;
61
66
  text?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"KunEditor.vue.d.ts","sourceRoot":"","sources":["../../src/components/KunEditor.vue"],"names":[],"mappings":"AAgYA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACX,MAAM,qBAAqB,CAAA;AAO5B,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAUjE,KAAK,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE9C,KAAK,WAAW,GAAG;IACf,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,qDAAqD;IACrD,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,KAAK,GAAG,OAAO,CAAA;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB;oEACgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAA;CAChD,CAAC;AAwbJ,QAAA,IAAI,OAAO;;iBApXS,QAAQ;;;;;;;;;;;;;CAoXP,EAAE,QAAQ;iEAtf/B,CAjWE;;;;;YAiWF,CA7UiC;;;;;;;;;;;;;;CAm0BoD,CAAE;AACvF,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GAClD;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAShD,QAAA,MAAM,UAAU;;;;;;;cAneD,iBAAiB;cAEjB,iBAAiB;YAEnB,eAAe;cAEb,OAAO;iBAEJ,MAAM;qBAMF,KAAK,GAAG,OAAO;sBAgBd,OAAO,GAAG,gBAAgB,EAAE;WAVvC,QAAQ,EAAE;gBAGL,OAAO;6EAidtB,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"KunEditor.vue.d.ts","sourceRoot":"","sources":["../../src/components/KunEditor.vue"],"names":[],"mappings":"AAkYA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACX,MAAM,qBAAqB,CAAA;AAO5B,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAUjE,KAAK,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE9C,KAAK,WAAW,GAAG;IACf,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,qDAAqD;IACrD,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,KAAK,GAAG,OAAO,CAAA;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB;oEACgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAA;CAChD,CAAC;AA0bJ,QAAA,IAAI,OAAO;;iBAtXS,QAAQ;;;;;;;;;;;;;CAsXP,EAAE,QAAQ;iEAxf/B,CAnWE;;;;;WAmWF,CA5UQ;aA4UR,CA5UwB;;;;YA4UxB,CAxUkD;;;;;;;;;;;;;;CAg0BmC,CAAE;AACvF,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GAClD;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAShD,QAAA,MAAM,UAAU;;;;;;;cAreD,iBAAiB;cAEjB,iBAAiB;YAEnB,eAAe;cAEb,OAAO;iBAEJ,MAAM;qBAMF,KAAK,GAAG,OAAO;sBAgBd,OAAO,GAAG,gBAAgB,EAAE;WAVvC,QAAQ,EAAE;gBAGL,OAAO;6EAmdtB,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MilkdownEditor.vue.d.ts","sourceRoot":"","sources":["../../src/components/MilkdownEditor.vue"],"names":[],"mappings":"AA0QA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAI5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,KAAK,GAAG,OAAO,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB,CAAC;AAiNF,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"MilkdownEditor.vue.d.ts","sourceRoot":"","sources":["../../src/components/MilkdownEditor.vue"],"names":[],"mappings":"AAwSA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAI5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,KAAK,GAAG,OAAO,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB,CAAC;AA2OF,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -3,6 +3,11 @@ declare var __VLS_1: {
3
3
  run: <T>(key: CmdKey<T>, payload?: T) => void;
4
4
  insertText: (text: string) => void;
5
5
  uploadImage: (file: File) => void;
6
+ insertImage: (payload: {
7
+ src: string;
8
+ alt?: string;
9
+ title?: string;
10
+ }) => void;
6
11
  insertLink: (payload: {
7
12
  href: string;
8
13
  text?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarHost.vue.d.ts","sourceRoot":"","sources":["../../src/components/ToolbarHost.vue"],"names":[],"mappings":"AA+FA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AA6FhD,QAAA,IAAI,OAAO;oCA9FX,CA1DqB;;;;;YA0DrB,CAvC2C;;;;;;;;;;;;;;CAqIrB,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAG/C,QAAA,MAAM,UAAU,+QACd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"ToolbarHost.vue.d.ts","sourceRoot":"","sources":["../../src/components/ToolbarHost.vue"],"names":[],"mappings":"AAyGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAuGhD,QAAA,IAAI,OAAO;oCAxGX,CAvEmB;;;;;WAuEnB,CA9CE;aA8CF,CA9CkB;;;;YA8ClB,CAtCc;;;;;;;;;;;;;;CA8IQ,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAG/C,QAAA,MAAM,UAAU,+QACd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
package/dist/index.js CHANGED
@@ -2,14 +2,14 @@ import { Fragment as e, computed as t, createBlock as n, createCommentVNode as r
2
2
  import { Milkdown as E, MilkdownProvider as D, useEditor as O, useInstance as k } from "@milkdown/vue";
3
3
  import { ProsemirrorAdapterProvider as A, usePluginViewContext as j, usePluginViewFactory as M } from "@prosemirror-adapter/vue";
4
4
  import { parseHeadings as N, parseHeadings as ee } from "@kungal/editor-core";
5
- import { Editor as P, defaultValueCtx as F, editorViewCtx as I, editorViewOptionsCtx as L, rootCtx as R } from "@milkdown/kit/core";
6
- import { listenerCtx as z } from "@milkdown/kit/plugin/listener";
7
- import { SlashProvider as B, slashFactory as V } from "@milkdown/kit/plugin/slash";
8
- import { TooltipProvider as H, tooltipFactory as U } from "@milkdown/kit/plugin/tooltip";
9
- import { callCommand as W, replaceAll as te } from "@milkdown/kit/utils";
10
- import { TextSelection as G } from "@milkdown/kit/prose/state";
11
- import { createKunEditorPlugins as K, insertKunSpoilerCommand as q, insertLinkCommand as J, insertMentionCommand as ne, insertQuoteCommand as re, kunCM as ie, mentionId as ae, setHeadingCommand as oe, startImageUpload as se } from "@kungal/editor-core/preset";
12
- import { createCodeBlockCommand as ce, insertHrCommand as le, insertImageCommand as ue, toggleEmphasisCommand as de, toggleInlineCodeCommand as fe, toggleStrongCommand as pe, wrapInBlockquoteCommand as me, wrapInBulletListCommand as he, wrapInOrderedListCommand as ge } from "@milkdown/kit/preset/commonmark";
5
+ import { Editor as P, defaultValueCtx as F, editorViewCtx as I, editorViewOptionsCtx as te, rootCtx as L } from "@milkdown/kit/core";
6
+ import { listenerCtx as R } from "@milkdown/kit/plugin/listener";
7
+ import { SlashProvider as z, slashFactory as B } from "@milkdown/kit/plugin/slash";
8
+ import { TooltipProvider as V, tooltipFactory as H } from "@milkdown/kit/plugin/tooltip";
9
+ import { callCommand as U, replaceAll as ne } from "@milkdown/kit/utils";
10
+ import { TextSelection as W } from "@milkdown/kit/prose/state";
11
+ import { createCodeBlockCommand as G, insertHrCommand as K, insertImageCommand as q, toggleEmphasisCommand as re, toggleInlineCodeCommand as ie, toggleStrongCommand as ae, wrapInBlockquoteCommand as oe, wrapInBulletListCommand as se, wrapInOrderedListCommand as ce } from "@milkdown/kit/preset/commonmark";
12
+ import { createKunEditorPlugins as le, insertKunSpoilerCommand as ue, insertLinkCommand as J, insertMentionCommand as de, insertQuoteCommand as fe, kunCM as pe, mentionId as me, setHeadingCommand as he, startImageUpload as ge } from "@kungal/editor-core/preset";
13
13
  import { toggleStrikethroughCommand as _e } from "@milkdown/kit/preset/gfm";
14
14
  import { Annotation as ve, EditorState as ye } from "@codemirror/state";
15
15
  import { EditorView as Y } from "@codemirror/view";
@@ -75,13 +75,13 @@ var X = Symbol("kun-editor-context"), Se = [
75
75
  }, F = (e) => {
76
76
  let t = d.value;
77
77
  if (!t || !O) return;
78
- let n = t.state.schema.nodes[ae];
78
+ let n = t.state.schema.nodes[me];
79
79
  if (!n) return;
80
80
  let r = n.create({
81
81
  userId: e.id,
82
82
  name: e.name
83
83
  }), { from: i, to: a } = O, o = t.state.tr.replaceWith(i, a, r), s = i + r.nodeSize;
84
- o.insertText(" ", s), o.setSelection(G.create(o.doc, s + 1)), t.dispatch(o.scrollIntoView()), t.focus(), b.hide();
84
+ o.insertText(" ", s), o.setSelection(W.create(o.doc, s + 1)), t.dispatch(o.scrollIntoView()), t.focus(), b.hide();
85
85
  }, I = (e) => {
86
86
  if (!x.value || !w.value.length) {
87
87
  x.value && e.key === "Escape" && (e.preventDefault(), b.hide());
@@ -107,7 +107,7 @@ var X = Symbol("kun-editor-context"), Se = [
107
107
  }
108
108
  };
109
109
  return p(() => {
110
- b = new B({
110
+ b = new z({
111
111
  content: v.value,
112
112
  trigger: "@",
113
113
  shouldShow: P,
@@ -170,7 +170,7 @@ var X = Symbol("kun-editor-context"), Se = [
170
170
  __name: "SelectionTooltip",
171
171
  setup(n) {
172
172
  let { view: r, prevState: o } = j(), [, s] = k(), c = l(X), u = t(() => (c?.locale ?? "zh-cn").toLowerCase().startsWith("en")), d = g(null), h, v = (e, t) => {
173
- s()?.action(W(e, t));
173
+ s()?.action(U(e, t));
174
174
  }, y = async () => {
175
175
  let e = r.value, { from: t, to: n } = e?.state.selection ?? {
176
176
  from: 0,
@@ -183,12 +183,12 @@ var X = Symbol("kun-editor-context"), Se = [
183
183
  bold: {
184
184
  svg: $.bold,
185
185
  title: e ? "Bold" : "加粗",
186
- run: () => v(pe.key)
186
+ run: () => v(ae.key)
187
187
  },
188
188
  italic: {
189
189
  svg: $.italic,
190
190
  title: e ? "Italic" : "斜体",
191
- run: () => v(de.key)
191
+ run: () => v(re.key)
192
192
  },
193
193
  strike: {
194
194
  svg: $.strike,
@@ -198,7 +198,7 @@ var X = Symbol("kun-editor-context"), Se = [
198
198
  code: {
199
199
  svg: $.code,
200
200
  title: e ? "Inline code" : "行内代码",
201
- run: () => v(fe.key)
201
+ run: () => v(ie.key)
202
202
  },
203
203
  link: {
204
204
  svg: $.link,
@@ -222,7 +222,7 @@ var X = Symbol("kun-editor-context"), Se = [
222
222
  return n;
223
223
  });
224
224
  return p(() => {
225
- h = new H({
225
+ h = new V({
226
226
  content: d.value,
227
227
  offset: 8
228
228
  }), h.update(r.value, o.value);
@@ -262,15 +262,15 @@ var X = Symbol("kun-editor-context"), Se = [
262
262
  },
263
263
  emits: ["update:modelValue"],
264
264
  setup(e, { expose: t, emit: r }) {
265
- let i = e, a = r, o = i.modelValue, s = !1, c = M(), l = V("kunMention"), u = i.features.mention !== !1 && !!i.adapters.searchMentionUsers && !!c, d = U("kunSelectionTooltip"), f = i.selectionToolbar && !!c, p = O((e) => {
265
+ let i = e, a = r, o = i.modelValue, s = !1, c = M(), l = B("kunMention"), u = i.features.mention !== !1 && !!i.adapters.searchMentionUsers && !!c, d = H("kunSelectionTooltip"), f = i.selectionToolbar && !!c, p = O((e) => {
266
266
  let t = P.make().config((t) => {
267
- t.set(R, e), t.set(F, i.modelValue), t.get(z).markdownUpdated((e, t, n) => {
267
+ t.set(L, e), t.set(F, i.modelValue), t.get(R).markdownUpdated((e, t, n) => {
268
268
  !i.active || s || t === n || (o = t, a("update:modelValue", t));
269
- }), t.update(L, (e) => ({
269
+ }), t.update(te, (e) => ({
270
270
  ...e,
271
271
  editable: () => !i.readonly
272
272
  })), u && t.set(l.key, { view: c({ component: ke }) }), f && t.set(d.key, { view: c({ component: Ne }) });
273
- }).use(K(i.adapters, i.features, {
273
+ }).use(le(i.adapters, i.features, {
274
274
  locale: i.locale,
275
275
  placeholder: i.placeholder,
276
276
  placeholderMode: i.placeholderMode
@@ -281,7 +281,7 @@ var X = Symbol("kun-editor-context"), Se = [
281
281
  if (e === o) return;
282
282
  o = e;
283
283
  let t = p.get();
284
- t && (s = !0, t.action(te(e)), s = !1);
284
+ t && (s = !0, t.action(ne(e)), s = !1);
285
285
  }), S(() => i.readonly, () => {
286
286
  p.get()?.action((e) => {
287
287
  let t = e.get(I);
@@ -293,10 +293,27 @@ var X = Symbol("kun-editor-context"), Se = [
293
293
  };
294
294
  return t({
295
295
  insertQuote: (e) => {
296
- p.get()?.action(W(re.key, e)), h();
296
+ p.get()?.action(U(fe.key, e)), h();
297
297
  },
298
298
  insertMention: (e) => {
299
- p.get()?.action(W(ne.key, e)), h();
299
+ p.get()?.action(U(de.key, e)), h();
300
+ },
301
+ insertImage: (e) => {
302
+ p.get()?.action(U(q.key, {
303
+ src: e.src,
304
+ alt: e.alt ?? "",
305
+ title: e.title ?? ""
306
+ })), h();
307
+ },
308
+ uploadImage: (e) => {
309
+ let t = i.adapters.uploadImage, n = p.get();
310
+ !t || !n || n.action((n) => {
311
+ ge(n.get(I), e, {
312
+ uploadImage: t,
313
+ notify: i.adapters.notify,
314
+ locale: i.locale
315
+ });
316
+ });
300
317
  },
301
318
  focus: h,
302
319
  scrollToHeading: (e) => {
@@ -308,7 +325,7 @@ var X = Symbol("kun-editor-context"), Se = [
308
325
  behavior: "smooth",
309
326
  block: "start"
310
327
  }), n.editable)) {
311
- let e = G.near(n.state.doc.resolve(i + 1));
328
+ let e = W.near(n.state.doc.resolve(i + 1));
312
329
  n.dispatch(n.state.tr.setSelection(e)), n.focus();
313
330
  }
314
331
  });
@@ -365,7 +382,7 @@ var X = Symbol("kun-editor-context"), Se = [
365
382
  n.dispatch(r.tr.insertText(e, r.selection.from));
366
383
  });
367
384
  }, N = (e, t) => {
368
- o()?.action(W(ue.key, {
385
+ o()?.action(U(q.key, {
369
386
  src: e,
370
387
  title: t,
371
388
  alt: t
@@ -434,7 +451,7 @@ var X = Symbol("kun-editor-context"), Se = [
434
451
  __name: "EditorToolbar",
435
452
  setup(n) {
436
453
  let [, s] = k(), c = l(X), u = t(() => c?.adapters.uploadImage), d = t(() => c?.features.sticker !== !1), f = t(() => (c?.locale ?? "zh-cn").toLowerCase().startsWith("en")), p = (e, t) => {
437
- s()?.action(W(e, t));
454
+ s()?.action(U(e, t));
438
455
  }, h = async () => {
439
456
  let e = "";
440
457
  s()?.action((t) => {
@@ -476,18 +493,18 @@ var X = Symbol("kun-editor-context"), Se = [
476
493
  }));
477
494
  }), S = (e) => {
478
495
  let t = e.target;
479
- p(oe.key, Number(t.value)), t.selectedIndex = 0;
496
+ p(he.key, Number(t.value)), t.selectedIndex = 0;
480
497
  }, C = t(() => [
481
498
  [
482
499
  {
483
500
  svg: $.bold,
484
501
  title: v.value.bold,
485
- run: () => p(pe.key)
502
+ run: () => p(ae.key)
486
503
  },
487
504
  {
488
505
  svg: $.italic,
489
506
  title: v.value.italic,
490
- run: () => p(de.key)
507
+ run: () => p(re.key)
491
508
  },
492
509
  {
493
510
  svg: $.strike,
@@ -497,7 +514,7 @@ var X = Symbol("kun-editor-context"), Se = [
497
514
  {
498
515
  svg: $.code,
499
516
  title: v.value.code,
500
- run: () => p(fe.key)
517
+ run: () => p(ie.key)
501
518
  },
502
519
  {
503
520
  svg: $.link,
@@ -509,40 +526,40 @@ var X = Symbol("kun-editor-context"), Se = [
509
526
  {
510
527
  svg: $.bulletList,
511
528
  title: v.value.bulletList,
512
- run: () => p(he.key)
529
+ run: () => p(se.key)
513
530
  },
514
531
  {
515
532
  svg: $.orderedList,
516
533
  title: v.value.orderedList,
517
- run: () => p(ge.key)
534
+ run: () => p(ce.key)
518
535
  },
519
536
  {
520
537
  svg: $.quote,
521
538
  title: v.value.quote,
522
- run: () => p(me.key)
539
+ run: () => p(oe.key)
523
540
  },
524
541
  {
525
542
  svg: $.codeBlock,
526
543
  title: v.value.codeBlock,
527
- run: () => p(ce.key, "")
544
+ run: () => p(G.key, "")
528
545
  },
529
546
  {
530
547
  svg: $.hr,
531
548
  title: v.value.hr,
532
- run: () => p(le.key)
549
+ run: () => p(K.key)
533
550
  }
534
551
  ],
535
552
  [{
536
553
  svg: $.spoiler,
537
554
  title: v.value.spoiler,
538
- run: () => p(q.key)
555
+ run: () => p(ue.key)
539
556
  }]
540
557
  ]), w = g(null), T = () => w.value?.click(), E = (e) => {
541
558
  let t = e.target, n = t.files?.[0];
542
559
  t.value = "";
543
560
  let r = u.value;
544
561
  !n || !r || s()?.action((e) => {
545
- se(e.get(I), n, {
562
+ ge(e.get(I), n, {
546
563
  uploadImage: r,
547
564
  notify: c?.adapters.notify,
548
565
  locale: c?.locale
@@ -606,7 +623,7 @@ var X = Symbol("kun-editor-context"), Se = [
606
623
  __name: "ToolbarHost",
607
624
  setup(e) {
608
625
  let [, t] = k(), n = l(X, void 0), r = (e, n) => {
609
- t()?.action(W(e, n));
626
+ t()?.action(U(e, n));
610
627
  }, i = () => {
611
628
  t()?.action((e) => e.get(I).focus());
612
629
  }, a = {
@@ -620,7 +637,7 @@ var X = Symbol("kun-editor-context"), Se = [
620
637
  uploadImage: (e) => {
621
638
  let r = n?.adapters.uploadImage, i = t();
622
639
  !r || !i || i.action((t) => {
623
- se(t.get(I), e, {
640
+ ge(t.get(I), e, {
624
641
  uploadImage: r,
625
642
  notify: n?.adapters.notify,
626
643
  locale: n?.locale
@@ -630,11 +647,18 @@ var X = Symbol("kun-editor-context"), Se = [
630
647
  insertLink: (e) => {
631
648
  r(J.key, e), i();
632
649
  },
650
+ insertImage: (e) => {
651
+ r(q.key, {
652
+ src: e.src,
653
+ alt: e.alt ?? "",
654
+ title: e.title ?? ""
655
+ }), i();
656
+ },
633
657
  insertQuote: (e) => {
634
- r(re.key, e), i();
658
+ r(fe.key, e), i();
635
659
  },
636
660
  insertMention: (e) => {
637
- r(ne.key, e), i();
661
+ r(de.key, e), i();
638
662
  },
639
663
  focus: i,
640
664
  get adapters() {
@@ -660,7 +684,7 @@ var X = Symbol("kun-editor-context"), Se = [
660
684
  let r = e, a = n, o = g(null), s = null, c = ve.define(), l = (e) => ye.create({
661
685
  doc: e,
662
686
  extensions: [
663
- ie(),
687
+ pe(),
664
688
  Y.lineWrapping,
665
689
  xe,
666
690
  be(),
@@ -797,7 +821,7 @@ var X = Symbol("kun-editor-context"), Se = [
797
821
  });
798
822
  let I = () => {
799
823
  F.value = !F.value;
800
- }, L = t(() => E.locale.toLowerCase().startsWith("en")), R = t(() => L.value ? {
824
+ }, te = t(() => E.locale.toLowerCase().startsWith("en")), L = t(() => te.value ? {
801
825
  wysiwyg: "Preview",
802
826
  source: "Markdown",
803
827
  split: "Split",
@@ -809,47 +833,49 @@ var X = Symbol("kun-editor-context"), Se = [
809
833
  split: "分栏",
810
834
  swap: "左右互换",
811
835
  scrollSync: "同步滚动"
812
- }), z = g(null), B = null, V = null, H = null, U = () => {
813
- B?.(), B = null, V = null;
814
- }, W = () => {
815
- U();
816
- let e = z.value;
836
+ }), R = g(null), z = null, B = null, V = null, H = () => {
837
+ z?.(), z = null, B = null;
838
+ }, U = () => {
839
+ H();
840
+ let e = R.value;
817
841
  if (!e) return;
818
842
  let t = e.querySelector(".cm-scroller"), n = e.querySelector(".kun-editor__wysiwyg");
819
843
  if (!t || !n) return;
820
844
  let r = (e, t) => () => {
821
- if (V && V !== e) return;
822
- V = e;
845
+ if (B && B !== e) return;
846
+ B = e;
823
847
  let n = e.scrollHeight - e.clientHeight, r = n > 0 ? e.scrollTop / n : 0, i = t.scrollHeight - t.clientHeight;
824
- t.scrollTop = r * (i > 0 ? i : 0), H && clearTimeout(H), H = setTimeout(() => {
825
- V = null;
848
+ t.scrollTop = r * (i > 0 ? i : 0), V && clearTimeout(V), V = setTimeout(() => {
849
+ B = null;
826
850
  }, 120);
827
851
  }, i = r(t, n), a = r(n, t);
828
- t.addEventListener("scroll", i, { passive: !0 }), n.addEventListener("scroll", a, { passive: !0 }), B = () => {
852
+ t.addEventListener("scroll", i, { passive: !0 }), n.addEventListener("scroll", a, { passive: !0 }), z = () => {
829
853
  t.removeEventListener("scroll", i), n.removeEventListener("scroll", a);
830
854
  };
831
855
  };
832
856
  S([j, F], ([e, t]) => {
833
- U(), e === "split" && t && u(W);
834
- }), f(U);
835
- let te = t(() => E.readonly || j.value === "split"), G = (e) => O("update:modelValue", e), K = g(null), q = g(null);
857
+ H(), e === "split" && t && u(U);
858
+ }), f(H);
859
+ let ne = t(() => E.readonly || j.value === "split"), W = (e) => O("update:modelValue", e), G = g(null), K = g(null);
836
860
  return l({
837
- insertQuote: (e) => K.value?.insertQuote(e),
838
- insertMention: (e) => K.value?.insertMention(e),
839
- focus: () => K.value?.focus(),
861
+ insertQuote: (e) => G.value?.insertQuote(e),
862
+ insertMention: (e) => G.value?.insertMention(e),
863
+ insertImage: (e) => G.value?.insertImage(e),
864
+ uploadImage: (e) => G.value?.uploadImage(e),
865
+ focus: () => G.value?.focus(),
840
866
  scrollToHeading: (e) => {
841
- j.value === "source" || j.value === "split" ? q.value?.scrollToHeading(e) : K.value?.scrollToHeading(e);
867
+ j.value === "source" || j.value === "split" ? K.value?.scrollToHeading(e) : G.value?.scrollToHeading(e);
842
868
  }
843
869
  }), (t, l) => (m(), i("div", {
844
870
  ref_key: "rootEl",
845
- ref: z,
871
+ ref: R,
846
872
  class: "kun-editor",
847
873
  "data-kun-editor": "",
848
874
  "data-mode": j.value
849
875
  }, [v(t.$slots, "view-switch", {
850
876
  mode: j.value,
851
877
  setMode: M,
852
- labels: R.value,
878
+ labels: L.value,
853
879
  views: s.views,
854
880
  swapped: N.value,
855
881
  swap: P,
@@ -862,20 +888,20 @@ var X = Symbol("kun-editor-context"), Se = [
862
888
  "aria-selected": j.value === e,
863
889
  "data-active": j.value === e,
864
890
  onClick: (t) => M(e)
865
- }, y(R.value[e]), 9, ut))), 128)), j.value === "split" ? (m(), i(e, { key: 0 }, [a("button", {
891
+ }, y(L.value[e]), 9, ut))), 128)), j.value === "split" ? (m(), i(e, { key: 0 }, [a("button", {
866
892
  type: "button",
867
893
  class: "kun-editor__tab kun-editor__swap",
868
- title: R.value.swap,
869
- "aria-label": R.value.swap,
894
+ title: L.value.swap,
895
+ "aria-label": L.value.swap,
870
896
  onClick: l[0] ||= (e) => P()
871
897
  }, " ⇄ ", 8, dt), a("button", {
872
898
  type: "button",
873
899
  class: "kun-editor__tab",
874
900
  "data-active": F.value,
875
- title: R.value.scrollSync,
901
+ title: L.value.scrollSync,
876
902
  "aria-pressed": F.value,
877
903
  onClick: l[1] ||= (e) => I()
878
- }, y(R.value.scrollSync), 9, ft)], 64)) : r("", !0)])) : r("", !0)]), o(b(D), null, {
904
+ }, y(L.value.scrollSync), 9, ft)], 64)) : r("", !0)])) : r("", !0)]), o(b(D), null, {
879
905
  default: C(() => [o(b(A), null, {
880
906
  default: C(() => [w(a("div", null, [o(ot, null, {
881
907
  default: C((e) => [v(t.$slots, "toolbar", d(c(e)), () => [o(at)])]),
@@ -886,24 +912,24 @@ var X = Symbol("kun-editor-context"), Se = [
886
912
  }, [j.value === "source" || j.value === "split" ? (m(), n(st, {
887
913
  key: 0,
888
914
  ref_key: "source",
889
- ref: q,
915
+ ref: K,
890
916
  class: "kun-editor__pane",
891
917
  "model-value": s.modelValue,
892
918
  readonly: s.readonly,
893
- "onUpdate:modelValue": G
919
+ "onUpdate:modelValue": W
894
920
  }, null, 8, ["model-value", "readonly"])) : r("", !0), w(a("div", mt, [o(Pe, {
895
921
  ref_key: "inner",
896
- ref: K,
922
+ ref: G,
897
923
  "model-value": s.modelValue,
898
924
  adapters: s.adapters,
899
925
  features: s.features,
900
926
  locale: s.locale,
901
- readonly: te.value,
927
+ readonly: ne.value,
902
928
  placeholder: s.placeholder,
903
929
  "placeholder-mode": s.placeholderMode,
904
930
  active: j.value === "wysiwyg" && !s.readonly,
905
931
  "selection-toolbar": k.value,
906
- "onUpdate:modelValue": G
932
+ "onUpdate:modelValue": W
907
933
  }, null, 8, [
908
934
  "model-value",
909
935
  "adapters",
package/dist/types.d.ts CHANGED
@@ -13,6 +13,16 @@ export interface KunEditorToolbarApi {
13
13
  * removing it + notifying on failure. No-op without an `uploadImage` adapter.
14
14
  */
15
15
  uploadImage: (file: File) => void;
16
+ /**
17
+ * Insert an image node at the cursor from a ready URL — for a host-built image
18
+ * dialog (paste a URL, or re-insert from an upload history). For the upload path
19
+ * use `uploadImage`, or call your own upload adapter then this.
20
+ */
21
+ insertImage: (payload: {
22
+ src: string;
23
+ alt?: string;
24
+ title?: string;
25
+ }) => void;
16
26
  /**
17
27
  * Apply a link to the selection, or (empty selection) insert linked text.
18
28
  * `text` defaults to the href. Standard markdown `[text](href)`.
@@ -81,6 +91,17 @@ export interface KunEditorExpose {
81
91
  userId: number;
82
92
  name: string;
83
93
  }): void;
94
+ /** Insert an image at the cursor from a ready URL (a host-built image dialog). */
95
+ insertImage(payload: {
96
+ src: string;
97
+ alt?: string;
98
+ title?: string;
99
+ }): void;
100
+ /**
101
+ * Upload an image File via the `uploadImage` adapter (in-document "uploading…"
102
+ * placeholder, then the image). No-op without the adapter.
103
+ */
104
+ uploadImage(file: File): void;
84
105
  /** Focus the WYSIWYG editor. */
85
106
  focus(): void;
86
107
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungal/editor-vue",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "description": "KunEditor Vue 3 layer — the headless <KunEditor> component (dual WYSIWYG / markdown-source), toolbar and plugin views. Ships zero CSS and no UI-kit dependency; consumes @kungal/editor-core, and pairs with @kungal/editor-nuxt for optional KunUI chrome.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@prosemirror-adapter/vue": "^0.4.6",
43
- "@kungal/editor-core": "0.28.0"
43
+ "@kungal/editor-core": "0.29.0"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@codemirror/lang-markdown": "^6.0.0",
@@ -80,7 +80,7 @@
80
80
  "vite": "^8.0.16",
81
81
  "vue": "^3.5.35",
82
82
  "vue-tsc": "^3.3.3",
83
- "@kungal/editor-core": "0.28.0"
83
+ "@kungal/editor-core": "0.29.0"
84
84
  },
85
85
  "scripts": {
86
86
  "build": "vite build && vue-tsc -p tsconfig.build.json",