{"version":3,"file":"croco-html.mjs","sources":["../../../projects/croco-html/src/lib/extensions/AngularMaterialTableMethods.ts","../../../projects/croco-html/src/lib/extensions/AudioMethods.ts","../../../projects/croco-html/src/lib/extensions/HtmlExtractionMethods.ts","../../../projects/croco-html/src/lib/extensions/ImageMethods.ts","../../../projects/croco-html/src/lib/tag-services/FileImageTagService.ts","../../../projects/croco-html/src/lib/tag-services/TextTagHtmlMarkupTagService.ts","../../../projects/croco-html/src/lib/tag-services/ExternalVideoTagService.ts","../../../projects/croco-html/src/lib/tag-services/HtmlRawTagService.ts","../../../projects/croco-html/src/lib/tag-services/DownloadButtonTagService.ts","../../../projects/croco-html/src/lib/tag-services/ButtonTagService.ts","../../../projects/croco-html/src/lib/tag-services/CustomWidgetTagService.ts","../../../projects/croco-html/src/lib/extensions/TextMethods.ts","../../../projects/croco-html/src/lib/extensions/VideoMethods.ts","../../../projects/croco-html/src/lib/extensions/Tags.ts","../../../projects/croco-html/src/lib/tag-services/FileAudioTagService.ts","../../../projects/croco-html/src/lib/extensions/TextSimpleMethods.ts","../../../projects/croco-html/src/lib/extensions/BootstrapTableMethods.ts","../../../projects/croco-html/src/lib/extensions/TableMethods.ts","../../../projects/croco-html/src/lib/tag-services/TableTagService.ts","../../../projects/croco-html/src/lib/extensions/BodyTagsExtensions.ts","../../../projects/croco-html/src/lib/extensions/XmlExtensions.ts","../../../projects/croco-html/src/lib/extensions/TableBuilder.ts","../../../projects/croco-html/src/lib/services/PublicFileUploadService.ts","../../../projects/croco-html/src/lib/services/PrivateFileUploadService.ts","../../../projects/croco-html/src/lib/services/CrocoHtmlFileOptionsService.ts","../../../projects/croco-html/src/lib/components/upload-files-btn/upload-files-btn.component.ts","../../../projects/croco-html/src/lib/components/upload-files-btn/upload-files-btn.component.html","../../../projects/croco-html/src/lib/components/add-files-btn/add-files-btn.component.ts","../../../projects/croco-html/src/lib/components/add-files-btn/add-files-btn.component.html","../../../projects/croco-html/src/lib/services/file-models.ts","../../../projects/croco-html/src/lib/services/PublicFilesQueryService.ts","../../../projects/croco-html/src/lib/services/PrivateFilesQueryService.ts","../../../projects/croco-html/src/lib/services/CommonFileInfoQueryService.ts","../../../projects/croco-html/src/lib/components/editor/audio-editor/audio-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/audio-editor/audio-editor.component.html","../../../projects/croco-html/src/lib/consts/index.ts","../../../projects/croco-html/src/lib/components/xml-tags/audio-player-tag-view/audio-player-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/audio-player-tag-view/audio-player-tag-view.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/embedded-video/code-video.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/embedded-video/code-video.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.html","../../../projects/croco-html/src/lib/services/blob-create.service.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.html","../../../projects/croco-html/src/lib/components/error-banner/error-banner.component.ts","../../../projects/croco-html/src/lib/components/error-banner/error-banner.component.html","../../../projects/croco-html/src/lib/services/screen-width.service.ts","../../../projects/croco-html/src/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/html-raw-view/html-raw-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/html-raw-view/html-raw-view.component.html","../../../projects/croco-html/src/lib/services/HtmlViewController.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.html","../../../projects/croco-html/src/lib/components/xml-tags/defined-custom-tag-view/defined-custom-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/defined-custom-tag-view/defined-custom-tag-view.component.html","../../../projects/croco-html/src/lib/services/HtmlPageDataController.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/external-video-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/external-video-editor.component.html","../../../projects/croco-html/src/lib/components/editor/html-raw-editor/html-raw-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/html-raw-editor/html-raw-editor.component.html","../../../projects/croco-html/src/lib/components/file-id-select/file-id-select.component.ts","../../../projects/croco-html/src/lib/components/file-id-select/file-id-select.component.html","../../../projects/croco-html/src/lib/components/editor/image-editor/image-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/image-editor/image-editor.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/DefaultTags.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/DefaultAligments.ts","../../../projects/croco-html/src/lib/components/editor/download-file-button-editor/download-file-button-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/download-file-button-editor/download-file-button-editor.component.html","../../../projects/croco-html/src/lib/components/editor/text-editor/text-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/text-editor/text-editor.component.html","../../../projects/croco-html/src/lib/components/editor/button-editor/button-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/button-editor/button-editor.component.html","../../../projects/croco-html/src/lib/components/editor/custom-widget-editor/custom-widget-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/custom-widget-editor/custom-widget-editor.component.html","../../../projects/croco-html/src/lib/models/editor-models.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/components/defined-custom-editor-block/defined-custom-editor-block.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/components/defined-custom-editor-block/defined-custom-editor-block.component.html","../../../projects/croco-html/src/lib/components/editor/main-editor-block/main-editor-block.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/main-editor-block.component.html","../../../projects/croco-html/src/lib/pipes/sprite-icon-path.pipe.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/components/custom-widget-icon/custom-widget-icon.component.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/components/custom-widget-icon/custom-widget-icon.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/visual-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/visual-editor.component.html","../../../projects/croco-html/src/lib/pipes/to-preview.pipe.ts","../../../projects/croco-html/src/lib/components/html-view/html-view.component.ts","../../../projects/croco-html/src/lib/components/html-view/html-view.component.html","../../../projects/croco-html/src/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.ts","../../../projects/croco-html/src/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.html","../../../projects/croco-html/src/lib/components/editor/main-editor/main-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor/main-editor.component.html","../../../projects/croco-html/src/lib/pipes/TagToSpanPipe.ts","../../../projects/croco-html/src/lib/pipes/ToHtmlBodyTagsPipe.ts","../../../projects/croco-html/src/lib/pipes/ToPreviewHtmlPipe.ts","../../../projects/croco-html/src/lib/index.ts","../../../projects/croco-html/src/lib/croco-html.module.ts","../../../projects/croco-html/src/public-api.ts","../../../projects/croco-html/src/croco-html.ts"],"sourcesContent":["import { BaseApiResponse } from '../models';\nimport { AngularMaterialTableData, TableHeaderData, TableRowData } from './TableMethods';\n\nexport class AngularMaterialTableMethods {\n    static getAngularMaterialTableData(columns: string[], rows: TableRowData[]): AngularMaterialTableData {\n\n        let data: object[] = [];\n\n        for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n            const row = rows[rowIndex];\n\n            var elem = {};\n\n            for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {\n                const column = columns[columnIndex];\n\n                elem[column] = row.columns[columnIndex].data.text;\n            }\n\n            data.push(elem);\n        }\n\n        return {\n            displayedColumns: columns,\n            data: data,\n        };\n    }\n\n    static checkHeaders(header: TableHeaderData): BaseApiResponse {\n        if (header === null) {\n            return {\n                isSucceeded: false,\n                message: \"Необходимо указать заголовок таблицы\"\n            };\n        }\n\n        let columns: string[] = header.columns;\n\n        var uniqueDislayedColumns = columns.filter((v, i, a) => a.indexOf(v) === i);\n\n        if (uniqueDislayedColumns.length !== columns.length) {\n            return {\n                isSucceeded: false,\n                message: \"Ошибка при обработке разметки таблицы. Обнаружены дубликаты заголовков.\"\n            };\n        }\n\n        return {\n            isSucceeded: true,\n            message: \"Ok\"\n        };\n    }\n    static checkAngularMaterialTableData(header: TableHeaderData, rows: TableRowData[], checkHeaders: boolean = true): BaseApiResponse {\n\n        if (checkHeaders) {\n            var checkHeadersResult = this.checkHeaders(header);\n\n            if (!checkHeadersResult.isSucceeded) {\n                return checkHeadersResult;\n            }\n        }\n\n        let columns: string[] = header.columns;\n\n        for (let i = 0; i < rows.length; i++) {\n            const row = rows[i];\n\n            if (row.columns.length !== columns.length) {\n                return {\n                    isSucceeded: false,\n                    message: `Ошибка при обработке разметки таблицы. `\n                        + `Количество колонок в каждой строке таблицы должно соотвествовать количеству колонок указанных в заголовке. `\n                        + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а должно быть ${columns.length}.`\n                };\n            }\n        }\n\n        return {\n            isSucceeded: true,\n            message: \"Ok\"\n        };\n    }\n}\n","export class FileAudioTagDataConsts {\n  static readonly TagName = \"audio-player\";\n  static readonly FileIdAttrName = \"file-id\";\n  static readonly TitleAttrName = \"title\";\n}\n\nexport class AudioMethods {\n\n  public static buildUrl(fileId: string, fileName: string): string {\n    //TODO заглушка, пока юзаем статичный фапйл\n    if (fileId && fileId !== '') {\n      if (!isNaN(Number(fileId))) {\n        return `/api/PrivateFiles/GetFile?fileId=${fileId}`;\n      } else {\n        return `/api/PublicFiles/GetFile?fileId=${fileId}`;\n      }\n    }\n\n    if (fileName && fileName !== '') {\n      return fileName;\n    }\n\n    return null;\n  }\n\n  public static isPrivateFileId(fileId: string): boolean {\n    return !isNaN(Number(fileId));\n  }\n\n  public static formatTime(seconds: number): string {\n    if (isNaN(seconds) || seconds < 0) {\n      return '0:00';\n    }\n\n    const minutes = Math.floor(seconds / 60);\n    const remainingSeconds = Math.floor(seconds % 60);\n\n    return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n  }\n\n  public static calculateProgress(currentTime: number, duration: number): number {\n    if (duration === 0 || isNaN(duration) || isNaN(currentTime)) {\n      return 0;\n    }\n    return Math.min(100, Math.max(0, (currentTime / duration) * 100));\n  }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { BodyTagsExtensions } from \"./BodyTagsExtensions\";\n\nexport class HtmlExtractionMethods {\n\n  static transformHtmlElementToBlocks(element: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock[] {\n    const data: InterfaceBlock[] = [];\n\n    for (let i = 0; i < element.children.length; i++) {\n\n      const elem = element.children.item(i) as HTMLElement;\n      const loweredTagName = elem.tagName.toLowerCase();\n\n      if (BodyTagsExtensions.hasTagService(loweredTagName, options)) {\n        const tagService = BodyTagsExtensions.getTagService(loweredTagName, options);\n\n        const resultBlock = tagService.extractBlockFromHtmlElement(elem, options);\n        data.push(resultBlock);\n      }\n      else {\n        data.push({\n          tagName: \"unsupported-tag\",\n          data: {\n            tagString: elem.outerHTML\n          }\n        });\n      }\n    }\n    \n    return data;\n  }\n\n  static transformHtmlStringToBlocks(value: string, options: CrocoHtmlOptions): InterfaceBlock[] {\n\n    if (value === undefined || value === null) {\n      return [];\n    }\n\n    value = value\n      .replace('\\n', '')\n      .replace('\\t', '');\n\n    var div = document.createElement(\"div\");\n    div.innerHTML = value;\n\n    return this.transformHtmlElementToBlocks(div, options);\n  }\n}\n","import { ImageRestrictions, IImageMediaRequest } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\n\nexport class FileImageTagDataConsts {\n  static readonly TagName = \"file-image\";\n  static readonly FileIdAttrName = \"file-id\";\n  static readonly ScreenMediaRequest = \"screen-media-request\";\n\n  static readonly MaxScreenWidth = 'max-screen-width';\n  static readonly MinScreenWidth = 'min-screen-width';\n  static readonly MaxImageHeight = 'max-image-height';\n  static readonly MaxImageWidth = 'max-image-width';\n\n  static readonly DefaultValueForFileImage = \"max-screen-width:1200,min-screen-width:900,max-image-height:300;max-screen-width:900,min-screen-width:600,max-image-height:200\";\n}\n\nexport class ImageMethods {\n\n  public static buildUrl(fileId: string, sizeType: string, options: CrocoHtmlOptions): string {\n\n    if (fileId === null || fileId === undefined) {\n      return null;\n    }\n\n    return options.imageOptions.sizeTypeAndFileIdImageUrlFormat\n      .replace(\"{sizeType}\", sizeType)\n      .replace(\"{fileId}\", fileId);\n  }\n\n  public static buildSmallUrl(fileId: string, options: CrocoHtmlOptions): string {\n    return ImageMethods.buildUrl(fileId, \"Small\", options);\n  }\n\n  public static buildMediumUrl(fileId: string, options: CrocoHtmlOptions): string {\n    return ImageMethods.buildUrl(fileId, \"Medium\", options);\n  }\n\n  public static isPrivateFileId(fileId: string): boolean {\n    return !isNaN(Number(fileId));\n  }\n\n  public static mediaRequestStringToArrayParser = (data: string) => {\n    if (!data) {\n      return [];\n    }\n\n    if (!data.length) {\n      return []\n    }\n\n    return data.split(';').reduce((requests: IImageMediaRequest[], currentValue: string) => {\n\n      const attrs = currentValue.split(',');\n\n      requests.push({\n        maxScreenWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxScreenWidth),\n        minScreenWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MinScreenWidth),\n        maxImageHeight: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxImageHeight),\n        maxImageWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxImageHeight)\n      });\n\n      return requests;\n    }, [])\n  }\n\n  public static createMediaRequestValue(arr: string[], attribute: string): number | null {\n    let elem = arr.find(el => el.includes(attribute));\n\n    if (!elem) {\n      return null;\n    }\n\n    return +elem.match(/\\d+/g).join('');\n  }\n\n  public static mediaRequestsArrayToString(data: IImageMediaRequest[]) {\n    if (!data.length) {\n      return ''\n    }\n\n    return data.map(el => ImageMethods.mediaRequestToString(el)).join(';')\n  }\n\n  public static mediaRequestToString(data: IImageMediaRequest) {\n    let result = `${FileImageTagDataConsts.MaxScreenWidth}:${data.maxScreenWidth},${FileImageTagDataConsts.MinScreenWidth}:${data.minScreenWidth}`;\n\n    if (data.maxImageHeight) {\n      result += `,${FileImageTagDataConsts.MaxImageHeight}:${data.maxImageHeight}`;\n    }\n\n    if (data.maxImageWidth) {\n      result += `,${FileImageTagDataConsts.MaxImageWidth}:${data.maxImageWidth}`;\n    }\n\n    return result;\n  }\n\n  public static getImageRestrictionsByScreenSize(screenSize: number, requests: IImageMediaRequest[]): ImageRestrictions {\n    let result = requests\n      .sort((a, b) => b.maxScreenWidth - a.maxScreenWidth)\n      .find(el => screenSize <= +el.maxScreenWidth && screenSize >= +el.minScreenWidth);\n\n    if (!result) {\n      return {\n        maxWidth: null,\n        maxHeight: null,\n      };\n    }\n\n    return {\n      maxHeight: result.maxImageHeight,\n      maxWidth: result.maxImageWidth\n    };\n  }\n}\n","import { FileImageTagDataConsts, ImageMethods } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag, FileImageTagData } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\n\nexport class FileImageTagService implements IMarkUpTagService {\n  tagName: string = FileImageTagDataConsts.TagName;\n  shortDescription: string = \"Изображение\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    let fileIdAttr = \"\";\n    let screenMediaRequestAttr = \"\";\n\n    if (bodyTag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName) && bodyTag.attributes[FileImageTagDataConsts.FileIdAttrName]) {\n      fileIdAttr = `${FileImageTagDataConsts.FileIdAttrName}=\"${bodyTag.attributes[FileImageTagDataConsts.FileIdAttrName]}\"`;\n    }\n\n    if (bodyTag.attributes.hasOwnProperty(FileImageTagDataConsts.ScreenMediaRequest) && bodyTag.attributes[FileImageTagDataConsts.ScreenMediaRequest]) {\n      screenMediaRequestAttr = ` ${FileImageTagDataConsts.ScreenMediaRequest}=\"${bodyTag.attributes[FileImageTagDataConsts.ScreenMediaRequest]}\"`;\n    }\n    \n    return `<${FileImageTagDataConsts.TagName} ${fileIdAttr}${screenMediaRequestAttr}></${FileImageTagDataConsts.TagName}>`;\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    let fileId = elem.getAttribute(FileImageTagDataConsts.FileIdAttrName);\n\n    let src = ImageMethods.buildMediumUrl(fileId, options);\n\n    return {\n      tagName: FileImageTagDataConsts.TagName,\n      data: {\n        src,\n        fileId: fileId,\n        screenMediaRequest: elem.getAttribute(FileImageTagDataConsts.ScreenMediaRequest)\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let fileData = data.data as FileImageTagData;\n\n    let attrs = {};\n\n    if (fileData.fileId) {\n      attrs[FileImageTagDataConsts.FileIdAttrName] = fileData.fileId;\n    }\n\n    if (fileData.screenMediaRequest) {\n      attrs[FileImageTagDataConsts.ScreenMediaRequest] = fileData.screenMediaRequest;\n    }\n\n    return {\n      tagDescription: {\n        tag: FileImageTagDataConsts.TagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: attrs,\n      innerHtml: \"\"\n    };\n  }\n\n  getDefaultValue(): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n        [FileImageTagDataConsts.FileIdAttrName]: null,\n        [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n      },\n      innerHtml: \"\",\n    }\n  }\n}\n","import { TextSimpleMethods, SimpleTextTagData, BodyTagsExtensions } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"../tag-services/IMarkUpTagService\";\n\nexport enum TextAlignment {\n  Left = 'left',\n  Center = 'center',\n  Right = 'right',\n}\n\nexport class TextTagDataConsts {\n  static readonly HAlign = \"h-align\";\n}\n\nexport class TextTagHtmlMarkupTagService implements IMarkUpTagService {\n\n  constructor(tagName: string, shortDescription: string) {\n    this.tagName = tagName;\n    this.shortDescription = shortDescription;\n  }\n\n  tagName: string = \"text\";\n  shortDescription: string = \"T\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    return `<${this.tagName} h-align=\"${bodyTag.attributes[TextTagDataConsts.HAlign]}\">${bodyTag.innerHtml}</${this.tagName}>`;\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return TextSimpleMethods.extractTextTag(elem);\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let textTagData = data.data as SimpleTextTagData;\n\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: { [TextTagDataConsts.HAlign]: textTagData.horizontalAlignment },\n      innerHtml: BodyTagsExtensions.sanitizeInnerHtml(textTagData.html)\n    };\n  }\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n        [TextTagDataConsts.HAlign]: TextAlignment.Left\n      },\n      innerHtml: \"\",\n    }\n  }\n}\n","import { ExternalVideoTagDataConsts, ExternalVideoSupportedTypes } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nconst defaultLinkYouTube = \"https://www.youtube.com/embed/4CtSAnJDfsI?si=scyBNJa0Hs2t5aLE\";\nconst defaultLinkVk = \"https://vk.com/video_ext.php?oid=-22822305&id=456241864&hd=2\";\n\nexport class ExternalVideoTagService implements IMarkUpTagService {\n  tagName: string = ExternalVideoTagDataConsts.TagName;\n  shortDescription: string = \"Видео\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    let useResponsiveWrapperAttr = '';\n\n    if (bodyTag.attributes[ExternalVideoTagDataConsts.VideoTypeAttrName] === ExternalVideoSupportedTypes.Code) {\n      useResponsiveWrapperAttr = `${ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName}=\"${bodyTag.attributes[ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName] || false}\"`;\n    }\n\n    return `<${bodyTag.tagDescription.tag} ${useResponsiveWrapperAttr} type=\"${bodyTag.attributes[ExternalVideoTagDataConsts.VideoTypeAttrName]}\" link=\"${bodyTag.attributes[ExternalVideoTagDataConsts.LinkAttrName]}\">${bodyTag.innerHtml}</${bodyTag.tagDescription.tag}>`;\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return {\n      tagName: ExternalVideoTagDataConsts.TagName,\n      data: {\n        type: elem.getAttribute(ExternalVideoTagDataConsts.VideoTypeAttrName),\n        link: elem.getAttribute(ExternalVideoTagDataConsts.LinkAttrName),\n        useResponsiveWrapper: elem.getAttribute(ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName) !== 'false',\n        innerHtml: elem.innerHTML\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let fileData = data.data as ExternalVideoTagDataConsts;\n\n    return {\n      tagDescription: {\n        tag: data.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: fileData,\n      innerHtml: data.data.type === ExternalVideoSupportedTypes.Code ? data.data.innerHtml : ''\n    };\n  }\n\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n\n    let attrs = {\n    };\n\n    let innerHtml = \"\";\n\n    attrs[ExternalVideoTagDataConsts.VideoTypeAttrName] = props.selectedVideoPlayer;\n    attrs[ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName] = false;\n    attrs[ExternalVideoTagDataConsts.LinkAttrName] = props.selectedVideoPlayer === ExternalVideoSupportedTypes.Code ? '' :\n      props.selectedVideoPlayer === ExternalVideoSupportedTypes.VkVideo\n        ? defaultLinkVk\n        : defaultLinkYouTube;\n\n    if (props.selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n      innerHtml = props.htmlRaw;\n    }\n\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: attrs,\n      innerHtml: innerHtml,\n    };\n  }\n}\n","import { BodyTagsExtensions } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class HtmlRawTagDataConsts {\n  static readonly TagName = \"html-raw\";\n}\n\nexport interface ExtractHtmlRawTag {\n  type: string;\n  data: ExtractHtmlRawTagData;\n}\n\nexport interface ExtractHtmlRawTagData {\n  innerHTML: string;\n}\n\n\nexport class HtmlRawTagService implements IMarkUpTagService {\n\n  tagName: string = HtmlRawTagDataConsts.TagName;\n  shortDescription: string = \"Разметка\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    return `<${this.tagName}>${bodyTag.innerHtml}</${this.tagName}>`\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return {\n      tagName: HtmlRawTagDataConsts.TagName,\n      data: {\n        innerHTML: elem.innerHTML\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    return {\n      tagDescription: {\n        tag: HtmlRawTagDataConsts.TagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {},\n      innerHtml: BodyTagsExtensions.sanitizeInnerHtml(data.data[\"innerHTML\"])\n    };\n  }\n\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n      },\n      innerHtml: props.htmlRaw,\n    };\n  }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { ButtonTagDataConsts } from \"./ButtonTagService\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nconst defaultLinkForDownload = \"https://storage.yandexcloud.net/mega-academy/presentation.pdf\";\n\nexport class DownloadButtonTagDataConsts {\n  static readonly TagName = \"download-file-button\";\n  static readonly TitleAttrName = \"title\";\n  static readonly LinkAttrName = \"link\";\n}\n\nexport interface DownloadButtonTag {\n  type: string;\n  data: DownloadButtonTagData;\n}\n\nexport interface DownloadButtonTagData {\n  title: string;\n  link: string;\n}\n\nexport class DownloadButtonTagService implements IMarkUpTagService {\n  tagName: string = DownloadButtonTagDataConsts.TagName;\n  shortDescription: string = \"Кнопка для скачивания\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    return `<${this.tagName} title=\"${bodyTag.attributes[DownloadButtonTagDataConsts.TitleAttrName]}\" link=\"${bodyTag.attributes[DownloadButtonTagDataConsts.LinkAttrName]}\"></${this.tagName}>`;\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return {\n      tagName: DownloadButtonTagDataConsts.TagName,\n      data: {\n        title: elem.getAttribute(DownloadButtonTagDataConsts.TitleAttrName),\n        link: elem.getAttribute(DownloadButtonTagDataConsts.LinkAttrName)\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let fileData = data.data as ButtonTagDataConsts;\n\n    return {\n      tagDescription: {\n        tag: data.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: fileData,\n      innerHtml: \"\"\n    };\n  }\n\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n        [DownloadButtonTagDataConsts.LinkAttrName]: defaultLinkForDownload,\n        [DownloadButtonTagDataConsts.TitleAttrName]: 'Скачать'\n      },\n      innerHtml: props.htmlRaw,\n    };\n  }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class ButtonTagDataConsts {\n  static readonly TagName = \"button\";\n  static readonly TextAttrName = \"text\";\n  static readonly TypeAttrName = \"type\";\n  static readonly ClickAttrName = \"click\";\n}\n\nexport interface ButtonTag {\n  type: string;\n  data: ButtonTagData;\n}\n\n\nexport interface ButtonTagData {\n  text: string;\n  type: string;\n  click: string;\n}\n\nexport class ButtonTagService implements IMarkUpTagService {\n  tagName: string = ButtonTagDataConsts.TagName;\n  shortDescription: string = \"Кнопка\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n    let atts = bodyTag.attributes;\n\n    return `<${this.tagName} text=\"${atts[ButtonTagDataConsts.TextAttrName]}\" type=\"${atts[ButtonTagDataConsts.TypeAttrName]}\"  click=\"${atts[ButtonTagDataConsts.ClickAttrName]}\"></${this.tagName}>`\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return {\n      tagName: ButtonTagDataConsts.TagName,\n      data: {\n        text: elem.getAttribute(ButtonTagDataConsts.TextAttrName),\n        type: elem.getAttribute(ButtonTagDataConsts.TypeAttrName),\n        click: elem.getAttribute(ButtonTagDataConsts.ClickAttrName)\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let fileData = data.data as ButtonTagDataConsts;\n\n    return {\n      tagDescription: {\n        tag: data.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: fileData,\n      innerHtml: \"\"\n    };\n  }\n\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n        [ButtonTagDataConsts.ClickAttrName]: '',\n        [ButtonTagDataConsts.TypeAttrName]: 'button',\n        [ButtonTagDataConsts.TextAttrName]: 'Кнопка'\n      },\n      innerHtml: props.htmlRaw,\n    };\n  }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class CustomWidgetTagDataConsts {\n  static readonly TagName = \"custom-widget\";\n\n  static readonly TypeAttrName = \"type\";\n  static readonly DataIdAttrName = \"data-id\";\n  static readonly WidgetIdAttrName = \"widget-id\";\n}\n\nexport interface CustomWidgetTag {\n  type: string;\n  data: CustomWidgetTagData;\n}\n\nexport interface CustomWidgetTagData {\n  type: string;\n  dataId: string;\n  widgetId: string;\n}\n\n\nexport class CustomWidgetTagService implements IMarkUpTagService {\n  tagName: string = CustomWidgetTagDataConsts.TagName;\n  shortDescription: string = \"Виджет\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n    let attrs = bodyTag.attributes;\n\n    return `<${this.tagName} type=\"${attrs[CustomWidgetTagDataConsts.TypeAttrName]}\" data-id=\"${attrs[CustomWidgetTagDataConsts.DataIdAttrName]}\"  widget-id=\"${attrs[CustomWidgetTagDataConsts.WidgetIdAttrName]}\"></${this.tagName}>`\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return {\n      tagName: CustomWidgetTagDataConsts.TagName,\n      data: {\n        type: elem.getAttribute(CustomWidgetTagDataConsts.TypeAttrName),\n        dataId: elem.getAttribute(CustomWidgetTagDataConsts.DataIdAttrName),\n        widgetId: elem.getAttribute(CustomWidgetTagDataConsts.WidgetIdAttrName)\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let customWidgetTagData = data.data as CustomWidgetTagData;\n\n    return {\n      tagDescription: {\n        tag: data.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: customWidgetTagData,\n      innerHtml: \"\"\n    };\n  }\n\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n        [CustomWidgetTagDataConsts.TypeAttrName]: 'example-type',\n        [CustomWidgetTagDataConsts.DataIdAttrName]: 'example-data-id',\n        [CustomWidgetTagDataConsts.WidgetIdAttrName]: 'example-widget-id'\n      },\n      innerHtml: props.htmlRaw,\n    };\n  }\n\n  static ExtractCustomWidgetTagData(attributes: any): CustomWidgetTagData {\n    return {\n      type: attributes[CustomWidgetTagDataConsts.TypeAttrName],\n      dataId: attributes[CustomWidgetTagDataConsts.DataIdAttrName],\n      widgetId: attributes[CustomWidgetTagDataConsts.WidgetIdAttrName]\n    }\n  }\n\n  static ExtractCustomWidgetAttributes(customWidgetTagData: CustomWidgetTagData) {\n    return {\n      [CustomWidgetTagDataConsts.TypeAttrName]: customWidgetTagData.type,\n      [CustomWidgetTagDataConsts.DataIdAttrName]: customWidgetTagData.dataId,\n      [CustomWidgetTagDataConsts.WidgetIdAttrName]: customWidgetTagData.widgetId\n    }\n  }\n}\n","export class TextTags {\n\n  public static readonly text = \"text\";\n\n  public static readonly h1 = \"h1\";\n\n  public static readonly h2 = \"h2\";\n\n  public static readonly h3 = \"h3\";\n\n  public static readonly h4 = \"h4\";\n\n  public static readonly h5 = \"h5\";\n\n  public static readonly h6 = \"h6\";\n\n  public static headerTextTags = [TextTags.h1, TextTags.h2, TextTags.h3, TextTags.h4, TextTags.h5, TextTags.h6];\n\n  public static allTextTags = [TextTags.text, ...TextTags.headerTextTags];\n\n}\n","export class ExternalVideoTagDataConsts {\n  static readonly TagName = \"external-video\";\n  static readonly VideoTypeAttrName = \"type\";\n  static readonly LinkAttrName = \"link\";\n  static readonly UseResponsiveWrapperAttrName = \"use-responsive-wrapper\";\n  static readonly IframeAttrName = \"iframe\";\n}\n\nexport class ExternalVideoSupportedTypes {\n  static readonly Youtube = \"youtube\"\n  static readonly VkVideo = \"vk-video\"\n  static readonly Code = \"code\"\n}\n\nexport const ExternalVideoPlayers = [\n  {\n    type: ExternalVideoSupportedTypes.Code,\n    displayValue: 'Встраиваемое Видео',\n  },\n  {\n    type: ExternalVideoSupportedTypes.Youtube,\n    displayValue: 'Youtube',\n  },\n  {\n    type: ExternalVideoSupportedTypes.VkVideo,\n    displayValue: 'Vk Video',\n  }\n]\n\nexport interface ExternalVideoTag {\n  type: string;\n  data: ExternalVideoTagData;\n}\n\nexport interface ExternalVideoTagData {\n  type: string;\n  link: string;\n  innerHtml: string;\n  useResponsiveWrapper: boolean;\n}\n","import { HtmlRawTagDataConsts } from \"../tag-services\";\nimport { CustomWidgetTagDataConsts } from \"../tag-services/CustomWidgetTagService\";\nimport { FileImageTagDataConsts } from \"./ImageMethods\";\nimport { TextTags } from \"./TextMethods\";\nimport { ExternalVideoTagDataConsts } from \"./VideoMethods\";\n\nexport class Tags {\n  public static readonly Text = TextTags.text;\n  public static readonly H1 = TextTags.h1;\n  public static readonly H2 = TextTags.h2;\n  public static readonly H3 = TextTags.h3;\n  public static readonly H4 = TextTags.h4;\n  public static readonly H5 = TextTags.h5;\n  public static readonly H6 = TextTags.h6;\n\n  public static readonly HtmlRaw = HtmlRawTagDataConsts.TagName;\n  public static readonly FileImage = FileImageTagDataConsts.TagName;\n  public static readonly Table = 'table';\n  public static readonly RichText = 'rich-text';\n  public static readonly ExternalVideo = ExternalVideoTagDataConsts.TagName;\n  public static readonly UnsupportedTag = 'unsupported-tag';\n  public static readonly CustomWidget = CustomWidgetTagDataConsts.TagName;\n}\n","import { FileAudioTagDataConsts, AudioMethods } from \"../extensions/AudioMethods\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag, FileAudioTagData } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\n\nexport class FileAudioTagService implements IMarkUpTagService {\n  tagName: string = FileAudioTagDataConsts.TagName;\n  shortDescription: string = \"Аудио\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    let fileIdAttr = \"\";\n    let titleAttr = \"\";\n\n    if (bodyTag.attributes.hasOwnProperty(FileAudioTagDataConsts.FileIdAttrName) &&\n        bodyTag.attributes[FileAudioTagDataConsts.FileIdAttrName]) {\n      fileIdAttr = `${FileAudioTagDataConsts.FileIdAttrName}=\"${bodyTag.attributes[FileAudioTagDataConsts.FileIdAttrName]}\"`;\n    }\n\n    if (bodyTag.attributes.hasOwnProperty(FileAudioTagDataConsts.TitleAttrName) &&\n        bodyTag.attributes[FileAudioTagDataConsts.TitleAttrName]) {\n      titleAttr = `${FileAudioTagDataConsts.TitleAttrName}=\"${bodyTag.attributes[FileAudioTagDataConsts.TitleAttrName]}\"`;\n    }\n\n    return `<${FileAudioTagDataConsts.TagName} ${fileIdAttr} ${titleAttr}></${FileAudioTagDataConsts.TagName}>`;\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    let fileId = elem.getAttribute(FileAudioTagDataConsts.FileIdAttrName);\n    let title = elem.getAttribute(FileAudioTagDataConsts.TitleAttrName);\n\n    return {\n      tagName: FileAudioTagDataConsts.TagName,\n      data: {\n        fileId: fileId,\n        title: title\n      }\n    };\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n    let fileData = data.data as FileAudioTagData;\n\n    let attrs = {};\n\n    if (fileData.fileId) {\n      attrs[FileAudioTagDataConsts.FileIdAttrName] = fileData.fileId;\n    }\n\n    if (fileData.title) {\n      attrs[FileAudioTagDataConsts.TitleAttrName] = fileData.title;\n    }\n\n    return {\n      tagDescription: {\n        tag: FileAudioTagDataConsts.TagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: attrs,\n      innerHtml: \"\"\n    };\n  }\n\n  getDefaultValue(): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n        [FileAudioTagDataConsts.FileIdAttrName]: '',\n        [FileAudioTagDataConsts.TitleAttrName]: ''\n      },\n      innerHtml: \"\",\n    }\n  }\n}\n","import { da, tr } from \"date-fns/locale\";\nimport { BaseApiResponse } from \"../models\";\nimport { TextAlignment } from \"../tag-services\";\n\nexport const TextTag = \"text\";\n\nexport interface GenericTextTag {\n    tagName: string,\n    data: SimpleTextTagData\n}\n\nexport interface IHorizontalAlignmentExtractionResult {\n    succeeded: boolean;\n    result: TextAlignment;\n    errorMessage: string;\n}\n\nexport interface SimpleTextTagData {\n    textTagName: string;\n    text: string,\n    html: string,\n    horizontalAlignment: \"left\" | \"right\" | \"center\",\n    validationResult: BaseApiResponse\n}\n\nexport class TextSimpleMethods {\n\n    static supportedTags = [\"sup\", \"sub\", \"strong\", \"b\", \"i\", \"u\"];\n\n    static extractTextTag(elem: HTMLElement): GenericTextTag {\n\n        const hAlignExtractResult = this.extractHorizontalAlignment(elem);\n\n        var data: SimpleTextTagData = {\n            textTagName: elem.tagName.toLowerCase(),\n            text: this.prepareText(elem.innerText),\n            html: this.prepareText(elem.innerHTML),\n            horizontalAlignment: hAlignExtractResult.result,\n            validationResult: {\n                isSucceeded: true,\n                message: \"Ok\"\n            }\n        };\n\n        if (!hAlignExtractResult.succeeded) {\n            data.validationResult.isSucceeded = false;\n            data.validationResult.message = hAlignExtractResult.errorMessage;\n        }\n\n        let result: GenericTextTag = {\n            tagName: data.textTagName,\n            data: data\n        };\n\n        var html = result.data.html;\n        var htmlValidation = this.validateTextHtml(html);\n\n        if (!htmlValidation.isSucceeded) {\n            result.data.validationResult = htmlValidation;\n        }\n\n        return result;\n    }\n\n    static prepareText(s: string): string {\n        s = s.trim().replace('\\n\\t', '');\n\n        if (s === '\\n') {\n            s = '';\n        }\n\n        return s;\n    }\n\n    static extractHorizontalAlignment(elem: HTMLElement): IHorizontalAlignmentExtractionResult {\n        const hAlignValue = elem.getAttribute(\"h-align\") ?? TextAlignment.Left;\n\n        const alignmentVals: string[] = [TextAlignment.Left, TextAlignment.Right, TextAlignment.Center];\n\n        if (alignmentVals.indexOf(hAlignValue) < 0) {\n\n            return {\n                result: TextAlignment.Left,\n                succeeded: false,\n                errorMessage: `Недопустимое значение атрибута h-align. Допустимые значения: ${alignmentVals.join(', ')}. `\n                    + 'Данный тег можно не указывать, по-умолчанию будет применено выравнивание слева.'\n            };\n        }\n\n        return {\n            result: hAlignValue as TextAlignment,\n            succeeded: true,\n            errorMessage: \"\"\n        };\n    }\n\n    static validateTextHtml(html: string): BaseApiResponse {\n\n        var p = document.createElement(\"p\");\n        p.innerHTML = html;\n\n        for (let i = 0; i < p.children.length; i++) {\n            const element = p.children.item(i);\n\n            var validationResult = this.validateTag(element);\n\n            if (!validationResult.isSucceeded) {\n                return validationResult;\n            }\n        }\n\n        return {\n            isSucceeded: true,\n            message: `Ok`\n        }\n    }\n\n    static validateTag(element: Element): BaseApiResponse {\n        let lowerTag = element.tagName.toLowerCase();\n\n        if (!this.supportedTags.includes(lowerTag)) {\n            return {\n                isSucceeded: false,\n                message: `Тег <${lowerTag}> не поддерживается внутри тега <text>`\n            }\n        }\n\n        for (let i = 0; i < element.children.length; i++) {\n            const nElement = element.children.item(i);\n\n            var innerValidationResult = this.validateTag(nElement);\n\n            if (!innerValidationResult.isSucceeded) {\n                return innerValidationResult;\n            }\n        }\n\n        return {\n            isSucceeded: true,\n            message: \"Ok\"\n        };\n    }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { FileImageTagDataConsts } from './ImageMethods';\nimport { TableHeaderData, TableRowData } from './TableMethods';\nimport { GenericTextTag, TextTag } from './TextSimpleMethods';\nimport { FileImageTag } from \"../models/image-models\";\n\nexport class BootstrapTableMethods {\n\n    static buildTable(header: TableHeaderData, rows: TableRowData[]): string {\n        let result = `<table class=\"table table-bordered\">`;\n        result += this.buildHeader(header);\n        result += this.buildBody(rows);\n        result += \"</table>\";\n\n        return result;\n    }\n\n    static buildHeader(data: TableHeaderData) {\n        if (data === null) {\n            return \"\";\n        }\n\n        let result = \"<thead>\";\n        result += \"<tr>\";\n        for (let index = 0; index < data.columns.length; index++) {\n            result += `<th>${data.columns[index]}</th>`;\n        }\n        result += \"</tr>\";\n\n        result += \"</thead>\";\n\n        return result;\n    }\n\n    static buildBody(rows: TableRowData[]) {\n        let result = \"<tbody>\";\n\n        for (let i = 0; i < rows.length; i++) {\n            const row = rows[i];\n\n            result += \"<tr>\";\n            for (let j = 0; j < row.columns.length; j++) {\n                const col = row.columns[j];\n\n                result += `<td class=\"align-middle\">${this.buildInnerTags(col.data.children)}</td>`;\n            }\n            result += \"</tr>\";\n        }\n\n        result += \"</tbody>\";\n        return result;\n    }\n\n    static buildInnerTags(tags: InterfaceBlock[]) {\n        let result = \"\";\n        for (let i = 0; i < tags.length; i++) {\n            result += this.buildInnerTag(tags[i]);\n        }\n\n        return result;\n    }\n\n    static buildInnerTag(data: InterfaceBlock): string {\n        if (data.tagName === FileImageTagDataConsts.TagName) {\n            let fileImageTag = data as FileImageTag;\n            return `<img src=${fileImageTag.data.src} class=\"mx-auto d-block img-fluid\" />`;\n        }\n        else if (data.tagName === TextTag) {\n\n            let simpleTextTag = data as GenericTextTag;\n\n            var map = {\n                [\"left\"]: \"text-start\",\n                [\"center\"]: \"text-center\",\n                [\"right\"]: \"text-end\"\n            };\n\n            if (!simpleTextTag.data.validationResult.isSucceeded) {\n                return `<span>Ошибка в тексте ${simpleTextTag.data.validationResult.message}</span>`;\n            }\n\n            return `<div class=\"${map[simpleTextTag.data.horizontalAlignment]}\"><span>${simpleTextTag.data.html}</span></div>`;\n        }\n        else {\n            return `<p>Тег ${data.tagName} не поддерживается</p>`;\n        }\n    }\n}\n","import { BaseApiResponse } from '../models';\nimport { CrocoHtmlOptions } from '../options';\nimport { AngularMaterialTableMethods } from './AngularMaterialTableMethods';\nimport { BootstrapTableMethods } from './BootstrapTableMethods';\nimport { HtmlExtractionMethods } from './HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { TextSimpleMethods } from './TextSimpleMethods';\nimport { TextTags } from './TextMethods';\n\nexport interface TableHeaderData {\n    type: \"table-header\";\n    columns: string[];\n}\n\nexport interface TableRowColumnData {\n    type: \"table-row-column-data\";\n    data: {\n        text: string;\n        children: InterfaceBlock[];\n    }\n}\n\nexport interface TableRowData {\n    type: \"table-row-column\";\n    columns: TableRowColumnData[];\n}\n\nexport interface TableData {\n    header: TableHeaderData;\n    rows: TableRowData[];\n    bootstrapHtml: string;\n    html: string;\n    angularMaterialTableDataCheck?: BaseApiResponse;\n}\n\nexport interface TableTagData {\n    type: \"table\";\n    data: TableData;\n}\n\nexport class TableTypes {\n    static readonly TableRowColumnData = \"table-row-column-data\";\n    static readonly Table = \"table\";\n    static readonly TableRowColumn = \"table-row-column\";\n}\n\nexport interface AngularMaterialTableData {\n    displayedColumns: string[];\n    data: object[];\n}\n\nexport class TableMethods {\n\n    static getTableFromHtmlTag(tableTag: HTMLTableElement, options: CrocoHtmlOptions): InterfaceBlock {\n\n        const tableHeader = TableMethods.getHeader(tableTag);\n        const tableRows = TableMethods.getTableRows(tableTag, options);\n\n        let tableData: TableData = {\n            header: tableHeader,\n            rows: tableRows,\n            bootstrapHtml: BootstrapTableMethods.buildTable(tableHeader, tableRows),\n            html: tableTag.outerHTML,\n            angularMaterialTableDataCheck: AngularMaterialTableMethods.checkAngularMaterialTableData(tableHeader, tableRows)\n        };\n\n        return {\n            tagName: TableTypes.Table,\n            data: tableData,\n            validationResult: this.checkTable(tableData)\n        };\n    }\n\n    static checkTable(tableData: TableData): BaseApiResponse {\n\n        let rows = tableData.rows;\n\n        let prevRowCount = -1;\n        for (let i = 0; i < rows.length; i++) {\n            const row = rows[i];\n\n            if (row.columns.length !== prevRowCount && prevRowCount != -1) {\n                return {\n                    isSucceeded: false,\n                    message: `Ошибка при обработке разметки таблицы. `\n                        + `Количество колонок в каждой строке таблицы должно соотвествовать друг другу. `\n                        + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а в строке выше ${prevRowCount}.`\n                };\n            }\n            prevRowCount = row.columns.length;\n        }\n\n        return {\n            isSucceeded: true,\n            message: \"Ok\"\n        }\n    }\n\n\n    static getHeader(tableTag: HTMLTableElement): TableHeaderData {\n        let header = tableTag.tHead;\n\n        if (header === null) {\n            return null;\n        }\n\n        let tr = header.children.item(0);\n\n        let headerColumns: string[] = [];\n\n        for (let j = 0; j < tr.children.length; j++) {\n            const jElement = tr.children.item(j) as HTMLElement;\n\n            headerColumns.push(jElement.innerHTML);\n        }\n\n        return {\n            type: \"table-header\",\n            columns: headerColumns\n        };\n    }\n\n    static getTableRows(tableTag: HTMLTableElement, options: CrocoHtmlOptions): Array<TableRowData> {\n        let tBody = tableTag.tBodies.item(0);\n\n        let rows: TableRowData[] = [];\n\n        for (let i = 0; i < tBody.children.length; i++) {\n            const iElement = tBody.children.item(i);\n\n            let rowColumns: TableRowColumnData[] = [];\n\n            for (let j = 0; j < iElement.children.length; j++) {\n                const jElement = iElement.children.item(j) as HTMLElement;\n\n                let children = HtmlExtractionMethods.transformHtmlElementToBlocks(jElement, options);\n\n                if (children.length === 0) {\n                    var textTag = document.createElement(TextTags.text);\n                    textTag.innerHTML = jElement.innerHTML;\n\n                    var textElem = TextSimpleMethods.extractTextTag(textTag);\n\n                    children.push(textElem);\n                }\n\n                var result: TableRowColumnData = {\n                    type: TableTypes.TableRowColumnData,\n                    data: {\n                        text: jElement.innerHTML,\n                        children\n                    }\n                };\n\n                rowColumns.push(result);\n            }\n\n            rows.push({\n                type: TableTypes.TableRowColumn,\n                columns: rowColumns\n            });\n        }\n\n        return rows;\n    }\n}\n","import { TableData, TableMethods, TableTypes } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class TableTagService implements IMarkUpTagService {\n  tagName: string = TableTypes.Table;\n  shortDescription: string = \"Таблица\";\n\n  bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n    return `<${this.tagName}>${bodyTag.innerHtml}</${this.tagName}>`\n  }\n\n  extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n    return TableMethods.getTableFromHtmlTag(elem as HTMLTableElement, options);\n  }\n\n  toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n    let tableData = data.data as TableData;\n\n    return {\n      tagDescription: {\n        tag: data.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: tableData,\n      innerHtml: null\n    };\n  }\n\n  getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n    return {\n      tagDescription: {\n        tag: this.tagName,\n        displayValue: this.shortDescription,\n        isCustom: false\n      },\n      attributes: {\n      },\n      innerHtml: props.htmlRaw,\n    };\n  }\n}\n","import { HtmlBodyTag } from \"../models/models\";\nimport { HtmlExtractionMethods } from \"./HtmlExtractionMethods\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { FileImageTagDataConsts } from \"./ImageMethods\";\nimport { FileAudioTagDataConsts } from \"./AudioMethods\";\nimport { Tags } from \"./Tags\";\nimport { ExternalVideoTagDataConsts } from \"./VideoMethods\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\nimport { DownloadButtonTagDataConsts, DownloadButtonTagService, FileImageTagService, TextTagHtmlMarkupTagService } from \"../tag-services\";\nimport { FileAudioTagService } from \"../tag-services/FileAudioTagService\";\nimport { ExternalVideoTagService } from \"../tag-services/ExternalVideoTagService\";\nimport { HtmlRawTagDataConsts, HtmlRawTagService } from \"../tag-services/HtmlRawTagService\";\nimport { ButtonTagDataConsts, ButtonTagService } from \"../tag-services/ButtonTagService\";\nimport { TextTags } from \"./TextMethods\";\nimport { TableTypes } from \"./TableMethods\";\nimport { TableTagService } from \"../tag-services/TableTagService\";\n\nexport class BodyTagsExtensions {\n\n  private static readonly _tagServices: { [id: string]: IMarkUpTagService; } = {\n    [TextTags.text]: new TextTagHtmlMarkupTagService(\"text\", \"T\"),\n    [TextTags.h1]: new TextTagHtmlMarkupTagService(\"h1\", \"H1\"),\n    [TextTags.h2]: new TextTagHtmlMarkupTagService(\"h2\", \"H2\"),\n    [TextTags.h3]: new TextTagHtmlMarkupTagService(\"h3\", \"H3\"),\n    [TextTags.h4]: new TextTagHtmlMarkupTagService(\"h4\", \"H4\"),\n    [TextTags.h5]: new TextTagHtmlMarkupTagService(\"h5\", \"H5\"),\n    [TextTags.h6]: new TextTagHtmlMarkupTagService(\"h6\", \"H6\"),\n    [FileImageTagDataConsts.TagName]: new FileImageTagService(),\n    [FileAudioTagDataConsts.TagName]: new FileAudioTagService(),\n    [ExternalVideoTagDataConsts.TagName]: new ExternalVideoTagService(),\n    [HtmlRawTagDataConsts.TagName]: new HtmlRawTagService(),\n    [DownloadButtonTagDataConsts.TagName]: new DownloadButtonTagService(),\n    [ButtonTagDataConsts.TagName]: new ButtonTagService(),\n    [TableTypes.Table]: new TableTagService()\n  }\n\n  public static hasTagService(tagName: string, options: CrocoHtmlOptions) {\n    if (this._tagServices.hasOwnProperty(tagName)) {\n      return true;\n    }\n\n    if (options.definedCustomTags.hasOwnProperty(tagName)){\n      return true;\n    }\n\n    return false;\n  }\n\n  public static getTagService(tagName: string, options: CrocoHtmlOptions) {\n    if (this._tagServices.hasOwnProperty(tagName)) {\n      return this._tagServices[tagName];\n    }\n\n    return options.definedCustomTags[tagName];\n  }\n\n  static convertToHtmlString(bodyTag: HtmlBodyTag, options: CrocoHtmlOptions): string {\n    const tagName = bodyTag.tagDescription.tag.toLowerCase();\n\n    if (this.hasTagService(tagName, options)) {\n      return this.getTagService(tagName, options).bodyTagToHtmlStringConverter(bodyTag);\n    }\n\n    return `<mapper-not-found>\"${tagName}\" тег не найден.</mapper-not-found>`;\n  }\n\n  static bodyTagsToHtml(bodyTags: HtmlBodyTag[], options: CrocoHtmlOptions): string {\n    let htmls = bodyTags.map(bodyTag => (BodyTagsExtensions.convertToHtmlString(bodyTag, options)));\n\n    let result = \"\";\n\n    for (let index = 0; index < htmls.length; index++) {\n      const element = htmls[index];\n\n      result += element;\n    }\n\n    return result;\n  }\n\n  static getBodyTags(html: string, options: CrocoHtmlOptions) {\n    let result = HtmlExtractionMethods.transformHtmlStringToBlocks(html, options);\n    \n    return result.map(x => BodyTagsExtensions.toBodyTag(x, options));\n  }\n\n  static sanitizeInnerHtml(html: string): string {\n    return html.trim().replace('\\n\\t', '');\n  }\n\n  static toBodyTag(data: InterfaceBlock, options: CrocoHtmlOptions): HtmlBodyTag {\n\n    const tagName = data.tagName;\n\n    if (this.hasTagService(tagName, options)) {\n      return this.getTagService(tagName, options).toBodyTag(data);\n    }\n\n    return {\n      tagDescription: {\n        tag: Tags.UnsupportedTag,\n        displayValue: \"Неподдерживаемый тег\",\n        isCustom: false\n      },\n      attributes: {},\n      innerHtml: JSON.stringify(data)\n    };\n  }\n}\n","export class XmlExtensions{\n    public static formatXml(xml:string, tab:string = '\\t'):string { // tab = optional indent value, default is tab (\\t)\n        var formatted = '', indent= '';\n        tab = tab || '\\t';\n        xml.split(/>\\s*</).forEach(function(node) {\n            if (node.match( /^\\/\\w/ )) indent = indent.substring(tab.length); // decrease indent by one 'tab'\n            formatted += indent + '<' + node + '>\\r\\n';\n            if (node.match( /^<?\\w[^>]*[^\\/]$/ )) indent += tab;              // increase indent\n        });\n        return formatted.substring(1, formatted.length-3);\n    }\n\n    public static tagsToLower(xml: string): string{\n        xml = this.replaceTagToLower(xml, \"Body\");\n        xml = this.replaceTagToLower(xml, \"Image\");\n        xml = this.replaceTagToLower(xml, \"Text\");\n\n        return xml;\n    }\n\n    static replaceTagToLower(xml: string, tag: string) : string{\n        return xml\n            .replace(new RegExp(`<${tag}`, 'g'), `<${tag.toLowerCase()}`)\n            .replace(new RegExp(`</${tag}>`, 'g'), `</${tag.toLowerCase()}>`);\n    }\n}","import { XmlExtensions } from './XmlExtensions';\n\nexport class TableBuilder {\n    static getTableMarkUp(rows: number, cols: number, generateHeaders: boolean): string {\n        rows = +rows;\n        cols = +cols;\n\n        let result = \"<table>\";\n        \n        if(generateHeaders){\n            result += TableBuilder.getTableHeaderMarkUp(cols);\n        }\n        \n        result += TableBuilder.getTableBodyMarkUp(cols, rows);\n        result += \"</table>\";\n\n        return XmlExtensions.formatXml(result);\n    }\n\n    static getTableHeaderMarkUp(cols: number): string {\n\n        let result = \"<thead><tr>\";\n\n        for (let i = 0; i < cols; i++) {\n            result += `<th>Колонка #${i + 1}</th>`;\n        }\n\n        result += \"</tr></thead>\";\n\n        return result;\n    }\n\n    static getTableBodyMarkUp(cols: number, rows: number): string {\n\n        let result = \"<tbody>\";\n\n        for (let row = 0; row < rows; row++) {\n            result += \"<tr>\";\n            for (let i = 0; i < cols; i++) {\n\n                result += `<td>Ряд№${row + 1} Колонка #${i + 1}</td>`;\n            }\n            result += \"</tr>\";\n        }\n\n        result += \"</tbody>\";\n\n        return result;\n    }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface UploadPublicFilesWithProgressEvent {\n  loading: boolean;\n  response?: PublicFilesUploadResponse;\n  uploadingLoaded: number;\n  uploadingTotal: number;\n}\n\nexport interface PublicFilesUploadResponse {\n  succeeded: boolean; \n  errorMessage: string; \n  fileIds: Array<number>; \n  filesUploadedEventId: string; \n}\n\n@Injectable({ providedIn: 'root' })\nexport class PublicFileUploadService {\n  constructor(\n    private readonly _httpClient: HttpClient,\n    @Inject('BASE_URL') private readonly baseUrl: string,\n  ) {}\n\n  public postFiles(files: FileList, applicationId: string | null): Observable<PublicFilesUploadResponse> {\n    const formData: FormData = new FormData();\n\n    for (let i = 0; i < files.length; i++) {\n      var fileToUpload = files.item(i);\n      formData.append(`fileKey${i}`, fileToUpload as Blob, fileToUpload?.name);\n    }\n\n    return this.postFilesInner(formData, applicationId);\n  }\n\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress: true,\n  ): Observable<HttpEvent<PublicFilesUploadResponse>>;\n\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress?: false,\n  ): Observable<PublicFilesUploadResponse>;\n  \n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress: boolean,\n  ): Observable<PublicFilesUploadResponse> | Observable<HttpEvent<PublicFilesUploadResponse>>;\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress = false,\n  ): Observable<PublicFilesUploadResponse> | Observable<HttpEvent<PublicFilesUploadResponse>> {\n    let endpoint = this.baseUrl + `api/files/upload?executeHandlersNow=true`;\n\n    if (applicationId) {\n      endpoint += `&applicationId=${applicationId}`;\n    }\n\n    return this._httpClient.post<PublicFilesUploadResponse>(\n      endpoint,\n      formData,\n      withProgress ? { reportProgress: true, observe: 'events' } : undefined,\n    );\n  }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface UploadPrivateFilesWithProgressEvent {\n  loading: boolean;\n  response?: PrivateFilesCreatedResult;\n  uploadingLoaded: number;\n  uploadingTotal: number;\n}\n\nexport interface PrivateFilesCreatedResult {\n  succeeded: boolean;\n  errorMessage: string;\n  setId: string;\n  fileIds: Array<string>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class PrivateFileUploadService {\n  constructor(\n    private readonly _httpClient: HttpClient,\n    @Inject('BASE_URL') private readonly baseUrl: string,\n  ) {}\n\n  public postFiles(files: FileList, applicationId: string | null): Observable<PrivateFilesCreatedResult> {\n    const formData: FormData = new FormData();\n\n    for (let i = 0; i < files.length; i++) {\n      var fileToUpload = files.item(i);\n      formData.append(`fileKey${i}`, fileToUpload as Blob, fileToUpload?.name);\n    }\n\n    return this.postFilesInner(formData, applicationId);\n  }\n\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress: true,\n  ): Observable<HttpEvent<PrivateFilesCreatedResult>>;\n\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress?: false,\n  ): Observable<PrivateFilesCreatedResult>;\n\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress: boolean,\n  ): Observable<PrivateFilesCreatedResult> | Observable<HttpEvent<PrivateFilesCreatedResult>>;\n  public postFilesInner(\n    formData: FormData,\n    applicationId: string | null,\n    withProgress = false,\n  ): Observable<PrivateFilesCreatedResult> | Observable<HttpEvent<PrivateFilesCreatedResult>> {\n    let endpoint = this.baseUrl + `api/private-files/upload?executeHandlersNow=true`;\n\n    if (applicationId) {\n      endpoint += `&applicationId=${applicationId}`;\n    }\n\n    return this._httpClient.post<PrivateFilesCreatedResult>(\n      endpoint,\n      formData,\n      withProgress ? { reportProgress: true, observe: 'events' } : undefined,\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CrocoHtmlEditorFileOptions } from \"../options\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CrocoHtmlFileOptionsService {\n  private readonly localStorageToken = 'crocoHtmlEditorFileOptions'\n  private readonly defaultOptions = {\n    applicationId: null,\n    usePrivateFiles: false,\n  }\n\n  set(data: CrocoHtmlEditorFileOptions) {\n    localStorage.setItem(this.localStorageToken, JSON.stringify(data));\n  }\n\n  get(): CrocoHtmlEditorFileOptions {\n    try {\n      const data = localStorage.getItem(this.localStorageToken);\n      return data ? JSON.parse(data) : this.defaultOptions;\n    } catch (e) {\n      return this.defaultOptions;\n    }\n  }\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { PublicFilesUploadResponse, PublicFileUploadService } from '../../services/PublicFileUploadService';\nimport { MatButton } from '@angular/material/button';\nimport { PrivateFilesCreatedResult, PrivateFileUploadService } from \"../../services/PrivateFileUploadService\";\nimport { CrocoHtmlFileOptionsService } from \"../../services/CrocoHtmlFileOptionsService\";\n\nexport interface FilePostingStarted {\n  filesCount: number;\n}\n\n@Component({\n  selector: 'croco-app-upload-files-btn',\n  templateUrl: './upload-files-btn.component.html',\n  styleUrls: ['./upload-files-btn.component.css'],\n  standalone: true,\n  imports: [MatButton]\n})\nexport class UploadFilesBtnComponent {\n\n  @ViewChild('filesInput')\n  private fileInput!: ElementRef<HTMLInputElement>;\n\n  @Input()\n  extAccepts: string = \"*/*\";\n\n  @Input()\n  isMultiple = true;\n\n  @Input()\n  btnText: string = \"Загрузить файлы\";\n\n  @Input()\n  hidden = false;\n\n  @Output()\n  postFilesStarted = new EventEmitter<FilePostingStarted>();\n\n  @Output()\n  onPublicFilesUploaded = new EventEmitter<PublicFilesUploadResponse>();\n\n  @Output()\n  onPrivateFilesUploaded = new EventEmitter<PrivateFilesCreatedResult>();\n\n  constructor(\n    private readonly _publicFileUploadService: PublicFileUploadService,\n    private readonly _privateFileUploadService: PrivateFileUploadService,\n    private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n  ) { }\n\n  handleFileInput(e: Event) {\n\n    const files: FileList | undefined = e.target[\"files\"];\n\n    this.postFilesStarted.emit({\n      filesCount: files?.length ?? 0\n    });\n\n    if (files === null || files === undefined) {\n      return;\n    }\n\n    if (this._htmlSettingsService.get().usePrivateFiles) {\n      this._privateFileUploadService\n        .postFiles(files, this._htmlSettingsService.get().applicationId)\n        .subscribe(data => {\n          this.onPrivateFilesUploaded.emit(data);\n        })\n    }\n    else {\n      this._publicFileUploadService\n        .postFiles(files, null)\n        .subscribe(data => {\n          this.onPublicFilesUploaded.emit(data);\n        })\n    }\n  }\n\n  clickFileInput() {\n    this.fileInput.nativeElement.click();\n  }\n}\n","<button [hidden]=\"hidden\" mat-raised-button color=\"primary\" (click)=\"filesInput.click()\">{{btnText}}</button>\n<input [hidden]=\"true\" [accept]=\"extAccepts\" [multiple]=\"isMultiple\" type=\"file\" #filesInput (change)=\"handleFileInput($event)\" />","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { FileImageTagDataConsts } from '../../extensions';\nimport { HtmlBodyTag } from '../../models/models';\nimport { FilePostingStarted, UploadFilesBtnComponent } from '../upload-files-btn/upload-files-btn.component';\nimport { MatButton } from '@angular/material/button';\nimport { PublicFilesUploadResponse } from '../../services/PublicFileUploadService';\nimport { PrivateFilesCreatedResult } from \"../../services/PrivateFileUploadService\";\n\n@Component({\n  selector: 'croco-html-add-files-btn',\n  templateUrl: './add-files-btn.component.html',\n  standalone: true,\n  imports: [UploadFilesBtnComponent, MatButton]\n})\nexport class AddFilesBtnComponent {\n\n  @Output()\n  postFilesStarted = new EventEmitter<FilePostingStarted>();\n\n  @ViewChild(\"fakeBtn\")\n  fakeBtn!: UploadFilesBtnComponent;\n\n  fileIds: number[] = [];\n\n  constructor() { }\n\n  @Output()\n  filesTagsReady = new EventEmitter<HtmlBodyTag[]>();\n\n  postFilesStartedEventHandler(data: FilePostingStarted) {\n    this.postFilesStarted.emit(data);\n  }\n\n  filesUploadedPublicHandler(data: PublicFilesUploadResponse) {\n    const fileTags = this.buildFileTags(data.fileIds.map(el => el.toString()));\n    this.filesTagsReady.emit(fileTags);\n  }\n\n  filesUploadedPrivateHandler(data: PrivateFilesCreatedResult) {\n    const fileTags = this.buildFileTags(data.fileIds);\n    this.filesTagsReady.emit(fileTags);\n  }\n\n  private buildFileTags(fileIds: string[]): HtmlBodyTag[] {\n    return fileIds.map(fileId => ({\n      presentOrEdit: true,\n      tagDescription: {\n        tag: FileImageTagDataConsts.TagName,\n        displayValue: \"Изображение\",\n        isCustom: false\n      },\n      attributes: {\n        [FileImageTagDataConsts.FileIdAttrName]: fileId,\n        [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n      },\n      innerHtml: \"\"\n    }));\n  }\n\n  handleClick() {\n    this.fakeBtn.clickFileInput();\n  }\n}\n","<div [hidden]=\"true\">\n    <croco-app-upload-files-btn #fakeBtn\n                                (onPrivateFilesUploaded)=\"filesUploadedPrivateHandler($event)\"\n                                (onPublicFilesUploaded)=\"filesUploadedPublicHandler($event)\"\n        [btnText]=\"'Добавить изображения'\"\n        (postFilesStarted)=\"postFilesStartedEventHandler($event)\" [extAccepts]=\"'image/*'\"></croco-app-upload-files-btn>\n</div>\n\n<div>\n    <button class=\"w-100\" (click)=\"handleClick()\" mat-stroked-button>Добавить изображения</button>\n</div>\n","\nexport interface GetListResult<T> {\n    /*\n    Сколько всего записей\n     */\n    totalCount: number;\n\n    /*\n    Текущий список\n     */\n    list: Array<T>;\n}\n\n\nexport interface FileRelationModel {\n    entityTypeFullName: string;\n    entityKey: string;\n    relationName: string;\n    relationValue: string;\n    relationCustomData: string;\n}\n\nexport interface SearchFilesRequest {\n    q: string;\n    fileName: string;\n    applicationId: string;\n    fileTypes: Array<FileType>;\n    count: number | null;\n    offSet: number;\n}\n\nexport enum FileType {\n    Undefined = 'Undefined',\n    Unknown = 'Unknown',\n    Image = 'Image',\n    Audio = 'Audio',\n    Video = 'Video',\n    Document = 'Document',\n    Archive = 'Archive'\n}\n\n\nexport interface GetListSearchModel {\n    count: number | null;\n    offSet: number;\n}\n\nexport interface FileSimpleModel {\n    fileId: number;\n    fileName: string;\n    type: FileType;\n    downloadUrl: string;\n}\n\nexport interface FileInfoModel {\n    type: FileType;\n    name: string;\n    downloadUrl: string;\n}\n\nexport interface CommonFileInfoResultModel {\n    id: string;\n    isPrivateId: boolean;\n    fileInfo: FileInfoModel;\n}","import { HttpClient } from \"@angular/common/http\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { FileSimpleModel, GetListResult, SearchFilesRequest } from \"./file-models\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PublicFilesQueryService {\n\n    private readonly _baseControllerUrl: string;\n\n    constructor(private readonly _httpClient: HttpClient,\n        @Inject('BASE_URL') baseUrl: string) {\n        this._baseControllerUrl = `${baseUrl}api/Files`;\n    }\n\n    public search(model: SearchFilesRequest): Observable<GetListResult<FileSimpleModel>> {\n        return this._httpClient.post<GetListResult<FileSimpleModel>>(\n            `${this._baseControllerUrl}/GetFiles`, model\n        );\n    }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { FileType, GetListResult, SearchFilesRequest } from \"./file-models\";\n\nexport interface PrivateFileNameModel {\n    id: string;\n    setId: string;\n    fileName: string;\n    type: FileType;\n    downloadUrl: string;\n    createdOn: string;\n    applicationId: string;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PrivateFilesQueryService {\n\n    private readonly _baseControllerUrl: string;\n\n    constructor(private readonly _httpClient: HttpClient,\n        @Inject('BASE_URL') baseUrl: string) {\n        this._baseControllerUrl = `${baseUrl}api/private-files/query`;\n    }\n\n    public search(model: SearchFilesRequest): Observable<GetListResult<PrivateFileNameModel>> {\n        return this._httpClient.post<GetListResult<PrivateFileNameModel>>(\n            `${this._baseControllerUrl}/search`, model\n        );\n    }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, Inject } from \"@angular/core\";\nimport { CommonFileInfoResultModel } from \"./file-models\";\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CommonFileInfoQueryService {\n\n    private readonly _baseControllerUrl: string;\n\n    constructor(private readonly _httpClient: HttpClient,\n        @Inject('BASE_URL') baseUrl: string) {\n        this._baseControllerUrl = `${baseUrl}api/common-files`;\n    }\n\n    /**\n     * Получить информацию о файле на сервере по идентификатору.\n     * @param model \n     * @returns \n     */\n    public getInfo(id: string) {\n        return this._httpClient.get<CommonFileInfoResultModel>(\n            `${this._baseControllerUrl}/query/get-info/${id}`\n        );\n    }\n}","import {\n  Component,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n  ElementRef,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { AudioMethods, FileAudioTagDataConsts } from '../../../extensions/AudioMethods';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { Subject, takeUntil } from \"rxjs\";\nimport { PublicFilesQueryService } from '../../../services/PublicFilesQueryService';\nimport { PrivateFilesQueryService } from '../../../services/PrivateFilesQueryService';\nimport { CrocoHtmlFileOptionsService } from '../../../services/CrocoHtmlFileOptionsService';\nimport { FileType } from '../../../services/file-models';\nimport { UploadFilesBtnComponent } from '../../upload-files-btn/upload-files-btn.component';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport {MatIconButton} from \"@angular/material/button\";\nimport { CommonFileInfoQueryService } from '../../../services/CommonFileInfoQueryService';\n\n@Component({\n  selector: 'croco-html-audio-editor',\n  templateUrl: './audio-editor.component.html',\n  styleUrls: ['./audio-editor.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonToggleGroup,\n    FormsModule,\n    MatButtonToggle,\n    MatIcon,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    UploadFilesBtnComponent,\n    NgSelectModule,\n    MatIconButton\n  ]\n})\nexport class AudioEditorComponent implements OnInit, OnDestroy {\n\n  hasAudioError = false;\n  errorMessage = '';\n  isPlaying = false;\n  isLoading = false;\n  currentTime = 0;\n  duration = 0;\n  volume = 1;\n  isMuted = false;\n  audioSrc = '';\n\n  searchOrEdit = \"search\";\n\n  files: Array<{ fileId: string; fileName: string }> = [];\n  loading = false;\n  q = '';\n\n  private unsubscribe = new Subject<void>();\n\n  @ViewChild('audioPlayer', { static: false })\n  audioPlayer!: ElementRef<HTMLAudioElement>;\n\n  @Input({ required: true })\n  tag: HtmlBodyTag;\n\n  @Input({ required: true })\n  presentOrEdit = true;\n\n  constructor(\n    private readonly _publicFileService: PublicFilesQueryService,\n    private readonly _privateFileService: PrivateFilesQueryService,\n    private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n    private readonly _commonFileInfoService: CommonFileInfoQueryService,\n  ) { }\n\n  public get fileId(): string {\n    return this.tag.attributes[FileAudioTagDataConsts.FileIdAttrName];\n  }\n\n  public set fileId(value: string) {\n    this.tag.attributes[FileAudioTagDataConsts.FileIdAttrName] = value;\n  }\n\n  public get title(): string {\n    return this.tag.attributes[FileAudioTagDataConsts.TitleAttrName] || '';\n  }\n\n  public set title(value: string) {\n    this.tag.attributes[FileAudioTagDataConsts.TitleAttrName] = value;\n  }\n\n  hasFileId() {\n    return this.tag.attributes.hasOwnProperty(FileAudioTagDataConsts.FileIdAttrName) && this.fileId && this.fileId !== '';\n  }\n\n  private get audioElement(): HTMLAudioElement | null {\n    return this.audioPlayer?.nativeElement || null;\n  }\n\n  onErrorHandler() {\n    this.hasAudioError = true;\n    this.isLoading = false;\n    if (!this.errorMessage) {\n      this.errorMessage = 'Аудио-файл не найден по указанному идентификатору, возможно файл не существует или отсутствует на сервере.';\n    }\n  }\n\n  removeAudioError() {\n    this.hasAudioError = false;\n    this.errorMessage = '';\n  }\n\n  setError(message: string) {\n    this.hasAudioError = true;\n    this.errorMessage = message;\n    this.isLoading = false;\n  }\n\n  onFileIdChanged(fileId: string) {\n    this.fileId = fileId;\n    this.removeAudioError();\n    this.checkAndLoadAudioFile();\n  }\n\n  checkAndLoadAudioFile() {\n    if (!this.hasFileId()) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.hasAudioError = false;\n    this.errorMessage = '';\n\n    const fileIdValue = this.fileId;\n    this._commonFileInfoService.getInfo(fileIdValue)\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe({\n        next: (result) => {\n          if (!result.fileInfo) {\n            this.setError(`Файл с идентификатором ${fileIdValue} не найден на сервере.`);\n            return;\n          }\n\n          if (result.fileInfo.type !== FileType.Audio) {\n            this.setError(`Файл с идентификатором ${fileIdValue} должен быть c типом Audio, а получено ${result.fileInfo.type}.`);\n            return;\n          }\n\n          this.audioSrc = result.fileInfo.downloadUrl;\n          this.loadAudioFile();\n        },\n        error: (error) => {\n          this.setError(`Ошибка при получении информации о файле: ${error.message || 'Неизвестная ошибка'}`);\n        }\n      });\n  }\n\n  loadAudioFile() {\n    if (!this.hasFileId() || !this.audioSrc) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.hasAudioError = false;\n\n    const audio = this.audioElement;\n    if (audio) {\n      audio.load();\n    }\n  }\n\n  onLoadedMetadata() {\n    const audio = this.audioElement;\n    if (audio) {\n      this.duration = audio.duration;\n      this.isLoading = false;\n    }\n  }\n\n  onTimeUpdate() {\n    const audio = this.audioElement;\n    if (audio) {\n      this.currentTime = audio.currentTime;\n      this.duration = audio.duration;\n    }\n  }\n\n  onEnded() {\n    this.isPlaying = false;\n    this.currentTime = 0;\n  }\n\n  onCanPlay() {\n    this.isLoading = false;\n  }\n\n  togglePlayPause() {\n    const audio = this.audioElement;\n    if (!audio) return;\n\n    if (this.isPlaying) {\n      audio.pause();\n      this.isPlaying = false;\n    } else {\n      audio.play().then(() => {\n        this.isPlaying = true;\n      }).catch(() => {\n        this.hasAudioError = true;\n      });\n    }\n  }\n\n  restart() {\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = 0;\n      this.currentTime = 0;\n    }\n  }\n\n  rewind() {\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = Math.max(0, audio.currentTime - 10);\n    }\n  }\n\n  forward() {\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = Math.min(audio.duration, audio.currentTime + 10);\n    }\n  }\n\n  onVolumeChange(event: Event) {\n    const target = event.target as HTMLInputElement;\n    const value = parseFloat(target.value) / 100;\n    this.volume = value;\n    const audio = this.audioElement;\n    if (audio) {\n      audio.volume = value;\n    }\n    this.isMuted = value === 0;\n  }\n\n  toggleMute() {\n    const audio = this.audioElement;\n    if (!audio) return;\n\n    if (this.isMuted) {\n      audio.volume = this.volume;\n      this.isMuted = false;\n    } else {\n      audio.volume = 0;\n      this.isMuted = true;\n    }\n  }\n\n  onSeekChange(event: Event) {\n    const target = event.target as HTMLInputElement;\n    const value = parseFloat(target.value);\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = (value / 100) * audio.duration;\n    }\n  }\n\n  formatTime(seconds: number): string {\n    return AudioMethods.formatTime(seconds);\n  }\n\n  getProgress(): number {\n    return AudioMethods.calculateProgress(this.currentTime, this.duration);\n  }\n\n  loadFiles() {\n    this.loading = true;\n    const isPrivate = this._htmlSettingsService.get().usePrivateFiles;\n\n    const searchParams = {\n      count: 50,\n      offSet: 0,\n      fileName: null,\n      fileTypes: [FileType.Audio],\n      applicationId: isPrivate ? this._htmlSettingsService.get().applicationId : null,\n      q: this.q\n    };\n\n    if (isPrivate) {\n      this._privateFileService.search(searchParams)\n        .pipe(takeUntil(this.unsubscribe))\n        .subscribe(data => {\n          this.files = data.list.map(el => ({ fileId: el.id, fileName: el.fileName }));\n          this.loading = false;\n        });\n    } else {\n      this._publicFileService.search(searchParams)\n        .pipe(takeUntil(this.unsubscribe))\n        .subscribe(data => {\n          this.files = data.list.map(el => ({ fileId: el.fileId.toString(), fileName: el.fileName }));\n          this.loading = false;\n        });\n    }\n  }\n\n  onSearchChanged(q: { term: string, items: object[] }) {\n    this.q = q.term;\n    this.loadFiles();\n  }\n\n  onFileSelected(fileId: string) {\n    const selectedFile = this.files.find(f => f.fileId === fileId);\n    if (selectedFile) {\n      this.fileId = fileId;\n      this.checkAndLoadAudioFile();\n    }\n  }\n\n  onFilesUploaded(fileIds: string[] | number[]) {\n    if (fileIds && fileIds.length > 0) {\n      const firstFileId = fileIds[0];\n      this.fileId = typeof firstFileId === 'number' ? firstFileId.toString() : firstFileId;\n      this.loadFiles();\n      this.checkAndLoadAudioFile();\n    }\n  }\n\n  removeAudio() {\n    this.fileId = '';\n    this.title = '';\n    this.audioSrc = '';\n    this.isPlaying = false;\n    this.currentTime = 0;\n    this.duration = 0;\n    this.removeAudioError();\n  }\n\n  ngOnInit(): void {\n    if (this.audioPlayer?.nativeElement) {\n      const audio = this.audioPlayer.nativeElement;\n      audio.volume = this.volume;\n    }\n\n    if (this.hasFileId()) {\n      this.checkAndLoadAudioFile();\n    }\n\n    this.loadFiles();\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n}\n","<div class=\"audio-editor\">\n  @if (hasAudioError) {\n    <div class=\"error-block\">\n      <mat-icon>error</mat-icon>\n      <span>{{ errorMessage }}</span>\n    </div>\n  }\n\n  @if (hasFileId() && !hasAudioError) {\n    <div class=\"audio-player-container\">\n      <audio\n        #audioPlayer\n        [src]=\"audioSrc\"\n        (error)=\"onErrorHandler()\"\n        (loadedmetadata)=\"onLoadedMetadata()\"\n        (timeupdate)=\"onTimeUpdate()\"\n        (ended)=\"onEnded()\"\n        (canplay)=\"onCanPlay()\"\n        preload=\"metadata\">\n      </audio>\n\n      @if (isLoading) {\n        <div class=\"loading-indicator\">\n          <div class=\"progress-bar\">\n            <div class=\"progress-bar-fill\"></div>\n          </div>\n          <span>Загрузка аудио...</span>\n        </div>\n      }\n\n      <div class=\"player-controls\">\n        <div class=\"control-buttons\">\n          <button (click)=\"restart()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>replay</mat-icon>\n          </button>\n\n          <button (click)=\"rewind()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>replay_10</mat-icon>\n          </button>\n\n          <button\n            (click)=\"togglePlayPause()\"\n            [disabled]=\"!hasFileId() || isLoading\"\n            class=\"play-pause-btn\" mat-icon-button>\n            <mat-icon>{{ isPlaying ? 'pause' : 'play_arrow' }}</mat-icon>\n          </button>\n\n          <button (click)=\"forward()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>forward_10</mat-icon>\n          </button>\n\n          @if (!presentOrEdit) {\n            <button (click)=\"removeAudio()\" [disabled]=\"!hasFileId()\" color=\"warn\" mat-icon-button>\n              <mat-icon>delete</mat-icon>\n            </button>\n          }\n        </div>\n\n        <div class=\"progress-section\">\n          <span class=\"time-display\">{{ formatTime(currentTime) }}</span>\n\n          <input\n            type=\"range\"\n            min=\"0\"\n            max=\"100\"\n            [value]=\"getProgress()\"\n            (input)=\"onSeekChange($event)\"\n            [disabled]=\"!hasFileId() || duration === 0\"\n            class=\"progress-slider\">\n\n          <span class=\"time-display\">{{ formatTime(duration) }}</span>\n        </div>\n\n        <div class=\"volume-controls\">\n          <button (click)=\"toggleMute()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>{{ isMuted ? 'volume_off' : 'volume_up' }}</mat-icon>\n          </button>\n\n          <input\n            type=\"range\"\n            min=\"0\"\n            max=\"100\"\n            [value]=\"volume * 100\"\n            (input)=\"onVolumeChange($event)\"\n            [disabled]=\"!hasFileId()\"\n            class=\"volume-slider\">\n        </div>\n      </div>\n    </div>\n  }\n\n  @if (!hasFileId()) {\n    <div class=\"no-file-message\">\n      <mat-icon>music_off</mat-icon>\n      <h5>Аудио-файл не выбран</h5>\n      @if (!presentOrEdit) {\n        <p>Нажмите кнопку редактирования для выбора или загрузки аудио-файла</p>\n      }\n    </div>\n  }\n  @if (!presentOrEdit) {\n    <div class=\"edit-panel\">\n      <div class=\"edit-header\">\n        <h6>Настройки аудио-файла</h6>\n      </div>\n\n      <div class=\"mode-toggle\">\n        <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n          <mat-button-toggle value=\"search\">\n            <mat-icon>search</mat-icon>\n            Искать файл\n          </mat-button-toggle>\n          <mat-button-toggle value=\"edit\">\n            <mat-icon>settings</mat-icon>\n            Указать по ID\n          </mat-button-toggle>\n        </mat-button-toggle-group>\n      </div>\n\n      @if (searchOrEdit === 'search') {\n        <div class=\"file-selection\">\n          <div class=\"existing-files\">\n            <h6>Выбрать из существующих файлов:</h6>\n            <ng-select\n              [(ngModel)]=\"fileId\"\n              (ngModelChange)=\"onFileSelected($event)\"\n              [items]=\"files\"\n              bindLabel=\"fileName\"\n              bindValue=\"fileId\"\n              (search)=\"onSearchChanged($event)\"\n              [loading]=\"loading\"\n              [loadingText]=\"'Загружаю файлы'\"\n              placeholder=\"Выберите аудио-файл\"\n              [clearable]=\"true\">\n              <ng-template ng-option-tmp let-item=\"item\">\n                <div class=\"file-option\">\n                  <mat-icon>audiotrack</mat-icon>\n                  <span>{{ item.fileName }}</span>\n                  <small>ID: {{ item.fileId }}</small>\n                </div>\n              </ng-template>\n            </ng-select>\n          </div>\n\n          <div class=\"title-input\">\n            <mat-form-field class=\"w-100\">\n              <mat-label>Название аудио-файла</mat-label>\n              <input\n                matInput\n                placeholder=\"Введите название аудио-файла\"\n                autocomplete=\"off\"\n                [(ngModel)]=\"title\">\n            </mat-form-field>\n          </div>\n\n          <div class=\"upload-section\">\n            <h6>Загрузить новый файл:</h6>\n            <croco-app-upload-files-btn\n              extAccepts=\"audio/*\"\n              [isMultiple]=\"false\"\n              btnText=\"Загрузить аудио-файл\"\n              (onPublicFilesUploaded)=\"onFilesUploaded($event.fileIds)\"\n              (onPrivateFilesUploaded)=\"onFilesUploaded($event.fileIds)\">\n            </croco-app-upload-files-btn>\n          </div>\n        </div>\n      } @else if (searchOrEdit === 'edit') {\n        <div class=\"manual-input\">\n          <mat-form-field class=\"w-100\">\n            <mat-label>Идентификатор файла</mat-label>\n            <input\n              matInput\n              placeholder=\"Введите ID аудио-файла\"\n              autocomplete=\"off\"\n              [(ngModel)]=\"fileId\"\n              (ngModelChange)=\"onFileIdChanged($event)\">\n          </mat-form-field>\n\n          <mat-form-field class=\"w-100\">\n            <mat-label>Название аудио-файла</mat-label>\n            <input\n              matInput\n              placeholder=\"Введите название аудио-файла\"\n              autocomplete=\"off\"\n              [(ngModel)]=\"title\">\n          </mat-form-field>\n        </div>\n      }\n    </div>\n  }\n</div>\n","export const CrocoHtmlOptionsToken = \"croco-html-options\";\n","import {\n  Component,\n  Inject,\n  Input,\n  OnInit,\n  OnDestroy,\n  ViewChild,\n  ElementRef,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { AudioMethods } from '../../../extensions/AudioMethods';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MatIcon } from '@angular/material/icon';\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { MatIconButton } from \"@angular/material/button\";\nimport { CommonFileInfoQueryService } from '../../../services/CommonFileInfoQueryService';\nimport { FileType } from '../../../services/file-models';\n\n@Component({\n  selector: 'croco-html-audio-player-tag-view',\n  templateUrl: './audio-player-tag-view.component.html',\n  styleUrls: ['./audio-player-tag-view.component.scss'],\n  standalone: true,\n  imports: [\n    MatIcon,\n    MatIconButton\n  ]\n})\nexport class AudioPlayerTagViewComponent implements OnInit, OnDestroy, OnChanges {\n\n  hasAudioError = false;\n  errorMessage = '';\n  isPlaying = false;\n  isLoading = false;\n  currentTime = 0;\n  duration = 0;\n  volume = 1;\n  isMuted = false;\n  audioSrc = '';\n\n  private unsubscribe = new Subject<void>();\n\n  @ViewChild('audioPlayer', { static: false })\n  audioPlayer: ElementRef<HTMLAudioElement>;\n\n  @Input({ required: true })\n  data: InterfaceBlock;\n\n  constructor(\n    @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions,\n    private readonly _commonFileInfoService: CommonFileInfoQueryService,\n  ) { }\n\n  get fileId(): string {\n    return this.data.data.fileId;\n  }\n\n  get title(): string {\n    return this.data.data.title || 'Аудио-файл';\n  }\n\n  private get audioElement(): HTMLAudioElement | null {\n    return this.audioPlayer?.nativeElement || null;\n  }\n\n  hasFileId() {\n    return this.fileId && this.fileId !== '';\n  }\n\n  onErrorHandler() {\n    this.hasAudioError = true;\n    this.isLoading = false;\n    if (!this.errorMessage) {\n      this.errorMessage = 'Аудио-файл не найден по указанному идентификатору.';\n    }\n  }\n\n  setError(message: string) {\n    this.hasAudioError = true;\n    this.errorMessage = message;\n    this.isLoading = false;\n  }\n\n  onLoadedMetadata() {\n    const audio = this.audioElement;\n    if (audio) {\n      this.duration = audio.duration;\n      this.isLoading = false;\n    }\n  }\n\n  onTimeUpdate() {\n    const audio = this.audioElement;\n    if (audio) {\n      this.currentTime = audio.currentTime;\n      this.duration = audio.duration;\n    }\n  }\n\n  onEnded() {\n    this.isPlaying = false;\n    this.currentTime = 0;\n  }\n\n  onCanPlay() {\n    this.isLoading = false;\n  }\n\n  togglePlayPause() {\n    const audio = this.audioElement;\n    if (!audio) return;\n\n    if (this.isPlaying) {\n      audio.pause();\n      this.isPlaying = false;\n    } else {\n      audio.play().then(() => {\n        this.isPlaying = true;\n      }).catch(() => {\n        this.hasAudioError = true;\n      });\n    }\n  }\n\n  restart() {\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = 0;\n      this.currentTime = 0;\n    }\n  }\n\n  rewind() {\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = Math.max(0, audio.currentTime - 10);\n    }\n  }\n\n  forward() {\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = Math.min(audio.duration, audio.currentTime + 10);\n    }\n  }\n\n  onVolumeChange(event: Event) {\n    const target = event.target as HTMLInputElement;\n    const value = parseFloat(target.value) / 100;\n    this.volume = value;\n    const audio = this.audioElement;\n    if (audio) {\n      audio.volume = value;\n    }\n    this.isMuted = value === 0;\n  }\n\n  toggleMute() {\n    const audio = this.audioElement;\n    if (!audio) return;\n\n    if (this.isMuted) {\n      audio.volume = this.volume;\n      this.isMuted = false;\n    } else {\n      audio.volume = 0;\n      this.isMuted = true;\n    }\n  }\n\n  onSeekChange(event: Event) {\n    const target = event.target as HTMLInputElement;\n    const value = parseFloat(target.value);\n    const audio = this.audioElement;\n    if (audio) {\n      audio.currentTime = (value / 100) * audio.duration;\n    }\n  }\n\n  formatTime(seconds: number): string {\n    return AudioMethods.formatTime(seconds);\n  }\n\n  getProgress(): number {\n    return AudioMethods.calculateProgress(this.currentTime, this.duration);\n  }\n\n  ngOnInit(): void {\n    if (this.audioPlayer?.nativeElement) {\n      const audio = this.audioElement;\n      if (audio) {\n        audio.volume = this.volume;\n      }\n    }\n\n    if (this.hasFileId()) {\n      this.checkAndLoadAudioFile();\n    }\n  }\n\n  checkAndLoadAudioFile() {\n    if (!this.hasFileId()) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.hasAudioError = false;\n    this.errorMessage = '';\n\n    const fileIdValue = this.fileId;\n\n    this._commonFileInfoService.getInfo(fileIdValue)\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe({\n        next: (result) => {\n          if (!result.fileInfo) {\n            this.setError(`Файл с идентификатором ${fileIdValue} не найден на сервере.`);\n            return;\n          }\n\n          if (result.fileInfo.type !== FileType.Audio) {\n            this.setError(`Файл с идентификатором ${fileIdValue} должен быть c типом Audio, а получено ${result.fileInfo.type}.`);\n            return;\n          }\n\n          this.audioSrc = result.fileInfo.downloadUrl;\n          this.loadAudioFile();\n        },\n        error: (error) => {\n          this.setError(`Ошибка при получении информации о файле: ${error.message || 'Неизвестная ошибка'}`);\n        }\n      });\n  }\n\n  loadAudioFile() {\n    if (!this.hasFileId() || !this.audioSrc) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.hasAudioError = false;\n\n    const audio = this.audioElement;\n    if (audio) {\n      audio.load();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data'] && !changes['data'].firstChange) {\n      if (this.hasFileId()) {\n        this.checkAndLoadAudioFile();\n      }\n    }\n  }\n}\n","<div class=\"audio-view\">\n  @if (hasAudioError) {\n    <div class=\"error-block\">\n      <mat-icon>error</mat-icon>\n      <span>{{ errorMessage }}</span>\n    </div>\n  }\n\n  @if (hasFileId() && !hasAudioError) {\n    <div class=\"audio-player-container\">\n      <audio\n        #audioPlayer\n        [src]=\"audioSrc\"\n        (error)=\"onErrorHandler()\"\n        (loadedmetadata)=\"onLoadedMetadata()\"\n        (timeupdate)=\"onTimeUpdate()\"\n        (ended)=\"onEnded()\"\n        (canplay)=\"onCanPlay()\"\n        preload=\"metadata\">\n      </audio>\n\n      @if (isLoading) {\n        <div class=\"loading-indicator\">\n          <div class=\"progress-bar\">\n            <div class=\"progress-bar-fill\"></div>\n          </div>\n          <span>Загрузка аудио...</span>\n        </div>\n      }\n\n      <div class=\"file-info\">\n        <mat-icon>audiotrack</mat-icon>\n        <span class=\"file-name\">{{ title }}</span>\n      </div>\n\n      <div class=\"player-controls\">\n        <div class=\"control-buttons\">\n          <button (click)=\"restart()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>replay</mat-icon>\n          </button>\n\n          <button (click)=\"rewind()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>replay_10</mat-icon>\n          </button>\n\n          <button\n            (click)=\"togglePlayPause()\"\n            [disabled]=\"!hasFileId() || isLoading\"\n            class=\"play-pause-btn\" mat-icon-button>\n            <mat-icon>{{ isPlaying ? 'pause' : 'play_arrow' }}</mat-icon>\n          </button>\n\n          <button (click)=\"forward()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>forward_10</mat-icon>\n          </button>\n        </div>\n\n        <div class=\"progress-section\">\n          <span class=\"time-display\">{{ formatTime(currentTime) }}</span>\n\n          <input\n            type=\"range\"\n            min=\"0\"\n            max=\"100\"\n            [value]=\"getProgress()\"\n            (input)=\"onSeekChange($event)\"\n            [disabled]=\"!hasFileId() || duration === 0\"\n            class=\"progress-slider\">\n\n          <span class=\"time-display\">{{ formatTime(duration) }}</span>\n        </div>\n\n        <div class=\"volume-controls\">\n          <button (click)=\"toggleMute()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n            <mat-icon>{{ isMuted ? 'volume_off' : 'volume_up' }}</mat-icon>\n          </button>\n\n          <input\n            type=\"range\"\n            min=\"0\"\n            max=\"100\"\n            [value]=\"volume * 100\"\n            (input)=\"onVolumeChange($event)\"\n            [disabled]=\"!hasFileId()\"\n            class=\"volume-slider\">\n        </div>\n      </div>\n    </div>\n  }\n\n  <!-- Сообщение об отсутствии файла -->\n  @if (!hasFileId()) {\n    <div class=\"no-file-message\">\n      <mat-icon>music_off</mat-icon>\n      <h5>Аудио-файл не выбран</h5>\n    </div>\n  }\n</div>\n","import { Component, Input } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\n@Component({\n  selector: 'youtube-video-player',\n  standalone: true,\n  imports: [],\n  templateUrl: './youtube-video-player.component.html',\n  styleUrl: '../external-video-editor.component.scss'\n})\nexport class YoutubeVideoPlayerComponent {\n\n  @Input() set link(link: string) {\n    this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(link);\n  }\n\n  public safeUrl: SafeResourceUrl;\n\n  constructor(private sanitizer: DomSanitizer) { }\n}\n","<div class=\"code-view video-player use-responsive\">\n    <iframe\n      [src]=\"safeUrl\"\n      title=\"YouTube video player\"\n      frameborder=\"0\"\n      allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n      referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\n@Component({\n  selector: 'vk-video-player',\n  standalone: true,\n  imports: [],\n  templateUrl: './vk-video-player.component.html',\n  styleUrl: '../external-video-editor.component.scss'\n})\nexport class VkVideoPlayerComponent {\n\n  @Input() set link(link: string) {\n    this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(link);\n  }\n\n  public safeUrl: SafeResourceUrl;\n\n  constructor(private sanitizer: DomSanitizer) { }\n}\n","<div class=\"code-view video-player use-responsive\">\n  <iframe\n    [src]=\"safeUrl\"\n    allow=\"autoplay; encrypted-media; fullscreen; picture-in-picture;\"\n    frameborder=\"0\"\n    allowfullscreen></iframe>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\n\n@Component({\n  selector: 'code-video',\n  standalone: true,\n  imports: [],\n  templateUrl: './code-video.component.html',\n  styleUrl: '../external-video-editor.component.scss'\n})\nexport class CodeVideoComponent implements OnChanges {\n\n  @Input() code = \"\";\n  @Input() set _useResponsiveWrapper(useResponsiveWrapper: boolean) {\n    this.useResponsiveWrapper = useResponsiveWrapper;\n  }\n\n  useResponsiveWrapper = false\n\n  safeHtml: SafeHtml;\n\n  constructor(private readonly _sanitizer: DomSanitizer) { }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['code'] && changes['code'].currentValue !== changes['code'].previousValue) {\n      this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.code);\n    }\n  }\n}\n","@if (code) {\n  <div class=\"code-view video-player\" [class.use-responsive]=\"useResponsiveWrapper\" [innerHTML]=\"safeHtml\"></div>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n} from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { ExternalVideoSupportedTypes, ExternalVideoTagData } from '../../../extensions';\nimport { YoutubeVideoPlayerComponent } from '../../editor/external-video-editor/youtube-video-player/youtube-video-player.component';\nimport { VkVideoPlayerComponent } from '../../editor/external-video-editor/vk-video-player/vk-video-player.component';\nimport { CodeVideoComponent } from \"../../editor/external-video-editor/embedded-video/code-video.component\";\n\n@Component({\n  selector: 'croco-html-xml-tag-external-video',\n  templateUrl: './xml-tag-external-video.component.html',\n  styleUrls: ['./xml-tag-external-video.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [VkVideoPlayerComponent, YoutubeVideoPlayerComponent, CodeVideoComponent],\n})\nexport class XmlTagExternalVideoComponent {\n  @Input() public set data(value: InterfaceBlock) {\n    this.tagData = value.data;\n  };\n\n  @Input() public set tagData(value: ExternalVideoTagData) {\n    this._block = {\n      type: value.type,\n      link: value.link,\n      useResponsiveWrapper: value.useResponsiveWrapper,\n      innerHtml: value.innerHtml\n    }\n  };\n\n  protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n\n  public _block: ExternalVideoTagData = {\n    type: '',\n    link: '',\n    innerHtml: '',\n    useResponsiveWrapper: false\n  }\n}\n","@switch (_block.type) {\n  @case (ExternalVideoSupportedTypes.VkVideo) {\n    <vk-video-player [link]=\"_block.link\"></vk-video-player>\n  }\n  @case (ExternalVideoSupportedTypes.Youtube) {\n    <youtube-video-player [link]=\"_block.link\"></youtube-video-player>\n  }\n  @case (ExternalVideoSupportedTypes.Code) {\n    <code-video [code]=\"_block.innerHtml\" [_useResponsiveWrapper]=\"_block.useResponsiveWrapper\"></code-video>\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\n\n@Component({\n  selector: 'croco-html-xml-tag-header-inner-text-view',\n  templateUrl: './xml-tag-header-inner-text-view.component.html',\n  standalone: true\n})\nexport class XmlTagHeaderInnerTextViewComponent {\n\n  @Input({ required: true })\n  item: GenericTextTag;\n}\n","@if (item.tagName === 'h1') {\n  <h1\n    [innerHtml]=\"item.data.html\">\n  </h1>\n}\n@if (item.tagName === 'h2') {\n  <h2\n    [innerHtml]=\"item.data.html\">\n  </h2>\n}\n@if (item.tagName === 'h3') {\n  <h3\n    [innerHtml]=\"item.data.html\">\n  </h3>\n}\n@if (item.tagName === 'h4') {\n  <h4\n    [innerHtml]=\"item.data.html\">\n  </h4>\n}\n@if (item.tagName === 'h5') {\n  <h5\n    [innerHtml]=\"item.data.html\">\n  </h5>\n}\n@if (item.tagName === 'h6') {\n  <h6\n    [innerHtml]=\"item.data.html\">\n  </h6>\n}","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\nimport { XmlTagHeaderInnerTextViewComponent } from '../xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component';\n\n@Component({\n  selector: 'croco-html-xml-tag-header-text-view',\n  templateUrl: './xml-tag-header-text-view.component.html',\n  standalone: true,\n  imports: [XmlTagHeaderInnerTextViewComponent]\n})\nexport class XmlTagHeaderTextViewComponent {\n\n  @Input({ required: true })\n  item: GenericTextTag;\n}\n","@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'left') {\n<div style=\"text-align: left;\">\n  @if (item.data.html.length === 0 || !item.data.html) {\n  <span>&nbsp;</span>\n  }\n  @if (item.data.html.length > 0) {\n  <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n  </croco-html-xml-tag-header-inner-text-view>\n  }\n</div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'right') {\n<div style=\"text-align: right;\">\n  @if (item.data.html.length === 0 || !item.data.html) {\n  <span>&nbsp;</span>\n  }\n  @if (item.data.html.length > 0) {\n  <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n  </croco-html-xml-tag-header-inner-text-view>\n  }\n</div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'center') {\n<div style=\"text-align: center;\">\n  @if (item.data.html.length === 0 || !item.data.html) {\n  <span>&nbsp;</span>\n  }\n  @if (item.data.html.length > 0) {\n  <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n  </croco-html-xml-tag-header-inner-text-view>\n  }\n</div>\n}\n\n@if (!item.data.validationResult.isSucceeded) {\n<div class=\"red\" style=\"margin-top: 10px;\">\n  <h4>Допущена ошибка в теге &lt;text&gt;</h4>\n  <span>\n    {{item.data.validationResult.message}}\n  </span>\n</div>\n}","import { Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'croco-html-xml-tag-html-view',\n    templateUrl: './xml-tag-html-view.component.html',\n    standalone: true\n})\nexport class XmlTagHtmlViewComponent {\n\n  @Input()\n  html: string = \"\";\n}\n","<div class=\"col table-container\" [innerHTML]=\"html\">\n</div>\n","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\n\n@Component({\n  selector: 'croco-html-xml-tag-text-view',\n  templateUrl: './xml-tag-text-view.component.html',\n  standalone: true\n})\nexport class XmlTagTextViewComponent {\n\n  @Input({ required: true })\n  item: GenericTextTag;\n}","@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'left') {\n  <div style=\"text-align: left;\">\n    @if (item.data.html.length === 0 || !item.data.html) {\n      <span>&nbsp;</span>\n    }\n    @if (item.data.html.length > 0) {\n      <span [innerHtml]=\"item.data.html\"></span>\n    }\n  </div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'right') {\n  <div style=\"text-align: right;\">\n    @if (item.data.html.length === 0 || !item.data.html) {\n      <span>&nbsp;</span>\n    }\n    @if (item.data.html.length > 0) {\n      <span [innerHtml]=\"item.data.html\"></span>\n    }\n  </div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'center') {\n  <div style=\"text-align: center;\">\n    @if (item.data.html.length === 0 || !item.data.html) {\n      <span>&nbsp;</span>\n    }\n    @if (item.data.html.length > 0) {\n      <span [innerHtml]=\"item.data.html\"></span>\n    }\n  </div>\n}\n\n@if (!item.data.validationResult.isSucceeded) {\n  <div class=\"red\" style=\"margin-top: 10px;\" >\n    <h4>Допущена ошибка в теге &lt;text&gt;</h4>\n    <span>\n      {{item.data.validationResult.message}}\n    </span>\n  </div>\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { Observable } from \"rxjs\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BlobCreateService {\n\n  constructor(private readonly _http: HttpClient) { }\n\n  getBlob(link: string): Observable<Blob> {\n    return this._http.get(link, { responseType: 'blob' })\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { BlobCreateService } from \"../../../services/blob-create.service\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { DownloadButtonTagData } from '../../../tag-services/DownloadButtonTagService';\n\n@Component({\n  selector: 'croco-html-xml-tag-download-file-button',\n  standalone: true,\n  imports: [\n    MatIcon\n  ],\n  templateUrl: './xml-tag-download-file-button.component.html',\n  styleUrl: './xml-tag-download-file-button.component.scss'\n})\nexport class XmlTagDownloadFileButtonComponent {\n  @Input() public set data(value: InterfaceBlock) {\n    this.tagData = value.data;\n  };\n\n  @Input() public set tagData(value: DownloadButtonTagData) {\n    this._block = {\n      title: value.title,\n      link: value.link\n    }\n  };\n\n  constructor(private readonly _blobCreateService: BlobCreateService) { }\n\n  public _block: DownloadButtonTagData = {\n    title: '',\n    link: ''\n  }\n\n  downloadFile() {\n    this._blobCreateService.getBlob(this._block.link).subscribe(\n      blob => {\n        const link = document.createElement('a');\n        const objectUrl = URL.createObjectURL(blob);\n        link.href = objectUrl;\n\n        const regex = /[^/]+$/;\n        link.download = this._block.link.match(regex)[0] || 'Без названия';\n        link.click();\n        URL.revokeObjectURL(objectUrl);\n      }\n    );\n  }\n}\n","<span\n  class=\"download-file-button\"\n  (click)=\"downloadFile()\">\n  <mat-icon> save</mat-icon>\n  {{this._block.title}}\n</span>\n","import { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\n\n@Component({\n  selector: 'croco-html-error-banner',\n  standalone: true,\n  imports: [\n    MatCardModule,\n    MatButtonModule\n  ],\n  templateUrl: './error-banner.component.html',\n  styleUrl: './error-banner.component.css'\n})\nexport class ErrorBannerComponent {\n  @Input({ required: true }) \n  message: string = \"\";\n}\n","@if (message) {\n    <mat-card class=\"red\">\n      <mat-card-content>\n        <p>\n          {{ message }}\n        </p>\n      </mat-card-content>\n      <mat-card-actions>\n        <button mat-button (click)=\"message = null\">ЗАКРЫТЬ</button>\n      </mat-card-actions>\n    </mat-card>\n  }\n  ","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ScreenWidthService {\n\n  private screenWidth = new BehaviorSubject<number>(window.innerWidth);\n\n  constructor() {\n    window.addEventListener('resize', this.onResize.bind(this));\n  }\n\n  private onResize(event: Event) {\n    this.screenWidth.next(window.innerWidth);\n  }\n\n  getScreenWidth(): Observable<number> {\n    return this.screenWidth.asObservable()\n  }\n}\n","import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { ImageMethods } from '../../../extensions';\nimport { ScreenWidthService } from \"../../../services/screen-width.service\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { NgStyle } from \"@angular/common\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { FileImageTagData, IImageMediaRequest } from '../../../models';\n\n@Component({\n  selector: 'croco-html-file-image-tag-view',\n  templateUrl: './file-image-tag-view.component.html',\n  imports: [\n    NgStyle\n  ],\n  standalone: true\n})\nexport class FileImageTagViewComponent implements OnInit, OnDestroy {\n\n  @Input() set item(item: InterfaceBlock) {\n    let data = item.data as FileImageTagData;\n    this.imageData = data;\n    this.imageSrc = data.src;\n    this.requests = this.getMediaRequests(data.screenMediaRequest);\n  }\n\n  @Input({ required: true })\n  isEditor = false\n\n  imageSrc = \"\";\n  imageData: FileImageTagData | null = null;\n  requests: IImageMediaRequest[] = []\n\n  private unsubscribe = new Subject<void>();\n  public imageMaxHeight: number = null;\n  public imageMaxWidth: number = null;\n\n  constructor(private readonly screenWidthService: ScreenWidthService,\n    @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n  ) { }\n\n  getMediaRequests(screenMediaRequest: string) : IImageMediaRequest[] {\n    let result = ImageMethods.mediaRequestStringToArrayParser(screenMediaRequest);\n\n    if (result.length === 0) {\n      return this._options.imageOptions.globalMediaRequests ?? [];\n    }\n\n    return result;\n  }\n\n  ngOnInit(): void {\n    this.screenWidthService.getScreenWidth()\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe(screenWidth => {\n        let restrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);\n\n        this.imageMaxHeight = restrictions.maxHeight;\n        this.imageMaxWidth = restrictions.maxWidth;\n\n        if (this._options.imageOptions.visualEditorOptions?.previewModeImageMaxHeight && this.isEditor) {\n          const visualMaxHeight = this._options.imageOptions.visualEditorOptions.previewModeImageMaxHeight;\n          if (this.imageMaxHeight === null || this.imageMaxHeight === undefined || visualMaxHeight < this.imageMaxHeight) {\n            this.imageMaxHeight = visualMaxHeight;\n          }\n        }\n      })\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n\n  onImageClick(): void {\n    if (this.imageData && this._options.imageOptions.onImageClick) {\n      this._options.imageOptions.onImageClick(this.imageData);\n    }\n  }\n}\n","<img\n  [ngStyle]=\"{ 'max-height': imageMaxHeight ? imageMaxHeight + 'px' : '100%', 'max-width': imageMaxWidth ? imageMaxWidth + 'px' : '100%', }\"\n  class=\"mx-auto d-block img-fluid\"\n  [src]=\"imageSrc\"\n  alt=\"Изображение не загружено\"\n  (click)=\"onImageClick()\"\n  style=\"cursor: pointer;\"\n/>\n","import {Component, Input, OnChanges, Renderer2, SimpleChanges} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {Router} from \"@angular/router\";\n\n;\n\n@Component({\n  selector: 'croco-html-raw-view',\n  templateUrl: './html-raw-view.component.html',\n  standalone: true\n})\nexport class HtmlRawViewComponent implements OnChanges {\n\n  @Input() rawHtml = \"\";\n\n  safeHtml: SafeHtml;\n\n  constructor(private readonly _sanitizer: DomSanitizer, private readonly router: Router) { }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['rawHtml'] && changes['rawHtml'].currentValue !== changes['rawHtml'].previousValue) {\n      this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.rawHtml);\n    }\n  }\n\n  handleLink(event: MouseEvent) {\n    const target = (event.target as HTMLElement).closest('a');\n    if (!target) {\n      return;\n    }\n\n    const href = target.getAttribute('href');\n    if (!href) {\n      return;\n    }\n\n    const targetAttr = target.getAttribute('target');\n\n    if (targetAttr === '_blank') {\n      return;\n    }\n\n    const isExternal =\n      href.startsWith('http://') ||\n      href.startsWith('https://') ||\n      href.startsWith('www.') ||\n      href.match(/^[a-zA-Z]+:\\/\\//);\n\n    if (isExternal) {\n      return;\n    }\n    event.preventDefault();\n\n    const path = href.startsWith('/') ? href : `/${href}`;\n\n    this.router.navigate([path]);\n  }\n\n}\n","@if (rawHtml) {\n  <div [innerHTML]=\"safeHtml\" (click)=\"handleLink($event)\"></div>\n}\n","import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n/**\n * Сервис для обработки логики разметки\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class HtmlViewController {\n\n    onScriptCalled(script: string) {\n        this.scriptCalled.next(script);\n    }\n\n    scriptCalled = new Subject<string>();\n}\n","import { Component, Input } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { MatButton } from \"@angular/material/button\";\nimport { HtmlViewController } from '../../../services/HtmlViewController';\nimport { ButtonTagData } from '../../../tag-services/ButtonTagService';\n\n@Component({\n  selector: 'croco-html-xml-tag-button',\n  standalone: true,\n  imports: [\n    MatButton\n  ],\n  templateUrl: './xml-tag-button.component.html',\n  styleUrl: './xml-tag-button.component.css'\n})\nexport class XmlTagButtonComponent {\n  @Input() public set data(value: InterfaceBlock) {\n    this.tagData = value.data;\n  };\n\n  @Input() public set tagData(value: ButtonTagData) {\n    this._block = {\n      text: value.text,\n      type: value.type,\n      click: value.click\n    }\n  };\n\n  constructor(private readonly _controller: HtmlViewController) {\n  }\n\n  public _block: ButtonTagData = {\n    text: '',\n    type: '',\n    click: ''\n  };\n\n  clickHandler() {\n    this._controller.onScriptCalled(this._block.click);\n  }\n}\n","<button mat-stroked-button color=\"primary\" (click)=\"clickHandler()\">{{_block.text}}</button>\n","import {\n  Component,\n  ComponentRef,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { CrocoHtmlOptionsToken } from \"../../../consts\";\nimport { CrocoHtmlOptions } from \"../../../options\";\nimport { CustomWidgetTagData } from '../../../tag-services/CustomWidgetTagService';\n\n@Component({\n  selector: 'croco-html-xml-tag-custom-widget',\n  templateUrl: './xml-tag-custom-widget.component.html',\n  styleUrls: ['./xml-tag-custom-widget.component.css'],\n  imports: [MatTooltip],\n  standalone: true\n})\nexport class XmlTagCustomWidgetComponent implements OnInit, OnDestroy {\n  @ViewChild('container', { read: ViewContainerRef, static: true })\n  viewContainerRef!: ViewContainerRef;\n\n  public useDynamicComponent = false;\n\n  public dynamicContainerRef: ComponentRef<any>;\n\n  @Input()\n  public set tagData(value: CustomWidgetTagData) {\n    if (value) {\n      this._tagData = value;\n      this.tooltipData = `data-id:${value.dataId}; widget-id: ${value.widgetId}`;\n      if (this.dynamicContainerRef?.instance) {\n        this.dynamicContainerRef.instance.tagData = value;\n      }\n    }\n  };\n\n  public get tagData(): CustomWidgetTagData {\n    return this._tagData;\n  }\n\n  public _tagData: CustomWidgetTagData;\n  public tooltipData: string = \"\";\n\n  constructor(\n    @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n  ) {\n  }\n\n  ngOnInit(): void {\n    if (this._options.customWidgetRendererComponent) {\n      this.useDynamicComponent = true;\n      this.viewContainerRef.remove();\n      this.dynamicContainerRef = this.viewContainerRef.createComponent(this._options.customWidgetRendererComponent);\n      this.dynamicContainerRef.setInput(\"tagData\", this.tagData);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.dynamicContainerRef.destroy();\n  }\n}\n","<ng-container #container>\n  @if (!useDynamicComponent) {\n    <div [matTooltip]=\"tooltipData\">\n       Кастомный виджет. тип виджета: {{ tagData?.type }}\n    </div>\n  }\n</ng-container>\n\n","import { Component, ComponentRef, Inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { JsonPipe } from '@angular/common';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { HtmlPageDataController } from '../../../services';\n\n@Component({\n  selector: 'croco-html-defined-custom-tag-view',\n  imports: [JsonPipe],\n  templateUrl: './defined-custom-tag-view.component.html',\n  standalone: true\n})\nexport class DefinedCustomTagViewComponent implements OnInit, OnDestroy {\n\n  @ViewChild('container', { read: ViewContainerRef, static: true })\n  viewContainerRef!: ViewContainerRef;\n\n  public useDynamicComponent = false;\n\n  public dynamicContainerRef: ComponentRef<any>;\n\n  @Input({ required: true }) public set data(value: InterfaceBlock) {\n    this._data = value;\n    if(this.dynamicContainerRef) {\n      this.dynamicContainerRef.setInput(\"data\", this._data);\n    }\n  };\n\n\n  @Input({ required: true })\n  dataController: HtmlPageDataController;\n\n  public _data: InterfaceBlock;\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n  }\n\n  getCustomComponent() {\n\n    const tagName = this._data.tagName;\n\n    if (this._options.definedCustomTagViewRenderers.hasOwnProperty(tagName)) {\n      return this._options.definedCustomTagViewRenderers[tagName].viewComponent;\n    }\n\n    return null;\n  }\n\n  ngOnInit(): void {\n\n    var component = this.getCustomComponent();\n\n    if (component) {\n      this.useDynamicComponent = true;\n      this.viewContainerRef.remove();\n      this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n      this.dynamicContainerRef.setInput(\"data\", this._data);\n      this.dynamicContainerRef.setInput(\"dataController\", this.dataController);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.dynamicContainerRef.destroy();\n  }\n}\n","<ng-container #container>\n    @if (!useDynamicComponent) {\n    <div>\n        {{data | json}}\n    </div>\n    }\n</ng-container>","/**\n * Сервис для прокидывания предрасчитанных данных для виджетов Html разметки.\n * Используется для оптимизации Http запросов за данными.\n */\n\nexport class HtmlPageDataController {\n\n    data: object | null = null;\n\n    /**\n     * Получить данные.\n     * @returns\n     */\n    get<T>(): T | null {\n\n        if (!this.data) {\n            return null;\n        }\n\n        return this.data as T;\n    }\n\n    /**\n     * Установить данные.\n     * @param data\n     */\n    set(data: object) {\n        this.data = data;\n    }\n}\n","import { Component, Inject, Input, ViewEncapsulation } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { TextTags } from '../../../extensions';\nimport { XmlTagDownloadFileButtonComponent } from '../xml-tag-download-file-button/xml-tag-download-file-button.component';\nimport { XmlTagExternalVideoComponent } from '../xml-tag-external-video/xml-tag-external-video.component';\nimport { ErrorBannerComponent } from '../../error-banner/error-banner.component';\nimport { XmlTagHtmlViewComponent } from '../xml-tag-html-view/xml-tag-html-view.component';\nimport { FileImageTagViewComponent } from '../file-image-tag-view/file-image-tag-view.component';\nimport { AudioPlayerTagViewComponent } from '../audio-player-tag-view/audio-player-tag-view.component';\nimport { XmlTagHeaderTextViewComponent } from '../xml-tag-header-text-view/xml-tag-header-text-view.component';\nimport { HtmlRawViewComponent } from '../html-raw-view/html-raw-view.component';\nimport { XmlTagTextViewComponent } from '../xml-tag-text-view/xml-tag-text-view.component';\nimport { XmlTagButtonComponent } from \"../xml-tag-custom-button/xml-tag-button.component\";\nimport { XmlTagCustomWidgetComponent } from \"../xml-tag-custom-widget/xml-tag-custom-widget.component\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { DefinedCustomTagViewComponent } from '../defined-custom-tag-view/defined-custom-tag-view.component';\nimport { HtmlPageDataController } from '../../../services';\n\n@Component({\n  selector: 'croco-html-xml-tag-view',\n  templateUrl: './xml-tag-view.component.html',\n  styleUrls: ['./xml-tag-view.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [\n    XmlTagTextViewComponent,\n    HtmlRawViewComponent,\n    XmlTagHeaderTextViewComponent,\n    FileImageTagViewComponent,\n    AudioPlayerTagViewComponent,\n    XmlTagHtmlViewComponent,\n    ErrorBannerComponent,\n    XmlTagExternalVideoComponent,\n    XmlTagDownloadFileButtonComponent,\n    XmlTagButtonComponent,\n    XmlTagCustomWidgetComponent,\n    DefinedCustomTagViewComponent\n  ],\n})\nexport class XmlTagViewComponent {\n\n  @Input({ required: true })\n  data: InterfaceBlock[] = [];\n\n  @Input({ required: true })\n  dataController: HtmlPageDataController = new HtmlPageDataController();\n\n  @Input({ required: true })\n  isEditor = false\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n  }\n\n  isHeaderTextTag(item: InterfaceBlock) {\n    return TextTags.headerTextTags.includes(item.tagName);\n  }\n\n  isDefinedCustomTag(item: InterfaceBlock) {\n    return this._options.definedCustomTags.hasOwnProperty(item.tagName);\n  }\n}\n","<div>\n  @for (item of data; track $index) {\n  <div class=\"row\">\n\n    @if (item.tagName === 'text') {\n    <div>\n      <croco-html-xml-tag-text-view [item]=\"item\"></croco-html-xml-tag-text-view>\n    </div>\n    }\n    @else if (item.tagName === 'html-raw') {\n    <div>\n      <croco-html-raw-view [rawHtml]=\"item.data.innerHTML\"></croco-html-raw-view>\n    </div>\n    }\n    @else if (isHeaderTextTag(item)) {\n    <div>\n      <croco-html-xml-tag-header-text-view [item]=\"item\"></croco-html-xml-tag-header-text-view>\n    </div>\n    }\n    @else if (item.tagName === 'file-image') {\n    <div>\n      <croco-html-file-image-tag-view [item]=\"item\" [isEditor]=\"isEditor\"></croco-html-file-image-tag-view>\n    </div>\n    }\n    @else if (item.tagName === 'audio-player') {\n    <div>\n      <croco-html-audio-player-tag-view [data]=\"item\"></croco-html-audio-player-tag-view>\n    </div>\n    }\n    @else if (item.tagName === 'custom-widget') {\n    <div>\n      <croco-html-xml-tag-custom-widget [tagData]=\"item.data\"></croco-html-xml-tag-custom-widget>\n    </div>\n    }\n    @else if (item.tagName === 'table' && item.validationResult) {\n\n      @if (item.validationResult.isSucceeded){\n        <div class=\"table-container\">\n          <croco-html-xml-tag-html-view [html]=\"item.data.bootstrapHtml\">\n          </croco-html-xml-tag-html-view>\n        </div>\n      }\n      @else {\n      <croco-html-error-banner [message]=\"item.validationResult.message\">\n      </croco-html-error-banner>\n      }\n    }\n    @else if (item.tagName === 'external-video') {\n    <div>\n      <croco-html-xml-tag-external-video [data]=\"item\"></croco-html-xml-tag-external-video>\n    </div>\n    }\n    @else if (item.tagName === 'download-file-button') {\n    <div>\n      <croco-html-xml-tag-download-file-button [data]=\"item\"></croco-html-xml-tag-download-file-button>\n    </div>\n    }\n    @else if (item.tagName === 'button') {\n    <div>\n      <croco-html-xml-tag-button [data]=\"item\"></croco-html-xml-tag-button>\n    </div>\n    }\n    @else if (item.tagName === 'unsupported-tag') {\n    <div class=\"red\" style=\"margin-top: 10px;\">\n      <h4>Данный тег не поддерживается</h4>\n      <span>\n        {{item.data.tagString}}\n      </span>\n    </div>\n    }\n    @else if (isDefinedCustomTag(item)) {\n    <div>\n      <croco-html-defined-custom-tag-view [data]=\"item\"\n        [dataController]=\"dataController\"></croco-html-defined-custom-tag-view>\n    </div>\n    }\n\n  </div>\n  }\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n  ExternalVideoTagData,\n  ExternalVideoSupportedTypes,\n} from '../../../extensions';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { XmlTagExternalVideoComponent } from '../../xml-tags';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckbox } from \"@angular/material/checkbox\";\n\n@Component({\n  selector: 'croco-html-external-video-editor',\n  templateUrl: './external-video-editor.component.html',\n  styleUrls: ['./external-video-editor.component.scss'],\n  standalone: true,\n  imports: [\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    XmlTagExternalVideoComponent,\n    MatCheckbox,\n  ]\n})\nexport class ExternalVideoEditorComponent implements OnInit {\n\n  @Input({required: true})\n  tag: HtmlBodyTag;\n\n  @Input({required: true})\n  presentOrEdit = true;\n\n  protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n\n  tagData: ExternalVideoTagData = {\n    link: '',\n    innerHtml: '',\n    type: ExternalVideoSupportedTypes.Youtube,\n    useResponsiveWrapper: false,\n  };\n\n  linkText = '';\n\n  ngOnInit(): void {\n    const { link, type, useResponsiveWrapper } = this.tag.attributes as ExternalVideoTagData;\n\n    this.tagData = {\n      link,\n      type,\n      useResponsiveWrapper,\n      innerHtml: this.tag.innerHtml\n    }\n\n    switch (this.tagData.type) {\n      case ExternalVideoSupportedTypes.Youtube: {\n        this.linkText = 'Ссылка на YouTube'\n        break;\n      }\n      case ExternalVideoSupportedTypes.VkVideo: {\n        this.linkText = 'Ссылка на Vk Video'\n        break;\n      }\n      case ExternalVideoSupportedTypes.Code: {\n        this.linkText = 'Встраиваемый код'\n        break;\n      }\n    }\n  }\n\n  linkChanged() {\n    if (this.tagData.link.includes('iframe')) {\n      this.createLinkByIFrame()\n    }\n\n    const { innerHtml, ...tagData } = this.tagData;\n    this.tag.attributes = tagData;\n    this.tag.innerHtml = innerHtml\n  }\n\n  onCheck(checked: boolean): void {\n    this.tagData.useResponsiveWrapper = checked;\n    this.linkChanged();\n  }\n\n  createLinkByIFrame() {\n    const parser = new DOMParser();\n    const document = parser.parseFromString(this.tagData.link, \"text/html\");\n    const elem = document.body.children[0];\n    const src = elem.getAttribute(\"src\");\n    this.tagData.link = src;\n  }\n}\n","@if (presentOrEdit) {\n  <div>\n    <div style=\"word-break: break-all\">\n      @switch (tagData.type) {\n        @case (ExternalVideoSupportedTypes.VkVideo) {\n          {{linkText}}: {{tagData.link}}\n        }\n        @case (ExternalVideoSupportedTypes.Youtube) {\n          {{linkText}}: {{tagData.link}}\n        }\n        @case (ExternalVideoSupportedTypes.Code) {\n          <div>\n            Встраиваемый код плеера.\n          </div>\n        }\n      }\n    </div>\n    <div style=\"height: 10px;\"></div>\n    <croco-html-xml-tag-external-video [tagData]=\"tagData\"></croco-html-xml-tag-external-video>\n  </div>\n}\n@else {\n  @if(tagData.type !== ExternalVideoSupportedTypes.Code) {\n    <div>\n      <mat-form-field class=\"w-100\">\n        <mat-label>\n          {{linkText}}\n        </mat-label>\n        <input matInput placeholder=\"{{linkText}}\"\n               autocomplete=\"off\"\n               [(ngModel)]=\"tagData.link\"\n               (ngModelChange)=\"linkChanged()\">\n      </mat-form-field>\n    </div>\n  } @else {\n    <div>\n        <mat-label>\n          {{linkText}}\n        </mat-label>\n        <mat-form-field class=\"w-100\">\n          <mat-label>Разметка</mat-label>\n          <textarea\n            #autosize=\"cdkTextareaAutosize\"\n            matInput\n            cdkTextareaAutosize\n            cdkAutosizeMinRows=\"1\"\n            cdkAutosizeMaxRows=\"5\"\n            placeholder=\"Текст\"\n            #textArea\n            [(ngModel)]=\"tagData.innerHtml\"\n            (ngModelChange)=\"linkChanged()\"\n          ></textarea>\n        </mat-form-field>\n\n        <mat-checkbox\n          [checked]=\"tagData.useResponsiveWrapper\"\n          (change)=\"onCheck($event.checked)\"\n        >\n          Использовать адаптив?\n        </mat-checkbox>\n    </div>\n  }\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\n\n@Component({\n  selector: 'croco-html-html-raw-editor',\n  templateUrl: './html-raw-editor.component.html',\n  styleUrls: ['../external-video-editor/external-video-editor.component.scss'],\n  standalone: true,\n  imports: [MatFormField, MatLabel, MatInput, CdkTextareaAutosize, FormsModule]\n})\nexport class HtmlRawEditorComponent implements OnChanges {\n\n  @Input({ required: true })\n  tag: HtmlBodyTag;\n\n  @Input({ required: true })\n  presentOrEdit = true;\n\n  safeHtml: SafeHtml;\n\n  constructor(private readonly _sanitizer: DomSanitizer) { }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['tag'] && changes['tag'].currentValue !== changes['tag'].previousValue) {\n      this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.tag.innerHtml);\n    }\n  }\n\n  onSafeHtmlChange(): void {\n    this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.tag.innerHtml);\n  }\n}\n","@if (presentOrEdit) {\n    <div [innerHTML]=\"safeHtml\">\n    </div>\n}\n@else {\n  <div>\n    <div style=\"height: 10px;\">\n    </div>\n    <div>\n      <mat-form-field class=\"w-100\">\n        <mat-label>\n          Внутренняя разметка тега\n        </mat-label>\n        <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n          cdkAutosizeMinRows=\"1\"\n          placeholder=\"Внутренняя разметка тега\"\n          [(ngModel)]=\"tag.innerHtml\"\n          (ngModelChange)=\"onSafeHtmlChange()\"\n        ></textarea>\n      </mat-form-field>\n    </div>\n  </div>\n}\n\n","import { Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { ImageMethods } from '../../extensions/ImageMethods';\nimport { PublicFilesQueryService } from '../../services/PublicFilesQueryService';\nimport { CrocoHtmlOptionsToken } from '../../consts';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { CrocoHtmlEditorFileOptions, CrocoHtmlOptions } from '../../options';\nimport { PrivateFilesQueryService } from \"../../services/PrivateFilesQueryService\";\nimport { CrocoHtmlFileOptionsService } from \"../../services/CrocoHtmlFileOptionsService\";\nimport { FileType } from '../../services/file-models';\n\nexport interface SearchQuestionsFormData {\n  q: string;\n}\n\nexport interface FileUnifiedModel {\n  fileId: string;\n  fileName: string;\n}\n\n@Component({\n  selector: 'croco-html-file-id-select',\n  templateUrl: './file-id-select.component.html',\n  styleUrls: ['./file-id-select.component.scss'],\n  standalone: true,\n  imports: [NgSelectModule, FormsModule]\n})\nexport class FileIdSelectComponent implements OnInit, OnChanges {\n\n  q: string;\n\n  @Input()\n  labelText = \"Поиск файлов\"\n\n  @Input()\n  @Output()\n  fileId: string;\n\n  loading = false;\n\n  files: FileUnifiedModel[] = [];\n\n  @Output()\n  onFileIdChanged = new EventEmitter<string>();\n\n  get crocoHtmlEditorFileOptions(): CrocoHtmlEditorFileOptions {\n    return this._htmlSettingsService.get();\n  }\n\n  constructor(\n    private readonly _publicFileService: PublicFilesQueryService,\n    private readonly _privateFileService: PrivateFilesQueryService,\n    private _htmlSettingsService: CrocoHtmlFileOptionsService,\n    @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n  ) {\n  }\n\n  onModelChanged(fileId: string) {\n    this.onFileIdChanged.emit(fileId);\n  }\n\n  getSrc(fileId: string) {\n    return ImageMethods.buildSmallUrl(fileId, this._options);\n  }\n\n  ngOnInit(): void {\n    this.loadFiles();\n  }\n\n  public loadFiles() {\n    this.loading = true;\n    const isPrivate = this.crocoHtmlEditorFileOptions.usePrivateFiles;\n\n    const searchParams = {\n      count: 10,\n      offSet: 0,\n      fileName: null,\n      fileTypes: [FileType.Image],\n      applicationId: isPrivate ? this.crocoHtmlEditorFileOptions.applicationId : null,\n      q: this.q\n    };\n\n    if (isPrivate) {\n      this._privateFileService.search(searchParams)\n        .subscribe(data => {\n          this.files = data.list.map(el => ({ fileId: el.id, fileName: el.fileName }));\n          this.loading = false;\n        });\n    } else {\n      this._publicFileService.search(searchParams)\n        .subscribe(data => {\n          this.files = data.list.map(el => ({ fileId: el.fileId.toString(), fileName: el.fileName }));\n          this.loading = false;\n        })\n    }\n  }\n\n  onSearchChanged(q: { term: string, items: object[] }) {\n    this.q = q.term;\n    this.loadFiles();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.loadFiles();\n  }\n}\n","<div class=\"file-id\">\n    <div class=\"form-group\">\n        <label for=\"fileName\">{{labelText}}</label>\n        <ng-select [(ngModel)]=\"fileId\" (ngModelChange)=\"onModelChanged($event)\" [items]=\"files\" #select\n            bindLabel=\"fileName\" (search)=\"onSearchChanged($event)\" [loading]=\"loading\" [loadingText]=\"'Загружаю файлы'\"\n            dropdownPosition=\"auto\" [bindValue]=\"'fileId'\" labelForId=\"fileName\" placeholder=\"Выбрать файл\"\n            [virtualScroll]=\"true\">\n            <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n              <div class=\"file-id__container\">\n                <div class=\"file-id__text-container\">\n                  <div>\n                    <span class=\"h5\">Файл: </span>\n                    <span class=\"h5\"><b>{{item.fileName}}</b></span>\n                  </div>\n                  <div>\n                    <small>\n                        <span>\n                            Идентификатор файла: <b>{{item.fileId }}</b>\n                        </span>\n                    </small>\n                  </div>\n                </div>\n                <div class=\"file-id__img\">\n                  <img class=\"mx-auto d-block img-fluid\" [src]=\"getSrc(item.fileId)\" />\n                </div>\n              </div>\n\n            </ng-template>\n        </ng-select>\n    </div>\n</div>\n\n<div>\n    Идентификатор файла: {{fileId}}\n</div>\n","import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ImageMethods, FileImageTagDataConsts } from '../../../extensions';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { FileIdSelectComponent } from '../../file-id-select/file-id-select.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { NgStyle } from \"@angular/common\";\nimport { ScreenWidthService } from \"../../../services/screen-width.service\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatSlideToggle } from \"@angular/material/slide-toggle\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { IImageMediaRequest } from '../../../models';\n\n@Component({\n  selector: 'croco-html-image-editor',\n  templateUrl: './image-editor.component.html',\n  styleUrls: ['./image-editor.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonToggleGroup,\n    FormsModule,\n    MatButtonToggle,\n    MatIcon,\n    FileIdSelectComponent,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    NgStyle,\n    MatIconButton,\n    MatSlideToggle\n  ]\n})\nexport class ImageEditorComponent implements OnInit, OnDestroy {\n\n  hasImageError = false;\n  searchOrEdit = \"search\";\n  requests: IImageMediaRequest[] = [];\n  imageMaxHeight: number = null;\n  imageMaxWidth: number = null;\n  isShowMediaRequest = false;\n  private unsubscribe = new Subject<void>();\n\n  @Input({ required: true })\n  tag: HtmlBodyTag;\n\n  @Input({ required: true })\n  presentOrEdit = true;\n\n  onErrorHandler() {\n    this.hasImageError = true;\n  }\n\n  public get fileId(): string {\n    return this.tag.attributes[FileImageTagDataConsts.FileIdAttrName];\n  }\n\n  public set fileId(value: string) {\n    this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = value;\n  }\n\n  constructor(\n    @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions,\n    private readonly screenWidthService: ScreenWidthService,\n  ) { }\n\n  getSrc() {\n    return ImageMethods.buildUrl(this.tag.attributes[FileImageTagDataConsts.FileIdAttrName], \"Medium\", this._options);\n  }\n\n  hasFileId() {\n    return this.tag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName);\n  }\n\n  onFileIdChanged(fileId: string) {\n    this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = fileId;\n    this.removeImageError();\n  }\n\n  removeImageError() {\n    this.hasImageError = false;\n  }\n\n  ngOnInit(): void {\n    let attr = this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest];\n    this.requests = ImageMethods.mediaRequestStringToArrayParser(attr)\n\n    this.screenWidthService.getScreenWidth()\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe(screenWidth => {\n        let imageRestrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);\n\n        this.imageMaxHeight = imageRestrictions.maxHeight;\n        this.imageMaxWidth = imageRestrictions.maxWidth;\n\n        if (this._options.imageOptions.visualEditorOptions?.editorModeImageMaxHeight) {\n          const visualMaxHeight = this._options.imageOptions.visualEditorOptions.editorModeImageMaxHeight;\n          if (this.imageMaxHeight === null || this.imageMaxHeight === undefined || visualMaxHeight < this.imageMaxHeight) {\n            this.imageMaxHeight = visualMaxHeight;\n          }\n        }\n      });\n  }\n\n  requestChanged() {\n    this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest] = ImageMethods.mediaRequestsArrayToString(this.requests)\n  }\n\n  addNewMediaRequest() {\n    this.requests.push({\n      maxScreenWidth: 0,\n      minScreenWidth: 0,\n      maxImageHeight: 0,\n      maxImageWidth: 0\n    })\n  }\n\n  deleteMediaRequest(index: number) {\n    this.requests.splice(index, 1);\n    this.requestChanged();\n  }\n\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n}\n","<div>\n  <div style=\"height: 10px;\">\n  </div>\n\n  @if (hasImageError) {\n    <div class=\"error-block\">\n      Изображение не найдено по указанному идентификатору, возможно файл не существует или отсутствует на сервере.\n    </div>\n  }\n\n  @if (hasFileId() && !hasImageError) {\n    <div>\n      <img\n        [ngStyle]=\"{ 'max-height': imageMaxHeight ? imageMaxHeight + 'px' : '100%', 'max-width': imageMaxWidth ? imageMaxWidth + 'px' : '100%', }\"\n        class=\"mx-auto d-block img-fluid\" [src]=\"getSrc()\" (error)=\"onErrorHandler()\" alt=\"photo\"/>\n    </div>\n  }\n\n  @if (!hasFileId()) {\n    <div>\n      <h5>[Изображение не выбрано]</h5>\n    </div>\n  }\n\n  @if(!presentOrEdit) {\n    <mat-slide-toggle style=\"padding: 10px 0\" [(ngModel)]=\"isShowMediaRequest\">Показывать медиа запросы</mat-slide-toggle>\n  }\n\n  @if(isShowMediaRequest) {\n    <div style=\"display: flex; flex-direction: column; gap: 20px\">\n      <div class=\"media-request__header\">\n        <span>Медиа запросы:</span>\n        @if (!presentOrEdit) {\n          <button (click)=\"addNewMediaRequest()\" class=\"w-30\" mat-icon-button color=\"primary\">\n            <mat-icon>add</mat-icon>\n          </button>\n        }\n      </div>\n      @for (request of requests; track $index) {\n        <div class=\"media-request__container\">\n          @if (presentOrEdit) {\n            <div style=\"display: flex; flex-direction: column; gap: 5px\">\n              <span class=\"w-100\">Минимальная ширина: {{request.minScreenWidth}}</span>\n              <span class=\"w-100\">Максимальная ширина: {{request.maxScreenWidth}}</span>\n              <span class=\"w-100\">Максимальная высота изображения: {{request.maxImageHeight}}</span>\n              <span class=\"w-100\">Максимальная ширина изображения: {{request.maxImageWidth}}</span>\n            </div>\n          }\n          @else {\n            <div style=\"width: 100%\">\n              <mat-form-field class=\"w-100\">\n                <mat-label>\n                  Минимальная ширина\n                </mat-label>\n                <input matInput placeholder=\"Минимальная граница ширины\"\n                       autocomplete=\"off\"\n                       [(ngModel)]=\"request.minScreenWidth\"\n                       (ngModelChange)=\"requestChanged()\">\n              </mat-form-field>\n\n              <mat-form-field class=\"w-100\">\n                <mat-label>\n                  Максимальная ширина\n                </mat-label>\n                <input matInput placeholder=\"Максимальная граница ширины\"\n                       autocomplete=\"off\"\n                       [(ngModel)]=\"request.maxScreenWidth\"\n                       (ngModelChange)=\"requestChanged()\">\n              </mat-form-field>\n\n              <mat-form-field class=\"w-100\">\n                <mat-label>\n                  Максимальная высота изображения\n                </mat-label>\n                <input matInput placeholder=\"Максимальная высота изображения\"\n                       autocomplete=\"off\"\n                       [(ngModel)]=\"request.maxImageHeight\"\n                       (ngModelChange)=\"requestChanged()\">\n              </mat-form-field>\n\n              <mat-form-field class=\"w-100\">\n                <mat-label>\n                  Максимальная ширина изображения\n                </mat-label>\n                <input matInput placeholder=\"Максимальная ширина изображения\"\n                       autocomplete=\"off\"\n                       [(ngModel)]=\"request.maxImageWidth\"\n                       (ngModelChange)=\"requestChanged()\">\n              </mat-form-field>\n            </div>\n\n            <button (click)=\"deleteMediaRequest($index)\" class=\"w-30\" mat-icon-button color=\"warn\">\n              <mat-icon>delete</mat-icon>\n            </button>\n          }\n        </div>\n      }\n    </div>\n  }\n</div>\n\n@if (!presentOrEdit) {\n  <div>\n    <div style=\"height: 10px;\"></div>\n    <div style=\"overflow-x:auto;\" class=\"mode-toggle-container\">\n      <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n        <mat-button-toggle value=\"search\">\n          Искать файл <mat-icon>search</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle value=\"edit\">\n          Указать по идентификатору <mat-icon>settings</mat-icon>\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n    </div>\n    <div [hidden]=\"searchOrEdit !== 'search'\">\n      <div class=\"file-selection\">\n        <div class=\"existing-files\">\n          <h6>Выбрать из существующих файлов:</h6>\n          <croco-html-file-id-select\n            [labelText]=\"'Выбрать файл'\"\n            [fileId]=\"fileId\"\n            (onFileIdChanged)=\"onFileIdChanged($event)\">\n          </croco-html-file-id-select>\n        </div>\n      </div>\n    </div>\n    <div [hidden]=\"searchOrEdit !== 'edit'\">\n      <div>\n        <mat-form-field class=\"w-100\">\n          <mat-label>\n            Идентификатор файла\n          </mat-label>\n          <input matInput placeholder=\"Идентификатор файла\" new-autocomplete=\"off\" autocomplete=\"off\"\n            [(ngModel)]=\"fileId\"\n            (ngModelChange)=\"onFileIdChanged($event)\">\n        </mat-form-field>\n      </div>\n    </div>\n  </div>\n}\n","import { ExternalVideoTagDataConsts, FileImageTagDataConsts, FileAudioTagDataConsts } from '../../../extensions';\nimport { TagItem } from '../../../models/models';\nimport { CustomWidgetTagDataConsts, DownloadButtonTagDataConsts, HtmlRawTagDataConsts } from '../../../tag-services';\nimport { ButtonTagDataConsts } from '../../../tag-services/ButtonTagService';\n\nexport class DefaultTags {\n\n  static textTags: TagItem[] = [\n    { tag: 'text', displayValue: 'T', isCustom: false },\n    { tag: 'h1', displayValue: 'H1', isCustom: false },\n    { tag: 'h2', displayValue: 'H2', isCustom: false },\n    { tag: 'h3', displayValue: 'H3', isCustom: false },\n    { tag: 'h4', displayValue: 'H4', isCustom: false },\n    { tag: 'h5', displayValue: 'H5', isCustom: false },\n    { tag: 'h6', displayValue: 'H6', isCustom: false },\n  ]\n\n  static tags: TagItem[] = [\n    { tag: FileImageTagDataConsts.TagName, displayValue: 'Изображение', isCustom: false },\n    { tag: FileAudioTagDataConsts.TagName, displayValue: 'Аудио', isCustom: false },\n    { tag: ExternalVideoTagDataConsts.TagName, displayValue: 'Видео', isCustom: false },\n    { tag: DownloadButtonTagDataConsts.TagName, displayValue: 'Кнопка для скачивания', isCustom: false },\n    { tag: ButtonTagDataConsts.TagName, displayValue: 'Кнопка', isCustom: false },\n    // { tag: CustomWidgetTagDataConsts.TagName, displayValue: 'Виджет', isCustom: false },\n    { tag: HtmlRawTagDataConsts.TagName, displayValue: 'Разметка', isCustom: false },\n    { tag: 'text', displayValue: 'Текст', isCustom: false },\n  ];\n\n  static getTags(): TagItem[] {\n    return [...DefaultTags.tags];\n  }\n}\n","import { TextAlignment } from \"../../../tag-services\";\n\nexport const AlignmentsData = [\n  { value: TextAlignment.Left , text: 'Слева' },\n  { value: TextAlignment.Center, text: 'По центру' },\n  { value: TextAlignment.Right, text: 'Справа' },\n];\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatFormField, MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { XmlTagDownloadFileButtonComponent } from \"../../xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component\";\nimport { DownloadButtonTagData } from '../../../tag-services/DownloadButtonTagService';\n\n@Component({\n  selector: 'croco-html-download-file-button-editor',\n  standalone: true,\n  imports: [\n    MatFormField,\n    MatInput,\n    ReactiveFormsModule,\n    FormsModule,\n    XmlTagDownloadFileButtonComponent,\n    MatFormFieldModule\n  ],\n  templateUrl: './download-file-button-editor.component.html'\n})\nexport class DownloadFileButtonEditorComponent {\n\n  @Input({required: true})\n  tag: HtmlBodyTag;\n\n\n  @Input({required: true})\n  presentOrEdit = true;\n\n  tagData: DownloadButtonTagData = {\n    link: '',\n    title: ''\n  };\n\n  ngOnInit(): void {\n    this.tagData.link = (this.tag.attributes as DownloadButtonTagData).link;\n    this.tagData.title = (this.tag.attributes as DownloadButtonTagData).title;\n  }\n\n  linkChanged() {\n    this.tag.attributes = this.tagData;\n  }\n}\n","@if (presentOrEdit) {\n  <div>\n    <div>\n      Ссылка для скачивания: {{tagData.link}}\n    </div>\n    <div style=\"height: 10px;\"></div>\n    <div>\n      Текст кнопки: {{tagData.title}}\n    </div>\n    <div style=\"height: 20px;\"></div>\n    <croco-html-xml-tag-download-file-button [tagData]=\"tagData\"></croco-html-xml-tag-download-file-button>\n  </div>\n}\n@else {\n      <div>\n        <mat-form-field class=\"w-100\">\n          <mat-label>\n            Ссылка на скачивание\n          </mat-label>\n          <input matInput placeholder=\"Ссылка на скачивание\"\n                 autocomplete=\"off\"\n                 [(ngModel)]=\"tagData.link\"\n                 (ngModelChange)=\"linkChanged()\">\n        </mat-form-field>\n\n        <mat-form-field class=\"w-100\">\n          <mat-label>\n            Текст на кнопке\n          </mat-label>\n          <input matInput placeholder=\"Текст на кнопке\"\n                 autocomplete=\"off\"\n                 [(ngModel)]=\"tagData.title\"\n                 (ngModelChange)=\"linkChanged()\">\n        </mat-form-field>\n      </div>\n}\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { TagEditorService } from '../../../models';\nimport { TextAlignment, TextTagDataConsts } from '../../../tag-services';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Component({\n  selector: 'croco-html-text-editor',\n  templateUrl: './text-editor.component.html',\n  standalone: true,\n  imports: [\n    MatButtonToggleGroup,\n    FormsModule,\n    MatButtonToggle,\n    MatIcon,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    CdkTextareaAutosize\n  ]\n})\nexport class TextEditorComponent implements OnDestroy {\n\n  private unsubscribe = new Subject<void>();\n\n  _tag: HtmlBodyTag;\n  _tagService: TagEditorService;\n\n  @Input({ required: true })\n  set tagService(data: TagEditorService) {\n    this._tagService = data;\n\n    this._tagService.tag$\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe(tag => {\n        this._tag = tag;\n      });\n\n    this._tagService.presentOrEdit$\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe(val => {\n        this.presentOrEdit = val;\n      });\n\n    this._horizontalAlignment = this._tag.attributes.hasOwnProperty(TextTagDataConsts.HAlign)\n      ? this._tag.attributes[TextTagDataConsts.HAlign]\n      : TextAlignment.Left\n  }\n\n  presentOrEdit = true;\n\n  public TextAlignment = TextAlignment;\n\n  public _horizontalAlignment: TextAlignment = TextAlignment.Left;\n\n  changeData() {\n    this._tag.attributes[TextTagDataConsts.HAlign] = this._horizontalAlignment;\n\n    this._tagService.tag$.next(this._tag);\n  }\n\n  getInnerHtml() {\n    return `<${this._tag.tagDescription.tag}>${this._tag.innerHtml}<${this._tag.tagDescription.tag}/>`;\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n}\n","@if (presentOrEdit) {\n  <div>\n    <div style=\"height: 10px;\">\n    </div>\n    @if (_horizontalAlignment === TextAlignment.Left) {\n      <div style=\"text-align: left;\" [innerHtml]=\"getInnerHtml()\">\n      </div>\n    }\n    @else if (_horizontalAlignment === TextAlignment.Right) {\n      <div style=\"text-align: right;\" [innerHtml]=\"getInnerHtml()\">\n      </div>\n    }\n    @else if (_horizontalAlignment === TextAlignment.Center) {\n      <div style=\"text-align: center;\" [innerHtml]=\"getInnerHtml()\">\n      </div>\n    }\n  </div>\n}\n@else {\n  <div>\n    <div style=\"overflow-x: auto;\">\n      <mat-button-toggle-group [(ngModel)]=\"_horizontalAlignment\" (ngModelChange)=\"changeData()\">\n        <mat-button-toggle value=\"center\">\n          По центру <mat-icon>format_align_center</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle value=\"left\">\n          Слева <mat-icon>format_align_left</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle value=\"right\">\n          Справа <mat-icon> format_align_right</mat-icon>\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n    </div>\n    <div style=\"height: 10px;\">\n    </div>\n    <div>\n      <mat-form-field class=\"w-100\">\n        <mat-label>Внутренняя разметка текстового тега</mat-label>\n        <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n          cdkAutosizeMinRows=\"1\"\n          placeholder=\"Внутренняя разметка текстового тега\"\n        [(ngModel)]=\"_tag.innerHtml\" (ngModelChange)=\"changeData()\"></textarea>\n      </mat-form-field>\n    </div>\n  </div>\n}\n","import { Component, Input } from '@angular/core';\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { XmlTagButtonComponent } from \"../../xml-tags/xml-tag-custom-button/xml-tag-button.component\";\nimport { ButtonTagData } from '../../../tag-services/ButtonTagService';\n\n@Component({\n  selector: 'croco-html-button-editor',\n  standalone: true,\n  imports: [\n    FormsModule,\n    MatFormField,\n    MatInput,\n    MatLabel,\n    XmlTagButtonComponent\n  ],\n  templateUrl: './button-editor.component.html'\n})\nexport class ButtonEditorComponent {\n  @Input({ required: true })\n  tag: HtmlBodyTag;\n\n  @Input({ required: true })\n  presentOrEdit = true;\n\n  tagData: ButtonTagData = {\n    type: '',\n    text: '',\n    click: ''\n  };\n\n  ngOnInit(): void {\n    const data = this.tag.attributes as ButtonTagData;\n    this.tagData.type = data.type;\n    this.tagData.text = data.text;\n    this.tagData.click = data.click;\n  }\n\n  linkChanged() {\n    this.tag.attributes = this.tagData;\n  }\n}\n","@if (presentOrEdit) {\n  <div>\n    <div>\n      Тип: {{tagData.type}}\n    </div>\n    <div style=\"height: 10px;\"></div>\n    <div>\n      Текст: {{tagData.text}}\n    </div>\n    <div style=\"height: 10px;\"></div>\n    <div>\n      Обработчик нажатия: {{tagData.click}}\n    </div>\n    <div style=\"height: 10px;\"></div>\n    <croco-html-xml-tag-button [tagData]=\"tagData\"></croco-html-xml-tag-button>\n  </div>\n} @else {\n  <div>\n    <mat-form-field class=\"w-100\">\n      <mat-label>\n        Тип\n      </mat-label>\n      <input matInput placeholder=\"Тип\"\n             autocomplete=\"off\"\n             [(ngModel)]=\"tagData.type\"\n             (ngModelChange)=\"linkChanged()\">\n    </mat-form-field>\n\n    <mat-form-field class=\"w-100\">\n      <mat-label>\n        Текст\n      </mat-label>\n      <input matInput placeholder=\"Текст\"\n             autocomplete=\"off\"\n             [(ngModel)]=\"tagData.text\"\n             (ngModelChange)=\"linkChanged()\">\n    </mat-form-field>\n\n    <mat-form-field class=\"w-100\">\n      <mat-label>\n        Обработчик нажатия\n      </mat-label>\n      <input matInput placeholder=\"Обработчик нажатия\"\n             autocomplete=\"off\"\n             [(ngModel)]=\"tagData.click\"\n             (ngModelChange)=\"linkChanged()\">\n    </mat-form-field>\n  </div>\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { XmlTagCustomWidgetComponent } from \"../../xml-tags\";\nimport { CustomWidgetTagData, CustomWidgetTagService } from '../../../tag-services/CustomWidgetTagService';\n\n@Component({\n  selector: 'croco-html-custom-widget-editor',\n  standalone: true,\n  imports: [\n    FormsModule,\n    MatFormField,\n    MatInput,\n    MatLabel,\n    XmlTagCustomWidgetComponent,\n  ],\n  templateUrl: './custom-widget-editor.component.html'\n})\nexport class CustomWidgetEditorComponent implements OnInit {\n  @Input({ required: true })\n  tag: HtmlBodyTag;\n\n  @Input({ required: true })\n  presentOrEdit = false;\n\n  tagData: CustomWidgetTagData = {\n    type: '',\n    dataId: '',\n    widgetId: ''\n  };\n\n  ngOnInit(): void {\n    this.tagData = CustomWidgetTagService.ExtractCustomWidgetTagData(this.tag.attributes);\n  }\n\n  dataChanged() {\n    this.tag.attributes = CustomWidgetTagService.ExtractCustomWidgetAttributes(this.tagData);\n  }\n}\n","@if (presentOrEdit) {\n<div>\n  <div>\n    <b>type:</b> {{tagData.type}}\n  </div>\n  <div style=\"height: 10px;\"></div>\n  <div>\n    <b>data-id:</b> {{tagData.dataId}}\n  </div>\n  <div style=\"height: 10px;\"></div>\n  <div>\n    <b>widget-id:</b> {{tagData.widgetId}}\n  </div>\n  <div style=\"height: 10px;\"></div>\n  <croco-html-xml-tag-custom-widget [tagData]=\"tagData\"></croco-html-xml-tag-custom-widget>\n</div>\n} @else {\n<div>\n  <mat-form-field class=\"w-100\">\n    <mat-label>\n      type\n    </mat-label>\n    <input matInput placeholder=\"type\" autocomplete=\"off\" [(ngModel)]=\"tagData.type\" (ngModelChange)=\"dataChanged()\">\n  </mat-form-field>\n\n  <mat-form-field class=\"w-100\">\n    <mat-label>\n      data-id\n    </mat-label>\n    <input matInput placeholder=\"data-id\" autocomplete=\"off\" [(ngModel)]=\"tagData.dataId\"\n      (ngModelChange)=\"dataChanged()\">\n  </mat-form-field>\n\n  <mat-form-field class=\"w-100\">\n    <mat-label>\n      widget-id\n    </mat-label>\n    <input matInput placeholder=\"widget-id\" autocomplete=\"off\" [(ngModel)]=\"tagData.widgetId\"\n      (ngModelChange)=\"dataChanged()\">\n  </mat-form-field>\n</div>\n}","import { BehaviorSubject } from \"rxjs\";\nimport { HtmlBodyTag } from \"./models\";\n\nexport class TagEditorService {\n  public readonly tag$ = new BehaviorSubject<HtmlBodyTag>(null);\n  public readonly presentOrEdit$ = new BehaviorSubject<boolean>(true);\n}","import { Component, ComponentRef, Inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { HtmlBodyTag, TagEditorService } from '../../../../../models';\nimport { CrocoHtmlOptions } from '../../../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../../../consts';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Component({\n  selector: 'croco-html-defined-custom-editor-block',\n  imports: [],\n  templateUrl: './defined-custom-editor-block.component.html',\n  standalone: true\n})\nexport class DefinedCustomEditorBlockComponent implements OnInit, OnDestroy {\n\n  private unsubscribe = new Subject<void>();\n\n  @ViewChild('container', { read: ViewContainerRef, static: true })\n  viewContainerRef!: ViewContainerRef;\n\n  public useDynamicComponent = false;\n\n  public dynamicContainerRef: ComponentRef<any>;\n\n  public _tagService: TagEditorService;\n  public _tag: HtmlBodyTag;\n\n  @Input({ required: true })\n  set tagService(data: TagEditorService) {\n    this._tagService = data;\n\n    this._tagService.tag$\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe(tag => {\n        this._tag = tag;\n      });\n  }\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n  }\n\n  getCustomComponent() {\n    const tagName = this._tag.tagDescription.tag;\n\n    if (this._options.definedCustomTagViewRenderers.hasOwnProperty(tagName)) {\n      return this._options.definedCustomTagViewRenderers[tagName].editorComponent;\n    }\n\n    return null;\n  }\n\n  ngOnInit(): void {\n\n    var component = this.getCustomComponent();\n\n    if (component) {\n      this.useDynamicComponent = true;\n      this.viewContainerRef.remove();\n      this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n\n      this.dynamicContainerRef.setInput(\"tagService\", this._tagService);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.dynamicContainerRef.destroy();\n\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n}\n\n","<ng-container #container>\n    @if (!useDynamicComponent) {\n    <div>\n        Редактор разметки для {{_tag.tagDescription.tag}} не описан.\n    </div>\n    <div>\n        Установите CrocoHtmlOptions.definedCustomTagViewRenderers[{{_tag.tagDescription.tag}}].editorComponent\n    </div>\n    }\n</ng-container>","import {Component, EventEmitter, Inject, Input, OnDestroy, Output} from '@angular/core';\nimport { TextTags } from '../../../extensions/TextMethods';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatIconButton } from '@angular/material/button';\nimport { HtmlRawEditorComponent } from '../html-raw-editor/html-raw-editor.component';\nimport { DownloadFileButtonEditorComponent } from '../download-file-button-editor/download-file-button-editor.component';\nimport { ImageEditorComponent } from '../image-editor/image-editor.component';\nimport { AudioEditorComponent } from '../audio-editor/audio-editor.component';\nimport { TextEditorComponent } from '../text-editor/text-editor.component';\nimport { ExternalVideoEditorComponent } from '../external-video-editor/external-video-editor.component';\nimport { ButtonEditorComponent } from \"../button-editor/button-editor.component\";\nimport { CustomWidgetEditorComponent } from \"../custom-widget-editor/custom-widget-editor.component\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { JsonPipe } from '@angular/common';\nimport { TagEditorService } from '../../../models/editor-models';\nimport { Subject, takeUntil } from 'rxjs';\nimport {\n  DefinedCustomEditorBlockComponent\n} from \"./components/defined-custom-editor-block/defined-custom-editor-block.component\";\n\n@Component({\n  selector: 'croco-html-main-editor-block',\n  templateUrl: './main-editor-block.component.html',\n  styleUrls: ['./main-editor-block.component.css'],\n  standalone: true,\n  imports: [\n    TextEditorComponent,\n    ImageEditorComponent,\n    AudioEditorComponent,\n    DownloadFileButtonEditorComponent,\n    HtmlRawEditorComponent,\n    MatIconButton,\n    ExternalVideoEditorComponent,\n    ButtonEditorComponent,\n    CustomWidgetEditorComponent,\n    JsonPipe,\n    DefinedCustomEditorBlockComponent,\n  ]\n})\nexport class MainEditorBlockComponent implements OnDestroy {\n\n  textTags = TextTags.allTextTags;\n\n  private unsubscribe = new Subject<void>();\n\n  @Input({ required: true })\n  set tag(data: HtmlBodyTag) {\n    this._tag = data;\n    this._tagService = new TagEditorService();\n\n    this._tagService.tag$.next(this._tag);\n    this._tagService.presentOrEdit$\n      .pipe(takeUntil(this.unsubscribe))\n      .subscribe(val => {\n        this.presentOrEdit = val;\n      });\n  }\n\n  public _tag: HtmlBodyTag;\n  public _tagService: TagEditorService;\n\n  public presentOrEdit = true;\n\n  @Output()\n  onTagSaved = new EventEmitter<HtmlBodyTag>();\n\n  @Output()\n  onTagRemoved = new EventEmitter<HtmlBodyTag>();\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n  }\n\n  save() {\n    const tag = this._tagService.tag$.value;\n\n    this.onTagSaved.emit(tag);\n    this._tagService.presentOrEdit$.next(true);\n  }\n\n  cancelSave() {\n    this._tagService.presentOrEdit$.next(false);\n  }\n\n  isDefinedCustomTag() {\n\n    const tagName = this._tag.tagDescription.tag;\n\n    if (this._options.definedCustomTags.hasOwnProperty(tagName)) {\n      return true;\n    }\n\n    return false;\n  }\n\n  deleteItem() {\n    this.onTagRemoved.emit(this.tag);\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n}\n","<div class=\"main-editor-block\">\n  <div class=\"editor-container\">\n    @if (textTags.includes(_tag.tagDescription.tag)) {\n    <div>\n      <croco-html-text-editor [tagService]=\"_tagService\">\n      </croco-html-text-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'file-image') {\n    <div>\n      <croco-html-image-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-image-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'audio-player') {\n    <div>\n      <croco-html-audio-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-audio-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'custom-widget') {\n    <div>\n      <croco-html-custom-widget-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-custom-widget-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'external-video') {\n    <div>\n      <croco-html-external-video-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-external-video-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'download-file-button') {\n    <div>\n      <croco-html-download-file-button-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-download-file-button-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'button') {\n    <div>\n      <croco-html-button-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-button-editor>\n    </div>\n    }\n    @else if (_tag.tagDescription.tag === 'html-raw') {\n    <div>\n      <croco-html-html-raw-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n      </croco-html-html-raw-editor>\n    </div>\n    }\n    @else if (isDefinedCustomTag()) {\n    <div>\n      <croco-html-defined-custom-editor-block [tagService]=\"_tagService\"></croco-html-defined-custom-editor-block>\n    </div>\n    }\n    @else {\n    <div>\n      {{_tag.tagDescription.tag}} не показан\n    </div>\n    <div>\n      {{_tag | json}}\n    </div>\n    }\n\n  </div>\n\n  <div class=\"d-flex justify-content-between\">\n    <div class=\"d-flex justify-content-end align-self-center\">\n      <div style=\"margin-left: 16px;min-width: 96px\">\n        @if (presentOrEdit) {\n        <button (click)=\"cancelSave()\" mat-icon-button>\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n              d=\"M14.4374 0C15.0921 0 15.7197 0.261421 16.1781 0.723424L19.279 3.82432C19.7407 4.286 20.0001 4.91217 20.0001 5.56508C20.0001 6.21799 19.7407 6.84416 19.279 7.30584L7.95751 18.6238C7.25903 19.4295 6.2689 19.9245 5.1346 20.0023H0V19.0023L0.00324754 14.7873C0.0884381 13.7328 0.578667 12.7523 1.3265 12.0934L12.6954 0.72463C13.1564 0.260831 13.7834 0 14.4374 0ZM5.06401 18.0048C5.59823 17.967 6.09551 17.7184 6.49482 17.2616L14.0567 9.69971L10.3024 5.94518L2.69613 13.5496C2.29098 13.9079 2.04034 14.4092 2.00003 14.8678V18.0029L5.06401 18.0048ZM11.7167 4.53114L15.471 8.28549L17.8648 5.89162C17.9514 5.80502 18.0001 5.68756 18.0001 5.56508C18.0001 5.4426 17.9514 5.32514 17.8648 5.23854L14.7612 2.13486C14.6755 2.04855 14.559 2 14.4374 2C14.3158 2 14.1992 2.04855 14.1136 2.13486L11.7167 4.53114Z\"\n              fill=\"#323E8B\" />\n          </svg>\n        </button>\n        }\n        @else {\n        <button (click)=\"save()\" mat-icon-button>\n          <svg width=\"800px\" height=\"800px\" viewBox=\"0 0 24 24\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\n            aria-labelledby=\"saveIconTitle\" stroke=\"#000000\" stroke-width=\"1\" stroke-linecap=\"square\"\n            stroke-linejoin=\"miter\" fill=\"none\" color=\"#000000\">\n            <title id=\"saveIconTitle\">Save</title>\n            <path\n              d=\"M17.2928932,3.29289322 L21,7 L21,20 C21,20.5522847 20.5522847,21 20,21 L4,21 C3.44771525,21 3,20.5522847 3,20 L3,4 C3,3.44771525 3.44771525,3 4,3 L16.5857864,3 C16.8510029,3 17.1053568,3.10535684 17.2928932,3.29289322 Z\" />\n            <rect width=\"10\" height=\"8\" x=\"7\" y=\"13\" />\n            <rect width=\"8\" height=\"5\" x=\"8\" y=\"3\" />\n          </svg>\n        </button>\n        }\n        <button (click)=\"deleteItem()\" mat-icon-button color=\"warn\">\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n              d=\"M7.49988 0.833332H12.4999C13.4204 0.833332 14.1665 1.57952 14.1665 2.5V3.33333H16.6665C17.587 3.33333 18.3332 4.07952 18.3332 4.99999V6.66666C18.3332 7.58714 17.587 8.33333 16.6665 8.33333H16.5998L15.8332 17.5C15.8332 18.4205 15.087 19.1667 14.1665 19.1667H5.8332C4.91272 19.1667 4.16653 18.4205 4.16941 17.5692L3.39975 8.33333H3.33317C2.4127 8.33333 1.6665 7.58714 1.6665 6.66666V4.99999C1.6665 4.07952 2.4127 3.33333 3.33317 3.33333H5.83321V2.5C5.83321 1.57952 6.5794 0.833332 7.49988 0.833332ZM5.83321 5V4.99999H3.33317V6.66666H16.6665V4.99999L14.1665 5H5.83321ZM5.83324 17.5L5.07198 8.33333H14.9276L14.1695 17.4308L14.1666 17.5H5.83324ZM12.4999 2.5V3.33334H7.49992V2.5H12.4999Z\"\n              fill=\"#F96666\" />\n          </svg>\n        </button>\n      </div>\n    </div>\n\n  </div>\n</div>\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { SpriteIdsType } from \"../../sprites-ids.type\";\n\n@Pipe({\n  name: 'spriteIconPath',\n  standalone: true,\n})\nexport class SpriteIconPathPipe implements PipeTransform {\n  transform(id: SpriteIdsType): string {\n    return `assets/lib-sprites/symbol/croco-html-svg-sprite.svg#${id}`;\n  }\n}\n","import { Component, ComponentRef, Inject, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { CrocoHtmlOptions } from '../../../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../../../consts';\n\n@Component({\n  selector: 'croco-html-custom-widget-icon',\n  imports: [],\n  templateUrl: './custom-widget-icon.component.html',\n  standalone: true\n})\nexport class CustomWidgetIconComponent implements OnInit {\n\n  @ViewChild('container', { read: ViewContainerRef, static: true })\n  viewContainerRef!: ViewContainerRef;\n\n  public useDynamicComponent = false;\n\n  public dynamicContainerRef: ComponentRef<any>;\n\n  @Input({ required: true })\n  set tagName(tagName: string) {\n    this._tagName = tagName;\n    this._shortTagName = tagName.substring(0, 2);\n  }\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n  }\n\n  getIconComponent() {\n    if (this._options.definedCustomTagViewRenderers.hasOwnProperty(this._tagName)) {\n      return this._options.definedCustomTagViewRenderers[this._tagName].iconComponent;\n    }\n\n    return null;\n  }\n\n  _tagName: string = \"\";\n  _shortTagName: string = \"\";\n\n  ngOnInit(): void {\n\n    var component = this.getIconComponent();\n\n    if (component) {\n      this.useDynamicComponent = true;\n      this.viewContainerRef.remove();\n      this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n    }\n  }\n}\n","<ng-container #container>\n    @if (!useDynamicComponent) {\n    <span>\n        {{_shortTagName}}\n    </span>\n    }\n</ng-container>","import { CdkDragDrop, moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component, ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {\n  BodyTagsExtensions, ExternalVideoPlayers,\n  ExternalVideoSupportedTypes,\n} from '../../../extensions';\nimport {\n  ExternalVideoTagDataConsts,\n} from '../../../extensions';\nimport { XmlExtensions } from '../../../extensions';\nimport { TagItem, HtmlBodyTag } from '../../../models/models';\nimport { DefaultTags } from './DefaultTags';\nimport { AlignmentsData } from \"./DefaultAligments\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MainEditorBlockComponent } from '../main-editor-block/main-editor-block.component';\nimport { AddFilesBtnComponent } from '../../add-files-btn/add-files-btn.component';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatIcon } from '@angular/material/icon';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { SpriteIconPathPipe } from \"../../../pipes/sprite-icon-path.pipe\";\nimport { SpriteIdsType } from \"../../../../sprites-ids.type\";\nimport { HtmlRawTagDataConsts, TextAlignment, TextTagDataConsts } from '../../../tag-services';\nimport { CustomWidgetIconComponent } from \"./components/custom-widget-icon/custom-widget-icon.component\";\nimport { FileImageTagDataConsts } from '../../../extensions';\nimport { UploadFilesBtnComponent } from '../../upload-files-btn/upload-files-btn.component';\n\n@Component({\n  selector: 'croco-visual-editor',\n  templateUrl: './visual-editor.component.html',\n  styleUrls: ['./visual-editor.component.scss'],\n  standalone: true,\n  imports: [\n    MatProgressSpinner,\n    MatCard,\n    MatCardContent,\n    MatButton,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    CdkTextareaAutosize,\n    FormsModule,\n    MatSelect,\n    MatOption,\n    AddFilesBtnComponent,\n    CdkDropList,\n    CdkDrag,\n    CdkDragHandle,\n    MainEditorBlockComponent,\n    MatButtonToggleGroup,\n    MatButtonToggle,\n    NgTemplateOutlet,\n    MatTooltip,\n    SpriteIconPathPipe,\n    CustomWidgetIconComponent,\n    MatIcon,\n    UploadFilesBtnComponent\n  ]\n})\nexport class VisualEditorComponent implements OnInit, AfterViewInit {\n  @ViewChild('textArea') textArea: ElementRef;\n  @ViewChild('imageUploadBtn') imageUploadBtn: UploadFilesBtnComponent;\n\n  isLoading = false;\n  loadingText = \"Идёт загрузка\";\n  text = '';\n  htmlRaw = '';\n\n  alignment = TextAlignment.Left;\n  textTag = DefaultTags.textTags[0].tag;\n  textTagOptions = DefaultTags.textTags\n  alignmentOptions = AlignmentsData\n  isTagAdditionStarted = false\n\n  @Input()\n  showMarkUp = true;\n\n  tags: TagItem[] = [];\n  videoPlayers = ExternalVideoPlayers\n  selectedValue: string = null;\n  selectedVideoPlayer: string;\n  imageMode: 'select' | 'upload' | null = null;\n\n  protected readonly ExternalVideoTagDataConsts = ExternalVideoTagDataConsts;\n  protected readonly HtmlRawTagDataConsts = HtmlRawTagDataConsts;\n  protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n  protected readonly FileImageTagDataConsts = FileImageTagDataConsts;\n\n  @Input()\n  useHtmlRaw = true;\n\n  @Input()\n  @Output()\n  html: string = \"\";\n\n  isHtmlSet() {\n    return this.html.startsWith(\"<body>\");\n  }\n\n  clearHtml() {\n    this.html = \"\";\n    this.recalculateBodyTags();\n  }\n\n  getHtml() {\n    this.recalculateHtml();\n    return this.html;\n  }\n\n  @Output()\n  onHtmlChanged = new EventEmitter<string>();\n\n  @Output()\n  rendered = new EventEmitter<boolean>();\n\n  bodyTags: HtmlBodyTag[] = [];\n  saveBodyTags: HtmlBodyTag[] = [];\n\n  useCustomWidgetsButton = false;\n\n  constructor(\n    private readonly _cdref: ChangeDetectorRef,\n    @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n    this.useCustomWidgetsButton = this._options.useCustomWidgetsButton;\n  }\n\n  ngAfterViewInit(): void {\n    this.rendered.emit(true);\n  }\n\n  resetTextStyle(): void {\n    this.text = '';\n    this.alignment = TextAlignment.Left;\n    this.textTag = DefaultTags.textTags[0].tag;\n  }\n\n  drop(event: CdkDragDrop<HtmlBodyTag[]>) {\n    moveItemInArray(this.bodyTags, event.previousIndex, event.currentIndex);\n    this.recalculateHtml();\n  }\n\n  addTag(tag: HtmlBodyTag) {\n    this.bodyTags.push(tag);\n    this.recalculateHtml();\n  }\n\n  onTagChangedHandler(data: HtmlBodyTag, index: number) {\n    this.bodyTags[index] = data;\n    this.recalculateHtml();\n  }\n\n  onTagRemovedHandler(index: number) {\n    this.bodyTags.splice(index, 1);\n    this.saveBodyTags = [...this.bodyTags];\n    this.recalculateHtml();\n  }\n\n  recalculateHtml() {\n    let result = BodyTagsExtensions.bodyTagsToHtml(this.bodyTags, this._options);\n    this.html = XmlExtensions.formatXml(\"<body>\" + result + \"</body>\");\n    this.onHtmlChanged.emit(this.html);\n  }\n\n  recalculateBodyTags() {\n    this.bodyTags = BodyTagsExtensions.getBodyTags(this.html, this._options);\n    this.saveBodyTags = [...this.bodyTags];\n  }\n\n  selectTag(data: TagItem) {\n    this.htmlRaw = '';\n    this.selectedValue = data.tag;\n    this.imageMode = null;\n\n    if (this.isTagRequiringForm()) {\n      if (data.tag === 'text') {\n        this.resetTextStyle();\n      } else if (data.tag === ExternalVideoTagDataConsts.TagName) {\n        this.selectedVideoPlayer = this.videoPlayers[0].type;\n      } else if (data.tag === FileImageTagDataConsts.TagName) {\n        return;\n      }\n      return;\n    }\n\n    this.addRegularTag();\n  }\n\n  isTagRequiringForm(): boolean {\n    return this.selectedValue === 'text' ||\n           this.selectedValue === ExternalVideoTagDataConsts.TagName ||\n           this.selectedValue === HtmlRawTagDataConsts.TagName ||\n           this.selectedValue === FileImageTagDataConsts.TagName;\n  }\n\n  addTagWithForm(): void {\n    if (!this.selectedValue) {\n      return;\n    }\n\n    if (this.selectedValue === 'text') {\n      this.addTextTag();\n    } else if (this.selectedValue === ExternalVideoTagDataConsts.TagName) {\n      this.addExternalVideoTag();\n    } else if (this.selectedValue === HtmlRawTagDataConsts.TagName) {\n      this.addHtmlRawTag();\n    } else if (this.selectedValue === FileImageTagDataConsts.TagName) {\n      if (this.imageMode === 'select') {\n        this.selectExistingImage();\n      } else if (this.imageMode === 'upload') {\n        return;\n      }\n    }\n\n    this.resetTagForm();\n  }\n\n  selectExistingImage(): void {\n    const tagName = FileImageTagDataConsts.TagName;\n\n    if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n      const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n      let tag = tagService.getDefaultValue({\n        htmlRaw: '',\n        selectedVideoPlayer: null\n      });\n\n      this.bodyTags.push(tag);\n      this.recalculateHtml();\n      this.resetTagForm();\n    }\n  }\n\n  uploadNewImages(): void {\n    if (this.imageUploadBtn) {\n      this.imageUploadBtn.clickFileInput();\n    }\n  }\n\n  onImageFilesUploaded(fileIds: string[] | number[]): void {\n    if (fileIds && fileIds.length > 0) {\n      const fileIdsString = fileIds.map(id => typeof id === 'number' ? id.toString() : id);\n\n      fileIdsString.forEach(fileId => {\n        const tag: HtmlBodyTag = {\n          tagDescription: {\n            tag: FileImageTagDataConsts.TagName,\n            displayValue: \"Изображение\",\n            isCustom: false\n          },\n          attributes: {\n            [FileImageTagDataConsts.FileIdAttrName]: fileId,\n            [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n          },\n          innerHtml: \"\"\n        };\n\n        this.bodyTags.push(tag);\n      });\n\n      this.recalculateHtml();\n      this.resetTagForm();\n    }\n  }\n\n  addTextTag(): void {\n    if (!this.text || this.text.trim().length === 0) {\n      return;\n    }\n\n    let lines = this.text.split('\\n');\n    let tagDescription = this.textTagOptions?.find(x => x.tag === this.textTag);\n\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i];\n      if (line.length > 0) {\n        this.bodyTags.push({\n          tagDescription,\n          innerHtml: line,\n          attributes: {\n            [TextTagDataConsts.HAlign]: `${this.alignment}`\n          }\n        });\n      }\n    }\n\n    this.recalculateHtml();\n  }\n\n  addExternalVideoTag(): void {\n    const tagName = ExternalVideoTagDataConsts.TagName;\n\n    if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n      const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n      let tag = tagService.getDefaultValue({\n        htmlRaw: this.htmlRaw,\n        selectedVideoPlayer: this.selectedVideoPlayer\n      });\n\n      this.bodyTags.push(tag);\n      this.recalculateHtml();\n    }\n  }\n\n  addHtmlRawTag(): void {\n    const tagName = HtmlRawTagDataConsts.TagName;\n\n    if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n      const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n      let tag = tagService.getDefaultValue({\n        htmlRaw: this.htmlRaw,\n        selectedVideoPlayer: null\n      });\n\n      this.bodyTags.push(tag);\n      this.recalculateHtml();\n    }\n  }\n\n  resetTagForm(): void {\n    this.selectedValue = null;\n    this.htmlRaw = '';\n    this.text = '';\n    this.imageMode = null;\n    this.resetTextStyle();\n    this.isTagAdditionStarted = false;\n  }\n\n  addRegularTag(): void {\n    if (!this.selectedValue) {\n      return;\n    }\n\n    const tagName = this.selectedValue;\n\n    if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n      const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n      let tag = tagService.getDefaultValue({\n        htmlRaw: '',\n        selectedVideoPlayer: null\n      });\n\n      this.bodyTags.push(tag);\n      this.recalculateHtml();\n      this.resetTagForm();\n    } else {\n      alert(`Сервис для тега ${tagName} не зарегистрирован.`);\n    }\n  }\n\n  isDefinedCustomWidget(tagName: string): boolean {\n    if (this._options.definedCustomTags.hasOwnProperty(tagName)) {\n      return true;\n    }\n\n    return false;\n  }\n\n  customWidgetsClickHandler() {\n    this._options.customWidgetClickHandler(this);\n  }\n\n  ngOnInit(): void {\n    this.recalculateBodyTags();\n\n    this.tags = DefaultTags.getTags();\n    this.selectedVideoPlayer = this.videoPlayers[0].type;\n  }\n\n  setTagButton(tagName: string): SpriteIdsType {\n    return `tag-button-${tagName}` as SpriteIdsType\n  }\n\n  setAlignButton(type: string): SpriteIdsType {\n    return `align-${type}` as SpriteIdsType\n  }\n}\n","@if (isLoading) {\n  <div>\n    <div>\n      <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n      <div style=\"text-align: center;\">{{loadingText}}</div>\n    </div>\n    <div style=\"height: 10px;\"></div>\n  </div>\n}\n<div [hidden]=\"isLoading\">\n  <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n    @for (tag of bodyTags; track tag; let i = $index) {\n      <div cdkDrag>\n        <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n          <mat-card-content>\n            <div class=\"d-flex justify-content-between\">\n              <div class=\"example-handle\" cdkDragHandle>\n                <svg width=\"24\" height=\"24\" class=\"move-icon\">\n                  <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n                </svg>\n              </div>\n              <div>\n                <div class=\"badge\" [matTooltip]=\"tag.tagDescription.displayValue\">\n                  <span class=\"text-align-icon\">\n                    <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n                                  [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n                  </ng-container>\n                  </span>\n                </div>\n              </div>\n            </div>\n            <div style=\"height: 15px;\"></div>\n            <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagChangedHandler($event, i)\"\n              (onTagRemoved)=\"onTagRemovedHandler(i)\">\n            </croco-html-main-editor-block>\n          </mat-card-content>\n        </mat-card>\n      </div>\n    }\n  </div>\n</div>\n<div style=\"height: 10px;\"></div>\n<div [hidden]=\"isLoading\">\n  @if (!isTagAdditionStarted) {\n    <div class=\"col-12\">\n      <div class=\"tag-item add-tag-button\" (click)=\"isTagAdditionStarted = true\">\n        <div class=\"tag-icon\">\n          <mat-icon>add</mat-icon>\n        </div>\n        <div class=\"tag-text\">Добавить тег</div>\n      </div>\n    </div>\n  }\n  @else {\n  <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n    <mat-card-content>\n        <div class=\"row d-flex align-items-center\">\n          <div class=\"col-12\">\n            <div class=\"w-100\">\n              <div class=\"tags\">\n                @for (tag of tags; track tag.displayValue) {\n                  <div class=\"tag-item\"\n                       (click)=\"selectTag(tag)\"\n                       [class.active]=\"selectedValue === tag.tag\"\n                  >\n                    <div class=\"tag-icon\">\n                      <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n                                    [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n                      </ng-container>\n                    </div>\n                    <div class=\"tag-text\">{{tag.displayValue}}</div>\n                  </div>\n                }\n\n                @if (useCustomWidgetsButton) {\n                  <div class=\"tag-item\"\n                       (click)=\"customWidgetsClickHandler()\"\n                  >\n                    <div class=\"tag-icon\">\n                      <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n                                    [ngTemplateOutletContext]=\"{icon: 'custom-widget'}\">\n                      </ng-container>\n                    </div>\n                    <div class=\"tag-text\">Другие виджеты</div>\n                  </div>\n                }\n              </div>\n            </div>\n          </div>\n          @if (selectedValue === FileImageTagDataConsts.TagName && imageMode === null) {\n            <div class=\"col-12\">\n              <div class=\"image-mode-selection\">\n                <button (click)=\"imageMode = 'select'; selectExistingImage()\" class=\"w-100 image-mode-btn\" mat-stroked-button>\n                  <mat-icon>search</mat-icon>\n                  <span>Выбрать из уже загруженных файлов</span>\n                </button>\n                <button (click)=\"uploadNewImages()\" class=\"w-100 image-mode-btn\" mat-stroked-button>\n                  <mat-icon>upload</mat-icon>\n                  <span>Загрузить новые изображения</span>\n                </button>\n              </div>\n            </div>\n          }\n          <croco-app-upload-files-btn\n            #imageUploadBtn\n            [hidden]=\"true\"\n            extAccepts=\"image/*\"\n            [isMultiple]=\"true\"\n            btnText=\"Загрузить изображения\"\n            (onPublicFilesUploaded)=\"onImageFilesUploaded($event.fileIds)\"\n            (onPrivateFilesUploaded)=\"onImageFilesUploaded($event.fileIds)\">\n          </croco-app-upload-files-btn>\n          @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n            <div class=\"col-12\">\n              <mat-form-field class=\"w-100\" appearance=\"outline\">\n                <mat-label>Выберите видеоплеер</mat-label>\n                <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n                  @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n                    <mat-option [value]=\"videoPlayer.type\">\n                      {{videoPlayer.displayValue}}\n                    </mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n            </div>\n            @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n              <div class=\"col-12\">\n                <mat-form-field class=\"w-100\" appearance=\"outline\">\n                  <mat-label>Разметка</mat-label>\n                  <input\n                    matInput\n                    placeholder=\"Разметка\"\n                    [(ngModel)]=\"htmlRaw\"\n                  >\n                </mat-form-field>\n              </div>\n            }\n            <div class=\"col-12\">\n              <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n                Добавить видео\n              </button>\n            </div>\n          }\n          @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n            <div class=\"col-12\">\n              <mat-form-field class=\"w-100\">\n                <mat-label>Разметка</mat-label>\n                <textarea\n                  #autosize=\"cdkTextareaAutosize\"\n                  matInput\n                  cdkTextareaAutosize\n                  cdkAutosizeMinRows=\"1\"\n                  cdkAutosizeMaxRows=\"5\"\n                  placeholder=\"Разметка\"\n                  #textArea\n                  [(ngModel)]=\"htmlRaw\"\n                ></textarea>\n              </mat-form-field>\n            </div>\n            <div class=\"col-12\">\n              <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n                Добавить разметку\n              </button>\n            </div>\n          }\n          @if (selectedValue === 'text') {\n            <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n              <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n                <mat-button-toggle-group\n                  [(ngModel)]=\"textTag\"\n                  [hideSingleSelectionIndicator]=\"true\"\n                >\n                  @for (option of textTagOptions; track option) {\n                    <mat-button-toggle value=\"{{ option.tag }}\">\n                      {{ option.displayValue }}\n                    </mat-button-toggle>\n                  }\n                </mat-button-toggle-group>\n              </div>\n\n              <div style=\"margin-bottom: 22px\">\n                <mat-button-toggle-group\n                  [(ngModel)]=\"alignment\"\n                  [hideSingleSelectionIndicator]=\"true\"\n                >\n                  @for (option of alignmentOptions; track option) {\n                    <mat-button-toggle value=\"{{ option.value }}\">\n                    <span class=\"text-align-icon\">\n                      <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n                                    [ngTemplateOutletContext]=\"{icon: option.value}\">\n                      </ng-container>\n                    </span>\n                    </mat-button-toggle>\n                  }\n                </mat-button-toggle-group>\n              </div>\n            </div>\n            <mat-form-field class=\"w-100\">\n              <mat-label>Текст</mat-label>\n              <textarea\n                #autosize=\"cdkTextareaAutosize\"\n                matInput\n                cdkTextareaAutosize\n                cdkAutosizeMinRows=\"1\"\n                cdkAutosizeMaxRows=\"5\"\n                placeholder=\"Текст\"\n                #textArea\n                [(ngModel)]=\"text\"\n              ></textarea>\n            </mat-form-field>\n            <div class=\"col-12\">\n              <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n                Добавить текст\n              </button>\n            </div>\n          }\n        </div>\n\n    </mat-card-content>\n  </mat-card>\n  }\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n  <svg width=\"20\" height=\"20\">\n    <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n  </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n  @if (isDefinedCustomWidget(icon)) {\n    <croco-html-custom-widget-icon [tagName]=\"icon\"></croco-html-custom-widget-icon>\n  }\n  @else if (icon.indexOf('h') === 0 && icon.length === 2) {\n    {{icon.toUpperCase()}}\n  }\n  @else {\n    <svg width=\"20\" height=\"20\">\n      <use [attr.xlink:href]=\"setTagButton(icon) | spriteIconPath\"></use>\n    </svg>\n  }\n</ng-template>\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { HtmlExtractionMethods } from '../extensions/HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n    name: 'topreview',\n    standalone: true\n})\nexport class ToPreviewPipe implements PipeTransform {\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n  }\n\n  transform(value: string): InterfaceBlock[] {\n    return HtmlExtractionMethods.transformHtmlStringToBlocks(value, this._options);\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { ToPreviewPipe } from '../../pipes/to-preview.pipe';\nimport { XmlTagViewComponent } from '../xml-tags/xml-tag-view/xml-tag-view.component';\nimport { HtmlPageDataController } from '../../services';\n\n@Component({\n  selector: 'croco-html-view',\n  templateUrl: './html-view.component.html',\n  standalone: true,\n  imports: [XmlTagViewComponent, ToPreviewPipe]\n})\nexport class HtmlViewComponent {\n\n  @Input({ required: true })\n  html: string = \"<body></body>\";\n\n  @Input({ required: false })\n  isEditor = false\n\n  @Input({ required: false })\n  dataController: HtmlPageDataController = new HtmlPageDataController();\n}\n","<croco-html-xml-tag-view\n  [data]=\"html | topreview\"\n  [dataController]=\"dataController\"\n  [isEditor]=\"isEditor\"\n></croco-html-xml-tag-view>\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatFormField, MatInput, MatLabel } from \"@angular/material/input\";\nimport { MatCheckbox } from \"@angular/material/checkbox\";\nimport { MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatButton } from \"@angular/material/button\";\nimport { CrocoHtmlFileOptionsService } from \"../../../services/CrocoHtmlFileOptionsService\";\n\n@Component({\n  selector: 'croco-html-html-editor-settings-modal',\n  standalone: true,\n  imports: [\n    MatInput,\n    MatCheckbox,\n    ReactiveFormsModule,\n    MatFormField,\n    MatLabel,\n    MatDialogTitle,\n    MatDialogContent,\n    MatDialogActions,\n    MatButton\n  ],\n  templateUrl: './html-editor-settings-modal.component.html',\n  styleUrl: './html-editor-settings-modal.component.scss'\n})\nexport class HtmlEditorSettingsModalComponent implements OnInit {\n  public form: FormGroup;\n\n  constructor(\n    private readonly fb: FormBuilder,\n    public readonly dialogRef: MatDialogRef<HtmlEditorSettingsModalComponent>,\n    private readonly _htmlSettingsService: CrocoHtmlFileOptionsService\n  ) {\n    this.form = this.fb.group({\n      usePrivateFiles: false,\n      applicationId: ''\n    });\n  }\n\n  ngOnInit() {\n    this.form.patchValue(this._htmlSettingsService.get())\n  }\n\n  cancel(): void {\n    this.dialogRef.close();\n  }\n\n  setSettings(): void {\n    this.dialogRef.close(this.form.getRawValue());\n  }\n}\n","<div mat-dialog-title>Настройки редактора</div>\n<div mat-dialog-content class=\"editor-settings\" [formGroup]=\"form\">\n  <mat-form-field style=\"margin-top: 20px\">\n    <mat-label>\n      Идентификатор приложения\n    </mat-label>\n    <input matInput formControlName=\"applicationId\">\n  </mat-form-field>\n\n  <div>\n    <mat-label>\n      Использовать приватные файлы\n    </mat-label>\n    <mat-checkbox\n      formControlName=\"usePrivateFiles\">\n    </mat-checkbox>\n  </div>\n\n</div>\n<div mat-dialog-actions style=\"display: flex; justify-content: flex-end\">\n  <button mat-raised-button color=\"warn\" (click)=\"cancel()\" >Отмена</button>\n  <button mat-raised-button color=\"primary\" (click)=\"setSettings()\">Сохранить</button>\n</div>\n","import {\n  AfterContentChecked,\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ClipboardService } from 'ngx-clipboard';\nimport { VisualEditorComponent } from '../visual-editor/visual-editor.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButton } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { HtmlViewComponent } from \"../../html-view/html-view.component\";\nimport { SpriteIconPathPipe } from \"../../../pipes/sprite-icon-path.pipe\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { HtmlEditorSettingsModalComponent } from \"../html-editor-settings-modal/html-editor-settings-modal.component\";\nimport { CrocoHtmlEditorFileOptions, CrocoHtmlOptions } from \"../../../options\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { CrocoHtmlFileOptionsService } from \"../../../services/CrocoHtmlFileOptionsService\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\n\n@Component({\n  selector: 'croco-html-main-editor',\n  templateUrl: './main-editor.component.html',\n  styleUrls: ['./main-editor.component.scss'],\n  standalone: true,\n  imports: [\n    MatTabsModule,\n    VisualEditorComponent,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    CdkTextareaAutosize,\n    FormsModule,\n    MatButton,\n    MatCardModule,\n    HtmlViewComponent,\n    SpriteIconPathPipe,\n    MatIcon\n  ]\n})\nexport class MainEditorComponent implements OnInit, AfterContentChecked, AfterViewInit {\n\n  visualEditorRendered = false;\n\n  @ViewChild(\"visualEditor\", { static: true })\n  visualEditor: VisualEditorComponent;\n\n  @Input()\n  showMarkUp = true;\n\n  @Input()\n  useHtmlRaw = false;\n\n  @Input()\n  @Output()\n  html: string = \"\";\n\n  @Output()\n  onHtmlChanged = new EventEmitter<string>();\n\n  showSettingsButton = false;\n\n  constructor(private readonly _clipboardService: ClipboardService,\n    private readonly _snackBar: MatSnackBar,\n    private readonly _cdref: ChangeDetectorRef,\n    private readonly _dialog: MatDialog,\n    private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n    @Inject(CrocoHtmlOptionsToken) options: CrocoHtmlOptions) {\n    this.showSettingsButton = options.showSettingsButton;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if(changes['html'].currentValue !== changes['html'].previousValue) {\n      this.recalculateBodyTags();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.recalculateBodyTags();\n  }\n\n  ngAfterContentChecked(): void {\n    this._cdref.detectChanges();\n  }\n\n  visualEditorRenderedHandler() {\n    this.visualEditorRendered = true;\n    this.recalculateBodyTags();\n  }\n\n  onHtmlChangedHandler(html: string) {\n    this.html = html;\n    this.onHtmlChanged.emit(html);\n  }\n\n  textAreaModelChangedHandler() {\n    this.recalculateBodyTags();\n    this.onHtmlChangedHandler(this.html);\n  }\n\n  recalculateBodyTags() {\n    this.visualEditor.html = this.html;\n    this.visualEditor.recalculateBodyTags();\n    this._cdref.markForCheck();\n  }\n\n  copyMarkUp() {\n    this._snackBar.open(\"Разметка скопирована в буфер обмена\", \"Закрыть\", { duration: 1500 });\n    this._clipboardService.copy(this.html);\n  }\n\n  ngOnInit(): void {\n    this.visualEditor.recalculateBodyTags();\n  }\n\n  openSettingsModal(): void {\n    this._dialog\n      .open(HtmlEditorSettingsModalComponent,\n        {\n          height: '300px',\n        })\n      .afterClosed()\n      .subscribe((data: CrocoHtmlEditorFileOptions) => {\n        if (!data) {\n          return;\n        }\n\n        this._htmlSettingsService.set({\n          usePrivateFiles: data.usePrivateFiles,\n          applicationId: data.applicationId === '' ? null : data.applicationId,\n        })\n      })\n  }\n}\n","<mat-tab-group mat-stretch-tabs=\"false\" mat-align-tabs=\"start\" style=\"position: relative\">\n  <mat-tab>\n    <ng-template mat-tab-label>\n      <svg class=\"custom-icon\" width=\"32\" height=\"26\">\n        <use [attr.xlink:href]=\"'visual-editor-tab' | spriteIconPath\"></use>\n      </svg>\n    </ng-template>\n\n    <div style=\"height: 20px;\"></div>\n\n    <croco-visual-editor #visualEditor [useHtmlRaw]=\"true\" [html]=\"html\" (onHtmlChanged)=\"onHtmlChangedHandler($event)\"\n      (rendered)=\"visualEditorRenderedHandler()\">\n    </croco-visual-editor>\n  </mat-tab>\n\n  <mat-tab>\n    <ng-template mat-tab-label>\n      <svg class=\"custom-icon\" width=\"32\" height=\"26\">\n        <use [attr.xlink:href]=\"'source-code-tab' | spriteIconPath\"></use>\n      </svg>\n    </ng-template>\n\n    <div style=\"height: 10px;\"></div>\n    @if (visualEditorRendered) {\n    <div>\n      <mat-form-field class=\"w-100\">\n        <mat-label>Исходный код</mat-label>\n        <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\n          placeholder=\"Исходный код\" [(ngModel)]=\"html\" (ngModelChange)=\"textAreaModelChangedHandler()\"></textarea>\n      </mat-form-field>\n    </div>\n    }\n\n    <button (click)=\"copyMarkUp()\" mat-raised-button color=\"primary\">\n      Копировать разметку\n    </button>\n  </mat-tab>\n  <mat-tab>\n    <ng-template mat-tab-label>\n      <svg class=\"custom-icon\" width=\"32\" height=\"30\">\n        <use [attr.xlink:href]=\"'viewer-tab' | spriteIconPath\"></use>\n      </svg>\n    </ng-template>\n\n\n    <mat-card style=\"padding: 2px;\" class=\"mat-card\">\n      <mat-card-content>\n        <croco-html-view [html]=\"html\" [isEditor]=\"true\">\n        </croco-html-view>\n      </mat-card-content>\n    </mat-card>\n  </mat-tab>\n</mat-tab-group>\n\n<div [hidden]=\"!showSettingsButton\">\n  <mat-icon class=\"settings\" (click)=\"openSettingsModal()\">settings</mat-icon>\n</div>\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n    name: 'tagToSpan',\n    standalone: true\n})\nexport class TagToSpanPipe implements PipeTransform {\n    transform(value: string[]): string {\n        return value.map(x => (`<b>${x}</b>`)).join(' | ')\n    }\n}","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { BodyTagsExtensions } from '../extensions/BodyTagsExtensions';\nimport { HtmlBodyTag } from '../models/models';\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n    name: 'tohtmlbodytags',\n    standalone: true\n})\nexport class ToHtmlBodyTagsPipe implements PipeTransform {\n\n    constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n    }\n\n    transform(value: string): HtmlBodyTag[] {\n        return BodyTagsExtensions.getBodyTags(value, this._options);\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { HtmlExtractionMethods } from '../extensions/HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n    name: 'topreviewhtml',\n    standalone: true\n})\nexport class ToPreviewHtmlPipe implements PipeTransform {\n\n  constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n  }\n\n  transform(value: string): InterfaceBlock[] {\n    return HtmlExtractionMethods.transformHtmlStringToBlocks(value, this._options);\n  }\n}\n","import { CustomWidgetIconComponent, DefinedCustomEditorBlockComponent, DefinedCustomTagViewComponent, ImageEditorComponent } from \"./components\";\nimport { MainEditorBlockComponent } from \"./components\";\nimport { MainEditorComponent } from \"./components\";\nimport { TextEditorComponent } from \"./components\";\nimport { FileIdSelectComponent } from \"./components\";\nimport { XmlTagHeaderInnerTextViewComponent } from \"./components\";\nimport { XmlTagHeaderTextViewComponent } from \"./components\";\nimport { XmlTagHtmlViewComponent } from \"./components\";\nimport { XmlTagTextViewComponent } from \"./components\";\nimport { XmlTagViewComponent } from \"./components\";\nimport { CustomWidgetEditorComponent } from \"./components\";\nimport { VisualEditorComponent } from './components';\nimport { AddFilesBtnComponent } from './components';\nimport { XmlTagExternalVideoComponent } from \"./components\";\nimport { HtmlRawEditorComponent } from \"./components\";\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { TagToSpanPipe, ToHtmlBodyTagsPipe, ToPreviewHtmlPipe, ToPreviewPipe } from \"./pipes\";\nimport { FileImageTagViewComponent, AudioPlayerTagViewComponent, UploadFilesBtnComponent } from \"./components\";\nimport { HtmlRawViewComponent } from \"./components\";\nimport { HtmlViewComponent } from \"./components\";\nimport { XmlTagCustomWidgetComponent } from \"./components\";\n\nexport const EditorComponents = [\n  MainEditorComponent,\n  FileIdSelectComponent,\n  TextEditorComponent,\n  ImageEditorComponent,\n  MainEditorBlockComponent,\n  VisualEditorComponent,\n  AddFilesBtnComponent,\n  HtmlRawEditorComponent,\n  CustomWidgetEditorComponent,\n  DefinedCustomEditorBlockComponent,\n  CustomWidgetIconComponent\n];\n\nexport const XmlComponents = [\n  XmlTagViewComponent,\n  XmlTagHtmlViewComponent,\n  XmlTagTextViewComponent,\n  XmlTagHeaderTextViewComponent,\n  XmlTagHeaderInnerTextViewComponent,\n  XmlTagExternalVideoComponent,\n  HtmlRawViewComponent,\n  FileImageTagViewComponent,\n  AudioPlayerTagViewComponent,\n  XmlTagCustomWidgetComponent,\n  HtmlViewComponent,\n  DefinedCustomTagViewComponent\n];\n\nexport const CrocoPipes = [\n  TagToSpanPipe,\n  ToPreviewPipe,\n  ToHtmlBodyTagsPipe,\n  ToPreviewHtmlPipe\n]\n\nexport const CrocoHtmlDeclarations = [\n  UploadFilesBtnComponent,\n  HtmlViewComponent,\n  ...XmlComponents,\n  ...EditorComponents,\n  ...CrocoPipes\n]\n\nexport const MaterialModules = [\n  MatBadgeModule,\n  MatTableModule,\n  MatExpansionModule,\n  MatFormFieldModule,\n  MatSnackBarModule,\n  MatProgressBarModule,\n  MatProgressSpinnerModule,\n  MatTabsModule,\n  MatMenuModule,\n  MatCardModule,\n  MatSelectModule,\n  MatTooltipModule,\n  MatCheckboxModule,\n  MatChipsModule,\n  MatListModule,\n  MatButtonModule,\n  MatInputModule,\n  MatDialogModule,\n  MatPaginatorModule,\n  MatDatepickerModule,\n  MatGridListModule,\n  MatSlideToggleModule,\n  MatTreeModule,\n  MatNativeDateModule,\n  MatAutocompleteModule,\n  MatSidenavModule,\n  MatIconModule,\n  DragDropModule,\n  MatButtonToggleModule\n];\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { CrocoHtmlDeclarations, MaterialModules } from \".\";\nimport {\n    VkVideoPlayerComponent\n} from \"./components/editor/external-video-editor/vk-video-player/vk-video-player.component\";\nimport { ErrorBannerComponent } from \"./components/error-banner/error-banner.component\";\nimport {\n    YoutubeVideoPlayerComponent\n} from \"./components/editor/external-video-editor/youtube-video-player/youtube-video-player.component\";\nimport { DownloadFileButtonEditorComponent } from \"./components/editor/download-file-button-editor/download-file-button-editor.component\";\nimport {\n    XmlTagDownloadFileButtonComponent\n} from \"./components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component\";\n\n@NgModule({\n    exports: [\n        ...CrocoHtmlDeclarations,\n    ],\n    imports: [\n        CommonModule,\n        FormsModule,\n        ReactiveFormsModule,\n        NgSelectModule,\n        ...MaterialModules,\n        ErrorBannerComponent,\n        VkVideoPlayerComponent,\n        YoutubeVideoPlayerComponent,\n        DownloadFileButtonEditorComponent,\n        XmlTagDownloadFileButtonComponent,\n        ...CrocoHtmlDeclarations\n    ]\n})\nexport class CrocoHtmlModule { }\n","/*\n * Public API Surface of croco-html\n */\n\nexport * from './lib/components';\nexport * from './lib/pipes';\nexport * from './lib/extensions';\nexport * from './lib/croco-html.module';\nexport * from './lib/models';\nexport * from './lib/consts';\nexport * from './lib/services';\nexport * from './lib/options'\nexport * from './lib/tag-services'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PublicFileUploadService","i2.PrivateFileUploadService","i3.CrocoHtmlFileOptionsService","i1.PublicFilesQueryService","i2.PrivateFilesQueryService","i4.CommonFileInfoQueryService","i5","i1.CommonFileInfoQueryService","i1","i1.BlobCreateService","i2","i1.HtmlViewController","i4","i1.ScreenWidthService","MatFormField","MatLabel","i6","i7","i30.UploadFilesBtnComponent","i31.HtmlViewComponent","i32.XmlTagViewComponent","i33.XmlTagHtmlViewComponent","i34.XmlTagTextViewComponent","i35.XmlTagHeaderTextViewComponent","i36.XmlTagHeaderInnerTextViewComponent","i37.XmlTagExternalVideoComponent","i38.HtmlRawViewComponent","i39.FileImageTagViewComponent","i40.AudioPlayerTagViewComponent","i41.XmlTagCustomWidgetComponent","i42.DefinedCustomTagViewComponent","i43.MainEditorComponent","i44.FileIdSelectComponent","i45.TextEditorComponent","i46.ImageEditorComponent","i47.MainEditorBlockComponent","i48.VisualEditorComponent","i49.AddFilesBtnComponent","i50.HtmlRawEditorComponent","i51.CustomWidgetEditorComponent","i52.DefinedCustomEditorBlockComponent","i53.CustomWidgetIconComponent","i54.TagToSpanPipe","i55.ToPreviewPipe","i56.ToHtmlBodyTagsPipe","i57.ToPreviewHtmlPipe"],"mappings":"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"}