UNPKG

ngx-tiptap

Version:
1 lines 31.1 kB
{"version":3,"file":"ngx-tiptap.mjs","sources":["../../../projects/ngx-tiptap/src/lib/editor.directive.ts","../../../projects/ngx-tiptap/src/lib/floating-menu.directive.ts","../../../projects/ngx-tiptap/src/lib/bubble-menu.directive.ts","../../../projects/ngx-tiptap/src/lib/draggable.directive.ts","../../../projects/ngx-tiptap/src/lib/node-view-content.directive.ts","../../../projects/ngx-tiptap/src/lib/node-view.component.ts","../../../projects/ngx-tiptap/src/lib/AngularRenderer.ts","../../../projects/ngx-tiptap/src/lib/NodeViewRenderer.ts","../../../projects/ngx-tiptap/src/public-api.ts","../../../projects/ngx-tiptap/src/ngx-tiptap.ts"],"sourcesContent":["import {\n AfterViewInit, ChangeDetectorRef, Directive, ElementRef, forwardRef, OnInit, Renderer2, inject,\n input,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Content, Editor, type EditorEvents } from '@tiptap/core';\n\n@Directive({\n selector: 'tiptap[editor], [tiptap][editor], tiptap-editor[editor], [tiptapEditor][editor]',\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TiptapEditorDirective),\n multi: true,\n }],\n})\n\nexport class TiptapEditorDirective implements OnInit, AfterViewInit, ControlValueAccessor {\n protected elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected renderer = inject(Renderer2);\n protected changeDetectorRef = inject(ChangeDetectorRef);\n\n readonly editor = input.required<Editor>();\n readonly outputFormat = input<'json' | 'html'>('html');\n\n protected onChange: (value: Content) => void = () => { /** */ };\n protected onTouched: () => void = () => { /** */ };\n\n // Writes a new value to the element.\n // This methods is called when programmatic changes from model to view are requested.\n writeValue(value: Content): void {\n this.editor().chain().setContent(value, { emitUpdate: false }).run();\n }\n\n // Registers a callback function that is called when the control's value changes in the UI.\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n // Registers a callback function that is called by the forms API on initialization to update the form model on blur.\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Called by the forms api to enable or disable the element\n setDisabledState(isDisabled: boolean): void {\n this.editor().setEditable(!isDisabled);\n this.renderer.setProperty(this.elRef.nativeElement, 'disabled', isDisabled);\n }\n\n protected handleChange = ({ editor, transaction }: EditorEvents['transaction']): void => {\n if (!transaction.docChanged) {\n return;\n }\n\n // Needed for ChangeDetectionStrategy.OnPush to get notified about changes\n this.changeDetectorRef.markForCheck();\n\n if (this.outputFormat() === 'html') {\n this.onChange(editor.getHTML());\n return;\n }\n\n this.onChange(editor.getJSON());\n };\n\n ngOnInit(): void {\n const editor = this.editor();\n\n // take the inner contents and clear the block\n const { innerHTML } = this.elRef.nativeElement;\n this.elRef.nativeElement.innerHTML = '';\n\n // insert the editor in the dom\n this.elRef.nativeElement.append(...Array.from(editor.options.element?.childNodes || []));\n\n // update the options for the editor\n editor.setOptions({ element: this.elRef.nativeElement });\n\n // update content to the editor\n if (innerHTML) {\n editor.chain().setContent(innerHTML, { emitUpdate: false }).run();\n }\n\n // register blur handler to update `touched` property\n editor.on('blur', () => {\n this.onTouched();\n });\n\n // register update handler to listen to changes on update\n editor.on('update', this.handleChange);\n\n // Needed for ChangeDetectionStrategy.OnPush to get notified\n editor.on('selectionUpdate', () => this.changeDetectorRef.markForCheck());\n }\n\n ngAfterViewInit(): void {\n this.changeDetectorRef.detectChanges();\n }\n}\n","import {\n Directive, ElementRef, OnDestroy, OnInit, inject,\n input,\n} from '@angular/core';\nimport { Editor } from '@tiptap/core';\nimport { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu';\n\n@Directive({\n selector: 'tiptap-floating-menu[editor], [tiptapFloatingMenu][editor]',\n})\n\nexport class TiptapFloatingMenuDirective implements OnInit, OnDestroy {\n private elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly pluginKey = input<FloatingMenuPluginProps['pluginKey']>('NgxTiptapFloatingMenu');\n readonly editor = input.required<Editor>();\n readonly options = input<FloatingMenuPluginProps['options']>({});\n readonly shouldShow = input<FloatingMenuPluginProps['shouldShow']>(null);\n\n ngOnInit(): void {\n const editor = this.editor();\n if (!editor) {\n throw new Error('Required: Input `editor`');\n }\n\n editor.registerPlugin(FloatingMenuPlugin({\n pluginKey: this.pluginKey(),\n editor,\n element: this.elRef.nativeElement,\n options: this.options(),\n shouldShow: this.shouldShow(),\n }));\n }\n\n ngOnDestroy(): void {\n this.editor().unregisterPlugin(this.pluginKey());\n }\n}\n","import {\n Directive, ElementRef, OnDestroy,\n OnInit, inject, input,\n} from '@angular/core';\nimport { Editor } from '@tiptap/core';\nimport { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';\n\n@Directive({\n selector: 'tiptap-bubble-menu[editor], [tiptapBubbleMenu][editor]',\n})\nexport class TiptapBubbleMenuDirective implements OnInit, OnDestroy {\n private elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly editor = input.required<Editor>();\n readonly pluginKey = input<BubbleMenuPluginProps['pluginKey']>('NgxTiptapBubbleMenu');\n readonly options = input<BubbleMenuPluginProps['options']>({});\n readonly shouldShow = input<BubbleMenuPluginProps['shouldShow']>(null);\n readonly updateDelay = input<BubbleMenuPluginProps['updateDelay']>();\n\n ngOnInit(): void {\n const editor = this.editor();\n\n editor.registerPlugin(BubbleMenuPlugin({\n pluginKey: this.pluginKey(),\n editor,\n element: this.elRef.nativeElement,\n options: this.options(),\n shouldShow: this.shouldShow(),\n updateDelay: this.updateDelay(),\n }));\n }\n\n ngOnDestroy(): void {\n this.editor().unregisterPlugin(this.pluginKey());\n }\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tiptapDraggable]',\n})\nexport class TiptapDraggableDirective {\n @HostBinding('attr.draggable') draggable = true;\n @HostBinding('attr.data-drag-handle') handle = '';\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tiptapNodeViewContent]',\n})\nexport class TiptapNodeViewContentDirective {\n @HostBinding('attr.data-node-view-content') handle = '';\n @HostBinding('style.white-space') whiteSpace = 'pre-wrap';\n}\n","import { Component, input } from '@angular/core';\nimport type { NodeViewProps } from '@tiptap/core';\n\ntype Inputs = 'editor' | 'node' | 'decorations' | 'innerDecorations' | 'view' | 'selected' | 'extension' | 'HTMLAttributes' | 'getPos' | 'updateAttributes' | 'deleteNode';\ntype NodeViewPropsWithoutInputs = Omit<NodeViewProps, Inputs>;\n\n@Component({\n template: '',\n})\nexport class AngularNodeViewComponent implements NodeViewPropsWithoutInputs {\n readonly editor = input.required<NodeViewProps['editor']>();\n readonly node = input.required<NodeViewProps['node']>();\n readonly decorations = input.required<NodeViewProps['decorations']>();\n readonly innerDecorations = input.required<NodeViewProps['innerDecorations']>();\n readonly view = input.required<NodeViewProps['view']>();\n readonly selected = input.required<NodeViewProps['selected']>();\n readonly extension = input.required<NodeViewProps['extension']>();\n readonly HTMLAttributes = input.required<NodeViewProps['HTMLAttributes']>();\n readonly getPos = input.required<NodeViewProps['getPos']>();\n readonly updateAttributes = input.required<NodeViewProps['updateAttributes']>();\n readonly deleteNode = input.required<NodeViewProps['deleteNode']>();\n}\n","import {\n ApplicationRef, ComponentRef, ElementRef,\n Injector, Type, createComponent,\n} from '@angular/core';\n\nexport class AngularRenderer<C, P> {\n private applicationRef: ApplicationRef;\n private componentRef: ComponentRef<C>;\n\n constructor(ViewComponent: Type<C>, injector: Injector, props: Partial<P>) {\n this.applicationRef = injector.get(ApplicationRef);\n\n this.componentRef = createComponent(ViewComponent, {\n environmentInjector: this.applicationRef.injector,\n elementInjector: injector,\n });\n\n // set input props to the component\n this.updateProps(props);\n\n this.applicationRef.attachView(this.componentRef.hostView);\n }\n\n get instance(): C {\n return this.componentRef.instance;\n }\n\n get elementRef(): ElementRef {\n return this.componentRef.injector.get(ElementRef);\n }\n\n get dom(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n updateProps<T extends P>(props: Partial<T>): void {\n Object.entries(props).forEach(([key, value]) => {\n this.componentRef.setInput(key, value);\n });\n }\n\n updateAttributes(attributes: Record<string, string>): void {\n Object.keys(attributes).forEach((key) => {\n this.dom.setAttribute(key, attributes[key]);\n });\n }\n\n detectChanges(): void {\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n destroy(): void {\n this.componentRef.destroy();\n this.applicationRef.detachView(this.componentRef.hostView);\n }\n}\n","import { Injector, Type } from '@angular/core';\nimport {\n Editor, NodeView, NodeViewProps,\n NodeViewRenderer, NodeViewRendererProps, NodeViewRendererOptions, DecorationWithType,\n getRenderedAttributes,\n} from '@tiptap/core';\nimport type { Decoration, DecorationSource } from '@tiptap/pm/view';\nimport type { Node as ProseMirrorNode } from '@tiptap/pm/model';\n\nimport { AngularRenderer } from './AngularRenderer';\nimport { AngularNodeViewComponent } from './node-view.component';\n\ninterface RendererUpdateProps {\n oldNode: ProseMirrorNode;\n oldDecorations: readonly Decoration[];\n oldInnerDecorations: DecorationSource;\n newNode: ProseMirrorNode;\n newDecorations: readonly Decoration[];\n innerDecorations: DecorationSource;\n updateProps: () => void;\n}\n\ntype AttrProps = Record<string, string>\n| ((props: {\n node: ProseMirrorNode;\n HTMLAttributes: Record<string, unknown>;\n}) => Record<string, string>);\n\ninterface AngularNodeViewRendererOptions extends NodeViewRendererOptions {\n update?: ((props: RendererUpdateProps) => boolean) | null;\n injector: Injector;\n attrs?: AttrProps;\n}\n\nclass AngularNodeView extends NodeView<Type<AngularNodeViewComponent>, Editor, AngularNodeViewRendererOptions> {\n declare renderer: AngularRenderer<AngularNodeViewComponent, NodeViewProps>;\n declare contentDOMElement: HTMLElement | null;\n\n override mount() {\n const injector = this.options.injector as Injector;\n\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations as DecorationWithType[],\n innerDecorations: this.innerDecorations,\n view: this.view,\n selected: false,\n extension: this.extension,\n HTMLAttributes: this.HTMLAttributes,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n };\n\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n\n // create renderer\n this.renderer = new AngularRenderer(this.component, injector, props);\n\n // Register drag handler\n if (this.extension.config.draggable) {\n this.renderer.elementRef.nativeElement.ondragstart = (e: DragEvent) => {\n this.onDragStart(e);\n };\n }\n\n if (this.node.isLeaf) {\n this.contentDOMElement = null;\n } else if (this.options.contentDOMElementTag) {\n this.contentDOMElement = document.createElement(this.options.contentDOMElementTag);\n } else {\n this.contentDOMElement = document.createElement(this.node.isInline ? 'span' : 'div');\n }\n\n if (this.contentDOMElement) {\n this.contentDOMElement.dataset['nodeViewContentAngular'] = '';\n\n // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari\n // With this fix it seems to work fine\n // See: https://github.com/ueberdosis/tiptap/issues/1197\n this.contentDOMElement.style.whiteSpace = 'inherit';\n\n // Required for editable node views\n // The content won't be rendered if `editable` is set to `false`\n this.renderer.detectChanges();\n }\n\n this.appendContendDom();\n this.editor.on('selectionUpdate', this.handleSelectionUpdate);\n this.updateElementAttributes();\n }\n\n override get dom() {\n return this.renderer.dom;\n }\n\n override get contentDOM() {\n if (this.node.isLeaf) {\n return null;\n }\n\n return this.contentDOMElement;\n }\n\n private appendContendDom() {\n const contentElement = this.dom.querySelector('[data-node-view-content]');\n\n if (\n this.contentDOMElement\n && contentElement\n && !contentElement.contains(this.contentDOMElement)\n ) {\n contentElement.appendChild(this.contentDOMElement);\n }\n }\n\n handleSelectionUpdate() {\n const { from, to } = this.editor.state.selection;\n const pos = this.getPos();\n\n if (typeof pos !== 'number') {\n return;\n }\n\n if (from <= pos && to >= pos + this.node.nodeSize) {\n if (this.renderer.instance.selected()) {\n return;\n }\n\n this.selectNode();\n } else {\n if (!this.renderer.instance.selected()) {\n return;\n }\n\n this.deselectNode();\n }\n }\n\n update(node: ProseMirrorNode, decorations: readonly Decoration[], innerDecorations: DecorationSource): boolean {\n const updateProps = (props: Partial<NodeViewProps>) => {\n this.renderer.updateProps(props);\n\n if (typeof this.options.attrs === 'function') {\n this.updateElementAttributes();\n }\n };\n\n if (this.options.update) {\n const oldNode = this.node;\n const oldDecorations = this.decorations;\n const oldInnerDecorations = this.innerDecorations;\n\n this.node = node;\n this.decorations = decorations;\n this.innerDecorations = innerDecorations;\n\n return this.options.update({\n oldNode,\n oldDecorations,\n oldInnerDecorations,\n newNode: node,\n newDecorations: decorations,\n innerDecorations: this.innerDecorations,\n updateProps: () => updateProps({\n node,\n decorations: decorations as DecorationWithType[],\n innerDecorations,\n }),\n });\n }\n\n if (node.type !== this.node.type) {\n return false;\n }\n\n if (\n node === this.node\n && this.decorations === decorations\n && this.innerDecorations === innerDecorations\n ) {\n return true;\n }\n\n this.node = node;\n this.decorations = decorations;\n this.innerDecorations = innerDecorations;\n\n updateProps({\n node,\n decorations: decorations as DecorationWithType[],\n innerDecorations,\n });\n\n return true;\n }\n\n selectNode() {\n this.renderer.updateProps({ selected: true });\n this.renderer.dom.classList.add('ProseMirror-selectednode');\n }\n\n deselectNode() {\n this.renderer.updateProps({ selected: false });\n this.renderer.dom.classList.remove('ProseMirror-selectednode');\n }\n\n destroy() {\n this.renderer.destroy();\n this.editor.off('selectionUpdate', this.handleSelectionUpdate);\n this.contentDOMElement = null;\n }\n\n /**\n * Update the attributes of the top-level element that holds the React component.\n * Applying the attributes defined in the `attrs` option.\n */\n updateElementAttributes() {\n if (this.options.attrs) {\n let attrsObj: Record<string, string> = {};\n\n if (typeof this.options.attrs === 'function') {\n const extensionAttributes = this.editor.extensionManager.attributes;\n const HTMLAttributes = getRenderedAttributes(this.node, extensionAttributes);\n\n attrsObj = this.options.attrs({ node: this.node, HTMLAttributes });\n } else {\n attrsObj = this.options.attrs;\n }\n\n this.renderer.updateAttributes(attrsObj);\n }\n }\n}\n\nexport const AngularNodeViewRenderer = (\n ViewComponent: Type<AngularNodeViewComponent>,\n options: Partial<AngularNodeViewRendererOptions>,\n): NodeViewRenderer => {\n return (props: NodeViewRendererProps) => {\n return new AngularNodeView(ViewComponent, props, options);\n };\n};\n","/*\n * Public API Surface of ngx-tiptap\n */\n\nexport * from './lib/editor.directive';\nexport * from './lib/floating-menu.directive';\nexport * from './lib/bubble-menu.directive';\nexport * from './lib/draggable.directive';\nexport * from './lib/node-view-content.directive';\nexport * from './lib/node-view.component';\n\nexport * from './lib/AngularRenderer';\nexport * from './lib/NodeViewRenderer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}