@kungal/editor-vue 0.22.0 → 0.23.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,37 @@
1
1
  # @kungal/editor-vue
2
2
 
3
+ ## 0.23.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 78e637e: `<KunEditor>` gains a `views` prop to control which view modes the switch offers.
8
+
9
+ The split view is great on a full editor but heavy in a small reply/comment box —
10
+ and there was no way to opt out per-editor (all or nothing). Now pass `views`:
11
+
12
+ ```vue
13
+ <!-- edit page: all three (default) -->
14
+ <KunEditor v-model="md" />
15
+ <!-- reply / comment: no split -->
16
+ <KunEditor v-model="md" :views="['wysiwyg', 'source']" />
17
+ <!-- just WYSIWYG: the switch bar is hidden entirely -->
18
+ <KunEditor v-model="md" :views="['wysiwyg']" />
19
+ ```
20
+
21
+ - Default `['wysiwyg', 'source', 'split']`. The view switch renders only the
22
+ offered modes, and disappears when a single mode is offered. If `views` changes
23
+ to exclude the active mode, it falls back to the first offered.
24
+ - `KunEditorViewSwitchApi` gains `views`; the default view switch and
25
+ `<KunEditorViewSwitch>` (editor-nuxt) both render from it.
26
+
27
+ Verified in the docs production build: an editor with `:views="['wysiwyg','source']"`
28
+ shows only 预览/Markdown (no 分栏), while default editors still show all three; 0
29
+ console errors.
30
+
31
+ ### Patch Changes
32
+
33
+ - @kungal/editor-core@0.23.0
34
+
3
35
  ## 0.22.0
4
36
 
5
37
  ### Minor Changes
@@ -1,5 +1,6 @@
1
1
  import type { KunEditorAdapters, KunEditorFeatures, KunEditorLocale } from '@kungal/editor-core';
2
2
  import type { KunEditorExpose } from '../types';
3
+ type ViewMode = 'wysiwyg' | 'source' | 'split';
3
4
  type __VLS_Props = {
4
5
  /** Bound markdown (v-model). */
5
6
  modelValue: string;
@@ -13,13 +14,18 @@ type __VLS_Props = {
13
14
  readonly?: boolean;
14
15
  /** Placeholder text shown while the editor is empty. */
15
16
  placeholder?: string;
17
+ /**
18
+ * Which view modes to offer in the switch. Default all three. Drop `'split'`
19
+ * (or use just `['wysiwyg']`) for compact editors like a reply/comment box —
20
+ * a single-mode `views` hides the switch bar entirely.
21
+ */
22
+ views?: ViewMode[];
16
23
  /** Sync scrolling between the split panes. Default `true`; set `false` to
17
24
  * disable (or toggle it at runtime via the view-switch API). */
18
25
  scrollSync?: boolean;
19
26
  /** Show a floating format toolbar on text selection. Default `true`. */
20
27
  selectionToolbar?: boolean;
21
28
  };
22
- type ViewMode = 'wysiwyg' | 'source' | 'split';
23
29
  declare var __VLS_1: {
24
30
  mode: ViewMode;
25
31
  setMode: (m: ViewMode) => void;
@@ -30,6 +36,7 @@ declare var __VLS_1: {
30
36
  swap: string;
31
37
  scrollSync: string;
32
38
  };
39
+ views: ViewMode[];
33
40
  swapped: boolean;
34
41
  swap: () => void;
35
42
  scrollSync: boolean;
@@ -67,6 +74,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, KunEditorEx
67
74
  readonly: boolean;
68
75
  placeholder: string;
69
76
  selectionToolbar: boolean;
77
+ views: ViewMode[];
70
78
  scrollSync: boolean;
71
79
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
72
80
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1 +1 @@
1
- {"version":3,"file":"KunEditor.vue.d.ts","sourceRoot":"","sources":["../../src/components/KunEditor.vue"],"names":[],"mappings":"AAiUA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,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,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;oEACgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;AAuCJ,KAAK,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAyW9C,QAAA,IAAI,OAAO;;iBAvWS,QAAQ;;;;;;;;;;;;CAuWP,EAAE,QAAQ;iEAjb/B,CA1S+C;;;;;;;;;;;;;;;CA2tBiB,CAAE;AAClE,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;AAQhD,QAAA,MAAM,UAAU;;;;;cAzaD,iBAAiB;cAEjB,iBAAiB;YAEnB,eAAe;cAEb,OAAO;iBAEJ,MAAM;sBAKD,OAAO;gBAFb,OAAO;6EAmatB,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":"AAsUA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,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,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB;oEACgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;AA6YJ,QAAA,IAAI,OAAO;;iBAjWS,QAAQ;;;;;;;;;;;;;CAiWP,EAAE,QAAQ;iEAtb/B,CA/S+C;;;;;;;;;;;;;;;CAquBiB,CAAE;AAClE,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;AAQhD,QAAA,MAAM,UAAU;;;;;cA5aD,iBAAiB;cAEjB,iBAAiB;YAEnB,eAAe;cAEb,OAAO;iBAEJ,MAAM;sBAWD,OAAO;WALlB,QAAQ,EAAE;gBAGL,OAAO;6EAgatB,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"}
package/dist/index.js CHANGED
@@ -6,9 +6,9 @@ import { listenerCtx as R } from "@milkdown/kit/plugin/listener";
6
6
  import { SlashProvider as z, slashFactory as B } from "@milkdown/kit/plugin/slash";
7
7
  import { TooltipProvider as V, tooltipFactory as H } from "@milkdown/kit/plugin/tooltip";
8
8
  import { callCommand as U, replaceAll as W } from "@milkdown/kit/utils";
9
- import { createKunEditorPlugins as ee, insertKunSpoilerCommand as te, insertMentionCommand as G, insertQuoteCommand as K, kunCM as ne, mentionId as re, setHeadingCommand as ie, startImageUpload as q } from "@kungal/editor-core/preset";
10
- import { TextSelection as ae } from "@milkdown/kit/prose/state";
11
- import { createCodeBlockCommand as oe, insertHrCommand as se, insertImageCommand as ce, toggleEmphasisCommand as J, toggleInlineCodeCommand as le, toggleStrongCommand as ue, wrapInBlockquoteCommand as de, wrapInBulletListCommand as fe, wrapInOrderedListCommand as pe } from "@milkdown/kit/preset/commonmark";
9
+ import { createKunEditorPlugins as G, insertKunSpoilerCommand as ee, insertMentionCommand as K, insertQuoteCommand as q, kunCM as te, mentionId as ne, setHeadingCommand as re, startImageUpload as J } from "@kungal/editor-core/preset";
10
+ import { TextSelection as ie } from "@milkdown/kit/prose/state";
11
+ import { createCodeBlockCommand as ae, insertHrCommand as oe, insertImageCommand as se, toggleEmphasisCommand as ce, toggleInlineCodeCommand as le, toggleStrongCommand as ue, wrapInBlockquoteCommand as de, wrapInBulletListCommand as fe, wrapInOrderedListCommand as pe } from "@milkdown/kit/preset/commonmark";
12
12
  import { toggleStrikethroughCommand as me } from "@milkdown/kit/preset/gfm";
13
13
  import { EditorState as he } from "@codemirror/state";
14
14
  import { EditorView as Y } from "@codemirror/view";
@@ -74,13 +74,13 @@ var X = Symbol("kun-editor-context"), ve = [
74
74
  }, I = (e) => {
75
75
  let t = d.value;
76
76
  if (!t || !O) return;
77
- let n = t.state.schema.nodes[re];
77
+ let n = t.state.schema.nodes[ne];
78
78
  if (!n) return;
79
79
  let r = n.create({
80
80
  userId: e.id,
81
81
  name: e.name
82
82
  }), { from: i, to: a } = O, o = t.state.tr.replaceWith(i, a, r), s = i + r.nodeSize;
83
- o.insertText(" ", s), o.setSelection(ae.create(o.doc, s + 1)), t.dispatch(o.scrollIntoView()), t.focus(), b.hide();
83
+ o.insertText(" ", s), o.setSelection(ie.create(o.doc, s + 1)), t.dispatch(o.scrollIntoView()), t.focus(), b.hide();
84
84
  }, L = (e) => {
85
85
  if (!x.value || !w.value.length) {
86
86
  x.value && e.key === "Escape" && (e.preventDefault(), b.hide());
@@ -176,7 +176,7 @@ var X = Symbol("kun-editor-context"), ve = [
176
176
  {
177
177
  svg: $.italic,
178
178
  title: e ? "Italic" : "斜体",
179
- run: () => v(J.key)
179
+ run: () => v(ce.key)
180
180
  },
181
181
  {
182
182
  svg: $.strike,
@@ -237,7 +237,7 @@ var X = Symbol("kun-editor-context"), ve = [
237
237
  ...e,
238
238
  editable: () => !i.readonly
239
239
  })), l && t.set(c.key, { view: s({ component: Te }) }), d && t.set(u.key, { view: s({ component: Oe }) });
240
- }).use(ee(i.adapters, i.features, {
240
+ }).use(G(i.adapters, i.features, {
241
241
  locale: i.locale,
242
242
  placeholder: i.placeholder
243
243
  }));
@@ -256,10 +256,10 @@ var X = Symbol("kun-editor-context"), ve = [
256
256
  };
257
257
  return t({
258
258
  insertQuote: (e) => {
259
- f.get()?.action(U(K.key, e)), p();
259
+ f.get()?.action(U(q.key, e)), p();
260
260
  },
261
261
  insertMention: (e) => {
262
- f.get()?.action(U(G.key, e)), p();
262
+ f.get()?.action(U(K.key, e)), p();
263
263
  },
264
264
  focus: p
265
265
  }), (e, t) => (m(), n(b(E)));
@@ -314,7 +314,7 @@ var X = Symbol("kun-editor-context"), ve = [
314
314
  n.dispatch(r.tr.insertText(e, r.selection.from));
315
315
  });
316
316
  }, N = (e, t) => {
317
- o()?.action(U(ce.key, {
317
+ o()?.action(U(se.key, {
318
318
  src: e,
319
319
  title: t,
320
320
  alt: t
@@ -416,7 +416,7 @@ var X = Symbol("kun-editor-context"), ve = [
416
416
  }));
417
417
  }), x = (e) => {
418
418
  let t = e.target;
419
- p(ie.key, Number(t.value)), t.selectedIndex = 0;
419
+ p(re.key, Number(t.value)), t.selectedIndex = 0;
420
420
  }, S = t(() => [
421
421
  [
422
422
  {
@@ -427,7 +427,7 @@ var X = Symbol("kun-editor-context"), ve = [
427
427
  {
428
428
  svg: $.italic,
429
429
  title: h.value.italic,
430
- run: () => p(J.key)
430
+ run: () => p(ce.key)
431
431
  },
432
432
  {
433
433
  svg: $.strike,
@@ -459,25 +459,25 @@ var X = Symbol("kun-editor-context"), ve = [
459
459
  {
460
460
  svg: $.codeBlock,
461
461
  title: h.value.codeBlock,
462
- run: () => p(oe.key, "")
462
+ run: () => p(ae.key, "")
463
463
  },
464
464
  {
465
465
  svg: $.hr,
466
466
  title: h.value.hr,
467
- run: () => p(se.key)
467
+ run: () => p(oe.key)
468
468
  }
469
469
  ],
470
470
  [{
471
471
  svg: $.spoiler,
472
472
  title: h.value.spoiler,
473
- run: () => p(te.key)
473
+ run: () => p(ee.key)
474
474
  }]
475
475
  ]), C = g(null), w = () => C.value?.click(), T = (e) => {
476
476
  let t = e.target, n = t.files?.[0];
477
477
  t.value = "";
478
478
  let r = u.value;
479
479
  !n || !r || s()?.action((e) => {
480
- q(e.get(F), n, {
480
+ J(e.get(F), n, {
481
481
  uploadImage: r,
482
482
  notify: c?.adapters.notify,
483
483
  locale: c?.locale
@@ -555,7 +555,7 @@ var X = Symbol("kun-editor-context"), ve = [
555
555
  uploadImage: (e) => {
556
556
  let r = n?.adapters.uploadImage, i = t();
557
557
  !r || !i || i.action((t) => {
558
- q(t.get(F), e, {
558
+ J(t.get(F), e, {
559
559
  uploadImage: r,
560
560
  notify: n?.adapters.notify,
561
561
  locale: n?.locale
@@ -563,10 +563,10 @@ var X = Symbol("kun-editor-context"), ve = [
563
563
  });
564
564
  },
565
565
  insertQuote: (e) => {
566
- r(K.key, e), i();
566
+ r(q.key, e), i();
567
567
  },
568
568
  insertMention: (e) => {
569
- r(G.key, e), i();
569
+ r(K.key, e), i();
570
570
  },
571
571
  focus: i,
572
572
  get adapters() {
@@ -592,7 +592,7 @@ var X = Symbol("kun-editor-context"), ve = [
592
592
  let n = e, r = t, a = g(null), o = null, s = (e) => he.create({
593
593
  doc: e,
594
594
  extensions: [
595
- ne(),
595
+ te(),
596
596
  Y.lineWrapping,
597
597
  _e,
598
598
  ge(),
@@ -618,13 +618,18 @@ var X = Symbol("kun-editor-context"), ve = [
618
618
  }, null, 512));
619
619
  }
620
620
  }), rt = ["data-mode"], it = {
621
+ key: 0,
621
622
  class: "kun-editor__toolbar",
622
623
  role: "tablist"
623
- }, at = ["aria-selected", "data-active"], ot = ["aria-selected", "data-active"], st = ["aria-selected", "data-active"], ct = ["title", "aria-label"], lt = [
624
+ }, at = [
625
+ "aria-selected",
626
+ "data-active",
627
+ "onClick"
628
+ ], ot = ["title", "aria-label"], st = [
624
629
  "data-active",
625
630
  "title",
626
631
  "aria-pressed"
627
- ], ut = ["data-swap"], dt = { class: "kun-editor__wysiwyg kun-editor__pane" }, ft = /* @__PURE__ */ s({
632
+ ], ct = ["data-swap"], lt = { class: "kun-editor__wysiwyg kun-editor__pane" }, ut = /* @__PURE__ */ s({
628
633
  __name: "KunEditor",
629
634
  props: {
630
635
  modelValue: {},
@@ -636,6 +641,11 @@ var X = Symbol("kun-editor-context"), ve = [
636
641
  default: !1
637
642
  },
638
643
  placeholder: { default: "" },
644
+ views: { default: () => [
645
+ "wysiwyg",
646
+ "source",
647
+ "split"
648
+ ] },
639
649
  scrollSync: {
640
650
  type: Boolean,
641
651
  default: !0
@@ -647,29 +657,33 @@ var X = Symbol("kun-editor-context"), ve = [
647
657
  },
648
658
  emits: ["update:modelValue"],
649
659
  setup(s, { expose: l, emit: p }) {
650
- let _ = s, T = p;
660
+ let T = s, E = p;
651
661
  h(X, {
652
662
  get adapters() {
653
- return _.adapters;
663
+ return T.adapters;
654
664
  },
655
665
  get features() {
656
- return _.features;
666
+ return T.features;
657
667
  },
658
668
  get locale() {
659
- return _.locale;
669
+ return T.locale;
660
670
  }
661
671
  });
662
- let E = g("wysiwyg"), O = (e) => {
663
- E.value = e;
664
- }, k = g(!1), j = () => {
665
- k.value = !k.value;
666
- }, M = g(_.scrollSync);
667
- S(() => _.scrollSync, (e) => {
668
- M.value = e;
672
+ let O = g(T.views.includes("wysiwyg") ? "wysiwyg" : T.views[0] ?? "wysiwyg"), k = (e) => {
673
+ O.value = e;
674
+ };
675
+ S(() => T.views, (e) => {
676
+ e.includes(O.value) || (O.value = e[0] ?? "wysiwyg");
677
+ });
678
+ let j = g(!1), M = () => {
679
+ j.value = !j.value;
680
+ }, N = g(T.scrollSync);
681
+ S(() => T.scrollSync, (e) => {
682
+ N.value = e;
669
683
  });
670
- let N = () => {
671
- M.value = !M.value;
672
- }, P = t(() => _.locale.toLowerCase().startsWith("en")), F = t(() => P.value ? {
684
+ let P = () => {
685
+ N.value = !N.value;
686
+ }, F = t(() => T.locale.toLowerCase().startsWith("en")), I = t(() => F.value ? {
673
687
  wysiwyg: "Preview",
674
688
  source: "Markdown",
675
689
  split: "Split",
@@ -681,109 +695,94 @@ var X = Symbol("kun-editor-context"), ve = [
681
695
  split: "分栏",
682
696
  swap: "左右互换",
683
697
  scrollSync: "同步滚动"
684
- }), I = g(null), L = null, R = null, z = null, B = () => {
685
- L?.(), L = null, R = null;
686
- }, V = () => {
687
- B();
688
- let e = I.value;
698
+ }), L = g(null), R = null, z = null, B = null, V = () => {
699
+ R?.(), R = null, z = null;
700
+ }, H = () => {
701
+ V();
702
+ let e = L.value;
689
703
  if (!e) return;
690
704
  let t = e.querySelector(".cm-scroller"), n = e.querySelector(".kun-editor__wysiwyg");
691
705
  if (!t || !n) return;
692
706
  let r = (e, t) => () => {
693
- if (R && R !== e) return;
694
- R = e;
707
+ if (z && z !== e) return;
708
+ z = e;
695
709
  let n = e.scrollHeight - e.clientHeight, r = n > 0 ? e.scrollTop / n : 0, i = t.scrollHeight - t.clientHeight;
696
- t.scrollTop = r * (i > 0 ? i : 0), z && clearTimeout(z), z = setTimeout(() => {
697
- R = null;
710
+ t.scrollTop = r * (i > 0 ? i : 0), B && clearTimeout(B), B = setTimeout(() => {
711
+ z = null;
698
712
  }, 120);
699
713
  }, i = r(t, n), a = r(n, t);
700
- t.addEventListener("scroll", i, { passive: !0 }), n.addEventListener("scroll", a, { passive: !0 }), L = () => {
714
+ t.addEventListener("scroll", i, { passive: !0 }), n.addEventListener("scroll", a, { passive: !0 }), R = () => {
701
715
  t.removeEventListener("scroll", i), n.removeEventListener("scroll", a);
702
716
  };
703
717
  };
704
- S([E, M], ([e, t]) => {
705
- B(), e === "split" && t && u(V);
706
- }), f(B);
707
- let H = t(() => _.readonly || E.value === "split"), U = (e) => T("update:modelValue", e), W = g(null);
718
+ S([O, N], ([e, t]) => {
719
+ V(), e === "split" && t && u(H);
720
+ }), f(V);
721
+ let U = t(() => T.readonly || O.value === "split"), W = (e) => E("update:modelValue", e), G = g(null);
708
722
  return l({
709
- insertQuote: (e) => W.value?.insertQuote(e),
710
- insertMention: (e) => W.value?.insertMention(e),
711
- focus: () => W.value?.focus()
723
+ insertQuote: (e) => G.value?.insertQuote(e),
724
+ insertMention: (e) => G.value?.insertMention(e),
725
+ focus: () => G.value?.focus()
712
726
  }), (t, l) => (m(), i("div", {
713
727
  ref_key: "rootEl",
714
- ref: I,
728
+ ref: L,
715
729
  class: "kun-editor",
716
730
  "data-kun-editor": "",
717
- "data-mode": E.value
731
+ "data-mode": O.value
718
732
  }, [v(t.$slots, "view-switch", {
719
- mode: E.value,
720
- setMode: O,
721
- labels: F.value,
722
- swapped: k.value,
723
- swap: j,
724
- scrollSync: M.value,
725
- toggleScrollSync: N
726
- }, () => [a("div", it, [
727
- a("button", {
728
- type: "button",
729
- class: "kun-editor__tab",
730
- "aria-selected": E.value === "wysiwyg",
731
- "data-active": E.value === "wysiwyg",
732
- onClick: l[0] ||= (e) => O("wysiwyg")
733
- }, y(F.value.wysiwyg), 9, at),
734
- a("button", {
735
- type: "button",
736
- class: "kun-editor__tab",
737
- "aria-selected": E.value === "source",
738
- "data-active": E.value === "source",
739
- onClick: l[1] ||= (e) => O("source")
740
- }, y(F.value.source), 9, ot),
741
- a("button", {
742
- type: "button",
743
- class: "kun-editor__tab",
744
- "aria-selected": E.value === "split",
745
- "data-active": E.value === "split",
746
- onClick: l[2] ||= (e) => O("split")
747
- }, y(F.value.split), 9, st),
748
- E.value === "split" ? (m(), i(e, { key: 0 }, [a("button", {
749
- type: "button",
750
- class: "kun-editor__tab kun-editor__swap",
751
- title: F.value.swap,
752
- "aria-label": F.value.swap,
753
- onClick: l[3] ||= (e) => j()
754
- }, " ⇄ ", 8, ct), a("button", {
755
- type: "button",
756
- class: "kun-editor__tab",
757
- "data-active": M.value,
758
- title: F.value.scrollSync,
759
- "aria-pressed": M.value,
760
- onClick: l[4] ||= (e) => N()
761
- }, y(F.value.scrollSync), 9, lt)], 64)) : r("", !0)
762
- ])]), o(b(D), null, {
733
+ mode: O.value,
734
+ setMode: k,
735
+ labels: I.value,
736
+ views: s.views,
737
+ swapped: j.value,
738
+ swap: M,
739
+ scrollSync: N.value,
740
+ toggleScrollSync: P
741
+ }, () => [s.views.length > 1 ? (m(), i("div", it, [(m(!0), i(e, null, _(s.views, (e) => (m(), i("button", {
742
+ key: e,
743
+ type: "button",
744
+ class: "kun-editor__tab",
745
+ "aria-selected": O.value === e,
746
+ "data-active": O.value === e,
747
+ onClick: (t) => k(e)
748
+ }, y(I.value[e]), 9, at))), 128)), O.value === "split" ? (m(), i(e, { key: 0 }, [a("button", {
749
+ type: "button",
750
+ class: "kun-editor__tab kun-editor__swap",
751
+ title: I.value.swap,
752
+ "aria-label": I.value.swap,
753
+ onClick: l[0] ||= (e) => M()
754
+ }, " ⇄ ", 8, ot), a("button", {
755
+ type: "button",
756
+ class: "kun-editor__tab",
757
+ "data-active": N.value,
758
+ title: I.value.scrollSync,
759
+ "aria-pressed": N.value,
760
+ onClick: l[1] ||= (e) => P()
761
+ }, y(I.value.scrollSync), 9, st)], 64)) : r("", !0)])) : r("", !0)]), o(b(D), null, {
763
762
  default: C(() => [o(b(A), null, {
764
763
  default: C(() => [w(a("div", null, [o(tt, null, {
765
764
  default: C((e) => [v(t.$slots, "toolbar", d(c(e)), () => [o(et)])]),
766
765
  _: 3
767
- })], 512), [[x, E.value === "wysiwyg" && !s.readonly]]), a("div", {
766
+ })], 512), [[x, O.value === "wysiwyg" && !s.readonly]]), a("div", {
768
767
  class: "kun-editor__panes",
769
- "data-swap": k.value
770
- }, [E.value === "source" || E.value === "split" ? (m(), n(nt, {
768
+ "data-swap": j.value
769
+ }, [O.value === "source" || O.value === "split" ? (m(), n(nt, {
771
770
  key: 0,
772
771
  class: "kun-editor__pane",
773
772
  "model-value": s.modelValue,
774
773
  readonly: s.readonly,
775
- "onUpdate:modelValue": U
776
- }, null, 8, ["model-value", "readonly"])) : r("", !0), w(a("div", dt, [o(ke, {
774
+ "onUpdate:modelValue": W
775
+ }, null, 8, ["model-value", "readonly"])) : r("", !0), w(a("div", lt, [o(ke, {
777
776
  ref_key: "inner",
778
- ref: W,
777
+ ref: G,
779
778
  "model-value": s.modelValue,
780
779
  adapters: s.adapters,
781
780
  features: s.features,
782
781
  locale: s.locale,
783
- readonly: H.value,
782
+ readonly: U.value,
784
783
  placeholder: s.placeholder,
785
784
  "selection-toolbar": s.selectionToolbar,
786
- "onUpdate:modelValue": U
785
+ "onUpdate:modelValue": W
787
786
  }, null, 8, [
788
787
  "model-value",
789
788
  "adapters",
@@ -792,14 +791,14 @@ var X = Symbol("kun-editor-context"), ve = [
792
791
  "readonly",
793
792
  "placeholder",
794
793
  "selection-toolbar"
795
- ])], 512), [[x, E.value === "wysiwyg" || E.value === "split"]])], 8, ut)]),
794
+ ])], 512), [[x, O.value === "wysiwyg" || O.value === "split"]])], 8, ct)]),
796
795
  _: 3
797
796
  })]),
798
797
  _: 3
799
798
  })], 8, rt));
800
799
  }
801
- }), pt = { install(e) {
802
- e.component("KunEditor", ft);
800
+ }), dt = { install(e) {
801
+ e.component("KunEditor", ut);
803
802
  } };
804
803
  //#endregion
805
- export { Ae as EMOJI, ft as KunEditor, pt as KunEditorPlugin };
804
+ export { Ae as EMOJI, ut as KunEditor, dt as KunEditorPlugin };
package/dist/types.d.ts CHANGED
@@ -36,6 +36,8 @@ export interface KunEditorViewSwitchApi {
36
36
  mode: 'wysiwyg' | 'source' | 'split';
37
37
  /** Switch the active view. */
38
38
  setMode: (mode: 'wysiwyg' | 'source' | 'split') => void;
39
+ /** The view modes offered (from the `views` prop) — render tabs for these. */
40
+ views: ('wysiwyg' | 'source' | 'split')[];
39
41
  /** Localized labels (respects the `locale` prop). */
40
42
  labels: {
41
43
  wysiwyg: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAK5B,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,aAAa,GACb,OAAO,GACP,WAAW,GACX,IAAI,GACJ,SAAS,GACT,OAAO,GACP,QAAQ,GACR,GAAG,CAAA;AAMP,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;IAC7C,uDAAuD;IACvD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;OAIG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACjC,0EAA0E;IAC1E,WAAW,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAChE,6CAA6C;IAC7C,aAAa,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAClE,gCAAgC;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CACjC;AAMD,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,8BAA8B;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAA;IACvD,qDAAqD;IACrD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAA;IAChB,gDAAgD;IAChD,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAA;IACnB,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,IAAI,CAAA;CAC7B;AASD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC5D;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9D,gCAAgC;IAChC,KAAK,IAAI,IAAI,CAAA;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAK5B,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,aAAa,GACb,OAAO,GACP,WAAW,GACX,IAAI,GACJ,SAAS,GACT,OAAO,GACP,QAAQ,GACR,GAAG,CAAA;AAMP,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;IAC7C,uDAAuD;IACvD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;OAIG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IACjC,0EAA0E;IAC1E,WAAW,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAChE,6CAA6C;IAC7C,aAAa,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAClE,gCAAgC;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CACjC;AAMD,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,8BAA8B;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAA;IACvD,8EAA8E;IAC9E,KAAK,EAAE,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAA;IACzC,qDAAqD;IACrD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAA;IAChB,gDAAgD;IAChD,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAA;IACnB,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,IAAI,CAAA;CAC7B;AASD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC5D;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9D,gCAAgC;IAChC,KAAK,IAAI,IAAI,CAAA;CACd"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungal/editor-vue",
3
- "version": "0.22.0",
3
+ "version": "0.23.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.22.0"
43
+ "@kungal/editor-core": "0.23.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.22.0"
83
+ "@kungal/editor-core": "0.23.0"
84
84
  },
85
85
  "scripts": {
86
86
  "build": "vite build && vue-tsc -p tsconfig.build.json",