{"version":3,"file":"seniorsistemas-angular-components-editor.mjs","sources":["../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.ts","../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.html","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.ts","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.html","../../projects/angular-components/editor/src/lib/editor/editor.component.ts","../../projects/angular-components/editor/src/lib/editor/editor.component.html","../../projects/angular-components/editor/src/seniorsistemas-angular-components-editor.ts"],"sourcesContent":["import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { ActiveDialog, DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { DynamicFormModule, DynamicStructure } from '@seniorsistemas/angular-components/dynamic-form';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@Component({\n    standalone: true,\n    imports: [ReactiveFormsModule, TranslateModule, DialogComponent, DynamicFormModule, ButtonModule, TemplateModule],\n    templateUrl: './link-dialog.component.html',\n})\nexport class LinkDialogComponent implements OnInit {\n    private readonly activeDialog = inject(ActiveDialog);\n    private readonly translateService = inject(TranslateService);\n\n    initialUrl = '';\n\n    form = new FormGroup({ url: new FormControl('') });\n\n    configs: DynamicStructure[] = [];\n\n    ngOnInit(): void {\n        this.form.setValue({ url: this.initialUrl });\n        this.configs = [\n            {\n                type: 'row',\n                fields: [\n                    {\n                        type: 'string',\n                        name: 'url',\n                        label: this.translateService.instant('platform.angular_components.editor_link_url_label'),\n                        placeholder: this.translateService.instant(\n                            'platform.angular_components.editor_link_url_placeholder',\n                        ),\n                    },\n                ],\n            },\n        ];\n    }\n\n    confirm(): void {\n        this.activeDialog.close(this.form.value.url?.trim() ?? '');\n    }\n\n    cancel(): void {\n        this.activeDialog.dismiss();\n    }\n}\n\n","<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n    <ng-template sTemplate=\"body\">\n        <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n    </ng-template>\n    <ng-template sTemplate=\"footer\">\n        <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n            <s-button\n                [label]=\"'platform.angular_components.cancel' | translate\"\n                priority=\"secondary\"\n                (clicked)=\"cancel()\"\n            />\n            <s-button\n                [label]=\"'platform.angular_components.editor_confirm' | translate\"\n                priority=\"primary\"\n                (clicked)=\"confirm()\"\n            />\n        </div>\n    </ng-template>\n</s-dialog>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n    selector: 's-editor-toolbar-button',\n    standalone: true,\n    imports: [NgClass],\n    templateUrl: './editor-toolbar-button.component.html',\n    host: { style: 'display: contents' },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorToolbarButtonComponent {\n    icon = input.required<string>();\n    label = input.required<string>();\n    active = input<boolean>(false);\n    disabled = input<boolean>(false);\n    clicked = output<void>();\n}\n\n","<button\n    type=\"button\"\n    class=\"inline-flex items-center justify-center w-7 h-7 p-0 border-0 bg-transparent rounded cursor-pointer text-base leading-none transition-colors duration-150 disabled:opacity-[.35] disabled:cursor-not-allowed\"\n    [ngClass]=\"{\n        'bg-[#ebebfa]': active(),\n        'text-[#5c5ce6]': active(),\n        'hover:bg-[#ddddf7]': active(),\n        'text-[#3d3d4d]': !active(),\n        'enabled:hover:bg-[#e8e8f0]': !active(),\n        'enabled:hover:text-[#1e1e2e]': !active()\n    }\"\n    [disabled]=\"disabled()\"\n    [title]=\"label()\"\n    [attr.aria-label]=\"label()\"\n    [attr.aria-pressed]=\"active()\"\n    (click)=\"clicked.emit()\"\n>\n    <i [class]=\"icon()\"></i>\n</button>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    OnDestroy,\n    effect,\n    forwardRef,\n    inject,\n    input,\n    output,\n    viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { Editor } from '@tiptap/core';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Subscript from '@tiptap/extension-subscript';\nimport Superscript from '@tiptap/extension-superscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport StarterKit from '@tiptap/starter-kit';\n\nimport { LinkDialogComponent } from './link-dialog/link-dialog.component';\nimport { EditorFormat, EditorSelectionChangeEvent, EditorTextChangeEvent, Extension } from './models';\nimport { EditorToolbarButtonComponent } from './toolbar-button/editor-toolbar-button.component';\n\n/**\n * @description Componente de editor de texto rico (WYSIWYG) construído sobre o Tiptap/ProseMirror.\n * Substitui o `p-editor` do PrimeNG sem dependência externa de licença comercial.\n * Implementa {@link ControlValueAccessor} para integração com Angular Forms.\n *\n * @example\n * ```html\n * <s-editor\n *   formControlName=\"descricao\"\n *   [readonly]=\"false\"\n *   (textChange)=\"onTextChange($event)\" />\n * ```\n */\n@Component({\n    selector: 's-editor',\n    standalone: true,\n    imports: [NgClass, NgStyle, TranslateModule, EditorToolbarButtonComponent],\n    templateUrl: './editor.component.html',\n    styleUrls: ['./editor.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => EditorComponent),\n            multi: true,\n        },\n    ],\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n    private readonly cdr = inject(ChangeDetectorRef);\n    private readonly dialogService = inject(DialogService);\n    private readonly translateService = inject(TranslateService);\n    private readonly destroyRef = inject(DestroyRef);\n\n    /**\n     * @description Coloca o editor em modo somente leitura.\n     * @default false\n     */\n    readonly = input<boolean>(false);\n\n    /**\n     * @description Lista de formatos habilitados na toolbar. Quando vazio, todos os formatos são exibidos.\n     */\n    formats = input<EditorFormat[]>();\n\n    /**\n     * @description Texto de dica exibido quando o editor está vazio.\n     */\n    placeholder = input<string>();\n\n    /**\n     * @description Estilos inline aplicados ao container do editor.\n     */\n    style = input<{ [klass: string]: unknown }>();\n\n    /**\n     * @description Classes CSS adicionais aplicadas ao container do editor.\n     */\n    styleClass = input<string>();\n\n    /**\n     * @description Extensões Tiptap adicionais para estender o comportamento padrão do editor.\n     */\n    extensions = input<Extension[]>([]);\n\n    /**\n     * @description Emitido quando o editor é inicializado e está pronto para uso.\n     */\n    editorInit = output<Editor>();\n\n    /**\n     * @description Emitido sempre que o conteúdo do editor é alterado.\n     */\n    textChange = output<EditorTextChangeEvent>();\n\n    /**\n     * @description Emitido quando a seleção de texto no editor muda.\n     */\n    selectionChange = output<EditorSelectionChangeEvent>();\n\n    private editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n    private imageInput = viewChild.required<ElementRef<HTMLInputElement>>('imageInput');\n\n    private editor?: Editor;\n    private _formDisabled = false;\n    private _currentPlaceholder = '';\n\n    activeStates = {\n        isBold: false,\n        isItalic: false,\n        isUnderline: false,\n        isStrike: false,\n        isBulletList: false,\n        isOrderedList: false,\n        isBlockquote: false,\n        isCode: false,\n        isSubscript: false,\n        isSuperscript: false,\n        isAlignLeft: false,\n        isAlignCenter: false,\n        isAlignRight: false,\n        currentHeading: 0,\n        currentColor: '#000000',\n        currentHighlight: 'transparent',\n        canUndo: false,\n        canRedo: false,\n    };\n\n    private _value = '';\n    private _onChange: (value: string) => void = () => {};\n    private _onTouched: () => void = () => {};\n\n    constructor() {\n        effect(() => {\n            if (this.editor) {\n                this.editor.setEditable(!this.readonly() && !this._formDisabled);\n                this.cdr.markForCheck();\n            }\n        });\n\n        effect(() => {\n            this._currentPlaceholder = this.placeholder() ?? '';\n            this.editor?.view.dispatch(this.editor.state.tr);\n        });\n    }\n\n    ngAfterViewInit(): void {\n        this.initEditor();\n    }\n\n    ngOnDestroy(): void {\n        this.editor?.destroy();\n    }\n\n    writeValue(value: string): void {\n        this._value = value ?? '';\n        if (this.editor) {\n            this.editor.chain().setMeta('addToHistory', false).setContent(this._value, { emitUpdate: false }).run();\n            this.cdr.markForCheck();\n        }\n    }\n\n    registerOnChange(fn: (value: string) => void): void {\n        this._onChange = fn;\n    }\n\n    registerOnTouched(fn: () => void): void {\n        this._onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this._formDisabled = isDisabled;\n        this.editor?.setEditable(!isDisabled && !this.readonly());\n        this.cdr.markForCheck();\n    }\n\n    isFormatAllowed(format: EditorFormat): boolean {\n        const formats = this.formats();\n        return !formats?.length || formats.includes(format);\n    }\n\n    hasAnyFormatBeforeUndoRedo(): boolean {\n        const formatsBeforeUndoRedo: EditorFormat[] = [\n            'header', 'bold', 'italic', 'underline', 'strike', 'subscript', 'superscript',\n            'color', 'highlight', 'list', 'align', 'blockquote', 'code-block', 'link', 'image',\n        ];\n        return formatsBeforeUndoRedo.some(f => this.isFormatAllowed(f));\n    }\n\n    toggleBold(): void {\n        this.editor?.chain().focus().toggleBold().run();\n    }\n\n    toggleItalic(): void {\n        this.editor?.chain().focus().toggleItalic().run();\n    }\n\n    toggleUnderline(): void {\n        this.editor?.chain().focus().toggleUnderline().run();\n    }\n\n    toggleStrike(): void {\n        this.editor?.chain().focus().toggleStrike().run();\n    }\n\n    toggleBulletList(): void {\n        this.editor?.chain().focus().toggleBulletList().run();\n    }\n\n    toggleOrderedList(): void {\n        this.editor?.chain().focus().toggleOrderedList().run();\n    }\n\n    toggleBlockquote(): void {\n        this.editor?.chain().focus().toggleBlockquote().run();\n    }\n\n    toggleCode(): void {\n        this.editor?.chain().focus().toggleCode().run();\n    }\n\n    toggleSubscript(): void {\n        this.editor?.chain().focus().toggleSubscript().run();\n    }\n\n    toggleSuperscript(): void {\n        this.editor?.chain().focus().toggleSuperscript().run();\n    }\n\n    setTextAlign(align: 'left' | 'center' | 'right'): void {\n        this.editor?.chain().focus().setTextAlign(align).run();\n    }\n\n    setColor(color: string): void {\n        this.editor?.chain().focus().setColor(color).run();\n    }\n\n    setHighlight(color: string): void {\n        this.editor?.chain().focus().setHighlight({ color }).run();\n    }\n\n    clearFormatting(): void {\n        this.editor?.chain().focus().clearNodes().unsetAllMarks().run();\n    }\n\n    onHeadingChange(event: Event): void {\n        const level = parseInt((event.target as HTMLSelectElement).value) as 0 | 1 | 2 | 3;\n        if (isNaN(level) || level === 0) {\n            this.editor?.chain().focus().setParagraph().run();\n        } else {\n            this.editor?.chain().focus().setHeading({ level }).run();\n        }\n    }\n\n    setLink(): void {\n        const existingUrl = (this.editor?.getAttributes('link')['href'] as string) ?? '';\n        const ref = this.dialogService.open(LinkDialogComponent, { size: 'sm' });\n        ref.componentInstance.initialUrl = existingUrl;\n        ref.closed\n            .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n            .subscribe((url: string) => {\n                if (url === '') {\n                    this.editor?.chain().focus().extendMarkRange('link').unsetLink().run();\n                } else {\n                    this.editor?.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n                }\n            });\n    }\n\n    setImage(): void {\n        this.imageInput().nativeElement.click();\n    }\n\n    onImageFileSelected(event: Event): void {\n        const input = event.target as HTMLInputElement;\n        const file = input.files?.[0];\n        if (!file) return;\n\n        const reader = new FileReader();\n        reader.onload = (e) => {\n            const src = e.target?.result as string;\n            this.editor?.chain().focus().setImage({ src }).run();\n            input.value = '';\n            this.cdr.markForCheck();\n        };\n        reader.readAsDataURL(file);\n    }\n\n    undo(): void {\n        this.editor?.chain().focus().undo().run();\n    }\n\n    redo(): void {\n        this.editor?.chain().focus().redo().run();\n    }\n\n    onToolbarKeydown(event: KeyboardEvent): void {\n        if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n        event.preventDefault();\n\n        const toolbar = event.currentTarget as HTMLElement;\n        const focusable = this.getToolbarFocusable(toolbar);\n        if (!focusable.length) return;\n\n        const currentIndex = focusable.findIndex(el => el === document.activeElement);\n        let nextIndex: number;\n\n        switch (event.key) {\n            case 'ArrowRight': nextIndex = (currentIndex + 1) % focusable.length; break;\n            case 'ArrowLeft': nextIndex = (currentIndex - 1 + focusable.length) % focusable.length; break;\n            case 'Home': nextIndex = 0; break;\n            default: nextIndex = focusable.length - 1; break;\n        }\n\n        focusable.forEach((el, i) => el.setAttribute('tabindex', i === nextIndex ? '0' : '-1'));\n        focusable[nextIndex].focus();\n    }\n\n    onToolbarFocusIn(event: FocusEvent): void {\n        const target = event.target as HTMLElement;\n        const toolbar = event.currentTarget as HTMLElement;\n        const focusable = this.getToolbarFocusable(toolbar);\n        if (focusable.includes(target)) {\n            focusable.forEach(el => el.setAttribute('tabindex', el === target ? '0' : '-1'));\n        }\n    }\n\n    private getToolbarFocusable(toolbar: HTMLElement): HTMLElement[] {\n        return Array.from(\n            toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), select, label[tabindex]'),\n        );\n    }\n\n    private initEditor(): void {\n        this.editor = new Editor({\n            element: this.editorContainer().nativeElement,\n            extensions: [\n                StarterKit.configure({\n                    link: { openOnClick: false },\n                    underline: false,\n                }),\n                Underline,\n                Image,\n                TextAlign.configure({ types: ['heading', 'paragraph'] }),\n                TextStyle,\n                Color,\n                Highlight.configure({ multicolor: true }),\n                Placeholder.configure({ placeholder: () => this._currentPlaceholder }),\n                Subscript,\n                Superscript,\n                ...this.extensions(),\n            ],\n            content: this._value,\n            editable: !this.readonly(),\n            editorProps: {\n                attributes: {\n                    role: 'textbox',\n                    'aria-multiline': 'true',\n                    'aria-label': this.translateService.instant(\n                        'platform.angular_components.editor_content_area',\n                    ),\n                },\n            },\n            onUpdate: ({ editor }) => {\n                const html = editor.getHTML();\n                const text = editor.getText();\n                this._value = html;\n                this._onChange(html);\n                this.textChange.emit({ htmlValue: html, textValue: text });\n                this.syncActiveStates();\n                this.cdr.markForCheck();\n            },\n            onBlur: () => {\n                this._onTouched();\n            },\n            onSelectionUpdate: ({ editor }) => {\n                this.syncActiveStates();\n                const { from, to, empty } = editor.state.selection;\n                this.selectionChange.emit({ from, to, empty });\n                this.cdr.markForCheck();\n            },\n        });\n\n        this.syncActiveStates();\n        this.cdr.markForCheck();\n        this.editorInit.emit(this.editor);\n    }\n\n    private syncActiveStates(): void {\n        if (!this.editor) return;\n\n        const e = this.editor;\n        this.activeStates = {\n            isBold: e.isActive('bold'),\n            isItalic: e.isActive('italic'),\n            isUnderline: e.isActive('underline'),\n            isStrike: e.isActive('strike'),\n            isBulletList: e.isActive('bulletList'),\n            isOrderedList: e.isActive('orderedList'),\n            isBlockquote: e.isActive('blockquote'),\n            isCode: e.isActive('code'),\n            isSubscript: e.isActive('subscript'),\n            isSuperscript: e.isActive('superscript'),\n            isAlignLeft: e.isActive({ textAlign: 'left' }),\n            isAlignCenter: e.isActive({ textAlign: 'center' }),\n            isAlignRight: e.isActive({ textAlign: 'right' }),\n            currentHeading: [1, 2, 3].find((level) => e.isActive('heading', { level })) ?? 0,\n            currentColor: (e.getAttributes('textStyle')['color'] as string) || '#000000',\n            currentHighlight: (e.getAttributes('highlight')['color'] as string) || 'transparent',\n            canUndo: e.can().undo(),\n            canRedo: e.can().redo(),\n        };\n    }\n}\n","<div\n    class=\"rounded bg-white flex flex-col border border-grayscale-30 transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n    [ngClass]=\"styleClass()\"\n    [ngStyle]=\"style()\"\n    [class.s-editor--readonly]=\"readonly()\"\n>\n    @if (!readonly()) {\n        <div\n            class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n            role=\"toolbar\"\n            [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n            (keydown)=\"onToolbarKeydown($event)\"\n            (focusin)=\"onToolbarFocusIn($event)\"\n        >\n            @if (isFormatAllowed('header')) {\n                <select\n                    class=\"rounded bg-white h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6]\"\n                    (change)=\"onHeadingChange($event)\"\n                    [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n                >\n                    <option\n                        [value]=\"0\"\n                        [selected]=\"activeStates.currentHeading === 0\"\n                    >\n                        {{ 'platform.angular_components.editor_heading_normal' | translate }}\n                    </option>\n                    <option\n                        [value]=\"1\"\n                        [selected]=\"activeStates.currentHeading === 1\"\n                    >\n                        {{ 'platform.angular_components.editor_heading_1' | translate }}\n                    </option>\n                    <option\n                        [value]=\"2\"\n                        [selected]=\"activeStates.currentHeading === 2\"\n                    >\n                        {{ 'platform.angular_components.editor_heading_2' | translate }}\n                    </option>\n                    <option\n                        [value]=\"3\"\n                        [selected]=\"activeStates.currentHeading === 3\"\n                    >\n                        {{ 'platform.angular_components.editor_heading_3' | translate }}\n                    </option>\n                </select>\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n            }\n\n            @if (isFormatAllowed('bold')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-bold\"\n                    [label]=\"'platform.angular_components.editor_bold' | translate\"\n                    [active]=\"activeStates.isBold\"\n                    (clicked)=\"toggleBold()\"\n                />\n            }\n\n            @if (isFormatAllowed('italic')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-italic\"\n                    [label]=\"'platform.angular_components.editor_italic' | translate\"\n                    [active]=\"activeStates.isItalic\"\n                    (clicked)=\"toggleItalic()\"\n                />\n            }\n\n            @if (isFormatAllowed('underline')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-underline\"\n                    [label]=\"'platform.angular_components.editor_underline' | translate\"\n                    [active]=\"activeStates.isUnderline\"\n                    (clicked)=\"toggleUnderline()\"\n                />\n            }\n\n            @if (isFormatAllowed('strike')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-strikethrough\"\n                    [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n                    [active]=\"activeStates.isStrike\"\n                    (clicked)=\"toggleStrike()\"\n                />\n            }\n\n            @if (isFormatAllowed('subscript')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-subscript\"\n                    [label]=\"'platform.angular_components.editor_subscript' | translate\"\n                    [active]=\"activeStates.isSubscript\"\n                    (clicked)=\"toggleSubscript()\"\n                />\n            }\n\n            @if (isFormatAllowed('superscript')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-superscript\"\n                    [label]=\"'platform.angular_components.editor_superscript' | translate\"\n                    [active]=\"activeStates.isSuperscript\"\n                    (clicked)=\"toggleSuperscript()\"\n                />\n            }\n\n            @if (isFormatAllowed('color')) {\n                <label\n                    tabindex=\"0\"\n                    class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-white transition-colors duration-150 hover:bg-[#f0f0f8]\"\n                    [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n                    [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n                    (keydown.enter)=\"$event.preventDefault(); colorInput.click()\"\n                    (keydown.space)=\"$event.preventDefault(); colorInput.click()\"\n                >\n                    <span class=\"flex flex-col items-center gap-px\">\n                        <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n                        <span\n                            class=\"h-[3px] w-3.5 rounded-sm\"\n                            [style.background-color]=\"activeStates.currentColor\"\n                        ></span>\n                    </span>\n                    <input\n                        #colorInput\n                        type=\"color\"\n                        class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n                        [value]=\"activeStates.currentColor\"\n                        (input)=\"setColor($any($event.target).value)\"\n                    />\n                </label>\n            }\n\n            @if (isFormatAllowed('highlight')) {\n                <label\n                    tabindex=\"0\"\n                    class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-white transition-colors duration-150 hover:bg-[#f0f0f8]\"\n                    [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n                    [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n                    (keydown.enter)=\"$event.preventDefault(); highlightInput.click()\"\n                    (keydown.space)=\"$event.preventDefault(); highlightInput.click()\"\n                >\n                    <span class=\"flex flex-col items-center gap-px\">\n                        <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n                        <span\n                            class=\"h-[3px] w-3.5 rounded-sm\"\n                            [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n                        ></span>\n                    </span>\n                    <input\n                        #highlightInput\n                        type=\"color\"\n                        class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n                        [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n                        (input)=\"setHighlight($any($event.target).value)\"\n                    />\n                </label>\n            }\n\n            @if (isFormatAllowed('list')) {\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n                <s-editor-toolbar-button\n                    icon=\"fa fa-list-ul\"\n                    [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n                    [active]=\"activeStates.isBulletList\"\n                    (clicked)=\"toggleBulletList()\"\n                />\n                <s-editor-toolbar-button\n                    icon=\"fa fa-list-ol\"\n                    [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n                    [active]=\"activeStates.isOrderedList\"\n                    (clicked)=\"toggleOrderedList()\"\n                />\n            }\n\n            @if (isFormatAllowed('align')) {\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n                <s-editor-toolbar-button\n                    icon=\"fa fa-align-left\"\n                    [label]=\"'platform.angular_components.editor_align_left' | translate\"\n                    [active]=\"activeStates.isAlignLeft\"\n                    (clicked)=\"setTextAlign('left')\"\n                />\n                <s-editor-toolbar-button\n                    icon=\"fa fa-align-center\"\n                    [label]=\"'platform.angular_components.editor_align_center' | translate\"\n                    [active]=\"activeStates.isAlignCenter\"\n                    (clicked)=\"setTextAlign('center')\"\n                />\n                <s-editor-toolbar-button\n                    icon=\"fa fa-align-right\"\n                    [label]=\"'platform.angular_components.editor_align_right' | translate\"\n                    [active]=\"activeStates.isAlignRight\"\n                    (clicked)=\"setTextAlign('right')\"\n                />\n            }\n\n            @if (isFormatAllowed('blockquote')) {\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n                <s-editor-toolbar-button\n                    icon=\"fa fa-quote-right\"\n                    [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n                    [active]=\"activeStates.isBlockquote\"\n                    (clicked)=\"toggleBlockquote()\"\n                />\n            }\n\n            @if (isFormatAllowed('code-block')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-code\"\n                    [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n                    [active]=\"activeStates.isCode\"\n                    (clicked)=\"toggleCode()\"\n                />\n            }\n\n            @if (isFormatAllowed('link')) {\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n                <s-editor-toolbar-button\n                    icon=\"fa fa-link\"\n                    [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n                    (clicked)=\"setLink()\"\n                />\n            }\n\n            @if (isFormatAllowed('image')) {\n                <s-editor-toolbar-button\n                    icon=\"fa fa-image\"\n                    [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n                    (clicked)=\"setImage()\"\n                />\n            }\n\n            @if (hasAnyFormatBeforeUndoRedo()) {\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n            }\n\n            <s-editor-toolbar-button\n                icon=\"fa fa-undo\"\n                [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n                [disabled]=\"!activeStates.canUndo\"\n                (clicked)=\"undo()\"\n            />\n            <s-editor-toolbar-button\n                icon=\"fa fa-redo\"\n                [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n                [disabled]=\"!activeStates.canRedo\"\n                (clicked)=\"redo()\"\n            />\n\n            @if (isFormatAllowed('clean')) {\n                <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n                <s-editor-toolbar-button\n                    icon=\"fa fa-remove-format\"\n                    [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n                    (clicked)=\"clearFormatting()\"\n                />\n            }\n        </div>\n    }\n\n    <div\n        #editorContainer\n        class=\"s-editor-content flex-1\"\n    ></div>\n    <input\n        #imageInput\n        type=\"file\"\n        accept=\"image/*\"\n        style=\"display: none\"\n        aria-hidden=\"true\"\n        (change)=\"onImageFileSelected($event)\"\n    />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}