nxt-highlightjs 19.1.0 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"nxt-highlightjs.mjs","sources":["../../../packages/highlightjs/src/lib/highlight.model.ts","../../../packages/highlightjs/src/lib/loader-errors.ts","../../../packages/highlightjs/src/lib/output.ts","../../../packages/highlightjs/src/lib/highlight.loader.ts","../../../packages/highlightjs/src/lib/highlight.service.ts","../../../packages/highlightjs/src/lib/trusted-types.ts","../../../packages/highlightjs/src/lib/highlight-base.directive.ts","../../../packages/highlightjs/src/lib/highlight-auto.directive.ts","../../../packages/highlightjs/src/lib/highlight.directive.ts","../../../packages/highlightjs/src/lib/highlight.module.ts","../../../packages/highlightjs/src/nxt-highlightjs.ts"],"sourcesContent":["import { InjectionToken, makeEnvironmentProviders } from '@angular/core'\r\nimport type { HLJSApi, HLJSOptions, LanguageFn } from 'highlight.js'\r\n\r\n/**\r\n * Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html\r\n */\r\n\r\nexport interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport interface HighlightJSOptions {\r\n highlightOptions?: Partial<HLJSOptions>\r\n lineNumbersOptions?: LineNumbersOptions\r\n languages?: Record<string, () => Promise<LanguageFn>>\r\n coreLibraryLoader?: () => Promise<HLJSApi>\r\n fullLibraryLoader?: () => Promise<HLJSApi>\r\n lineNumbersLoader?: () => Promise<{ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string }>\r\n themePath?: string\r\n}\r\n\r\nexport const NXT_HIGHLIGHT_OPTIONS = new InjectionToken<HighlightJSOptions>('NXT_HIGHLIGHT_OPTIONS')\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions) {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NXT_HIGHLIGHT_OPTIONS,\r\n useValue: options\r\n }\r\n ])\r\n}\r\n","export enum LoaderErrors {\r\n FULL_WITH_CORE_LIBRARY_IMPORTS = 'The full library and the core library were imported, only one of them should be imported!',\r\n FULL_WITH_LANGUAGE_IMPORTS = 'The highlighting languages were imported they are not needed!',\r\n CORE_WITHOUT_LANGUAGE_IMPORTS = 'The highlighting languages were not imported!',\r\n LANGUAGE_WITHOUT_CORE_IMPORTS = 'The core library was not imported!',\r\n NO_FULL_AND_NO_CORE_IMPORTS = 'Highlight.js library was not imported!'\r\n}\r\n","// @ts-nocheck\r\n\r\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n/**\r\n * The contents of this file is from highlight.js, with a small modification to HTMLRenderer to make sure spans don't contain line breaks (important to improve performance of line numbers).\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\r\n/** @typedef {import('highlight.js').Emitter} Emitter */\r\n/** */\r\n\r\n/** @returns */\r\nconst newNode = (opts = {}) => {\r\n /** @type DataNode */\r\n const result = { children: [] }\r\n Object.assign(result, opts)\r\n return result\r\n}\r\n\r\nclass TokenTree {\r\n constructor() {\r\n /** @type DataNode */\r\n this.rootNode = newNode()\r\n this.stack = [this.rootNode]\r\n }\r\n\r\n get top() {\r\n return this.stack[this.stack.length - 1]\r\n }\r\n\r\n get root() {\r\n return this.rootNode\r\n }\r\n\r\n /** @param node */\r\n add(node) {\r\n this.top.children.push(node)\r\n }\r\n\r\n /** @param scope */\r\n openNode(scope) {\r\n /** @type Node */\r\n const node = newNode({ scope })\r\n this.add(node)\r\n this.stack.push(node)\r\n }\r\n\r\n closeNode() {\r\n if (this.stack.length > 1) {\r\n return this.stack.pop()\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n closeAllNodes() {\r\n while (this.closeNode());\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.rootNode, null, 4)\r\n }\r\n\r\n /**\r\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\r\n * @param builder\r\n */\r\n walk(builder) {\r\n // this does not\r\n return this.constructor._walk(builder, this.rootNode)\r\n // this works\r\n // return TokenTree._walk(builder, this.rootNode);\r\n }\r\n\r\n /**\r\n * @param builder\r\n * @param node\r\n */\r\n static _walk(builder, node) {\r\n if (typeof node === 'string') {\r\n builder.addText(node)\r\n } else if (node.children) {\r\n builder.openNode(node)\r\n node.children.forEach((child) => this._walk(builder, child))\r\n builder.closeNode(node)\r\n }\r\n return builder\r\n }\r\n\r\n /**\r\n * @param node\r\n */\r\n static _collapse(node) {\r\n if (typeof node === 'string') return\r\n if (!node.children) return\r\n\r\n if (node.children.every(el => typeof el === 'string')) {\r\n // node.text = node.children.join(\"\");\r\n // delete node.children;\r\n node.children = [node.children.join('')]\r\n } else {\r\n node.children.forEach((child) => {\r\n TokenTree._collapse(child)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n Currently this is all private API, but this is the minimal API necessary\r\n that an Emitter must implement to fully support the parser.\r\n\r\n Minimal interface:\r\n\r\n - addText(text)\r\n - __addSublanguage(emitter, subLanguageName)\r\n - startScope(scope)\r\n - endScope()\r\n - finalize()\r\n - toHTML()\r\n\r\n */\r\n\r\n/**\r\n * @implements {Emitter}\r\n */\r\nexport class TokenTreeEmitter extends TokenTree {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n super()\r\n this.options = options\r\n }\r\n\r\n /**\r\n * @param text\r\n */\r\n addText(text) {\r\n if (text === '') {\r\n return\r\n }\r\n\r\n this.add(text)\r\n }\r\n\r\n /** @param scope */\r\n startScope(scope) {\r\n this.openNode(scope)\r\n }\r\n\r\n endScope() {\r\n this.closeNode()\r\n }\r\n\r\n /**\r\n * @param emitter\r\n * @param name\r\n */\r\n __addSublanguage(emitter, name) {\r\n /** @type DataNode */\r\n const node = emitter.root\r\n if (name) node.scope = `language:${name}`\r\n\r\n this.add(node)\r\n }\r\n\r\n toHTML() {\r\n const renderer = new HTMLRenderer(this, this.options)\r\n return renderer.value()\r\n }\r\n\r\n finalize() {\r\n this.closeAllNodes()\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} Renderer\r\n * @property {(text: string) => void} addText\r\n * @property {(node: Node) => void} openNode\r\n * @property {(node: Node) => void} closeNode\r\n * @property {() => string} value\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\r\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\r\n/** */\r\n\r\nconst SPAN_CLOSE = '</span>'\r\n\r\n/**\r\n * Determines if a node needs to be wrapped in <span>\r\n *\r\n * @param node */\r\nconst emitsWrappingTags = (node) =>\r\n // rarely we can have a sublanguage where language is undefined\r\n // TODO: track down why\r\n !!node.scope\r\n\r\n/**\r\n *\r\n * @param name\r\n * @param options\r\n */\r\nconst scopeToCSSClass = (name, { prefix }) => {\r\n // sub-language\r\n if (name.startsWith('language:')) {\r\n return name.replace('language:', 'language-')\r\n }\r\n // tiered scope: comment.line\r\n if (name.includes('.')) {\r\n const pieces = name.split('.')\r\n return [\r\n `${prefix}${pieces.shift()}`,\r\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\r\n ].join(' ')\r\n }\r\n // simple scope\r\n return `${prefix}${name}`\r\n}\r\n\r\n/** @type {Renderer} */\r\nexport class HTMLRenderer {\r\n /**\r\n * Creates a new HTMLRenderer\r\n *\r\n * @param parseTree - the parse tree (must support `walk` API)\r\n * @param options\r\n */\r\n constructor(parseTree, options) {\r\n this.buffer = ''\r\n this.classPrefix = options.classPrefix\r\n this.openStack = []\r\n parseTree.walk(this)\r\n }\r\n\r\n /**\r\n * Adds texts to the output stream\r\n *\r\n * @param text */\r\n addText(text) {\r\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\r\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\r\n this.buffer += lines.join(lineBreak)\r\n }\r\n\r\n /**\r\n * Adds a node open to the output stream (if needed)\r\n *\r\n * @param node */\r\n openNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n const className = scopeToCSSClass(node.scope,\r\n { prefix: this.classPrefix })\r\n this.span(className)\r\n }\r\n\r\n /**\r\n * Adds a node close to the output stream (if needed)\r\n *\r\n * @param node */\r\n closeNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n this.buffer += SPAN_CLOSE\r\n this.openStack.pop()\r\n }\r\n\r\n /**\r\n * returns the accumulated buffer\r\n */\r\n value() {\r\n return this.buffer\r\n }\r\n\r\n // helpers\r\n\r\n /**\r\n * Builds a span element\r\n *\r\n * @param className */\r\n span(className) {\r\n const span = `<span class=\"${className}\">`\r\n this.buffer += span\r\n this.openStack.push(span)\r\n }\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns\r\n */\r\nexport function escapeHTML(value) {\r\n return value\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#x27;')\r\n}\r\n","import { DOCUMENT } from '@angular/common'\r\nimport { Injectable, PendingTasks, inject } from '@angular/core'\r\nimport type { HLJSApi } from 'highlight.js'\r\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\r\nimport { LoaderErrors } from './loader-errors'\r\nimport { TokenTreeEmitter } from './output'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightLoader {\r\n\r\n private readonly document: Document = inject(DOCUMENT)\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n readonly ready: Promise<HLJSApi> = this.pendingTasks.run(() => this.loadLibrary()\r\n .then(async hljs => {\r\n if (this.options?.lineNumbersLoader) {\r\n const plugin = await this.options.lineNumbersLoader();\r\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\r\n }\r\n\r\n hljs.configure({\r\n __emitter: TokenTreeEmitter\r\n })\r\n\r\n if (this.options?.highlightOptions)\r\n hljs.configure(this.options.highlightOptions)\r\n\r\n return hljs\r\n })\r\n )\r\n\r\n private themeLinkElement?: HTMLLinkElement\r\n\r\n constructor() {\r\n if (this.options?.themePath) {\r\n this.loadTheme(this.options.themePath)\r\n }\r\n }\r\n\r\n /**\r\n * Lazy-Load highlight.js library\r\n */\r\n private async loadLibrary(): Promise<HLJSApi> {\r\n if (this.options) {\r\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\r\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\r\n }\r\n if (this.options.coreLibraryLoader && !this.options.languages) {\r\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\r\n }\r\n if (!this.options.coreLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader) {\r\n return this.options.fullLibraryLoader()\r\n }\r\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\r\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\r\n }\r\n }\r\n throw new Error(LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS)\r\n }\r\n\r\n /**\r\n * Lazy-load highlight.js languages\r\n */\r\n private async loadLanguages(hljs: HLJSApi) {\r\n await Promise.all(Object.entries(this.options?.languages || {})\r\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\r\n return hljs\r\n }\r\n\r\n /**\r\n * Reload theme styles\r\n */\r\n setTheme(path: string): void {\r\n if (this.themeLinkElement) {\r\n this.themeLinkElement.href = path\r\n } else {\r\n this.loadTheme(path)\r\n }\r\n }\r\n\r\n /**\r\n * Load theme\r\n */\r\n private loadTheme(path: string): void {\r\n this.themeLinkElement = this.document.createElement('link')\r\n this.themeLinkElement.href = path\r\n this.themeLinkElement.type = 'text/css'\r\n this.themeLinkElement.rel = 'stylesheet'\r\n this.themeLinkElement.media = 'screen,print'\r\n this.document.head.appendChild(this.themeLinkElement)\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core'\r\nimport { toSignal } from '@angular/core/rxjs-interop'\r\nimport type {\r\n AutoHighlightResult,\r\n HLJSApi,\r\n HighlightOptions,\r\n HighlightResult,\r\n LanguageFn\r\n} from 'highlight.js'\r\nimport { from } from 'rxjs'\r\nimport { HighlightLoader } from './highlight.loader'\r\nimport { LineNumbersOptions } from './highlight.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightJS {\r\n\r\n private readonly loader = inject(HighlightLoader)\r\n\r\n readonly hljs = toSignal(from(this.loader.ready))\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Core highlighting function. Accepts the code to highlight (string) and a list of options (object)\r\n */\r\n async highlight(code: string, options: HighlightOptions): Promise<HighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.highlight(code, options)\r\n }\r\n\r\n /**\r\n * Highlighting with language detection.\r\n */\r\n async highlightAuto(value: string, languageSubset?: string[]): Promise<AutoHighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.highlightAuto(value, languageSubset)\r\n }\r\n\r\n /**\r\n * Applies highlighting to a DOM node containing code.\r\n * This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.\r\n * The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.\r\n */\r\n async highlightElement(element: HTMLElement): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.highlightElement(element)\r\n }\r\n\r\n /**\r\n * Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',\r\n * which highlights all code blocks. This can be called before or after the page’s onload event has fired.\r\n */\r\n async highlightAll(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.highlightAll()\r\n }\r\n\r\n /**\r\n * Adds new language to the library under the specified name. Used mostly internally.\r\n * The function is passed the hljs object to be able to use common regular expressions defined within it.\r\n */\r\n async registerLanguage(languageName: string, languageDefinition: LanguageFn): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.registerLanguage(languageName, languageDefinition)\r\n }\r\n\r\n /**\r\n * Removes a language and its aliases from the library. Used mostly internally\r\n */\r\n async unregisterLanguage(languageName: string): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.unregisterLanguage(languageName)\r\n }\r\n\r\n /**\r\n * Adds new language alias or aliases to the library for the specified language name defined under languageName key.\r\n */\r\n async registerAliases(alias: string | string[], { languageName }: { languageName: string }): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.registerAliases(alias, { languageName })\r\n }\r\n\r\n /**\r\n * @return The languages names list.\r\n */\r\n async listLanguages(): Promise<string[]> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.listLanguages()\r\n }\r\n\r\n /**\r\n * Looks up a language by name or alias.\r\n */\r\n async getLanguage(name: string): Promise<any> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.getLanguage(name)\r\n }\r\n\r\n /**\r\n * Enables safe mode. This is the default mode, providing the most reliable experience for production usage.\r\n */\r\n async safeMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.safeMode()\r\n }\r\n\r\n /**\r\n * Enables debug/development mode.\r\n */\r\n async debugMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.debugMode()\r\n }\r\n\r\n /**\r\n * Display line numbers\r\n */\r\n async lineNumbersBlock(el: HTMLElement, options: LineNumbersOptions): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n if ((hljs as any).lineNumbersBlock) {\r\n (hljs as any).lineNumbersBlock(el, options)\r\n }\r\n }\r\n}\r\n","/// <reference types=\"trusted-types\" />\r\n\r\nimport { TrustedTypePolicy } from 'trusted-types/lib'\r\n\r\n/**\r\n * Enable usage of the library together with \"trusted-types\" HTTP Content-Security-Policy (CSP)\r\n *\r\n * Can be added to angular.json -> serve -> options -> headers to try it out in DEV mode\r\n * \"Content-Security-Policy\": \"trusted-types nxt-highlightjs; require-trusted-types-for 'script'\"\r\n *\r\n * Read more...\r\n * Angular Security: https://angular.io/guide/security#enforcing-trusted-types\r\n * Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = window?.trustedTypes?.createPolicy('nxt-highlightjs', {\r\n createHTML: (s: string) => s\r\n })\r\n } catch {\r\n // trustedTypes.createPolicy throws if called with a name that is\r\n // already registered, even in report-only mode. Until the API changes,\r\n // catch the error not to break the applications functionally. In such\r\n // cases, the code will fall back to using strings.\r\n }\r\n }\r\n return policy\r\n}\r\n\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n InputSignal,\r\n OutputEmitterRef,\r\n SecurityContext,\r\n WritableSignal,\r\n effect,\r\n inject\r\n} from '@angular/core'\r\nimport { DomSanitizer } from '@angular/platform-browser'\r\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js'\r\nimport { HighlightJS } from './highlight.service'\r\nimport { trustedHTMLFromStringBypass } from './trusted-types'\r\n\r\n@Directive()\r\nexport abstract class HighlightBase {\r\n\r\n protected readonly hljs: HighlightJS = inject(HighlightJS)\r\n\r\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\r\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n abstract code: InputSignal<string | null | undefined>\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n abstract highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n abstract highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n constructor() {\r\n effect(() => {\r\n const code = this.code()\r\n if (code) {\r\n const res = this.highlightElement(code)\r\n if (res) {\r\n this.setInnerHTML(res?.value ?? undefined)\r\n this.highlightResult.set(res)\r\n // Forward highlight response to the highlighted output\r\n this.highlighted.emit(res)\r\n }\r\n } else {\r\n this.setTextContent('')\r\n }\r\n })\r\n }\r\n\r\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\r\n\r\n private setTextContent(content: string): void {\r\n this.nativeElement.textContent = content\r\n }\r\n\r\n private setInnerHTML(content: string | undefined): void {\r\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\r\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\r\n ) as any\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input,\r\n output,\r\n OutputEmitterRef,\r\n signal\r\n} from '@angular/core'\r\nimport type { AutoHighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlightAuto]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightAutoDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n code = input<string | null>(undefined, { alias: 'nxtHighlightAuto' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n highlightResult = signal<AutoHighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * An optional array of language names and aliases restricting detection to only those languages\r\n *\r\n * The subset can also be set with configure, but the local parameter overrides the option if set.\r\n */\r\n readonly languages = input<string[]>()\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n highlighted: OutputEmitterRef<AutoHighlightResult> = output<AutoHighlightResult>()\r\n\r\n protected highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlightAuto(code, this.languages())\r\n }\r\n}\r\n\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n input,\r\n InputSignal,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { HighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n code = input<string | null>(undefined, { alias: 'nxtHighlight' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n highlightResult = signal<HighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * The language name highlight only one language\r\n */\r\n readonly language: InputSignal<string> = input.required<string>()\r\n\r\n /**\r\n * An optional flag, when set to true it forces highlighting to finish even in case of detecting\r\n * illegal syntax for the language instead of throwing an exception\r\n */\r\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\r\n transform: booleanAttribute\r\n })\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n highlighted = output<HighlightResult>()\r\n\r\n highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlight(code, {\r\n language: this.language(),\r\n ignoreIllegals: this.ignoreIllegals()\r\n })\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { HighlightAutoDirective } from './highlight-auto.directive'\r\nimport { HighlightDirective } from './highlight.directive'\r\n\r\n@NgModule({\r\n imports: [HighlightDirective, HighlightAutoDirective],\r\n exports: [HighlightDirective, HighlightAutoDirective]\r\n})\r\nexport class HighlightModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MAsBa,qBAAqB,GAAG,IAAI,cAAc,CAAqB,uBAAuB;AAE7F,SAAU,uBAAuB,CAAC,OAA2B,EAAA;AAC/D,IAAA,OAAO,wBAAwB,CAAC;AAC5B,QAAA;AACI,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE;AACb;AACJ,KAAA,CAAC;AACN;;AC/BA,IAAY,YAMX;AAND,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,gCAAA,CAAA,GAAA,2FAA4H;AAC5H,IAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,+DAA4F;AAC5F,IAAA,YAAA,CAAA,+BAAA,CAAA,GAAA,+CAA+E;AAC/E,IAAA,YAAA,CAAA,+BAAA,CAAA,GAAA,oCAAoE;AACpE,IAAA,YAAA,CAAA,6BAAA,CAAA,GAAA,wCAAsE;AAC1E,CAAC,EANW,YAAY,KAAZ,YAAY,GAMvB,EAAA,CAAA,CAAA;;ACND;AAEA,MAAM,iBAAiB,GAAG,aAAa;AAEvC;;AAEG;AAEH;AACA;AACA;AACA;AAEA;AACA,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE,KAAI;;AAE1B,IAAA,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC/B,IAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3B,IAAA,OAAO,MAAM;AACjB,CAAC;AAED,MAAM,SAAS,CAAA;AACX,IAAA,WAAA,GAAA;;AAEI,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAGhC,IAAA,IAAI,GAAG,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;;AAG5C,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,QAAQ;;;AAIxB,IAAA,GAAG,CAAC,IAAI,EAAA;QACJ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIhC,IAAA,QAAQ,CAAC,KAAK,EAAA;;QAEV,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGzB,SAAS,GAAA;QACL,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;;AAG3B,QAAA,OAAO,SAAS;;IAGpB,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,SAAS,EAAE;YAAC;;IAG5B,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;AAGjD;;;AAGG;AACH,IAAA,IAAI,CAAC,OAAO,EAAA;;AAER,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;;;;AAKzD;;;AAGG;AACH,IAAA,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,EAAA;AACtB,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAClB,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5D,YAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;;AAE3B,QAAA,OAAO,OAAO;;AAGlB;;AAEG;IACH,OAAO,SAAS,CAAC,IAAI,EAAA;QACjB,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE;;;AAGnD,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;aACrC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5B,gBAAA,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;AAC9B,aAAC,CAAC;;;AAGb;AAED;;;;;;;;;;;;;AAaG;AAEH;;AAEG;AACG,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AAC3C;;AAEG;AACH,IAAA,WAAA,CAAY,OAAO,EAAA;AACf,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAG1B;;AAEG;AACH,IAAA,OAAO,CAAC,IAAI,EAAA;AACR,QAAA,IAAI,IAAI,KAAK,EAAE,EAAE;YACb;;AAGJ,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;AAIlB,IAAA,UAAU,CAAC,KAAK,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;IAGxB,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;;AAGpB;;;AAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAA;;AAE1B,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI;AACzB,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAY,SAAA,EAAA,IAAI,EAAE;AAEzC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGlB,MAAM,GAAA;QACF,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AACrD,QAAA,OAAO,QAAQ,CAAC,KAAK,EAAE;;IAG3B,QAAQ,GAAA;QACJ,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,OAAO,IAAI;;AAElB;AAED;;;;;;AAMG;AAEH;AACA;AACA;AAEA,MAAM,UAAU,GAAG,SAAS;AAE5B;;;AAGiB;AACjB,MAAM,iBAAiB,GAAG,CAAC,IAAI;AAC3B;AACA;AACA,CAAC,CAAC,IAAI,CAAC,KAAK;AAEhB;;;;AAIG;AACH,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAI;;AAEzC,IAAA,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC;;;AAGjD,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9B,OAAO;AACH,YAAA,CAAA,EAAG,MAAM,CAAG,EAAA,MAAM,CAAC,KAAK,EAAE,CAAE,CAAA;YAC5B,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAA,EAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAA,CAAC;AACvD,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;;;AAGf,IAAA,OAAO,CAAG,EAAA,MAAM,CAAG,EAAA,IAAI,EAAE;AAC7B,CAAC;AAED;MACa,YAAY,CAAA;AACrB;;;;;AAKG;IACH,WAAY,CAAA,SAAS,EAAE,OAAO,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGxB;;;AAGiB;AACjB,IAAA,OAAO,CAAC,IAAI,EAAA;AACR,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;AAC3D,QAAA,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7G,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGxC;;;AAGiB;AACjB,IAAA,QAAQ,CAAC,IAAI,EAAA;AACT,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAAE;AAE9B,QAAA,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EACxC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGxB;;;AAGiB;AACjB,IAAA,SAAS,CAAC,IAAI,EAAA;AACV,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAAE;AAE9B,QAAA,IAAI,CAAC,MAAM,IAAI,UAAU;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;;AAGxB;;AAEG;IACH,KAAK,GAAA;QACD,OAAO,IAAI,CAAC,MAAM;;;AAKtB;;;AAGsB;AACtB,IAAA,IAAI,CAAC,SAAS,EAAA;AACV,QAAA,MAAM,IAAI,GAAG,CAAgB,aAAA,EAAA,SAAS,IAAI;AAC1C,QAAA,IAAI,CAAC,MAAM,IAAI,IAAI;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEhC;AAED;;;AAGG;AACG,SAAU,UAAU,CAAC,KAAK,EAAA;AAC5B,IAAA,OAAO;AACF,SAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,SAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,SAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AAChC;;MCtSa,eAAe,CAAA;AA0BxB,IAAA,WAAA,GAAA;AAxBiB,QAAA,IAAA,CAAA,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC;QACrC,IAAO,CAAA,OAAA,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAE3C,QAAA,IAAA,CAAA,KAAK,GAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW;AAC1E,aAAA,IAAI,CAAC,OAAM,IAAI,KAAG;AACf,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE;gBACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBACpD,IAAY,CAAC,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;;YAG9E,IAAI,CAAC,SAAS,CAAC;AACX,gBAAA,SAAS,EAAE;AACd,aAAA,CAAC;AAEF,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,gBAAgB;gBAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAEjD,YAAA,OAAO,IAAI;SACd,CAAC,CACL;AAKG,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;;;AAI9C;;AAEG;AACK,IAAA,MAAM,WAAW,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAClE,gBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,8BAA8B,CAAC;;AAEhE,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1D,gBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC;;AAE5D,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC3D,gBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,6BAA6B,CAAC;;AAE/D,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC3D,gBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,6BAA6B,CAAC;;AAE/D,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;;YAE3C,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;gBACxG,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;;AAGtF,QAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,2BAA2B,CAAC;;AAG7D;;AAEG;IACK,MAAM,aAAa,CAAC,IAAa,EAAA;AACrC,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE;AACzD,aAAA,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/G,QAAA,OAAO,IAAI;;AAGf;;AAEG;AACH,IAAA,QAAQ,CAAC,IAAY,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI;;aAC9B;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;AAI5B;;AAEG;AACK,IAAA,SAAS,CAAC,IAAY,EAAA;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3D,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,UAAU;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,YAAY;AACxC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,cAAc;QAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;;8GAxFhD,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCOY,WAAW,CAAA;AAMpB,IAAA,WAAA,GAAA;AAJiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAExC,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAIjD;;AAEG;AACH,IAAA,MAAM,SAAS,CAAC,IAAY,EAAE,OAAyB,EAAA;QACnD,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;;AAGxC;;AAEG;AACH,IAAA,MAAM,aAAa,CAAC,KAAa,EAAE,cAAyB,EAAA;QACxD,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC;;AAGpD;;;;AAIG;IACH,MAAM,gBAAgB,CAAC,OAAoB,EAAA;QACvC,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;;AAGlC;;;AAGG;AACH,IAAA,MAAM,YAAY,GAAA;QACd,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;QAC7C,IAAI,CAAC,YAAY,EAAE;;AAGvB;;;AAGG;AACH,IAAA,MAAM,gBAAgB,CAAC,YAAoB,EAAE,kBAA8B,EAAA;QACvE,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,CAAC;;AAG3D;;AAEG;IACH,MAAM,kBAAkB,CAAC,YAAoB,EAAA;QACzC,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7C,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;;AAGzC;;AAEG;AACH,IAAA,MAAM,eAAe,CAAC,KAAwB,EAAE,EAAE,YAAY,EAA4B,EAAA;QACtF,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;QAC7C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC;;AAGjD;;AAEG;AACH,IAAA,MAAM,aAAa,GAAA;QACf,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7C,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;;AAG/B;;AAEG;IACH,MAAM,WAAW,CAAC,IAAY,EAAA;QAC1B,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;AAGjC;;AAEG;AACH,IAAA,MAAM,QAAQ,GAAA;QACV,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;QAC7C,IAAI,CAAC,QAAQ,EAAE;;AAGnB;;AAEG;AACH,IAAA,MAAM,SAAS,GAAA;QACX,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;QAC7C,IAAI,CAAC,SAAS,EAAE;;AAGpB;;AAEG;AACH,IAAA,MAAM,gBAAgB,CAAC,EAAe,EAAE,OAA2B,EAAA;QAC/D,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7C,QAAA,IAAK,IAAY,CAAC,gBAAgB,EAAE;AAC/B,YAAA,IAAY,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC;;;8GA1G1C,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFR,MAAM,EAAA,CAAA,CAAA;;2FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACfD;AAIA;;;;;;;;;AASG;AACH,IAAI,MAEkC;AAEtC,SAAS,SAAS,GAAA;IACd,IAAI,CAAC,MAAM,EAAE;AACT,QAAA,IAAI;YACA,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,iBAAiB,EAAE;AAC3D,gBAAA,UAAU,EAAE,CAAC,CAAS,KAAK;AAC9B,aAAA,CAAC;;AACJ,QAAA,MAAM;;;;;;;AAOZ,IAAA,OAAO,MAAM;AACjB;AAEM,SAAU,2BAA2B,CAAC,IAAY,EAAA;IACpD,OAAO,SAAS,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI;AAChD;;MCpBsB,aAAa,CAAA;AAsB/B,IAAA,WAAA,GAAA;AApBmB,QAAA,IAAA,CAAA,IAAI,GAAgB,MAAM,CAAC,WAAW,CAAC;QAEzC,IAAa,CAAA,aAAA,GAAgB,MAAM,EAAC,UAAuB,EAAC,CAAC,aAAa;AAC1E,QAAA,IAAA,CAAA,SAAS,GAAiB,MAAM,CAAC,YAAY,CAAC;QAkB3D,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,IAAI,EAAE;gBACN,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACvC,IAAI,GAAG,EAAE;oBACL,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,IAAI,SAAS,CAAC;AAC1C,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;;AAE7B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;;;iBAE3B;AACH,gBAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;;AAE/B,SAAC,CAAC;;AAKE,IAAA,cAAc,CAAC,OAAe,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,OAAO;;AAGpC,IAAA,YAAY,CAAC,OAA2B,EAAA;QAC5C,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,2BAA2B,CACtD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAChE;;8GAhDM,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACEK,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AAPzD,IAAA,WAAA,GAAA;;AASI;;AAEG;QACH,IAAI,CAAA,IAAA,GAAG,KAAK,CAAgB,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;AAErE;;AAEG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkC,SAAS,CAAC;AAEpE;;;;AAIG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,EAAY;AAEtC;;AAEG;QACH,IAAW,CAAA,WAAA,GAA0C,MAAM,EAAuB;AAMrF;AAJa,IAAA,gBAAgB,CAAC,IAAY,EAAA;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAC7B,OAAO,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;8GA1B7C,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EALpB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAKnE,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;oBAC9B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAwB,sBAAA,EAAE,CAAC;AAC5E,oBAAA,IAAI,EAAE;AACF,wBAAA,cAAc,EAAE;AACnB;AACJ,iBAAA;;;ACEK,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAPrD,IAAA,WAAA,GAAA;;AASI;;AAEG;QACH,IAAI,CAAA,IAAA,GAAG,KAAK,CAAgB,SAAS,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AAEjE;;AAEG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAA8B,SAAS,CAAC;AAEhE;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAwB,KAAK,CAAC,QAAQ,EAAU;AAEjE;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAmB,SAAS,EAAE;AACzD,YAAA,SAAS,EAAE;AACd,SAAA,CAAC;AAEF;;AAEG;QACH,IAAW,CAAA,WAAA,GAAG,MAAM,EAAmB;AAS1C;AAPG,IAAA,gBAAgB,CAAC,IAAY,EAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC7B,QAAA,OAAO,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc;AACtC,SAAA,CAAC;;8GAnCG,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EALhB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAK/D,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAoB,kBAAA,EAAE,CAAC;AACxE,oBAAA,IAAI,EAAE;AACF,wBAAA,cAAc,EAAE;AACnB;AACJ,iBAAA;;;MCTY,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHd,kBAAkB,EAAE,sBAAsB,CAC1C,EAAA,OAAA,EAAA,CAAA,kBAAkB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;+GAE3C,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;AACrD,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,sBAAsB;AACvD,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"nxt-highlightjs.mjs","sources":["../../../packages/highlightjs/src/lib/highlight.model.ts","../../../packages/highlightjs/src/lib/loader-errors.ts","../../../packages/highlightjs/src/lib/output.ts","../../../packages/highlightjs/src/lib/highlight.loader.ts","../../../packages/highlightjs/src/lib/highlight.service.ts","../../../packages/highlightjs/src/lib/trusted-types.ts","../../../packages/highlightjs/src/lib/highlight-base.directive.ts","../../../packages/highlightjs/src/lib/highlight-auto.directive.ts","../../../packages/highlightjs/src/lib/highlight.directive.ts","../../../packages/highlightjs/src/lib/highlight.module.ts","../../../packages/highlightjs/src/nxt-highlightjs.ts"],"sourcesContent":["import { InjectionToken, makeEnvironmentProviders } from '@angular/core'\r\nimport type { HLJSApi, HLJSOptions, LanguageFn } from 'highlight.js'\r\n\r\n/**\r\n * Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html\r\n */\r\n\r\nexport interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport interface HighlightJSOptions {\r\n highlightOptions?: Partial<HLJSOptions>\r\n lineNumbersOptions?: LineNumbersOptions\r\n languages?: Record<string, () => Promise<LanguageFn>>\r\n coreLibraryLoader?: () => Promise<HLJSApi>\r\n fullLibraryLoader?: () => Promise<HLJSApi>\r\n lineNumbersLoader?: () => Promise<{ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string }>\r\n themePath?: string\r\n}\r\n\r\nexport const NXT_HIGHLIGHT_OPTIONS = new InjectionToken<HighlightJSOptions>('NXT_HIGHLIGHT_OPTIONS')\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions) {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NXT_HIGHLIGHT_OPTIONS,\r\n useValue: options\r\n }\r\n ])\r\n}\r\n","export enum LoaderErrors {\r\n FULL_WITH_CORE_LIBRARY_IMPORTS = 'The full library and the core library were imported, only one of them should be imported!',\r\n FULL_WITH_LANGUAGE_IMPORTS = 'The highlighting languages were imported they are not needed!',\r\n CORE_WITHOUT_LANGUAGE_IMPORTS = 'The highlighting languages were not imported!',\r\n LANGUAGE_WITHOUT_CORE_IMPORTS = 'The core library was not imported!',\r\n NO_FULL_AND_NO_CORE_IMPORTS = 'Highlight.js library was not imported!'\r\n}\r\n","// @ts-nocheck\r\n\r\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n/**\r\n * The contents of this file is from highlight.js, with a small modification to HTMLRenderer to make sure spans don't contain line breaks (important to improve performance of line numbers).\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\r\n/** @typedef {import('highlight.js').Emitter} Emitter */\r\n/** */\r\n\r\n/** @returns */\r\nconst newNode = (opts = {}) => {\r\n /** @type DataNode */\r\n const result = { children: [] }\r\n Object.assign(result, opts)\r\n return result\r\n}\r\n\r\nclass TokenTree {\r\n constructor() {\r\n /** @type DataNode */\r\n this.rootNode = newNode()\r\n this.stack = [this.rootNode]\r\n }\r\n\r\n get top() {\r\n return this.stack[this.stack.length - 1]\r\n }\r\n\r\n get root() {\r\n return this.rootNode\r\n }\r\n\r\n /** @param node */\r\n add(node) {\r\n this.top.children.push(node)\r\n }\r\n\r\n /** @param scope */\r\n openNode(scope) {\r\n /** @type Node */\r\n const node = newNode({ scope })\r\n this.add(node)\r\n this.stack.push(node)\r\n }\r\n\r\n closeNode() {\r\n if (this.stack.length > 1) {\r\n return this.stack.pop()\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n closeAllNodes() {\r\n while (this.closeNode());\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.rootNode, null, 4)\r\n }\r\n\r\n /**\r\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\r\n * @param builder\r\n */\r\n walk(builder) {\r\n // this does not\r\n return this.constructor._walk(builder, this.rootNode)\r\n // this works\r\n // return TokenTree._walk(builder, this.rootNode);\r\n }\r\n\r\n /**\r\n * @param builder\r\n * @param node\r\n */\r\n static _walk(builder, node) {\r\n if (typeof node === 'string') {\r\n builder.addText(node)\r\n } else if (node.children) {\r\n builder.openNode(node)\r\n node.children.forEach((child) => this._walk(builder, child))\r\n builder.closeNode(node)\r\n }\r\n return builder\r\n }\r\n\r\n /**\r\n * @param node\r\n */\r\n static _collapse(node) {\r\n if (typeof node === 'string') return\r\n if (!node.children) return\r\n\r\n if (node.children.every(el => typeof el === 'string')) {\r\n // node.text = node.children.join(\"\");\r\n // delete node.children;\r\n node.children = [node.children.join('')]\r\n } else {\r\n node.children.forEach((child) => {\r\n TokenTree._collapse(child)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n Currently this is all private API, but this is the minimal API necessary\r\n that an Emitter must implement to fully support the parser.\r\n\r\n Minimal interface:\r\n\r\n - addText(text)\r\n - __addSublanguage(emitter, subLanguageName)\r\n - startScope(scope)\r\n - endScope()\r\n - finalize()\r\n - toHTML()\r\n\r\n */\r\n\r\n/**\r\n * @implements {Emitter}\r\n */\r\nexport class TokenTreeEmitter extends TokenTree {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n super()\r\n this.options = options\r\n }\r\n\r\n /**\r\n * @param text\r\n */\r\n addText(text) {\r\n if (text === '') {\r\n return\r\n }\r\n\r\n this.add(text)\r\n }\r\n\r\n /** @param scope */\r\n startScope(scope) {\r\n this.openNode(scope)\r\n }\r\n\r\n endScope() {\r\n this.closeNode()\r\n }\r\n\r\n /**\r\n * @param emitter\r\n * @param name\r\n */\r\n __addSublanguage(emitter, name) {\r\n /** @type DataNode */\r\n const node = emitter.root\r\n if (name) node.scope = `language:${name}`\r\n\r\n this.add(node)\r\n }\r\n\r\n toHTML() {\r\n const renderer = new HTMLRenderer(this, this.options)\r\n return renderer.value()\r\n }\r\n\r\n finalize() {\r\n this.closeAllNodes()\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} Renderer\r\n * @property {(text: string) => void} addText\r\n * @property {(node: Node) => void} openNode\r\n * @property {(node: Node) => void} closeNode\r\n * @property {() => string} value\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\r\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\r\n/** */\r\n\r\nconst SPAN_CLOSE = '</span>'\r\n\r\n/**\r\n * Determines if a node needs to be wrapped in <span>\r\n *\r\n * @param node */\r\nconst emitsWrappingTags = (node) =>\r\n // rarely we can have a sublanguage where language is undefined\r\n // TODO: track down why\r\n !!node.scope\r\n\r\n/**\r\n *\r\n * @param name\r\n * @param options\r\n */\r\nconst scopeToCSSClass = (name, { prefix }) => {\r\n // sub-language\r\n if (name.startsWith('language:')) {\r\n return name.replace('language:', 'language-')\r\n }\r\n // tiered scope: comment.line\r\n if (name.includes('.')) {\r\n const pieces = name.split('.')\r\n return [\r\n `${prefix}${pieces.shift()}`,\r\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\r\n ].join(' ')\r\n }\r\n // simple scope\r\n return `${prefix}${name}`\r\n}\r\n\r\n/** @type {Renderer} */\r\nexport class HTMLRenderer {\r\n /**\r\n * Creates a new HTMLRenderer\r\n *\r\n * @param parseTree - the parse tree (must support `walk` API)\r\n * @param options\r\n */\r\n constructor(parseTree, options) {\r\n this.buffer = ''\r\n this.classPrefix = options.classPrefix\r\n this.openStack = []\r\n parseTree.walk(this)\r\n }\r\n\r\n /**\r\n * Adds texts to the output stream\r\n *\r\n * @param text */\r\n addText(text) {\r\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\r\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\r\n this.buffer += lines.join(lineBreak)\r\n }\r\n\r\n /**\r\n * Adds a node open to the output stream (if needed)\r\n *\r\n * @param node */\r\n openNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n const className = scopeToCSSClass(node.scope,\r\n { prefix: this.classPrefix })\r\n this.span(className)\r\n }\r\n\r\n /**\r\n * Adds a node close to the output stream (if needed)\r\n *\r\n * @param node */\r\n closeNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n this.buffer += SPAN_CLOSE\r\n this.openStack.pop()\r\n }\r\n\r\n /**\r\n * returns the accumulated buffer\r\n */\r\n value() {\r\n return this.buffer\r\n }\r\n\r\n // helpers\r\n\r\n /**\r\n * Builds a span element\r\n *\r\n * @param className */\r\n span(className) {\r\n const span = `<span class=\"${className}\">`\r\n this.buffer += span\r\n this.openStack.push(span)\r\n }\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns\r\n */\r\nexport function escapeHTML(value) {\r\n return value\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#x27;')\r\n}\r\n","import { Injectable, PendingTasks, inject, DOCUMENT } from '@angular/core'\r\nimport type { HLJSApi } from 'highlight.js'\r\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\r\nimport { LoaderErrors } from './loader-errors'\r\nimport { TokenTreeEmitter } from './output'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightLoader {\r\n\r\n private readonly document: Document = inject(DOCUMENT)\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n private _t = this.pendingTasks.add()\r\n readonly ready: Promise<HLJSApi> = this.loadLibrary()\r\n .then(async hljs => {\r\n if (this.options?.lineNumbersLoader) {\r\n const plugin = await this.options.lineNumbersLoader();\r\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\r\n }\r\n\r\n hljs.configure({\r\n __emitter: TokenTreeEmitter\r\n })\r\n\r\n if (this.options?.highlightOptions)\r\n hljs.configure(this.options.highlightOptions)\r\n\r\n return hljs\r\n })\r\n .finally(this._t)\r\n\r\n private themeLinkElement?: HTMLLinkElement\r\n\r\n constructor() {\r\n if (this.options?.themePath) {\r\n this.loadTheme(this.options.themePath)\r\n }\r\n }\r\n\r\n /**\r\n * Lazy-Load highlight.js library\r\n */\r\n private async loadLibrary(): Promise<HLJSApi> {\r\n if (this.options) {\r\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\r\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\r\n }\r\n if (this.options.coreLibraryLoader && !this.options.languages) {\r\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\r\n }\r\n if (!this.options.coreLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader) {\r\n return this.options.fullLibraryLoader()\r\n }\r\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\r\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\r\n }\r\n }\r\n throw new Error(LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS)\r\n }\r\n\r\n /**\r\n * Lazy-load highlight.js languages\r\n */\r\n private async loadLanguages(hljs: HLJSApi) {\r\n await Promise.all(Object.entries(this.options?.languages || {})\r\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\r\n return hljs\r\n }\r\n\r\n /**\r\n * Reload theme styles\r\n */\r\n setTheme(path: string): void {\r\n if (this.themeLinkElement) {\r\n this.themeLinkElement.href = path\r\n } else {\r\n this.loadTheme(path)\r\n }\r\n }\r\n\r\n /**\r\n * Load theme\r\n */\r\n private loadTheme(path: string): void {\r\n this.themeLinkElement = this.document.createElement('link')\r\n this.themeLinkElement.href = path\r\n this.themeLinkElement.type = 'text/css'\r\n this.themeLinkElement.rel = 'stylesheet'\r\n this.themeLinkElement.media = 'screen,print'\r\n this.document.head.appendChild(this.themeLinkElement)\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core'\r\nimport { toSignal } from '@angular/core/rxjs-interop'\r\nimport type {\r\n AutoHighlightResult,\r\n HLJSApi,\r\n HighlightOptions,\r\n HighlightResult,\r\n LanguageFn\r\n} from 'highlight.js'\r\nimport { from } from 'rxjs'\r\nimport { HighlightLoader } from './highlight.loader'\r\nimport { LineNumbersOptions } from './highlight.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightJS {\r\n\r\n private readonly loader = inject(HighlightLoader)\r\n\r\n readonly hljs = toSignal(from(this.loader.ready))\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Core highlighting function. Accepts the code to highlight (string) and a list of options (object)\r\n */\r\n async highlight(code: string, options: HighlightOptions): Promise<HighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.highlight(code, options)\r\n }\r\n\r\n /**\r\n * Highlighting with language detection.\r\n */\r\n async highlightAuto(value: string, languageSubset?: string[]): Promise<AutoHighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.highlightAuto(value, languageSubset)\r\n }\r\n\r\n /**\r\n * Applies highlighting to a DOM node containing code.\r\n * This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.\r\n * The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.\r\n */\r\n async highlightElement(element: HTMLElement): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.highlightElement(element)\r\n }\r\n\r\n /**\r\n * Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',\r\n * which highlights all code blocks. This can be called before or after the page’s onload event has fired.\r\n */\r\n async highlightAll(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.highlightAll()\r\n }\r\n\r\n /**\r\n * Adds new language to the library under the specified name. Used mostly internally.\r\n * The function is passed the hljs object to be able to use common regular expressions defined within it.\r\n */\r\n async registerLanguage(languageName: string, languageDefinition: LanguageFn): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.registerLanguage(languageName, languageDefinition)\r\n }\r\n\r\n /**\r\n * Removes a language and its aliases from the library. Used mostly internally\r\n */\r\n async unregisterLanguage(languageName: string): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.unregisterLanguage(languageName)\r\n }\r\n\r\n /**\r\n * Adds new language alias or aliases to the library for the specified language name defined under languageName key.\r\n */\r\n async registerAliases(alias: string | string[], { languageName }: { languageName: string }): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.registerAliases(alias, { languageName })\r\n }\r\n\r\n /**\r\n * @return The languages names list.\r\n */\r\n async listLanguages(): Promise<string[]> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.listLanguages()\r\n }\r\n\r\n /**\r\n * Looks up a language by name or alias.\r\n */\r\n async getLanguage(name: string): Promise<any> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.getLanguage(name)\r\n }\r\n\r\n /**\r\n * Enables safe mode. This is the default mode, providing the most reliable experience for production usage.\r\n */\r\n async safeMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.safeMode()\r\n }\r\n\r\n /**\r\n * Enables debug/development mode.\r\n */\r\n async debugMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.debugMode()\r\n }\r\n\r\n /**\r\n * Display line numbers\r\n */\r\n async lineNumbersBlock(el: HTMLElement, options: LineNumbersOptions): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n if ((hljs as any).lineNumbersBlock) {\r\n (hljs as any).lineNumbersBlock(el, options)\r\n }\r\n }\r\n}\r\n","/// <reference types=\"trusted-types\" />\r\n\r\nimport { TrustedTypePolicy } from 'trusted-types/lib'\r\n\r\n/**\r\n * Enable usage of the library together with \"trusted-types\" HTTP Content-Security-Policy (CSP)\r\n *\r\n * Can be added to angular.json -> serve -> options -> headers to try it out in DEV mode\r\n * \"Content-Security-Policy\": \"trusted-types nxt-highlightjs; require-trusted-types-for 'script'\"\r\n *\r\n * Read more...\r\n * Angular Security: https://angular.io/guide/security#enforcing-trusted-types\r\n * Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = window?.trustedTypes?.createPolicy('nxt-highlightjs', {\r\n createHTML: (s: string) => s\r\n })\r\n } catch {\r\n // trustedTypes.createPolicy throws if called with a name that is\r\n // already registered, even in report-only mode. Until the API changes,\r\n // catch the error not to break the applications functionally. In such\r\n // cases, the code will fall back to using strings.\r\n }\r\n }\r\n return policy\r\n}\r\n\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n InputSignal,\r\n OutputEmitterRef,\r\n SecurityContext,\r\n WritableSignal,\r\n effect,\r\n inject\r\n} from '@angular/core'\r\nimport { DomSanitizer } from '@angular/platform-browser'\r\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js'\r\nimport { HighlightJS } from './highlight.service'\r\nimport { trustedHTMLFromStringBypass } from './trusted-types'\r\n\r\n@Directive()\r\nexport abstract class HighlightBase {\r\n\r\n protected readonly hljs: HighlightJS = inject(HighlightJS)\r\n\r\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\r\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n abstract code: InputSignal<string | null | undefined>\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n abstract highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n abstract highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n constructor() {\r\n effect(() => {\r\n const code = this.code()\r\n if (code) {\r\n const res = this.highlightElement(code)\r\n if (res) {\r\n this.setInnerHTML(res?.value ?? undefined)\r\n this.highlightResult.set(res)\r\n // Forward highlight response to the highlighted output\r\n this.highlighted.emit(res)\r\n }\r\n } else {\r\n this.setTextContent('')\r\n }\r\n })\r\n }\r\n\r\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\r\n\r\n private setTextContent(content: string): void {\r\n this.nativeElement.textContent = content\r\n }\r\n\r\n private setInnerHTML(content: string | undefined): void {\r\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\r\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\r\n ) as any\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input,\r\n output,\r\n OutputEmitterRef,\r\n signal\r\n} from '@angular/core'\r\nimport type { AutoHighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlightAuto]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightAutoDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n code = input<string | null>(undefined, { alias: 'nxtHighlightAuto' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n highlightResult = signal<AutoHighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * An optional array of language names and aliases restricting detection to only those languages\r\n *\r\n * The subset can also be set with configure, but the local parameter overrides the option if set.\r\n */\r\n readonly languages = input<string[]>()\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n highlighted: OutputEmitterRef<AutoHighlightResult> = output<AutoHighlightResult>()\r\n\r\n protected highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlightAuto(code, this.languages())\r\n }\r\n}\r\n\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n input,\r\n InputSignal,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { HighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n code = input<string | null>(undefined, { alias: 'nxtHighlight' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n highlightResult = signal<HighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * The language name highlight only one language\r\n */\r\n readonly language: InputSignal<string> = input.required<string>()\r\n\r\n /**\r\n * An optional flag, when set to true it forces highlighting to finish even in case of detecting\r\n * illegal syntax for the language instead of throwing an exception\r\n */\r\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\r\n transform: booleanAttribute\r\n })\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n highlighted = output<HighlightResult>()\r\n\r\n highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlight(code, {\r\n language: this.language(),\r\n ignoreIllegals: this.ignoreIllegals()\r\n })\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { HighlightAutoDirective } from './highlight-auto.directive'\r\nimport { HighlightDirective } from './highlight.directive'\r\n\r\n@NgModule({\r\n imports: [HighlightDirective, HighlightAutoDirective],\r\n exports: [HighlightDirective, HighlightAutoDirective]\r\n})\r\nexport class HighlightModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,198 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, InputSignal, WritableSignal, OutputEmitterRef } from '@angular/core';
3
+ import { HLJSOptions, LanguageFn, HLJSApi, HighlightOptions, HighlightResult, AutoHighlightResult } from 'highlight.js';
4
+
1
5
  /**
2
- * Generated bundle index. Do not edit.
6
+ * Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html
3
7
  */
4
- /// <amd-module name="nxt-highlightjs" />
5
- export * from './public-api';
8
+ interface LineNumbersOptions {
9
+ startFrom?: number;
10
+ singleLine?: boolean;
11
+ }
12
+ interface HighlightJSOptions {
13
+ highlightOptions?: Partial<HLJSOptions>;
14
+ lineNumbersOptions?: LineNumbersOptions;
15
+ languages?: Record<string, () => Promise<LanguageFn>>;
16
+ coreLibraryLoader?: () => Promise<HLJSApi>;
17
+ fullLibraryLoader?: () => Promise<HLJSApi>;
18
+ lineNumbersLoader?: () => Promise<{
19
+ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string;
20
+ }>;
21
+ themePath?: string;
22
+ }
23
+ declare const NXT_HIGHLIGHT_OPTIONS: InjectionToken<HighlightJSOptions>;
24
+ declare function provideHighlightOptions(options: HighlightJSOptions): i0.EnvironmentProviders;
25
+
26
+ declare class HighlightJS {
27
+ private readonly loader;
28
+ readonly hljs: i0.Signal<HLJSApi | undefined>;
29
+ constructor();
30
+ /**
31
+ * Core highlighting function. Accepts the code to highlight (string) and a list of options (object)
32
+ */
33
+ highlight(code: string, options: HighlightOptions): Promise<HighlightResult>;
34
+ /**
35
+ * Highlighting with language detection.
36
+ */
37
+ highlightAuto(value: string, languageSubset?: string[]): Promise<AutoHighlightResult>;
38
+ /**
39
+ * Applies highlighting to a DOM node containing code.
40
+ * This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.
41
+ * The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.
42
+ */
43
+ highlightElement(element: HTMLElement): Promise<void>;
44
+ /**
45
+ * Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',
46
+ * which highlights all code blocks. This can be called before or after the page’s onload event has fired.
47
+ */
48
+ highlightAll(): Promise<void>;
49
+ /**
50
+ * Adds new language to the library under the specified name. Used mostly internally.
51
+ * The function is passed the hljs object to be able to use common regular expressions defined within it.
52
+ */
53
+ registerLanguage(languageName: string, languageDefinition: LanguageFn): Promise<void>;
54
+ /**
55
+ * Removes a language and its aliases from the library. Used mostly internally
56
+ */
57
+ unregisterLanguage(languageName: string): Promise<void>;
58
+ /**
59
+ * Adds new language alias or aliases to the library for the specified language name defined under languageName key.
60
+ */
61
+ registerAliases(alias: string | string[], { languageName }: {
62
+ languageName: string;
63
+ }): Promise<void>;
64
+ /**
65
+ * @return The languages names list.
66
+ */
67
+ listLanguages(): Promise<string[]>;
68
+ /**
69
+ * Looks up a language by name or alias.
70
+ */
71
+ getLanguage(name: string): Promise<any>;
72
+ /**
73
+ * Enables safe mode. This is the default mode, providing the most reliable experience for production usage.
74
+ */
75
+ safeMode(): Promise<void>;
76
+ /**
77
+ * Enables debug/development mode.
78
+ */
79
+ debugMode(): Promise<void>;
80
+ /**
81
+ * Display line numbers
82
+ */
83
+ lineNumbersBlock(el: HTMLElement, options: LineNumbersOptions): Promise<void>;
84
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightJS, never>;
85
+ static ɵprov: i0.ɵɵInjectableDeclaration<HighlightJS>;
86
+ }
87
+
88
+ declare abstract class HighlightBase {
89
+ protected readonly hljs: HighlightJS;
90
+ private readonly nativeElement;
91
+ private readonly sanitizer;
92
+ /**
93
+ * Code to highlight
94
+ */
95
+ abstract code: InputSignal<string | null | undefined>;
96
+ /**
97
+ * Highlighted result
98
+ */
99
+ abstract highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>;
100
+ /**
101
+ * Stream that emits when code string is highlighted
102
+ */
103
+ abstract highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>;
104
+ constructor();
105
+ protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined;
106
+ private setTextContent;
107
+ private setInnerHTML;
108
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightBase, never>;
109
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HighlightBase, never, never, {}, {}, never, never, true, never>;
110
+ }
111
+
112
+ declare class HighlightAutoDirective extends HighlightBase {
113
+ /**
114
+ * Code to highlight
115
+ */
116
+ code: i0.InputSignal<string | null | undefined>;
117
+ /**
118
+ * Highlighted result
119
+ */
120
+ highlightResult: i0.WritableSignal<AutoHighlightResult | undefined>;
121
+ /**
122
+ * An optional array of language names and aliases restricting detection to only those languages
123
+ *
124
+ * The subset can also be set with configure, but the local parameter overrides the option if set.
125
+ */
126
+ readonly languages: i0.InputSignal<string[] | undefined>;
127
+ /**
128
+ * Stream that emits when code string is highlighted
129
+ */
130
+ highlighted: OutputEmitterRef<AutoHighlightResult>;
131
+ protected highlightElement(code: string): AutoHighlightResult | undefined;
132
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightAutoDirective, never>;
133
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HighlightAutoDirective, "[nxtHighlightAuto]", never, { "code": { "alias": "nxtHighlightAuto"; "required": false; "isSignal": true; }; "languages": { "alias": "languages"; "required": false; "isSignal": true; }; }, { "highlighted": "highlighted"; }, never, never, true, never>;
134
+ }
135
+
136
+ declare class HighlightDirective extends HighlightBase {
137
+ /**
138
+ * Code to highlight
139
+ */
140
+ code: InputSignal<string | null | undefined>;
141
+ /**
142
+ * Highlighted result
143
+ */
144
+ highlightResult: i0.WritableSignal<HighlightResult | undefined>;
145
+ /**
146
+ * The language name highlight only one language
147
+ */
148
+ readonly language: InputSignal<string>;
149
+ /**
150
+ * An optional flag, when set to true it forces highlighting to finish even in case of detecting
151
+ * illegal syntax for the language instead of throwing an exception
152
+ */
153
+ readonly ignoreIllegals: i0.InputSignalWithTransform<boolean | undefined, unknown>;
154
+ /**
155
+ * Stream that emits when code string is highlighted
156
+ */
157
+ highlighted: i0.OutputEmitterRef<HighlightResult>;
158
+ highlightElement(code: string): HighlightResult | undefined;
159
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightDirective, never>;
160
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HighlightDirective, "[nxtHighlight]", never, { "code": { "alias": "nxtHighlight"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": true; "isSignal": true; }; "ignoreIllegals": { "alias": "ignoreIllegals"; "required": false; "isSignal": true; }; }, { "highlighted": "highlighted"; }, never, never, true, never>;
161
+ }
162
+
163
+ declare class HighlightLoader {
164
+ private readonly document;
165
+ private readonly options;
166
+ private readonly pendingTasks;
167
+ private _t;
168
+ readonly ready: Promise<HLJSApi>;
169
+ private themeLinkElement?;
170
+ constructor();
171
+ /**
172
+ * Lazy-Load highlight.js library
173
+ */
174
+ private loadLibrary;
175
+ /**
176
+ * Lazy-load highlight.js languages
177
+ */
178
+ private loadLanguages;
179
+ /**
180
+ * Reload theme styles
181
+ */
182
+ setTheme(path: string): void;
183
+ /**
184
+ * Load theme
185
+ */
186
+ private loadTheme;
187
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightLoader, never>;
188
+ static ɵprov: i0.ɵɵInjectableDeclaration<HighlightLoader>;
189
+ }
190
+
191
+ declare class HighlightModule {
192
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightModule, never>;
193
+ static ɵmod: i0.ɵɵNgModuleDeclaration<HighlightModule, never, [typeof HighlightDirective, typeof HighlightAutoDirective], [typeof HighlightDirective, typeof HighlightAutoDirective]>;
194
+ static ɵinj: i0.ɵɵInjectorDeclaration<HighlightModule>;
195
+ }
196
+
197
+ export { HighlightAutoDirective, HighlightBase, HighlightDirective, HighlightJS, HighlightLoader, HighlightModule, NXT_HIGHLIGHT_OPTIONS, provideHighlightOptions };
198
+ export type { HighlightJSOptions, LineNumbersOptions };
@@ -1,5 +1,21 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="nxt-highlightjs/line-numbers" />
5
- export * from './public_api';
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface LineNumbersOptions {
4
+ startFrom?: number;
5
+ singleLine?: boolean;
6
+ }
7
+ declare function activateLineNumbers(document: Document): (code: string, options?: LineNumbersOptions) => string;
8
+
9
+ declare class HighlightLineNumbersDirective {
10
+ private readonly options;
11
+ private readonly hljs;
12
+ private readonly highlight;
13
+ private readonly nativeElement;
14
+ readonly startFrom: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
15
+ readonly singleLine: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
16
+ constructor();
17
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightLineNumbersDirective, never>;
18
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<HighlightLineNumbersDirective, "[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]", never, { "startFrom": { "alias": "startFrom"; "required": false; "isSignal": true; }; "singleLine": { "alias": "singleLine"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
19
+ }
20
+
21
+ export { HighlightLineNumbersDirective, activateLineNumbers };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "nxt-highlightjs",
3
3
  "description": "Angular code highlighting directives with optional line numbers and support for SSR",
4
4
  "bugs": "https://github.com/Liquid-JS/nxt-components/issues",
5
- "version": "19.1.0",
5
+ "version": "20.0.0",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "repository": "https://github.com/Liquid-JS/nxt-components.git",
@@ -19,12 +19,12 @@
19
19
  "gist"
20
20
  ],
21
21
  "peerDependencies": {
22
- "@angular/cdk": "^19.0.0",
23
- "@angular/common": "^19.0.0",
24
- "@angular/core": "^19.0.0",
25
- "@angular/platform-browser": "^19.0.0",
26
- "highlight.js": ">=11.11.0",
27
- "rxjs": "^7.8.1"
22
+ "@angular/cdk": "^20.0.0",
23
+ "@angular/common": "^20.0.0",
24
+ "@angular/core": "^20.0.0",
25
+ "@angular/platform-browser": "^20.0.0",
26
+ "highlight.js": ">=11.11.1",
27
+ "rxjs": "^7.8.2"
28
28
  },
29
29
  "dependencies": {
30
30
  "tslib": "^2.8.1"
@@ -1,12 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- /**
3
- * Injection token used to provide the current location to `codeFromUrl` pipe.
4
- * Used to handle server-side rendering and to stub out during unit tests.
5
- */
6
- export declare const NXT_HIGHLIGHT_FILE_LOCATION: InjectionToken<CodeFileLocation>;
7
- export interface CodeFileLocation {
8
- formatPathname: (path: string) => string;
9
- }
10
- export declare function CODE_FILE_LOCATION_FACTORY(): {
11
- formatPathname: (path: string) => string;
12
- };
@@ -1,10 +0,0 @@
1
- import { PipeTransform } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export declare class CodeFromUrlPipe implements PipeTransform {
5
- private readonly location;
6
- private readonly loader;
7
- transform(url: string): Observable<string>;
8
- static ɵfac: i0.ɵɵFactoryDeclaration<CodeFromUrlPipe, never>;
9
- static ɵpipe: i0.ɵɵPipeDeclaration<CodeFromUrlPipe, "codeFromUrl", true>;
10
- }
@@ -1,22 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { Gist } from './gist.model';
3
- import * as i0 from "@angular/core";
4
- export declare class CodeLoader {
5
- private readonly http;
6
- private readonly options;
7
- /**
8
- * Get plus code
9
- *
10
- * @param id Gist ID
11
- */
12
- getCodeFromGist(id: string): Observable<Gist>;
13
- /**
14
- * Get code by URL
15
- *
16
- * @param url File raw link
17
- */
18
- getCodeFromUrl(url: string): Observable<string>;
19
- private fetchFile;
20
- static ɵfac: i0.ɵɵFactoryDeclaration<CodeLoader, never>;
21
- static ɵprov: i0.ɵɵInjectableDeclaration<CodeLoader>;
22
- }
package/extras/gist.d.ts DELETED
@@ -1,20 +0,0 @@
1
- import { EventEmitter, OnDestroy, PipeTransform } from '@angular/core';
2
- import { Gist, GistFile } from './gist.model';
3
- import * as i0 from "@angular/core";
4
- export declare class GistDirective implements OnDestroy {
5
- private readonly loader;
6
- private readonly pendingTasks;
7
- private readonly cdRef;
8
- private subscription?;
9
- set gist(value: string);
10
- gistLoad: EventEmitter<Gist>;
11
- gistError: EventEmitter<any>;
12
- ngOnDestroy(): void;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<GistDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<GistDirective, "[nxtGist]", never, { "gist": { "alias": "nxtGist"; "required": false; }; }, { "gistLoad": "gistLoad"; "gistError": "gistError"; }, never, never, true, never>;
15
- }
16
- export declare class GistFilePipe implements PipeTransform {
17
- transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<GistFilePipe, never>;
19
- static ɵpipe: i0.ɵɵPipeDeclaration<GistFilePipe, "gistFile", true>;
20
- }
@@ -1,95 +0,0 @@
1
- import { InjectionToken, Provider } from '@angular/core';
2
- export declare function isUrl(url: string): boolean;
3
- export interface GistOptions {
4
- clientId: string;
5
- clientSecret: string;
6
- }
7
- export declare const NXT_GIST_OPTIONS: InjectionToken<GistOptions>;
8
- export declare function provideGistOptions(options: GistOptions): Provider[];
9
- interface Owner {
10
- login: string;
11
- id: number;
12
- node_id: string;
13
- avatar_url: string;
14
- gravatar_id: string;
15
- url: string;
16
- html_url: string;
17
- followers_url: string;
18
- following_url: string;
19
- gists_url: string;
20
- starred_url: string;
21
- subscriptions_url: string;
22
- organizations_url: string;
23
- repos_url: string;
24
- events_url: string;
25
- received_events_url: string;
26
- type: string;
27
- site_admin: boolean;
28
- }
29
- interface User {
30
- login: string;
31
- id: number;
32
- node_id: string;
33
- avatar_url: string;
34
- gravatar_id: string;
35
- url: string;
36
- html_url: string;
37
- followers_url: string;
38
- following_url: string;
39
- gists_url: string;
40
- starred_url: string;
41
- subscriptions_url: string;
42
- organizations_url: string;
43
- repos_url: string;
44
- events_url: string;
45
- received_events_url: string;
46
- type: string;
47
- site_admin: boolean;
48
- }
49
- interface ChangeStatus {
50
- total: number;
51
- additions: number;
52
- deletions: number;
53
- }
54
- interface History {
55
- user: User;
56
- version: string;
57
- committed_at: Date;
58
- change_status: ChangeStatus;
59
- url: string;
60
- }
61
- export interface GistFile {
62
- filename: string;
63
- type: string;
64
- language: string;
65
- raw_url: string;
66
- size: number;
67
- truncated: boolean;
68
- content: string;
69
- }
70
- interface Files {
71
- [fileName: string]: GistFile;
72
- }
73
- export interface Gist {
74
- url: string;
75
- forks_url: string;
76
- commits_url: string;
77
- id: string;
78
- node_id: string;
79
- git_pull_url: string;
80
- git_push_url: string;
81
- html_url: string;
82
- files: Files;
83
- public: boolean;
84
- created_at: Date;
85
- updated_at: Date;
86
- description: string;
87
- comments: number;
88
- user?: any;
89
- comments_url: string;
90
- owner: Owner;
91
- forks: any[];
92
- history: History[];
93
- truncated: boolean;
94
- }
95
- export {};
@@ -1,8 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./gist";
3
- import * as i2 from "./code-from-url";
4
- export declare class HighlightExstrasModule {
5
- static ɵfac: i0.ɵɵFactoryDeclaration<HighlightExstrasModule, never>;
6
- static ɵmod: i0.ɵɵNgModuleDeclaration<HighlightExstrasModule, never, [typeof i1.GistDirective, typeof i1.GistFilePipe, typeof i2.CodeFromUrlPipe], [typeof i1.GistDirective, typeof i1.GistFilePipe, typeof i2.CodeFromUrlPipe]>;
7
- static ɵinj: i0.ɵɵInjectorDeclaration<HighlightExstrasModule>;
8
- }
@@ -1,5 +0,0 @@
1
- export * from './code-from-url';
2
- export * from './code-loader';
3
- export * from './gist';
4
- export * from './gist.model';
5
- export * from './highlight-extras.module';