{"version":3,"file":"dynamic-forms-markdown.mjs","sources":["../../../../../libs/markdown/src/lib/dynamic-form-markdown.service.ts","../../../../../libs/markdown/src/lib/dynamic-form-markdown.component.ts","../../../../../libs/markdown/src/lib/dynamic-form-markdown.component.html","../../../../../libs/markdown/src/lib/dynamic-form-markdown.module.ts","../../../../../libs/markdown/src/public_api.ts","../../../../../libs/markdown/src/dynamic-forms-markdown.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Tokens, marked } from 'marked';\nimport { Observable, from, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { DynamicFormMarkdownOptions } from './dynamic-form-markdown-options';\n\nexport class MarkdownRenderer extends marked.Renderer {\n  override link(linkToken: Tokens.Link): string {\n    const link = super.link(linkToken);\n    return link.replace('<a', '<a target=\"_blank\"');\n  }\n}\n\n@Injectable()\nexport class DynamicFormMarkdownService {\n  constructor(\n    private httpClient: HttpClient,\n    private sanitizer: DomSanitizer,\n  ) {\n    marked.setOptions({ renderer: new MarkdownRenderer() });\n  }\n\n  compile(markdown: string, options?: DynamicFormMarkdownOptions): Observable<string> {\n    const securityContext = this.getSecurityContext(options);\n    return this.parseMarkdown(markdown).pipe(map(m => this.sanitizer.sanitize(securityContext, m)));\n  }\n\n  compileFromSource(source: string, options?: DynamicFormMarkdownOptions): Observable<string> {\n    return this.httpClient.get(source, { responseType: 'text' }).pipe(switchMap(markdown => this.compile(markdown, options)));\n  }\n\n  private parseMarkdown(markdown: string): Observable<string> {\n    const parsedMarkdown = marked.parse(markdown);\n    return typeof parsedMarkdown === 'string' ? of(parsedMarkdown) : from(parsedMarkdown);\n  }\n\n  private getSecurityContext(options?: DynamicFormMarkdownOptions): SecurityContext {\n    return options && !options.sanitize ? SecurityContext.NONE : SecurityContext.HTML;\n  }\n}\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { Component, DoCheck, OnInit } from '@angular/core';\nimport { DynamicFormElementBase } from '@dynamic-forms/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { DynamicFormMarkdownDefinition } from './dynamic-form-markdown-definition';\nimport { DynamicFormMarkdownTemplate } from './dynamic-form-markdown-template';\nimport { DynamicFormMarkdownService } from './dynamic-form-markdown.service';\n\n@Component({\n  selector: 'dynamic-form-markdown',\n  imports: [AsyncPipe, NgClass],\n  templateUrl: './dynamic-form-markdown.component.html',\n})\nexport class DynamicFormMarkdownComponent<\n  Template extends DynamicFormMarkdownTemplate = DynamicFormMarkdownTemplate,\n  Definition extends DynamicFormMarkdownDefinition<Template> = DynamicFormMarkdownDefinition<Template>,\n>\n  extends DynamicFormElementBase<Template, Definition>\n  implements OnInit, DoCheck\n{\n  private _markdownSubject: BehaviorSubject<{ source: string; markdown: string }>;\n\n  markdown$: Observable<string>;\n\n  constructor(private markdownService: DynamicFormMarkdownService) {\n    super();\n  }\n\n  ngOnInit(): void {\n    this._markdownSubject = new BehaviorSubject({\n      source: this.template.source,\n      markdown: this.template.markdown,\n    });\n    this.markdown$ = this._markdownSubject\n      .asObservable()\n      .pipe(\n        switchMap(value =>\n          value.source\n            ? this.markdownService.compileFromSource(value.source, this.definition.options)\n            : this.markdownService.compile(value.markdown, this.definition.options),\n        ),\n      );\n  }\n\n  ngDoCheck(): void {\n    const source = this.template.source;\n    const markdown = this.template.markdown;\n    if (this._markdownSubject.value.source !== source || this._markdownSubject.value.markdown !== markdown) {\n      this._markdownSubject.next({ source, markdown });\n    }\n  }\n}\n","<div class=\"dynamic-form-markdown\" [ngClass]=\"template.className\" [hidden]=\"hidden\" [innerHTML]=\"markdown$ | async\"></div>\n","import { Provider } from '@angular/core';\nimport {\n  DynamicFormElementType,\n  DynamicFormsFeature,\n  dynamicFormLibrary,\n  importDynamicFormsProviders,\n  withDynamicFormElements,\n} from '@dynamic-forms/core';\nimport { DynamicFormMarkdownComponent } from './dynamic-form-markdown.component';\nimport { DynamicFormMarkdownService } from './dynamic-form-markdown.service';\n\nexport const dynamicFormMarkdownType: DynamicFormElementType = {\n  type: 'markdown',\n  component: DynamicFormMarkdownComponent,\n  libraryName: dynamicFormLibrary.name,\n};\n\nexport function withDynamicFormsMarkdownFeatures(): DynamicFormsFeature[] {\n  const providers = [DynamicFormMarkdownService];\n  return [{ providers }, withDynamicFormElements(dynamicFormMarkdownType)];\n}\n\nexport function provideDynamicFormsMarkdown(): Provider[] {\n  return importDynamicFormsProviders(...withDynamicFormsMarkdownFeatures());\n}\n","/*\n * Public API Surface of markdown\n */\n\nexport * from './lib/dynamic-form-markdown-definition';\nexport * from './lib/dynamic-form-markdown-options';\nexport * from './lib/dynamic-form-markdown-template';\nexport * from './lib/dynamic-form-markdown.component';\nexport * from './lib/dynamic-form-markdown.module';\nexport * from './lib/dynamic-form-markdown.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DynamicFormMarkdownService"],"mappings":"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"}