mihailik commited on
Commit
44632df
·
1 Parent(s): 5d4928f

Imports adjusted.

Browse files
Files changed (1) hide show
  1. chat5.js +48 -4
chat5.js CHANGED
@@ -84,13 +84,17 @@ body {
84
  kitCommonmark,
85
  milkdownCore,
86
  milkdownPresetCommonmark,
87
- milkdownProse
 
 
88
  ] = await Promise.all([
89
  import(`https://esm.sh/@milkdown/kit@${version}/core`),
90
  import(`https://esm.sh/@milkdown/kit@${version}/preset/commonmark`),
91
  import(`https://esm.sh/@milkdown/core@${version}`),
92
  import(`https://esm.sh/@milkdown/preset-commonmark@${version}`),
93
- import(`https://esm.sh/@milkdown/prose@${version}`)
 
 
94
  ]);
95
 
96
  if (chatLog) chatLog.innerHTML = '';
@@ -124,6 +128,8 @@ body {
124
  milkdownCore,
125
  milkdownPresetCommonmark,
126
  milkdownProse,
 
 
127
  chatLogEditor,
128
  chatInputEditor
129
  };
@@ -168,9 +174,47 @@ body {
168
  const { kitCore, kitCommonmark, chatLog, chatInput } = initHTML();
169
  const milkdownResult = await initMilkdown({ chatLog, chatInput });
170
  if (!milkdownResult) return;
171
- const { chatLogEditor, chatInputEditor, milkdownCore } = milkdownResult;
 
 
172
 
173
- outputMessage(chatLogEditor, milkdownCore, 'Milkdown editor component is loaded correctly. Please try typing...');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
 
175
  window.onerror = (...args) => {
176
  try {
 
84
  kitCommonmark,
85
  milkdownCore,
86
  milkdownPresetCommonmark,
87
+ milkdownProse,
88
+ prosemirrorKeymap,
89
+ prosemirrorState
90
  ] = await Promise.all([
91
  import(`https://esm.sh/@milkdown/kit@${version}/core`),
92
  import(`https://esm.sh/@milkdown/kit@${version}/preset/commonmark`),
93
  import(`https://esm.sh/@milkdown/core@${version}`),
94
  import(`https://esm.sh/@milkdown/preset-commonmark@${version}`),
95
+ import(`https://esm.sh/@milkdown/prose@${version}`),
96
+ import('https://esm.sh/prosemirror-keymap@1.2.0'),
97
+ import('https://esm.sh/prosemirror-state@1.3.4')
98
  ]);
99
 
100
  if (chatLog) chatLog.innerHTML = '';
 
128
  milkdownCore,
129
  milkdownPresetCommonmark,
130
  milkdownProse,
131
+ prosemirrorKeymap,
132
+ prosemirrorState,
133
  chatLogEditor,
134
  chatInputEditor
135
  };
 
174
  const { kitCore, kitCommonmark, chatLog, chatInput } = initHTML();
175
  const milkdownResult = await initMilkdown({ chatLog, chatInput });
176
  if (!milkdownResult) return;
177
+ const { chatLogEditor, chatInputEditor, milkdownCore, prosemirrorKeymap, prosemirrorState } = milkdownResult;
178
+
179
+ outputMessage(chatLogEditor, milkdownCore, 'Milkdown editor component is loaded correctly. Please try typing...');
180
 
181
+ // Add a ProseMirror plugin to handle Enter key in chat input editor
182
+ await chatInputEditor.action((ctx) => {
183
+ const serializer = ctx.get(milkdownCore.serializerCtx);
184
+ const view = ctx.get(milkdownCore.editorViewCtx);
185
+ const { Plugin } = prosemirrorState;
186
+ // Add a keymap plugin for Enter
187
+ const enterPlugin = new Plugin({
188
+ props: {
189
+ handleKeyDown(view, event) {
190
+ if (
191
+ event.key === 'Enter' &&
192
+ !event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey
193
+ ) {
194
+ event.preventDefault();
195
+ const inputMarkdown = serializer(view.state.doc).trim();
196
+ if (inputMarkdown) {
197
+ const msg = `user typed:\n> ${inputMarkdown.replace(/\n/g, '\n> ')}`;
198
+ outputMessage(chatLogEditor, milkdownCore, msg);
199
+ // Clear input
200
+ const tr = view.state.tr.replaceWith(
201
+ 0,
202
+ view.state.doc.content.size,
203
+ view.state.schema.nodes.doc.createAndFill().content
204
+ );
205
+ view.dispatch(tr);
206
+ }
207
+ return true;
208
+ }
209
+ return false;
210
+ },
211
+ },
212
+ });
213
+ view.state = view.state.reconfigure({
214
+ plugins: [...view.state.plugins, enterPlugin],
215
+ });
216
+ view.updateState(view.state);
217
+ });
218
 
219
  window.onerror = (...args) => {
220
  try {