UNPKG

@grafana/ui

Version:
1 lines 4.05 kB
{"version":3,"file":"clipboard.mjs","sources":["../../../src/slate-plugins/clipboard.ts"],"sourcesContent":["import { type Plugin } from 'slate-react';\n\nconst getCopiedText = (textBlocks: string[], startOffset: number, endOffset: number) => {\n if (!textBlocks.length) {\n return undefined;\n }\n\n const excludingLastLineLength = textBlocks.slice(0, -1).join('').length + textBlocks.length - 1;\n return textBlocks.join('\\n').slice(startOffset, excludingLastLineLength + endOffset);\n};\n\n// Remove unicode special symbol - byte order mark (BOM), U+FEFF.\nconst removeBom = (str: string | undefined): string | undefined => {\n return str?.replace(/[\\uFEFF]/g, '');\n};\n\nexport function ClipboardPlugin(): Plugin {\n const clipboardPlugin: Plugin = {\n onCopy(event, editor, next) {\n event.preventDefault();\n\n const { document, selection } = editor.value;\n const {\n start: { offset: startOffset },\n end: { offset: endOffset },\n } = selection;\n const selectedBlocks = document\n .getLeafBlocksAtRange(selection)\n .toArray()\n .map((block) => block.text);\n\n const copiedText = removeBom(getCopiedText(selectedBlocks, startOffset, endOffset));\n if (copiedText && event.clipboardData) {\n event.clipboardData.setData('Text', copiedText);\n }\n\n return true;\n },\n\n onPaste(event, editor, next) {\n event.preventDefault();\n if (event.clipboardData) {\n const pastedValue = removeBom(event.clipboardData.getData('Text'));\n const lines = pastedValue?.split('\\n');\n\n if (lines && lines.length) {\n editor.insertText(lines[0]);\n for (const line of lines.slice(1)) {\n editor.splitBlock().insertText(line);\n }\n }\n }\n\n return true;\n },\n };\n\n return {\n ...clipboardPlugin,\n onCut(event, editor, next) {\n clipboardPlugin.onCopy!(event, editor, next);\n editor.deleteAtRange(editor.value.selection);\n\n return true;\n },\n };\n}\n"],"names":[],"mappings":";AAEA,MAAM,aAAA,GAAgB,CAAC,UAAA,EAAsB,WAAA,EAAqB,SAAA,KAAsB;AACtF,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,OAAO,KAAA,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,uBAAA,GAA0B,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAAE,MAAA,GAAS,UAAA,CAAW,MAAA,GAAS,CAAA;AAC9F,EAAA,OAAO,WAAW,IAAA,CAAK,IAAI,EAAE,KAAA,CAAM,WAAA,EAAa,0BAA0B,SAAS,CAAA;AACrF,CAAA;AAGA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgD;AACjE,EAAA,OAAO,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,QAAQ,WAAA,EAAa,EAAA,CAAA;AACnC,CAAA;AAEO,SAAS,eAAA,GAA0B;AACxC,EAAA,MAAM,eAAA,GAA0B;AAAA,IAC9B,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM;AAC1B,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAU,GAAI,MAAA,CAAO,KAAA;AACvC,MAAA,MAAM;AAAA,QACJ,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAA,EAAY;AAAA,QAC7B,GAAA,EAAK,EAAE,MAAA,EAAQ,SAAA;AAAU,OAC3B,GAAI,SAAA;AACJ,MAAA,MAAM,cAAA,GAAiB,QAAA,CACpB,oBAAA,CAAqB,SAAS,CAAA,CAC9B,OAAA,EAAQ,CACR,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA;AAE5B,MAAA,MAAM,aAAa,SAAA,CAAU,aAAA,CAAc,cAAA,EAAgB,WAAA,EAAa,SAAS,CAAC,CAAA;AAClF,MAAA,IAAI,UAAA,IAAc,MAAM,aAAA,EAAe;AACrC,QAAA,KAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,MAAA,EAAQ,UAAU,CAAA;AAAA,MAChD;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,OAAA,CAAQ,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM;AAC3B,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,MAAM,cAAc,SAAA,CAAU,KAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAC,CAAA;AACjE,QAAA,MAAM,KAAA,GAAQ,2CAAa,KAAA,CAAM,IAAA,CAAA;AAEjC,QAAA,IAAI,KAAA,IAAS,MAAM,MAAA,EAAQ;AACzB,UAAA,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AAC1B,UAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,YAAA,MAAA,CAAO,UAAA,EAAW,CAAE,UAAA,CAAW,IAAI,CAAA;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,eAAA;AAAA,IACH,KAAA,CAAM,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM;AACzB,MAAA,eAAA,CAAgB,MAAA,CAAQ,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAA;AAC3C,MAAA,MAAA,CAAO,aAAA,CAAc,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAE3C,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;;;;"}