@bikdotai/bik-component-library 0.0.809-beta.17 → 0.0.809-beta.19
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/cjs/components/list-item/themes.js +1 -1
- package/dist/cjs/components/list-item/themes.js.map +1 -1
- package/dist/cjs/components/variable-picker-v3/Content.js +1 -1
- package/dist/cjs/components/variable-picker-v3/Content.js.map +1 -1
- package/dist/cjs/components/variable-picker-v3/SubHeaderItems.js +1 -1
- package/dist/cjs/components/variable-picker-v3/SubHeaderItems.js.map +1 -1
- package/dist/cjs/components/variable-picker-v3/context.js +1 -1
- package/dist/cjs/components/variable-picker-v3/context.js.map +1 -1
- package/dist/cjs/editor/BikEditor.js +1 -1
- package/dist/cjs/editor/BikEditor.js.map +1 -1
- package/dist/cjs/editor/BikEditor.styles.js +3 -13
- package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
- package/dist/cjs/editor/BikEditor.types.js.map +1 -1
- package/dist/cjs/editor/BikEditor.utils.js +1 -1
- package/dist/cjs/editor/BikEditor.utils.js.map +1 -1
- package/dist/cjs/editor/extensions/buildExtensions.js +1 -1
- package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
- package/dist/cjs/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js +2 -0
- package/dist/cjs/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js.map +1 -0
- package/dist/cjs/editor/extensions/plainClipboard/PlainClipboardExtension.js +2 -0
- package/dist/cjs/editor/extensions/plainClipboard/PlainClipboardExtension.js.map +1 -0
- package/dist/cjs/editor/extensions/plainClipboard/pasteUtils.js +1 -1
- package/dist/cjs/editor/extensions/plainClipboard/pasteUtils.js.map +1 -1
- package/dist/cjs/src/components/variable-picker-v3/context.d.ts +4 -0
- package/dist/cjs/src/editor/BikEditor.styles.d.ts +0 -1
- package/dist/cjs/src/editor/BikEditor.types.d.ts +0 -2
- package/dist/cjs/src/editor/BikEditor.utils.d.ts +4 -8
- package/dist/cjs/src/editor/extensions/plainClipboard/ClipboardNormalizationExtension.d.ts +7 -0
- package/dist/cjs/src/editor/extensions/plainClipboard/PlainClipboardExtension.d.ts +2 -0
- package/dist/cjs/src/editor/extensions/plainClipboard/pasteUtils.d.ts +8 -40
- package/dist/cjs/src/icons/Actions/Common actions/SendAirplane2.d.ts +7 -0
- package/dist/cjs/src/icons/BIK AI specific/AiAgent.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Communication/AtSymbol.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Communication/Hangup.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Communication/IncomingCall.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Communication/OutgoingCall.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Communication/PhoneCall.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Communication/Transcript.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Files and folders/BookOpen.d.ts +7 -0
- package/dist/cjs/src/icons/Informational/Identity/AiVoiceAgent.d.ts +7 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/FbCommentTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/FbTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/IgCommentTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/IgTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/MailTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/PhoneTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/TaskTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/WhatsappTicket.d.ts +6 -0
- package/dist/cjs/src/icons/Social/Channels/Subdued/index.d.ts +8 -0
- package/dist/esm/components/list-item/themes.js +1 -1
- package/dist/esm/components/list-item/themes.js.map +1 -1
- package/dist/esm/components/variable-picker-v3/Content.js +1 -1
- package/dist/esm/components/variable-picker-v3/Content.js.map +1 -1
- package/dist/esm/components/variable-picker-v3/SubHeaderItems.js +1 -1
- package/dist/esm/components/variable-picker-v3/SubHeaderItems.js.map +1 -1
- package/dist/esm/components/variable-picker-v3/context.js +1 -1
- package/dist/esm/components/variable-picker-v3/context.js.map +1 -1
- package/dist/esm/editor/BikEditor.js +1 -1
- package/dist/esm/editor/BikEditor.js.map +1 -1
- package/dist/esm/editor/BikEditor.styles.js +7 -17
- package/dist/esm/editor/BikEditor.styles.js.map +1 -1
- package/dist/esm/editor/BikEditor.types.js.map +1 -1
- package/dist/esm/editor/BikEditor.utils.js +1 -1
- package/dist/esm/editor/BikEditor.utils.js.map +1 -1
- package/dist/esm/editor/extensions/buildExtensions.js +1 -1
- package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
- package/dist/esm/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js +2 -0
- package/dist/esm/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js.map +1 -0
- package/dist/esm/editor/extensions/plainClipboard/PlainClipboardExtension.js +2 -0
- package/dist/esm/editor/extensions/plainClipboard/PlainClipboardExtension.js.map +1 -0
- package/dist/esm/editor/extensions/plainClipboard/pasteUtils.js +1 -1
- package/dist/esm/editor/extensions/plainClipboard/pasteUtils.js.map +1 -1
- package/dist/esm/src/components/variable-picker-v3/context.d.ts +4 -0
- package/dist/esm/src/editor/BikEditor.styles.d.ts +0 -1
- package/dist/esm/src/editor/BikEditor.types.d.ts +0 -2
- package/dist/esm/src/editor/BikEditor.utils.d.ts +4 -8
- package/dist/esm/src/editor/extensions/plainClipboard/ClipboardNormalizationExtension.d.ts +7 -0
- package/dist/esm/src/editor/extensions/plainClipboard/PlainClipboardExtension.d.ts +2 -0
- package/dist/esm/src/editor/extensions/plainClipboard/pasteUtils.d.ts +8 -40
- package/dist/esm/src/icons/Actions/Common actions/SendAirplane2.d.ts +7 -0
- package/dist/esm/src/icons/BIK AI specific/AiAgent.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Communication/AtSymbol.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Communication/Hangup.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Communication/IncomingCall.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Communication/OutgoingCall.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Communication/PhoneCall.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Communication/Transcript.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Files and folders/BookOpen.d.ts +7 -0
- package/dist/esm/src/icons/Informational/Identity/AiVoiceAgent.d.ts +7 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/FbCommentTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/FbTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/IgCommentTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/IgTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/MailTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/PhoneTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/TaskTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/WhatsappTicket.d.ts +6 -0
- package/dist/esm/src/icons/Social/Channels/Subdued/index.d.ts +8 -0
- package/package.json +1 -1
- package/dist/cjs/editor/extensions/plainClipboard/PasteNormalizationExtension.js +0 -2
- package/dist/cjs/editor/extensions/plainClipboard/PasteNormalizationExtension.js.map +0 -1
- package/dist/cjs/src/editor/extensions/plainClipboard/PasteNormalizationExtension.d.ts +0 -13
- package/dist/esm/editor/extensions/plainClipboard/PasteNormalizationExtension.js +0 -2
- package/dist/esm/editor/extensions/plainClipboard/PasteNormalizationExtension.js.map +0 -1
- package/dist/esm/src/editor/extensions/plainClipboard/PasteNormalizationExtension.d.ts +0 -13
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Extension } from '@tiptap/core';
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight paste normalizer for rich-paste editors (email).
|
|
4
|
+
* Fixes Google Docs' standalone `<br>` between paragraphs and collapses
|
|
5
|
+
* consecutive empty paragraphs — but keeps ALL formatting marks intact.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ClipboardNormalizationExtension: Extension<any, any>;
|
|
@@ -1,53 +1,21 @@
|
|
|
1
|
-
import { Fragment
|
|
1
|
+
import { Fragment } from '@tiptap/pm/model';
|
|
2
2
|
export declare const TEXTBLOCK_TAGS: Set<string>;
|
|
3
3
|
export declare const BLOCK_SELECTOR = "p,div,h1,h2,h3,h4,h5,h6,ul,ol,li,blockquote,table,pre";
|
|
4
|
-
/**
|
|
5
|
-
* When pasted HTML is entirely inline (no block elements), split at
|
|
6
|
-
* `<br><br>` boundaries into `<p>` elements. Single `<br>` stays as a
|
|
7
|
-
* line break inside the paragraph.
|
|
8
|
-
*/
|
|
9
|
-
export declare function wrapInlineContent(container: HTMLElement): void;
|
|
10
4
|
/**
|
|
11
5
|
* Replace `<br>` elements that sit at block level (not inside a textblock
|
|
12
6
|
* like `<p>`, `<li>`, etc.) with empty `<p></p>` elements. Google Docs
|
|
13
7
|
* puts standalone `<br>` tags between paragraphs to represent blank lines.
|
|
8
|
+
* Without this, ProseMirror parses them as top-level hardBreak nodes.
|
|
14
9
|
*/
|
|
15
10
|
export declare function cleanBlockBrs(container: HTMLElement): void;
|
|
16
11
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* placeholder. Without this, ProseMirror creates a trailing hardBreak that
|
|
20
|
-
* adds a visual blank line at the bottom of the paragraph.
|
|
21
|
-
*/
|
|
22
|
-
export declare function stripTrailingBrs(container: HTMLElement): void;
|
|
23
|
-
/**
|
|
24
|
-
* Convert paragraphs containing only a hardBreak into truly empty paragraphs.
|
|
25
|
-
* Google Docs represents blank lines as `<p><br></p>` — ProseMirror parses
|
|
26
|
-
* the `<br>` as a hardBreak node, which renders double-height. Converting to
|
|
27
|
-
* an empty paragraph (childCount 0) gives a single-height blank line.
|
|
28
|
-
*
|
|
29
|
-
* Does NOT collapse consecutive empties — that would destroy user intent.
|
|
12
|
+
* 1. Convert paragraphs containing only a hard_break into empty paragraphs.
|
|
13
|
+
* 2. Collapse consecutive empty paragraphs into one.
|
|
30
14
|
*/
|
|
31
|
-
export declare function
|
|
15
|
+
export declare function normalizeBlanks(fragment: Fragment): Fragment;
|
|
32
16
|
/**
|
|
33
|
-
* Strip "rich" marks (link, textStyle, highlight, etc.) while keeping
|
|
34
|
-
* basic marks (bold, italic, strike, underline, code) that
|
|
35
|
-
* channels can represent.
|
|
17
|
+
* Strip only "rich" marks (link, textStyle, highlight, etc.) while keeping
|
|
18
|
+
* basic formatting marks (bold, italic, strike, underline, code) that
|
|
19
|
+
* messaging channels can represent.
|
|
36
20
|
*/
|
|
37
21
|
export declare function stripRichMarks(fragment: Fragment): Fragment;
|
|
38
|
-
/**
|
|
39
|
-
* Parse plain clipboard text into a ProseMirror Slice, preserving blank
|
|
40
|
-
* lines as empty paragraphs. This replaces ProseMirror's default text
|
|
41
|
-
* parser which uses `\n+` and loses all blank lines.
|
|
42
|
-
*
|
|
43
|
-
* Best for channels with compact paragraph gaps (e.g. WhatsApp) where
|
|
44
|
-
* blank lines need structural representation as empty paragraphs.
|
|
45
|
-
*/
|
|
46
|
-
export declare function parseClipboardText(text: string, schema: Schema): Slice;
|
|
47
|
-
/**
|
|
48
|
-
* Parse plain clipboard text into a single paragraph with hardBreaks for
|
|
49
|
-
* every `\n`. Produces the same structure as Gmail's Cmd+Shift+V output:
|
|
50
|
-
* one block element with `<br>` for line breaks and `<br><br>` for blank
|
|
51
|
-
* lines. This gives identical html and text output to Gmail.
|
|
52
|
-
*/
|
|
53
|
-
export declare function parseClipboardTextAsBreaks(text: string, schema: Schema): Slice;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgSendAirplane2: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgSendAirplane2;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgAiAgent: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgAiAgent;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgAtSymbol: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgAtSymbol;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgHangup: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgHangup;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgIncomingCall: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgIncomingCall;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgOutgoingCall: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgOutgoingCall;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgPhoneCall: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgPhoneCall;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgTranscript: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgTranscript;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgBookOpen: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgBookOpen;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SVGProps } from 'react';
|
|
2
|
+
interface Props extends SVGProps<SVGSVGElement> {
|
|
3
|
+
size?: number | string;
|
|
4
|
+
color?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgAiVoiceAgent: ({ size, color, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgAiVoiceAgent;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as FbCommentTicket } from './FbCommentTicket';
|
|
2
|
+
export { default as FbTicket } from './FbTicket';
|
|
3
|
+
export { default as IgCommentTicket } from './IgCommentTicket';
|
|
4
|
+
export { default as IgTicket } from './IgTicket';
|
|
5
|
+
export { default as MailTicket } from './MailTicket';
|
|
6
|
+
export { default as PhoneTicket } from './PhoneTicket';
|
|
7
|
+
export { default as TaskTicket } from './TaskTicket';
|
|
8
|
+
export { default as WhatsappTicket } from './WhatsappTicket';
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/@tiptap/core/dist/index.js"),t=require("@tiptap/pm/model"),r=require("@tiptap/pm/state"),a=require("@tiptap/pm/view"),n=require("./pasteUtils.js");const s=e.Extension.create({name:"pasteNormalization",addOptions:()=>({preserveMarks:!1}),addProseMirrorPlugins(){const e=this.options.preserveMarks;return[new r.Plugin({props:{decorations(e){const t=[];return e.doc.descendants(((e,r)=>{"paragraph"===e.type.name&&0===e.childCount&&t.push(a.Decoration.node(r,r+e.nodeSize,{class:"is-blank"}))})),a.DecorationSet.create(e.doc,t)},handlePaste(t,r){var a;if(e)return!1;const s=null===(a=r.clipboardData)||void 0===a?void 0:a.getData("text/plain");if(!s)return!1;const i=n.parseClipboardText(s,t.state.schema);return t.dispatch(t.state.tr.replaceSelection(i)),!0},clipboardTextParser:(t,r,a,s)=>(e?n.parseClipboardTextAsBreaks:n.parseClipboardText)(t,s.state.schema),transformPastedHTML(e){if(e.includes("data-pm-slice"))return e;const t=document.createElement("div");return t.innerHTML=e,n.wrapInlineContent(t),n.cleanBlockBrs(t),n.stripTrailingBrs(t),t.innerHTML},transformPasted(r){let a=n.normalizeHardBreaks(r.content);return e||(a=n.stripRichMarks(a)),new t.Slice(a,r.openStart,r.openEnd)}}})]}});exports.PasteNormalizationExtension=s;
|
|
2
|
-
//# sourceMappingURL=PasteNormalizationExtension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PasteNormalizationExtension.js","sources":["../../../../../src/editor/extensions/plainClipboard/PasteNormalizationExtension.ts"],"sourcesContent":["import { Extension } from '@tiptap/core';\nimport { Slice } from '@tiptap/pm/model';\nimport { Plugin } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\nimport {\n\tcleanBlockBrs,\n\tnormalizeHardBreaks,\n\tparseClipboardText,\n\tparseClipboardTextAsBreaks,\n\tstripRichMarks,\n\tstripTrailingBrs,\n\twrapInlineContent,\n} from './pasteUtils';\n\n/**\n * Unified paste normalizer for all editor channels.\n *\n * Uses ProseMirror's recommended hooks instead of overriding handlePaste:\n * - clipboardTextParser: plain text → Slice (preserves blank lines)\n * - transformPastedHTML: HTML → HTML (cleans Google Docs / Word artifacts)\n * - transformPasted: Slice → Slice (normalizes hardBreaks, strips marks)\n *\n * Also decorates empty paragraphs with an `is-blank` CSS class so the\n * editor stylesheet can give blank lines precise height without extra margins.\n */\nexport const PasteNormalizationExtension = Extension.create({\n\tname: 'pasteNormalization',\n\taddOptions() {\n\t\treturn {\n\t\t\tpreserveMarks: false,\n\t\t};\n\t},\n\taddProseMirrorPlugins() {\n\t\tconst preserveMarks = this.options.preserveMarks;\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tprops: {\n\t\t\t\t\tdecorations(state) {\n\t\t\t\t\t\tconst decorations: Decoration[] = [];\n\t\t\t\t\t\tstate.doc.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (node.type.name === 'paragraph' && node.childCount === 0) {\n\t\t\t\t\t\t\t\tdecorations.push(\n\t\t\t\t\t\t\t\t\tDecoration.node(pos, pos + node.nodeSize, {\n\t\t\t\t\t\t\t\t\t\tclass: 'is-blank',\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn DecorationSet.create(state.doc, decorations);\n\t\t\t\t\t},\n\n\t\t\t\t\thandlePaste(view, event) {\n\t\t\t\t\t\tif (preserveMarks) return false;\n\t\t\t\t\t\tconst text = event.clipboardData?.getData('text/plain');\n\t\t\t\t\t\tif (!text) return false;\n\t\t\t\t\t\tconst slice = parseClipboardText(text, view.state.schema);\n\t\t\t\t\t\tview.dispatch(view.state.tr.replaceSelection(slice));\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\n\t\t\t\t\tclipboardTextParser(text, _$context, _plain, view) {\n\t\t\t\t\t\tconst parse = preserveMarks\n\t\t\t\t\t\t\t? parseClipboardTextAsBreaks\n\t\t\t\t\t\t\t: parseClipboardText;\n\t\t\t\t\t\treturn parse(text, view.state.schema);\n\t\t\t\t\t},\n\n\t\t\t\t\ttransformPastedHTML(html) {\n\t\t\t\t\t\tif (html.includes('data-pm-slice')) return html;\n\t\t\t\t\t\tconst container = document.createElement('div');\n\t\t\t\t\t\tcontainer.innerHTML = html;\n\t\t\t\t\t\twrapInlineContent(container);\n\t\t\t\t\t\tcleanBlockBrs(container);\n\t\t\t\t\t\tstripTrailingBrs(container);\n\t\t\t\t\t\treturn container.innerHTML;\n\t\t\t\t\t},\n\n\t\t\t\t\ttransformPasted(slice) {\n\t\t\t\t\t\tlet content = normalizeHardBreaks(slice.content);\n\t\t\t\t\t\tif (!preserveMarks) {\n\t\t\t\t\t\t\tcontent = stripRichMarks(content);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn new Slice(content, slice.openStart, slice.openEnd);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t];\n\t},\n});\n"],"names":["PasteNormalizationExtension","Extension","create","name","addOptions","preserveMarks","addProseMirrorPlugins","this","options","Plugin","props","decorations","state","doc","descendants","node","pos","type","childCount","push","Decoration","nodeSize","class","DecorationSet","handlePaste","view","event","text","_a","clipboardData","getData","slice","parseClipboardText","schema","dispatch","tr","replaceSelection","clipboardTextParser","_$context","_plain","parseClipboardTextAsBreaks","transformPastedHTML","html","includes","container","document","createElement","innerHTML","wrapInlineContent","cleanBlockBrs","stripTrailingBrs","transformPasted","content","normalizeHardBreaks","stripRichMarks","Slice","openStart","openEnd"],"mappings":"kQAyBaA,EAA8BC,EAASA,UAACC,OAAO,CAC3DC,KAAM,qBACNC,WAAUA,KACF,CACNC,eAAe,IAGjBC,wBACC,MAAMD,EAAgBE,KAAKC,QAAQH,cACnC,MAAO,CACN,IAAII,EAAAA,OAAO,CACVC,MAAO,CACNC,YAAYC,GACX,MAAMD,EAA4B,GAUlC,OATAC,EAAMC,IAAIC,aAAY,CAACC,EAAMC,KACL,cAAnBD,EAAKE,KAAKd,MAA4C,IAApBY,EAAKG,YAC1CP,EAAYQ,KACXC,aAAWL,KAAKC,EAAKA,EAAMD,EAAKM,SAAU,CACzCC,MAAO,aAGT,IAEKC,EAAaA,cAACrB,OAAOU,EAAMC,IAAKF,EACvC,EAEDa,YAAYC,EAAMC,SACjB,GAAIrB,EAAe,OAAO,EAC1B,MAAMsB,EAA0B,QAAnBC,EAAAF,EAAMG,qBAAa,IAAAD,OAAA,EAAAA,EAAEE,QAAQ,cAC1C,IAAKH,EAAM,OAAO,EAClB,MAAMI,EAAQC,EAAAA,mBAAmBL,EAAMF,EAAKb,MAAMqB,QAElD,OADAR,EAAKS,SAAST,EAAKb,MAAMuB,GAAGC,iBAAiBL,KACtC,CACP,EAEDM,oBAAmBA,CAACV,EAAMW,EAAWC,EAAQd,KAC9BpB,EACXmC,EAA0BA,2BAC1BR,sBACUL,EAAMF,EAAKb,MAAMqB,QAG/BQ,oBAAoBC,GACnB,GAAIA,EAAKC,SAAS,iBAAkB,OAAOD,EAC3C,MAAME,EAAYC,SAASC,cAAc,OAKzC,OAJAF,EAAUG,UAAYL,EACtBM,EAAiBA,kBAACJ,GAClBK,EAAaA,cAACL,GACdM,EAAgBA,iBAACN,GACVA,EAAUG,SACjB,EAEDI,gBAAgBpB,GACf,IAAIqB,EAAUC,EAAAA,oBAAoBtB,EAAMqB,SAIxC,OAHK/C,IACJ+C,EAAUE,EAAAA,eAAeF,IAEnB,IAAIG,EAAKA,MAACH,EAASrB,EAAMyB,UAAWzB,EAAM0B,QAClD,KAIJ"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Extension } from '@tiptap/core';
|
|
2
|
-
/**
|
|
3
|
-
* Unified paste normalizer for all editor channels.
|
|
4
|
-
*
|
|
5
|
-
* Uses ProseMirror's recommended hooks instead of overriding handlePaste:
|
|
6
|
-
* - clipboardTextParser: plain text → Slice (preserves blank lines)
|
|
7
|
-
* - transformPastedHTML: HTML → HTML (cleans Google Docs / Word artifacts)
|
|
8
|
-
* - transformPasted: Slice → Slice (normalizes hardBreaks, strips marks)
|
|
9
|
-
*
|
|
10
|
-
* Also decorates empty paragraphs with an `is-blank` CSS class so the
|
|
11
|
-
* editor stylesheet can give blank lines precise height without extra margins.
|
|
12
|
-
*/
|
|
13
|
-
export declare const PasteNormalizationExtension: Extension<any, any>;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Extension as t}from"../../../node_modules/@tiptap/core/dist/index.js";import{Slice as e}from"@tiptap/pm/model";import{Plugin as r}from"@tiptap/pm/state";import{Decoration as a,DecorationSet as n}from"@tiptap/pm/view";import{parseClipboardText as o,wrapInlineContent as s,cleanBlockBrs as i,stripTrailingBrs as p,normalizeHardBreaks as d,stripRichMarks as c,parseClipboardTextAsBreaks as m}from"./pasteUtils.js";const l=t.create({name:"pasteNormalization",addOptions:()=>({preserveMarks:!1}),addProseMirrorPlugins(){const t=this.options.preserveMarks;return[new r({props:{decorations(t){const e=[];return t.doc.descendants(((t,r)=>{"paragraph"===t.type.name&&0===t.childCount&&e.push(a.node(r,r+t.nodeSize,{class:"is-blank"}))})),n.create(t.doc,e)},handlePaste(e,r){var a;if(t)return!1;const n=null===(a=r.clipboardData)||void 0===a?void 0:a.getData("text/plain");if(!n)return!1;const s=o(n,e.state.schema);return e.dispatch(e.state.tr.replaceSelection(s)),!0},clipboardTextParser:(e,r,a,n)=>(t?m:o)(e,n.state.schema),transformPastedHTML(t){if(t.includes("data-pm-slice"))return t;const e=document.createElement("div");return e.innerHTML=t,s(e),i(e),p(e),e.innerHTML},transformPasted(r){let a=d(r.content);return t||(a=c(a)),new e(a,r.openStart,r.openEnd)}}})]}});export{l as PasteNormalizationExtension};
|
|
2
|
-
//# sourceMappingURL=PasteNormalizationExtension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PasteNormalizationExtension.js","sources":["../../../../../src/editor/extensions/plainClipboard/PasteNormalizationExtension.ts"],"sourcesContent":["import { Extension } from '@tiptap/core';\nimport { Slice } from '@tiptap/pm/model';\nimport { Plugin } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\nimport {\n\tcleanBlockBrs,\n\tnormalizeHardBreaks,\n\tparseClipboardText,\n\tparseClipboardTextAsBreaks,\n\tstripRichMarks,\n\tstripTrailingBrs,\n\twrapInlineContent,\n} from './pasteUtils';\n\n/**\n * Unified paste normalizer for all editor channels.\n *\n * Uses ProseMirror's recommended hooks instead of overriding handlePaste:\n * - clipboardTextParser: plain text → Slice (preserves blank lines)\n * - transformPastedHTML: HTML → HTML (cleans Google Docs / Word artifacts)\n * - transformPasted: Slice → Slice (normalizes hardBreaks, strips marks)\n *\n * Also decorates empty paragraphs with an `is-blank` CSS class so the\n * editor stylesheet can give blank lines precise height without extra margins.\n */\nexport const PasteNormalizationExtension = Extension.create({\n\tname: 'pasteNormalization',\n\taddOptions() {\n\t\treturn {\n\t\t\tpreserveMarks: false,\n\t\t};\n\t},\n\taddProseMirrorPlugins() {\n\t\tconst preserveMarks = this.options.preserveMarks;\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tprops: {\n\t\t\t\t\tdecorations(state) {\n\t\t\t\t\t\tconst decorations: Decoration[] = [];\n\t\t\t\t\t\tstate.doc.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (node.type.name === 'paragraph' && node.childCount === 0) {\n\t\t\t\t\t\t\t\tdecorations.push(\n\t\t\t\t\t\t\t\t\tDecoration.node(pos, pos + node.nodeSize, {\n\t\t\t\t\t\t\t\t\t\tclass: 'is-blank',\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn DecorationSet.create(state.doc, decorations);\n\t\t\t\t\t},\n\n\t\t\t\t\thandlePaste(view, event) {\n\t\t\t\t\t\tif (preserveMarks) return false;\n\t\t\t\t\t\tconst text = event.clipboardData?.getData('text/plain');\n\t\t\t\t\t\tif (!text) return false;\n\t\t\t\t\t\tconst slice = parseClipboardText(text, view.state.schema);\n\t\t\t\t\t\tview.dispatch(view.state.tr.replaceSelection(slice));\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\n\t\t\t\t\tclipboardTextParser(text, _$context, _plain, view) {\n\t\t\t\t\t\tconst parse = preserveMarks\n\t\t\t\t\t\t\t? parseClipboardTextAsBreaks\n\t\t\t\t\t\t\t: parseClipboardText;\n\t\t\t\t\t\treturn parse(text, view.state.schema);\n\t\t\t\t\t},\n\n\t\t\t\t\ttransformPastedHTML(html) {\n\t\t\t\t\t\tif (html.includes('data-pm-slice')) return html;\n\t\t\t\t\t\tconst container = document.createElement('div');\n\t\t\t\t\t\tcontainer.innerHTML = html;\n\t\t\t\t\t\twrapInlineContent(container);\n\t\t\t\t\t\tcleanBlockBrs(container);\n\t\t\t\t\t\tstripTrailingBrs(container);\n\t\t\t\t\t\treturn container.innerHTML;\n\t\t\t\t\t},\n\n\t\t\t\t\ttransformPasted(slice) {\n\t\t\t\t\t\tlet content = normalizeHardBreaks(slice.content);\n\t\t\t\t\t\tif (!preserveMarks) {\n\t\t\t\t\t\t\tcontent = stripRichMarks(content);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn new Slice(content, slice.openStart, slice.openEnd);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t];\n\t},\n});\n"],"names":["PasteNormalizationExtension","Extension","create","name","addOptions","preserveMarks","addProseMirrorPlugins","this","options","Plugin","props","decorations","state","doc","descendants","node","pos","type","childCount","push","Decoration","nodeSize","class","DecorationSet","handlePaste","view","event","text","_a","clipboardData","getData","slice","parseClipboardText","schema","dispatch","tr","replaceSelection","clipboardTextParser","_$context","_plain","parseClipboardTextAsBreaks","transformPastedHTML","html","includes","container","document","createElement","innerHTML","wrapInlineContent","cleanBlockBrs","stripTrailingBrs","transformPasted","content","normalizeHardBreaks","stripRichMarks","Slice","openStart","openEnd"],"mappings":"waAyBaA,EAA8BC,EAAUC,OAAO,CAC3DC,KAAM,qBACNC,WAAUA,KACF,CACNC,eAAe,IAGjBC,wBACC,MAAMD,EAAgBE,KAAKC,QAAQH,cACnC,MAAO,CACN,IAAII,EAAO,CACVC,MAAO,CACNC,YAAYC,GACX,MAAMD,EAA4B,GAUlC,OATAC,EAAMC,IAAIC,aAAY,CAACC,EAAMC,KACL,cAAnBD,EAAKE,KAAKd,MAA4C,IAApBY,EAAKG,YAC1CP,EAAYQ,KACXC,EAAWL,KAAKC,EAAKA,EAAMD,EAAKM,SAAU,CACzCC,MAAO,aAGT,IAEKC,EAAcrB,OAAOU,EAAMC,IAAKF,EACvC,EAEDa,YAAYC,EAAMC,SACjB,GAAIrB,EAAe,OAAO,EAC1B,MAAMsB,EAA0B,QAAnBC,EAAAF,EAAMG,qBAAa,IAAAD,OAAA,EAAAA,EAAEE,QAAQ,cAC1C,IAAKH,EAAM,OAAO,EAClB,MAAMI,EAAQC,EAAmBL,EAAMF,EAAKb,MAAMqB,QAElD,OADAR,EAAKS,SAAST,EAAKb,MAAMuB,GAAGC,iBAAiBL,KACtC,CACP,EAEDM,oBAAmBA,CAACV,EAAMW,EAAWC,EAAQd,KAC9BpB,EACXmC,EACAR,GACUL,EAAMF,EAAKb,MAAMqB,QAG/BQ,oBAAoBC,GACnB,GAAIA,EAAKC,SAAS,iBAAkB,OAAOD,EAC3C,MAAME,EAAYC,SAASC,cAAc,OAKzC,OAJAF,EAAUG,UAAYL,EACtBM,EAAkBJ,GAClBK,EAAcL,GACdM,EAAiBN,GACVA,EAAUG,SACjB,EAEDI,gBAAgBpB,GACf,IAAIqB,EAAUC,EAAoBtB,EAAMqB,SAIxC,OAHK/C,IACJ+C,EAAUE,EAAeF,IAEnB,IAAIG,EAAMH,EAASrB,EAAMyB,UAAWzB,EAAM0B,QAClD,KAIJ"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Extension } from '@tiptap/core';
|
|
2
|
-
/**
|
|
3
|
-
* Unified paste normalizer for all editor channels.
|
|
4
|
-
*
|
|
5
|
-
* Uses ProseMirror's recommended hooks instead of overriding handlePaste:
|
|
6
|
-
* - clipboardTextParser: plain text → Slice (preserves blank lines)
|
|
7
|
-
* - transformPastedHTML: HTML → HTML (cleans Google Docs / Word artifacts)
|
|
8
|
-
* - transformPasted: Slice → Slice (normalizes hardBreaks, strips marks)
|
|
9
|
-
*
|
|
10
|
-
* Also decorates empty paragraphs with an `is-blank` CSS class so the
|
|
11
|
-
* editor stylesheet can give blank lines precise height without extra margins.
|
|
12
|
-
*/
|
|
13
|
-
export declare const PasteNormalizationExtension: Extension<any, any>;
|