@dialpad/dialtone 9.30.1 → 9.32.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.
Files changed (102) hide show
  1. package/README.md +6 -0
  2. package/dist/css/dialtone.css +11 -2
  3. package/dist/css/dialtone.min.css +1 -1
  4. package/dist/tokens/css/variables-dark.css +1 -1
  5. package/dist/tokens/css/variables-expressive-dark.css +1 -1
  6. package/dist/tokens/css/variables-expressive-light.css +1 -1
  7. package/dist/tokens/css/variables-expressive-sm-dark.css +1 -1
  8. package/dist/tokens/css/variables-expressive-sm-light.css +1 -1
  9. package/dist/tokens/css/variables-light.css +1 -1
  10. package/dist/tokens/css/variables-tmo-dark.css +1 -1
  11. package/dist/tokens/css/variables-tmo-light.css +1 -1
  12. package/dist/tokens/less/variables-dark.less +1 -1
  13. package/dist/tokens/less/variables-expressive-dark.less +1 -1
  14. package/dist/tokens/less/variables-expressive-light.less +1 -1
  15. package/dist/tokens/less/variables-expressive-sm-dark.less +1 -1
  16. package/dist/tokens/less/variables-expressive-sm-light.less +1 -1
  17. package/dist/tokens/less/variables-light.less +1 -1
  18. package/dist/tokens/less/variables-tmo-dark.less +1 -1
  19. package/dist/tokens/less/variables-tmo-light.less +1 -1
  20. package/dist/vue2/component-documentation.json +1 -1
  21. package/dist/vue2/dialtone-vue.cjs +2 -0
  22. package/dist/vue2/dialtone-vue.cjs.map +1 -1
  23. package/dist/vue2/dialtone-vue.js +2 -0
  24. package/dist/vue2/dialtone-vue.js.map +1 -1
  25. package/dist/vue2/lib/editor.cjs +2 -0
  26. package/dist/vue2/lib/editor.cjs.map +1 -1
  27. package/dist/vue2/lib/editor.js +2 -0
  28. package/dist/vue2/lib/editor.js.map +1 -1
  29. package/dist/vue2/lib/message-input.cjs +21 -4
  30. package/dist/vue2/lib/message-input.cjs.map +1 -1
  31. package/dist/vue2/lib/message-input.js +21 -4
  32. package/dist/vue2/lib/message-input.js.map +1 -1
  33. package/dist/vue2/lib/notice.cjs +10 -1
  34. package/dist/vue2/lib/notice.cjs.map +1 -1
  35. package/dist/vue2/lib/notice.js +10 -1
  36. package/dist/vue2/lib/notice.js.map +1 -1
  37. package/dist/vue2/lib/popover.cjs +2 -1
  38. package/dist/vue2/lib/popover.cjs.map +1 -1
  39. package/dist/vue2/lib/popover.js +2 -1
  40. package/dist/vue2/lib/popover.js.map +1 -1
  41. package/dist/vue2/lib/rich-text-editor.cjs +220 -40
  42. package/dist/vue2/lib/rich-text-editor.cjs.map +1 -1
  43. package/dist/vue2/lib/rich-text-editor.js +220 -40
  44. package/dist/vue2/lib/rich-text-editor.js.map +1 -1
  45. package/dist/vue2/types/components/notice/notice.vue.d.ts +19 -0
  46. package/dist/vue2/types/components/notice/notice.vue.d.ts.map +1 -1
  47. package/dist/vue2/types/components/rich_text_editor/channel_suggestion.d.ts +15 -0
  48. package/dist/vue2/types/components/rich_text_editor/channel_suggestion.d.ts.map +1 -0
  49. package/dist/vue2/types/components/rich_text_editor/extensions/channels/ChannelComponent.vue.d.ts +47 -0
  50. package/dist/vue2/types/components/rich_text_editor/extensions/channels/ChannelComponent.vue.d.ts.map +1 -0
  51. package/dist/vue2/types/components/rich_text_editor/extensions/channels/ChannelSuggestion.vue.d.ts +15 -0
  52. package/dist/vue2/types/components/rich_text_editor/extensions/channels/ChannelSuggestion.vue.d.ts.map +1 -0
  53. package/dist/vue2/types/components/rich_text_editor/extensions/channels/channel.d.ts +2 -0
  54. package/dist/vue2/types/components/rich_text_editor/extensions/channels/channel.d.ts.map +1 -0
  55. package/dist/vue2/types/components/rich_text_editor/extensions/channels/suggestion.d.ts +11 -0
  56. package/dist/vue2/types/components/rich_text_editor/extensions/channels/suggestion.d.ts.map +1 -0
  57. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts +31 -0
  58. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts.map +1 -1
  59. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts +31 -0
  60. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  61. package/dist/vue3/component-documentation.json +1 -1
  62. package/dist/vue3/dialtone-vue.cjs +2 -0
  63. package/dist/vue3/dialtone-vue.cjs.map +1 -1
  64. package/dist/vue3/dialtone-vue.js +2 -0
  65. package/dist/vue3/dialtone-vue.js.map +1 -1
  66. package/dist/vue3/lib/editor.cjs +2 -0
  67. package/dist/vue3/lib/editor.cjs.map +1 -1
  68. package/dist/vue3/lib/editor.js +2 -0
  69. package/dist/vue3/lib/editor.js.map +1 -1
  70. package/dist/vue3/lib/message-input.cjs +23 -3
  71. package/dist/vue3/lib/message-input.cjs.map +1 -1
  72. package/dist/vue3/lib/message-input.js +23 -3
  73. package/dist/vue3/lib/message-input.js.map +1 -1
  74. package/dist/vue3/lib/notice.cjs +10 -1
  75. package/dist/vue3/lib/notice.cjs.map +1 -1
  76. package/dist/vue3/lib/notice.js +10 -1
  77. package/dist/vue3/lib/notice.js.map +1 -1
  78. package/dist/vue3/lib/popover.cjs +2 -1
  79. package/dist/vue3/lib/popover.cjs.map +1 -1
  80. package/dist/vue3/lib/popover.js +2 -1
  81. package/dist/vue3/lib/popover.js.map +1 -1
  82. package/dist/vue3/lib/rich-text-editor.cjs +202 -17
  83. package/dist/vue3/lib/rich-text-editor.cjs.map +1 -1
  84. package/dist/vue3/lib/rich-text-editor.js +202 -17
  85. package/dist/vue3/lib/rich-text-editor.js.map +1 -1
  86. package/dist/vue3/types/components/notice/notice.vue.d.ts +19 -0
  87. package/dist/vue3/types/components/notice/notice.vue.d.ts.map +1 -1
  88. package/dist/vue3/types/components/rich_text_editor/channel_suggestion.d.ts +15 -0
  89. package/dist/vue3/types/components/rich_text_editor/channel_suggestion.d.ts.map +1 -0
  90. package/dist/vue3/types/components/rich_text_editor/extensions/channels/ChannelComponent.vue.d.ts +71 -0
  91. package/dist/vue3/types/components/rich_text_editor/extensions/channels/ChannelComponent.vue.d.ts.map +1 -0
  92. package/dist/vue3/types/components/rich_text_editor/extensions/channels/ChannelSuggestion.vue.d.ts +15 -0
  93. package/dist/vue3/types/components/rich_text_editor/extensions/channels/ChannelSuggestion.vue.d.ts.map +1 -0
  94. package/dist/vue3/types/components/rich_text_editor/extensions/channels/channel.d.ts +2 -0
  95. package/dist/vue3/types/components/rich_text_editor/extensions/channels/channel.d.ts.map +1 -0
  96. package/dist/vue3/types/components/rich_text_editor/extensions/channels/suggestion.d.ts +11 -0
  97. package/dist/vue3/types/components/rich_text_editor/extensions/channels/suggestion.d.ts.map +1 -0
  98. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts +31 -0
  99. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts.map +1 -1
  100. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts +31 -0
  101. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  102. package/package.json +55 -53
@@ -32,6 +32,8 @@ const common_utils = require("../common/utils.cjs");
32
32
  const Mention = require("@tiptap/extension-mention");
33
33
  const lib_link = require("./link.cjs");
34
34
  const lib_avatar = require("./avatar.cjs");
35
+ const DtIconHash = require("@dialpad/dialtone-icons/vue3/hash");
36
+ const DtIconLock = require("@dialpad/dialtone-icons/vue3/lock");
35
37
  require("./skeleton.cjs");
36
38
  require("../chunks/icon_constants-QYpmdE0R.js");
37
39
  require("@dialpad/dialtone-icons/icons.json");
@@ -44,7 +46,7 @@ require("../chunks/stack_constants-SMzMWnAQ.js");
44
46
  require("../common/constants.cjs");
45
47
  require("../chunks/link_constants-Huj7D_hm.js");
46
48
  require("./presence.cjs");
47
- const _sfc_main$5 = {
49
+ const _sfc_main$7 = {
48
50
  name: "EmojiComponent",
49
51
  components: {
50
52
  NodeViewWrapper: vue3.NodeViewWrapper,
@@ -52,7 +54,7 @@ const _sfc_main$5 = {
52
54
  },
53
55
  props: vue3.nodeViewProps
54
56
  };
55
- function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
57
+ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
56
58
  const _component_dt_emoji = vue.resolveComponent("dt-emoji");
57
59
  const _component_node_view_wrapper = vue.resolveComponent("node-view-wrapper");
58
60
  return vue.openBlock(), vue.createBlock(_component_node_view_wrapper, { class: "d-d-inline-block d-va-bottom d-lh0" }, {
@@ -65,8 +67,8 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
65
67
  _: 1
66
68
  });
67
69
  }
68
- const EmojiComponent = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$5, [["render", _sfc_render$5]]);
69
- const _sfc_main$4 = {
70
+ const EmojiComponent = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$7, [["render", _sfc_render$7]]);
71
+ const _sfc_main$6 = {
70
72
  name: "SuggestionList",
71
73
  components: {
72
74
  DtListItem: lib_listItem.DtListItem
@@ -146,6 +148,9 @@ const _sfc_main$4 = {
146
148
  case "mention":
147
149
  this.command({ name: item.name, id: item.id, avatarSrc: item.avatarSrc });
148
150
  break;
151
+ case "channel":
152
+ this.command({ name: item.name, id: item.id });
153
+ break;
149
154
  }
150
155
  }
151
156
  }
@@ -155,7 +160,7 @@ const _hoisted_2 = {
155
160
  ref: "suggestionList",
156
161
  class: "dt-suggestion-list"
157
162
  };
158
- function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
163
+ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
159
164
  const _component_dt_list_item = vue.resolveComponent("dt-list-item");
160
165
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
161
166
  vue.withDirectives(vue.createElementVNode("ul", _hoisted_2, [
@@ -181,8 +186,8 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
181
186
  ])
182
187
  ]);
183
188
  }
184
- const SuggestionList = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$4, [["render", _sfc_render$4]]);
185
- const _sfc_main$3 = {
189
+ const SuggestionList = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$6, [["render", _sfc_render$6]]);
190
+ const _sfc_main$5 = {
186
191
  name: "EmojiSuggestion",
187
192
  components: {
188
193
  DtEmoji: lib_emoji.DtEmoji,
@@ -195,7 +200,7 @@ const _sfc_main$3 = {
195
200
  }
196
201
  }
197
202
  };
198
- function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
203
+ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
199
204
  const _component_dt_emoji = vue.resolveComponent("dt-emoji");
200
205
  const _component_dt_stack = vue.resolveComponent("dt-stack");
201
206
  return vue.openBlock(), vue.createBlock(_component_dt_stack, {
@@ -212,7 +217,7 @@ function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
212
217
  _: 1
213
218
  });
214
219
  }
215
- const EmojiSuggestion = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$3, [["render", _sfc_render$3]]);
220
+ const EmojiSuggestion = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$5, [["render", _sfc_render$5]]);
216
221
  const suggestionOptions = {
217
222
  items: ({ query }) => {
218
223
  if (query.length < 2) {
@@ -587,7 +592,7 @@ const Link = core.Mark.create({
587
592
  ];
588
593
  }
589
594
  });
590
- const _sfc_main$2 = {
595
+ const _sfc_main$4 = {
591
596
  name: "MentionComponent",
592
597
  components: {
593
598
  NodeViewWrapper: vue3.NodeViewWrapper,
@@ -600,7 +605,7 @@ const _sfc_main$2 = {
600
605
  }
601
606
  }
602
607
  };
603
- function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
608
+ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
604
609
  const _component_dt_link = vue.resolveComponent("dt-link");
605
610
  const _component_node_view_wrapper = vue.resolveComponent("node-view-wrapper");
606
611
  return vue.openBlock(), vue.createBlock(_component_node_view_wrapper, { class: "d-d-inline-block" }, {
@@ -615,7 +620,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
615
620
  _: 1
616
621
  });
617
622
  }
618
- const MentionComponent = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$2, [["render", _sfc_render$2]]);
623
+ const MentionComponent = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$4, [["render", _sfc_render$4]]);
619
624
  const MentionPlugin = Mention.extend({
620
625
  addNodeView() {
621
626
  return vue3.VueNodeViewRenderer(MentionComponent);
@@ -647,6 +652,72 @@ const MentionPlugin = Mention.extend({
647
652
  return ["mention-component", core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
648
653
  }
649
654
  });
655
+ const _sfc_main$3 = {
656
+ name: "ChannelComponent",
657
+ components: {
658
+ NodeViewWrapper: vue3.NodeViewWrapper,
659
+ DtLink: lib_link.DtLink
660
+ },
661
+ props: vue3.nodeViewProps,
662
+ computed: {
663
+ text() {
664
+ return "#" + this.$props.node.attrs.name;
665
+ }
666
+ }
667
+ };
668
+ function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
669
+ const _component_dt_link = vue.resolveComponent("dt-link");
670
+ const _component_node_view_wrapper = vue.resolveComponent("node-view-wrapper");
671
+ return vue.openBlock(), vue.createBlock(_component_node_view_wrapper, { class: "d-d-inline-block" }, {
672
+ default: vue.withCtx(() => [
673
+ vue.createVNode(_component_dt_link, { kind: "mention" }, {
674
+ default: vue.withCtx(() => [
675
+ vue.createTextVNode(vue.toDisplayString($options.text), 1)
676
+ ]),
677
+ _: 1
678
+ })
679
+ ]),
680
+ _: 1
681
+ });
682
+ }
683
+ const ChannelComponent = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$3, [["render", _sfc_render$3]]);
684
+ const ChannelPlugin = Mention.extend({
685
+ name: "channel",
686
+ addNodeView() {
687
+ return vue3.VueNodeViewRenderer(ChannelComponent);
688
+ },
689
+ parseHTML() {
690
+ return [
691
+ {
692
+ tag: "channel-component"
693
+ }
694
+ ];
695
+ },
696
+ addAttributes() {
697
+ return {
698
+ name: {
699
+ default: ""
700
+ },
701
+ id: {
702
+ default: ""
703
+ },
704
+ locked: {
705
+ default: false
706
+ }
707
+ };
708
+ },
709
+ renderText({ node }) {
710
+ return `#${node.attrs.id}`;
711
+ },
712
+ renderHTML({ HTMLAttributes }) {
713
+ return ["channel-component", core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
714
+ }
715
+ }).configure({
716
+ suggestion: {
717
+ char: "#",
718
+ pluginKey: new state.PluginKey("channelSuggestion")
719
+ }
720
+ });
650
721
  const RICH_TEXT_EDITOR_OUTPUT_FORMATS = [
651
722
  "text",
652
723
  "json",
@@ -665,7 +736,7 @@ const RICH_TEXT_EDITOR_SUPPORTED_LINK_PROTOCOLS = [
665
736
  "sftp",
666
737
  "mailto"
667
738
  ];
668
- const _sfc_main$1 = {
739
+ const _sfc_main$2 = {
669
740
  name: "MentionSuggestion",
670
741
  components: {
671
742
  DtAvatar: lib_avatar.DtAvatar,
@@ -686,7 +757,7 @@ const _sfc_main$1 = {
686
757
  }
687
758
  }
688
759
  };
689
- function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
760
+ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
690
761
  const _component_dt_avatar = vue.resolveComponent("dt-avatar");
691
762
  const _component_dt_stack = vue.resolveComponent("dt-stack");
692
763
  return vue.openBlock(), vue.createBlock(_component_dt_stack, {
@@ -705,8 +776,8 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
705
776
  _: 1
706
777
  });
707
778
  }
708
- const MentionSuggestion = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$1, [["render", _sfc_render$1]]);
709
- const suggestion = {
779
+ const MentionSuggestion = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$2, [["render", _sfc_render$2]]);
780
+ const mentionSuggestion = {
710
781
  // This function comes from the user and passed to the editor directly.
711
782
  // This will also activate the mention plugin on the editor
712
783
  // items: ({ query }) => { return [] },
@@ -760,6 +831,101 @@ const suggestion = {
760
831
  };
761
832
  }
762
833
  };
834
+ const _sfc_main$1 = {
835
+ name: "ChannelSuggestion",
836
+ components: {
837
+ DtStack: lib_stack.DtStack,
838
+ DtIconHash,
839
+ DtIconLock
840
+ },
841
+ props: {
842
+ item: {
843
+ type: Object,
844
+ required: true
845
+ }
846
+ },
847
+ computed: {
848
+ name() {
849
+ return this.item.name;
850
+ }
851
+ }
852
+ };
853
+ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
854
+ const _component_dt_icon_hash = vue.resolveComponent("dt-icon-hash");
855
+ const _component_dt_icon_lock = vue.resolveComponent("dt-icon-lock");
856
+ const _component_dt_stack = vue.resolveComponent("dt-stack");
857
+ return vue.openBlock(), vue.createBlock(_component_dt_stack, {
858
+ direction: "row",
859
+ gap: "400"
860
+ }, {
861
+ default: vue.withCtx(() => [
862
+ !$props.item.locked ? (vue.openBlock(), vue.createBlock(_component_dt_icon_hash, {
863
+ key: 0,
864
+ size: "300"
865
+ })) : (vue.openBlock(), vue.createBlock(_component_dt_icon_lock, {
866
+ key: 1,
867
+ size: "300"
868
+ })),
869
+ vue.createElementVNode("span", null, vue.toDisplayString($options.name), 1)
870
+ ]),
871
+ _: 1
872
+ });
873
+ }
874
+ const ChannelSuggestion = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$1, [["render", _sfc_render$1]]);
875
+ const channelSuggestion = {
876
+ // This function comes from the user and passed to the editor directly.
877
+ // This will also activate the mention plugin on the editor
878
+ // items: ({ query }) => { return [] },
879
+ allowSpaces: true,
880
+ render: () => {
881
+ let component;
882
+ let popup;
883
+ return {
884
+ onStart: (props) => {
885
+ component = new vue3.VueRenderer(SuggestionList, {
886
+ props: {
887
+ itemComponent: vue.markRaw(ChannelSuggestion),
888
+ itemType: "channel",
889
+ ...props
890
+ },
891
+ editor: props.editor
892
+ });
893
+ if (!props.clientRect) {
894
+ return;
895
+ }
896
+ popup = tippy("body", {
897
+ getReferenceClientRect: props.clientRect,
898
+ appendTo: () => document.body,
899
+ content: component.element,
900
+ showOnCreate: true,
901
+ interactive: true,
902
+ trigger: "manual",
903
+ placement: "top-start"
904
+ });
905
+ },
906
+ onUpdate(props) {
907
+ component.updateProps(props);
908
+ if (!props.clientRect) {
909
+ return;
910
+ }
911
+ popup[0].setProps({
912
+ getReferenceClientRect: props.clientRect
913
+ });
914
+ },
915
+ onKeyDown(props) {
916
+ if (props.event.key === "Escape") {
917
+ popup[0].hide();
918
+ return true;
919
+ }
920
+ return component == null ? void 0 : component.ref.onKeyDown(props);
921
+ },
922
+ onExit() {
923
+ popup[0].destroy();
924
+ component.destroy();
925
+ }
926
+ };
927
+ }
928
+ };
763
929
  const _sfc_main = {
764
930
  name: "DtRichTextEditor",
765
931
  components: {
@@ -867,6 +1033,21 @@ const _sfc_main = {
867
1033
  type: Object,
868
1034
  default: null
869
1035
  },
1036
+ /**
1037
+ * suggestion object containing the items query function.
1038
+ * The valid keys passed into this object can be found here: https://tiptap.dev/api/utilities/suggestion
1039
+ *
1040
+ * The only required key is the items function which is used to query the channels for suggestion.
1041
+ * items({ query }) => { return [ChannelObject]; }
1042
+ * ChannelObject format:
1043
+ * { name: string, id: string, locked: boolean }
1044
+ *
1045
+ * When null, it does not add the plugin. Setting locked to true will display a lock rather than hash.
1046
+ */
1047
+ channelSuggestion: {
1048
+ type: Object,
1049
+ default: null
1050
+ },
870
1051
  /**
871
1052
  * Whether the input allows for block quote.
872
1053
  */
@@ -996,9 +1177,13 @@ const _sfc_main = {
996
1177
  protocols: RICH_TEXT_EDITOR_SUPPORTED_LINK_PROTOCOLS
997
1178
  }));
998
1179
  if (this.mentionSuggestion) {
999
- const suggestionObject = { ...this.mentionSuggestion, ...suggestion };
1180
+ const suggestionObject = { ...this.mentionSuggestion, ...mentionSuggestion };
1000
1181
  extensions.push(MentionPlugin.configure({ suggestion: suggestionObject }));
1001
1182
  }
1183
+ if (this.channelSuggestion) {
1184
+ const suggestionObject = { ...this.channelSuggestion, ...channelSuggestion };
1185
+ extensions.push(ChannelPlugin.configure({ suggestion: suggestionObject }));
1186
+ }
1002
1187
  extensions.push(Emoji);
1003
1188
  extensions.push(TextAlign.configure({
1004
1189
  types: ["paragraph"],