@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.
Files changed (105) hide show
  1. package/dist/cjs/components/list-item/themes.js +1 -1
  2. package/dist/cjs/components/list-item/themes.js.map +1 -1
  3. package/dist/cjs/components/variable-picker-v3/Content.js +1 -1
  4. package/dist/cjs/components/variable-picker-v3/Content.js.map +1 -1
  5. package/dist/cjs/components/variable-picker-v3/SubHeaderItems.js +1 -1
  6. package/dist/cjs/components/variable-picker-v3/SubHeaderItems.js.map +1 -1
  7. package/dist/cjs/components/variable-picker-v3/context.js +1 -1
  8. package/dist/cjs/components/variable-picker-v3/context.js.map +1 -1
  9. package/dist/cjs/editor/BikEditor.js +1 -1
  10. package/dist/cjs/editor/BikEditor.js.map +1 -1
  11. package/dist/cjs/editor/BikEditor.styles.js +3 -13
  12. package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
  13. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  14. package/dist/cjs/editor/BikEditor.utils.js +1 -1
  15. package/dist/cjs/editor/BikEditor.utils.js.map +1 -1
  16. package/dist/cjs/editor/extensions/buildExtensions.js +1 -1
  17. package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
  18. package/dist/cjs/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js +2 -0
  19. package/dist/cjs/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js.map +1 -0
  20. package/dist/cjs/editor/extensions/plainClipboard/PlainClipboardExtension.js +2 -0
  21. package/dist/cjs/editor/extensions/plainClipboard/PlainClipboardExtension.js.map +1 -0
  22. package/dist/cjs/editor/extensions/plainClipboard/pasteUtils.js +1 -1
  23. package/dist/cjs/editor/extensions/plainClipboard/pasteUtils.js.map +1 -1
  24. package/dist/cjs/src/components/variable-picker-v3/context.d.ts +4 -0
  25. package/dist/cjs/src/editor/BikEditor.styles.d.ts +0 -1
  26. package/dist/cjs/src/editor/BikEditor.types.d.ts +0 -2
  27. package/dist/cjs/src/editor/BikEditor.utils.d.ts +4 -8
  28. package/dist/cjs/src/editor/extensions/plainClipboard/ClipboardNormalizationExtension.d.ts +7 -0
  29. package/dist/cjs/src/editor/extensions/plainClipboard/PlainClipboardExtension.d.ts +2 -0
  30. package/dist/cjs/src/editor/extensions/plainClipboard/pasteUtils.d.ts +8 -40
  31. package/dist/cjs/src/icons/Actions/Common actions/SendAirplane2.d.ts +7 -0
  32. package/dist/cjs/src/icons/BIK AI specific/AiAgent.d.ts +7 -0
  33. package/dist/cjs/src/icons/Informational/Communication/AtSymbol.d.ts +7 -0
  34. package/dist/cjs/src/icons/Informational/Communication/Hangup.d.ts +7 -0
  35. package/dist/cjs/src/icons/Informational/Communication/IncomingCall.d.ts +7 -0
  36. package/dist/cjs/src/icons/Informational/Communication/OutgoingCall.d.ts +7 -0
  37. package/dist/cjs/src/icons/Informational/Communication/PhoneCall.d.ts +7 -0
  38. package/dist/cjs/src/icons/Informational/Communication/Transcript.d.ts +7 -0
  39. package/dist/cjs/src/icons/Informational/Files and folders/BookOpen.d.ts +7 -0
  40. package/dist/cjs/src/icons/Informational/Identity/AiVoiceAgent.d.ts +7 -0
  41. package/dist/cjs/src/icons/Social/Channels/Subdued/FbCommentTicket.d.ts +6 -0
  42. package/dist/cjs/src/icons/Social/Channels/Subdued/FbTicket.d.ts +6 -0
  43. package/dist/cjs/src/icons/Social/Channels/Subdued/IgCommentTicket.d.ts +6 -0
  44. package/dist/cjs/src/icons/Social/Channels/Subdued/IgTicket.d.ts +6 -0
  45. package/dist/cjs/src/icons/Social/Channels/Subdued/MailTicket.d.ts +6 -0
  46. package/dist/cjs/src/icons/Social/Channels/Subdued/PhoneTicket.d.ts +6 -0
  47. package/dist/cjs/src/icons/Social/Channels/Subdued/TaskTicket.d.ts +6 -0
  48. package/dist/cjs/src/icons/Social/Channels/Subdued/WhatsappTicket.d.ts +6 -0
  49. package/dist/cjs/src/icons/Social/Channels/Subdued/index.d.ts +8 -0
  50. package/dist/esm/components/list-item/themes.js +1 -1
  51. package/dist/esm/components/list-item/themes.js.map +1 -1
  52. package/dist/esm/components/variable-picker-v3/Content.js +1 -1
  53. package/dist/esm/components/variable-picker-v3/Content.js.map +1 -1
  54. package/dist/esm/components/variable-picker-v3/SubHeaderItems.js +1 -1
  55. package/dist/esm/components/variable-picker-v3/SubHeaderItems.js.map +1 -1
  56. package/dist/esm/components/variable-picker-v3/context.js +1 -1
  57. package/dist/esm/components/variable-picker-v3/context.js.map +1 -1
  58. package/dist/esm/editor/BikEditor.js +1 -1
  59. package/dist/esm/editor/BikEditor.js.map +1 -1
  60. package/dist/esm/editor/BikEditor.styles.js +7 -17
  61. package/dist/esm/editor/BikEditor.styles.js.map +1 -1
  62. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  63. package/dist/esm/editor/BikEditor.utils.js +1 -1
  64. package/dist/esm/editor/BikEditor.utils.js.map +1 -1
  65. package/dist/esm/editor/extensions/buildExtensions.js +1 -1
  66. package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
  67. package/dist/esm/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js +2 -0
  68. package/dist/esm/editor/extensions/plainClipboard/ClipboardNormalizationExtension.js.map +1 -0
  69. package/dist/esm/editor/extensions/plainClipboard/PlainClipboardExtension.js +2 -0
  70. package/dist/esm/editor/extensions/plainClipboard/PlainClipboardExtension.js.map +1 -0
  71. package/dist/esm/editor/extensions/plainClipboard/pasteUtils.js +1 -1
  72. package/dist/esm/editor/extensions/plainClipboard/pasteUtils.js.map +1 -1
  73. package/dist/esm/src/components/variable-picker-v3/context.d.ts +4 -0
  74. package/dist/esm/src/editor/BikEditor.styles.d.ts +0 -1
  75. package/dist/esm/src/editor/BikEditor.types.d.ts +0 -2
  76. package/dist/esm/src/editor/BikEditor.utils.d.ts +4 -8
  77. package/dist/esm/src/editor/extensions/plainClipboard/ClipboardNormalizationExtension.d.ts +7 -0
  78. package/dist/esm/src/editor/extensions/plainClipboard/PlainClipboardExtension.d.ts +2 -0
  79. package/dist/esm/src/editor/extensions/plainClipboard/pasteUtils.d.ts +8 -40
  80. package/dist/esm/src/icons/Actions/Common actions/SendAirplane2.d.ts +7 -0
  81. package/dist/esm/src/icons/BIK AI specific/AiAgent.d.ts +7 -0
  82. package/dist/esm/src/icons/Informational/Communication/AtSymbol.d.ts +7 -0
  83. package/dist/esm/src/icons/Informational/Communication/Hangup.d.ts +7 -0
  84. package/dist/esm/src/icons/Informational/Communication/IncomingCall.d.ts +7 -0
  85. package/dist/esm/src/icons/Informational/Communication/OutgoingCall.d.ts +7 -0
  86. package/dist/esm/src/icons/Informational/Communication/PhoneCall.d.ts +7 -0
  87. package/dist/esm/src/icons/Informational/Communication/Transcript.d.ts +7 -0
  88. package/dist/esm/src/icons/Informational/Files and folders/BookOpen.d.ts +7 -0
  89. package/dist/esm/src/icons/Informational/Identity/AiVoiceAgent.d.ts +7 -0
  90. package/dist/esm/src/icons/Social/Channels/Subdued/FbCommentTicket.d.ts +6 -0
  91. package/dist/esm/src/icons/Social/Channels/Subdued/FbTicket.d.ts +6 -0
  92. package/dist/esm/src/icons/Social/Channels/Subdued/IgCommentTicket.d.ts +6 -0
  93. package/dist/esm/src/icons/Social/Channels/Subdued/IgTicket.d.ts +6 -0
  94. package/dist/esm/src/icons/Social/Channels/Subdued/MailTicket.d.ts +6 -0
  95. package/dist/esm/src/icons/Social/Channels/Subdued/PhoneTicket.d.ts +6 -0
  96. package/dist/esm/src/icons/Social/Channels/Subdued/TaskTicket.d.ts +6 -0
  97. package/dist/esm/src/icons/Social/Channels/Subdued/WhatsappTicket.d.ts +6 -0
  98. package/dist/esm/src/icons/Social/Channels/Subdued/index.d.ts +8 -0
  99. package/package.json +1 -1
  100. package/dist/cjs/editor/extensions/plainClipboard/PasteNormalizationExtension.js +0 -2
  101. package/dist/cjs/editor/extensions/plainClipboard/PasteNormalizationExtension.js.map +0 -1
  102. package/dist/cjs/src/editor/extensions/plainClipboard/PasteNormalizationExtension.d.ts +0 -13
  103. package/dist/esm/editor/extensions/plainClipboard/PasteNormalizationExtension.js +0 -2
  104. package/dist/esm/editor/extensions/plainClipboard/PasteNormalizationExtension.js.map +0 -1
  105. 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>;
@@ -0,0 +1,2 @@
1
+ import { Extension } from '@tiptap/core';
2
+ export declare const PlainClipboardExtension: Extension<any, any>;
@@ -1,53 +1,21 @@
1
- import { Fragment, Schema, Slice } from '@tiptap/pm/model';
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
- * Strip trailing `<br>` from content paragraphs in the DOM.
18
- * Google Docs adds a `<br>` at the end of non-empty paragraphs as a cursor
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 normalizeHardBreaks(fragment: Fragment): Fragment;
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 messaging
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,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgFbCommentTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgFbCommentTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgFbTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgFbTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgIgCommentTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgIgCommentTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgIgTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgIgTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgMailTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgMailTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgPhoneTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgPhoneTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgTaskTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgTaskTicket;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ interface Props extends SVGProps<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ declare const SvgWhatsappTicket: ({ size, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
6
+ export default SvgWhatsappTicket;
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@bikdotai/bik-component-library",
3
- "version": "0.0.809-beta.17",
3
+ "version": "0.0.809-beta.19",
4
4
  "description": "Bik Component Library",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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>;