{"version":3,"file":"ng-nest-ui-highlight.mjs","sources":["../../../../lib/ng-nest/ui/highlight/highlight.property.ts","../../../../lib/ng-nest/ui/highlight/highlight.service.ts","../../../../lib/ng-nest/ui/highlight/highlight.component.ts","../../../../lib/ng-nest/ui/highlight/highlight.component.html","../../../../lib/ng-nest/ui/highlight/highlight.module.ts","../../../../lib/ng-nest/ui/highlight/ng-nest-ui-highlight.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XBoolean } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Highlight\r\n * @selector x-highlight\r\n * @decorator component\r\n */\r\nexport const XHighlightPrefix = 'x-highlight';\r\nconst X_HIGHLIGHT_CONFIG_NAME = 'highlight';\r\n\r\n/**\r\n * Highlight Property\r\n */\r\n@Component({ selector: `${XHighlightPrefix}-property`, template: '' })\r\nexport class XHighlightProperty extends XPropertyFunction(X_HIGHLIGHT_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN 代码类型\r\n   * @en_US Code type\r\n   */\r\n  readonly type = input<string>();\r\n  /**\r\n   * @zh_CN 数据\r\n   * @en_US Data\r\n   */\r\n  readonly data = input<string>();\r\n  /**\r\n   * @zh_CN 高亮行数据\r\n   * @en_US Highlight row data\r\n   */\r\n  readonly highlightLines = input<XHighlightLines>({});\r\n  /**\r\n   * @zh_CN 显示复制按钮\r\n   * @en_US display copy\r\n   */\r\n  readonly showCopy = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 高亮行数据\r\n * 示例：{'danger': '1, 2, 4', 'primary': '7-10, 12, 15-20'}\r\n * @en_US Highlight row data\r\n * Example：{'danger': '1, 2, 4', 'primary': '7-10, 12, 15-20'}\r\n */\r\nexport interface XHighlightLines {\r\n  /**\r\n   * @zh_CN 主色\r\n   * @en_US Primary\r\n   */\r\n  primary?: string;\r\n  /**\r\n   * @zh_CN 成功\r\n   * @en_US Success\r\n   */\r\n  success?: string;\r\n  /**\r\n   * @zh_CN 警告\r\n   * @en_US Warning\r\n   */\r\n  warning?: string;\r\n  /**\r\n   * @zh_CN 危险\r\n   * @en_US Danger\r\n   */\r\n  danger?: string;\r\n  /**\r\n   * @zh_CN 信息\r\n   * @en_US Info\r\n   */\r\n  info?: string;\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class XHighlightService {\r\n  platformId = inject(PLATFORM_ID);\r\n  isBrowser = isPlatformBrowser(this.platformId);\r\n  prism = this.isBrowser ? (window as any)['Prism'] : null;\r\n}\r\n","import {\r\n  Component,\r\n  ViewEncapsulation,\r\n  ChangeDetectionStrategy,\r\n  ElementRef,\r\n  inject,\r\n  PLATFORM_ID,\r\n  signal,\r\n  computed,\r\n  HostBinding,\r\n  viewChild\r\n} from '@angular/core';\r\nimport { XHighlightPrefix, XHighlightProperty } from './highlight.property';\r\nimport { XIsEmpty } from '@ng-nest/ui/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { delay, of } from 'rxjs';\r\nimport { XButtonComponent } from '@ng-nest/ui/button';\r\nimport { XHighlightService } from './highlight.service';\r\n\r\n@Component({\r\n  selector: `${XHighlightPrefix}`,\r\n  imports: [XButtonComponent],\r\n  templateUrl: './highlight.component.html',\r\n  styleUrls: ['./style/index.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XHighlightComponent extends XHighlightProperty {\r\n  @HostBinding('class') className = XHighlightPrefix;\r\n  codeRef = viewChild.required<ElementRef<HTMLElement>>('code');\r\n  lineHeight = signal(1.375);\r\n  iconCopy = signal('fto-copy');\r\n\r\n  platformId = inject(PLATFORM_ID);\r\n  isBrowser = isPlatformBrowser(this.platformId);\r\n  private sanitizer = inject(DomSanitizer);\r\n  private highlight = inject(XHighlightService);\r\n  display = computed(() => {\r\n    const type = this.type();\r\n    let data = this.data();\r\n    if (XIsEmpty(type)) return;\r\n    if (XIsEmpty(data)) data = '';\r\n    if (!this.highlight.prism && this.isBrowser) {\r\n      console.warn(\r\n        `${XHighlightPrefix}: [${type}] file are not supported, the prismjs plugin is used for highlight, so configure the introduction in angular.json.`\r\n      );\r\n      return this.sanitizer.bypassSecurityTrustHtml(data!);\r\n    }\r\n    const lines = data!.split(/\\n(?!$)/g);\r\n    if (this.highlight.prism?.languages?.[type!]) {\r\n      return this.sanitizer.bypassSecurityTrustHtml(\r\n        this.highlight.prism?.highlight(data, this.highlight.prism.languages[type!], type) +\r\n          this.createLineNumbers(lines) +\r\n          this.createHighlightLines()\r\n      );\r\n    } else {\r\n      return this.sanitizer.bypassSecurityTrustHtml(\r\n        this.highlight.prism?.highlight(data, this.highlight.prism.languages['bash'], 'bash') +\r\n          this.createLineNumbers(lines) +\r\n          this.createHighlightLines()\r\n      );\r\n    }\r\n  });\r\n\r\n  createLineNumbers(lines: string[]) {\r\n    let result = '';\r\n    if (lines.length > 0) {\r\n      result = `<span class=\"line-numbers\">${new Array(lines.length + 1).join('<span></span>')}</span>`;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  createHighlightLines() {\r\n    let result = '';\r\n    const lines = this.highlightLines();\r\n    for (const key in lines) {\r\n      const spt = (lines as any)[key].split(',');\r\n      for (const st of spt) {\r\n        const sp = st.split('-');\r\n        const top = this.lineHeight() * (Number(sp[0]) - 1);\r\n        const height = this.lineHeight() * (sp.length === 2 ? Number(sp[1]) - Number(sp[0]) + 1 : 1);\r\n        result += `<div class=\"line-highlight ${key}\" style=\"top: ${top}rem; height: ${height}rem\"></div>`;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  async onCopy() {\r\n    this.iconCopy.set('fto-check');\r\n    await navigator.clipboard.writeText(this.data() as string);\r\n    of(true)\r\n      .pipe(delay(2000))\r\n      .subscribe(() => {\r\n        this.iconCopy.set('fto-copy');\r\n      });\r\n  }\r\n}\r\n","<pre>\r\n  <code #code class=\"language-{{ type() }}\" [innerHTML]=\"display()\"></code>\r\n</pre>\r\n<div class=\"x-highlight-actions\">\r\n  @if (showCopy()) {\r\n    <x-button class=\"x-highlight-copy\" [icon]=\"iconCopy()\" onlyIcon flat (click)=\"onCopy()\"></x-button>\r\n  }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XHighlightComponent } from './highlight.component';\r\n\r\n@NgModule({\r\n  exports: [XHighlightComponent],\r\n  imports: [XHighlightComponent]\r\n})\r\nexport class XHighlightModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}