{"version":3,"file":"koalarx-ui-shared-components-code-viewer.mjs","sources":["../../projects/koala-ui/shared/components/code-viewer/code-viewer.ts","../../projects/koala-ui/shared/components/code-viewer/code-viewer.html","../../projects/koala-ui/shared/components/code-viewer/koalarx-ui-shared-components-code-viewer.ts"],"sourcesContent":["import 'prismjs/prism';\n\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/plugins/line-highlight/prism-line-highlight';\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\n\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  linkedSignal,\n  signal,\n} from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { Tooltip } from '@koalarx/ui/shared/directives';\nimport { MarkdownModule } from 'ngx-markdown';\n\nexport type CodeViewerLanguage =\n  | 'bash'\n  | 'typescript'\n  | 'html'\n  | 'css'\n  | 'json'\n  | 'other';\n\nexport interface CodeViewerConfig {\n  label: string;\n  code?: string;\n  language?: CodeViewerLanguage;\n  src?: string;\n  checked?: boolean;\n  lineHighlight?: string;\n}\n\n@Component({\n  selector: 'kl-code-viewer',\n  templateUrl: './code-viewer.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MarkdownModule, Tooltip],\n})\nexport class CodeViewer {\n  readonly translations = inject(AppConfig).translation.codeViewer;\n\n  copied = signal(false);\n  content = signal<string>('');\n\n  name = input.required<string>();\n  src = input.required<string>();\n  language = input<CodeViewerLanguage>('other');\n  lineHighlight = input<string>();\n  lineNumbers = input(false, { transform: booleanAttribute });\n\n  icon = linkedSignal(() => {\n    const language = this.language();\n\n    if (language) {\n      switch (language) {\n        case 'bash':\n          return 'fa-solid fa-terminal p-1 text-[0.5rem]';\n        case 'typescript':\n          return 'fa-brands fa-angular py-0 px-[0.2rem] text-[1rem]';\n        case 'html':\n          return 'fa-brands fa-html5 py-[0.1rem] px-[0.2rem] text-[1rem]';\n        case 'css':\n          return 'fa-brands fa-css3 py-[0.1rem] px-[0.2rem] text-[1rem]';\n        case 'json':\n          return 'fa-regular fa-file-code py-[0.1rem] px-[0.2rem] text-[1rem]';\n      }\n    }\n\n    return 'fa-solid fa-code';\n  });\n\n  clipboard(event: any) {\n    this.content.set(event.replace(/^[^\\n]*\\n?/, '').replace(/`/g, ''));\n  }\n\n  copyCode() {\n    const code = this.content();\n\n    if (code) {\n      navigator.clipboard.writeText(code).then(() => {\n        this.copied.set(true);\n        setTimeout(() => this.copied.set(false), 2000);\n      });\n    }\n  }\n}\n","<div class=\"relative rounded-xl bg-neutral-900 border border-base-300 mt-5 overflow-hidden\">\n  <div class=\"flex items-center justify-between p-3\">\n    <span class=\"flex items-center gap-2\">\n      <i class=\"bg-neutral-400 text-neutral-950 rounded-sm\"\n        [class]=\"icon()\">\n      </i>\n      <span class=\"text-neutral-500\">{{ name() }}</span>\n    </span>\n\n    <button class=\"hover:cursor-pointer px-2 text-md text-neutral-500 hover:text-neutral-300 hover:bg-neutral-800 rounded-sm\"\n      type=\"button\"\n      [tooltip]=\"copied()\n        ? translations.copiedToClipboard\n        : translations.copyToClipboard\"\n      tooltipPosition=\"left\"\n      (click)=\"copyCode()\">\n\n      @if (copied()) {\n        <i class=\"fa-solid fa-check\"></i>\n      } @else {\n        <i class=\"fa-regular fa-clipboard\"></i>\n      }\n    </button>\n  </div>\n\n  <markdown\n    [src]=\"src()\"\n    [disableSanitizer]=\"true\"\n    [lineNumbers]=\"lineNumbers()\"\n    lineHighlight\n    [line]=\"lineHighlight()\"\n    (load)=\"clipboard($event)\"\n  />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MA8Ca,UAAU,CAAA;IACZ,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,UAAU;AAEhE,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,IAAA,OAAO,GAAG,MAAM,CAAS,EAAE,mDAAC;AAE5B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;AAC/B,IAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,8CAAU;AAC9B,IAAA,QAAQ,GAAG,KAAK,CAAqB,OAAO,oDAAC;IAC7C,aAAa,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IAC/B,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE3D,IAAA,IAAI,GAAG,YAAY,CAAC,MAAK;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,IAAI,QAAQ,EAAE;YACZ,QAAQ,QAAQ;AACd,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,wCAAwC;AACjD,gBAAA,KAAK,YAAY;AACf,oBAAA,OAAO,mDAAmD;AAC5D,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,wDAAwD;AACjE,gBAAA,KAAK,KAAK;AACR,oBAAA,OAAO,uDAAuD;AAChE,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,6DAA6D;;;AAI1E,QAAA,OAAO,kBAAkB;AAC3B,KAAC,gDAAC;AAEF,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;IAGrE,QAAQ,GAAA;AACN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAE3B,IAAI,IAAI,EAAE;YACR,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;AAC5C,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,gBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AAChD,aAAC,CAAC;;;uGA5CK,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9CvB,6jCAkCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUY,cAAc,qdAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEtB,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAET,uBAAuB,CAAC,MAAM,WACtC,CAAC,cAAc,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,6jCAAA,EAAA;;;AE5CpC;;AAEG;;;;"}