{"version":3,"file":"taiga-ui-editor-extensions-image-editor.mjs","sources":["../../../projects/editor/extensions/image-editor/image-align-list.ts","../../../projects/editor/extensions/image-editor/image-editor.options.ts","../../../projects/editor/extensions/image-editor/image-editor.ts","../../../projects/editor/extensions/image-editor/image-editor.html","../../../projects/editor/extensions/image-editor/image-editor.extension.ts","../../../projects/editor/extensions/image-editor/taiga-ui-editor-extensions-image-editor.ts"],"sourcesContent":["import {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    inject,\n    Input,\n    Output,\n} from '@angular/core';\nimport {tuiPure} from '@taiga-ui/cdk';\nimport {TuiButton} from '@taiga-ui/core';\nimport {TUI_EDITOR_OPTIONS} from '@taiga-ui/editor/common';\n\n@Component({\n    standalone: true,\n    selector: 'tui-image-align-list',\n    imports: [TuiButton],\n    template: `\n        <button\n            aria-label=\"Justify align\"\n            size=\"xs\"\n            title=\"\"\n            tuiIconButton\n            type=\"button\"\n            [appearance]=\"isAlignJustify(style) ? 'outline' : 'flat'\"\n            [iconStart]=\"options.icons.imageExtension.alignJustify\"\n            (click.capture)=\"alignJustify()\"\n        >\n            Justify align\n        </button>\n        <button\n            aria-label=\"Align left\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            [appearance]=\"isAlignLeft(style) ? 'outline' : 'flat'\"\n            [iconStart]=\"options.icons.imageExtension.alignLeft\"\n            (click.capture)=\"alignLeft()\"\n        >\n            Left align\n        </button>\n        <button\n            aria-label=\"Align center\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            [appearance]=\"isAlignCenter(style) ? 'outline' : 'flat'\"\n            [iconStart]=\"options.icons.imageExtension.alignCenter\"\n            (click.capture)=\"alignCenter()\"\n        >\n            Center align\n        </button>\n        <button\n            aria-label=\"Align right\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            [appearance]=\"isAlignRight(style) ? 'outline' : 'flat'\"\n            [iconStart]=\"options.icons.imageExtension.alignRight\"\n            (click.capture)=\"alignRight()\"\n        >\n            Right align\n        </button>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiImageAlignList {\n    protected readonly options = inject(TUI_EDITOR_OPTIONS);\n\n    @Input()\n    public style?: string | null = null;\n\n    @Output()\n    public readonly updateAlignStyles = new EventEmitter<string | null>();\n\n    @tuiPure\n    protected isAlignCenter(style?: string | null): boolean {\n        return style?.replaceAll(/\\s/g, '').includes('justify-content:center') ?? false;\n    }\n\n    @tuiPure\n    protected isAlignJustify(style?: string | null): boolean {\n        return style === null || style === undefined || style === '';\n    }\n\n    @tuiPure\n    protected isAlignLeft(style?: string | null): boolean {\n        return style?.replaceAll(/\\s/g, '').includes('float:left') ?? false;\n    }\n\n    @tuiPure\n    protected isAlignRight(style?: string | null): boolean {\n        return style?.replaceAll(/\\s/g, '').includes('float:right') ?? false;\n    }\n\n    protected alignLeft(): void {\n        this.updateAlignStyles.emit('float: left');\n    }\n\n    protected alignCenter(): void {\n        this.updateAlignStyles.emit(\n            'display: flex; justify-content: center; margin-left: auto; margin-right: auto;',\n        );\n    }\n\n    protected alignJustify(): void {\n        this.updateAlignStyles.emit(null);\n    }\n\n    protected alignRight(): void {\n        this.updateAlignStyles.emit('float: right');\n    }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {InjectionToken} from '@angular/core';\nimport {type TuiImageEditorOptions} from '@taiga-ui/editor/common';\n\n/**\n * Size of resizable image inside editor\n */\nexport const TUI_IMAGE_EDITOR_OPTIONS = new InjectionToken<TuiImageEditorOptions>(\n    ngDevMode ? 'TUI_IMAGE_EDITOR_OPTIONS' : '',\n    {\n        factory: () => ({\n            minWidth: null,\n            maxWidth: Infinity,\n        }),\n    },\n);\n","import {NgIf} from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    inject,\n    type OnInit,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {DomSanitizer, type SafeResourceUrl} from '@angular/platform-browser';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {TuiActiveZone, tuiPure} from '@taiga-ui/cdk';\nimport {TuiButton, TuiDropdown, TuiIcon} from '@taiga-ui/core';\nimport {\n    TUI_EDITOR_OPTIONS,\n    TUI_EDITOR_RESIZE_EVENT,\n    type TuiEditableImage,\n} from '@taiga-ui/editor/common';\nimport {TuiEditLink} from '@taiga-ui/editor/components/edit-link';\nimport {\n    AbstractTuiEditorResizable,\n    TuiEditorResizable,\n} from '@taiga-ui/editor/components/editor-resizable';\nimport {timer} from 'rxjs';\n\nimport {TuiImageAlignList} from './image-align-list';\nimport {TUI_IMAGE_EDITOR_OPTIONS} from './image-editor.options';\n\ninterface ServerSideGlobal extends NodeJS.Global {\n    document: Document | undefined;\n}\n\n@Component({\n    standalone: true,\n    selector: 'tui-image-editor',\n    imports: [\n        NgIf,\n        TuiActiveZone,\n        TuiButton,\n        TuiDropdown,\n        TuiEditLink,\n        TuiEditorResizable,\n        TuiIcon,\n        TuiImageAlignList,\n    ],\n    templateUrl: './image-editor.html',\n    styleUrls: ['./image-editor.less'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[style]': 'style',\n        '[attr.data-drag-handle]': 'dragHandle',\n        '[attr.data-editing-href]': 'isLinkDropdownOpened',\n        '[attr.contenteditable]': 'contenteditable',\n    },\n})\nexport class TuiImageEditor\n    extends AbstractTuiEditorResizable<TuiEditableImage>\n    implements OnInit\n{\n    @ViewChild('resizable', {static: true})\n    private readonly resizable?: TuiEditorResizable;\n\n    @ViewChild('img', {read: ElementRef})\n    private readonly img?: ElementRef<HTMLImageElement>;\n\n    private readonly destroy$ = inject(DestroyRef);\n    private readonly sanitizer = inject(DomSanitizer);\n    private readonly el = inject(ElementRef);\n    private readonly win: Omit<Window, 'document'> & ServerSideGlobal = inject(WA_WINDOW);\n\n    protected style?: string | null = null;\n    protected contenteditable = false;\n    protected isAlignDropdownOpened = false;\n    protected readonly options = inject(TUI_EDITOR_OPTIONS);\n    protected readonly imageOptions = inject(TUI_IMAGE_EDITOR_OPTIONS);\n    protected readonly changeDetector = inject(ChangeDetectorRef);\n\n    public override get height(): number | string | null {\n        return null;\n    }\n\n    public get minWidth(): number {\n        return this.imageOptions.minWidth ?? 0;\n    }\n\n    public get maxWidth(): number {\n        return this.imageOptions.maxWidth ?? 0;\n    }\n\n    public ngOnInit(): void {\n        this.style = this.attrs.style;\n    }\n\n    public onImageLoad(): void {\n        if (this.minWidth > 0 || (this.maxWidth > 0 && this.maxWidth !== Infinity)) {\n            this.setInitialSize();\n        }\n    }\n\n    public updateSize([width]: readonly [width: number, height?: number]): void {\n        this.currentWidth = Math.max(this.minWidth, Math.min(this.maxWidth, width));\n        this.attrs.width = this.currentWidth;\n\n        this.notifyUpdate();\n    }\n\n    public openLink(url: string): void {\n        this.win.open(url, '_blank');\n    }\n\n    public addLink(url: string): void {\n        this.setLink(url);\n    }\n\n    public removeLink(): void {\n        this.setLink(null);\n    }\n\n    public onEditLinkActiveZoneChange(isActive: boolean): void {\n        if (this.isLinkDropdownOpened && !isActive) {\n            this.isLinkDropdownOpened = false;\n        }\n    }\n\n    public setLink(url: string | null): void {\n        this.attrs['data-href'] = url;\n        this.isLinkDropdownOpened = false;\n\n        // Caretaker note:\n        // This functionality is required to ensure\n        // the editor updates its state with/without link wrap\n        // because of the editor's quirky behavior.\n        this.editor.commands.setNodeSelection(this.getPos());\n    }\n\n    protected get dragHandle(): '' | null {\n        return this.attrs.draggable ?? null;\n    }\n\n    protected get isLinkDropdownOpened(): boolean {\n        return this.attrs['data-editing-href'] ?? false;\n    }\n\n    protected set isLinkDropdownOpened(isOpened: boolean) {\n        this.attrs['data-editing-href'] = isOpened ? true : null;\n    }\n\n    protected get alt(): string {\n        return this.attrs.alt ?? '';\n    }\n\n    protected get title(): string {\n        return this.attrs.title ?? '';\n    }\n\n    protected get containerWidth(): number {\n        const naturalWidth =\n            this.attrs.width ??\n            this.img?.nativeElement.naturalWidth ??\n            this.resizable?.width ??\n            0;\n\n        return parseInt(naturalWidth as string, 10);\n    }\n\n    protected get supportLinkExtension(): boolean {\n        return Boolean(this.editor.commands.toggleLink);\n    }\n\n    @tuiPure\n    protected getBypassedSrc(src: string): SafeResourceUrl {\n        return this.sanitizer.bypassSecurityTrustResourceUrl(src);\n    }\n\n    protected toggleAlignDropdown(event: Event): void {\n        event.stopImmediatePropagation();\n        this.isAlignDropdownOpened = !this.isAlignDropdownOpened;\n    }\n\n    protected align(styles: string | null): void {\n        this.style = styles;\n        this.attrs.style = styles;\n        this.notifyUpdate();\n    }\n\n    protected editLink(event: Event): void {\n        event.stopImmediatePropagation();\n\n        if (this.isLinkDropdownOpened) {\n            return;\n        }\n\n        this.isLinkDropdownOpened = true;\n\n        timer(0)\n            .pipe(takeUntilDestroyed(this.destroy$))\n            .subscribe(() => {\n                this.editor.commands.setNodeSelection(this.getPos());\n            });\n    }\n\n    private setInitialSize(): void {\n        const containerWidth = this.containerWidth;\n\n        if (containerWidth < this.minWidth || containerWidth > this.maxWidth) {\n            this.updateSize([containerWidth]);\n        }\n    }\n\n    private notifyUpdate(): void {\n        this.el.nativeElement.dispatchEvent(\n            new CustomEvent(TUI_EDITOR_RESIZE_EVENT, {bubbles: true}),\n        );\n    }\n}\n","<tui-editor-resizable\n    #resizable\n    [autoHeight]=\"true\"\n    [isEditable]=\"editor.isEditable\"\n    [width]=\"width\"\n    (sizeChange)=\"updateSize($event)\"\n>\n    <img\n        #img\n        contenteditable=\"false\"\n        decoding=\"async\"\n        loading=\"lazy\"\n        [alt]=\"alt\"\n        [attr.width]=\"width\"\n        [src]=\"getBypassedSrc(attrs.src)\"\n        [style.max-width.px]=\"maxWidth\"\n        [style.min-width.px]=\"minWidth\"\n        [title]=\"title\"\n        [tuiDropdown]=\"linkEditingDropdown\"\n        [tuiDropdownManual]=\"isLinkDropdownOpened\"\n        (load)=\"onImageLoad()\"\n    />\n\n    <ng-template #linkEditingDropdown>\n        <tui-edit-link\n            [explicitOnlyLinkEdit]=\"true\"\n            [link]=\"attrs['data-href'] ?? undefined\"\n            (addLink)=\"addLink($event)\"\n            (removeLink)=\"removeLink()\"\n            (tuiActiveZoneChange)=\"onEditLinkActiveZoneChange($event)\"\n        />\n    </ng-template>\n\n    <div\n        *ngIf=\"editor.isEditable && containerWidth >= 68\"\n        tuiDropdownAlign=\"right\"\n        tuiDropdownAppearance=\"editor-image-options\"\n        class=\"t-image-buttons\"\n        [class._open]=\"isAlignDropdownOpened\"\n        [tuiDropdown]=\"list\"\n        [tuiDropdownEnabled]=\"editor.isEditable\"\n        [(tuiDropdownOpen)]=\"isAlignDropdownOpened\"\n    >\n        <button\n            #tuiDropdownHost\n            appearance=\"flat\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            [iconStart]=\"options.icons.imageExtension.settings\"\n            (click)=\"toggleAlignDropdown($event)\"\n        >\n            Image align\n        </button>\n\n        <button\n            *ngIf=\"supportLinkExtension\"\n            appearance=\"flat\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            [disabled]=\"isLinkDropdownOpened\"\n            [iconStart]=\"options.icons.imageExtension.link\"\n            (click)=\"editLink($event)\"\n        >\n            Image link\n        </button>\n\n        <ng-template #list>\n            <tui-image-align-list\n                [style]=\"style\"\n                (updateAlignStyles)=\"align($event); isAlignDropdownOpened = false\"\n            />\n        </ng-template>\n    </div>\n\n    <button\n        *ngIf=\"attrs['data-href'] as href\"\n        appearance=\"reference\"\n        size=\"s\"\n        tuiButton\n        type=\"button\"\n        [disabled]=\"isLinkDropdownOpened\"\n        [iconStart]=\"options.icons.imageExtension.previewLink\"\n        (click)=\"openLink(href)\"\n    >\n        <div\n            *ngIf=\"containerWidth >= 170\"\n            class=\"t-link-href\"\n        >\n            {{ href }}\n        </div>\n\n        <tui-icon\n            *ngIf=\"containerWidth >= 170\"\n            class=\"t-link-preview-edit\"\n            [icon]=\"options.icons.imageExtension.previewEditLink\"\n            (click.self)=\"editLink($event)\"\n        />\n    </button>\n</tui-editor-resizable>\n","import {type Injector} from '@angular/core';\nimport {tuiIsPresent} from '@taiga-ui/cdk';\nimport {TUI_IMAGE_LOADER, type TuiEditableImage} from '@taiga-ui/editor/common';\nimport {TuiNodeView} from '@taiga-ui/editor/extensions/tiptap-node-view';\nimport {\n    type Attribute,\n    type CommandProps,\n    mergeAttributes,\n    type Node,\n    type NodeViewRenderer,\n    type NodeViewRendererProps,\n    type RawCommands,\n} from '@tiptap/core';\nimport {Image} from '@tiptap/extension-image';\nimport {isAllowedUri} from '@tiptap/extension-link';\nimport {type DOMOutputSpec, type NodeSpec} from '@tiptap/pm/model';\nimport {Plugin} from '@tiptap/pm/state';\nimport {type EditorView, type NodeView} from '@tiptap/pm/view';\nimport {take, takeWhile} from 'rxjs';\n\nimport {TuiImageEditor} from './image-editor';\n\nexport interface TuiImageExtensionOptions {\n    injector: Injector;\n    draggable?: boolean;\n}\n\ndeclare module '@tiptap/core' {\n    interface Commands<ReturnType> {\n        imageEditor: {\n            setEditableImage(imageConfigs: TuiEditableImage): ReturnType;\n            setImageLink(): ReturnType;\n        };\n    }\n}\n\nfunction pasteImage(injector: Injector) {\n    return (view: EditorView, event: ClipboardEvent | DragEvent): void => {\n        const dataTransfer =\n            event instanceof DragEvent ? event.dataTransfer : event.clipboardData;\n        const imagesFiles = Array.from(dataTransfer?.files ?? []).filter((file) =>\n            /image/i.test(file.type),\n        );\n\n        if (imagesFiles.length) {\n            event.preventDefault();\n        }\n\n        const loader = injector.get(TUI_IMAGE_LOADER);\n\n        imagesFiles.forEach((file) => {\n            loader(file)\n                .pipe(\n                    take(1),\n\n                    takeWhile(() => !view.isDestroyed),\n                )\n                .subscribe((src) => {\n                    const node = view.state.schema.nodes.image?.create({src});\n                    const transaction = node\n                        ? view.state.tr.replaceSelectionWith(node)\n                        : null;\n\n                    setTimeout(() => {\n                        if (!view.isDestroyed && transaction) {\n                            view.dispatch(transaction);\n                        }\n                    });\n                });\n        });\n    };\n}\n\nfunction typesafeIsAllowedUri(uri?: string): boolean {\n    if (!uri) {\n        return false;\n    }\n\n    return isAllowedUri(uri) !== null;\n}\n\nexport function tuiCreateImageEditorExtension<T, K>({\n    injector,\n    draggable,\n}: {\n    draggable?: boolean;\n    injector: Injector;\n}): Node<T, K> {\n    const enableDraggable = tuiIsPresent(draggable) ? draggable : true;\n\n    return Image.extend({\n        name: 'image',\n        priority: 0,\n        selectable: true,\n        draggable: enableDraggable,\n\n        parseHTML(): NodeSpec['parseDOM'] {\n            return [\n                {\n                    tag: 'a[href] img',\n                    // Caretaker note:\n                    // Tiptap link extension priority is 1000\n                    // ensuring current extension is being handled in precedence\n                    priority: 1001,\n                    getAttrs: (el: HTMLElement): TuiEditableImage | false => {\n                        const [href, style] = ['href', 'style'].map(\n                            (attrName) => el.getAttribute(attrName) ?? undefined,\n                        );\n\n                        if (!typesafeIsAllowedUri(href)) {\n                            return false;\n                        }\n\n                        const [src, width, alt, title] = [\n                            'src',\n                            'width',\n                            'alt',\n                            'title',\n                        ].map(\n                            (attrName) =>\n                                el.firstElementChild?.getAttribute(attrName) ?? undefined,\n                        );\n\n                        return {\n                            'data-href': href,\n                            src: src ?? '',\n                            style,\n                            width,\n                            alt,\n                            title,\n                        };\n                    },\n                },\n                {tag: 'img'},\n            ];\n        },\n\n        addAttributes(): Record<keyof TuiEditableImage, Attribute> {\n            return {\n                src: {\n                    default: '',\n                    keepOnSplit: false,\n                },\n                width: {\n                    default: null,\n                    keepOnSplit: false,\n                },\n                alt: {\n                    default: '',\n                    keepOnSplit: false,\n                },\n                style: {\n                    default: '',\n                    keepOnSplit: false,\n                },\n                title: {\n                    default: '',\n                    keepOnSplit: false,\n                },\n                draggable: {\n                    default: enableDraggable ? '' : null,\n                    keepOnSplit: false,\n                },\n                'data-href': {\n                    default: null,\n                    keepOnSplit: false,\n                },\n                'data-editing-href': {\n                    default: null,\n                    keepOnSplit: false,\n                },\n            };\n        },\n\n        renderHTML({HTMLAttributes}: Record<string, any>): DOMOutputSpec {\n            const {src, width, alt, style, title, 'data-href': href} = HTMLAttributes;\n\n            if (!href) {\n                return ['img', mergeAttributes(HTMLAttributes)];\n            }\n\n            return [\n                'a',\n                mergeAttributes({\n                    target: '_blank',\n                    rel: 'noopener noreferrer nofollow',\n                    href: typesafeIsAllowedUri(href) ? href : '',\n                    style: style,\n                }),\n                [\n                    'img',\n                    mergeAttributes({\n                        src,\n                        width,\n                        alt,\n                        title,\n                    }),\n                ],\n            ];\n        },\n\n        addNodeView(): NodeViewRenderer {\n            return (props: NodeViewRendererProps): NodeView =>\n                new TuiNodeView(TuiImageEditor, props, {\n                    injector,\n                    ...props,\n                }) as unknown as NodeView;\n        },\n\n        addCommands(): Partial<RawCommands> {\n            return {\n                setEditableImage:\n                    (attrs: TuiEditableImage) =>\n                    ({commands}) =>\n                        commands.insertContent({\n                            type: this.name,\n                            attrs,\n                        }),\n                setImageLink:\n                    () =>\n                    ({commands}: CommandProps) =>\n                        commands.updateAttributes(this.name, {'data-editing-href': true}),\n            };\n        },\n\n        addProseMirrorPlugins() {\n            return [\n                new Plugin({\n                    props: {\n                        handleDOMEvents: {\n                            paste: pasteImage(injector),\n                            drop: pasteImage(injector),\n                        },\n                    },\n                }),\n            ];\n        },\n    });\n}\n\n/**\n * @deprecated use {@link tuiCreateImageEditorExtension}\n */\nexport const setup = tuiCreateImageEditorExtension;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}