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.
package/extras/index.d.ts CHANGED
@@ -1,5 +1,152 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="nxt-highlightjs/extras" />
5
- export * from './public_api';
1
+ import * as i0 from '@angular/core';
2
+ import { PipeTransform, InjectionToken, Provider, OnDestroy, EventEmitter } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+
5
+ declare class CodeFromUrlPipe implements PipeTransform {
6
+ private readonly location;
7
+ private readonly loader;
8
+ transform(url: string): Observable<string>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<CodeFromUrlPipe, never>;
10
+ static ɵpipe: i0.ɵɵPipeDeclaration<CodeFromUrlPipe, "codeFromUrl", true>;
11
+ }
12
+
13
+ declare function isUrl(url: string): boolean;
14
+ interface GistOptions {
15
+ clientId: string;
16
+ clientSecret: string;
17
+ }
18
+ declare const NXT_GIST_OPTIONS: InjectionToken<GistOptions>;
19
+ declare function provideGistOptions(options: GistOptions): Provider[];
20
+ interface Owner {
21
+ login: string;
22
+ id: number;
23
+ node_id: string;
24
+ avatar_url: string;
25
+ gravatar_id: string;
26
+ url: string;
27
+ html_url: string;
28
+ followers_url: string;
29
+ following_url: string;
30
+ gists_url: string;
31
+ starred_url: string;
32
+ subscriptions_url: string;
33
+ organizations_url: string;
34
+ repos_url: string;
35
+ events_url: string;
36
+ received_events_url: string;
37
+ type: string;
38
+ site_admin: boolean;
39
+ }
40
+ interface User {
41
+ login: string;
42
+ id: number;
43
+ node_id: string;
44
+ avatar_url: string;
45
+ gravatar_id: string;
46
+ url: string;
47
+ html_url: string;
48
+ followers_url: string;
49
+ following_url: string;
50
+ gists_url: string;
51
+ starred_url: string;
52
+ subscriptions_url: string;
53
+ organizations_url: string;
54
+ repos_url: string;
55
+ events_url: string;
56
+ received_events_url: string;
57
+ type: string;
58
+ site_admin: boolean;
59
+ }
60
+ interface ChangeStatus {
61
+ total: number;
62
+ additions: number;
63
+ deletions: number;
64
+ }
65
+ interface History {
66
+ user: User;
67
+ version: string;
68
+ committed_at: Date;
69
+ change_status: ChangeStatus;
70
+ url: string;
71
+ }
72
+ interface GistFile {
73
+ filename: string;
74
+ type: string;
75
+ language: string;
76
+ raw_url: string;
77
+ size: number;
78
+ truncated: boolean;
79
+ content: string;
80
+ }
81
+ interface Files {
82
+ [fileName: string]: GistFile;
83
+ }
84
+ interface Gist {
85
+ url: string;
86
+ forks_url: string;
87
+ commits_url: string;
88
+ id: string;
89
+ node_id: string;
90
+ git_pull_url: string;
91
+ git_push_url: string;
92
+ html_url: string;
93
+ files: Files;
94
+ public: boolean;
95
+ created_at: Date;
96
+ updated_at: Date;
97
+ description: string;
98
+ comments: number;
99
+ user?: any;
100
+ comments_url: string;
101
+ owner: Owner;
102
+ forks: any[];
103
+ history: History[];
104
+ truncated: boolean;
105
+ }
106
+
107
+ declare class CodeLoader {
108
+ private readonly http;
109
+ private readonly options;
110
+ /**
111
+ * Get plus code
112
+ *
113
+ * @param id Gist ID
114
+ */
115
+ getCodeFromGist(id: string): Observable<Gist>;
116
+ /**
117
+ * Get code by URL
118
+ *
119
+ * @param url File raw link
120
+ */
121
+ getCodeFromUrl(url: string): Observable<string>;
122
+ private fetchFile;
123
+ static ɵfac: i0.ɵɵFactoryDeclaration<CodeLoader, never>;
124
+ static ɵprov: i0.ɵɵInjectableDeclaration<CodeLoader>;
125
+ }
126
+
127
+ declare class GistDirective implements OnDestroy {
128
+ private readonly loader;
129
+ private readonly pendingTasks;
130
+ private readonly cdRef;
131
+ private subscription?;
132
+ set gist(value: string);
133
+ gistLoad: EventEmitter<Gist>;
134
+ gistError: EventEmitter<any>;
135
+ ngOnDestroy(): void;
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<GistDirective, never>;
137
+ static ɵdir: i0.ɵɵDirectiveDeclaration<GistDirective, "[nxtGist]", never, { "gist": { "alias": "nxtGist"; "required": false; }; }, { "gistLoad": "gistLoad"; "gistError": "gistError"; }, never, never, true, never>;
138
+ }
139
+ declare class GistFilePipe implements PipeTransform {
140
+ transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined;
141
+ static ɵfac: i0.ɵɵFactoryDeclaration<GistFilePipe, never>;
142
+ static ɵpipe: i0.ɵɵPipeDeclaration<GistFilePipe, "gistFile", true>;
143
+ }
144
+
145
+ declare class HighlightExstrasModule {
146
+ static ɵfac: i0.ɵɵFactoryDeclaration<HighlightExstrasModule, never>;
147
+ static ɵmod: i0.ɵɵNgModuleDeclaration<HighlightExstrasModule, never, [typeof GistDirective, typeof GistFilePipe, typeof CodeFromUrlPipe], [typeof GistDirective, typeof GistFilePipe, typeof CodeFromUrlPipe]>;
148
+ static ɵinj: i0.ɵɵInjectorDeclaration<HighlightExstrasModule>;
149
+ }
150
+
151
+ export { CodeFromUrlPipe, CodeLoader, GistDirective, GistFilePipe, HighlightExstrasModule, NXT_GIST_OPTIONS, isUrl, provideGistOptions };
152
+ export type { Gist, GistFile, GistOptions };
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, Pipe, PendingTasks, ChangeDetectorRef, EventEmitter, Directive, Input, Output, NgModule } from '@angular/core';
3
- import { DOCUMENT, APP_BASE_HREF } from '@angular/common';
2
+ import { InjectionToken, inject, DOCUMENT, Injectable, Pipe, PendingTasks, ChangeDetectorRef, EventEmitter, Output, Input, Directive, NgModule } from '@angular/core';
3
+ import { APP_BASE_HREF } from '@angular/common';
4
4
  import { HttpClient, HttpParams } from '@angular/common/http';
5
5
  import { shareReplay, EMPTY } from 'rxjs';
6
6
 
@@ -79,10 +79,10 @@ class CodeLoader {
79
79
  }
80
80
  return EMPTY;
81
81
  }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CodeLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CodeLoader, providedIn: 'root' }); }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeLoader, providedIn: 'root' }); }
84
84
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CodeLoader, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeLoader, decorators: [{
86
86
  type: Injectable,
87
87
  args: [{
88
88
  providedIn: 'root'
@@ -97,10 +97,10 @@ class CodeFromUrlPipe {
97
97
  transform(url) {
98
98
  return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url));
99
99
  }
100
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CodeFromUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
101
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: CodeFromUrlPipe, isStandalone: true, name: "codeFromUrl" }); }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeFromUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
101
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: CodeFromUrlPipe, isStandalone: true, name: "codeFromUrl" }); }
102
102
  }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: CodeFromUrlPipe, decorators: [{
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeFromUrlPipe, decorators: [{
104
104
  type: Pipe,
105
105
  args: [{
106
106
  name: 'codeFromUrl'
@@ -138,10 +138,10 @@ class GistDirective {
138
138
  this.subscription?.unsubscribe();
139
139
  this.subscription = undefined;
140
140
  }
141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: GistDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
142
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.3", type: GistDirective, isStandalone: true, selector: "[nxtGist]", inputs: { gist: ["nxtGist", "gist"] }, outputs: { gistLoad: "gistLoad", gistError: "gistError" }, ngImport: i0 }); }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
142
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.5", type: GistDirective, isStandalone: true, selector: "[nxtGist]", inputs: { gist: ["nxtGist", "gist"] }, outputs: { gistLoad: "gistLoad", gistError: "gistError" }, ngImport: i0 }); }
143
143
  }
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: GistDirective, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistDirective, decorators: [{
145
145
  type: Directive,
146
146
  args: [{
147
147
  selector: '[nxtGist]'
@@ -160,10 +160,10 @@ class GistFilePipe {
160
160
  return;
161
161
  return gist?.files?.[fileName];
162
162
  }
163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: GistFilePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
164
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: GistFilePipe, isStandalone: true, name: "gistFile" }); }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistFilePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
164
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: GistFilePipe, isStandalone: true, name: "gistFile" }); }
165
165
  }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: GistFilePipe, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistFilePipe, decorators: [{
167
167
  type: Pipe,
168
168
  args: [{
169
169
  name: 'gistFile'
@@ -171,15 +171,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
171
171
  }] });
172
172
 
173
173
  class HighlightExstrasModule {
174
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightExstrasModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
175
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: HighlightExstrasModule, imports: [GistDirective,
174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
175
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule, imports: [GistDirective,
176
176
  GistFilePipe,
177
177
  CodeFromUrlPipe], exports: [GistDirective,
178
178
  GistFilePipe,
179
179
  CodeFromUrlPipe] }); }
180
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightExstrasModule }); }
180
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule }); }
181
181
  }
182
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightExstrasModule, decorators: [{
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule, decorators: [{
183
183
  type: NgModule,
184
184
  args: [{
185
185
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"nxt-highlightjs-extras.mjs","sources":["../../../packages/highlightjs/extras/src/code-file-location.ts","../../../packages/highlightjs/extras/src/gist.model.ts","../../../packages/highlightjs/extras/src/code-loader.ts","../../../packages/highlightjs/extras/src/code-from-url.ts","../../../packages/highlightjs/extras/src/gist.ts","../../../packages/highlightjs/extras/src/highlight-extras.module.ts","../../../packages/highlightjs/extras/src/nxt-highlightjs-extras.ts"],"sourcesContent":["import { APP_BASE_HREF, DOCUMENT } from '@angular/common'\r\nimport { inject, InjectionToken } from '@angular/core'\r\n\r\n/**\r\n * Injection token used to provide the current location to `codeFromUrl` pipe.\r\n * Used to handle server-side rendering and to stub out during unit tests.\r\n */\r\nexport const NXT_HIGHLIGHT_FILE_LOCATION = new InjectionToken<CodeFileLocation>('NXT_HIGHLIGHT_FILE_LOCATION', {\r\n providedIn: 'root',\r\n factory: CODE_FILE_LOCATION_FACTORY\r\n})\r\n\r\nexport interface CodeFileLocation {\r\n formatPathname: (path: string) => string\r\n}\r\n\r\nexport function CODE_FILE_LOCATION_FACTORY() {\r\n const location = inject(DOCUMENT)?.location\r\n const base = inject(APP_BASE_HREF, { optional: true })?.replace(/\\/+$/igm, '')\r\n\r\n return {\r\n // Note that this needs to be a function, rather than a property, because Angular\r\n // will only resolve it once, but we want the current path on each call.\r\n // getPathname: () => (location ? location.pathname + location.search : ''),\r\n formatPathname: (path: string) => {\r\n const origin = (location ? location.origin : '').replace(/\\/+$/igm, '')\r\n if (path.startsWith('/'))\r\n return origin + path\r\n\r\n let prefix = base ?? origin\r\n if (prefix)\r\n prefix += '/'\r\n\r\n return prefix + path\r\n }\r\n }\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core'\r\n\r\nexport function isUrl(url: string): boolean {\r\n const regExp: RegExp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!]))?/\r\n return regExp.test(url)\r\n}\r\n\r\nexport interface GistOptions {\r\n clientId: string\r\n clientSecret: string\r\n}\r\n\r\nexport const NXT_GIST_OPTIONS = new InjectionToken<GistOptions>('NXT_GIST_OPTIONS')\r\n\r\nexport function provideGistOptions(options: GistOptions): Provider[] {\r\n return [\r\n {\r\n provide: NXT_GIST_OPTIONS,\r\n useValue: options\r\n }\r\n ]\r\n}\r\n\r\ninterface Owner {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface User {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface ChangeStatus {\r\n total: number\r\n additions: number\r\n deletions: number\r\n}\r\n\r\ninterface History {\r\n user: User\r\n version: string\r\n committed_at: Date\r\n change_status: ChangeStatus\r\n url: string\r\n}\r\n\r\nexport interface GistFile {\r\n filename: string\r\n type: string\r\n language: string\r\n raw_url: string\r\n size: number\r\n truncated: boolean\r\n content: string\r\n}\r\n\r\ninterface Files {\r\n [fileName: string]: GistFile\r\n}\r\n\r\nexport interface Gist {\r\n url: string\r\n forks_url: string\r\n commits_url: string\r\n id: string\r\n node_id: string\r\n git_pull_url: string\r\n git_push_url: string\r\n html_url: string\r\n files: Files\r\n public: boolean\r\n created_at: Date\r\n updated_at: Date\r\n description: string\r\n comments: number\r\n user?: any\r\n comments_url: string\r\n owner: Owner\r\n forks: any[]\r\n history: History[]\r\n truncated: boolean\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http'\r\nimport { inject, Injectable } from '@angular/core'\r\nimport { EMPTY, Observable, shareReplay } from 'rxjs'\r\nimport { Gist, isUrl, NXT_GIST_OPTIONS } from './gist.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CodeLoader {\r\n\r\n private readonly http = inject(HttpClient)\r\n private readonly options = inject(NXT_GIST_OPTIONS, { optional: true })\r\n\r\n /**\r\n * Get plus code\r\n *\r\n * @param id Gist ID\r\n */\r\n getCodeFromGist(id: string): Observable<Gist> {\r\n let params: HttpParams | undefined\r\n if (this.options?.clientId && this.options?.clientSecret) {\r\n params = new HttpParams().set('client_id', this.options.clientId).set('client_secret', this.options.clientSecret)\r\n }\r\n return this.fetchFile(`https://api.github.com/gists/${id}`, { params, responseType: 'json' })\r\n }\r\n\r\n /**\r\n * Get code by URL\r\n *\r\n * @param url File raw link\r\n */\r\n getCodeFromUrl(url: string): Observable<string> {\r\n return this.fetchFile(url, { responseType: 'text' })\r\n }\r\n\r\n private fetchFile(url: string, options: any): Observable<any> {\r\n // Check if URL is valid\r\n if (isUrl(url)) {\r\n return this.http.get(url, options).pipe(\r\n // Catch response\r\n shareReplay(1)\r\n )\r\n }\r\n return EMPTY\r\n }\r\n\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core'\r\nimport { Observable } from 'rxjs'\r\nimport { NXT_HIGHLIGHT_FILE_LOCATION } from './code-file-location'\r\nimport { CodeLoader } from './code-loader'\r\nimport { isUrl } from './gist.model'\r\n\r\n@Pipe({\r\n name: 'codeFromUrl'\r\n})\r\nexport class CodeFromUrlPipe implements PipeTransform {\r\n\r\n private readonly location = inject(NXT_HIGHLIGHT_FILE_LOCATION)\r\n private readonly loader = inject(CodeLoader)\r\n\r\n transform(url: string): Observable<string> {\r\n return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url))\r\n }\r\n}\r\n","import { ChangeDetectorRef, Directive, EventEmitter, inject, Input, OnDestroy, Output, PendingTasks, Pipe, PipeTransform } from '@angular/core'\r\nimport { Subscription } from 'rxjs'\r\nimport { CodeLoader } from './code-loader'\r\nimport { Gist, GistFile } from './gist.model'\r\n\r\n@Directive({\r\n selector: '[nxtGist]'\r\n})\r\nexport class GistDirective implements OnDestroy {\r\n\r\n private readonly loader = inject(CodeLoader)\r\n private readonly pendingTasks = inject(PendingTasks)\r\n private readonly cdRef = inject(ChangeDetectorRef)\r\n private subscription?: Subscription\r\n\r\n @Input('nxtGist')\r\n set gist(value: string) {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n\r\n if (value) {\r\n const done = this.pendingTasks.add()\r\n this.subscription = this.loader.getCodeFromGist(value).subscribe({\r\n next: (gist: Gist) => {\r\n this.gistLoad.emit(gist)\r\n this.cdRef.detectChanges()\r\n done()\r\n },\r\n error: (err) => {\r\n this.gistError.emit(err)\r\n this.cdRef.detectChanges()\r\n done()\r\n }\r\n })\r\n }\r\n }\r\n\r\n @Output() gistLoad: EventEmitter<Gist> = new EventEmitter<Gist>()\r\n\r\n @Output() gistError: EventEmitter<any> = new EventEmitter<any>()\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'gistFile'\r\n})\r\nexport class GistFilePipe implements PipeTransform {\r\n transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined {\r\n if (!fileName)\r\n return\r\n return gist?.files?.[fileName]\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { CodeFromUrlPipe } from './code-from-url'\r\nimport { GistDirective, GistFilePipe } from './gist'\r\n\r\n@NgModule({\r\n imports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ],\r\n exports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ]\r\n})\r\nexport class HighlightExstrasModule { }\r\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-extras.mjs","sources":["../../../packages/highlightjs/extras/src/code-file-location.ts","../../../packages/highlightjs/extras/src/gist.model.ts","../../../packages/highlightjs/extras/src/code-loader.ts","../../../packages/highlightjs/extras/src/code-from-url.ts","../../../packages/highlightjs/extras/src/gist.ts","../../../packages/highlightjs/extras/src/highlight-extras.module.ts","../../../packages/highlightjs/extras/src/nxt-highlightjs-extras.ts"],"sourcesContent":["import { APP_BASE_HREF } from '@angular/common'\r\nimport { inject, InjectionToken, DOCUMENT } from '@angular/core'\r\n\r\n/**\r\n * Injection token used to provide the current location to `codeFromUrl` pipe.\r\n * Used to handle server-side rendering and to stub out during unit tests.\r\n */\r\nexport const NXT_HIGHLIGHT_FILE_LOCATION = new InjectionToken<CodeFileLocation>('NXT_HIGHLIGHT_FILE_LOCATION', {\r\n providedIn: 'root',\r\n factory: CODE_FILE_LOCATION_FACTORY\r\n})\r\n\r\nexport interface CodeFileLocation {\r\n formatPathname: (path: string) => string\r\n}\r\n\r\nexport function CODE_FILE_LOCATION_FACTORY() {\r\n const location = inject(DOCUMENT)?.location\r\n const base = inject(APP_BASE_HREF, { optional: true })?.replace(/\\/+$/igm, '')\r\n\r\n return {\r\n // Note that this needs to be a function, rather than a property, because Angular\r\n // will only resolve it once, but we want the current path on each call.\r\n // getPathname: () => (location ? location.pathname + location.search : ''),\r\n formatPathname: (path: string) => {\r\n const origin = (location ? location.origin : '').replace(/\\/+$/igm, '')\r\n if (path.startsWith('/'))\r\n return origin + path\r\n\r\n let prefix = base ?? origin\r\n if (prefix)\r\n prefix += '/'\r\n\r\n return prefix + path\r\n }\r\n }\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core'\r\n\r\nexport function isUrl(url: string): boolean {\r\n const regExp: RegExp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!]))?/\r\n return regExp.test(url)\r\n}\r\n\r\nexport interface GistOptions {\r\n clientId: string\r\n clientSecret: string\r\n}\r\n\r\nexport const NXT_GIST_OPTIONS = new InjectionToken<GistOptions>('NXT_GIST_OPTIONS')\r\n\r\nexport function provideGistOptions(options: GistOptions): Provider[] {\r\n return [\r\n {\r\n provide: NXT_GIST_OPTIONS,\r\n useValue: options\r\n }\r\n ]\r\n}\r\n\r\ninterface Owner {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface User {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface ChangeStatus {\r\n total: number\r\n additions: number\r\n deletions: number\r\n}\r\n\r\ninterface History {\r\n user: User\r\n version: string\r\n committed_at: Date\r\n change_status: ChangeStatus\r\n url: string\r\n}\r\n\r\nexport interface GistFile {\r\n filename: string\r\n type: string\r\n language: string\r\n raw_url: string\r\n size: number\r\n truncated: boolean\r\n content: string\r\n}\r\n\r\ninterface Files {\r\n [fileName: string]: GistFile\r\n}\r\n\r\nexport interface Gist {\r\n url: string\r\n forks_url: string\r\n commits_url: string\r\n id: string\r\n node_id: string\r\n git_pull_url: string\r\n git_push_url: string\r\n html_url: string\r\n files: Files\r\n public: boolean\r\n created_at: Date\r\n updated_at: Date\r\n description: string\r\n comments: number\r\n user?: any\r\n comments_url: string\r\n owner: Owner\r\n forks: any[]\r\n history: History[]\r\n truncated: boolean\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http'\r\nimport { inject, Injectable } from '@angular/core'\r\nimport { EMPTY, Observable, shareReplay } from 'rxjs'\r\nimport { Gist, isUrl, NXT_GIST_OPTIONS } from './gist.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CodeLoader {\r\n\r\n private readonly http = inject(HttpClient)\r\n private readonly options = inject(NXT_GIST_OPTIONS, { optional: true })\r\n\r\n /**\r\n * Get plus code\r\n *\r\n * @param id Gist ID\r\n */\r\n getCodeFromGist(id: string): Observable<Gist> {\r\n let params: HttpParams | undefined\r\n if (this.options?.clientId && this.options?.clientSecret) {\r\n params = new HttpParams().set('client_id', this.options.clientId).set('client_secret', this.options.clientSecret)\r\n }\r\n return this.fetchFile(`https://api.github.com/gists/${id}`, { params, responseType: 'json' })\r\n }\r\n\r\n /**\r\n * Get code by URL\r\n *\r\n * @param url File raw link\r\n */\r\n getCodeFromUrl(url: string): Observable<string> {\r\n return this.fetchFile(url, { responseType: 'text' })\r\n }\r\n\r\n private fetchFile(url: string, options: any): Observable<any> {\r\n // Check if URL is valid\r\n if (isUrl(url)) {\r\n return this.http.get(url, options).pipe(\r\n // Catch response\r\n shareReplay(1)\r\n )\r\n }\r\n return EMPTY\r\n }\r\n\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core'\r\nimport { Observable } from 'rxjs'\r\nimport { NXT_HIGHLIGHT_FILE_LOCATION } from './code-file-location'\r\nimport { CodeLoader } from './code-loader'\r\nimport { isUrl } from './gist.model'\r\n\r\n@Pipe({\r\n name: 'codeFromUrl'\r\n})\r\nexport class CodeFromUrlPipe implements PipeTransform {\r\n\r\n private readonly location = inject(NXT_HIGHLIGHT_FILE_LOCATION)\r\n private readonly loader = inject(CodeLoader)\r\n\r\n transform(url: string): Observable<string> {\r\n return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url))\r\n }\r\n}\r\n","import { ChangeDetectorRef, Directive, EventEmitter, inject, Input, OnDestroy, Output, PendingTasks, Pipe, PipeTransform } from '@angular/core'\r\nimport { Subscription } from 'rxjs'\r\nimport { CodeLoader } from './code-loader'\r\nimport { Gist, GistFile } from './gist.model'\r\n\r\n@Directive({\r\n selector: '[nxtGist]'\r\n})\r\nexport class GistDirective implements OnDestroy {\r\n\r\n private readonly loader = inject(CodeLoader)\r\n private readonly pendingTasks = inject(PendingTasks)\r\n private readonly cdRef = inject(ChangeDetectorRef)\r\n private subscription?: Subscription\r\n\r\n @Input('nxtGist')\r\n set gist(value: string) {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n\r\n if (value) {\r\n const done = this.pendingTasks.add()\r\n this.subscription = this.loader.getCodeFromGist(value).subscribe({\r\n next: (gist: Gist) => {\r\n this.gistLoad.emit(gist)\r\n this.cdRef.detectChanges()\r\n done()\r\n },\r\n error: (err) => {\r\n this.gistError.emit(err)\r\n this.cdRef.detectChanges()\r\n done()\r\n }\r\n })\r\n }\r\n }\r\n\r\n @Output() gistLoad: EventEmitter<Gist> = new EventEmitter<Gist>()\r\n\r\n @Output() gistError: EventEmitter<any> = new EventEmitter<any>()\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'gistFile'\r\n})\r\nexport class GistFilePipe implements PipeTransform {\r\n transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined {\r\n if (!fileName)\r\n return\r\n return gist?.files?.[fileName]\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { CodeFromUrlPipe } from './code-from-url'\r\nimport { GistDirective, GistFilePipe } from './gist'\r\n\r\n@NgModule({\r\n imports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ],\r\n exports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ]\r\n})\r\nexport class HighlightExstrasModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -237,10 +237,10 @@ class HighlightLineNumbersDirective {
237
237
  }
238
238
  });
239
239
  }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLineNumbersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
241
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.3", type: HighlightLineNumbersDirective, isStandalone: true, selector: "[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]", inputs: { startFrom: { classPropertyName: "startFrom", publicName: "startFrom", isSignal: true, isRequired: false, transformFunction: null }, singleLine: { classPropertyName: "singleLine", publicName: "singleLine", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLineNumbersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
241
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.5", type: HighlightLineNumbersDirective, isStandalone: true, selector: "[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]", inputs: { startFrom: { classPropertyName: "startFrom", publicName: "startFrom", isSignal: true, isRequired: false, transformFunction: null }, singleLine: { classPropertyName: "singleLine", publicName: "singleLine", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
242
242
  }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLineNumbersDirective, decorators: [{
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLineNumbersDirective, decorators: [{
244
244
  type: Directive,
245
245
  args: [{
246
246
  selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'
@@ -1 +1 @@
1
- {"version":3,"file":"nxt-highlightjs-line-numbers.mjs","sources":["../../../packages/highlightjs/line-numbers/src/line-numbers-lib.ts","../../../packages/highlightjs/line-numbers/src/line-numbers.directive.ts","../../../packages/highlightjs/line-numbers/src/nxt-highlightjs-line-numbers.ts"],"sourcesContent":["interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport function activateLineNumbers(document: Document) {\r\n const TABLE_NAME = 'hljs-ln'\r\n const LINE_NAME = 'hljs-ln-line'\r\n const CODE_BLOCK_NAME = 'hljs-ln-code'\r\n const NUMBERS_BLOCK_NAME = 'hljs-ln-numbers'\r\n const NUMBER_LINE_NAME = 'hljs-ln-n'\r\n const DATA_ATTR_NAME = 'data-line-number'\r\n const BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n addStyles()\r\n\r\n function isHljsLnCodeDescendant(domElt?: HTMLElement | null) {\r\n let curElt = domElt\r\n while (curElt) {\r\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\r\n return true\r\n }\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return false\r\n }\r\n\r\n function getHljsLnTable(hljsLnDomElt?: HTMLElement) {\r\n let curElt = hljsLnDomElt\r\n while (curElt && curElt.nodeName !== 'TABLE') {\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return curElt\r\n }\r\n\r\n // Function to workaround a copy issue with Microsoft Edge.\r\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\r\n // itself wrapped inside a <pre> element, window.getSelection().toString()\r\n // does not contain any line breaks. So we need to get them back using the\r\n // rendered code in the DOM as reference.\r\n function edgeGetSelectedCodeLines(selection: Selection) {\r\n // current selected text without line breaks\r\n const selectionText = selection.toString()\r\n\r\n // get the <td> element wrapping the first line of selected code\r\n let tdAnchor = selection.anchorNode\r\n while (tdAnchor?.nodeName !== 'TD') {\r\n tdAnchor = tdAnchor?.parentNode || null\r\n }\r\n\r\n // get the <td> element wrapping the last line of selected code\r\n let tdFocus = selection.focusNode\r\n while (tdFocus?.nodeName !== 'TD') {\r\n tdFocus = tdFocus?.parentNode || null\r\n }\r\n\r\n // extract line numbers\r\n let firstLineNumber = parseInt((tdAnchor as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n let lastLineNumber = parseInt((tdFocus as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n\r\n // multi-lines copied case\r\n if (firstLineNumber != lastLineNumber) {\r\n\r\n let firstLineText = tdAnchor.textContent\r\n let lastLineText = tdFocus.textContent\r\n\r\n // if the selection was made backward, swap values\r\n if (firstLineNumber > lastLineNumber) {\r\n const tmp = firstLineNumber\r\n firstLineNumber = lastLineNumber\r\n lastLineNumber = tmp\r\n const tmp2 = firstLineText\r\n firstLineText = lastLineText\r\n lastLineText = tmp2\r\n }\r\n\r\n // discard not copied characters in first line\r\n while (selectionText.indexOf(firstLineText || '') !== 0) {\r\n firstLineText = firstLineText!.slice(1)\r\n }\r\n\r\n // discard not copied characters in last line\r\n while (selectionText.lastIndexOf(lastLineText || '') === -1) {\r\n lastLineText = lastLineText!.slice(0, -1)\r\n }\r\n\r\n // reconstruct and return the real copied text\r\n let selectedText = firstLineText\r\n const hljsLnTable = getHljsLnTable(tdAnchor as HTMLElement)\r\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\r\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i])\r\n const codeLineElt = hljsLnTable?.querySelector(codeLineSel)\r\n selectedText += '\\n' + (codeLineElt?.textContent || '')\r\n }\r\n selectedText += '\\n' + lastLineText\r\n return selectedText\r\n // single copied line case\r\n } else {\r\n return selectionText\r\n }\r\n }\r\n\r\n // ensure consistent code copy/paste behavior across all browsers\r\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\r\n document.addEventListener('copy', (e) => {\r\n // get current selection\r\n const selection = window.getSelection()\r\n // override behavior when one wants to copy line of codes\r\n if (isHljsLnCodeDescendant(selection?.anchorNode as HTMLElement | null | undefined)) {\r\n let selectionText: string | null | undefined\r\n // workaround an issue with Microsoft Edge as copied line breaks\r\n // are removed otherwise from the selection string\r\n if (window.navigator.userAgent.indexOf('Edge') !== -1 && selection) {\r\n selectionText = edgeGetSelectedCodeLines(selection)\r\n } else {\r\n // other browsers can directly use the selection string\r\n selectionText = selection?.toString()\r\n }\r\n if (selectionText) {\r\n e.clipboardData?.setData('text/plain', selectionText)\r\n e.preventDefault()\r\n }\r\n }\r\n })\r\n\r\n function addStyles() {\r\n const css = document.createElement('style')\r\n css.innerHTML = format(\r\n '.{0}{border-collapse:collapse}' +\r\n '.{0} td{padding:0}' +\r\n '.{1}:before{content:attr({2})}',\r\n [\r\n TABLE_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME\r\n ])\r\n document.getElementsByTagName('head')[0].appendChild(css)\r\n }\r\n\r\n function lineNumbersBlock(code: string, options?: LineNumbersOptions) {\r\n return lineNumbersInternal(code, options)\r\n }\r\n\r\n function lineNumbersInternal(code: string, options?: LineNumbersOptions) {\r\n\r\n const internalOptions = mapOptions(options)\r\n\r\n return addLineNumbersBlockFor(code, internalOptions)\r\n }\r\n\r\n function addLineNumbersBlockFor(inputHtml: string, options?: LineNumbersOptions) {\r\n const lines = getLines(inputHtml)\r\n\r\n // if last line contains only carriage return remove it\r\n if (lines[lines.length - 1].trim() === '') {\r\n lines.pop()\r\n }\r\n\r\n if (lines.length > 1 || options?.singleLine) {\r\n let html = ''\r\n\r\n for (let i = 0, l = lines.length; i < l; i++) {\r\n html += format(\r\n '<tr>' +\r\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\r\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\r\n '</td>' +\r\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\r\n '{6}' +\r\n '</td>' +\r\n '</tr>',\r\n [\r\n LINE_NAME,\r\n NUMBERS_BLOCK_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME,\r\n CODE_BLOCK_NAME,\r\n i + Number(!!(options?.startFrom)),\r\n lines[i].length > 0 ? lines[i] : ' '\r\n ])\r\n }\r\n\r\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html])\r\n }\r\n\r\n return inputHtml\r\n }\r\n\r\n /**\r\n * @param element Code block.\r\n * @param options External API options.\r\n * @returns Internal API options.\r\n */\r\n function mapOptions(options?: LineNumbersOptions) {\r\n options = options || {}\r\n return {\r\n singleLine: getSingleLineOption(options),\r\n startFrom: getStartFromOption(options)\r\n }\r\n }\r\n\r\n function getSingleLineOption(options?: LineNumbersOptions) {\r\n const defaultValue = false\r\n if (!!options?.singleLine) {\r\n return options.singleLine\r\n }\r\n return defaultValue\r\n }\r\n\r\n function getStartFromOption(options?: LineNumbersOptions) {\r\n const defaultValue = 1\r\n let startFrom = defaultValue\r\n\r\n if (isFinite(options?.startFrom ?? NaN)) {\r\n startFrom = options!.startFrom!\r\n }\r\n\r\n return startFrom\r\n }\r\n\r\n function getLines(text: string) {\r\n if (text.length === 0) return []\r\n return text.split(BREAK_LINE_REGEXP)\r\n }\r\n\r\n ///\r\n /// HELPERS\r\n ///\r\n\r\n /**\r\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\r\n *\r\n * @param formatString\r\n * @param args\r\n */\r\n function format(formatString: string, args: any[]) {\r\n return formatString.replace(/\\{(\\d+)\\}/g, (m, n) => args[n] !== null && args[n] !== undefined ? args[n] : m)\r\n }\r\n\r\n return lineNumbersBlock\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute\r\n} from '@angular/core'\r\nimport { HighlightBase, HighlightJS, NXT_HIGHLIGHT_OPTIONS } from 'nxt-highlightjs'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'\r\n})\r\nexport class HighlightLineNumbersDirective {\r\n\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS)?.lineNumbersOptions\r\n private readonly hljs = inject(HighlightJS)\r\n private readonly highlight = inject(HighlightBase)\r\n private readonly nativeElement = inject(ElementRef<HTMLElement>).nativeElement\r\n\r\n readonly startFrom = input(this.options?.startFrom, {\r\n transform: numberAttribute\r\n })\r\n\r\n readonly singleLine = input(this.options?.singleLine, {\r\n transform: booleanAttribute\r\n })\r\n\r\n constructor() {\r\n effect(() => {\r\n const hljs = this.hljs.hljs()\r\n const result = this.highlight.highlightResult()\r\n if (result?.value) {\r\n if ((hljs as any).lineNumbersBlock) {\r\n const code = (hljs as any).lineNumbersBlock(result.value, {\r\n startFrom: this.startFrom(),\r\n singleLine: this.singleLine()\r\n })\r\n this.nativeElement.innerHTML = code\r\n }\r\n // If lines count is 1, the line numbers library will not add numbers\r\n if (this.nativeElement.firstElementChild?.tagName.toUpperCase() === 'TABLE') {\r\n this.nativeElement.classList.add('hljs-line-numbers')\r\n } else {\r\n this.nativeElement.classList.remove('hljs-line-numbers')\r\n }\r\n }\r\n })\r\n }\r\n}\r\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-line-numbers.mjs","sources":["../../../packages/highlightjs/line-numbers/src/line-numbers-lib.ts","../../../packages/highlightjs/line-numbers/src/line-numbers.directive.ts","../../../packages/highlightjs/line-numbers/src/nxt-highlightjs-line-numbers.ts"],"sourcesContent":["interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport function activateLineNumbers(document: Document) {\r\n const TABLE_NAME = 'hljs-ln'\r\n const LINE_NAME = 'hljs-ln-line'\r\n const CODE_BLOCK_NAME = 'hljs-ln-code'\r\n const NUMBERS_BLOCK_NAME = 'hljs-ln-numbers'\r\n const NUMBER_LINE_NAME = 'hljs-ln-n'\r\n const DATA_ATTR_NAME = 'data-line-number'\r\n const BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n addStyles()\r\n\r\n function isHljsLnCodeDescendant(domElt?: HTMLElement | null) {\r\n let curElt = domElt\r\n while (curElt) {\r\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\r\n return true\r\n }\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return false\r\n }\r\n\r\n function getHljsLnTable(hljsLnDomElt?: HTMLElement) {\r\n let curElt = hljsLnDomElt\r\n while (curElt && curElt.nodeName !== 'TABLE') {\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return curElt\r\n }\r\n\r\n // Function to workaround a copy issue with Microsoft Edge.\r\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\r\n // itself wrapped inside a <pre> element, window.getSelection().toString()\r\n // does not contain any line breaks. So we need to get them back using the\r\n // rendered code in the DOM as reference.\r\n function edgeGetSelectedCodeLines(selection: Selection) {\r\n // current selected text without line breaks\r\n const selectionText = selection.toString()\r\n\r\n // get the <td> element wrapping the first line of selected code\r\n let tdAnchor = selection.anchorNode\r\n while (tdAnchor?.nodeName !== 'TD') {\r\n tdAnchor = tdAnchor?.parentNode || null\r\n }\r\n\r\n // get the <td> element wrapping the last line of selected code\r\n let tdFocus = selection.focusNode\r\n while (tdFocus?.nodeName !== 'TD') {\r\n tdFocus = tdFocus?.parentNode || null\r\n }\r\n\r\n // extract line numbers\r\n let firstLineNumber = parseInt((tdAnchor as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n let lastLineNumber = parseInt((tdFocus as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n\r\n // multi-lines copied case\r\n if (firstLineNumber != lastLineNumber) {\r\n\r\n let firstLineText = tdAnchor.textContent\r\n let lastLineText = tdFocus.textContent\r\n\r\n // if the selection was made backward, swap values\r\n if (firstLineNumber > lastLineNumber) {\r\n const tmp = firstLineNumber\r\n firstLineNumber = lastLineNumber\r\n lastLineNumber = tmp\r\n const tmp2 = firstLineText\r\n firstLineText = lastLineText\r\n lastLineText = tmp2\r\n }\r\n\r\n // discard not copied characters in first line\r\n while (selectionText.indexOf(firstLineText || '') !== 0) {\r\n firstLineText = firstLineText!.slice(1)\r\n }\r\n\r\n // discard not copied characters in last line\r\n while (selectionText.lastIndexOf(lastLineText || '') === -1) {\r\n lastLineText = lastLineText!.slice(0, -1)\r\n }\r\n\r\n // reconstruct and return the real copied text\r\n let selectedText = firstLineText\r\n const hljsLnTable = getHljsLnTable(tdAnchor as HTMLElement)\r\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\r\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i])\r\n const codeLineElt = hljsLnTable?.querySelector(codeLineSel)\r\n selectedText += '\\n' + (codeLineElt?.textContent || '')\r\n }\r\n selectedText += '\\n' + lastLineText\r\n return selectedText\r\n // single copied line case\r\n } else {\r\n return selectionText\r\n }\r\n }\r\n\r\n // ensure consistent code copy/paste behavior across all browsers\r\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\r\n document.addEventListener('copy', (e) => {\r\n // get current selection\r\n const selection = window.getSelection()\r\n // override behavior when one wants to copy line of codes\r\n if (isHljsLnCodeDescendant(selection?.anchorNode as HTMLElement | null | undefined)) {\r\n let selectionText: string | null | undefined\r\n // workaround an issue with Microsoft Edge as copied line breaks\r\n // are removed otherwise from the selection string\r\n if (window.navigator.userAgent.indexOf('Edge') !== -1 && selection) {\r\n selectionText = edgeGetSelectedCodeLines(selection)\r\n } else {\r\n // other browsers can directly use the selection string\r\n selectionText = selection?.toString()\r\n }\r\n if (selectionText) {\r\n e.clipboardData?.setData('text/plain', selectionText)\r\n e.preventDefault()\r\n }\r\n }\r\n })\r\n\r\n function addStyles() {\r\n const css = document.createElement('style')\r\n css.innerHTML = format(\r\n '.{0}{border-collapse:collapse}' +\r\n '.{0} td{padding:0}' +\r\n '.{1}:before{content:attr({2})}',\r\n [\r\n TABLE_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME\r\n ])\r\n document.getElementsByTagName('head')[0].appendChild(css)\r\n }\r\n\r\n function lineNumbersBlock(code: string, options?: LineNumbersOptions) {\r\n return lineNumbersInternal(code, options)\r\n }\r\n\r\n function lineNumbersInternal(code: string, options?: LineNumbersOptions) {\r\n\r\n const internalOptions = mapOptions(options)\r\n\r\n return addLineNumbersBlockFor(code, internalOptions)\r\n }\r\n\r\n function addLineNumbersBlockFor(inputHtml: string, options?: LineNumbersOptions) {\r\n const lines = getLines(inputHtml)\r\n\r\n // if last line contains only carriage return remove it\r\n if (lines[lines.length - 1].trim() === '') {\r\n lines.pop()\r\n }\r\n\r\n if (lines.length > 1 || options?.singleLine) {\r\n let html = ''\r\n\r\n for (let i = 0, l = lines.length; i < l; i++) {\r\n html += format(\r\n '<tr>' +\r\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\r\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\r\n '</td>' +\r\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\r\n '{6}' +\r\n '</td>' +\r\n '</tr>',\r\n [\r\n LINE_NAME,\r\n NUMBERS_BLOCK_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME,\r\n CODE_BLOCK_NAME,\r\n i + Number(!!(options?.startFrom)),\r\n lines[i].length > 0 ? lines[i] : ' '\r\n ])\r\n }\r\n\r\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html])\r\n }\r\n\r\n return inputHtml\r\n }\r\n\r\n /**\r\n * @param element Code block.\r\n * @param options External API options.\r\n * @returns Internal API options.\r\n */\r\n function mapOptions(options?: LineNumbersOptions) {\r\n options = options || {}\r\n return {\r\n singleLine: getSingleLineOption(options),\r\n startFrom: getStartFromOption(options)\r\n }\r\n }\r\n\r\n function getSingleLineOption(options?: LineNumbersOptions) {\r\n const defaultValue = false\r\n if (!!options?.singleLine) {\r\n return options.singleLine\r\n }\r\n return defaultValue\r\n }\r\n\r\n function getStartFromOption(options?: LineNumbersOptions) {\r\n const defaultValue = 1\r\n let startFrom = defaultValue\r\n\r\n if (isFinite(options?.startFrom ?? NaN)) {\r\n startFrom = options!.startFrom!\r\n }\r\n\r\n return startFrom\r\n }\r\n\r\n function getLines(text: string) {\r\n if (text.length === 0) return []\r\n return text.split(BREAK_LINE_REGEXP)\r\n }\r\n\r\n ///\r\n /// HELPERS\r\n ///\r\n\r\n /**\r\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\r\n *\r\n * @param formatString\r\n * @param args\r\n */\r\n function format(formatString: string, args: any[]) {\r\n return formatString.replace(/\\{(\\d+)\\}/g, (m, n) => args[n] !== null && args[n] !== undefined ? args[n] : m)\r\n }\r\n\r\n return lineNumbersBlock\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute\r\n} from '@angular/core'\r\nimport { HighlightBase, HighlightJS, NXT_HIGHLIGHT_OPTIONS } from 'nxt-highlightjs'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'\r\n})\r\nexport class HighlightLineNumbersDirective {\r\n\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS)?.lineNumbersOptions\r\n private readonly hljs = inject(HighlightJS)\r\n private readonly highlight = inject(HighlightBase)\r\n private readonly nativeElement = inject(ElementRef<HTMLElement>).nativeElement\r\n\r\n readonly startFrom = input(this.options?.startFrom, {\r\n transform: numberAttribute\r\n })\r\n\r\n readonly singleLine = input(this.options?.singleLine, {\r\n transform: booleanAttribute\r\n })\r\n\r\n constructor() {\r\n effect(() => {\r\n const hljs = this.hljs.hljs()\r\n const result = this.highlight.highlightResult()\r\n if (result?.value) {\r\n if ((hljs as any).lineNumbersBlock) {\r\n const code = (hljs as any).lineNumbersBlock(result.value, {\r\n startFrom: this.startFrom(),\r\n singleLine: this.singleLine()\r\n })\r\n this.nativeElement.innerHTML = code\r\n }\r\n // If lines count is 1, the line numbers library will not add numbers\r\n if (this.nativeElement.firstElementChild?.tagName.toUpperCase() === 'TABLE') {\r\n this.nativeElement.classList.add('hljs-line-numbers')\r\n } else {\r\n this.nativeElement.classList.remove('hljs-line-numbers')\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, inject, PendingTasks, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute, NgModule } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, inject, DOCUMENT, PendingTasks, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute, NgModule } from '@angular/core';
3
3
  import { DomSanitizer } from '@angular/platform-browser';
4
4
  import { toSignal } from '@angular/core/rxjs-interop';
5
5
  import { from } from 'rxjs';
6
- import { DOCUMENT } from '@angular/common';
7
6
 
8
7
  const NXT_HIGHLIGHT_OPTIONS = new InjectionToken('NXT_HIGHLIGHT_OPTIONS');
9
8
  function provideHighlightOptions(options) {
@@ -300,7 +299,8 @@ class HighlightLoader {
300
299
  this.document = inject(DOCUMENT);
301
300
  this.options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true });
302
301
  this.pendingTasks = inject(PendingTasks);
303
- this.ready = this.pendingTasks.run(() => this.loadLibrary()
302
+ this._t = this.pendingTasks.add();
303
+ this.ready = this.loadLibrary()
304
304
  .then(async (hljs) => {
305
305
  if (this.options?.lineNumbersLoader) {
306
306
  const plugin = await this.options.lineNumbersLoader();
@@ -312,7 +312,8 @@ class HighlightLoader {
312
312
  if (this.options?.highlightOptions)
313
313
  hljs.configure(this.options.highlightOptions);
314
314
  return hljs;
315
- }));
315
+ })
316
+ .finally(this._t);
316
317
  if (this.options?.themePath) {
317
318
  this.loadTheme(this.options.themePath);
318
319
  }
@@ -373,10 +374,10 @@ class HighlightLoader {
373
374
  this.themeLinkElement.media = 'screen,print';
374
375
  this.document.head.appendChild(this.themeLinkElement);
375
376
  }
376
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
377
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLoader, providedIn: 'root' }); }
377
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
378
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLoader, providedIn: 'root' }); }
378
379
  }
379
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLoader, decorators: [{
380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLoader, decorators: [{
380
381
  type: Injectable,
381
382
  args: [{
382
383
  providedIn: 'root'
@@ -478,10 +479,10 @@ class HighlightJS {
478
479
  hljs.lineNumbersBlock(el, options);
479
480
  }
480
481
  }
481
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
482
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
482
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
483
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
483
484
  }
484
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightJS, decorators: [{
485
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightJS, decorators: [{
485
486
  type: Injectable,
486
487
  args: [{
487
488
  providedIn: 'root'
@@ -547,10 +548,10 @@ class HighlightBase {
547
548
  setInnerHTML(content) {
548
549
  this.nativeElement.innerHTML = trustedHTMLFromStringBypass(this.sanitizer.sanitize(SecurityContext.HTML, content || null) || '');
549
550
  }
550
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
551
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.3", type: HighlightBase, isStandalone: true, ngImport: i0 }); }
551
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
552
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.5", type: HighlightBase, isStandalone: true, ngImport: i0 }); }
552
553
  }
553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightBase, decorators: [{
554
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightBase, decorators: [{
554
555
  type: Directive
555
556
  }], ctorParameters: () => [] });
556
557
 
@@ -580,10 +581,10 @@ class HighlightAutoDirective extends HighlightBase {
580
581
  const hljs = this.hljs.hljs();
581
582
  return hljs?.highlightAuto(code, this.languages());
582
583
  }
583
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightAutoDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
584
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.3", type: HighlightAutoDirective, isStandalone: true, selector: "[nxtHighlightAuto]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlightAuto", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }], usesInheritance: true, ngImport: i0 }); }
584
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightAutoDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
585
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.5", type: HighlightAutoDirective, isStandalone: true, selector: "[nxtHighlightAuto]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlightAuto", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }], usesInheritance: true, ngImport: i0 }); }
585
586
  }
586
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightAutoDirective, decorators: [{
587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightAutoDirective, decorators: [{
587
588
  type: Directive,
588
589
  args: [{
589
590
  selector: '[nxtHighlightAuto]',
@@ -628,10 +629,10 @@ class HighlightDirective extends HighlightBase {
628
629
  ignoreIllegals: this.ignoreIllegals()
629
630
  });
630
631
  }
631
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
632
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.3", type: HighlightDirective, isStandalone: true, selector: "[nxtHighlight]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlight", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null }, ignoreIllegals: { classPropertyName: "ignoreIllegals", publicName: "ignoreIllegals", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightDirective }], usesInheritance: true, ngImport: i0 }); }
632
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
633
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.5", type: HighlightDirective, isStandalone: true, selector: "[nxtHighlight]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlight", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null }, ignoreIllegals: { classPropertyName: "ignoreIllegals", publicName: "ignoreIllegals", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightDirective }], usesInheritance: true, ngImport: i0 }); }
633
634
  }
634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightDirective, decorators: [{
635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightDirective, decorators: [{
635
636
  type: Directive,
636
637
  args: [{
637
638
  selector: '[nxtHighlight]',
@@ -643,11 +644,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
643
644
  }] });
644
645
 
645
646
  class HighlightModule {
646
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
647
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule, imports: [HighlightDirective, HighlightAutoDirective], exports: [HighlightDirective, HighlightAutoDirective] }); }
648
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule }); }
647
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
648
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule, imports: [HighlightDirective, HighlightAutoDirective], exports: [HighlightDirective, HighlightAutoDirective] }); }
649
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule }); }
649
650
  }
650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule, decorators: [{
651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule, decorators: [{
651
652
  type: NgModule,
652
653
  args: [{
653
654
  imports: [HighlightDirective, HighlightAutoDirective],