@dereekb/dbx-web 12.5.9 → 12.6.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.
Files changed (53) hide show
  1. package/esm2022/lib/extension/download/blob/download.blob.button.component.mjs +86 -0
  2. package/esm2022/lib/extension/download/blob/index.mjs +2 -0
  3. package/esm2022/lib/extension/download/index.mjs +2 -1
  4. package/esm2022/lib/extension/download/text/download.text.component.mjs +20 -18
  5. package/esm2022/lib/extension/index.mjs +3 -1
  6. package/esm2022/lib/extension/model/model.tracker.mjs +1 -1
  7. package/esm2022/lib/extension/model/model.tracker.view.storage.mjs +3 -3
  8. package/esm2022/lib/extension/preview/index.mjs +4 -0
  9. package/esm2022/lib/extension/preview/webfilepreview.mjs +2 -0
  10. package/esm2022/lib/extension/preview/webfilepreview.service.mjs +60 -0
  11. package/esm2022/lib/extension/preview/webfilepreview.service.preset.mjs +31 -0
  12. package/esm2022/lib/extension/widget/widget.service.mjs +1 -1
  13. package/esm2022/lib/extension/zip/index.mjs +5 -0
  14. package/esm2022/lib/extension/zip/zip.blob.mjs +16 -0
  15. package/esm2022/lib/extension/zip/zip.blob.preview.component.mjs +156 -0
  16. package/esm2022/lib/extension/zip/zip.blob.preview.list.component.mjs +121 -0
  17. package/esm2022/lib/extension/zip/zip.preview.component.mjs +71 -0
  18. package/esm2022/lib/extension/zip/zip.preview.dialog.component.mjs +44 -0
  19. package/esm2022/lib/interaction/iframe/embed.component.mjs +104 -0
  20. package/esm2022/lib/interaction/iframe/embed.dialog.component.mjs +43 -0
  21. package/esm2022/lib/interaction/iframe/iframe.component.mjs +7 -4
  22. package/esm2022/lib/interaction/iframe/iframe.dialog.component.mjs +37 -0
  23. package/esm2022/lib/interaction/iframe/index.mjs +4 -1
  24. package/fesm2022/dereekb-dbx-web.mjs +4596 -3899
  25. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  26. package/lib/extension/_extension.scss +19 -0
  27. package/lib/extension/download/blob/download.blob.button.component.d.ts +55 -0
  28. package/lib/extension/download/blob/index.d.ts +1 -0
  29. package/lib/extension/download/index.d.ts +1 -0
  30. package/lib/extension/download/text/download.text.component.d.ts +7 -7
  31. package/lib/extension/index.d.ts +2 -0
  32. package/lib/extension/model/model.tracker.d.ts +3 -3
  33. package/lib/extension/preview/index.d.ts +3 -0
  34. package/lib/extension/preview/webfilepreview.d.ts +13 -0
  35. package/lib/extension/preview/webfilepreview.service.d.ts +31 -0
  36. package/lib/extension/preview/webfilepreview.service.preset.d.ts +13 -0
  37. package/lib/extension/widget/widget.service.d.ts +1 -1
  38. package/lib/extension/zip/_zip.scss +35 -0
  39. package/lib/extension/zip/index.d.ts +4 -0
  40. package/lib/extension/zip/zip.blob.d.ts +9 -0
  41. package/lib/extension/zip/zip.blob.preview.component.d.ts +54 -0
  42. package/lib/extension/zip/zip.blob.preview.list.component.d.ts +25 -0
  43. package/lib/extension/zip/zip.preview.component.d.ts +31 -0
  44. package/lib/extension/zip/zip.preview.dialog.component.d.ts +17 -0
  45. package/lib/interaction/iframe/_iframe.scss +13 -0
  46. package/lib/interaction/iframe/embed.component.d.ts +31 -0
  47. package/lib/interaction/iframe/embed.dialog.component.d.ts +17 -0
  48. package/lib/interaction/iframe/iframe.component.d.ts +0 -1
  49. package/lib/interaction/iframe/iframe.dialog.component.d.ts +13 -0
  50. package/lib/interaction/iframe/index.d.ts +3 -0
  51. package/lib/layout/style/_style.scss +2 -1
  52. package/lib/style/_config.scss +7 -1
  53. package/package.json +3 -2
@@ -0,0 +1,156 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';
2
+ import { DbxInjectionComponent } from '@dereekb/dbx-core';
3
+ import { JsonPipe, NgTemplateOutlet } from '@angular/common';
4
+ import { ZipReader, BlobReader } from '@zip.js/zip.js';
5
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
6
+ import { DbxLoadingComponent } from '../../loading';
7
+ import { distinctUntilChanged, map, of, shareReplay, switchMap } from 'rxjs';
8
+ import { loadingStateContext, loadingStateFromObs, valueFromFinishedLoadingState } from '@dereekb/rxjs';
9
+ import { dbxZipBlobPreviewEntryTreeFromEntries } from './zip.blob';
10
+ import { DbxZipPreviewEntryListComponent } from './zip.blob.preview.list.component';
11
+ import { DbxBarHeaderComponent, DbxListEmptyContentComponent, DbxListTitleGroupDirective, DbxSpacerDirective, DbxValueListItemModifierDirective } from '../../layout';
12
+ import { DbxListItemAnchorModifierDirective } from '../../router';
13
+ import { DbxEmbedComponent } from '../../interaction';
14
+ import { MatToolbarModule } from '@angular/material/toolbar';
15
+ import { DbxButtonSpacerDirective, DbxIconButtonComponent } from '../../button';
16
+ import { DbxDownloadBlobButtonComponent } from '../download/blob/download.blob.button.component';
17
+ import * as i0 from "@angular/core";
18
+ /**
19
+ * Used to display a zip preview based on the input blob.
20
+ */
21
+ export class DbxZipBlobPreviewComponent {
22
+ blob = input();
23
+ /**
24
+ * The download file name for the zip file.
25
+ *
26
+ * If not defined, then the file cannot be downloaded directly.
27
+ */
28
+ downloadFileName = input();
29
+ hasBlob = computed(() => !!this.blob());
30
+ zipReader = computed(() => {
31
+ const blob = this.blob();
32
+ return blob ? new ZipReader(new BlobReader(blob)) : undefined;
33
+ });
34
+ downloadZipFileBlobButtonConfigSignal = computed(() => {
35
+ const blob = this.blob();
36
+ const fileName = this.downloadFileName();
37
+ let result = undefined;
38
+ if (blob && fileName) {
39
+ result = {
40
+ blob,
41
+ fileName: fileName ?? 'download.zip',
42
+ buttonDisplay: {
43
+ icon: 'download_for_offline',
44
+ text: 'Download Zip'
45
+ },
46
+ buttonStyle: {
47
+ type: 'stroked'
48
+ }
49
+ };
50
+ }
51
+ return result;
52
+ });
53
+ zipReader$ = toObservable(this.zipReader);
54
+ allEntriesLoadingState$ = loadingStateFromObs(this.zipReader$.pipe(switchMap((x) => (x ? x.getEntries() : of([])))));
55
+ allEntries$ = this.allEntriesLoadingState$.pipe(valueFromFinishedLoadingState(), distinctUntilChanged(), shareReplay(1));
56
+ allEntriesRoot$ = this.allEntries$.pipe(map((x) => dbxZipBlobPreviewEntryTreeFromEntries(x)), shareReplay(1));
57
+ allEntriesRootSignal = toSignal(this.allEntriesRoot$);
58
+ selectedNodeSignal = signal(undefined);
59
+ listTitleGroupDelegate = {
60
+ groupValueForItem: (item) => {
61
+ const group = item.itemValue.value.value.directory ? 'directory' : 'file';
62
+ return group;
63
+ },
64
+ dataForGroupValue: (value, items) => {
65
+ const data = {
66
+ title: (value === 'directory' ? 'Directories' : 'Files') + ` (${items.length})`,
67
+ value,
68
+ sort: value === 'directory' ? 0 : 1,
69
+ cssClasses: ['dbx-zip-blob-preview-list-group']
70
+ };
71
+ return data;
72
+ },
73
+ sortGroupsByData: (a, b) => {
74
+ return a.sort - b.sort;
75
+ }
76
+ };
77
+ mode = computed(() => {
78
+ const selectedNode = this.selectedNodeSignal();
79
+ let mode = 'view_directory';
80
+ if (selectedNode && !selectedNode.value.value.directory) {
81
+ mode = 'view_entry';
82
+ }
83
+ return mode;
84
+ });
85
+ listEntries = computed(() => {
86
+ const allEntries = this.allEntriesRootSignal();
87
+ const selectedNode = this.selectedNodeSignal();
88
+ let entries;
89
+ if (selectedNode) {
90
+ if (selectedNode.value.value.directory) {
91
+ entries = selectedNode.children;
92
+ }
93
+ else {
94
+ entries = selectedNode.parent?.children;
95
+ }
96
+ }
97
+ else {
98
+ entries = allEntries?.children;
99
+ }
100
+ return entries ?? [];
101
+ });
102
+ listEntries$ = toObservable(this.listEntries);
103
+ listEntriesState$ = loadingStateFromObs(this.listEntries$);
104
+ selectedNodeIconSignal = computed(() => {
105
+ const selectedNode = this.selectedNodeSignal();
106
+ let icon;
107
+ if (selectedNode) {
108
+ if (selectedNode.value.value.directory) {
109
+ icon = 'folder';
110
+ }
111
+ else {
112
+ icon = 'note';
113
+ }
114
+ }
115
+ else {
116
+ icon = 'home';
117
+ }
118
+ return icon;
119
+ });
120
+ selectedNodePathSignal = computed(() => {
121
+ const selectedNode = this.selectedNodeSignal();
122
+ return ['Home', ...(selectedNode?.value.slashPathDetails.parts ?? [])].join(' > ');
123
+ });
124
+ selectedFileNodeSignal = computed(() => {
125
+ const selectedNode = this.selectedNodeSignal();
126
+ return selectedNode?.value.value.directory ? undefined : selectedNode;
127
+ });
128
+ selectedFileEntry$ = toObservable(this.selectedFileNodeSignal);
129
+ selectedFileEntryBlob$ = this.selectedFileEntry$.pipe(switchMap((x) => (x && x.value.getBlob ? x.value.getBlob() : of(undefined))), shareReplay(1));
130
+ selectedFileEntryBlobSignal = toSignal(this.selectedFileEntryBlob$);
131
+ context = loadingStateContext({ obs: this.allEntriesLoadingState$ });
132
+ ngOnDestroy() {
133
+ this.context.destroy();
134
+ }
135
+ makeEntryAnchor = (itemValue) => {
136
+ return {
137
+ onClick: () => {
138
+ this.selectedNodeSignal.set(itemValue);
139
+ }
140
+ };
141
+ };
142
+ homeClicked = () => {
143
+ this.selectedNodeSignal.set(undefined);
144
+ };
145
+ backClicked = () => {
146
+ const selectedNode = this.selectedNodeSignal();
147
+ this.selectedNodeSignal.set(selectedNode?.parent);
148
+ };
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipBlobPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxZipBlobPreviewComponent, isStandalone: true, selector: "dbx-zip-blob-preview", inputs: { blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, downloadFileName: { classPropertyName: "downloadFileName", publicName: "downloadFileName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (click)=\"backClicked()\"></dbx-icon-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (click)=\"homeClicked()\"></dbx-icon-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state$]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [srcBlob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n", dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxIconButtonComponent, selector: "dbx-icon-button" }, { kind: "component", type: DbxBarHeaderComponent, selector: "dbx-bar-header", inputs: ["text", "icon", "color"] }, { kind: "directive", type: DbxListTitleGroupDirective, selector: "[dbxListTitleGroup]", inputs: ["dbxListTitleGroup"] }, { kind: "component", type: DbxZipPreviewEntryListComponent, selector: "dbx-zip-preview-file-entry-list" }, { kind: "component", type: DbxEmbedComponent, selector: "dbx-embed", inputs: ["sanitizeUrl", "srcUrl", "type", "srcBlob"] }, { kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: DbxValueListItemModifierDirective, selector: "dbxListItemModifier,[dbxListItemModifier]", inputs: ["dbxListItemModifier"] }, { kind: "directive", type: DbxListItemAnchorModifierDirective, selector: "[dbxListItemAnchorModifier]", inputs: ["dbxListItemAnchorModifier"] }, { kind: "component", type: DbxDownloadBlobButtonComponent, selector: "dbx-download-blob-button", inputs: ["config"] }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipBlobPreviewComponent, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: 'dbx-zip-blob-preview', standalone: true, imports: [MatToolbarModule, DbxButtonSpacerDirective, DbxIconButtonComponent, DbxBarHeaderComponent, DbxListTitleGroupDirective, DbxInjectionComponent, DbxZipPreviewEntryListComponent, DbxEmbedComponent, DbxLoadingComponent, JsonPipe, NgTemplateOutlet, DbxValueListItemModifierDirective, DbxListItemAnchorModifierDirective, DbxListTitleGroupDirective, DbxListEmptyContentComponent, DbxDownloadBlobButtonComponent, DbxSpacerDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (click)=\"backClicked()\"></dbx-icon-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (click)=\"homeClicked()\"></dbx-icon-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state$]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [srcBlob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n" }]
155
+ }] });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLmJsb2IucHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3NyYy9saWIvZXh0ZW5zaW9uL3ppcC96aXAuYmxvYi5wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9leHRlbnNpb24vemlwL3ppcC5ibG9iLnByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxxQ0FBcUMsRUFBa0MsTUFBTSxZQUFZLENBQUM7QUFDbkcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixFQUF5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dUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBTaWduYWwsIHNpZ25hbCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBKc29uUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgWmlwUmVhZGVyLCBCbG9iUmVhZGVyLCBFbnRyeSwgRmlsZUVudHJ5IH0gZnJvbSAnQHppcC5qcy96aXAuanMnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGUsIGxvYWRpbmdTdGF0ZUNvbnRleHQsIGxvYWRpbmdTdGF0ZUZyb21PYnMsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBkYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZUZyb21FbnRyaWVzLCBEYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZU5vZGUgfSBmcm9tICcuL3ppcC5ibG9iJztcbmltcG9ydCB7IERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQgfSBmcm9tICcuL3ppcC5ibG9iLnByZXZpZXcubGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4QmFySGVhZGVyQ29tcG9uZW50LCBEYnhMaXN0RW1wdHlDb250ZW50Q29tcG9uZW50LCBEYnhMaXN0VGl0bGVHcm91cERhdGEsIERieExpc3RUaXRsZUdyb3VwRGlyZWN0aXZlLCBEYnhMaXN0VGl0bGVHcm91cFRpdGxlRGVsZWdhdGUsIERieFNwYWNlckRpcmVjdGl2ZSwgRGJ4VmFsdWVMaXN0SXRlbU1vZGlmaWVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbGF5b3V0JztcbmltcG9ydCB7IEFuY2hvckZvclZhbHVlRnVuY3Rpb24sIERieExpc3RJdGVtQW5jaG9yTW9kaWZpZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9yb3V0ZXInO1xuaW1wb3J0IHsgRGJ4RW1iZWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBNYXRUb29sYmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhcic7XG5pbXBvcnQgeyBEYnhCdXR0b25TcGFjZXJEaXJlY3RpdmUsIERieEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRGJ4RG93bmxvYWRCbG9iQnV0dG9uQ29tcG9uZW50LCBEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWcgfSBmcm9tICcuLi9kb3dubG9hZC9ibG9iL2Rvd25sb2FkLmJsb2IuYnV0dG9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIERieFppcEJsb2JQcmV2aWV3TW9kZSA9ICd2aWV3X2RpcmVjdG9yeScgfCAndmlld19lbnRyeSc7XG5cbmV4cG9ydCB0eXBlIERieFppcEJsb2JQcmV2aWV3R3JvdXBWYWx1ZSA9ICdkaXJlY3RvcnknIHwgJ2ZpbGUnO1xuZXhwb3J0IHR5cGUgRGJ4WmlwQmxvYlByZXZpZXdHcm91cERhdGEgPSBEYnhMaXN0VGl0bGVHcm91cERhdGE8RGJ4WmlwQmxvYlByZXZpZXdHcm91cFZhbHVlPiAmIHsgc29ydDogbnVtYmVyIH07XG5cbi8qKlxuICogVXNlZCB0byBkaXNwbGF5IGEgemlwIHByZXZpZXcgYmFzZWQgb24gdGhlIGlucHV0IGJsb2IuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtYmxvYi1wcmV2aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ppcC5ibG9iLnByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0VG9vbGJhck1vZHVsZSwgRGJ4QnV0dG9uU3BhY2VyRGlyZWN0aXZlLCBEYnhJY29uQnV0dG9uQ29tcG9uZW50LCBEYnhCYXJIZWFkZXJDb21wb25lbnQsIERieExpc3RUaXRsZUdyb3VwRGlyZWN0aXZlLCBEYnhJbmplY3Rpb25Db21wb25lbnQsIERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQsIERieEVtYmVkQ29tcG9uZW50LCBEYnhMb2FkaW5nQ29tcG9uZW50LCBKc29uUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgRGJ4VmFsdWVMaXN0SXRlbU1vZGlmaWVyRGlyZWN0aXZlLCBEYnhMaXN0SXRlbUFuY2hvck1vZGlmaWVyRGlyZWN0aXZlLCBEYnhMaXN0VGl0bGVHcm91cERpcmVjdGl2ZSwgRGJ4TGlzdEVtcHR5Q29udGVudENvbXBvbmVudCwgRGJ4RG93bmxvYWRCbG9iQnV0dG9uQ29tcG9uZW50LCBEYnhTcGFjZXJEaXJlY3RpdmVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYnhaaXBCbG9iUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IGJsb2IgPSBpbnB1dDxNYXliZTxCbG9iPj4oKTtcblxuICAvKipcbiAgICogVGhlIGRvd25sb2FkIGZpbGUgbmFtZSBmb3IgdGhlIHppcCBmaWxlLlxuICAgKlxuICAgKiBJZiBub3QgZGVmaW5lZCwgdGhlbiB0aGUgZmlsZSBjYW5ub3QgYmUgZG93bmxvYWRlZCBkaXJlY3RseS5cbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkRmlsZU5hbWUgPSBpbnB1dDxNYXliZTxzdHJpbmc+PigpO1xuXG4gIHJlYWRvbmx5IGhhc0Jsb2IgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMuYmxvYigpKTtcblxuICByZWFkb25seSB6aXBSZWFkZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmxvYiA9IHRoaXMuYmxvYigpO1xuICAgIHJldHVybiBibG9iID8gbmV3IFppcFJlYWRlcihuZXcgQmxvYlJlYWRlcihibG9iKSkgOiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkWmlwRmlsZUJsb2JCdXR0b25Db25maWdTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmxvYiA9IHRoaXMuYmxvYigpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5kb3dubG9hZEZpbGVOYW1lKCk7XG5cbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWc+ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGJsb2IgJiYgZmlsZU5hbWUpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgYmxvYixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lID8/ICdkb3dubG9hZC56aXAnLFxuICAgICAgICBidXR0b25EaXNwbGF5OiB7XG4gICAgICAgICAgaWNvbjogJ2Rvd25sb2FkX2Zvcl9vZmZsaW5lJyxcbiAgICAgICAgICB0ZXh0OiAnRG93bmxvYWQgWmlwJ1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25TdHlsZToge1xuICAgICAgICAgIHR5cGU6ICdzdHJva2VkJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHppcFJlYWRlciQgPSB0b09ic2VydmFibGUodGhpcy56aXBSZWFkZXIpO1xuXG4gIHJlYWRvbmx5IGFsbEVudHJpZXNMb2FkaW5nU3RhdGUkOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxFbnRyeVtdPj4gPSBsb2FkaW5nU3RhdGVGcm9tT2JzKHRoaXMuemlwUmVhZGVyJC5waXBlKHN3aXRjaE1hcCgoeCkgPT4gKHggPyB4LmdldEVudHJpZXMoKSA6IG9mKFtdKSkpKSk7XG4gIHJlYWRvbmx5IGFsbEVudHJpZXMkID0gdGhpcy5hbGxFbnRyaWVzTG9hZGluZ1N0YXRlJC5waXBlKHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlKCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgYWxsRW50cmllc1Jvb3QkID0gdGhpcy5hbGxFbnRyaWVzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gZGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVGcm9tRW50cmllcyh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBhbGxFbnRyaWVzUm9vdFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuYWxsRW50cmllc1Jvb3QkKTtcblxuICByZWFkb25seSBzZWxlY3RlZE5vZGVTaWduYWwgPSBzaWduYWw8TWF5YmU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBsaXN0VGl0bGVHcm91cERlbGVnYXRlOiBEYnhMaXN0VGl0bGVHcm91cFRpdGxlRGVsZWdhdGU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlLCBEYnhaaXBCbG9iUHJldmlld0dyb3VwVmFsdWUsIERieFppcEJsb2JQcmV2aWV3R3JvdXBEYXRhPiA9IHtcbiAgICBncm91cFZhbHVlRm9ySXRlbTogKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwOiBEYnhaaXBCbG9iUHJldmlld0dyb3VwVmFsdWUgPSBpdGVtLml0ZW1WYWx1ZS52YWx1ZS52YWx1ZS5kaXJlY3RvcnkgPyAnZGlyZWN0b3J5JyA6ICdmaWxlJztcbiAgICAgIHJldHVybiBncm91cDtcbiAgICB9LFxuICAgIGRhdGFGb3JHcm91cFZhbHVlOiAodmFsdWU6IERieFppcEJsb2JQcmV2aWV3R3JvdXBWYWx1ZSwgaXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IERieFppcEJsb2JQcmV2aWV3R3JvdXBEYXRhID0ge1xuICAgICAgICB0aXRsZTogKHZhbHVlID09PSAnZGlyZWN0b3J5JyA/ICdEaXJlY3RvcmllcycgOiAnRmlsZXMnKSArIGAgKCR7aXRlbXMubGVuZ3RofSlgLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgc29ydDogdmFsdWUgPT09ICdkaXJlY3RvcnknID8gMCA6IDEsXG4gICAgICAgIGNzc0NsYXNzZXM6IFsnZGJ4LXppcC1ibG9iLXByZXZpZXctbGlzdC1ncm91cCddXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHNvcnRHcm91cHNCeURhdGE6IChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zb3J0IC0gYi5zb3J0O1xuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBtb2RlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlU2lnbmFsKCk7XG5cbiAgICBsZXQgbW9kZSA9ICd2aWV3X2RpcmVjdG9yeSc7XG5cbiAgICBpZiAoc2VsZWN0ZWROb2RlICYmICFzZWxlY3RlZE5vZGUudmFsdWUudmFsdWUuZGlyZWN0b3J5KSB7XG4gICAgICBtb2RlID0gJ3ZpZXdfZW50cnknO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9KTtcblxuICByZWFkb25seSBsaXN0RW50cmllcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhbGxFbnRyaWVzID0gdGhpcy5hbGxFbnRyaWVzUm9vdFNpZ25hbCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlU2lnbmFsKCk7XG5cbiAgICBsZXQgZW50cmllczogTWF5YmU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlW10+O1xuXG4gICAgaWYgKHNlbGVjdGVkTm9kZSkge1xuICAgICAgaWYgKHNlbGVjdGVkTm9kZS52YWx1ZS52YWx1ZS5kaXJlY3RvcnkpIHtcbiAgICAgICAgZW50cmllcyA9IHNlbGVjdGVkTm9kZS5jaGlsZHJlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJpZXMgPSBzZWxlY3RlZE5vZGUucGFyZW50Py5jaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW50cmllcyA9IGFsbEVudHJpZXM/LmNoaWxkcmVuO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyaWVzID8/IFtdO1xuICB9KTtcblxuICByZWFkb25seSBsaXN0RW50cmllcyQgPSB0b09ic2VydmFibGUodGhpcy5saXN0RW50cmllcyk7XG4gIHJlYWRvbmx5IGxpc3RFbnRyaWVzU3RhdGUkID0gbG9hZGluZ1N0YXRlRnJvbU9icyh0aGlzLmxpc3RFbnRyaWVzJCk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWROb2RlSWNvblNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbCgpO1xuXG4gICAgbGV0IGljb246IHN0cmluZztcblxuICAgIGlmIChzZWxlY3RlZE5vZGUpIHtcbiAgICAgIGlmIChzZWxlY3RlZE5vZGUudmFsdWUudmFsdWUuZGlyZWN0b3J5KSB7XG4gICAgICAgIGljb24gPSAnZm9sZGVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGljb24gPSAnbm90ZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGljb24gPSAnaG9tZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGljb247XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTm9kZVBhdGhTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gdGhpcy5zZWxlY3RlZE5vZGVTaWduYWwoKTtcbiAgICByZXR1cm4gWydIb21lJywgLi4uKHNlbGVjdGVkTm9kZT8udmFsdWUuc2xhc2hQYXRoRGV0YWlscy5wYXJ0cyA/PyBbXSldLmpvaW4oJyA+ICcpO1xuICB9KTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVOb2RlU2lnbmFsOiBTaWduYWw8TWF5YmU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPEZpbGVFbnRyeT4+PiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbCgpO1xuICAgIHJldHVybiBzZWxlY3RlZE5vZGU/LnZhbHVlLnZhbHVlLmRpcmVjdG9yeSA/IHVuZGVmaW5lZCA6IChzZWxlY3RlZE5vZGUgYXMgRGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPEZpbGVFbnRyeT4pO1xuICB9KTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVFbnRyeSQgPSB0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZEZpbGVOb2RlU2lnbmFsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRGaWxlRW50cnlCbG9iJDogT2JzZXJ2YWJsZTxNYXliZTxCbG9iPj4gPSB0aGlzLnNlbGVjdGVkRmlsZUVudHJ5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gKHggJiYgeC52YWx1ZS5nZXRCbG9iID8geC52YWx1ZS5nZXRCbG9iKCkgOiBvZih1bmRlZmluZWQpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRGaWxlRW50cnlCbG9iU2lnbmFsOiBTaWduYWw8TWF5YmU8QmxvYj4+ID0gdG9TaWduYWwodGhpcy5zZWxlY3RlZEZpbGVFbnRyeUJsb2IkKTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy5hbGxFbnRyaWVzTG9hZGluZ1N0YXRlJCB9KTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHQuZGVzdHJveSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgbWFrZUVudHJ5QW5jaG9yOiBBbmNob3JGb3JWYWx1ZUZ1bmN0aW9uPERieFppcEJsb2JQcmV2aWV3RW50cnlUcmVlTm9kZT4gPSAoaXRlbVZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVTaWduYWwuc2V0KGl0ZW1WYWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICByZWFkb25seSBob21lQ2xpY2tlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbC5zZXQodW5kZWZpbmVkKTtcbiAgfTtcblxuICByZWFkb25seSBiYWNrQ2xpY2tlZCA9ICgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbCgpO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlU2lnbmFsLnNldChzZWxlY3RlZE5vZGU/LnBhcmVudCk7XG4gIH07XG59XG4iLCI8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWZsZXgtYmFyIGRieC16aXAtYmxvYi1wcmV2aWV3LXRvb2xiYXJcIj5cbiAgICA8ZGJ4LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWROb2RlU2lnbmFsKClcIiBpY29uPVwiYXJyb3dfdXB3YXJkXCIgdGV4dD1cIkJhY2tcIiAoY2xpY2spPVwiYmFja0NsaWNrZWQoKVwiPjwvZGJ4LWljb24tYnV0dG9uPlxuICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgIDxkYngtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cIiFzZWxlY3RlZE5vZGVTaWduYWwoKVwiIGljb249XCJob21lXCIgdGV4dD1cIkhvbWVcIiAoY2xpY2spPVwiaG9tZUNsaWNrZWQoKVwiPjwvZGJ4LWljb24tYnV0dG9uPlxuICAgIDxkYngtc3BhY2VyPjwvZGJ4LXNwYWNlcj5cbiAgICBAaWYgKGRvd25sb2FkWmlwRmlsZUJsb2JCdXR0b25Db25maWdTaWduYWwoKSkge1xuICAgICAgPGRieC1kb3dubG9hZC1ibG9iLWJ1dHRvbiBbY29uZmlnXT1cImRvd25sb2FkWmlwRmlsZUJsb2JCdXR0b25Db25maWdTaWduYWwoKVwiPjwvZGJ4LWRvd25sb2FkLWJsb2ItYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkYngtYmFyLWhlYWRlciBjbGFzcz1cImRieC16aXAtYmxvYi1wcmV2aWV3LWhlYWRlclwiIFtpY29uXT1cInNlbGVjdGVkTm9kZUljb25TaWduYWwoKVwiIFt0ZXh0XT1cInNlbGVjdGVkTm9kZVBhdGhTaWduYWwoKVwiPjwvZGJ4LWJhci1oZWFkZXI+XG4gIDxkaXYgY2xhc3M9XCJkYngtemlwLWJsb2ItcHJldmlldy1jb250ZW50XCI+XG4gICAgQHN3aXRjaCAobW9kZSgpKSB7XG4gICAgICBAY2FzZSAoJ3ZpZXdfZGlyZWN0b3J5Jykge1xuICAgICAgICA8ZGJ4LXppcC1wcmV2aWV3LWZpbGUtZW50cnktbGlzdCBbc3RhdGUkXT1cImxpc3RFbnRyaWVzU3RhdGUkXCIgW2RieExpc3RUaXRsZUdyb3VwXT1cImxpc3RUaXRsZUdyb3VwRGVsZWdhdGVcIiBbZGJ4TGlzdEl0ZW1Nb2RpZmllcl0gW2RieExpc3RJdGVtQW5jaG9yTW9kaWZpZXJdPVwibWFrZUVudHJ5QW5jaG9yXCI+PC9kYngtemlwLXByZXZpZXctZmlsZS1lbnRyeS1saXN0PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd2aWV3X2VudHJ5Jykge1xuICAgICAgICA8ZGJ4LWVtYmVkIGNsYXNzPVwiZGJ4LXppcC1ibG9iLXByZXZpZXctY29udGVudC1lbWJlZFwiIFtzcmNCbG9iXT1cInNlbGVjdGVkRmlsZUVudHJ5QmxvYlNpZ25hbCgpXCI+PC9kYngtZW1iZWQ+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGJ4LWxvYWRpbmc+XG4iXX0=
@@ -0,0 +1,121 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule, provideDbxListViewWrapper, AbstractDbxSelectionListWrapperDirective, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DbxSelectionValueListViewComponentImportsModule, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, DbxSpacerDirective } from '../../layout';
3
+ import { of } from 'rxjs';
4
+ import { DatePipe } from '@angular/common';
5
+ import { DbxIconButtonComponent } from '../../button';
6
+ import { DbxDownloadBlobButtonComponent } from '../download/blob/download.blob.button.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../layout/list/list.component";
9
+ import * as i2 from "../../layout/list/list.view.value.selection.component";
10
+ export function iconForDbxZipPreviewEntryWithSelection(entry) {
11
+ return entry.value.value.directory ? 'folder' : entry.value.mimeType ? 'note' : 'question_mark';
12
+ }
13
+ export class DbxZipPreviewEntryListComponent extends AbstractDbxSelectionListWrapperDirective {
14
+ constructor() {
15
+ super({
16
+ componentClass: DbxZipPreviewEntryListViewComponent,
17
+ defaultSelectionMode: 'view'
18
+ });
19
+ }
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxZipPreviewEntryListComponent, isStandalone: true, selector: "dbx-zip-preview-file-entry-list", providers: provideDbxListViewWrapper(DbxZipPreviewEntryListComponent), usesInheritance: true, ngImport: i0, template: "\n <dbx-list [state]=\"currentState$\" [config]=\"configSignal()\" [hasMore]=\"hasMore()\" [disabled]=\"disabled()\" [selectionMode]=\"selectionModeSignal()\">\n <ng-content top select=\"[top]\"></ng-content>\n <ng-content bottom select=\"[bottom]\"></ng-content>\n <ng-content empty select=\"[empty]\"></ng-content>\n <ng-content emptyLoading select=\"[emptyLoading]\"></ng-content>\n <ng-content end select=\"[end]\"></ng-content>\n </dbx-list>", isInline: true, dependencies: [{ kind: "ngmodule", type: DbxListWrapperComponentImportsModule }, { kind: "component", type: i1.DbxListComponent, selector: "dbx-list", inputs: ["padded", "state", "config", "disabled", "selectionMode", "hasMore"], outputs: ["contentScrolled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListComponent, decorators: [{
24
+ type: Component,
25
+ args: [{
26
+ selector: 'dbx-zip-preview-file-entry-list',
27
+ template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,
28
+ imports: [DbxListWrapperComponentImportsModule],
29
+ changeDetection: ChangeDetectionStrategy.OnPush,
30
+ providers: provideDbxListViewWrapper(DbxZipPreviewEntryListComponent),
31
+ standalone: true
32
+ }]
33
+ }], ctorParameters: () => [] });
34
+ export class DbxZipPreviewEntryListViewComponent extends AbstractDbxSelectionListViewDirective {
35
+ config = {
36
+ componentClass: DbxZipPreviewEntryListViewItemComponent,
37
+ mapValuesToItemValues: (x) => of(x.map((y) => ({ ...y, icon: iconForDbxZipPreviewEntryWithSelection(y), itemValue: y })))
38
+ };
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
40
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxZipPreviewEntryListViewComponent, isStandalone: true, selector: "dbx-zip-preview-file-entry-list-view", providers: provideDbxListView(DbxZipPreviewEntryListViewComponent), usesInheritance: true, ngImport: i0, template: "<dbx-selection-list-view [config]=\"config\"></dbx-selection-list-view>", isInline: true, dependencies: [{ kind: "ngmodule", type: DbxSelectionValueListViewComponentImportsModule }, { kind: "component", type: i2.DbxSelectionValueListViewComponent, selector: "dbx-selection-list-view" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewComponent, decorators: [{
43
+ type: Component,
44
+ args: [{
45
+ selector: 'dbx-zip-preview-file-entry-list-view',
46
+ template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,
47
+ imports: [DbxSelectionValueListViewComponentImportsModule],
48
+ changeDetection: ChangeDetectionStrategy.OnPush,
49
+ standalone: true,
50
+ providers: provideDbxListView(DbxZipPreviewEntryListViewComponent)
51
+ }]
52
+ }] });
53
+ export class DbxZipPreviewEntryListViewItemComponent extends AbstractDbxValueListViewItemComponent {
54
+ get name() {
55
+ return this.itemValue.value.value.filename ?? 'hello';
56
+ }
57
+ get lastModDate() {
58
+ return this.itemValue.value.value.lastModDate ?? undefined;
59
+ }
60
+ get isDirectory() {
61
+ return this.itemValue.value.value.directory;
62
+ }
63
+ get canDownload() {
64
+ return !this.isDirectory;
65
+ }
66
+ get downloadBlobButtonConfig() {
67
+ return {
68
+ loadBlob: this.itemValue.value.getBlob,
69
+ fileName: this.itemValue.value.slashPathDetails.fileName,
70
+ buttonDisplay: {
71
+ icon: 'download',
72
+ text: 'Download'
73
+ },
74
+ buttonStyle: {
75
+ type: 'stroked'
76
+ }
77
+ };
78
+ }
79
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
80
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxZipPreviewEntryListViewItemComponent, isStandalone: true, selector: "dbx-zip-preview-file-entry-list-view-item", usesInheritance: true, ngImport: i0, template: `
81
+ <div class="dbx-list-item-padded dbx-list-two-line-item">
82
+ <div class="item-left">
83
+ <div class="mat-subtitle-2">{{ name }}</div>
84
+ @if (lastModDate) {
85
+ <div class="item-details">{{ lastModDate | date: 'short' }}</div>
86
+ }
87
+ </div>
88
+ <dbx-spacer></dbx-spacer>
89
+ <div class="item-right">
90
+ @if (canDownload) {
91
+ <dbx-download-blob-button [config]="downloadBlobButtonConfig"></dbx-download-blob-button>
92
+ }
93
+ </div>
94
+ </div>
95
+ `, isInline: true, dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }, { kind: "component", type: DbxDownloadBlobButtonComponent, selector: "dbx-download-blob-button", inputs: ["config"] }] });
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewItemComponent, decorators: [{
98
+ type: Component,
99
+ args: [{
100
+ selector: 'dbx-zip-preview-file-entry-list-view-item',
101
+ template: `
102
+ <div class="dbx-list-item-padded dbx-list-two-line-item">
103
+ <div class="item-left">
104
+ <div class="mat-subtitle-2">{{ name }}</div>
105
+ @if (lastModDate) {
106
+ <div class="item-details">{{ lastModDate | date: 'short' }}</div>
107
+ }
108
+ </div>
109
+ <dbx-spacer></dbx-spacer>
110
+ <div class="item-right">
111
+ @if (canDownload) {
112
+ <dbx-download-blob-button [config]="downloadBlobButtonConfig"></dbx-download-blob-button>
113
+ }
114
+ </div>
115
+ </div>
116
+ `,
117
+ imports: [DatePipe, DbxIconButtonComponent, DbxSpacerDirective, DbxDownloadBlobButtonComponent],
118
+ standalone: true
119
+ }]
120
+ }] });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLmJsb2IucHJldmlldy5saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9leHRlbnNpb24vemlwL3ppcC5ibG9iLnByZXZpZXcubGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQXNCLHFEQUFxRCxFQUFFLG9DQUFvQyxFQUFFLHlCQUF5QixFQUFFLHdDQUF3QyxFQUFFLGlFQUFpRSxFQUFFLCtDQUErQyxFQUFFLGtCQUFrQixFQUFFLHFDQUFxQyxFQUFtQyxxQ0FBcUMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvZCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEQsT0FBTyxFQUFFLDhCQUE4QixFQUErQixNQUFNLGlEQUFpRCxDQUFDOzs7O0FBSTlILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFxQztJQUMxRixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7QUFDbEcsQ0FBQztBQVVELE1BQU0sT0FBTywrQkFBZ0MsU0FBUSx3Q0FBeUU7SUFDNUg7UUFDRSxLQUFLLENBQUM7WUFDSixjQUFjLEVBQUUsbUNBQW1DO1lBQ25ELG9CQUFvQixFQUFFLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FOVSwrQkFBK0I7NEZBQS9CLCtCQUErQiw4RUFIL0IseUJBQXlCLENBQUMsK0JBQStCLENBQUMsNmpCQUYzRCxvQ0FBb0M7OzRGQUtuQywrQkFBK0I7a0JBUjNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlDQUFpQztvQkFDM0MsUUFBUSxFQUFFLHFEQUFxRDtvQkFDL0QsT0FBTyxFQUFFLENBQUMsb0NBQW9DLENBQUM7b0JBQy9DLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUUseUJBQXlCLGlDQUFpQztvQkFDckUsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQWtCRCxNQUFNLE9BQU8sbUNBQW9DLFNBQVEscUNBQXNFO0lBQ3BILE1BQU0sR0FBcUU7UUFDbEYsY0FBYyxFQUFFLHVDQUF1QztRQUN2RCxxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMxSCxDQUFDO3dHQUpTLG1DQUFtQzs0RkFBbkMsbUNBQW1DLG1GQUZuQyxrQkFBa0IsQ0FBQyxtQ0FBbUMsQ0FBQyxxTEFIeEQsK0NBQStDOzs0RkFLOUMsbUNBQW1DO2tCQVIvQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQ0FBc0M7b0JBQ2hELFFBQVEsRUFBRSxpRUFBaUU7b0JBQzNFLE9BQU8sRUFBRSxDQUFDLCtDQUErQyxDQUFDO29CQUMxRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxrQkFBa0IscUNBQXFDO2lCQUNuRTs7QUE2QkQsTUFBTSxPQUFPLHVDQUF3QyxTQUFRLHFDQUFzRTtJQUNqSSxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDeEQsYUFBYSxFQUFFO2dCQUNiLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsVUFBVTthQUNqQjtZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsU0FBUzthQUNoQjtTQUNGLENBQUM7SUFDSixDQUFDO3dHQTdCVSx1Q0FBdUM7NEZBQXZDLHVDQUF1Qyw0SEFuQnhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlVCx1REFDUyxRQUFRLDZDQUEwQixrQkFBa0Isb0VBQUUsOEJBQThCOzs0RkFHbkYsdUNBQXVDO2tCQXJCbkQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkNBQTJDO29CQUNyRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztHQWVUO29CQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSw4QkFBOEIsQ0FBQztvQkFDL0YsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4VmFsdWVBc0xpc3RJdGVtLCBERUZBVUxUX0xJU1RfV1JBUFBFUl9DT01QT05FTlRfQ09ORklHVVJBVElPTl9URU1QTEFURSwgRGJ4TGlzdFdyYXBwZXJDb21wb25lbnRJbXBvcnRzTW9kdWxlLCBwcm92aWRlRGJ4TGlzdFZpZXdXcmFwcGVyLCBBYnN0cmFjdERieFNlbGVjdGlvbkxpc3RXcmFwcGVyRGlyZWN0aXZlLCBERUZBVUxUX0RCWF9TRUxFQ1RJT05fVkFMVUVfTElTVF9DT01QT05FTlRfQ09ORklHVVJBVElPTl9URU1QTEFURSwgRGJ4U2VsZWN0aW9uVmFsdWVMaXN0Vmlld0NvbXBvbmVudEltcG9ydHNNb2R1bGUsIHByb3ZpZGVEYnhMaXN0VmlldywgQWJzdHJhY3REYnhTZWxlY3Rpb25MaXN0Vmlld0RpcmVjdGl2ZSwgRGJ4U2VsZWN0aW9uVmFsdWVMaXN0Vmlld0NvbmZpZywgQWJzdHJhY3REYnhWYWx1ZUxpc3RWaWV3SXRlbUNvbXBvbmVudCwgRGJ4U3BhY2VyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbGF5b3V0JztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZU5vZGUgfSBmcm9tICcuL3ppcC5ibG9iJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERieEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRGJ4RG93bmxvYWRCbG9iQnV0dG9uQ29tcG9uZW50LCBEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWcgfSBmcm9tICcuLi9kb3dubG9hZC9ibG9iL2Rvd25sb2FkLmJsb2IuYnV0dG9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIERieFppcFByZXZpZXdFbnRyeVdpdGhTZWxlY3Rpb24gPSBEYnhWYWx1ZUFzTGlzdEl0ZW08RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGljb25Gb3JEYnhaaXBQcmV2aWV3RW50cnlXaXRoU2VsZWN0aW9uKGVudHJ5OiBEYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZU5vZGUpIHtcbiAgcmV0dXJuIGVudHJ5LnZhbHVlLnZhbHVlLmRpcmVjdG9yeSA/ICdmb2xkZXInIDogZW50cnkudmFsdWUubWltZVR5cGUgPyAnbm90ZScgOiAncXVlc3Rpb25fbWFyayc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtcHJldmlldy1maWxlLWVudHJ5LWxpc3QnLFxuICB0ZW1wbGF0ZTogREVGQVVMVF9MSVNUX1dSQVBQRVJfQ09NUE9ORU5UX0NPTkZJR1VSQVRJT05fVEVNUExBVEUsXG4gIGltcG9ydHM6IFtEYnhMaXN0V3JhcHBlckNvbXBvbmVudEltcG9ydHNNb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBwcm92aWRlRGJ4TGlzdFZpZXdXcmFwcGVyKERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQpLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdERieFNlbGVjdGlvbkxpc3RXcmFwcGVyRGlyZWN0aXZlPERieFppcFByZXZpZXdFbnRyeVdpdGhTZWxlY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgY29tcG9uZW50Q2xhc3M6IERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3Q29tcG9uZW50LFxuICAgICAgZGVmYXVsdFNlbGVjdGlvbk1vZGU6ICd2aWV3J1xuICAgIH0pO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtcHJldmlldy1maWxlLWVudHJ5LWxpc3QtdmlldycsXG4gIHRlbXBsYXRlOiBERUZBVUxUX0RCWF9TRUxFQ1RJT05fVkFMVUVfTElTVF9DT01QT05FTlRfQ09ORklHVVJBVElPTl9URU1QTEFURSxcbiAgaW1wb3J0czogW0RieFNlbGVjdGlvblZhbHVlTGlzdFZpZXdDb21wb25lbnRJbXBvcnRzTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogcHJvdmlkZURieExpc3RWaWV3KERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3Q29tcG9uZW50KVxufSlcbmV4cG9ydCBjbGFzcyBEYnhaaXBQcmV2aWV3RW50cnlMaXN0Vmlld0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGJ4U2VsZWN0aW9uTGlzdFZpZXdEaXJlY3RpdmU8RGJ4WmlwUHJldmlld0VudHJ5V2l0aFNlbGVjdGlvbj4ge1xuICByZWFkb25seSBjb25maWc6IERieFNlbGVjdGlvblZhbHVlTGlzdFZpZXdDb25maWc8RGJ4WmlwUHJldmlld0VudHJ5V2l0aFNlbGVjdGlvbj4gPSB7XG4gICAgY29tcG9uZW50Q2xhc3M6IERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3SXRlbUNvbXBvbmVudCxcbiAgICBtYXBWYWx1ZXNUb0l0ZW1WYWx1ZXM6ICh4KSA9PiBvZih4Lm1hcCgoeSkgPT4gKHsgLi4ueSwgaWNvbjogaWNvbkZvckRieFppcFByZXZpZXdFbnRyeVdpdGhTZWxlY3Rpb24oeSksIGl0ZW1WYWx1ZTogeSB9KSkpXG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtcHJldmlldy1maWxlLWVudHJ5LWxpc3Qtdmlldy1pdGVtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LWxpc3QtaXRlbS1wYWRkZWQgZGJ4LWxpc3QtdHdvLWxpbmUtaXRlbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGVmdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LXN1YnRpdGxlLTJcIj57eyBuYW1lIH19PC9kaXY+XG4gICAgICAgIEBpZiAobGFzdE1vZERhdGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1kZXRhaWxzXCI+e3sgbGFzdE1vZERhdGUgfCBkYXRlOiAnc2hvcnQnIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRieC1zcGFjZXI+PC9kYngtc3BhY2VyPlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tcmlnaHRcIj5cbiAgICAgICAgQGlmIChjYW5Eb3dubG9hZCkge1xuICAgICAgICAgIDxkYngtZG93bmxvYWQtYmxvYi1idXR0b24gW2NvbmZpZ109XCJkb3dubG9hZEJsb2JCdXR0b25Db25maWdcIj48L2RieC1kb3dubG9hZC1ibG9iLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGltcG9ydHM6IFtEYXRlUGlwZSwgRGJ4SWNvbkJ1dHRvbkNvbXBvbmVudCwgRGJ4U3BhY2VyRGlyZWN0aXZlLCBEYnhEb3dubG9hZEJsb2JCdXR0b25Db21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3SXRlbUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGJ4VmFsdWVMaXN0Vmlld0l0ZW1Db21wb25lbnQ8RGJ4WmlwUHJldmlld0VudHJ5V2l0aFNlbGVjdGlvbj4ge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWUudmFsdWUudmFsdWUuZmlsZW5hbWUgPz8gJ2hlbGxvJztcbiAgfVxuXG4gIGdldCBsYXN0TW9kRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWUudmFsdWUudmFsdWUubGFzdE1vZERhdGUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGlzRGlyZWN0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1WYWx1ZS52YWx1ZS52YWx1ZS5kaXJlY3Rvcnk7XG4gIH1cblxuICBnZXQgY2FuRG93bmxvYWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGlyZWN0b3J5O1xuICB9XG5cbiAgZ2V0IGRvd25sb2FkQmxvYkJ1dHRvbkNvbmZpZygpOiBEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkQmxvYjogdGhpcy5pdGVtVmFsdWUudmFsdWUuZ2V0QmxvYixcbiAgICAgIGZpbGVOYW1lOiB0aGlzLml0ZW1WYWx1ZS52YWx1ZS5zbGFzaFBhdGhEZXRhaWxzLmZpbGVOYW1lLFxuICAgICAgYnV0dG9uRGlzcGxheToge1xuICAgICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgICB0ZXh0OiAnRG93bmxvYWQnXG4gICAgICB9LFxuICAgICAgYnV0dG9uU3R5bGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cm9rZWQnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,71 @@
1
+ import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
+ import { DbxInjectionComponent } from '@dereekb/dbx-core';
3
+ import { NgTemplateOutlet } from '@angular/common';
4
+ import { DbxLoadingComponent } from '../../loading';
5
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
6
+ import { combineLatest, distinctUntilChanged, from, of, shareReplay, switchMap } from 'rxjs';
7
+ import { beginLoading, errorResult, loadingStateContext, startWithBeginLoading, successResult, valueFromFinishedLoadingState } from '@dereekb/rxjs';
8
+ import { DbxZipBlobPreviewComponent } from './zip.blob.preview.component';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * Used to display a corresponding widget based on the input data.
12
+ */
13
+ export class DbxZipPreviewComponent {
14
+ /**
15
+ * The URL to download the zip file from, if applicable.
16
+ */
17
+ srcUrl = input();
18
+ /**
19
+ * The blob to use for the zip file, if applicable.
20
+ */
21
+ blob = input();
22
+ /**
23
+ * The file name to use for the zip file.
24
+ */
25
+ downloadFileName = input();
26
+ srcUrl$ = toObservable(this.srcUrl);
27
+ blob$ = toObservable(this.blob);
28
+ zipFileBlobLoadingState$ = combineLatest([this.srcUrl$, this.blob$]).pipe(switchMap(([srcUrl, blob]) => {
29
+ let obs;
30
+ if (blob) {
31
+ obs = of(successResult(blob));
32
+ }
33
+ else if (srcUrl) {
34
+ obs = from(fetch(srcUrl, { method: 'GET' }).then((x) => x
35
+ .blob()
36
+ .then((y) => successResult(y))
37
+ .catch((e) => errorResult(e)))).pipe(startWithBeginLoading());
38
+ }
39
+ else {
40
+ obs = of(beginLoading());
41
+ }
42
+ return obs;
43
+ }));
44
+ zipFileBlob$ = this.zipFileBlobLoadingState$.pipe(valueFromFinishedLoadingState(), distinctUntilChanged(), shareReplay(1));
45
+ zipFileBlobSignal = toSignal(this.zipFileBlob$);
46
+ context = loadingStateContext({ obs: this.zipFileBlobLoadingState$ });
47
+ ngOnDestroy() {
48
+ this.context.destroy();
49
+ }
50
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DbxZipPreviewComponent, isStandalone: true, selector: "dbx-zip-preview", inputs: { srcUrl: { classPropertyName: "srcUrl", publicName: "srcUrl", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, downloadFileName: { classPropertyName: "downloadFileName", publicName: "downloadFileName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
52
+ <dbx-loading [context]="context">
53
+ <dbx-zip-blob-preview [downloadFileName]="downloadFileName()" [blob]="zipFileBlobSignal()"></dbx-zip-blob-preview>
54
+ </dbx-loading>
55
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "component", type: DbxZipBlobPreviewComponent, selector: "dbx-zip-blob-preview", inputs: ["blob", "downloadFileName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewComponent, decorators: [{
58
+ type: Component,
59
+ args: [{
60
+ selector: 'dbx-zip-preview',
61
+ template: `
62
+ <dbx-loading [context]="context">
63
+ <dbx-zip-blob-preview [downloadFileName]="downloadFileName()" [blob]="zipFileBlobSignal()"></dbx-zip-blob-preview>
64
+ </dbx-loading>
65
+ `,
66
+ standalone: true,
67
+ imports: [DbxInjectionComponent, DbxLoadingComponent, DbxZipBlobPreviewComponent, NgTemplateOutlet],
68
+ changeDetection: ChangeDetectionStrategy.OnPush
69
+ }]
70
+ }] });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLnByZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9zcmMvbGliL2V4dGVuc2lvbi96aXAvemlwLnByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFnQixtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBRTFFOztHQUVHO0FBWUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQzs7T0FFRztJQUNNLE1BQU0sR0FBRyxLQUFLLEVBQStCLENBQUM7SUFFdkQ7O09BRUc7SUFDTSxJQUFJLEdBQUcsS0FBSyxFQUFlLENBQUM7SUFFckM7O09BRUc7SUFDTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQWlCLENBQUM7SUFFMUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hGLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDM0IsSUFBSSxHQUFtQyxDQUFDO1FBRXhDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQ1IsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzFDLENBQUM7aUJBQ0UsSUFBSSxFQUFFO2lCQUNOLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxDQUNGLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRU8sWUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNILGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFaEQsT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7SUFFL0UsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0FqRFUsc0JBQXNCOzRGQUF0QixzQkFBc0IsZ2VBVHZCOzs7O0dBSVQsNERBRWdDLG1CQUFtQixtS0FBRSwwQkFBMEI7OzRGQUdyRSxzQkFBc0I7a0JBWGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7O0dBSVQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDO29CQUNuRyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IE1heWJlLCBXZWJzaXRlVXJsV2l0aFByZWZpeCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYmVnaW5Mb2FkaW5nLCBlcnJvclJlc3VsdCwgTG9hZGluZ1N0YXRlLCBsb2FkaW5nU3RhdGVDb250ZXh0LCBzdGFydFdpdGhCZWdpbkxvYWRpbmcsIHN1Y2Nlc3NSZXN1bHQsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhaaXBCbG9iUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vemlwLmJsb2IucHJldmlldy5jb21wb25lbnQnO1xuXG4vKipcbiAqIFVzZWQgdG8gZGlzcGxheSBhIGNvcnJlc3BvbmRpbmcgd2lkZ2V0IGJhc2VkIG9uIHRoZSBpbnB1dCBkYXRhLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtemlwLXByZXZpZXcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtbG9hZGluZyBbY29udGV4dF09XCJjb250ZXh0XCI+XG4gICAgICA8ZGJ4LXppcC1ibG9iLXByZXZpZXcgW2Rvd25sb2FkRmlsZU5hbWVdPVwiZG93bmxvYWRGaWxlTmFtZSgpXCIgW2Jsb2JdPVwiemlwRmlsZUJsb2JTaWduYWwoKVwiPjwvZGJ4LXppcC1ibG9iLXByZXZpZXc+XG4gICAgPC9kYngtbG9hZGluZz5cbiAgYCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0RieEluamVjdGlvbkNvbXBvbmVudCwgRGJ4TG9hZGluZ0NvbXBvbmVudCwgRGJ4WmlwQmxvYlByZXZpZXdDb21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYnhaaXBQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gZG93bmxvYWQgdGhlIHppcCBmaWxlIGZyb20sIGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICByZWFkb25seSBzcmNVcmwgPSBpbnB1dDxNYXliZTxXZWJzaXRlVXJsV2l0aFByZWZpeD4+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBibG9iIHRvIHVzZSBmb3IgdGhlIHppcCBmaWxlLCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmxvYiA9IGlucHV0PE1heWJlPEJsb2I+PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHppcCBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG93bmxvYWRGaWxlTmFtZSA9IGlucHV0PE1heWJlPHN0cmluZz4+KCk7XG5cbiAgcmVhZG9ubHkgc3JjVXJsJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNyY1VybCk7XG4gIHJlYWRvbmx5IGJsb2IkID0gdG9PYnNlcnZhYmxlKHRoaXMuYmxvYik7XG5cbiAgcmVhZG9ubHkgemlwRmlsZUJsb2JMb2FkaW5nU3RhdGUkID0gY29tYmluZUxhdGVzdChbdGhpcy5zcmNVcmwkLCB0aGlzLmJsb2IkXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtzcmNVcmwsIGJsb2JdKSA9PiB7XG4gICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxCbG9iPj47XG5cbiAgICAgIGlmIChibG9iKSB7XG4gICAgICAgIG9icyA9IG9mKHN1Y2Nlc3NSZXN1bHQoYmxvYikpO1xuICAgICAgfSBlbHNlIGlmIChzcmNVcmwpIHtcbiAgICAgICAgb2JzID0gZnJvbShcbiAgICAgICAgICBmZXRjaChzcmNVcmwsIHsgbWV0aG9kOiAnR0VUJyB9KS50aGVuKCh4KSA9PlxuICAgICAgICAgICAgeFxuICAgICAgICAgICAgICAuYmxvYigpXG4gICAgICAgICAgICAgIC50aGVuKCh5KSA9PiBzdWNjZXNzUmVzdWx0KHkpKVxuICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IGVycm9yUmVzdWx0PEJsb2I+KGUpKVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKHN0YXJ0V2l0aEJlZ2luTG9hZGluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKGJlZ2luTG9hZGluZzxCbG9iPigpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHppcEZpbGVCbG9iJCA9IHRoaXMuemlwRmlsZUJsb2JMb2FkaW5nU3RhdGUkLnBpcGUodmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuICByZWFkb25seSB6aXBGaWxlQmxvYlNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuemlwRmlsZUJsb2IkKTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy56aXBGaWxlQmxvYkxvYWRpbmdTdGF0ZSQgfSk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { DbxDialogContentDirective, AbstractDialogDirective } from '../../interaction/dialog';
3
+ import { DbxZipPreviewComponent } from './zip.preview.component';
4
+ import * as i0 from "@angular/core";
5
+ export class DbxZipPreviewDialogComponent extends AbstractDialogDirective {
6
+ get srcUrl() {
7
+ return this.data.srcUrl;
8
+ }
9
+ get blob() {
10
+ return this.data.blob;
11
+ }
12
+ get downloadFileName() {
13
+ return this.data.downloadFileName;
14
+ }
15
+ static openDialog(matDialog, config) {
16
+ const dialogRef = matDialog.open(DbxZipPreviewDialogComponent, {
17
+ width: '80vw',
18
+ height: '80vh',
19
+ ...config,
20
+ data: config
21
+ });
22
+ return dialogRef;
23
+ }
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
25
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxZipPreviewDialogComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
26
+ <dbx-dialog-content>
27
+ <dbx-zip-preview [srcUrl]="srcUrl" [blob]="blob" [downloadFileName]="downloadFileName"></dbx-zip-preview>
28
+ </dbx-dialog-content>
29
+ `, isInline: true, dependencies: [{ kind: "component", type: DbxZipPreviewComponent, selector: "dbx-zip-preview", inputs: ["srcUrl", "blob", "downloadFileName"] }, { kind: "directive", type: DbxDialogContentDirective, selector: "dbx-dialog-content,[dbxDialogContent],.dbx-dialog-content", inputs: ["width"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewDialogComponent, decorators: [{
32
+ type: Component,
33
+ args: [{
34
+ template: `
35
+ <dbx-dialog-content>
36
+ <dbx-zip-preview [srcUrl]="srcUrl" [blob]="blob" [downloadFileName]="downloadFileName"></dbx-zip-preview>
37
+ </dbx-dialog-content>
38
+ `,
39
+ imports: [DbxZipPreviewComponent, DbxDialogContentDirective],
40
+ changeDetection: ChangeDetectionStrategy.OnPush,
41
+ standalone: true
42
+ }]
43
+ }] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLnByZXZpZXcuZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9leHRlbnNpb24vemlwL3ppcC5wcmV2aWV3LmRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFrQmpFLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSx1QkFBd0Q7SUFDeEcsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQW9CLEVBQUUsTUFBaUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUM3RCxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsR0FBRyxNQUFNO1lBQ1QsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO3dHQXRCVSw0QkFBNEI7NEZBQTVCLDRCQUE0QiwrRkFUN0I7Ozs7R0FJVCw0REFDUyxzQkFBc0IsNEdBQUUseUJBQXlCOzs0RkFJaEQsNEJBQTRCO2tCQVZ4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7OztHQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDO29CQUM1RCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBXZWJzaXRlVXJsV2l0aFByZWZpeCwgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieERpYWxvZ0NvbnRlbnREaXJlY3RpdmUsIEFic3RyYWN0RGlhbG9nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vZGlhbG9nJztcbmltcG9ydCB7IERieFppcFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ppcC5wcmV2aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4WmlwUHJldmlld0RpYWxvZ0NvbmZpZyBleHRlbmRzIE9taXQ8TWF0RGlhbG9nQ29uZmlnLCAnZGF0YSc+IHtcbiAgcmVhZG9ubHkgc3JjVXJsPzogTWF5YmU8V2Vic2l0ZVVybFdpdGhQcmVmaXg+O1xuICByZWFkb25seSBibG9iPzogTWF5YmU8QmxvYj47XG4gIHJlYWRvbmx5IGRvd25sb2FkRmlsZU5hbWU/OiBNYXliZTxzdHJpbmc+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGJ4LWRpYWxvZy1jb250ZW50PlxuICAgICAgPGRieC16aXAtcHJldmlldyBbc3JjVXJsXT1cInNyY1VybFwiIFtibG9iXT1cImJsb2JcIiBbZG93bmxvYWRGaWxlTmFtZV09XCJkb3dubG9hZEZpbGVOYW1lXCI+PC9kYngtemlwLXByZXZpZXc+XG4gICAgPC9kYngtZGlhbG9nLWNvbnRlbnQ+XG4gIGAsXG4gIGltcG9ydHM6IFtEYnhaaXBQcmV2aWV3Q29tcG9uZW50LCBEYnhEaWFsb2dDb250ZW50RGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4WmlwUHJldmlld0RpYWxvZ0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGlhbG9nRGlyZWN0aXZlPHZvaWQsIERieFppcFByZXZpZXdEaWFsb2dDb25maWc+IHtcbiAgZ2V0IHNyY1VybCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnNyY1VybDtcbiAgfVxuXG4gIGdldCBibG9iKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYmxvYjtcbiAgfVxuXG4gIGdldCBkb3dubG9hZEZpbGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZG93bmxvYWRGaWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBvcGVuRGlhbG9nKG1hdERpYWxvZzogTWF0RGlhbG9nLCBjb25maWc6IERieFppcFByZXZpZXdEaWFsb2dDb25maWcpOiBNYXREaWFsb2dSZWY8RGJ4WmlwUHJldmlld0RpYWxvZ0NvbXBvbmVudCwgdm9pZD4ge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IG1hdERpYWxvZy5vcGVuKERieFppcFByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnODB2dycsXG4gICAgICBoZWlnaHQ6ICc4MHZoJyxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGRhdGE6IGNvbmZpZ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgfVxufVxuIl19
@@ -0,0 +1,104 @@
1
+ import { Component, viewChild, ElementRef, ChangeDetectionStrategy, computed, inject, SecurityContext, input, effect, signal } from '@angular/core';
2
+ import { toObservable } from '@angular/core/rxjs-interop';
3
+ import { combineLatest } from 'rxjs';
4
+ import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
5
+ import { DomSanitizer } from '@angular/platform-browser';
6
+ import { browserObjectUrlRef } from '@dereekb/browser';
7
+ import * as i0 from "@angular/core";
8
+ export class DbxEmbedComponent extends AbstractSubscriptionDirective {
9
+ _browserObjectUrlRef = browserObjectUrlRef();
10
+ sanitizer = inject(DomSanitizer);
11
+ root = viewChild('root', { read: ElementRef });
12
+ sanitizeUrl = input(false);
13
+ srcUrl = input();
14
+ type = input();
15
+ /**
16
+ * The input src blob or media source to use.
17
+ *
18
+ * If set, the srcUrl will be updated with the browser object URL.
19
+ */
20
+ srcBlob = input();
21
+ srcUrlFromBlob = signal(undefined);
22
+ typeFromBlob = signal(undefined);
23
+ srcBlobEffect = effect(() => {
24
+ const blob = this.srcBlob();
25
+ this.srcUrlFromBlob.set(this._browserObjectUrlRef.createBrowserUrl(blob));
26
+ this.typeFromBlob.set(blob?.type);
27
+ }, {
28
+ allowSignalWrites: true
29
+ });
30
+ srcUrlSignal = computed(() => {
31
+ const srcUrl = this.srcUrl();
32
+ const srcUrlFromBlob = this.srcUrlFromBlob();
33
+ const baseUrl = srcUrl ?? srcUrlFromBlob;
34
+ let url = baseUrl;
35
+ const sanitizeUrl = this.sanitizeUrl();
36
+ if (url && typeof url === 'string' && sanitizeUrl) {
37
+ url = this.sanitizer.bypassSecurityTrustResourceUrl(url);
38
+ }
39
+ return url;
40
+ });
41
+ typeSignal = computed(() => {
42
+ const type = this.type();
43
+ const typeFromBlob = this.typeFromBlob();
44
+ return type ?? typeFromBlob;
45
+ });
46
+ root$ = toObservable(this.root);
47
+ srcUrl$ = toObservable(this.srcUrlSignal);
48
+ type$ = toObservable(this.typeSignal);
49
+ constructor() {
50
+ super();
51
+ this.sub = combineLatest([this.srcUrl$, this.root$, this.type$]).subscribe(([srcUrl, root, type]) => {
52
+ const element = root?.nativeElement;
53
+ if (element) {
54
+ // remove all embeds from the element
55
+ element?.childNodes.forEach((x) => element.removeChild(x));
56
+ if (srcUrl) {
57
+ // NOTE: We do this because of the following chromium behavior:
58
+ // https://issues.chromium.org/issues/40508296
59
+ //
60
+ // Embed cannot have src change dynamically, so we create a new embed element each time the src changes.
61
+ //
62
+ const embed = document.createElement('embed');
63
+ let url = undefined;
64
+ if (srcUrl != null && typeof srcUrl !== 'string') {
65
+ url = this.sanitizer.sanitize(SecurityContext.URL, srcUrl);
66
+ }
67
+ else {
68
+ url = srcUrl;
69
+ }
70
+ embed.setAttribute('src', url ?? '');
71
+ // only set the type if it is presented
72
+ if (type) {
73
+ embed.setAttribute('type', type);
74
+ // if the type is an image, also add the embed-image class
75
+ if (type.startsWith('image/')) {
76
+ embed.setAttribute('class', 'embed-image');
77
+ }
78
+ }
79
+ element.appendChild(embed);
80
+ }
81
+ }
82
+ });
83
+ }
84
+ ngOnDestroy() {
85
+ super.ngOnDestroy();
86
+ this._browserObjectUrlRef.destroy();
87
+ }
88
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxEmbedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
89
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DbxEmbedComponent, isStandalone: true, selector: "dbx-embed", inputs: { sanitizeUrl: { classPropertyName: "sanitizeUrl", publicName: "sanitizeUrl", isSignal: true, isRequired: false, transformFunction: null }, srcUrl: { classPropertyName: "srcUrl", publicName: "srcUrl", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, srcBlob: { classPropertyName: "srcBlob", publicName: "srcBlob", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "root", first: true, predicate: ["root"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
90
+ <span #root></span>
91
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
92
+ }
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxEmbedComponent, decorators: [{
94
+ type: Component,
95
+ args: [{
96
+ selector: 'dbx-embed',
97
+ template: `
98
+ <span #root></span>
99
+ `,
100
+ changeDetection: ChangeDetectionStrategy.OnPush,
101
+ standalone: true
102
+ }]
103
+ }], ctorParameters: () => [] });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9zcmMvbGliL2ludGVyYWN0aW9uL2lmcmFtZS9lbWJlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBVXZELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSw2QkFBNkI7SUFDakQsb0JBQW9CLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUVyRCxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWpDLElBQUksR0FBRyxTQUFTLENBQXNDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRXBGLFdBQVcsR0FBRyxLQUFLLENBQWlCLEtBQUssQ0FBQyxDQUFDO0lBRTNDLE1BQU0sR0FBRyxLQUFLLEVBQW1DLENBQUM7SUFDbEQsSUFBSSxHQUFHLEtBQUssRUFBdUMsQ0FBQztJQUU3RDs7OztPQUlHO0lBQ00sT0FBTyxHQUFHLEtBQUssRUFBZSxDQUFDO0lBQy9CLGNBQWMsR0FBRyxNQUFNLENBQWdCLFNBQVMsQ0FBQyxD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QkFBTSxDQUFDO3dCQUNOLEdBQUcsR0FBRyxNQUFNLENBQUM7b0JBQ2YsQ0FBQztvQkFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRXJDLHVDQUF1QztvQkFDdkMsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFFakMsMERBQTBEO3dCQUMxRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDOUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLFdBQVc7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QyxDQUFDO3dHQTFHVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixrcEJBS21ELFVBQVUsb0VBWC9FOztHQUVUOzs0RkFJVSxpQkFBaUI7a0JBUjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCB2aWV3Q2hpbGQsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBjb21wdXRlZCwgaW5qZWN0LCBTZWN1cml0eUNvbnRleHQsIGlucHV0LCBlZmZlY3QsIHNpZ25hbCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50VHlwZU1pbWVUeXBlLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgYnJvd3Nlck9iamVjdFVybFJlZiB9IGZyb20gJ0BkZXJlZWtiL2Jyb3dzZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtZW1iZWQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzcGFuICNyb290Pjwvc3Bhbj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RW1iZWRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFN1YnNjcmlwdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Jyb3dzZXJPYmplY3RVcmxSZWYgPSBicm93c2VyT2JqZWN0VXJsUmVmKCk7XG5cbiAgcmVhZG9ubHkgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgcmVhZG9ubHkgcm9vdCA9IHZpZXdDaGlsZDxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50Pj4oJ3Jvb3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSk7XG5cbiAgcmVhZG9ubHkgc2FuaXRpemVVcmwgPSBpbnB1dDxNYXliZTxib29sZWFuPj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHNyY1VybCA9IGlucHV0PE1heWJlPHN0cmluZyB8IFNhZmVSZXNvdXJjZVVybD4+KCk7XG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dDxNYXliZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogVGhlIGlucHV0IHNyYyBibG9iIG9yIG1lZGlhIHNvdXJjZSB0byB1c2UuXG4gICAqXG4gICAqIElmIHNldCwgdGhlIHNyY1VybCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgYnJvd3NlciBvYmplY3QgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjQmxvYiA9IGlucHV0PE1heWJlPEJsb2I+PigpO1xuICByZWFkb25seSBzcmNVcmxGcm9tQmxvYiA9IHNpZ25hbDxNYXliZTxzdHJpbmc+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSB0eXBlRnJvbUJsb2IgPSBzaWduYWw8TWF5YmU8c3RyaW5nPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBzcmNCbG9iRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLnNyY0Jsb2IoKTtcblxuICAgICAgdGhpcy5zcmNVcmxGcm9tQmxvYi5zZXQodGhpcy5fYnJvd3Nlck9iamVjdFVybFJlZi5jcmVhdGVCcm93c2VyVXJsKGJsb2IpKTtcbiAgICAgIHRoaXMudHlwZUZyb21CbG9iLnNldChibG9iPy50eXBlKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIHJlYWRvbmx5IHNyY1VybFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzcmNVcmwgPSB0aGlzLnNyY1VybCgpO1xuICAgIGNvbnN0IHNyY1VybEZyb21CbG9iID0gdGhpcy5zcmNVcmxGcm9tQmxvYigpO1xuXG4gICAgY29uc3QgYmFzZVVybCA9IHNyY1VybCA/PyBzcmNVcmxGcm9tQmxvYjtcblxuICAgIGxldCB1cmw6IE1heWJlPHN0cmluZyB8IFNhZmVSZXNvdXJjZVVybD4gPSBiYXNlVXJsO1xuICAgIGNvbnN0IHNhbml0aXplVXJsID0gdGhpcy5zYW5pdGl6ZVVybCgpO1xuXG4gICAgaWYgKHVybCAmJiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiBzYW5pdGl6ZVVybCkge1xuICAgICAgdXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHlwZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlKCk7XG4gICAgY29uc3QgdHlwZUZyb21CbG9iID0gdGhpcy50eXBlRnJvbUJsb2IoKTtcbiAgICByZXR1cm4gdHlwZSA/PyB0eXBlRnJvbUJsb2I7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvb3QkID0gdG9PYnNlcnZhYmxlKHRoaXMucm9vdCk7XG4gIHJlYWRvbmx5IHNyY1VybCQgPSB0b09ic2VydmFibGUodGhpcy5zcmNVcmxTaWduYWwpO1xuICByZWFkb25seSB0eXBlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnR5cGVTaWduYWwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnN1YiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc3JjVXJsJCwgdGhpcy5yb290JCwgdGhpcy50eXBlJF0pLnN1YnNjcmliZSgoW3NyY1VybCwgcm9vdCwgdHlwZV0pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSByb290Py5uYXRpdmVFbGVtZW50O1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyByZW1vdmUgYWxsIGVtYmVkcyBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgIGVsZW1lbnQ/LmNoaWxkTm9kZXMuZm9yRWFjaCgoeCkgPT4gZWxlbWVudC5yZW1vdmVDaGlsZCh4KSk7XG5cbiAgICAgICAgaWYgKHNyY1VybCkge1xuICAgICAgICAgIC8vIE5PVEU6IFdlIGRvIHRoaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGNocm9taXVtIGJlaGF2aW9yOlxuICAgICAgICAgIC8vIGh0dHBzOi8vaXNzdWVzLmNocm9taXVtLm9yZy9pc3N1ZXMvNDA1MDgyOTZcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEVtYmVkIGNhbm5vdCBoYXZlIHNyYyBjaGFuZ2UgZHluYW1pY2FsbHksIHNvIHdlIGNyZWF0ZSBhIG5ldyBlbWJlZCBlbGVtZW50IGVhY2ggdGltZSB0aGUgc3JjIGNoYW5nZXMuXG4gICAgICAgICAgLy9cbiAgICAgICAgICBjb25zdCBlbWJlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2VtYmVkJyk7XG5cbiAgICAgICAgICBsZXQgdXJsOiBNYXliZTxzdHJpbmc+ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKHNyY1VybCAhPSBudWxsICYmIHR5cGVvZiBzcmNVcmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB1cmwgPSB0aGlzLnNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuVVJMLCBzcmNVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwgPSBzcmNVcmw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW1iZWQuc2V0QXR0cmlidXRlKCdzcmMnLCB1cmwgPz8gJycpO1xuXG4gICAgICAgICAgLy8gb25seSBzZXQgdGhlIHR5cGUgaWYgaXQgaXMgcHJlc2VudGVkXG4gICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIGVtYmVkLnNldEF0dHJpYnV0ZSgndHlwZScsIHR5cGUpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGUgdHlwZSBpcyBhbiBpbWFnZSwgYWxzbyBhZGQgdGhlIGVtYmVkLWltYWdlIGNsYXNzXG4gICAgICAgICAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgICAgICBlbWJlZC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2VtYmVkLWltYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbWJlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fYnJvd3Nlck9iamVjdFVybFJlZi5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==