@webiny/lexical-nodes 6.3.0 → 6.4.0-beta.0
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/FontColorNode.js +94 -119
- package/FontColorNode.js.map +1 -1
- package/HeadingNode.js +160 -183
- package/HeadingNode.js.map +1 -1
- package/ImageNode.js +101 -131
- package/ImageNode.js.map +1 -1
- package/LinkNode.js +228 -315
- package/LinkNode.js.map +1 -1
- package/ListItemNode.js +249 -320
- package/ListItemNode.js.map +1 -1
- package/ListNode.js +174 -223
- package/ListNode.js.map +1 -1
- package/ParagraphNode.js +119 -148
- package/ParagraphNode.js.map +1 -1
- package/QuoteNode.js +97 -102
- package/QuoteNode.js.map +1 -1
- package/components/ImageNode/ImageComponent.js +117 -147
- package/components/ImageNode/ImageComponent.js.map +1 -1
- package/components/ImageNode/ImageResizer.js +167 -194
- package/components/ImageNode/ImageResizer.js.map +1 -1
- package/generateInitialLexicalValue.js +20 -23
- package/generateInitialLexicalValue.js.map +1 -1
- package/index.js +38 -26
- package/index.js.map +1 -1
- package/package.json +4 -4
- package/prepareLexicalState.js +30 -43
- package/prepareLexicalState.js.map +1 -1
- package/types.js +0 -3
- package/utils/clearNodeFormating.js +14 -15
- package/utils/clearNodeFormating.js.map +1 -1
- package/utils/formatList.js +277 -368
- package/utils/formatList.js.map +1 -1
- package/utils/formatToHeading.js +6 -13
- package/utils/formatToHeading.js.map +1 -1
- package/utils/formatToParagraph.js +6 -7
- package/utils/formatToParagraph.js.map +1 -1
- package/utils/formatToQuote.js +6 -13
- package/utils/formatToQuote.js.map +1 -1
- package/utils/getStyleId.js +6 -11
- package/utils/getStyleId.js.map +1 -1
- package/utils/listNode.js +60 -84
- package/utils/listNode.js.map +1 -1
- package/utils/toggleLink.js +67 -118
- package/utils/toggleLink.js.map +1 -1
- package/types.js.map +0 -1
package/HeadingNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["$applyNodeReplacement","setNodeIndentFromDOM","addClassNamesToElement","HeadingNode","BaseHeadingNode","Theme","getStyleId","isGoogleDocsTitle","domNode","nodeName","toLowerCase","style","fontSize","$convertHeadingElement","element","node","$createHeadingNode","setFormat","textAlign","constructor","tag","options","styleId","key","className","__styleId","__className","setStyleId","setClassName","getClassName","getType","clone","getTag","getKey","createDOM","config","theme","from","updateElementWithThemeClasses","exportDOM","editor","base","classList","add","importDOM","h1","conversion","priority","h2","h3","h4","h5","h6","p","firstChild","span","importJSON","serializedNode","format","setIndent","indent","setDirection","direction","styles","exportJSON","type","insertNewAfter","selection","restoreSelection","newElement","getDirection","insertAfter","collapseAtStart","children","getChildren","forEach","child","append","replace","setDefaultTypography","typographyStyle","getTypographyByTag","byStyleId","getTypographyById","id","$isHeadingNode"],"sources":["HeadingNode.ts"],"sourcesContent":["import type {\n EditorConfig,\n LexicalNode,\n NodeKey,\n RangeSelection,\n Spread,\n LexicalEditor,\n DOMExportOutput,\n DOMConversionMap\n} from \"lexical\";\nimport { $applyNodeReplacement, setNodeIndentFromDOM, addClassNamesToElement } from \"lexical\";\nimport type {\n HeadingTagType,\n SerializedHeadingNode as BaseSerializedHeadingNode\n} from \"@lexical/rich-text\";\nimport { HeadingNode as BaseHeadingNode } from \"@lexical/rich-text\";\nimport { Theme } from \"@webiny/lexical-theme\";\nimport type { ParagraphNode } from \"~/ParagraphNode.js\";\nimport type { TypographyStylesNode, ThemeStyleValue } from \"~/types.js\";\nimport { getStyleId } from \"~/utils/getStyleId.js\";\n\nexport type SerializeHeadingNode = Spread<\n {\n styles?: ThemeStyleValue[];\n styleId?: string;\n className?: string;\n type: \"wby-heading\";\n },\n BaseSerializedHeadingNode\n>;\n\ninterface HeadingNodeOptions {\n className?: string;\n styleId?: string;\n key?: NodeKey;\n}\n\nfunction isGoogleDocsTitle(domNode: HTMLElement) {\n if (domNode.nodeName.toLowerCase() === \"span\") {\n return domNode.style.fontSize === \"26pt\";\n }\n return false;\n}\nfunction $convertHeadingElement(element: HTMLElement) {\n const nodeName = element.nodeName.toLowerCase();\n let node = null;\n if (\n nodeName === \"h1\" ||\n nodeName === \"h2\" ||\n nodeName === \"h3\" ||\n nodeName === \"h4\" ||\n nodeName === \"h5\" ||\n nodeName === \"h6\"\n ) {\n node = $createHeadingNode(nodeName);\n if (element.style !== null) {\n setNodeIndentFromDOM(element, node);\n node.setFormat(element.style.textAlign as any);\n }\n }\n return {\n node\n };\n}\n\nexport class HeadingNode extends BaseHeadingNode implements TypographyStylesNode {\n private __styleId: string | undefined;\n private __className: string | undefined;\n\n constructor(tag: HeadingTagType, options: HeadingNodeOptions = {}) {\n const { styleId, key, className } = options;\n\n super(tag, key);\n\n this.__styleId = styleId;\n this.__className = className;\n }\n\n getStyleId(): string | undefined {\n return this.__styleId;\n }\n\n setStyleId(styleId: string | undefined) {\n this.__styleId = styleId;\n }\n\n setClassName(className: string | undefined) {\n this.__className = className;\n }\n\n getClassName(): string | undefined {\n return this.__className;\n }\n\n static override getType(): string {\n return \"wby-heading\";\n }\n\n static override clone(node: HeadingNode): HeadingNode {\n return new HeadingNode(node.getTag(), {\n key: node.getKey(),\n styleId: node.getStyleId(),\n className: node.getClassName()\n });\n }\n\n override createDOM(config: EditorConfig): HTMLElement {\n const element = super.createDOM(config);\n\n const theme = Theme.from(config.theme);\n\n return this.updateElementWithThemeClasses(element, theme);\n }\n\n override exportDOM(editor: LexicalEditor): DOMExportOutput {\n const base = super.exportDOM(editor);\n\n const element = base.element as HTMLElement;\n if (element && this.__className) {\n element.classList.add(this.__className);\n }\n\n return { ...base, element };\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n h1: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h2: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h3: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h4: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h5: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h6: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n p: node => {\n // domNode is a <p> since we matched it by nodeName\n const firstChild = node.firstChild as HTMLElement;\n if (firstChild !== null && isGoogleDocsTitle(firstChild)) {\n return {\n conversion: () => ({\n node: null\n }),\n priority: 3\n };\n }\n return null;\n },\n span: node => {\n if (isGoogleDocsTitle(node)) {\n return {\n conversion: () => {\n return {\n node: $createHeadingNode(\"h1\")\n };\n },\n priority: 3\n };\n }\n return null;\n }\n };\n }\n\n static override importJSON(serializedNode: SerializeHeadingNode): BaseHeadingNode {\n const node = $createHeadingNode(serializedNode.tag);\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n\n const styleId = getStyleId({\n styleId: serializedNode.styleId,\n styles: serializedNode.styles\n });\n\n node.setStyleId(styleId);\n node.setClassName(serializedNode.className);\n\n return node;\n }\n\n override exportJSON(): SerializeHeadingNode {\n return {\n ...super.exportJSON(),\n type: \"wby-heading\",\n styleId: this.__styleId,\n className: this.__className\n };\n }\n\n // Mutation\n override insertNewAfter(\n selection?: RangeSelection,\n restoreSelection = true\n ): ParagraphNode | HeadingNode {\n // Next line for headings are always headings with the same tag\n const newElement = $createHeadingNode(this.getTag());\n const direction = this.getDirection();\n newElement.setDirection(direction);\n this.insertAfter(newElement, restoreSelection);\n return newElement;\n }\n\n override collapseAtStart(): true {\n const newElement = $createHeadingNode(this.getTag());\n const children = this.getChildren();\n children.forEach(child => newElement.append(child));\n this.replace(newElement);\n return true;\n }\n\n protected updateElementWithThemeClasses(element: HTMLElement, theme: Theme): HTMLElement {\n if (!this.__styleId || !this.__className) {\n this.setDefaultTypography(theme, this.__styleId);\n }\n\n if (this.__className) {\n addClassNamesToElement(element, this.__className);\n }\n\n return element;\n }\n\n private setDefaultTypography(theme: Theme, styleId?: string) {\n let typographyStyle = theme.getTypographyByTag(this.getTag());\n if (styleId) {\n const byStyleId = theme.getTypographyById(styleId);\n if (byStyleId) {\n typographyStyle = byStyleId;\n }\n }\n\n if (typographyStyle) {\n this.__styleId = typographyStyle.id;\n this.__className = typographyStyle.className;\n }\n }\n}\n\nexport function $createHeadingNode(tag: HeadingTagType, styleId?: string): HeadingNode {\n return $applyNodeReplacement(new HeadingNode(tag, { styleId }));\n}\n\nexport function $isHeadingNode(node: LexicalNode | null | undefined): node is HeadingNode {\n return node instanceof HeadingNode;\n}\n"],"mappings":"AAUA,SAASA,qBAAqB,EAAEC,oBAAoB,EAAEC,sBAAsB,QAAQ,SAAS;AAK7F,SAASC,WAAW,IAAIC,eAAe,QAAQ,oBAAoB;AACnE,SAASC,KAAK,QAAQ,uBAAuB;AAG7C,SAASC,UAAU;AAkBnB,SAASC,iBAAiBA,CAACC,OAAoB,EAAE;EAC7C,IAAIA,OAAO,CAACC,QAAQ,CAACC,WAAW,CAAC,CAAC,KAAK,MAAM,EAAE;IAC3C,OAAOF,OAAO,CAACG,KAAK,CAACC,QAAQ,KAAK,MAAM;EAC5C;EACA,OAAO,KAAK;AAChB;AACA,SAASC,sBAAsBA,CAACC,OAAoB,EAAE;EAClD,MAAML,QAAQ,GAAGK,OAAO,CAACL,QAAQ,CAACC,WAAW,CAAC,CAAC;EAC/C,IAAIK,IAAI,GAAG,IAAI;EACf,IACIN,QAAQ,KAAK,IAAI,IACjBA,QAAQ,KAAK,IAAI,IACjBA,QAAQ,KAAK,IAAI,IACjBA,QAAQ,KAAK,IAAI,IACjBA,QAAQ,KAAK,IAAI,IACjBA,QAAQ,KAAK,IAAI,EACnB;IACEM,IAAI,GAAGC,kBAAkB,CAACP,QAAQ,CAAC;IACnC,IAAIK,OAAO,CAACH,KAAK,KAAK,IAAI,EAAE;MACxBV,oBAAoB,CAACa,OAAO,EAAEC,IAAI,CAAC;MACnCA,IAAI,CAACE,SAAS,CAACH,OAAO,CAACH,KAAK,CAACO,SAAgB,CAAC;IAClD;EACJ;EACA,OAAO;IACHH;EACJ,CAAC;AACL;AAEA,OAAO,MAAMZ,WAAW,SAASC,eAAe,CAAiC;EAI7Ee,WAAWA,CAACC,GAAmB,EAAEC,OAA2B,GAAG,CAAC,CAAC,EAAE;IAC/D,MAAM;MAAEC,OAAO;MAAEC,GAAG;MAAEC;IAAU,CAAC,GAAGH,OAAO;IAE3C,KAAK,CAACD,GAAG,EAAEG,GAAG,CAAC;IAEf,IAAI,CAACE,SAAS,GAAGH,OAAO;IACxB,IAAI,CAACI,WAAW,GAAGF,SAAS;EAChC;EAEAlB,UAAUA,CAAA,EAAuB;IAC7B,OAAO,IAAI,CAACmB,SAAS;EACzB;EAEAE,UAAUA,CAACL,OAA2B,EAAE;IACpC,IAAI,CAACG,SAAS,GAAGH,OAAO;EAC5B;EAEAM,YAAYA,CAACJ,SAA6B,EAAE;IACxC,IAAI,CAACE,WAAW,GAAGF,SAAS;EAChC;EAEAK,YAAYA,CAAA,EAAuB;IAC/B,OAAO,IAAI,CAACH,WAAW;EAC3B;EAEA,OAAgBI,OAAOA,CAAA,EAAW;IAC9B,OAAO,aAAa;EACxB;EAEA,OAAgBC,KAAKA,CAAChB,IAAiB,EAAe;IAClD,OAAO,IAAIZ,WAAW,CAACY,IAAI,CAACiB,MAAM,CAAC,CAAC,EAAE;MAClCT,GAAG,EAAER,IAAI,CAACkB,MAAM,CAAC,CAAC;MAClBX,OAAO,EAAEP,IAAI,CAACT,UAAU,CAAC,CAAC;MAC1BkB,SAAS,EAAET,IAAI,CAACc,YAAY,CAAC;IACjC,CAAC,CAAC;EACN;EAESK,SAASA,CAACC,MAAoB,EAAe;IAClD,MAAMrB,OAAO,GAAG,KAAK,CAACoB,SAAS,CAACC,MAAM,CAAC;IAEvC,MAAMC,KAAK,GAAG/B,KAAK,CAACgC,IAAI,CAACF,MAAM,CAACC,KAAK,CAAC;IAEtC,OAAO,IAAI,CAACE,6BAA6B,CAACxB,OAAO,EAAEsB,KAAK,CAAC;EAC7D;EAESG,SAASA,CAACC,MAAqB,EAAmB;IACvD,MAAMC,IAAI,GAAG,KAAK,CAACF,SAAS,CAACC,MAAM,CAAC;IAEpC,MAAM1B,OAAO,GAAG2B,IAAI,CAAC3B,OAAsB;IAC3C,IAAIA,OAAO,IAAI,IAAI,CAACY,WAAW,EAAE;MAC7BZ,OAAO,CAAC4B,SAAS,CAACC,GAAG,CAAC,IAAI,CAACjB,WAAW,CAAC;IAC3C;IAEA,OAAO;MAAE,GAAGe,IAAI;MAAE3B;IAAQ,CAAC;EAC/B;EAEA,OAAgB8B,SAASA,CAAA,EAA4B;IACjD,OAAO;MACHC,EAAE,EAAEA,CAAA,MAAO;QACPC,UAAU,EAAEjC,sBAAsB;QAClCkC,QAAQ,EAAE;MACd,CAAC,CAAC;MACFC,EAAE,EAAEA,CAAA,MAAO;QACPF,UAAU,EAAEjC,sBAAsB;QAClCkC,QAAQ,EAAE;MACd,CAAC,CAAC;MACFE,EAAE,EAAEA,CAAA,MAAO;QACPH,UAAU,EAAEjC,sBAAsB;QAClCkC,QAAQ,EAAE;MACd,CAAC,CAAC;MACFG,EAAE,EAAEA,CAAA,MAAO;QACPJ,UAAU,EAAEjC,sBAAsB;QAClCkC,QAAQ,EAAE;MACd,CAAC,CAAC;MACFI,EAAE,EAAEA,CAAA,MAAO;QACPL,UAAU,EAAEjC,sBAAsB;QAClCkC,QAAQ,EAAE;MACd,CAAC,CAAC;MACFK,EAAE,EAAEA,CAAA,MAAO;QACPN,UAAU,EAAEjC,sBAAsB;QAClCkC,QAAQ,EAAE;MACd,CAAC,CAAC;MACFM,CAAC,EAAEtC,IAAI,IAAI;QACP;QACA,MAAMuC,UAAU,GAAGvC,IAAI,CAACuC,UAAyB;QACjD,IAAIA,UAAU,KAAK,IAAI,IAAI/C,iBAAiB,CAAC+C,UAAU,CAAC,EAAE;UACtD,OAAO;YACHR,UAAU,EAAEA,CAAA,MAAO;cACf/B,IAAI,EAAE;YACV,CAAC,CAAC;YACFgC,QAAQ,EAAE;UACd,CAAC;QACL;QACA,OAAO,IAAI;MACf,CAAC;MACDQ,IAAI,EAAExC,IAAI,IAAI;QACV,IAAIR,iBAAiB,CAACQ,IAAI,CAAC,EAAE;UACzB,OAAO;YACH+B,UAAU,EAAEA,CAAA,KAAM;cACd,OAAO;gBACH/B,IAAI,EAAEC,kBAAkB,CAAC,IAAI;cACjC,CAAC;YACL,CAAC;YACD+B,QAAQ,EAAE;UACd,CAAC;QACL;QACA,OAAO,IAAI;MACf;IACJ,CAAC;EACL;EAEA,OAAgBS,UAAUA,CAACC,cAAoC,EAAmB;IAC9E,MAAM1C,IAAI,GAAGC,kBAAkB,CAACyC,cAAc,CAACrC,GAAG,CAAC;IACnDL,IAAI,CAACE,SAAS,CAACwC,cAAc,CAACC,MAAM,CAAC;IACrC3C,IAAI,CAAC4C,SAAS,CAACF,cAAc,CAACG,MAAM,CAAC;IACrC7C,IAAI,CAAC8C,YAAY,CAACJ,cAAc,CAACK,SAAS,CAAC;IAE3C,MAAMxC,OAAO,GAAGhB,UAAU,CAAC;MACvBgB,OAAO,EAAEmC,cAAc,CAACnC,OAAO;MAC/ByC,MAAM,EAAEN,cAAc,CAACM;IAC3B,CAAC,CAAC;IAEFhD,IAAI,CAACY,UAAU,CAACL,OAAO,CAAC;IACxBP,IAAI,CAACa,YAAY,CAAC6B,cAAc,CAACjC,SAAS,CAAC;IAE3C,OAAOT,IAAI;EACf;EAESiD,UAAUA,CAAA,EAAyB;IACxC,OAAO;MACH,GAAG,KAAK,CAACA,UAAU,CAAC,CAAC;MACrBC,IAAI,EAAE,aAAa;MACnB3C,OAAO,EAAE,IAAI,CAACG,SAAS;MACvBD,SAAS,EAAE,IAAI,CAACE;IACpB,CAAC;EACL;;EAEA;EACSwC,cAAcA,CACnBC,SAA0B,EAC1BC,gBAAgB,GAAG,IAAI,EACI;IAC3B;IACA,MAAMC,UAAU,GAAGrD,kBAAkB,CAAC,IAAI,CAACgB,MAAM,CAAC,CAAC,CAAC;IACpD,MAAM8B,SAAS,GAAG,IAAI,CAACQ,YAAY,CAAC,CAAC;IACrCD,UAAU,CAACR,YAAY,CAACC,SAAS,CAAC;IAClC,IAAI,CAACS,WAAW,CAACF,UAAU,EAAED,gBAAgB,CAAC;IAC9C,OAAOC,UAAU;EACrB;EAESG,eAAeA,CAAA,EAAS;IAC7B,MAAMH,UAAU,GAAGrD,kBAAkB,CAAC,IAAI,CAACgB,MAAM,CAAC,CAAC,CAAC;IACpD,MAAMyC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAC,CAAC;IACnCD,QAAQ,CAACE,OAAO,CAACC,KAAK,IAAIP,UAAU,CAACQ,MAAM,CAACD,KAAK,CAAC,CAAC;IACnD,IAAI,CAACE,OAAO,CAACT,UAAU,CAAC;IACxB,OAAO,IAAI;EACf;EAEU/B,6BAA6BA,CAACxB,OAAoB,EAAEsB,KAAY,EAAe;IACrF,IAAI,CAAC,IAAI,CAACX,SAAS,IAAI,CAAC,IAAI,CAACC,WAAW,EAAE;MACtC,IAAI,CAACqD,oBAAoB,CAAC3C,KAAK,EAAE,IAAI,CAACX,SAAS,CAAC;IACpD;IAEA,IAAI,IAAI,CAACC,WAAW,EAAE;MAClBxB,sBAAsB,CAACY,OAAO,EAAE,IAAI,CAACY,WAAW,CAAC;IACrD;IAEA,OAAOZ,OAAO;EAClB;EAEQiE,oBAAoBA,CAAC3C,KAAY,EAAEd,OAAgB,EAAE;IACzD,IAAI0D,eAAe,GAAG5C,KAAK,CAAC6C,kBAAkB,CAAC,IAAI,CAACjD,MAAM,CAAC,CAAC,CAAC;IAC7D,IAAIV,OAAO,EAAE;MACT,MAAM4D,SAAS,GAAG9C,KAAK,CAAC+C,iBAAiB,CAAC7D,OAAO,CAAC;MAClD,IAAI4D,SAAS,EAAE;QACXF,eAAe,GAAGE,SAAS;MAC/B;IACJ;IAEA,IAAIF,eAAe,EAAE;MACjB,IAAI,CAACvD,SAAS,GAAGuD,eAAe,CAACI,EAAE;MACnC,IAAI,CAAC1D,WAAW,GAAGsD,eAAe,CAACxD,SAAS;IAChD;EACJ;AACJ;AAEA,OAAO,SAASR,kBAAkBA,CAACI,GAAmB,EAAEE,OAAgB,EAAe;EACnF,OAAOtB,qBAAqB,CAAC,IAAIG,WAAW,CAACiB,GAAG,EAAE;IAAEE;EAAQ,CAAC,CAAC,CAAC;AACnE;AAEA,OAAO,SAAS+D,cAAcA,CAACtE,IAAoC,EAAuB;EACtF,OAAOA,IAAI,YAAYZ,WAAW;AACtC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"HeadingNode.js","sources":["../src/HeadingNode.ts"],"sourcesContent":["import type {\n EditorConfig,\n LexicalNode,\n NodeKey,\n RangeSelection,\n Spread,\n LexicalEditor,\n DOMExportOutput,\n DOMConversionMap\n} from \"lexical\";\nimport { $applyNodeReplacement, setNodeIndentFromDOM, addClassNamesToElement } from \"lexical\";\nimport type {\n HeadingTagType,\n SerializedHeadingNode as BaseSerializedHeadingNode\n} from \"@lexical/rich-text\";\nimport { HeadingNode as BaseHeadingNode } from \"@lexical/rich-text\";\nimport { Theme } from \"@webiny/lexical-theme\";\nimport type { ParagraphNode } from \"~/ParagraphNode.js\";\nimport type { TypographyStylesNode, ThemeStyleValue } from \"~/types.js\";\nimport { getStyleId } from \"~/utils/getStyleId.js\";\n\nexport type SerializeHeadingNode = Spread<\n {\n styles?: ThemeStyleValue[];\n styleId?: string;\n className?: string;\n type: \"wby-heading\";\n },\n BaseSerializedHeadingNode\n>;\n\ninterface HeadingNodeOptions {\n className?: string;\n styleId?: string;\n key?: NodeKey;\n}\n\nfunction isGoogleDocsTitle(domNode: HTMLElement) {\n if (domNode.nodeName.toLowerCase() === \"span\") {\n return domNode.style.fontSize === \"26pt\";\n }\n return false;\n}\nfunction $convertHeadingElement(element: HTMLElement) {\n const nodeName = element.nodeName.toLowerCase();\n let node = null;\n if (\n nodeName === \"h1\" ||\n nodeName === \"h2\" ||\n nodeName === \"h3\" ||\n nodeName === \"h4\" ||\n nodeName === \"h5\" ||\n nodeName === \"h6\"\n ) {\n node = $createHeadingNode(nodeName);\n if (element.style !== null) {\n setNodeIndentFromDOM(element, node);\n node.setFormat(element.style.textAlign as any);\n }\n }\n return {\n node\n };\n}\n\nexport class HeadingNode extends BaseHeadingNode implements TypographyStylesNode {\n private __styleId: string | undefined;\n private __className: string | undefined;\n\n constructor(tag: HeadingTagType, options: HeadingNodeOptions = {}) {\n const { styleId, key, className } = options;\n\n super(tag, key);\n\n this.__styleId = styleId;\n this.__className = className;\n }\n\n getStyleId(): string | undefined {\n return this.__styleId;\n }\n\n setStyleId(styleId: string | undefined) {\n this.__styleId = styleId;\n }\n\n setClassName(className: string | undefined) {\n this.__className = className;\n }\n\n getClassName(): string | undefined {\n return this.__className;\n }\n\n static override getType(): string {\n return \"wby-heading\";\n }\n\n static override clone(node: HeadingNode): HeadingNode {\n return new HeadingNode(node.getTag(), {\n key: node.getKey(),\n styleId: node.getStyleId(),\n className: node.getClassName()\n });\n }\n\n override createDOM(config: EditorConfig): HTMLElement {\n const element = super.createDOM(config);\n\n const theme = Theme.from(config.theme);\n\n return this.updateElementWithThemeClasses(element, theme);\n }\n\n override exportDOM(editor: LexicalEditor): DOMExportOutput {\n const base = super.exportDOM(editor);\n\n const element = base.element as HTMLElement;\n if (element && this.__className) {\n element.classList.add(this.__className);\n }\n\n return { ...base, element };\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n h1: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h2: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h3: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h4: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h5: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n h6: () => ({\n conversion: $convertHeadingElement,\n priority: 0\n }),\n p: node => {\n // domNode is a <p> since we matched it by nodeName\n const firstChild = node.firstChild as HTMLElement;\n if (firstChild !== null && isGoogleDocsTitle(firstChild)) {\n return {\n conversion: () => ({\n node: null\n }),\n priority: 3\n };\n }\n return null;\n },\n span: node => {\n if (isGoogleDocsTitle(node)) {\n return {\n conversion: () => {\n return {\n node: $createHeadingNode(\"h1\")\n };\n },\n priority: 3\n };\n }\n return null;\n }\n };\n }\n\n static override importJSON(serializedNode: SerializeHeadingNode): BaseHeadingNode {\n const node = $createHeadingNode(serializedNode.tag);\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n\n const styleId = getStyleId({\n styleId: serializedNode.styleId,\n styles: serializedNode.styles\n });\n\n node.setStyleId(styleId);\n node.setClassName(serializedNode.className);\n\n return node;\n }\n\n override exportJSON(): SerializeHeadingNode {\n return {\n ...super.exportJSON(),\n type: \"wby-heading\",\n styleId: this.__styleId,\n className: this.__className\n };\n }\n\n // Mutation\n override insertNewAfter(\n selection?: RangeSelection,\n restoreSelection = true\n ): ParagraphNode | HeadingNode {\n // Next line for headings are always headings with the same tag\n const newElement = $createHeadingNode(this.getTag());\n const direction = this.getDirection();\n newElement.setDirection(direction);\n this.insertAfter(newElement, restoreSelection);\n return newElement;\n }\n\n override collapseAtStart(): true {\n const newElement = $createHeadingNode(this.getTag());\n const children = this.getChildren();\n children.forEach(child => newElement.append(child));\n this.replace(newElement);\n return true;\n }\n\n protected updateElementWithThemeClasses(element: HTMLElement, theme: Theme): HTMLElement {\n if (!this.__styleId || !this.__className) {\n this.setDefaultTypography(theme, this.__styleId);\n }\n\n if (this.__className) {\n addClassNamesToElement(element, this.__className);\n }\n\n return element;\n }\n\n private setDefaultTypography(theme: Theme, styleId?: string) {\n let typographyStyle = theme.getTypographyByTag(this.getTag());\n if (styleId) {\n const byStyleId = theme.getTypographyById(styleId);\n if (byStyleId) {\n typographyStyle = byStyleId;\n }\n }\n\n if (typographyStyle) {\n this.__styleId = typographyStyle.id;\n this.__className = typographyStyle.className;\n }\n }\n}\n\nexport function $createHeadingNode(tag: HeadingTagType, styleId?: string): HeadingNode {\n return $applyNodeReplacement(new HeadingNode(tag, { styleId }));\n}\n\nexport function $isHeadingNode(node: LexicalNode | null | undefined): node is HeadingNode {\n return node instanceof HeadingNode;\n}\n"],"names":["isGoogleDocsTitle","domNode","$convertHeadingElement","element","nodeName","node","$createHeadingNode","setNodeIndentFromDOM","HeadingNode","BaseHeadingNode","tag","options","styleId","key","className","config","theme","Theme","editor","base","firstChild","serializedNode","getStyleId","selection","restoreSelection","newElement","direction","children","child","addClassNamesToElement","typographyStyle","byStyleId","$applyNodeReplacement","$isHeadingNode"],"mappings":"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"}
|
package/ImageNode.js
CHANGED
|
@@ -1,138 +1,108 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
import React, { Suspense } from "react";
|
|
1
|
+
import react, { Suspense } from "react";
|
|
9
2
|
import { $applyNodeReplacement, DecoratorNode } from "lexical";
|
|
10
|
-
const ImageComponent = /*#__PURE__*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
3
|
+
const ImageComponent = /*#__PURE__*/ react.lazy(()=>import("./components/ImageNode/ImageComponent.js"));
|
|
4
|
+
class ImageNode extends DecoratorNode {
|
|
5
|
+
static getType() {
|
|
6
|
+
return "wby-image";
|
|
7
|
+
}
|
|
8
|
+
static clone(node) {
|
|
9
|
+
return new ImageNode({
|
|
10
|
+
id: node.__id,
|
|
11
|
+
src: node.__src,
|
|
12
|
+
altText: node.__altText,
|
|
13
|
+
maxWidth: node.__maxWidth,
|
|
14
|
+
width: node.__width,
|
|
15
|
+
height: node.__height
|
|
16
|
+
}, node.__key);
|
|
17
|
+
}
|
|
18
|
+
static importJSON(serializedNode) {
|
|
19
|
+
const { id, altText, height, width, maxWidth, src } = serializedNode;
|
|
20
|
+
return $createImageNode({
|
|
21
|
+
id,
|
|
22
|
+
altText,
|
|
23
|
+
height,
|
|
24
|
+
maxWidth,
|
|
25
|
+
src,
|
|
26
|
+
width
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
exportDOM() {
|
|
30
|
+
const element = document.createElement("img");
|
|
31
|
+
element.setAttribute("id", this.__id);
|
|
32
|
+
element.setAttribute("src", this.__src);
|
|
33
|
+
element.setAttribute("alt", this.__altText);
|
|
34
|
+
element.setAttribute("width", this.__width.toString());
|
|
35
|
+
element.setAttribute("height", this.__height.toString());
|
|
36
|
+
return {
|
|
37
|
+
element
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
static importDOM() {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
constructor(props, key){
|
|
44
|
+
super(key);
|
|
45
|
+
this.__id = props.id;
|
|
46
|
+
this.__src = props.src;
|
|
47
|
+
this.__altText = props.altText;
|
|
48
|
+
this.__maxWidth = props.maxWidth;
|
|
49
|
+
this.__width = props.width || "inherit";
|
|
50
|
+
this.__height = props.height || "inherit";
|
|
51
|
+
}
|
|
52
|
+
exportJSON() {
|
|
53
|
+
return {
|
|
54
|
+
id: this.__id,
|
|
55
|
+
src: this.getSrc(),
|
|
56
|
+
altText: this.getAltText(),
|
|
57
|
+
width: "inherit" === this.__width ? 0 : this.__width,
|
|
58
|
+
height: "inherit" === this.__height ? 0 : this.__height,
|
|
59
|
+
maxWidth: this.__maxWidth,
|
|
60
|
+
type: this.getType(),
|
|
61
|
+
version: 1
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
setWidthAndHeight(width, height) {
|
|
65
|
+
const writable = this.getWritable();
|
|
66
|
+
writable.__width = width;
|
|
67
|
+
writable.__height = height;
|
|
68
|
+
}
|
|
69
|
+
createDOM(config) {
|
|
70
|
+
const span = document.createElement("span");
|
|
71
|
+
const theme = config.theme;
|
|
72
|
+
const className = theme.image;
|
|
73
|
+
if (void 0 !== className) span.className = className;
|
|
74
|
+
return span;
|
|
75
|
+
}
|
|
76
|
+
updateDOM() {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
getSrc() {
|
|
80
|
+
return this.__src;
|
|
81
|
+
}
|
|
82
|
+
getAltText() {
|
|
83
|
+
return this.__altText;
|
|
84
|
+
}
|
|
85
|
+
decorate() {
|
|
86
|
+
return /*#__PURE__*/ react.createElement(Suspense, {
|
|
87
|
+
fallback: null
|
|
88
|
+
}, /*#__PURE__*/ react.createElement(ImageComponent, {
|
|
89
|
+
id: this.__id,
|
|
90
|
+
src: this.__src,
|
|
91
|
+
altText: this.__altText,
|
|
92
|
+
width: this.__width,
|
|
93
|
+
height: this.__height,
|
|
94
|
+
maxWidth: this.__maxWidth,
|
|
95
|
+
nodeKey: this.getKey(),
|
|
96
|
+
resizable: true
|
|
97
|
+
}));
|
|
104
98
|
}
|
|
105
|
-
return span;
|
|
106
|
-
}
|
|
107
|
-
updateDOM() {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
getSrc() {
|
|
111
|
-
return this.__src;
|
|
112
|
-
}
|
|
113
|
-
getAltText() {
|
|
114
|
-
return this.__altText;
|
|
115
|
-
}
|
|
116
|
-
decorate() {
|
|
117
|
-
return /*#__PURE__*/React.createElement(Suspense, {
|
|
118
|
-
fallback: null
|
|
119
|
-
}, /*#__PURE__*/React.createElement(ImageComponent, {
|
|
120
|
-
id: this.__id,
|
|
121
|
-
src: this.__src,
|
|
122
|
-
altText: this.__altText,
|
|
123
|
-
width: this.__width,
|
|
124
|
-
height: this.__height,
|
|
125
|
-
maxWidth: this.__maxWidth,
|
|
126
|
-
nodeKey: this.getKey(),
|
|
127
|
-
resizable: true
|
|
128
|
-
}));
|
|
129
|
-
}
|
|
130
99
|
}
|
|
131
|
-
|
|
132
|
-
|
|
100
|
+
function $createImageNode(props, key) {
|
|
101
|
+
return $applyNodeReplacement(new ImageNode(props, key));
|
|
133
102
|
}
|
|
134
|
-
|
|
135
|
-
|
|
103
|
+
function $isImageNode(node) {
|
|
104
|
+
return node instanceof ImageNode;
|
|
136
105
|
}
|
|
106
|
+
export { $createImageNode, $isImageNode, ImageNode };
|
|
137
107
|
|
|
138
108
|
//# sourceMappingURL=ImageNode.js.map
|
package/ImageNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ImageNode.js","sources":["../src/ImageNode.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport React, { Suspense } from \"react\";\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread\n} from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode } from \"lexical\";\n\nconst ImageComponent = React.lazy(() => {\n return import(\n /* webpackChunkName: \"lexical-image\" */\n \"./components/ImageNode/ImageComponent.js\"\n );\n});\n\nexport type SerializedImageNode = Spread<\n {\n id: string;\n altText: string;\n height?: number;\n maxWidth: number;\n src: string;\n width?: number;\n },\n SerializedLexicalNode\n>;\n\nexport interface ImageNodeProps {\n id: string;\n src: string;\n altText: string;\n maxWidth: number;\n width?: \"inherit\" | number;\n height?: \"inherit\" | number;\n}\n\nexport class ImageNode extends DecoratorNode<React.JSX.Element> {\n __id: string;\n __src: string;\n __altText: string;\n __width: \"inherit\" | number;\n __height: \"inherit\" | number;\n __maxWidth: number;\n\n static override getType(): string {\n return \"wby-image\";\n }\n\n static override clone(node: ImageNode): ImageNode {\n return new ImageNode(\n {\n id: node.__id,\n src: node.__src,\n altText: node.__altText,\n maxWidth: node.__maxWidth,\n width: node.__width,\n height: node.__height\n },\n node.__key\n );\n }\n\n static override importJSON(serializedNode: SerializedImageNode): ImageNode {\n const { id, altText, height, width, maxWidth, src } = serializedNode;\n return $createImageNode({\n id,\n altText,\n height,\n maxWidth,\n src,\n width\n });\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement(\"img\");\n element.setAttribute(\"id\", this.__id);\n element.setAttribute(\"src\", this.__src);\n element.setAttribute(\"alt\", this.__altText);\n element.setAttribute(\"width\", this.__width.toString());\n element.setAttribute(\"height\", this.__height.toString());\n return { element };\n }\n\n /**\n * Control how an HTMLElement is represented in Lexical.\n * DOM data comes from clipboard or parsing HTML to nodes with the available lexical functions.\n * (@see @lexical/html package: https://github.com/facebook/lexical/blob/main/packages/lexical-html/README.md).\n */\n static override importDOM(): DOMConversionMap | null {\n /**\n * By returning 'null' value, we are preventing image node to be created.\n * Example of how to implement and create the node:\n * https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/nodes/ImageNode.tsx#L94\n */\n return null;\n }\n\n constructor(props: ImageNodeProps, key?: NodeKey) {\n super(key);\n this.__id = props.id;\n this.__src = props.src;\n this.__altText = props.altText;\n this.__maxWidth = props.maxWidth;\n this.__width = props.width || \"inherit\";\n this.__height = props.height || \"inherit\";\n }\n\n override exportJSON(): SerializedImageNode {\n return {\n id: this.__id,\n src: this.getSrc(),\n altText: this.getAltText(),\n width: this.__width === \"inherit\" ? 0 : this.__width,\n height: this.__height === \"inherit\" ? 0 : this.__height,\n maxWidth: this.__maxWidth,\n type: this.getType(),\n version: 1\n };\n }\n\n setWidthAndHeight(width: \"inherit\" | number, height: \"inherit\" | number): void {\n const writable = this.getWritable();\n writable.__width = width;\n writable.__height = height;\n }\n\n // View\n override createDOM(config: EditorConfig): HTMLElement {\n const span = document.createElement(\"span\");\n const theme = config.theme;\n const className = theme.image;\n if (className !== undefined) {\n span.className = className;\n }\n return span;\n }\n\n override updateDOM(): false {\n return false;\n }\n\n getSrc(): string {\n return this.__src;\n }\n\n getAltText(): string {\n return this.__altText;\n }\n\n override decorate(): React.JSX.Element {\n return (\n <Suspense fallback={null}>\n <ImageComponent\n id={this.__id}\n src={this.__src}\n altText={this.__altText}\n width={this.__width}\n height={this.__height}\n maxWidth={this.__maxWidth}\n nodeKey={this.getKey()}\n resizable={true}\n />\n </Suspense>\n );\n }\n}\n\nexport function $createImageNode(props: ImageNodeProps, key?: string): ImageNode {\n return $applyNodeReplacement(new ImageNode(props, key));\n}\n\nexport function $isImageNode(node: LexicalNode | null | undefined): node is ImageNode {\n return node instanceof ImageNode;\n}\n"],"names":["ImageComponent","React","ImageNode","DecoratorNode","node","serializedNode","id","altText","height","width","maxWidth","src","$createImageNode","element","document","props","key","writable","config","span","theme","className","undefined","Suspense","$applyNodeReplacement","$isImageNode"],"mappings":"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"}
|