rme 0.3.0-beta.4 → 0.3.0-beta.5

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/dist/index.d.ts CHANGED
@@ -237,6 +237,12 @@ declare const createSourceCodeDelegate: (options?: CreateSourceCodeManagerOption
237
237
 
238
238
  declare const _default$1: react__default.NamedExoticComponent<EditorProps>;
239
239
 
240
+ type ClipboardReadFunction = typeof clipboardRead;
241
+ declare function clipboardRead(): Promise<{
242
+ html: string;
243
+ text: string;
244
+ }>;
245
+
240
246
  interface AIOptions {
241
247
  defaultSelectProvider?: string;
242
248
  supportProviderInfosMap: Record<string, {
@@ -389,6 +395,7 @@ type ExtensionsOptions = {
389
395
  ai?: AIOptions;
390
396
  customCopyFunction?: CustomCopyFunction;
391
397
  overrideShortcutMap?: Record<string, string>;
398
+ clipboardReadFunction?: ClipboardReadFunction;
392
399
  };
393
400
  declare function extensions(options: ExtensionsOptions): any[];
394
401
 
package/dist/index.mjs CHANGED
@@ -3433,6 +3433,33 @@ import { CountExtension } from "@rme-sdk/extension-count";
3433
3433
  import { corePreset } from "@rme-sdk/preset-core";
3434
3434
  import { ReactComponentExtension } from "@rme-sdk/react";
3435
3435
 
3436
+ // src/editor/utils/clipboard-read.ts
3437
+ function clipboardRead() {
3438
+ return navigator.clipboard.read().then(async (data) => {
3439
+ let html2 = "";
3440
+ let text = "";
3441
+ const htmlData = data.find((item) => item.types.includes("text/html"));
3442
+ const textData = data.find((item) => item.types.includes("text/plain"));
3443
+ const getHtml = async () => {
3444
+ if (htmlData) {
3445
+ const blob = await htmlData.getType("text/html");
3446
+ html2 = await blob.text();
3447
+ }
3448
+ };
3449
+ const getText = async () => {
3450
+ if (textData) {
3451
+ const blob = await textData.getType("text/plain");
3452
+ text = await blob.text();
3453
+ }
3454
+ };
3455
+ await Promise.all([getHtml(), getText()]);
3456
+ return {
3457
+ html: html2,
3458
+ text
3459
+ };
3460
+ });
3461
+ }
3462
+
3436
3463
  // src/editor/extensions/Ai/ai-extension.tsx
3437
3464
  import { extension, ExtensionTag, NodeExtension } from "@rme-sdk/core";
3438
3465
  import { TextSelection as TextSelection3 } from "@rme-sdk/pm/state";
@@ -3834,7 +3861,6 @@ var ClipboardExtension = class extends PlainExtension2 {
3834
3861
  return {
3835
3862
  props: {
3836
3863
  handlePaste: (view, event) => {
3837
- console.log("handlePaste", event);
3838
3864
  const transformer = getTransformerByView(view);
3839
3865
  const parser = transformer.stringToDoc;
3840
3866
  const schema = view.state.schema;
@@ -3922,13 +3948,69 @@ var ClipboardExtension = class extends PlainExtension2 {
3922
3948
  },
3923
3949
  paste: () => {
3924
3950
  return (params) => {
3925
- if (params.tr.selection.empty) {
3951
+ const { view } = params;
3952
+ if (!view) return false;
3953
+ const transformer = getTransformerByView(view);
3954
+ const parser = transformer.stringToDoc;
3955
+ const schema = view.state.schema;
3956
+ const editable = view.props.editable?.(view.state);
3957
+ if (!this.options.clipboardReadFunction) {
3926
3958
  return false;
3927
3959
  }
3928
- if (params.dispatch) {
3929
- console.log("execCommand paste");
3930
- document.execCommand("paste");
3931
- }
3960
+ this.options.clipboardReadFunction().then(async (data) => {
3961
+ let { html: html2, text } = data;
3962
+ if (!editable || !html2 || !text) return false;
3963
+ const currentNode = view.state.selection.$from.node();
3964
+ if (currentNode.type.spec.code) return false;
3965
+ if (html2.length === 0 && text.length === 0) return false;
3966
+ console.log("html", html2);
3967
+ console.log("text", text);
3968
+ const domParser = DOMParser2.fromSchema(schema);
3969
+ let dom;
3970
+ if (html2.length === 0) {
3971
+ const slice2 = parser?.(text);
3972
+ if (!slice2 || typeof slice2 === "string") return false;
3973
+ const res = [];
3974
+ slice2.content.forEach((node2, index) => {
3975
+ if (node2.type.name === "paragraph" && index === 0) {
3976
+ node2.content.forEach((child) => {
3977
+ res.push(child);
3978
+ });
3979
+ } else {
3980
+ res.push(node2);
3981
+ }
3982
+ });
3983
+ this.processImagesInNodesAsync(res, view);
3984
+ if (res.length === 1) {
3985
+ view.dispatch(view.state.tr.replaceSelectionWith(res[0], false));
3986
+ } else {
3987
+ const fragment = Fragment3.from(res);
3988
+ view.dispatch(view.state.tr.replaceSelection(new Slice(fragment, 0, 0)));
3989
+ }
3990
+ return true;
3991
+ } else {
3992
+ const template = document.createElement("template");
3993
+ template.innerHTML = html2;
3994
+ dom = template.content.cloneNode(true);
3995
+ template.remove();
3996
+ }
3997
+ const slice = domParser.parseSlice(dom);
3998
+ const node = isTextOnlySlice(slice);
3999
+ console.log("slice", slice, node);
4000
+ if (node) {
4001
+ if ((node.type.name === "html_image" || node.type.name === "md_image") && node.attrs.src) {
4002
+ this.processImageNode(node, view);
4003
+ view.dispatch(view.state.tr.replaceSelectionWith(node, true));
4004
+ } else {
4005
+ this.processMarkdownImageSyntax(node, view).then(() => {
4006
+ view.dispatch(view.state.tr.replaceSelectionWith(node, true));
4007
+ });
4008
+ }
4009
+ return true;
4010
+ }
4011
+ this.processImagesInSliceAsync(slice, view);
4012
+ view.dispatch(view.state.tr.replaceSelection(slice));
4013
+ });
3932
4014
  return true;
3933
4015
  };
3934
4016
  },
@@ -10211,7 +10293,8 @@ function extensions(options) {
10211
10293
  handleViewImgSrcUrl,
10212
10294
  imageHostingHandler,
10213
10295
  imageCopyHandler,
10214
- customCopyFunction = defaultCopyFunction
10296
+ customCopyFunction = defaultCopyFunction,
10297
+ clipboardReadFunction = clipboardRead
10215
10298
  } = options;
10216
10299
  const res = [
10217
10300
  ...corePreset({ excludeExtensions: ["paragraph", "text"] }),
@@ -10266,7 +10349,8 @@ function extensions(options) {
10266
10349
  handleViewImgSrcUrl
10267
10350
  }),
10268
10351
  new ClipboardExtension({
10269
- imageCopyHandler
10352
+ imageCopyHandler,
10353
+ clipboardReadFunction
10270
10354
  }),
10271
10355
  new ReactComponentExtension({}),
10272
10356
  new DropCursorExtension({