nxt-highlightjs 22.0.0 → 22.1.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/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\n/**\r\n * @internal\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","/**\r\n * @internal\r\n */\r\nexport 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, undefined, 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, resource } from '@angular/core'\nimport type { HLJSApi } from 'highlight.js'\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\nimport { LoaderErrors } from './loader-errors'\nimport { TokenTreeEmitter } from './output'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HighlightLoader {\n\n private readonly document: Document = inject(DOCUMENT)\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\n private readonly pendingTasks = inject(PendingTasks)\n\n private _t = this.pendingTasks.add()\n readonly hljs = resource({\n loader: () => this.loadLibrary()\n .then(async hljs => {\n if (this.options?.lineNumbersLoader) {\n const plugin = await this.options.lineNumbersLoader();\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\n }\n\n hljs.configure({\n __emitter: TokenTreeEmitter\n })\n\n if (this.options?.highlightOptions)\n hljs.configure(this.options.highlightOptions)\n\n return hljs\n })\n .finally(this._t)\n }).asReadonly()\n\n private themeLinkElement?: HTMLLinkElement\n\n constructor() {\n if (this.options?.themePath) {\n this.loadTheme(this.options.themePath)\n }\n }\n\n /**\n * Lazy-Load highlight.js library\n */\n private async loadLibrary(): Promise<HLJSApi> {\n if (this.options) {\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\n }\n if (this.options.fullLibraryLoader && this.options.languages) {\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\n }\n if (this.options.coreLibraryLoader && !this.options.languages) {\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\n }\n if (!this.options.coreLibraryLoader && this.options.languages) {\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\n }\n if (this.options.fullLibraryLoader) {\n return this.options.fullLibraryLoader()\n }\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\n }\n }\n throw new Error(LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS)\n }\n\n /**\n * Lazy-load highlight.js languages\n */\n private async loadLanguages(hljs: HLJSApi) {\n await Promise.all(Object.entries(this.options?.languages || {})\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\n return hljs\n }\n\n /**\n * Reload theme styles\n */\n setTheme(path: string): void {\n if (this.themeLinkElement) {\n this.themeLinkElement.href = path\n } else {\n this.loadTheme(path)\n }\n }\n\n /**\n * Load theme\n */\n private loadTheme(path: string): void {\n this.themeLinkElement = this.document.createElement('link')\n this.themeLinkElement.href = path\n this.themeLinkElement.type = 'text/css'\n this.themeLinkElement.rel = 'stylesheet'\n this.themeLinkElement.media = 'screen,print'\n this.document.head.appendChild(this.themeLinkElement)\n }\n}\n","import { Injectable, inject } from '@angular/core'\n\nimport { HighlightLoader } from './highlight.loader'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HighlightJS {\n\n private readonly loader = inject(HighlightLoader)\n\n readonly hljs = this.loader.hljs.value\n\n}\n","/// <reference types=\"trusted-types\" />\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\n * @internal\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\n/**\r\n * @internal\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\n/**\r\n * @internal\r\n */\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\n Directive,\n ElementRef,\n InputSignal,\n OutputEmitterRef,\n SecurityContext,\n WritableSignal,\n effect,\n inject\n} from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js'\nimport { HighlightJS } from './highlight.service'\nimport { trustedHTMLFromStringBypass } from './trusted-types'\n\n@Directive()\nexport abstract class HighlightBase {\n\n protected readonly hljs: HighlightJS = inject(HighlightJS)\n\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\n\n /**\n * Code to highlight\n */\n abstract readonly code: InputSignal<string | undefined>\n\n /**\n * Highlighted result\n */\n abstract readonly highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\n\n /**\n * Stream that emits when code string is highlighted\n */\n abstract readonly highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\n\n constructor() {\n effect(() => {\n const code = this.code()\n if (code) {\n const res = this.highlightElement(code)\n if (res) {\n this.setInnerHTML(res?.value ?? undefined)\n this.highlightResult.set(res)\n // Forward highlight response to the highlighted output\n this.highlighted.emit(res)\n }\n } else {\n this.setTextContent('')\n }\n })\n }\n\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\n\n private setTextContent(content: string): void {\n this.nativeElement.textContent = content\n }\n\n private setInnerHTML(content: string | undefined): void {\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\n ) as any\n }\n}\n","import {\n Directive,\n input,\n output,\n signal\n} from '@angular/core'\nimport type { AutoHighlightResult } from 'highlight.js'\nimport { HighlightBase } from './highlight-base.directive'\n\n@Directive({\n selector: '[nxtHighlightAuto]',\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\n host: {\n '[class.hljs]': 'true'\n }\n})\nexport class HighlightAutoDirective extends HighlightBase {\n\n /**\n * Code to highlight\n */\n readonly code = input<string>(undefined, { alias: 'nxtHighlightAuto' })\n\n /**\n * Highlighted result\n */\n readonly highlightResult = signal<AutoHighlightResult | undefined>(undefined)\n\n /**\n * An optional array of language names and aliases restricting detection to only those languages\n *\n * The subset can also be set with configure, but the local parameter overrides the option if set.\n */\n readonly languages = input<string[]>()\n\n /**\n * Stream that emits when code string is highlighted\n */\n readonly highlighted = output<AutoHighlightResult>()\n\n protected highlightElement(code: string) {\n const hljs = this.hljs.hljs()\n return hljs?.highlightAuto(code, this.languages())\n }\n}\n\n","import {\n booleanAttribute,\n Directive,\n input,\n output,\n signal\n} from '@angular/core'\nimport type { HighlightResult } from 'highlight.js'\nimport { HighlightBase } from './highlight-base.directive'\n\n@Directive({\n selector: '[nxtHighlight]',\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\n host: {\n '[class.hljs]': 'true'\n }\n})\nexport class HighlightDirective extends HighlightBase {\n\n /**\n * Code to highlight\n */\n readonly code = input<string>(undefined, { alias: 'nxtHighlight' })\n\n /**\n * Highlighted result\n */\n readonly highlightResult = signal<HighlightResult | undefined>(undefined)\n\n /**\n * The language name highlight only one language\n */\n readonly language = input.required<string>()\n\n /**\n * An optional flag, when set to true it forces highlighting to finish even in case of detecting\n * illegal syntax for the language instead of throwing an exception\n */\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\n transform: booleanAttribute\n })\n\n /**\n * Stream that emits when code string is highlighted\n */\n readonly highlighted = output<HighlightResult>()\n\n highlightElement(code: string) {\n const hljs = this.hljs.hljs()\n return hljs?.highlight(code, {\n language: this.language(),\n ignoreIllegals: this.ignoreIllegals()\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nxt-highlightjs.mjs","names":[],"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"],"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\n/**\r\n * @internal\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","/**\r\n * @internal\r\n */\r\nexport 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\n\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\n\n/**\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).\n */\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] }\n Object.assign(result, opts)\n return result\n}\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode()\n this.stack = [this.rootNode]\n }\n\n get top() {\n return this.stack[this.stack.length - 1]\n }\n\n get root() {\n return this.rootNode\n }\n\n /** @param node */\n add(node) {\n this.top.children.push(node)\n }\n\n /** @param scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope })\n this.add(node)\n this.stack.push(node)\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop()\n }\n\n return undefined\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, undefined, 4)\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode)\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param builder\n * @param node\n */\n static _walk(builder, node) {\n if (typeof node === 'string') {\n builder.addText(node)\n } else if (node.children) {\n builder.openNode(node)\n node.children.forEach((child) => this._walk(builder, child))\n builder.closeNode(node)\n }\n return builder\n }\n\n /**\n * @param node\n */\n static _collapse(node) {\n if (typeof node === 'string') return\n if (!node.children) return\n\n if (node.children.every(el => typeof el === 'string')) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join('')]\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child)\n })\n }\n }\n}\n\n/**\n * Currently this is all private API, but this is the minimal API necessary\n * that an Emitter must implement to fully support the parser.\n *\n * Minimal interface:\n *\n * - addText(text)\n * - __addSublanguage(emitter, subLanguageName)\n * - startScope(scope)\n * - endScope()\n * - finalize()\n * - toHTML()\n */\n\n/**\n * @implements {Emitter}\n */\nexport class TokenTreeEmitter extends TokenTree {\n /**\n * @param options\n */\n constructor(options) {\n super()\n this.options = options\n }\n\n /**\n * @param text\n */\n addText(text) {\n if (text === '') {\n return\n }\n\n this.add(text)\n }\n\n /** @param scope */\n startScope(scope) {\n this.openNode(scope)\n }\n\n endScope() {\n this.closeNode()\n }\n\n /**\n * @param emitter\n * @param name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root\n if (name) node.scope = `language:${name}`\n\n this.add(node)\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options)\n return renderer.value()\n }\n\n finalize() {\n this.closeAllNodes()\n return true\n }\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>'\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param node */\nconst emitsWrappingTags = (node) =>\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n !!node.scope\n\n/**\n *\n * @param name\n * @param options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith('language:')) {\n return name.replace('language:', 'language-')\n }\n // tiered scope: comment.line\n if (name.includes('.')) {\n const pieces = name.split('.')\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\n ].join(' ')\n }\n // simple scope\n return `${prefix}${name}`\n}\n\n/** @type {Renderer} */\nexport class HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param parseTree - the parse tree (must support `walk` API)\n * @param options\n */\n constructor(parseTree, options) {\n this.buffer = ''\n this.classPrefix = options.classPrefix\n this.openStack = []\n parseTree.walk(this)\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param text */\n addText(text) {\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\n this.buffer += lines.join(lineBreak)\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix })\n this.span(className)\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return\n\n this.buffer += SPAN_CLOSE\n this.openStack.pop()\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param className */\n span(className) {\n const span = `<span class=\"${className}\">`\n this.buffer += span\n this.openStack.push(span)\n }\n}\n\n/**\n * @param value\n * @returns\n */\nexport function escapeHTML(value) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#x27;')\n}\n","import { Injectable, PendingTasks, inject, DOCUMENT, resource } from '@angular/core'\nimport type { HLJSApi } from 'highlight.js'\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\nimport { LoaderErrors } from './loader-errors'\nimport { TokenTreeEmitter } from './output'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HighlightLoader {\n\n private readonly document: Document = inject(DOCUMENT)\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\n private readonly pendingTasks = inject(PendingTasks)\n\n private _t = this.pendingTasks.add()\n readonly hljs = resource({\n loader: () => this.loadLibrary()\n .then(async hljs => {\n if (this.options?.lineNumbersLoader) {\n const plugin = await this.options.lineNumbersLoader();\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\n }\n\n hljs.configure({\n __emitter: TokenTreeEmitter\n })\n\n if (this.options?.highlightOptions)\n hljs.configure(this.options.highlightOptions)\n\n return hljs\n })\n .finally(this._t)\n }).asReadonly()\n\n private themeLinkElement?: HTMLLinkElement\n\n constructor() {\n if (this.options?.themePath) {\n this.loadTheme(this.options.themePath)\n }\n }\n\n /**\n * Lazy-Load highlight.js library\n */\n private async loadLibrary(): Promise<HLJSApi> {\n if (this.options) {\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\n }\n if (this.options.fullLibraryLoader && this.options.languages) {\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\n }\n if (this.options.coreLibraryLoader && !this.options.languages) {\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\n }\n if (!this.options.coreLibraryLoader && this.options.languages) {\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\n }\n if (this.options.fullLibraryLoader) {\n return this.options.fullLibraryLoader()\n }\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\n }\n }\n throw new Error(LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS)\n }\n\n /**\n * Lazy-load highlight.js languages\n */\n private async loadLanguages(hljs: HLJSApi) {\n await Promise.all(Object.entries(this.options?.languages || {})\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\n return hljs\n }\n\n /**\n * Reload theme styles\n */\n setTheme(path: string): void {\n if (this.themeLinkElement) {\n this.themeLinkElement.href = path\n } else {\n this.loadTheme(path)\n }\n }\n\n /**\n * Load theme\n */\n private loadTheme(path: string): void {\n this.themeLinkElement = this.document.createElement('link')\n this.themeLinkElement.href = path\n this.themeLinkElement.type = 'text/css'\n this.themeLinkElement.rel = 'stylesheet'\n this.themeLinkElement.media = 'screen,print'\n this.document.head.appendChild(this.themeLinkElement)\n }\n}\n","import { Injectable, inject } from '@angular/core'\n\nimport { HighlightLoader } from './highlight.loader'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HighlightJS {\n\n private readonly loader = inject(HighlightLoader)\n\n readonly hljs = this.loader.hljs.value\n\n}\n","/// <reference types=\"trusted-types\" />\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\n * @internal\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\n/**\r\n * @internal\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\n/**\r\n * @internal\r\n */\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\n Directive,\n ElementRef,\n InputSignal,\n OutputEmitterRef,\n SecurityContext,\n WritableSignal,\n effect,\n inject\n} from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js'\nimport { HighlightJS } from './highlight.service'\nimport { trustedHTMLFromStringBypass } from './trusted-types'\n\n@Directive()\nexport abstract class HighlightBase {\n\n protected readonly hljs: HighlightJS = inject(HighlightJS)\n\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\n\n /**\n * Code to highlight\n */\n abstract readonly code: InputSignal<string | undefined>\n\n /**\n * Highlighted result\n */\n abstract readonly highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\n\n /**\n * Stream that emits when code string is highlighted\n */\n abstract readonly highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\n\n constructor() {\n effect(() => {\n const code = this.code()\n if (!code) {\n this.setTextContent('')\n return\n }\n if (!this.hljs.hljs()) {\n // Until Highlight.js loads, the code shows as text; code that's already there, e.g. highlighted on the\n // server, stays as it is, so a hydrated page keeps its highlighting.\n if (this.nativeElement.textContent !== code) {\n this.setTextContent(code)\n }\n return\n }\n const res = this.highlightElement(code)\n if (res) {\n this.setInnerHTML(res.value)\n this.highlightResult.set(res)\n // Forward highlight response to the highlighted output\n this.highlighted.emit(res)\n } else {\n // A language Highlight.js doesn't know shows as text\n this.setTextContent(code)\n this.highlightResult.set(undefined)\n }\n })\n }\n\n /**\n * Highlights the code with the loaded Highlight.js, or returns `undefined` to show it as text\n */\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\n\n private setTextContent(content: string): void {\n this.nativeElement.textContent = content\n }\n\n private setInnerHTML(content?: string): void {\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\n ) as any\n }\n}\n","import {\n Directive,\n input,\n output,\n signal\n} from '@angular/core'\nimport type { AutoHighlightResult } from 'highlight.js'\nimport { HighlightBase } from './highlight-base.directive'\n\n@Directive({\n selector: '[nxtHighlightAuto]',\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\n host: {\n '[class.hljs]': 'true'\n }\n})\nexport class HighlightAutoDirective extends HighlightBase {\n\n /**\n * Code to highlight\n */\n readonly code = input<string>(undefined, { alias: 'nxtHighlightAuto' })\n\n /**\n * Highlighted result\n */\n readonly highlightResult = signal<AutoHighlightResult | undefined>(undefined)\n\n /**\n * An optional array of language names and aliases restricting detection to only those languages\n *\n * The subset can also be set with configure, but the local parameter overrides the option if set.\n */\n readonly languages = input<string[]>()\n\n /**\n * Stream that emits when code string is highlighted\n */\n readonly highlighted = output<AutoHighlightResult>()\n\n protected highlightElement(code: string) {\n const hljs = this.hljs.hljs()\n return hljs?.highlightAuto(code, this.languages())\n }\n}\n\n","import {\n booleanAttribute,\n Directive,\n input,\n output,\n signal\n} from '@angular/core'\nimport type { HighlightResult } from 'highlight.js'\nimport { HighlightBase } from './highlight-base.directive'\n\n@Directive({\n selector: '[nxtHighlight]',\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\n host: {\n '[class.hljs]': 'true'\n }\n})\nexport class HighlightDirective extends HighlightBase {\n\n /**\n * Code to highlight\n */\n readonly code = input<string>(undefined, { alias: 'nxtHighlight' })\n\n /**\n * Highlighted result\n */\n readonly highlightResult = signal<HighlightResult | undefined>(undefined)\n\n /**\n * The language name highlight only one language\n *\n * Without it, or with a language that isn't loaded, the code shows as text.\n */\n readonly language = input<string>()\n\n /**\n * An optional flag, when set to true it forces highlighting to finish even in case of detecting\n * illegal syntax for the language instead of throwing an exception\n */\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\n transform: booleanAttribute\n })\n\n /**\n * Stream that emits when code string is highlighted\n */\n readonly highlighted = output<HighlightResult>()\n\n highlightElement(code: string) {\n const hljs = this.hljs.hljs()\n const language = this.language()\n if (!language || !hljs?.getLanguage(language)) {\n return undefined\n }\n return hljs.highlight(code, {\n language,\n ignoreIllegals: this.ignoreIllegals()\n })\n }\n}\n"],"mappings":"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"}
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": "22.0.0",
5
+ "version": "22.1.0",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "repository": {
@@ -1,153 +1,146 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, Provider, Signal, PipeTransform } from '@angular/core';
3
- import * as nxt_highlightjs_extras from 'nxt-highlightjs/extras';
4
- import { HttpClient } from '@angular/common/http';
5
- import { Observable } from 'rxjs';
6
- import { RxResourceOptions } from '@angular/core/rxjs-interop';
7
-
1
+ import * as i0 from "@angular/core";
2
+ import { InjectionToken, PipeTransform, Provider, Signal } from "@angular/core";
3
+ import { HttpClient } from "@angular/common/http";
4
+ import { Observable } from "rxjs";
5
+ import { RxResourceOptions } from "@angular/core/rxjs-interop";
8
6
  /**
9
7
  * Injection token used to provide the current location to `codeFromUrl` pipe.
10
8
  * Used to handle server-side rendering and to stub out during unit tests.
11
9
  */
12
- declare const NXT_HIGHLIGHT_FILE_LOCATION: InjectionToken<CodeFileLocation>;
10
+ export declare const NXT_HIGHLIGHT_FILE_LOCATION: InjectionToken<CodeFileLocation>;
13
11
  /**
14
12
  * @internal
15
13
  */
16
- interface CodeFileLocation {
17
- formatPathname: (path: string) => string;
14
+ export interface CodeFileLocation {
15
+ formatPathname: (path: string) => string;
18
16
  }
19
17
  /** @internal */
20
- declare function CODE_FILE_LOCATION_FACTORY(): {
21
- formatPathname: (path: string) => string;
18
+ export declare function CODE_FILE_LOCATION_FACTORY(): {
19
+ formatPathname: (path: string) => string;
22
20
  };
23
-
24
21
  /** @internal */
25
- declare function isUrl(url: string): boolean;
26
- interface GistOptions {
27
- clientId: string;
28
- clientSecret: string;
22
+ export declare function isUrl(url: string): boolean;
23
+ export interface GistOptions {
24
+ clientId: string;
25
+ clientSecret: string;
29
26
  }
30
27
  /**
31
28
  * @internal
32
29
  */
33
- declare const NXT_GIST_OPTIONS: InjectionToken<GistOptions>;
34
- declare function provideGistOptions(options: GistOptions): Provider[];
30
+ export declare const NXT_GIST_OPTIONS: InjectionToken<GistOptions>;
31
+ export declare function provideGistOptions(options: GistOptions): Provider[];
35
32
  interface Owner {
36
- login: string;
37
- id: number;
38
- node_id: string;
39
- avatar_url: string;
40
- gravatar_id: string;
41
- url: string;
42
- html_url: string;
43
- followers_url: string;
44
- following_url: string;
45
- gists_url: string;
46
- starred_url: string;
47
- subscriptions_url: string;
48
- organizations_url: string;
49
- repos_url: string;
50
- events_url: string;
51
- received_events_url: string;
52
- type: string;
53
- site_admin: boolean;
33
+ login: string;
34
+ id: number;
35
+ node_id: string;
36
+ avatar_url: string;
37
+ gravatar_id: string;
38
+ url: string;
39
+ html_url: string;
40
+ followers_url: string;
41
+ following_url: string;
42
+ gists_url: string;
43
+ starred_url: string;
44
+ subscriptions_url: string;
45
+ organizations_url: string;
46
+ repos_url: string;
47
+ events_url: string;
48
+ received_events_url: string;
49
+ type: string;
50
+ site_admin: boolean;
54
51
  }
55
52
  interface User {
56
- login: string;
57
- id: number;
58
- node_id: string;
59
- avatar_url: string;
60
- gravatar_id: string;
61
- url: string;
62
- html_url: string;
63
- followers_url: string;
64
- following_url: string;
65
- gists_url: string;
66
- starred_url: string;
67
- subscriptions_url: string;
68
- organizations_url: string;
69
- repos_url: string;
70
- events_url: string;
71
- received_events_url: string;
72
- type: string;
73
- site_admin: boolean;
53
+ login: string;
54
+ id: number;
55
+ node_id: string;
56
+ avatar_url: string;
57
+ gravatar_id: string;
58
+ url: string;
59
+ html_url: string;
60
+ followers_url: string;
61
+ following_url: string;
62
+ gists_url: string;
63
+ starred_url: string;
64
+ subscriptions_url: string;
65
+ organizations_url: string;
66
+ repos_url: string;
67
+ events_url: string;
68
+ received_events_url: string;
69
+ type: string;
70
+ site_admin: boolean;
74
71
  }
75
72
  interface ChangeStatus {
76
- total: number;
77
- additions: number;
78
- deletions: number;
73
+ total: number;
74
+ additions: number;
75
+ deletions: number;
79
76
  }
80
77
  interface History {
81
- user: User;
82
- version: string;
83
- committed_at: Date;
84
- change_status: ChangeStatus;
85
- url: string;
78
+ user: User;
79
+ version: string;
80
+ committed_at: Date;
81
+ change_status: ChangeStatus;
82
+ url: string;
86
83
  }
87
- interface GistFile {
88
- filename: string;
89
- type: string;
90
- language: string;
91
- raw_url: string;
92
- size: number;
93
- truncated: boolean;
94
- content: string;
84
+ export interface GistFile {
85
+ filename: string;
86
+ type: string;
87
+ language: string;
88
+ raw_url: string;
89
+ size: number;
90
+ truncated: boolean;
91
+ content: string;
95
92
  }
96
93
  interface Files {
97
- [fileName: string]: GistFile;
94
+ [fileName: string]: GistFile;
98
95
  }
99
- interface Gist {
100
- url: string;
101
- forks_url: string;
102
- commits_url: string;
103
- id: string;
104
- node_id: string;
105
- git_pull_url: string;
106
- git_push_url: string;
107
- html_url: string;
108
- files: Files;
109
- public: boolean;
110
- created_at: Date;
111
- updated_at: Date;
112
- description: string;
113
- comments: number;
114
- user?: any;
115
- comments_url: string;
116
- owner: Owner;
117
- forks: any[];
118
- history: History[];
119
- truncated: boolean;
96
+ export interface Gist {
97
+ url: string;
98
+ forks_url: string;
99
+ commits_url: string;
100
+ id: string;
101
+ node_id: string;
102
+ git_pull_url: string;
103
+ git_push_url: string;
104
+ html_url: string;
105
+ files: Files;
106
+ public: boolean;
107
+ created_at: Date;
108
+ updated_at: Date;
109
+ description: string;
110
+ comments: number;
111
+ user?: any;
112
+ comments_url: string;
113
+ owner: Owner;
114
+ forks: any[];
115
+ history: History[];
116
+ truncated: boolean;
120
117
  }
121
-
122
118
  /** @internal */
123
- declare class CodeLoader {
124
- readonly http: HttpClient;
125
- readonly options: nxt_highlightjs_extras.GistOptions | null;
126
- private readonly pendingTasks;
127
- fetchFile(url: string, options: any): Observable<any>;
128
- static ɵfac: i0.ɵɵFactoryDeclaration<CodeLoader, never>;
129
- static ɵprov: i0.ɵɵInjectableDeclaration<CodeLoader>;
119
+ export declare class CodeLoader {
120
+ readonly http: HttpClient;
121
+ readonly options: import("nxt-highlightjs/extras").GistOptions | null;
122
+ private readonly pendingTasks;
123
+ fetchFile(url: string, options: any): Observable<any>;
124
+ static ɵfac: i0.ɵɵFactoryDeclaration<CodeLoader, never>;
125
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
130
126
  }
131
127
  /**
132
128
  * Code resource by URL
133
129
  *
134
130
  * @param url File raw link
135
131
  */
136
- declare function fileResource(url: string | Signal<string>, _options?: Omit<RxResourceOptions<string, string>, 'params' | 'stream'> & {
137
- formatUrl?: boolean;
138
- }): i0.ResourceRef<string | undefined>;
132
+ export declare function fileResource(url: string | Signal<string>, _options?: Omit<RxResourceOptions<string, string>, 'params' | 'stream'> & {
133
+ formatUrl?: boolean;
134
+ }): import("@angular/core").ResourceRef<string | undefined>;
139
135
  /**
140
136
  * Gist resource by id
141
137
  *
142
138
  * @param id Gist ID
143
139
  */
144
- declare function gistResource(id: string | Signal<string>, options?: Omit<RxResourceOptions<Gist, string>, 'params' | 'stream'>): i0.ResourceRef<Gist | undefined>;
145
-
146
- declare class GistFilePipe implements PipeTransform {
147
- transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined;
148
- static ɵfac: i0.ɵɵFactoryDeclaration<GistFilePipe, never>;
149
- static ɵpipe: i0.ɵɵPipeDeclaration<GistFilePipe, "gistFile", true>;
140
+ export declare function gistResource(id: string | Signal<string>, options?: Omit<RxResourceOptions<Gist, string>, 'params' | 'stream'>): import("@angular/core").ResourceRef<Gist | undefined>;
141
+ export declare class GistFilePipe implements PipeTransform {
142
+ transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined;
143
+ static ɵfac: i0.ɵɵFactoryDeclaration<GistFilePipe, never>;
144
+ static ɵpipe: i0.ɵɵPipeDeclaration<GistFilePipe, "gistFile", true>;
150
145
  }
151
-
152
- export { CODE_FILE_LOCATION_FACTORY, CodeLoader, GistFilePipe, NXT_GIST_OPTIONS, NXT_HIGHLIGHT_FILE_LOCATION, fileResource, gistResource, isUrl, provideGistOptions };
153
- export type { CodeFileLocation, Gist, GistFile, GistOptions };
146
+ export {};
@@ -1,18 +1,25 @@
1
- import { LineNumbersOptions } from 'nxt-highlightjs';
2
- import * as _angular_core from '@angular/core';
3
-
4
- declare function activateLineNumbers(document: Document): (code: string, options?: LineNumbersOptions) => string;
5
-
6
- declare class HighlightLineNumbersDirective {
7
- private readonly options;
8
- private readonly hljs;
9
- private readonly highlight;
10
- private readonly nativeElement;
11
- readonly startFrom: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
12
- readonly singleLine: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
13
- constructor();
14
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightLineNumbersDirective, never>;
15
- 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>;
16
- }
17
-
18
- export { HighlightLineNumbersDirective, activateLineNumbers };
1
+ import { LineNumbersOptions } from "nxt-highlightjs";
2
+ import * as i0 from "@angular/core";
3
+ export declare function activateLineNumbers(document: Document): (code: string, options?: LineNumbersOptions) => string;
4
+ export declare class HighlightLineNumbersDirective {
5
+ private readonly options;
6
+ private readonly hljs;
7
+ private readonly highlight;
8
+ private readonly nativeElement;
9
+ readonly startFrom: import("@angular/core").InputSignalWithTransform<number | undefined, unknown>;
10
+ readonly singleLine: import("@angular/core").InputSignalWithTransform<boolean | undefined, unknown>;
11
+ constructor();
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightLineNumbersDirective, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<HighlightLineNumbersDirective, "[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]", never, {
14
+ "startFrom": {
15
+ "alias": "startFrom";
16
+ "required": false;
17
+ "isSignal": true;
18
+ };
19
+ "singleLine": {
20
+ "alias": "singleLine";
21
+ "required": false;
22
+ "isSignal": true;
23
+ };
24
+ }, {}, never, never, true, never>;
25
+ }