@kungal/editor-vue 0.13.0 → 0.14.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.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 506813b: Add a `#view-switch` slot and a KunUI view switch — the Preview/Markdown tabs are
8
+ now a swappable layer too.
9
+
10
+ `<KunEditor>` exposes a `#view-switch` scoped slot whose props are
11
+ `KunEditorViewSwitchApi` (`mode` / `setMode` / `labels`). The hand-rolled tabs
12
+ are the slot's fallback — omit the slot and nothing changes. This lets a host
13
+ render a real component (or anything) for the view switch and drive the editor
14
+ via `setMode`, without reaching into internals.
15
+
16
+ `@kungal/editor-nuxt` ships `<KunEditorViewSwitch>` (auto-imported): the tabs as a
17
+ real `<KunTab variant="underlined">` (keyboard nav, sliding indicator, a11y):
18
+
19
+ ```vue
20
+ <KunEditor v-model="md">
21
+ <template #view-switch="s"><KunEditorViewSwitch v-bind="s" /></template>
22
+ <template #toolbar="api"><KunEditorToolbar v-bind="api" /></template>
23
+ </KunEditor>
24
+ ```
25
+
26
+ Same "headless core + optional KunUI layer" pattern as `#toolbar` /
27
+ `<KunEditorToolbar>`: `@kungal/editor-vue` stays UI-kit-free (default tabs), the
28
+ KunUI ecosystem gets native chrome. Exports `KunEditorViewSwitchApi`.
29
+
30
+ ### Patch Changes
31
+
32
+ - @kungal/editor-core@0.14.0
33
+
3
34
  ## 0.13.0
4
35
 
5
36
  ### Patch Changes
@@ -12,7 +12,15 @@ type __VLS_Props = {
12
12
  /** Read-only render (no editing). */
13
13
  readonly?: boolean;
14
14
  };
15
- declare var __VLS_20: {
15
+ type ViewMode = 'wysiwyg' | 'source';
16
+ declare var __VLS_1: {
17
+ mode: ViewMode;
18
+ setMode: (m: ViewMode) => void;
19
+ labels: {
20
+ wysiwyg: string;
21
+ source: string;
22
+ };
23
+ }, __VLS_22: {
16
24
  run: <T>(key: import("@milkdown/kit/core").CmdKey<T>, payload?: T) => void;
17
25
  insertText: (text: string) => void;
18
26
  insertQuote: (payload: {
@@ -29,7 +37,9 @@ declare var __VLS_20: {
29
37
  locale: KunEditorLocale;
30
38
  };
31
39
  type __VLS_Slots = {} & {
32
- toolbar?: (props: typeof __VLS_20) => any;
40
+ 'view-switch'?: (props: typeof __VLS_1) => any;
41
+ } & {
42
+ toolbar?: (props: typeof __VLS_22) => any;
33
43
  };
34
44
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, KunEditorExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
35
45
  "update:modelValue": (markdown: string) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"KunEditor.vue.d.ts","sourceRoot":"","sources":["../../src/components/KunEditor.vue"],"names":[],"mappings":"AA2KA,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;CACnB,CAAC;AAsOJ,QAAA,IAAI,QAAQ;iEAhQZ,CA9JwB;;;;;;;;;;;;;;CA8ZqB,CAAE;AAC/C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAOhD,QAAA,MAAM,UAAU;;;;;cAtPD,iBAAiB;cAEjB,iBAAiB;YAEnB,eAAe;cAEb,OAAO;6EAqPpB,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":"AAkLA,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;CACnB,CAAC;AAoCJ,KAAK,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AA2MpC,QAAA,IAAI,OAAO;;iBAzMS,QAAQ;;;;;CAyMP,EAAE,QAAQ;iEAzQ/B,CArKwB;;;;;;;;;;;;;;CA8awC,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;AAOhD,QAAA,MAAM,UAAU;;;;;cAhQD,iBAAiB;cAEjB,iBAAiB;YAEnB,eAAe;cAEb,OAAO;6EA+PpB,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.d.ts CHANGED
@@ -3,6 +3,7 @@ import KunEditor from './components/KunEditor.vue';
3
3
  export { KunEditor };
4
4
  export type { KunEditorExpose } from './types';
5
5
  export type { KunEditorToolbarApi } from './types';
6
+ export type { KunEditorViewSwitchApi } from './types';
6
7
  export { EMOJI } from './emoji';
7
8
  export type { KunEditorAdapters, KunEditorFeatures, KunEditorLocale, UploadImage, SearchMentionUsers, StickerSource, Notify, NotifyLevel, MentionUser, StickerItem, StickerPack } from '@kungal/editor-core';
8
9
  /** Vue plugin: `app.use(KunEditorPlugin)` to register <KunEditor> globally. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,CAAA;AAGpB,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAGlD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAG/B,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACZ,MAAM,qBAAqB,CAAA;AAE5B,+EAA+E;AAC/E,eAAO,MAAM,eAAe,EAAE,MAI7B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,CAAA;AAGpB,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAGlD,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAG/B,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACZ,MAAM,qBAAqB,CAAA;AAE5B,+EAA+E;AAC/E,eAAO,MAAM,eAAe,EAAE,MAI7B,CAAA"}
package/dist/index.js CHANGED
@@ -567,31 +567,37 @@ var q = Symbol("kun-editor-context"), ve = [
567
567
  return d.locale;
568
568
  }
569
569
  });
570
- let g = h("wysiwyg"), x = t(() => d.locale.toLowerCase().startsWith("en")), w = t(() => x.value ? {
570
+ let g = h("wysiwyg"), x = (e) => {
571
+ g.value = e;
572
+ }, w = t(() => d.locale.toLowerCase().startsWith("en")), T = t(() => w.value ? {
571
573
  wysiwyg: "Preview",
572
574
  source: "Markdown"
573
575
  } : {
574
576
  wysiwyg: "预览",
575
577
  source: "Markdown"
576
- }), T = (e) => f("update:modelValue", e), D = h(null);
578
+ }), D = (e) => f("update:modelValue", e), O = h(null);
577
579
  return s({
578
- insertQuote: (e) => D.value?.insertQuote(e),
579
- insertMention: (e) => D.value?.insertMention(e),
580
- focus: () => D.value?.focus()
580
+ insertQuote: (e) => O.value?.insertQuote(e),
581
+ insertMention: (e) => O.value?.insertMention(e),
582
+ focus: () => O.value?.focus()
581
583
  }), (t, s) => (p(), i("div", Xe, [
582
- a("div", Ze, [a("button", {
584
+ _(t.$slots, "view-switch", {
585
+ mode: g.value,
586
+ setMode: x,
587
+ labels: T.value
588
+ }, () => [a("div", Ze, [a("button", {
583
589
  type: "button",
584
590
  class: "kun-editor__tab",
585
591
  "aria-selected": g.value === "wysiwyg",
586
592
  "data-active": g.value === "wysiwyg",
587
- onClick: s[0] ||= (e) => g.value = "wysiwyg"
588
- }, v(w.value.wysiwyg), 9, Qe), a("button", {
593
+ onClick: s[0] ||= (e) => x("wysiwyg")
594
+ }, v(T.value.wysiwyg), 9, Qe), a("button", {
589
595
  type: "button",
590
596
  class: "kun-editor__tab",
591
597
  "aria-selected": g.value === "source",
592
598
  "data-active": g.value === "source",
593
- onClick: s[1] ||= (e) => g.value = "source"
594
- }, v(w.value.source), 9, $e)]),
599
+ onClick: s[1] ||= (e) => x("source")
600
+ }, v(T.value.source), 9, $e)])]),
595
601
  o(y(E), null, {
596
602
  default: S(() => [o(y(k), null, {
597
603
  default: S(() => [C(a("div", null, [o(Je, null, {
@@ -599,13 +605,13 @@ var q = Symbol("kun-editor-context"), ve = [
599
605
  _: 3
600
606
  })], 512), [[b, g.value === "wysiwyg" && !e.readonly]]), C(a("div", et, [o(Ee, {
601
607
  ref_key: "inner",
602
- ref: D,
608
+ ref: O,
603
609
  "model-value": e.modelValue,
604
610
  adapters: e.adapters,
605
611
  features: e.features,
606
612
  locale: e.locale,
607
613
  readonly: e.readonly,
608
- "onUpdate:modelValue": T
614
+ "onUpdate:modelValue": D
609
615
  }, null, 8, [
610
616
  "model-value",
611
617
  "adapters",
@@ -621,7 +627,7 @@ var q = Symbol("kun-editor-context"), ve = [
621
627
  key: 0,
622
628
  "model-value": e.modelValue,
623
629
  readonly: e.readonly,
624
- "onUpdate:modelValue": T
630
+ "onUpdate:modelValue": D
625
631
  }, null, 8, ["model-value", "readonly"])) : r("", !0)
626
632
  ]));
627
633
  }
package/dist/types.d.ts CHANGED
@@ -24,6 +24,17 @@ export interface KunEditorToolbarApi {
24
24
  /** UI language, for localized labels. */
25
25
  readonly locale: KunEditorLocale;
26
26
  }
27
+ export interface KunEditorViewSwitchApi {
28
+ /** The active view. */
29
+ mode: 'wysiwyg' | 'source';
30
+ /** Switch the active view. */
31
+ setMode: (mode: 'wysiwyg' | 'source') => void;
32
+ /** Localized labels for the two views (respects the `locale` prop). */
33
+ labels: {
34
+ wysiwyg: string;
35
+ source: string;
36
+ };
37
+ }
27
38
  export interface KunEditorExpose {
28
39
  /**
29
40
  * Insert a reference atom at the cursor (`[label](kungal-reply:refId)`), then
@@ -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;AAM5B,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,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;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;AAM5B,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,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,uBAAuB;IACvB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC1B,8BAA8B;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAA;IAC7C,uEAAuE;IACvE,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C;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.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "KunEditor Vue 3 layer — the <KunEditor> component (dual WYSIWYG / markdown-source), toolbar and plugin views. Consumes @kungal/editor-core; pairs with @kungal/ui-vue.",
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.13.0"
43
+ "@kungal/editor-core": "0.14.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.13.0"
83
+ "@kungal/editor-core": "0.14.0"
84
84
  },
85
85
  "scripts": {
86
86
  "build": "vite build && vue-tsc -p tsconfig.build.json",