@covalent/markdown-navigator 4.0.0 → 4.1.0-develop.10

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.
Files changed (39) hide show
  1. package/README.md +70 -58
  2. package/_markdon-navigator-theme.scss +22 -0
  3. package/covalent-markdown-navigator.d.ts +2 -2
  4. package/esm2020/covalent-markdown-navigator.mjs +5 -0
  5. package/esm2020/markdown-navigator-window/markdown-navigator-window.component.mjs +84 -0
  6. package/esm2020/markdown-navigator-window-directive/markdown-navigator-window.directive.mjs +32 -0
  7. package/esm2020/markdown-navigator-window-service/markdown-navigator-window.service.mjs +130 -0
  8. package/esm2020/markdown-navigator.component.mjs +391 -0
  9. package/esm2020/markdown-navigator.module.mjs +77 -0
  10. package/esm2020/public_api.mjs +6 -0
  11. package/fesm2015/covalent-markdown-navigator.mjs +712 -0
  12. package/fesm2015/covalent-markdown-navigator.mjs.map +1 -0
  13. package/fesm2020/covalent-markdown-navigator.mjs +700 -0
  14. package/fesm2020/covalent-markdown-navigator.mjs.map +1 -0
  15. package/markdown-navigator-window/markdown-navigator-window.component.d.ts +15 -12
  16. package/markdown-navigator-window-directive/markdown-navigator-window.directive.d.ts +4 -1
  17. package/markdown-navigator-window-service/markdown-navigator-window.service.d.ts +3 -0
  18. package/markdown-navigator.component.d.ts +22 -20
  19. package/markdown-navigator.module.d.ts +17 -0
  20. package/package.json +38 -19
  21. package/{public-api.d.ts → public_api.d.ts} +1 -0
  22. package/bundles/covalent-markdown-navigator.umd.js +0 -1650
  23. package/bundles/covalent-markdown-navigator.umd.js.map +0 -1
  24. package/bundles/covalent-markdown-navigator.umd.min.js +0 -16
  25. package/bundles/covalent-markdown-navigator.umd.min.js.map +0 -1
  26. package/covalent-markdown-navigator.metadata.json +0 -1
  27. package/esm2015/covalent-markdown-navigator.js +0 -11
  28. package/esm2015/index.js +0 -7
  29. package/esm2015/markdown-navigator-window/markdown-navigator-window.component.js +0 -129
  30. package/esm2015/markdown-navigator-window-directive/markdown-navigator-window.directive.js +0 -50
  31. package/esm2015/markdown-navigator-window-service/markdown-navigator-window.service.js +0 -254
  32. package/esm2015/markdown-navigator.component.js +0 -698
  33. package/esm2015/markdown-navigator.module.js +0 -41
  34. package/esm2015/public-api.js +0 -10
  35. package/fesm2015/covalent-markdown-navigator.js +0 -1181
  36. package/fesm2015/covalent-markdown-navigator.js.map +0 -1
  37. package/index.d.ts +0 -1
  38. package/markdown-navigator-window/markdown-navigator-window.component.scss +0 -8
  39. package/markdown-navigator.component.scss +0 -50
@@ -0,0 +1,391 @@
1
+ import { Component, Input, HostListener, ViewChild, ElementRef, ChangeDetectorRef, ChangeDetectionStrategy, Output, EventEmitter, SecurityContext, } from '@angular/core';
2
+ import { removeLeadingHash, isAnchorLink, TdMarkdownLoaderService, } from '@covalent/markdown';
3
+ import { DomSanitizer } from '@angular/platform-browser';
4
+ import { HttpClient } from '@angular/common/http';
5
+ import { firstValueFrom } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@covalent/markdown";
8
+ import * as i2 from "@angular/platform-browser";
9
+ import * as i3 from "@angular/common/http";
10
+ import * as i4 from "@angular/material/progress-bar";
11
+ import * as i5 from "@covalent/core/breadcrumbs";
12
+ import * as i6 from "@angular/material/icon";
13
+ import * as i7 from "@angular/material/divider";
14
+ import * as i8 from "@covalent/core/message";
15
+ import * as i9 from "@covalent/flavored-markdown";
16
+ import * as i10 from "@angular/material/list";
17
+ import * as i11 from "@angular/common";
18
+ import * as i12 from "@angular/material/tooltip";
19
+ import * as i13 from "@angular/material/core";
20
+ export const DEFAULT_MARKDOWN_NAVIGATOR_LABELS = {
21
+ goHome: 'Go home',
22
+ goBack: 'Go back',
23
+ emptyState: 'No item(s) to display',
24
+ };
25
+ export class TdMarkdownNavigatorComponent {
26
+ constructor(_markdownUrlLoaderService, _changeDetectorRef, _sanitizer, _http) {
27
+ this._markdownUrlLoaderService = _markdownUrlLoaderService;
28
+ this._changeDetectorRef = _changeDetectorRef;
29
+ this._sanitizer = _sanitizer;
30
+ this._http = _http;
31
+ /**
32
+ * copyCodeToClipboard?: boolean
33
+ *
34
+ * Display copy button on code snippets to copy code to clipboard.
35
+ *
36
+ */
37
+ this.copyCodeToClipboard = false;
38
+ /**
39
+ * copyCodeTooltips?: ICopyCodeTooltips
40
+ *
41
+ * Tooltips for copy button to copy and upon copying.
42
+ */
43
+ this.copyCodeTooltips = {};
44
+ this.buttonClicked = new EventEmitter();
45
+ this.historyStack = []; // history
46
+ this.currentMenuItems = []; // current menu items
47
+ this.loading = false;
48
+ }
49
+ clickListener(event) {
50
+ const element = event.srcElement;
51
+ if (element.matches('a[href]') &&
52
+ isMarkdownHref(element)) {
53
+ this.handleLinkClick(event);
54
+ }
55
+ }
56
+ get showGoBackButton() {
57
+ return this.historyStack.length > 0;
58
+ }
59
+ get showHeader() {
60
+ return this.showGoBackButton || !!this.currentItemTitle;
61
+ }
62
+ get showMenu() {
63
+ const showMenu = this.currentMenuItems && this.currentMenuItems.length > 0;
64
+ return showMenu ?? false;
65
+ }
66
+ get showTdMarkdownLoader() {
67
+ return (!!this.currentMarkdownItem &&
68
+ !!this.currentMarkdownItem.url &&
69
+ !this.showTdMarkdown);
70
+ }
71
+ get showTdMarkdown() {
72
+ return (!!this.currentMarkdownItem && !!this.currentMarkdownItem.markdownString);
73
+ }
74
+ get url() {
75
+ if (this.currentMarkdownItem) {
76
+ return this.currentMarkdownItem.url;
77
+ }
78
+ return undefined;
79
+ }
80
+ get footerComponent() {
81
+ if (this.currentMarkdownItem && this.currentMarkdownItem.footer) {
82
+ return this.currentMarkdownItem.footer;
83
+ }
84
+ return this.footer;
85
+ }
86
+ get httpOptions() {
87
+ if (this.currentMarkdownItem) {
88
+ return this.currentMarkdownItem.httpOptions;
89
+ }
90
+ return undefined;
91
+ }
92
+ get markdownString() {
93
+ if (this.currentMarkdownItem) {
94
+ return this.currentMarkdownItem.markdownString;
95
+ }
96
+ return undefined;
97
+ }
98
+ get anchor() {
99
+ if (this.currentMarkdownItem) {
100
+ return this.currentMarkdownItem.anchor;
101
+ }
102
+ return undefined;
103
+ }
104
+ get showEmptyState() {
105
+ return !this.items || this.items.length < 1;
106
+ }
107
+ get goHomeLabel() {
108
+ return ((this.labels && this.labels.goHome) ||
109
+ DEFAULT_MARKDOWN_NAVIGATOR_LABELS.goHome);
110
+ }
111
+ get goBackLabel() {
112
+ return ((this.labels && this.labels.goBack) ||
113
+ DEFAULT_MARKDOWN_NAVIGATOR_LABELS.goBack);
114
+ }
115
+ get emptyStateLabel() {
116
+ return ((this.labels && this.labels.emptyState) ||
117
+ DEFAULT_MARKDOWN_NAVIGATOR_LABELS.emptyState);
118
+ }
119
+ get currentItemTitle() {
120
+ if (this.historyStack.length < 1) {
121
+ return '';
122
+ }
123
+ else if (this.currentMarkdownItem) {
124
+ return this.getTitle(this.currentMarkdownItem);
125
+ }
126
+ else if (this.historyStack.length > 0) {
127
+ return this.getTitle(this.historyStack[this.historyStack.length - 1]);
128
+ }
129
+ return '';
130
+ }
131
+ async ngOnChanges(changes) {
132
+ if (changes['items']) {
133
+ this.reset();
134
+ }
135
+ if (changes['startAt'] && this.items && this.startAt) {
136
+ this._jumpTo(this.startAt, undefined);
137
+ }
138
+ }
139
+ hasChildrenOrChildrenUrl(item) {
140
+ return (item.children && item.children.length > 0) || !!item.childrenUrl;
141
+ }
142
+ clearErrors() {
143
+ this.markdownLoaderError = undefined;
144
+ this.childrenUrlError = undefined;
145
+ }
146
+ reset() {
147
+ this.loading = false;
148
+ this.clearErrors();
149
+ // if single item and no children
150
+ if (this.items &&
151
+ this.items.length === 1 &&
152
+ !this.hasChildrenOrChildrenUrl(this.items[0])) {
153
+ this.currentMenuItems = [];
154
+ this.currentMarkdownItem = this.items[0];
155
+ }
156
+ else {
157
+ this.currentMenuItems = this.items;
158
+ this.currentMarkdownItem = undefined;
159
+ }
160
+ this.historyStack = [];
161
+ this._changeDetectorRef.markForCheck();
162
+ }
163
+ goBack(goBackLength = 1) {
164
+ this.loading = false;
165
+ this.clearErrors();
166
+ if (this.historyStack.length > 1) {
167
+ let parent = this.historyStack[this.historyStack.length - 2];
168
+ if (parent?.startAtLink) {
169
+ parent = this.historyStack[this.historyStack.length - 3]
170
+ ? this.historyStack[this.historyStack.length - 3]
171
+ : undefined;
172
+ this.historyStack = this.historyStack.slice(0, -goBackLength);
173
+ }
174
+ if (parent) {
175
+ this.currentMarkdownItem = parent;
176
+ this.historyStack = this.historyStack.slice(0, -goBackLength);
177
+ this.setChildrenAsCurrentMenuItems(parent);
178
+ }
179
+ else {
180
+ this.reset();
181
+ }
182
+ }
183
+ else {
184
+ // one level down just go to root
185
+ this.reset();
186
+ }
187
+ this._changeDetectorRef.markForCheck();
188
+ }
189
+ handleItemSelected(item) {
190
+ this.clearErrors();
191
+ this.currentMarkdownItem = item;
192
+ this.historyStack = [...this.historyStack, item];
193
+ this.setChildrenAsCurrentMenuItems(item);
194
+ this._changeDetectorRef.markForCheck();
195
+ }
196
+ async setChildrenAsCurrentMenuItems(item) {
197
+ this.currentMenuItems = [];
198
+ this.loading = true;
199
+ this._changeDetectorRef.markForCheck();
200
+ const stackSnapshot = this.historyStack;
201
+ let children = [];
202
+ if (item.children) {
203
+ children = item.children;
204
+ }
205
+ else if (item.childrenUrl) {
206
+ children = await this.loadChildrenUrl(item);
207
+ }
208
+ if (children && children.length && item.startAtLink) {
209
+ this._jumpTo(item.startAtLink, children);
210
+ }
211
+ const newStackSnapshot = this.historyStack;
212
+ if (stackSnapshot.length === newStackSnapshot.length &&
213
+ stackSnapshot.every((stackItem, index) => stackItem === newStackSnapshot[index])) {
214
+ this.currentMenuItems = children;
215
+ }
216
+ this.loading = false;
217
+ this._changeDetectorRef.markForCheck();
218
+ }
219
+ async loadChildrenUrl(item) {
220
+ const sanitizedUrl = this._sanitizer.sanitize(SecurityContext.URL, item.childrenUrl ?? null) ??
221
+ '';
222
+ try {
223
+ return await firstValueFrom(this._http.get(sanitizedUrl, {
224
+ ...item.httpOptions,
225
+ }));
226
+ }
227
+ catch (error) {
228
+ this.handleChildrenUrlError(error);
229
+ return [];
230
+ }
231
+ }
232
+ getTitle(item) {
233
+ if (!item) {
234
+ return '';
235
+ }
236
+ return (removeLeadingHash(item.anchor ?? '') ||
237
+ item.title ||
238
+ getTitleFromUrl(item.url ?? '') ||
239
+ getTitleFromMarkdownString(item.markdownString ?? '') ||
240
+ '').trim();
241
+ }
242
+ getIcon(item) {
243
+ return item?.icon || 'subject';
244
+ }
245
+ handleChildrenUrlError(error) {
246
+ this.childrenUrlError = error.message;
247
+ this._changeDetectorRef.markForCheck();
248
+ }
249
+ handleMarkdownLoaderError(error) {
250
+ this.markdownLoaderError = error ? error.message : '';
251
+ this._changeDetectorRef.markForCheck();
252
+ }
253
+ async _jumpTo(itemOrPath, children) {
254
+ const historyStack = this.historyStack;
255
+ this.reset();
256
+ if (this.items && this.items.length > 0) {
257
+ let path = [];
258
+ if (Array.isArray(itemOrPath)) {
259
+ path = await this.followPath(this.items, itemOrPath);
260
+ }
261
+ else if (children && children.length > 0) {
262
+ this.historyStack = historyStack;
263
+ path = this.findPath(children, itemOrPath);
264
+ }
265
+ else {
266
+ path = this.findPath(this.items, itemOrPath);
267
+ }
268
+ (path || []).forEach((pathItem) => this.handleItemSelected(pathItem));
269
+ }
270
+ this._changeDetectorRef.markForCheck();
271
+ }
272
+ async followPath(items, path) {
273
+ let pathItems = [];
274
+ let currentLevel = items;
275
+ const compareWith = this.compareWith || defaultCompareWith;
276
+ for (const pathItem of path) {
277
+ const foundItem = currentLevel.find((item) => compareWith(pathItem, item));
278
+ if (foundItem) {
279
+ pathItems = [...pathItems, foundItem];
280
+ if (foundItem.children) {
281
+ currentLevel = foundItem.children;
282
+ }
283
+ else if (foundItem.childrenUrl) {
284
+ currentLevel = await this.loadChildrenUrl(foundItem);
285
+ }
286
+ }
287
+ else {
288
+ break;
289
+ }
290
+ }
291
+ if (pathItems.length !== path.length) {
292
+ pathItems = [];
293
+ }
294
+ return pathItems;
295
+ }
296
+ findPath(items, item) {
297
+ const compareWith = this.compareWith || defaultCompareWith;
298
+ if (items) {
299
+ for (const child of items) {
300
+ if (item && compareWith(child, item)) {
301
+ return [child];
302
+ }
303
+ const ancestors = this.findPath(child.children, item);
304
+ if (ancestors) {
305
+ return [child, ...ancestors];
306
+ }
307
+ }
308
+ }
309
+ return undefined;
310
+ }
311
+ async handleLinkClick(event) {
312
+ event.preventDefault();
313
+ const link = event.target;
314
+ const url = new URL(link.href);
315
+ this.loading = true;
316
+ this._changeDetectorRef.markForCheck();
317
+ try {
318
+ const markdownString = await this._markdownUrlLoaderService.load(url.href);
319
+ // pass in url to be able to use currentMarkdownItem.url later on
320
+ this.handleItemSelected({ markdownString, url: url.href });
321
+ this.markdownWrapper.nativeElement.scrollTop = 0;
322
+ }
323
+ catch (error) {
324
+ const win = window.open(url.href, '_blank');
325
+ win?.focus();
326
+ }
327
+ finally {
328
+ this.loading = false;
329
+ }
330
+ this._changeDetectorRef.markForCheck();
331
+ }
332
+ }
333
+ TdMarkdownNavigatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdMarkdownNavigatorComponent, deps: [{ token: i1.TdMarkdownLoaderService }, { token: i0.ChangeDetectorRef }, { token: i2.DomSanitizer }, { token: i3.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
334
+ TdMarkdownNavigatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdMarkdownNavigatorComponent, selector: "td-markdown-navigator", inputs: { items: "items", labels: "labels", startAt: "startAt", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", footer: "footer", compareWith: "compareWith" }, outputs: { buttonClicked: "buttonClicked" }, host: { listeners: { "click": "clickListener($event)" } }, viewQueries: [{ propertyName: "markdownWrapper", first: true, predicate: ["markdownWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!showEmptyState\">\n <mat-progress-bar\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n color=\"accent\"\n ></mat-progress-bar>\n <ng-container *ngIf=\"showHeader\">\n <td-breadcrumbs>\n <a\n td-breadcrumb\n [matTooltip]=\"goHomeLabel ?? ''\"\n (click)=\"reset()\"\n [attr.data-test]=\"'home-button'\"\n >Home</a\n >\n <ng-container\n *ngFor=\"let stack of historyStack; last as isLast; index as index\"\n >\n <ng-container *ngIf=\"!isLast; else lastBreadCrumb\">\n <a\n td-breadcrumb\n (click)=\"goBack(index)\"\n [attr.data-test]=\"'back-button'\"\n >{{ stack.title }}</a\n >\n </ng-container>\n <ng-template #lastBreadCrumb>\n <mat-icon class=\"breadcrumb-end-icon\">chevron_right</mat-icon>\n </ng-template>\n </ng-container>\n </td-breadcrumbs>\n <div class=\"breadcrumb-current-title\" [attr.data-test]=\"'title'\">\n {{ currentItemTitle }}\n </div>\n\n <mat-divider [style.position]=\"'relative'\"></mat-divider>\n </ng-container>\n\n <div class=\"scroll-area\" id=\"td-markdown-navigator-content\">\n <div\n *ngIf=\"showTdMarkdownLoader || showTdMarkdown\"\n class=\"markdown-wrapper\"\n #markdownWrapper\n >\n <td-message\n *ngIf=\"markdownLoaderError\"\n [sublabel]=\"markdownLoaderError\"\n color=\"warn\"\n icon=\"error\"\n [attr.data-test]=\"'markdown-loader-error'\"\n ></td-message>\n <td-flavored-markdown-loader\n *ngIf=\"showTdMarkdownLoader\"\n [url]=\"url ?? ''\"\n [httpOptions]=\"httpOptions ?? {}\"\n [anchor]=\"anchor ?? ''\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n (loadFailed)=\"handleMarkdownLoaderError($event)\"\n ></td-flavored-markdown-loader>\n <td-flavored-markdown\n *ngIf=\"showTdMarkdown\"\n [content]=\"markdownString ?? ''\"\n [hostedUrl]=\"url ?? ''\"\n [anchor]=\"anchor ?? ''\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n ></td-flavored-markdown>\n </div>\n\n <td-message\n *ngIf=\"childrenUrlError\"\n [sublabel]=\"childrenUrlError\"\n color=\"warn\"\n icon=\"error\"\n [attr.data-test]=\"'children-url-error'\"\n ></td-message>\n <div *ngIf=\"showMenu\" class=\"td-markdown-list\">\n <mat-action-list>\n <button\n *ngFor=\"let item of currentMenuItems; index as index\"\n [id]=\"\n 'td-markdown-navigator-list-item-' + (item.id ? item.id : index)\n \"\n (click)=\"handleItemSelected(item)\"\n mat-list-item\n [matTooltip]=\"getTitle(item)\"\n matTooltipPosition=\"before\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon matListIcon>\n {{ getIcon(item) }}\n </mat-icon>\n <span matLine class=\"truncate\">\n {{ getTitle(item) }}\n </span>\n <span matLine class=\"truncate\">{{ item.description }}</span>\n <mat-divider></mat-divider>\n </button>\n </mat-action-list>\n </div>\n\n <ng-container *ngComponentOutlet=\"footerComponent\"></ng-container>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"showEmptyState\"\n layout=\"column\"\n layout-align=\"center center\"\n class=\"empty-state\"\n>\n <mat-icon matListAvatar>subject</mat-icon>\n <h2>{{ emptyStateLabel }}</h2>\n</div>\n", styles: [":host{position:relative;height:inherit;height:100%;box-sizing:border-box;display:flex;flex-direction:column}:host td-breadcrumbs::ng-deep{margin:16px 16px 8px}:host td-breadcrumbs::ng-deep mat-icon{font-size:16px;margin-left:1px;margin-right:0;margin-top:-1px}:host .breadcrumb-end-icon{line-height:16px;margin-top:1px}:host .breadcrumb-current-title{font-weight:700;margin:0 16px 16px}:host .scroll-area{min-height:1px;overflow-y:auto;flex:1;box-sizing:border-box}:host .markdown-wrapper{padding:16px 16px 0}:host .td-markdown-list>.mat-list{padding-top:0}:host td-flavored-markdown-loader ::ng-deep .mat-progress-bar{top:0;left:0;right:0;position:absolute}:host .title{display:inline-block;vertical-align:middle;margin:8px 0;padding-left:16px}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.empty-state{padding:32px}.empty-state mat-icon{font-size:4em}\n"], components: [{ type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i5.TdBreadcrumbsComponent, selector: "td-breadcrumbs", inputs: ["separatorIcon"] }, { type: i5.TdBreadcrumbComponent, selector: "td-breadcrumb, a[td-breadcrumb]" }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i8.TdMessageComponent, selector: "td-message", inputs: ["label", "sublabel", "icon", "color", "opened"] }, { type: i9.TdFlavoredMarkdownLoaderComponent, selector: "td-flavored-markdown-loader", inputs: ["url", "httpOptions", "anchor", "copyCodeToClipboard", "copyCodeTooltips"], outputs: ["contentReady", "loadFailed", "buttonClicked"] }, { type: i9.TdFlavoredMarkdownComponent, selector: "td-flavored-markdown", inputs: ["content", "simpleLineBreaks", "hostedUrl", "anchor", "copyCodeToClipboard", "copyCodeTooltips"], outputs: ["contentReady", "buttonClicked"] }, { type: i10.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { type: i10.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { type: i13.MatLine, selector: "[mat-line], [matLine]" }, { type: i11.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i10.MatListAvatarCssMatStyler, selector: "[mat-list-avatar], [matListAvatar]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdMarkdownNavigatorComponent, decorators: [{
336
+ type: Component,
337
+ args: [{ selector: 'td-markdown-navigator', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"!showEmptyState\">\n <mat-progress-bar\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n color=\"accent\"\n ></mat-progress-bar>\n <ng-container *ngIf=\"showHeader\">\n <td-breadcrumbs>\n <a\n td-breadcrumb\n [matTooltip]=\"goHomeLabel ?? ''\"\n (click)=\"reset()\"\n [attr.data-test]=\"'home-button'\"\n >Home</a\n >\n <ng-container\n *ngFor=\"let stack of historyStack; last as isLast; index as index\"\n >\n <ng-container *ngIf=\"!isLast; else lastBreadCrumb\">\n <a\n td-breadcrumb\n (click)=\"goBack(index)\"\n [attr.data-test]=\"'back-button'\"\n >{{ stack.title }}</a\n >\n </ng-container>\n <ng-template #lastBreadCrumb>\n <mat-icon class=\"breadcrumb-end-icon\">chevron_right</mat-icon>\n </ng-template>\n </ng-container>\n </td-breadcrumbs>\n <div class=\"breadcrumb-current-title\" [attr.data-test]=\"'title'\">\n {{ currentItemTitle }}\n </div>\n\n <mat-divider [style.position]=\"'relative'\"></mat-divider>\n </ng-container>\n\n <div class=\"scroll-area\" id=\"td-markdown-navigator-content\">\n <div\n *ngIf=\"showTdMarkdownLoader || showTdMarkdown\"\n class=\"markdown-wrapper\"\n #markdownWrapper\n >\n <td-message\n *ngIf=\"markdownLoaderError\"\n [sublabel]=\"markdownLoaderError\"\n color=\"warn\"\n icon=\"error\"\n [attr.data-test]=\"'markdown-loader-error'\"\n ></td-message>\n <td-flavored-markdown-loader\n *ngIf=\"showTdMarkdownLoader\"\n [url]=\"url ?? ''\"\n [httpOptions]=\"httpOptions ?? {}\"\n [anchor]=\"anchor ?? ''\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n (loadFailed)=\"handleMarkdownLoaderError($event)\"\n ></td-flavored-markdown-loader>\n <td-flavored-markdown\n *ngIf=\"showTdMarkdown\"\n [content]=\"markdownString ?? ''\"\n [hostedUrl]=\"url ?? ''\"\n [anchor]=\"anchor ?? ''\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n ></td-flavored-markdown>\n </div>\n\n <td-message\n *ngIf=\"childrenUrlError\"\n [sublabel]=\"childrenUrlError\"\n color=\"warn\"\n icon=\"error\"\n [attr.data-test]=\"'children-url-error'\"\n ></td-message>\n <div *ngIf=\"showMenu\" class=\"td-markdown-list\">\n <mat-action-list>\n <button\n *ngFor=\"let item of currentMenuItems; index as index\"\n [id]=\"\n 'td-markdown-navigator-list-item-' + (item.id ? item.id : index)\n \"\n (click)=\"handleItemSelected(item)\"\n mat-list-item\n [matTooltip]=\"getTitle(item)\"\n matTooltipPosition=\"before\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon matListIcon>\n {{ getIcon(item) }}\n </mat-icon>\n <span matLine class=\"truncate\">\n {{ getTitle(item) }}\n </span>\n <span matLine class=\"truncate\">{{ item.description }}</span>\n <mat-divider></mat-divider>\n </button>\n </mat-action-list>\n </div>\n\n <ng-container *ngComponentOutlet=\"footerComponent\"></ng-container>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"showEmptyState\"\n layout=\"column\"\n layout-align=\"center center\"\n class=\"empty-state\"\n>\n <mat-icon matListAvatar>subject</mat-icon>\n <h2>{{ emptyStateLabel }}</h2>\n</div>\n", styles: [":host{position:relative;height:inherit;height:100%;box-sizing:border-box;display:flex;flex-direction:column}:host td-breadcrumbs::ng-deep{margin:16px 16px 8px}:host td-breadcrumbs::ng-deep mat-icon{font-size:16px;margin-left:1px;margin-right:0;margin-top:-1px}:host .breadcrumb-end-icon{line-height:16px;margin-top:1px}:host .breadcrumb-current-title{font-weight:700;margin:0 16px 16px}:host .scroll-area{min-height:1px;overflow-y:auto;flex:1;box-sizing:border-box}:host .markdown-wrapper{padding:16px 16px 0}:host .td-markdown-list>.mat-list{padding-top:0}:host td-flavored-markdown-loader ::ng-deep .mat-progress-bar{top:0;left:0;right:0;position:absolute}:host .title{display:inline-block;vertical-align:middle;margin:8px 0;padding-left:16px}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.empty-state{padding:32px}.empty-state mat-icon{font-size:4em}\n"] }]
338
+ }], ctorParameters: function () { return [{ type: i1.TdMarkdownLoaderService }, { type: i0.ChangeDetectorRef }, { type: i2.DomSanitizer }, { type: i3.HttpClient }]; }, propDecorators: { items: [{
339
+ type: Input
340
+ }], labels: [{
341
+ type: Input
342
+ }], startAt: [{
343
+ type: Input
344
+ }], copyCodeToClipboard: [{
345
+ type: Input
346
+ }], copyCodeTooltips: [{
347
+ type: Input
348
+ }], footer: [{
349
+ type: Input
350
+ }], compareWith: [{
351
+ type: Input
352
+ }], buttonClicked: [{
353
+ type: Output
354
+ }], markdownWrapper: [{
355
+ type: ViewChild,
356
+ args: ['markdownWrapper']
357
+ }], clickListener: [{
358
+ type: HostListener,
359
+ args: ['click', ['$event']]
360
+ }] } });
361
+ function getTitleFromUrl(url) {
362
+ if (url) {
363
+ const temp = new URL(url);
364
+ if (temp.hash) {
365
+ return removeLeadingHash(temp.hash);
366
+ }
367
+ else {
368
+ const path = temp.pathname.split('/');
369
+ const fileName = path[path.length - 1];
370
+ return fileName.replace(/\.[^/.]+$/, ''); // remove .md
371
+ }
372
+ }
373
+ return '';
374
+ }
375
+ function getTitleFromMarkdownString(markdownString) {
376
+ if (markdownString) {
377
+ const firstLine = markdownString.split(/[\r\n]+/).find((line) => !!line) ?? '';
378
+ return removeLeadingHash(firstLine).trim();
379
+ }
380
+ return '';
381
+ }
382
+ function isMarkdownHref(anchor) {
383
+ return !isAnchorLink(anchor) && anchor.pathname.endsWith('.md');
384
+ }
385
+ function defaultCompareWith(o1, o2) {
386
+ if (o1.id && o2.id) {
387
+ return o1.id === o2.id;
388
+ }
389
+ return o1 === o2;
390
+ }
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tbmF2aWdhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tbmF2aWdhdG9yL3NyYy9tYXJrZG93bi1uYXZpZ2F0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbGlicy9tYXJrZG93bi1uYXZpZ2F0b3Ivc3JjL21hcmtkb3duLW5hdmlnYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixpQkFBaUIsRUFDakIsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWix1QkFBdUIsR0FDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQTRCdEMsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQTZCO0lBQ3pFLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLFVBQVUsRUFBRSx1QkFBdUI7Q0FDcEMsQ0FBQztBQVFGLE1BQU0sT0FBTyw0QkFBNEI7SUFrRXZDLFlBQ1UseUJBQWtELEVBQ2xELGtCQUFxQyxFQUNyQyxVQUF3QixFQUN4QixLQUFpQjtRQUhqQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQXlCO1FBQ2xELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QixVQUFLLEdBQUwsS0FB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RyxDQUFDLENBQUMsQ0FBQztZQUMvQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtTQUN4RDtLQUNGO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxjQUFzQjtJQUN4RCxJQUFJLGNBQWMsRUFBRTtRQUNsQixNQUFNLFNBQVMsR0FDYixjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RSxPQUFPLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzVDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBeUI7SUFDL0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBQ0QsU0FBUyxrQkFBa0IsQ0FDekIsRUFBMEIsRUFDMUIsRUFBMEI7SUFFMUIsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEIsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDeEI7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVHlwZSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFNlY3VyaXR5Q29udGV4dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICByZW1vdmVMZWFkaW5nSGFzaCxcbiAgaXNBbmNob3JMaW5rLFxuICBUZE1hcmtkb3duTG9hZGVyU2VydmljZSxcbn0gZnJvbSAnQGNvdmFsZW50L21hcmtkb3duJztcbmltcG9ydCB7IElUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25DbGlja0V2ZW50IH0gZnJvbSAnQGNvdmFsZW50L2ZsYXZvcmVkLW1hcmtkb3duJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IElDb3B5Q29kZVRvb2x0aXBzIH0gZnJvbSAnQGNvdmFsZW50L2hpZ2hsaWdodCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElNYXJrZG93bk5hdmlnYXRvckl0ZW0ge1xuICBpZD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgaHR0cE9wdGlvbnM/OiBvYmplY3Q7XG4gIG1hcmtkb3duU3RyaW5nPzogc3RyaW5nOyAvLyByYXcgbWFya2Rvd25cbiAgYW5jaG9yPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXTtcbiAgY2hpbGRyZW5Vcmw/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBmb290ZXI/OiBUeXBlPGFueT47XG4gIHN0YXJ0QXRMaW5rPzogSU1hcmtkb3duTmF2aWdhdG9ySXRlbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWFya2Rvd25OYXZpZ2F0b3JMYWJlbHMge1xuICBnb0hvbWU/OiBzdHJpbmc7XG4gIGdvQmFjaz86IHN0cmluZztcbiAgZW1wdHlTdGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSU1hcmtkb3duTmF2aWdhdG9yQ29tcGFyZVdpdGggPSAoXG4gIG8xOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtLFxuICBvMjogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVxuKSA9PiBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVJLRE9XTl9OQVZJR0FUT1JfTEFCRUxTOiBJTWFya2Rvd25OYXZpZ2F0b3JMYWJlbHMgPSB7XG4gIGdvSG9tZTogJ0dvIGhvbWUnLFxuICBnb0JhY2s6ICdHbyBiYWNrJyxcbiAgZW1wdHlTdGF0ZTogJ05vIGl0ZW0ocykgdG8gZGlzcGxheScsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1tYXJrZG93bi1uYXZpZ2F0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24tbmF2aWdhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFya2Rvd24tbmF2aWdhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZE1hcmtkb3duTmF2aWdhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIGl0ZW1zOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW11cbiAgICpcbiAgICogTGlzdCBvZiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtcyB0byBiZSByZW5kZXJlZFxuICAgKi9cbiAgQElucHV0KCkgaXRlbXM/OiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW107XG5cbiAgLyoqXG4gICAqIGxhYmVscz86IElNYXJrZG93bk5hdmlnYXRvckxhYmVsc1xuICAgKlxuICAgKiBUcmFuc2xhdGVkIGxhYmVsc1xuICAgKi9cbiAgQElucHV0KCkgbGFiZWxzPzogSU1hcmtkb3duTmF2aWdhdG9yTGFiZWxzO1xuXG4gIC8qKlxuICAgKiBzdGFydEF0PzogSU1hcmtkb3duTmF2aWdhdG9ySXRlbSB8IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXTtcbiAgICpcbiAgICogSXRlbSBvciBwYXRoIHRvIHN0YXJ0IGF0XG4gICAqL1xuICBASW5wdXQoKSBzdGFydEF0PzogSU1hcmtkb3duTmF2aWdhdG9ySXRlbSB8IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXTtcblxuICAvKipcbiAgICogY29weUNvZGVUb0NsaXBib2FyZD86IGJvb2xlYW5cbiAgICpcbiAgICogRGlzcGxheSBjb3B5IGJ1dHRvbiBvbiBjb2RlIHNuaXBwZXRzIHRvIGNvcHkgY29kZSB0byBjbGlwYm9hcmQuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvQ2xpcGJvYXJkPyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHNcbiAgICpcbiAgICogVG9vbHRpcHMgZm9yIGNvcHkgYnV0dG9uIHRvIGNvcHkgYW5kIHVwb24gY29weWluZy5cbiAgICovXG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9vbHRpcHM/OiBJQ29weUNvZGVUb29sdGlwcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBmb290ZXI/OiBUeXBlPGFueT5cbiAgICpcbiAgICogQ29tcG9uZW50IHRvIGJlIGRpc3BsYXllZCBpbiBmb290ZXJcbiAgICovXG4gIEBJbnB1dCgpIGZvb3Rlcj86IGFueTtcblxuICAvKipcbiAgICogY29tcGFyZVdpdGg/OiBJTWFya2Rvd25OYXZpZ2F0b3JDb21wYXJlV2l0aFxuICAgKlxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIGZpbmQgc3RhcnRBdCBpdGVtXG4gICAqIERlZmF1bHRzIHRvIGNvbXBhcmlzb24gYnkgc3RyaWN0IGVxdWFsaXR5ICg9PT0pXG4gICAqL1xuICBASW5wdXQoKSBjb21wYXJlV2l0aD86IElNYXJrZG93bk5hdmlnYXRvckNvbXBhcmVXaXRoO1xuXG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8SVRkRmxhdm9yZWRNYXJrZG93bkJ1dHRvbkNsaWNrRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbWFya2Rvd25XcmFwcGVyJykgbWFya2Rvd25XcmFwcGVyITogRWxlbWVudFJlZjtcblxuICBoaXN0b3J5U3RhY2s6IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXSA9IFtdOyAvLyBoaXN0b3J5XG4gIGN1cnJlbnRNYXJrZG93bkl0ZW0/OiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtOyAvLyBjdXJyZW50bHkgcmVuZGVyZWRcbiAgY3VycmVudE1lbnVJdGVtcz86IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXSA9IFtdOyAvLyBjdXJyZW50IG1lbnUgaXRlbXNcblxuICBsb2FkaW5nID0gZmFsc2U7XG5cbiAgbWFya2Rvd25Mb2FkZXJFcnJvcj86IHN0cmluZztcbiAgY2hpbGRyZW5VcmxFcnJvcj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9tYXJrZG93blVybExvYWRlclNlcnZpY2U6IFRkTWFya2Rvd25Mb2FkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50XG4gICkge31cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrTGlzdGVuZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQuc3JjRWxlbWVudDtcbiAgICBpZiAoXG4gICAgICBlbGVtZW50Lm1hdGNoZXMoJ2FbaHJlZl0nKSAmJlxuICAgICAgaXNNYXJrZG93bkhyZWYoPEhUTUxBbmNob3JFbGVtZW50PmVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZUxpbmtDbGljayhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dHb0JhY2tCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeVN0YWNrLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgc2hvd0hlYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93R29CYWNrQnV0dG9uIHx8ICEhdGhpcy5jdXJyZW50SXRlbVRpdGxlO1xuICB9XG5cbiAgZ2V0IHNob3dNZW51KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNob3dNZW51ID0gdGhpcy5jdXJyZW50TWVudUl0ZW1zICYmIHRoaXMuY3VycmVudE1lbnVJdGVtcy5sZW5ndGggPiAwO1xuICAgIHJldHVybiBzaG93TWVudSA/PyBmYWxzZTtcbiAgfVxuXG4gIGdldCBzaG93VGRNYXJrZG93bkxvYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLmN1cnJlbnRNYXJrZG93bkl0ZW0gJiZcbiAgICAgICEhdGhpcy5jdXJyZW50TWFya2Rvd25JdGVtLnVybCAmJlxuICAgICAgIXRoaXMuc2hvd1RkTWFya2Rvd25cbiAgICApO1xuICB9XG5cbiAgZ2V0IHNob3dUZE1hcmtkb3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuY3VycmVudE1hcmtkb3duSXRlbSAmJiAhIXRoaXMuY3VycmVudE1hcmtkb3duSXRlbS5tYXJrZG93blN0cmluZ1xuICAgICk7XG4gIH1cblxuICBnZXQgdXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudE1hcmtkb3duSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1hcmtkb3duSXRlbS51cmw7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgZm9vdGVyQ29tcG9uZW50KCk6IGFueSB7XG4gICAgaWYgKHRoaXMuY3VycmVudE1hcmtkb3duSXRlbSAmJiB0aGlzLmN1cnJlbnRNYXJrZG93bkl0ZW0uZm9vdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50TWFya2Rvd25JdGVtLmZvb3RlcjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9vdGVyO1xuICB9XG4gIGdldCBodHRwT3B0aW9ucygpOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRNYXJrZG93bkl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNYXJrZG93bkl0ZW0uaHR0cE9wdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0IG1hcmtkb3duU3RyaW5nKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudE1hcmtkb3duSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1hcmtkb3duSXRlbS5tYXJrZG93blN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBhbmNob3IoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50TWFya2Rvd25JdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50TWFya2Rvd25JdGVtLmFuY2hvcjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBzaG93RW1wdHlTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXRlbXMgfHwgdGhpcy5pdGVtcy5sZW5ndGggPCAxO1xuICB9XG5cbiAgZ2V0IGdvSG9tZUxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVscy5nb0hvbWUpIHx8XG4gICAgICBERUZBVUxUX01BUktET1dOX05BVklHQVRPUl9MQUJFTFMuZ29Ib21lXG4gICAgKTtcbiAgfVxuXG4gIGdldCBnb0JhY2tMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5sYWJlbHMgJiYgdGhpcy5sYWJlbHMuZ29CYWNrKSB8fFxuICAgICAgREVGQVVMVF9NQVJLRE9XTl9OQVZJR0FUT1JfTEFCRUxTLmdvQmFja1xuICAgICk7XG4gIH1cblxuICBnZXQgZW1wdHlTdGF0ZUxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVscy5lbXB0eVN0YXRlKSB8fFxuICAgICAgREVGQVVMVF9NQVJLRE9XTl9OQVZJR0FUT1JfTEFCRUxTLmVtcHR5U3RhdGVcbiAgICApO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRJdGVtVGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5U3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50TWFya2Rvd25JdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSh0aGlzLmN1cnJlbnRNYXJrZG93bkl0ZW0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oaXN0b3J5U3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUodGhpcy5oaXN0b3J5U3RhY2tbdGhpcy5oaXN0b3J5U3RhY2subGVuZ3RoIC0gMV0pO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3N0YXJ0QXQnXSAmJiB0aGlzLml0ZW1zICYmIHRoaXMuc3RhcnRBdCkge1xuICAgICAgdGhpcy5fanVtcFRvKHRoaXMuc3RhcnRBdCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBoYXNDaGlsZHJlbk9yQ2hpbGRyZW5VcmwoaXRlbTogSU1hcmtkb3duTmF2aWdhdG9ySXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8ICEhaXRlbS5jaGlsZHJlblVybDtcbiAgfVxuICBjbGVhckVycm9ycygpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtkb3duTG9hZGVyRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jaGlsZHJlblVybEVycm9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckVycm9ycygpO1xuICAgIC8vIGlmIHNpbmdsZSBpdGVtIGFuZCBubyBjaGlsZHJlblxuICAgIGlmIChcbiAgICAgIHRoaXMuaXRlbXMgJiZcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID09PSAxICYmXG4gICAgICAhdGhpcy5oYXNDaGlsZHJlbk9yQ2hpbGRyZW5VcmwodGhpcy5pdGVtc1swXSlcbiAgICApIHtcbiAgICAgIHRoaXMuY3VycmVudE1lbnVJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50TWFya2Rvd25JdGVtID0gdGhpcy5pdGVtc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50TWVudUl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgIHRoaXMuY3VycmVudE1hcmtkb3duSXRlbSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5oaXN0b3J5U3RhY2sgPSBbXTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdvQmFjayhnb0JhY2tMZW5ndGggPSAxKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckVycm9ycygpO1xuICAgIGlmICh0aGlzLmhpc3RvcnlTdGFjay5sZW5ndGggPiAxKSB7XG4gICAgICBsZXQgcGFyZW50OiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdGhpcy5oaXN0b3J5U3RhY2tbdGhpcy5oaXN0b3J5U3RhY2subGVuZ3RoIC0gMl07XG5cbiAgICAgIGlmIChwYXJlbnQ/LnN0YXJ0QXRMaW5rKSB7XG4gICAgICAgIHBhcmVudCA9IHRoaXMuaGlzdG9yeVN0YWNrW3RoaXMuaGlzdG9yeVN0YWNrLmxlbmd0aCAtIDNdXG4gICAgICAgICAgPyB0aGlzLmhpc3RvcnlTdGFja1t0aGlzLmhpc3RvcnlTdGFjay5sZW5ndGggLSAzXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhpc3RvcnlTdGFjayA9IHRoaXMuaGlzdG9yeVN0YWNrLnNsaWNlKDAsIC1nb0JhY2tMZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHRoaXMuY3VycmVudE1hcmtkb3duSXRlbSA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5oaXN0b3J5U3RhY2sgPSB0aGlzLmhpc3RvcnlTdGFjay5zbGljZSgwLCAtZ29CYWNrTGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkFzQ3VycmVudE1lbnVJdGVtcyhwYXJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvbmUgbGV2ZWwgZG93biBqdXN0IGdvIHRvIHJvb3RcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBoYW5kbGVJdGVtU2VsZWN0ZWQoaXRlbTogSU1hcmtkb3duTmF2aWdhdG9ySXRlbSk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJFcnJvcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRNYXJrZG93bkl0ZW0gPSBpdGVtO1xuICAgIHRoaXMuaGlzdG9yeVN0YWNrID0gWy4uLnRoaXMuaGlzdG9yeVN0YWNrLCBpdGVtXTtcbiAgICB0aGlzLnNldENoaWxkcmVuQXNDdXJyZW50TWVudUl0ZW1zKGl0ZW0pO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgc2V0Q2hpbGRyZW5Bc0N1cnJlbnRNZW51SXRlbXMoXG4gICAgaXRlbTogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmN1cnJlbnRNZW51SXRlbXMgPSBbXTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgY29uc3Qgc3RhY2tTbmFwc2hvdDogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVtdID0gdGhpcy5oaXN0b3J5U3RhY2s7XG4gICAgbGV0IGNoaWxkcmVuOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10gPSBbXTtcbiAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuO1xuICAgIH0gZWxzZSBpZiAoaXRlbS5jaGlsZHJlblVybCkge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmxvYWRDaGlsZHJlblVybChpdGVtKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCAmJiBpdGVtLnN0YXJ0QXRMaW5rKSB7XG4gICAgICB0aGlzLl9qdW1wVG8oaXRlbS5zdGFydEF0TGluaywgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBjb25zdCBuZXdTdGFja1NuYXBzaG90OiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10gPSB0aGlzLmhpc3RvcnlTdGFjaztcbiAgICBpZiAoXG4gICAgICBzdGFja1NuYXBzaG90Lmxlbmd0aCA9PT0gbmV3U3RhY2tTbmFwc2hvdC5sZW5ndGggJiZcbiAgICAgIHN0YWNrU25hcHNob3QuZXZlcnkoXG4gICAgICAgIChzdGFja0l0ZW06IElNYXJrZG93bk5hdmlnYXRvckl0ZW0sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgc3RhY2tJdGVtID09PSBuZXdTdGFja1NuYXBzaG90W2luZGV4XVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5jdXJyZW50TWVudUl0ZW1zID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBsb2FkQ2hpbGRyZW5VcmwoXG4gICAgaXRlbTogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVxuICApOiBQcm9taXNlPElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXT4ge1xuICAgIGNvbnN0IHNhbml0aXplZFVybCA9XG4gICAgICB0aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LlVSTCwgaXRlbS5jaGlsZHJlblVybCA/PyBudWxsKSA/P1xuICAgICAgJyc7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbTxJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10+KFxuICAgICAgICB0aGlzLl9odHRwLmdldDxJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10+KHNhbml0aXplZFVybCwge1xuICAgICAgICAgIC4uLml0ZW0uaHR0cE9wdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2hpbGRyZW5VcmxFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGUoaXRlbTogSU1hcmtkb3duTmF2aWdhdG9ySXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICByZW1vdmVMZWFkaW5nSGFzaChpdGVtLmFuY2hvciA/PyAnJykgfHxcbiAgICAgIGl0ZW0udGl0bGUgfHxcbiAgICAgIGdldFRpdGxlRnJvbVVybChpdGVtLnVybCA/PyAnJykgfHxcbiAgICAgIGdldFRpdGxlRnJvbU1hcmtkb3duU3RyaW5nKGl0ZW0ubWFya2Rvd25TdHJpbmcgPz8gJycpIHx8XG4gICAgICAnJ1xuICAgICkudHJpbSgpO1xuICB9XG5cbiAgZ2V0SWNvbihpdGVtOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbT8uaWNvbiB8fCAnc3ViamVjdCc7XG4gIH1cblxuICBoYW5kbGVDaGlsZHJlblVybEVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMuY2hpbGRyZW5VcmxFcnJvciA9IGVycm9yLm1lc3NhZ2U7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgaGFuZGxlTWFya2Rvd25Mb2FkZXJFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtkb3duTG9hZGVyRXJyb3IgPSBlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2p1bXBUbyhcbiAgICBpdGVtT3JQYXRoOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtIHwgSU1hcmtkb3duTmF2aWdhdG9ySXRlbVtdLFxuICAgIGNoaWxkcmVuPzogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhpc3RvcnlTdGFjazogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVtdID0gdGhpcy5oaXN0b3J5U3RhY2s7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHBhdGg6IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXSB8IHVuZGVmaW5lZCA9IFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbU9yUGF0aCkpIHtcbiAgICAgICAgcGF0aCA9IGF3YWl0IHRoaXMuZm9sbG93UGF0aCh0aGlzLml0ZW1zLCBpdGVtT3JQYXRoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmhpc3RvcnlTdGFjayA9IGhpc3RvcnlTdGFjaztcbiAgICAgICAgcGF0aCA9IHRoaXMuZmluZFBhdGgoY2hpbGRyZW4sIGl0ZW1PclBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCA9IHRoaXMuZmluZFBhdGgodGhpcy5pdGVtcywgaXRlbU9yUGF0aCk7XG4gICAgICB9XG4gICAgICAocGF0aCB8fCBbXSkuZm9yRWFjaCgocGF0aEl0ZW06IElNYXJrZG93bk5hdmlnYXRvckl0ZW0pID0+XG4gICAgICAgIHRoaXMuaGFuZGxlSXRlbVNlbGVjdGVkKHBhdGhJdGVtKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvbGxvd1BhdGgoXG4gICAgaXRlbXM6IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXSxcbiAgICBwYXRoOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW11cbiAgKTogUHJvbWlzZTxJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10+IHtcbiAgICBsZXQgcGF0aEl0ZW1zOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10gPSBbXTtcbiAgICBsZXQgY3VycmVudExldmVsOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtW10gPSBpdGVtcztcbiAgICBjb25zdCBjb21wYXJlV2l0aDogSU1hcmtkb3duTmF2aWdhdG9yQ29tcGFyZVdpdGggPVxuICAgICAgdGhpcy5jb21wYXJlV2l0aCB8fCBkZWZhdWx0Q29tcGFyZVdpdGg7XG4gICAgZm9yIChjb25zdCBwYXRoSXRlbSBvZiBwYXRoKSB7XG4gICAgICBjb25zdCBmb3VuZEl0ZW06IElNYXJrZG93bk5hdmlnYXRvckl0ZW0gfCB1bmRlZmluZWQgPSBjdXJyZW50TGV2ZWwuZmluZChcbiAgICAgICAgKGl0ZW06IElNYXJrZG93bk5hdmlnYXRvckl0ZW0pID0+IGNvbXBhcmVXaXRoKHBhdGhJdGVtLCBpdGVtKVxuICAgICAgKTtcblxuICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICBwYXRoSXRlbXMgPSBbLi4ucGF0aEl0ZW1zLCBmb3VuZEl0ZW1dO1xuXG4gICAgICAgIGlmIChmb3VuZEl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwgPSBmb3VuZEl0ZW0uY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRJdGVtLmNoaWxkcmVuVXJsKSB7XG4gICAgICAgICAgY3VycmVudExldmVsID0gYXdhaXQgdGhpcy5sb2FkQ2hpbGRyZW5VcmwoZm91bmRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXRoSXRlbXMubGVuZ3RoICE9PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcGF0aEl0ZW1zID0gW107XG4gICAgfVxuICAgIHJldHVybiBwYXRoSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXRoKFxuICAgIGl0ZW1zPzogSU1hcmtkb3duTmF2aWdhdG9ySXRlbVtdLFxuICAgIGl0ZW0/OiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtXG4gICk6IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29tcGFyZVdpdGg6IElNYXJrZG93bk5hdmlnYXRvckNvbXBhcmVXaXRoID1cbiAgICAgIHRoaXMuY29tcGFyZVdpdGggfHwgZGVmYXVsdENvbXBhcmVXaXRoO1xuICAgIGlmIChpdGVtcykge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBpdGVtcykge1xuICAgICAgICBpZiAoaXRlbSAmJiBjb21wYXJlV2l0aChjaGlsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm4gW2NoaWxkXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmNlc3RvcnM6IElNYXJrZG93bk5hdmlnYXRvckl0ZW1bXSB8IHVuZGVmaW5lZCA9IHRoaXMuZmluZFBhdGgoXG4gICAgICAgICAgY2hpbGQuY2hpbGRyZW4sXG4gICAgICAgICAgaXRlbVxuICAgICAgICApO1xuICAgICAgICBpZiAoYW5jZXN0b3JzKSB7XG4gICAgICAgICAgcmV0dXJuIFtjaGlsZCwgLi4uYW5jZXN0b3JzXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVMaW5rQ2xpY2soZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBsaW5rOiBIVE1MQW5jaG9yRWxlbWVudCA9IDxIVE1MQW5jaG9yRWxlbWVudD5ldmVudC50YXJnZXQ7XG4gICAgY29uc3QgdXJsOiBVUkwgPSBuZXcgVVJMKGxpbmsuaHJlZik7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWFya2Rvd25TdHJpbmc6IHN0cmluZyA9IGF3YWl0IHRoaXMuX21hcmtkb3duVXJsTG9hZGVyU2VydmljZS5sb2FkKFxuICAgICAgICB1cmwuaHJlZlxuICAgICAgKTtcbiAgICAgIC8vIHBhc3MgaW4gdXJsIHRvIGJlIGFibGUgdG8gdXNlIGN1cnJlbnRNYXJrZG93bkl0ZW0udXJsIGxhdGVyIG9uXG4gICAgICB0aGlzLmhhbmRsZUl0ZW1TZWxlY3RlZCh7IG1hcmtkb3duU3RyaW5nLCB1cmw6IHVybC5ocmVmIH0pO1xuICAgICAgdGhpcy5tYXJrZG93bldyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB3aW4gPSB3aW5kb3cub3Blbih1cmwuaHJlZiwgJ19ibGFuaycpO1xuICAgICAgd2luPy5mb2N1cygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGl0bGVGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHVybCkge1xuICAgIGNvbnN0IHRlbXA6IFVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAodGVtcC5oYXNoKSB7XG4gICAgICByZXR1cm4gcmVtb3ZlTGVhZGluZ0hhc2godGVtcC5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aDogc3RyaW5nW10gPSB0ZW1wLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIGZpbGVOYW1lLnJlcGxhY2UoL1xcLlteLy5dKyQvLCAnJyk7IC8vIHJlbW92ZSAubWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRUaXRsZUZyb21NYXJrZG93blN0cmluZyhtYXJrZG93blN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG1hcmtkb3duU3RyaW5nKSB7XG4gICAgY29uc3QgZmlyc3RMaW5lOiBzdHJpbmcgPVxuICAgICAgbWFya2Rvd25TdHJpbmcuc3BsaXQoL1tcXHJcXG5dKy8pLmZpbmQoKGxpbmU6IHN0cmluZykgPT4gISFsaW5lKSA/PyAnJztcbiAgICByZXR1cm4gcmVtb3ZlTGVhZGluZ0hhc2goZmlyc3RMaW5lKS50cmltKCk7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBpc01hcmtkb3duSHJlZihhbmNob3I6IEhUTUxBbmNob3JFbGVtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAhaXNBbmNob3JMaW5rKGFuY2hvcikgJiYgYW5jaG9yLnBhdGhuYW1lLmVuZHNXaXRoKCcubWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlV2l0aChcbiAgbzE6IElNYXJrZG93bk5hdmlnYXRvckl0ZW0sXG4gIG8yOiBJTWFya2Rvd25OYXZpZ2F0b3JJdGVtXG4pOiBib29sZWFuIHtcbiAgaWYgKG8xLmlkICYmIG8yLmlkKSB7XG4gICAgcmV0dXJuIG8xLmlkID09PSBvMi5pZDtcbiAgfVxuICByZXR1cm4gbzEgPT09IG8yO1xufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93RW1wdHlTdGF0ZVwiPlxuICA8bWF0LXByb2dyZXNzLWJhclxuICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dIZWFkZXJcIj5cbiAgICA8dGQtYnJlYWRjcnVtYnM+XG4gICAgICA8YVxuICAgICAgICB0ZC1icmVhZGNydW1iXG4gICAgICAgIFttYXRUb29sdGlwXT1cImdvSG9tZUxhYmVsID8/ICcnXCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RdPVwiJ2hvbWUtYnV0dG9uJ1wiXG4gICAgICAgID5Ib21lPC9hXG4gICAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBzdGFjayBvZiBoaXN0b3J5U3RhY2s7IGxhc3QgYXMgaXNMYXN0OyBpbmRleCBhcyBpbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMYXN0OyBlbHNlIGxhc3RCcmVhZENydW1iXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIHRkLWJyZWFkY3J1bWJcbiAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soaW5kZXgpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdF09XCInYmFjay1idXR0b24nXCJcbiAgICAgICAgICAgID57eyBzdGFjay50aXRsZSB9fTwvYVxuICAgICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFzdEJyZWFkQ3J1bWI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYnJlYWRjcnVtYi1lbmQtaWNvblwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90ZC1icmVhZGNydW1icz5cbiAgICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYi1jdXJyZW50LXRpdGxlXCIgW2F0dHIuZGF0YS10ZXN0XT1cIid0aXRsZSdcIj5cbiAgICAgIHt7IGN1cnJlbnRJdGVtVGl0bGUgfX1cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZGl2aWRlciBbc3R5bGUucG9zaXRpb25dPVwiJ3JlbGF0aXZlJ1wiPjwvbWF0LWRpdmlkZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJlYVwiIGlkPVwidGQtbWFya2Rvd24tbmF2aWdhdG9yLWNvbnRlbnRcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNob3dUZE1hcmtkb3duTG9hZGVyIHx8IHNob3dUZE1hcmtkb3duXCJcbiAgICAgIGNsYXNzPVwibWFya2Rvd24td3JhcHBlclwiXG4gICAgICAjbWFya2Rvd25XcmFwcGVyXG4gICAgPlxuICAgICAgPHRkLW1lc3NhZ2VcbiAgICAgICAgKm5nSWY9XCJtYXJrZG93bkxvYWRlckVycm9yXCJcbiAgICAgICAgW3N1YmxhYmVsXT1cIm1hcmtkb3duTG9hZGVyRXJyb3JcIlxuICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICBpY29uPVwiZXJyb3JcIlxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RdPVwiJ21hcmtkb3duLWxvYWRlci1lcnJvcidcIlxuICAgICAgPjwvdGQtbWVzc2FnZT5cbiAgICAgIDx0ZC1mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXJcbiAgICAgICAgKm5nSWY9XCJzaG93VGRNYXJrZG93bkxvYWRlclwiXG4gICAgICAgIFt1cmxdPVwidXJsID8/ICcnXCJcbiAgICAgICAgW2h0dHBPcHRpb25zXT1cImh0dHBPcHRpb25zID8/IHt9XCJcbiAgICAgICAgW2FuY2hvcl09XCJhbmNob3IgPz8gJydcIlxuICAgICAgICBbY29weUNvZGVUb0NsaXBib2FyZF09XCJjb3B5Q29kZVRvQ2xpcGJvYXJkXCJcbiAgICAgICAgW2NvcHlDb2RlVG9vbHRpcHNdPVwiY29weUNvZGVUb29sdGlwc1wiXG4gICAgICAgIChsb2FkRmFpbGVkKT1cImhhbmRsZU1hcmtkb3duTG9hZGVyRXJyb3IoJGV2ZW50KVwiXG4gICAgICA+PC90ZC1mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXI+XG4gICAgICA8dGQtZmxhdm9yZWQtbWFya2Rvd25cbiAgICAgICAgKm5nSWY9XCJzaG93VGRNYXJrZG93blwiXG4gICAgICAgIFtjb250ZW50XT1cIm1hcmtkb3duU3RyaW5nID8/ICcnXCJcbiAgICAgICAgW2hvc3RlZFVybF09XCJ1cmwgPz8gJydcIlxuICAgICAgICBbYW5jaG9yXT1cImFuY2hvciA/PyAnJ1wiXG4gICAgICAgIFtjb3B5Q29kZVRvQ2xpcGJvYXJkXT1cImNvcHlDb2RlVG9DbGlwYm9hcmRcIlxuICAgICAgICBbY29weUNvZGVUb29sdGlwc109XCJjb3B5Q29kZVRvb2x0aXBzXCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrZWQpPVwiYnV0dG9uQ2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgPjwvdGQtZmxhdm9yZWQtbWFya2Rvd24+XG4gICAgPC9kaXY+XG5cbiAgICA8dGQtbWVzc2FnZVxuICAgICAgKm5nSWY9XCJjaGlsZHJlblVybEVycm9yXCJcbiAgICAgIFtzdWJsYWJlbF09XCJjaGlsZHJlblVybEVycm9yXCJcbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICBpY29uPVwiZXJyb3JcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0XT1cIidjaGlsZHJlbi11cmwtZXJyb3InXCJcbiAgICA+PC90ZC1tZXNzYWdlPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93TWVudVwiIGNsYXNzPVwidGQtbWFya2Rvd24tbGlzdFwiPlxuICAgICAgPG1hdC1hY3Rpb24tbGlzdD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGN1cnJlbnRNZW51SXRlbXM7IGluZGV4IGFzIGluZGV4XCJcbiAgICAgICAgICBbaWRdPVwiXG4gICAgICAgICAgICAndGQtbWFya2Rvd24tbmF2aWdhdG9yLWxpc3QtaXRlbS0nICsgKGl0ZW0uaWQgPyBpdGVtLmlkIDogaW5kZXgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICBtYXQtbGlzdC1pdGVtXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VGl0bGUoaXRlbSlcIlxuICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlZm9yZVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24gbWF0TGlzdEljb24+XG4gICAgICAgICAgICB7eyBnZXRJY29uKGl0ZW0pIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBtYXRMaW5lIGNsYXNzPVwidHJ1bmNhdGVcIj5cbiAgICAgICAgICAgIHt7IGdldFRpdGxlKGl0ZW0pIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIG1hdExpbmUgY2xhc3M9XCJ0cnVuY2F0ZVwiPnt7IGl0ZW0uZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtYWN0aW9uLWxpc3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cImZvb3RlckNvbXBvbmVudFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2XG4gICpuZ0lmPVwic2hvd0VtcHR5U3RhdGVcIlxuICBsYXlvdXQ9XCJjb2x1bW5cIlxuICBsYXlvdXQtYWxpZ249XCJjZW50ZXIgY2VudGVyXCJcbiAgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiXG4+XG4gIDxtYXQtaWNvbiBtYXRMaXN0QXZhdGFyPnN1YmplY3Q8L21hdC1pY29uPlxuICA8aDI+e3sgZW1wdHlTdGF0ZUxhYmVsIH19PC9oMj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,77 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TdMarkdownNavigatorComponent } from './markdown-navigator.component';
4
+ import { TdMarkdownNavigatorWindowComponent } from './markdown-navigator-window/markdown-navigator-window.component';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { MatTooltipModule } from '@angular/material/tooltip';
7
+ import { MatListModule } from '@angular/material/list';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
10
+ import { CovalentFlavoredMarkdownModule } from '@covalent/flavored-markdown';
11
+ import { CovalentDialogsModule } from '@covalent/core/dialogs';
12
+ import { CovalentMessageModule } from '@covalent/core/message';
13
+ import { TdMarkdownNavigatorWindowDirective } from './markdown-navigator-window-directive/markdown-navigator-window.directive';
14
+ import { TdMarkdownNavigatorWindowService } from './markdown-navigator-window-service/markdown-navigator-window.service';
15
+ import { CovalentBreadcrumbsModule } from '@covalent/core/breadcrumbs';
16
+ import * as i0 from "@angular/core";
17
+ export class CovalentMarkdownNavigatorModule {
18
+ }
19
+ CovalentMarkdownNavigatorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentMarkdownNavigatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ CovalentMarkdownNavigatorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentMarkdownNavigatorModule, declarations: [TdMarkdownNavigatorComponent,
21
+ TdMarkdownNavigatorWindowComponent,
22
+ TdMarkdownNavigatorWindowDirective], imports: [CommonModule,
23
+ // material
24
+ MatButtonModule,
25
+ MatTooltipModule,
26
+ MatListModule,
27
+ MatIconModule,
28
+ MatProgressBarModule,
29
+ CovalentBreadcrumbsModule,
30
+ CovalentDialogsModule,
31
+ CovalentFlavoredMarkdownModule,
32
+ CovalentMessageModule], exports: [TdMarkdownNavigatorComponent,
33
+ TdMarkdownNavigatorWindowComponent,
34
+ TdMarkdownNavigatorWindowDirective] });
35
+ CovalentMarkdownNavigatorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentMarkdownNavigatorModule, providers: [TdMarkdownNavigatorWindowService], imports: [[
36
+ CommonModule,
37
+ // material
38
+ MatButtonModule,
39
+ MatTooltipModule,
40
+ MatListModule,
41
+ MatIconModule,
42
+ MatProgressBarModule,
43
+ CovalentBreadcrumbsModule,
44
+ CovalentDialogsModule,
45
+ CovalentFlavoredMarkdownModule,
46
+ CovalentMessageModule,
47
+ ]] });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentMarkdownNavigatorModule, decorators: [{
49
+ type: NgModule,
50
+ args: [{
51
+ imports: [
52
+ CommonModule,
53
+ // material
54
+ MatButtonModule,
55
+ MatTooltipModule,
56
+ MatListModule,
57
+ MatIconModule,
58
+ MatProgressBarModule,
59
+ CovalentBreadcrumbsModule,
60
+ CovalentDialogsModule,
61
+ CovalentFlavoredMarkdownModule,
62
+ CovalentMessageModule,
63
+ ],
64
+ declarations: [
65
+ TdMarkdownNavigatorComponent,
66
+ TdMarkdownNavigatorWindowComponent,
67
+ TdMarkdownNavigatorWindowDirective,
68
+ ],
69
+ exports: [
70
+ TdMarkdownNavigatorComponent,
71
+ TdMarkdownNavigatorWindowComponent,
72
+ TdMarkdownNavigatorWindowDirective,
73
+ ],
74
+ providers: [TdMarkdownNavigatorWindowService],
75
+ }]
76
+ }] });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tbmF2aWdhdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tbmF2aWdhdG9yL3NyYy9tYXJrZG93bi1uYXZpZ2F0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQ3pILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQTZCdkUsTUFBTSxPQUFPLCtCQUErQjs7NEhBQS9CLCtCQUErQjs2SEFBL0IsK0JBQStCLGlCQVh4Qyw0QkFBNEI7UUFDNUIsa0NBQWtDO1FBQ2xDLGtDQUFrQyxhQWhCbEMsWUFBWTtRQUVaLFdBQVc7UUFDWCxlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGFBQWE7UUFDYixhQUFhO1FBQ2Isb0JBQW9CO1FBQ3BCLHlCQUF5QjtRQUN6QixxQkFBcUI7UUFDckIsOEJBQThCO1FBQzlCLHFCQUFxQixhQVFyQiw0QkFBNEI7UUFDNUIsa0NBQWtDO1FBQ2xDLGtDQUFrQzs2SEFJekIsK0JBQStCLGFBRi9CLENBQUMsZ0NBQWdDLENBQUMsWUF4QnBDO1lBQ1AsWUFBWTtZQUVaLFdBQVc7WUFDWCxlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixhQUFhO1lBQ2Isb0JBQW9CO1lBQ3BCLHlCQUF5QjtZQUN6QixxQkFBcUI7WUFDckIsOEJBQThCO1lBQzlCLHFCQUFxQjtTQUN0QjsyRkFhVSwrQkFBK0I7a0JBM0IzQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUVaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQiw4QkFBOEI7d0JBQzlCLHFCQUFxQjtxQkFDdEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLDRCQUE0Qjt3QkFDNUIsa0NBQWtDO3dCQUNsQyxrQ0FBa0M7cUJBQ25DO29CQUNELE9BQU8sRUFBRTt3QkFDUCw0QkFBNEI7d0JBQzVCLGtDQUFrQzt3QkFDbEMsa0NBQWtDO3FCQUNuQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRkTWFya2Rvd25OYXZpZ2F0b3JDb21wb25lbnQgfSBmcm9tICcuL21hcmtkb3duLW5hdmlnYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGRNYXJrZG93bk5hdmlnYXRvcldpbmRvd0NvbXBvbmVudCB9IGZyb20gJy4vbWFya2Rvd24tbmF2aWdhdG9yLXdpbmRvdy9tYXJrZG93bi1uYXZpZ2F0b3Itd2luZG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgQ292YWxlbnRGbGF2b3JlZE1hcmtkb3duTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2ZsYXZvcmVkLW1hcmtkb3duJztcbmltcG9ydCB7IENvdmFsZW50RGlhbG9nc01vZHVsZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2RpYWxvZ3MnO1xuaW1wb3J0IHsgQ292YWxlbnRNZXNzYWdlTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUvbWVzc2FnZSc7XG5pbXBvcnQgeyBUZE1hcmtkb3duTmF2aWdhdG9yV2luZG93RGlyZWN0aXZlIH0gZnJvbSAnLi9tYXJrZG93bi1uYXZpZ2F0b3Itd2luZG93LWRpcmVjdGl2ZS9tYXJrZG93bi1uYXZpZ2F0b3Itd2luZG93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUZE1hcmtkb3duTmF2aWdhdG9yV2luZG93U2VydmljZSB9IGZyb20gJy4vbWFya2Rvd24tbmF2aWdhdG9yLXdpbmRvdy1zZXJ2aWNlL21hcmtkb3duLW5hdmlnYXRvci13aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBDb3ZhbGVudEJyZWFkY3J1bWJzTW9kdWxlIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUvYnJlYWRjcnVtYnMnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuXG4gICAgLy8gbWF0ZXJpYWxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRMaXN0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgQ292YWxlbnRCcmVhZGNydW1ic01vZHVsZSxcbiAgICBDb3ZhbGVudERpYWxvZ3NNb2R1bGUsXG4gICAgQ292YWxlbnRGbGF2b3JlZE1hcmtkb3duTW9kdWxlLFxuICAgIENvdmFsZW50TWVzc2FnZU1vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVGRNYXJrZG93bk5hdmlnYXRvckNvbXBvbmVudCxcbiAgICBUZE1hcmtkb3duTmF2aWdhdG9yV2luZG93Q29tcG9uZW50LFxuICAgIFRkTWFya2Rvd25OYXZpZ2F0b3JXaW5kb3dEaXJlY3RpdmUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBUZE1hcmtkb3duTmF2aWdhdG9yQ29tcG9uZW50LFxuICAgIFRkTWFya2Rvd25OYXZpZ2F0b3JXaW5kb3dDb21wb25lbnQsXG4gICAgVGRNYXJrZG93bk5hdmlnYXRvcldpbmRvd0RpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbVGRNYXJrZG93bk5hdmlnYXRvcldpbmRvd1NlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudE1hcmtkb3duTmF2aWdhdG9yTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './markdown-navigator.module';
2
+ export * from './markdown-navigator.component';
3
+ export * from './markdown-navigator-window/markdown-navigator-window.component';
4
+ export * from './markdown-navigator-window-directive/markdown-navigator-window.directive';
5
+ export * from './markdown-navigator-window-service/markdown-navigator-window.service';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tbmF2aWdhdG9yL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsMkVBQTJFLENBQUM7QUFDMUYsY0FBYyx1RUFBdUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWFya2Rvd24tbmF2aWdhdG9yLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtkb3duLW5hdmlnYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXJrZG93bi1uYXZpZ2F0b3Itd2luZG93L21hcmtkb3duLW5hdmlnYXRvci13aW5kb3cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWFya2Rvd24tbmF2aWdhdG9yLXdpbmRvdy1kaXJlY3RpdmUvbWFya2Rvd24tbmF2aWdhdG9yLXdpbmRvdy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXJrZG93bi1uYXZpZ2F0b3Itd2luZG93LXNlcnZpY2UvbWFya2Rvd24tbmF2aWdhdG9yLXdpbmRvdy5zZXJ2aWNlJztcbiJdfQ==