@yuuvis/app-drive 0.7.4 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/actions/updateContent/update.content.action.mjs +5 -2
- package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +2 -2
- package/esm2022/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.mjs +343 -0
- package/esm2022/lib/components/drive-search/drive-search.component.mjs +83 -0
- package/esm2022/lib/components/index.mjs +2 -2
- package/esm2022/lib/components/search-filter/search-filter.component.mjs +14 -330
- package/esm2022/lib/components/sort/sort.component.mjs +7 -6
- package/esm2022/lib/drive.icons.mjs +5 -2
- package/esm2022/lib/pages/files/files.component.mjs +31 -26
- package/esm2022/lib/pages/object/object.component.mjs +14 -6
- package/esm2022/lib/services/drive/drive.interface.mjs +1 -1
- package/esm2022/lib/services/drive/drive.service.mjs +9 -4
- package/fesm2022/yuuvis-app-drive.mjs +507 -440
- package/fesm2022/yuuvis-app-drive.mjs.map +1 -1
- package/lib/assets/i18n/de.json +100 -0
- package/lib/assets/i18n/en.json +100 -0
- package/lib/assets/yuvManifest.json +15 -0
- package/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.d.ts +52 -0
- package/lib/components/drive-search/drive-search.component.d.ts +21 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/search-filter/search-filter.component.d.ts +0 -2
- package/lib/container/drive/drive.component.d.ts +3 -0
- package/lib/drive.icons.d.ts +3 -0
- package/lib/pages/files/files.component.d.ts +10 -7
- package/lib/pages/object/object.component.d.ts +2 -1
- package/lib/services/drive/drive.interface.d.ts +1 -0
- package/lib/services/drive/drive.service.d.ts +1 -1
- package/package.json +2 -2
- package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +0 -38
- package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +0 -13
|
@@ -2,6 +2,7 @@ import { DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import { inject } from '@angular/core';
|
|
3
3
|
import { Router } from '@angular/router';
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { RetentionService } from '@yuuvis/client-core';
|
|
5
6
|
import { AbstractContextAction, SelectionRange } from '@yuuvis/client-framework/actions';
|
|
6
7
|
import { finalize, of } from 'rxjs';
|
|
7
8
|
import { DriveService } from '../../services';
|
|
@@ -12,6 +13,7 @@ export class UpdateContentAction extends AbstractContextAction {
|
|
|
12
13
|
this.#router = inject(Router);
|
|
13
14
|
this.#drive = inject(DriveService);
|
|
14
15
|
this.#document = inject(DOCUMENT);
|
|
16
|
+
this.#retention = inject(RetentionService);
|
|
15
17
|
this.id = 'app.drive.action.new.content.version';
|
|
16
18
|
this.label = this.translate.instant('yuv.app.drive.action.new.version');
|
|
17
19
|
this.description = this.translate.instant('yuv.app.drive.action.new.version.description');
|
|
@@ -24,10 +26,11 @@ export class UpdateContentAction extends AbstractContextAction {
|
|
|
24
26
|
#router;
|
|
25
27
|
#drive;
|
|
26
28
|
#document;
|
|
29
|
+
#retention;
|
|
27
30
|
isExecutable(selection) {
|
|
28
31
|
const selected = selection[0];
|
|
29
32
|
const canWrite = !!selected?.permissions?.writeContent;
|
|
30
|
-
return of(canWrite && selection.length === 1 && !selected.isFolder);
|
|
33
|
+
return of(canWrite && selection.length === 1 && !selected.isFolder && !this.#retention.getRetentionState(selected).underRetention);
|
|
31
34
|
}
|
|
32
35
|
run(selection) {
|
|
33
36
|
if (!selection[0].isFolder) {
|
|
@@ -49,4 +52,4 @@ export class UpdateContentAction extends AbstractContextAction {
|
|
|
49
52
|
return of(true);
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmNvbnRlbnQuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvYWN0aW9ucy91cGRhdGVDb250ZW50L3VwZGF0ZS5jb250ZW50LmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUF5QixjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoSCxPQUFPLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHFCQUFxQjtJQUE5RDs7UUFDVyxjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixXQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsZUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9DLE9BQUUsR0FBRyxzQ0FBc0MsQ0FBQztRQUM1QyxVQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNuRSxnQkFBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDckYsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLFNBQUksR0FDRixxWkFBcVosQ0FBQztRQUV4WixVQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLFVBQUssR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ3JDLGFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBNEIvQixDQUFDO0lBMUNVLE9BQU8sQ0FBa0I7SUFDekIsTUFBTSxDQUF3QjtJQUM5QixTQUFTLENBQW9CO0lBQzdCLFVBQVUsQ0FBNEI7SUFhL0MsWUFBWSxDQUFDLFNBQXNCO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7UUFDdkQsT0FBTyxFQUFFLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckksQ0FBQztJQUVELEdBQUcsQ0FBQyxTQUFzQjtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELFNBQVMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBRTNCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxHQUFJLENBQUMsQ0FBQyxNQUEyQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJO29CQUNGLElBQUksQ0FBQyxNQUFNO3lCQUNSLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQzt5QkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3lCQUNoRCxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFDLENBQUM7WUFDRixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBEbXNPYmplY3QsIFJldGVudGlvblNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udGV4dEFjdGlvbiwgQWN0aW9uLCBBY3Rpb25TdXBwb3J0LCBTZWxlY3Rpb25SYW5nZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9hY3Rpb25zJztcbmltcG9ydCB7IGZpbmFsaXplLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRHJpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlQ29udGVudEFjdGlvbiBleHRlbmRzIEFic3RyYWN0Q29udGV4dEFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICByZWFkb25seSAjZHJpdmUgPSBpbmplY3QoRHJpdmVTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcmVhZG9ubHkgI3JldGVudGlvbiA9IGluamVjdChSZXRlbnRpb25TZXJ2aWNlKTtcblxuICBpZCA9ICdhcHAuZHJpdmUuYWN0aW9uLm5ldy5jb250ZW50LnZlcnNpb24nO1xuICBsYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuYWN0aW9uLm5ldy52ZXJzaW9uJyk7XG4gIGRlc2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5hY3Rpb24ubmV3LnZlcnNpb24uZGVzY3JpcHRpb24nKTtcbiAgcHJpb3JpdHkgPSAyO1xuICBpY29uID1cbiAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIiM1ZjYzNjhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIj48cGF0aCBkPVwiTTUwMC01MjBoODB2LTgwaDgwdi04MGgtODB2LTgwaC04MHY4MGgtODB2ODBoODB2ODBabS04MCAxNjBoMjQwdi04MEg0MjB2ODBaTTMyMC0yMDBxLTMzIDAtNTYuNS0yMy41VDI0MC0yODB2LTU2MHEwLTMzIDIzLjUtNTYuNVQzMjAtOTIwaDI4MGwyNDAgMjQwdjQwMHEwIDMzLTIzLjUgNTYuNVQ3NjAtMjAwSDMyMFptMC04MGg0NDB2LTM2MEw1NjAtODQwSDMyMHY1NjBaTTE2MC00MHEtMzMgMC01Ni41LTIzLjVUODAtMTIwdi01NjBoODB2NTYwaDQ0MHY4MEgxNjBabTE2MC0yNDB2LTU2MCA1NjBaXCIvPjwvc3ZnPic7XG5cbiAgZ3JvdXAgPSAnY29tbW9uJztcbiAgcmFuZ2UgPSBTZWxlY3Rpb25SYW5nZS5TSU5HTEVfU0VMRUNUO1xuICBzdXBwb3J0czogQWN0aW9uU3VwcG9ydCA9IHt9O1xuXG4gIGlzRXhlY3V0YWJsZShzZWxlY3Rpb246IERtc09iamVjdFtdKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb25bMF07XG4gICAgY29uc3QgY2FuV3JpdGUgPSAhIXNlbGVjdGVkPy5wZXJtaXNzaW9ucz8ud3JpdGVDb250ZW50O1xuICAgIHJldHVybiBvZihjYW5Xcml0ZSAmJiBzZWxlY3Rpb24ubGVuZ3RoID09PSAxICYmICFzZWxlY3RlZC5pc0ZvbGRlciAmJiAhdGhpcy4jcmV0ZW50aW9uLmdldFJldGVudGlvblN0YXRlKHNlbGVjdGVkKS51bmRlclJldGVudGlvbik7XG4gIH1cblxuICBydW4oc2VsZWN0aW9uOiBEbXNPYmplY3RbXSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICghc2VsZWN0aW9uWzBdLmlzRm9sZGVyKSB7XG4gICAgICBjb25zdCBmaWxlSW5wdXQgPSB0aGlzLiNkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7XG4gICAgICBmaWxlSW5wdXQubXVsdGlwbGUgPSBmYWxzZTtcblxuICAgICAgZmlsZUlucHV0Lm9uY2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy4jZHJpdmUuc2V0QnVzeSh0cnVlKTtcbiAgICAgICAgY29uc3QgZmlsZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uWzBdO1xuICAgICAgICBmaWxlICYmXG4gICAgICAgICAgdGhpcy4jZHJpdmVcbiAgICAgICAgICAgIC51cGxvYWRDb250ZW50KHNlbGVjdGlvblswXS5pZCwgZmlsZSlcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuI2RyaXZlLnNldEJ1c3koZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH07XG4gICAgICBmaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgIGZpbGVJbnB1dC5yZW1vdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHRydWUpO1xuICB9XG59XG4iXX0=
|
package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs
CHANGED
|
@@ -100,10 +100,10 @@ export class AddButtonOverlayComponent {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddButtonOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AddButtonOverlayComponent, isStandalone: true, selector: "ymd-add-button-overlay", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<yuv-list (itemSelect)=\"onListItemSelect($event)\" selectOnEnter=\"true\">\n @for (i of defaultItems; track $index) {\n <div yuvListItem>\n <yvc-icon [svg]=\"i.icon\"></yvc-icon>\n {{ i.label }}\n </div>\n }\n\n <!-- Upload file with flavor -->\n @for (f of flavorListItems; track f.flavor.id) {\n <div class=\"flavor\" yuvListItem>\n <yvc-icon [svg]=\"f.flavor.icon\"></yvc-icon>\n {{ f.label }}\n </div>\n }\n</yuv-list>\n\n<input style=\"display: none\" multiple=\"true\" #fileInput type=\"file\" (change)=\"createDocument(fileInput)\" />\n", styles: [":host{background-color:var(--color-accent);color:var(--color-accent-tone);display:flex;flex-flow:column;padding:calc(var(--app-pane-padding) / 2) 0;border-radius:0 4px 4px}:host yuv-list{outline:0;--list-item-current-background: rgb(from var(--color-accent-tone) r g b / .2)}:host yuv-list [yuvListItem]{--icon-size: 18px;cursor:pointer;display:flex;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}:host yuv-list [yuvListItem]:hover{background-color:var(--list-item-current-background)}:host yuv-list [yuvListItem]:nth-child(2){border-block-end:1px solid rgb(from var(--color-accent-tone) r g b/.2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ListComponent, selector: "yuv-list", inputs: ["multiselect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }] }); }
|
|
103
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AddButtonOverlayComponent, isStandalone: true, selector: "ymd-add-button-overlay", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<yuv-list (itemSelect)=\"onListItemSelect($event)\" selectOnEnter=\"true\">\n @for (i of defaultItems; track $index) {\n <div yuvListItem>\n <yvc-icon [svg]=\"i.icon\"></yvc-icon>\n {{ i.label }}\n </div>\n }\n\n <!-- Upload file with flavor -->\n @for (f of flavorListItems; track f.flavor.id) {\n <div class=\"flavor\" yuvListItem>\n <yvc-icon [svg]=\"f.flavor.icon\"></yvc-icon>\n {{ f.label }}\n </div>\n }\n</yuv-list>\n\n<input style=\"display: none\" multiple=\"true\" #fileInput type=\"file\" (change)=\"createDocument(fileInput)\" />\n", styles: [":host{background-color:var(--color-accent);color:var(--color-accent-tone);display:flex;flex-flow:column;padding:calc(var(--app-pane-padding) / 2) 0;border-radius:0 4px 4px}:host yuv-list{outline:0;--list-item-current-background: rgb(from var(--color-accent-tone) r g b / .2)}:host yuv-list [yuvListItem]{--icon-size: 18px;cursor:pointer;display:flex;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}:host yuv-list [yuvListItem]:hover{background-color:var(--list-item-current-background)}:host yuv-list [yuvListItem]:nth-child(2){border-block-end:1px solid rgb(from var(--color-accent-tone) r g b/.2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ListComponent, selector: "yuv-list", inputs: ["multiselect", "selfHandleSelection", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }] }); }
|
|
104
104
|
}
|
|
105
105
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddButtonOverlayComponent, decorators: [{
|
|
106
106
|
type: Component,
|
|
107
107
|
args: [{ selector: 'ymd-add-button-overlay', standalone: true, imports: [CommonModule, ListComponent, ListItemDirective, TranslateModule, YvcIconModule], template: "<yuv-list (itemSelect)=\"onListItemSelect($event)\" selectOnEnter=\"true\">\n @for (i of defaultItems; track $index) {\n <div yuvListItem>\n <yvc-icon [svg]=\"i.icon\"></yvc-icon>\n {{ i.label }}\n </div>\n }\n\n <!-- Upload file with flavor -->\n @for (f of flavorListItems; track f.flavor.id) {\n <div class=\"flavor\" yuvListItem>\n <yvc-icon [svg]=\"f.flavor.icon\"></yvc-icon>\n {{ f.label }}\n </div>\n }\n</yuv-list>\n\n<input style=\"display: none\" multiple=\"true\" #fileInput type=\"file\" (change)=\"createDocument(fileInput)\" />\n", styles: [":host{background-color:var(--color-accent);color:var(--color-accent-tone);display:flex;flex-flow:column;padding:calc(var(--app-pane-padding) / 2) 0;border-radius:0 4px 4px}:host yuv-list{outline:0;--list-item-current-background: rgb(from var(--color-accent-tone) r g b / .2)}:host yuv-list [yuvListItem]{--icon-size: 18px;cursor:pointer;display:flex;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}:host yuv-list [yuvListItem]:hover{background-color:var(--list-item-current-background)}:host yuv-list [yuvListItem]:nth-child(2){border-block-end:1px solid rgb(from var(--color-accent-tone) r g b/.2)}\n"] }]
|
|
108
108
|
}] });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWJ1dHRvbi9hZGQtYnV0dG9uLW92ZXJsYXkvYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWJ1dHRvbi9hZGQtYnV0dG9uLW92ZXJsYXkvYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEksT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7QUFTNUYsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztR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QUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUU7d0JBQzFELGdCQUFnQixFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ25FLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO3FCQUNqQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzsrR0F6RlUseUJBQXlCO21HQUF6Qix5QkFBeUIsME1DbkJ0Qyx1a0JBa0JBLDZ0QkRIWSxZQUFZLCtCQUFFLGFBQWEsd0lBQUUsaUJBQWlCLHFHQUFFLGVBQWUsOEJBQUUsYUFBYTs7NEZBSTdFLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VPYmplY3RUeXBlRmllbGQsIE9iamVjdENyZWF0ZUZsYXZvciwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9saXN0JztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgWXZjT3ZlcmxheVJlZiwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBBUFBfRFJJVkVfSUNPTlMgfSBmcm9tICcuLi8uLi8uLi9kcml2ZS5pY29ucyc7XG5pbXBvcnQgeyBDcmVhdGVSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kcml2ZS9kcml2ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZHJpdmUvZHJpdmUuc2VydmljZSc7XG5pbXBvcnQgeyBDcmVhdGVGb2xkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vdmVybGF5L2NyZWF0ZS1mb2xkZXIvY3JlYXRlLWZvbGRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5bWQtYWRkLWJ1dHRvbi1vdmVybGF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTGlzdENvbXBvbmVudCwgTGlzdEl0ZW1EaXJlY3RpdmUsIFRyYW5zbGF0ZU1vZHVsZSwgWXZjSWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtYnV0dG9uLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBBZGRCdXR0b25PdmVybGF5Q29tcG9uZW50IHtcbiAgI292ZXJsYXkgPSBpbmplY3QoWXZjT3ZlcmxheVNlcnZpY2UpO1xuICAjb1JlZiA9IGluamVjdChZdmNPdmVybGF5UmVmKTtcbiAgI2RyaXZlID0gaW5qZWN0KERyaXZlU2VydmljZSk7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBmaWxlSW5wdXQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ZpbGVJbnB1dCcpO1xuXG4gICN1cGxvYWRUYXJnZXRGbGF2b3I/OiBPYmplY3RDcmVhdGVGbGF2b3I7XG5cbiAgaWNvbnMgPSB7XG4gICAgZm9sZGVyOiBBUFBfRFJJVkVfSUNPTlMuY3JlYXRlRm9sZGVyLFxuICAgIGZpbGU6IEFQUF9EUklWRV9JQ09OUy5jcmVhdGVGaWxlXG4gIH07XG5cbiAgZGVmYXVsdEl0ZW1zID0gW1xuICAgIHsgaWNvbjogdGhpcy5pY29ucy5mb2xkZXIsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLmNyZWF0ZS5mb2xkZXInKSB9LFxuICAgIHsgaWNvbjogdGhpcy5pY29ucy5maWxlLCBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5jcmVhdGUuZmlsZScpIH1cbiAgXTtcblxuICBmbGF2b3JMaXN0SXRlbXM6IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGZsYXZvcjogT2JqZWN0Q3JlYXRlRmxhdm9yO1xuICB9W10gPSB0aGlzLiNzaGVsbC5nZXRPYmplY3RDcmVhdGVGbGF2b3JzKCkubWFwKChmbGF2b3IpID0+ICh7XG4gICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICBmbGF2b3JcbiAgfSkpO1xuXG4gIG9uTGlzdEl0ZW1TZWxlY3QoaWR4OiBudW1iZXJbXSkge1xuICAgIGlmIChpZHgubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZmkgPSBpZHhbMF07XG4gICAgaWYgKGZpID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0Q3JlYXRlRm9sZGVyKCk7XG4gICAgfSBlbHNlIGlmIChmaSA9PT0gMSkge1xuICAgICAgdGhpcy5zdGFydENyZWF0ZURvY3VtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRDcmVhdGVEb2N1bWVudCgpO1xuICAgICAgdGhpcy4jdXBsb2FkVGFyZ2V0Rmxhdm9yID0gdGhpcy5mbGF2b3JMaXN0SXRlbXNbZmkgLSB0aGlzLmRlZmF1bHRJdGVtcy5sZW5ndGhdPy5mbGF2b3I7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRDcmVhdGVEb2N1bWVudCgpIHtcbiAgICBpZiAoIXRoaXMuI3VwbG9hZFRhcmdldEZsYXZvciB8fCB0aGlzLiN1cGxvYWRUYXJnZXRGbGF2b3Iud2l0aEZpbGVVcGxvYWQpIHtcbiAgICAgIHRoaXMuZmlsZUlucHV0KCkubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jdXBsb2FkVGFyZ2V0Rmxhdm9yPy5hcHBseUNvbXBvbmVudCkge1xuICAgICAgdGhpcy4jb3ZlcmxheS5vcGVuKHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvci5hcHBseUNvbXBvbmVudCwge1xuICAgICAgICBmbGF2b3I6IHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvcixcbiAgICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2FuY2VsJyk7ICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGFydENyZWF0ZUZvbGRlcigpIHtcbiAgICB0aGlzLiNvUmVmPy5jbG9zZSgpO1xuICAgIHRoaXMuI292ZXJsYXkub3BlbihDcmVhdGVGb2xkZXJDb21wb25lbnQsIG51bGwsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3J1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRG9jdW1lbnQoaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCkge1xuICAgIHRoaXMuI29SZWY/LmNsb3NlKCk7XG4gICAgY29uc3QgZmlsZXM6IEZpbGVbXSB8IHVuZGVmaW5lZCA9IGlucHV0RWwuZmlsZXMgPyBBcnJheS5mcm9tKGlucHV0RWwuZmlsZXMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChmaWxlcykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvcj8uc290ID8geyBbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXTogW3RoaXMuI3VwbG9hZFRhcmdldEZsYXZvci5zb3RdIH0gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLiNkcml2ZS5zZXRCdXN5KHRydWUpO1xuICAgICAgdGhpcy4jZHJpdmVcbiAgICAgICAgLmNoZWNrTmFtZXNBbmRVcGxvYWQoZmlsZXMsIGRhdGEpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNyZWF0ZVJlc3VsdDogQ3JlYXRlUmVzdWx0W10pID0+IHtcbiAgICAgICAgICBjb25zdCB1cGxvYWRFcnJvcnMgPSBjcmVhdGVSZXN1bHQuZmlsdGVyKChyKSA9PiAhIXIuZXJyb3IpO1xuICAgICAgICAgIGlmICh1cGxvYWRFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgdXBsb2FkIGVycm9yc1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcih1cGxvYWRFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy4jdXBsb2FkVGFyZ2V0Rmxhdm9yPy5hcHBseUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy4jb3ZlcmxheS5vcGVuKHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvci5hcHBseUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBjcmVhdGVkT2JqZWN0SURzOiBjcmVhdGVSZXN1bHQuZmlsdGVyKChyKSA9PiByLmlkKS5tYXAoKHIpID0+IHIuaWQpLFxuICAgICAgICAgICAgICBmbGF2b3I6IHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZCgoKSA9PiB0aGlzLiNkcml2ZS5zZXRCdXN5KGZhbHNlKSk7XG4gICAgfVxuICB9XG59XG4iLCI8eXV2LWxpc3QgKGl0ZW1TZWxlY3QpPVwib25MaXN0SXRlbVNlbGVjdCgkZXZlbnQpXCIgc2VsZWN0T25FbnRlcj1cInRydWVcIj5cbiAgQGZvciAoaSBvZiBkZWZhdWx0SXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgIDxkaXYgeXV2TGlzdEl0ZW0+XG4gICAgICA8eXZjLWljb24gW3N2Z109XCJpLmljb25cIj48L3l2Yy1pY29uPlxuICAgICAge3sgaS5sYWJlbCB9fVxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBVcGxvYWQgZmlsZSB3aXRoIGZsYXZvciAtLT5cbiAgQGZvciAoZiBvZiBmbGF2b3JMaXN0SXRlbXM7IHRyYWNrIGYuZmxhdm9yLmlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsYXZvclwiIHl1dkxpc3RJdGVtPlxuICAgICAgPHl2Yy1pY29uIFtzdmddPVwiZi5mbGF2b3IuaWNvblwiPjwveXZjLWljb24+XG4gICAgICB7eyBmLmxhYmVsIH19XG4gICAgPC9kaXY+XG4gIH1cbjwveXV2LWxpc3Q+XG5cbjxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBtdWx0aXBsZT1cInRydWVcIiAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJjcmVhdGVEb2N1bWVudChmaWxlSW5wdXQpXCIgLz5cbiJdfQ==
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWJ1dHRvbi9hZGQtYnV0dG9uLW92ZXJsYXkvYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWJ1dHRvbi9hZGQtYnV0dG9uLW92ZXJsYXkvYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEksT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7QUFTNUYsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztR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QUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUU7d0JBQzFELGdCQUFnQixFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ25FLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO3FCQUNqQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzsrR0F6RlUseUJBQXlCO21HQUF6Qix5QkFBeUIsME1DbkJ0Qyx1a0JBa0JBLDZ0QkRIWSxZQUFZLCtCQUFFLGFBQWEsK0pBQUUsaUJBQWlCLHFHQUFFLGVBQWUsOEJBQUUsYUFBYTs7NEZBSTdFLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VPYmplY3RUeXBlRmllbGQsIE9iamVjdENyZWF0ZUZsYXZvciwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9saXN0JztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgWXZjT3ZlcmxheVJlZiwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBBUFBfRFJJVkVfSUNPTlMgfSBmcm9tICcuLi8uLi8uLi9kcml2ZS5pY29ucyc7XG5pbXBvcnQgeyBDcmVhdGVSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kcml2ZS9kcml2ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZHJpdmUvZHJpdmUuc2VydmljZSc7XG5pbXBvcnQgeyBDcmVhdGVGb2xkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vdmVybGF5L2NyZWF0ZS1mb2xkZXIvY3JlYXRlLWZvbGRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5bWQtYWRkLWJ1dHRvbi1vdmVybGF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTGlzdENvbXBvbmVudCwgTGlzdEl0ZW1EaXJlY3RpdmUsIFRyYW5zbGF0ZU1vZHVsZSwgWXZjSWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtYnV0dG9uLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYWRkLWJ1dHRvbi1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBBZGRCdXR0b25PdmVybGF5Q29tcG9uZW50IHtcbiAgI292ZXJsYXkgPSBpbmplY3QoWXZjT3ZlcmxheVNlcnZpY2UpO1xuICAjb1JlZiA9IGluamVjdChZdmNPdmVybGF5UmVmKTtcbiAgI2RyaXZlID0gaW5qZWN0KERyaXZlU2VydmljZSk7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBmaWxlSW5wdXQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ZpbGVJbnB1dCcpO1xuXG4gICN1cGxvYWRUYXJnZXRGbGF2b3I/OiBPYmplY3RDcmVhdGVGbGF2b3I7XG5cbiAgaWNvbnMgPSB7XG4gICAgZm9sZGVyOiBBUFBfRFJJVkVfSUNPTlMuY3JlYXRlRm9sZGVyLFxuICAgIGZpbGU6IEFQUF9EUklWRV9JQ09OUy5jcmVhdGVGaWxlXG4gIH07XG5cbiAgZGVmYXVsdEl0ZW1zID0gW1xuICAgIHsgaWNvbjogdGhpcy5pY29ucy5mb2xkZXIsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLmNyZWF0ZS5mb2xkZXInKSB9LFxuICAgIHsgaWNvbjogdGhpcy5pY29ucy5maWxlLCBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5jcmVhdGUuZmlsZScpIH1cbiAgXTtcblxuICBmbGF2b3JMaXN0SXRlbXM6IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGZsYXZvcjogT2JqZWN0Q3JlYXRlRmxhdm9yO1xuICB9W10gPSB0aGlzLiNzaGVsbC5nZXRPYmplY3RDcmVhdGVGbGF2b3JzKCkubWFwKChmbGF2b3IpID0+ICh7XG4gICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICBmbGF2b3JcbiAgfSkpO1xuXG4gIG9uTGlzdEl0ZW1TZWxlY3QoaWR4OiBudW1iZXJbXSkge1xuICAgIGlmIChpZHgubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZmkgPSBpZHhbMF07XG4gICAgaWYgKGZpID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0Q3JlYXRlRm9sZGVyKCk7XG4gICAgfSBlbHNlIGlmIChmaSA9PT0gMSkge1xuICAgICAgdGhpcy5zdGFydENyZWF0ZURvY3VtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRDcmVhdGVEb2N1bWVudCgpO1xuICAgICAgdGhpcy4jdXBsb2FkVGFyZ2V0Rmxhdm9yID0gdGhpcy5mbGF2b3JMaXN0SXRlbXNbZmkgLSB0aGlzLmRlZmF1bHRJdGVtcy5sZW5ndGhdPy5mbGF2b3I7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRDcmVhdGVEb2N1bWVudCgpIHtcbiAgICBpZiAoIXRoaXMuI3VwbG9hZFRhcmdldEZsYXZvciB8fCB0aGlzLiN1cGxvYWRUYXJnZXRGbGF2b3Iud2l0aEZpbGVVcGxvYWQpIHtcbiAgICAgIHRoaXMuZmlsZUlucHV0KCkubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jdXBsb2FkVGFyZ2V0Rmxhdm9yPy5hcHBseUNvbXBvbmVudCkge1xuICAgICAgdGhpcy4jb3ZlcmxheS5vcGVuKHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvci5hcHBseUNvbXBvbmVudCwge1xuICAgICAgICBmbGF2b3I6IHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvcixcbiAgICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2FuY2VsJyk7ICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGFydENyZWF0ZUZvbGRlcigpIHtcbiAgICB0aGlzLiNvUmVmPy5jbG9zZSgpO1xuICAgIHRoaXMuI292ZXJsYXkub3BlbihDcmVhdGVGb2xkZXJDb21wb25lbnQsIG51bGwsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3J1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRG9jdW1lbnQoaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCkge1xuICAgIHRoaXMuI29SZWY/LmNsb3NlKCk7XG4gICAgY29uc3QgZmlsZXM6IEZpbGVbXSB8IHVuZGVmaW5lZCA9IGlucHV0RWwuZmlsZXMgPyBBcnJheS5mcm9tKGlucHV0RWwuZmlsZXMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChmaWxlcykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvcj8uc290ID8geyBbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXTogW3RoaXMuI3VwbG9hZFRhcmdldEZsYXZvci5zb3RdIH0gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLiNkcml2ZS5zZXRCdXN5KHRydWUpO1xuICAgICAgdGhpcy4jZHJpdmVcbiAgICAgICAgLmNoZWNrTmFtZXNBbmRVcGxvYWQoZmlsZXMsIGRhdGEpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNyZWF0ZVJlc3VsdDogQ3JlYXRlUmVzdWx0W10pID0+IHtcbiAgICAgICAgICBjb25zdCB1cGxvYWRFcnJvcnMgPSBjcmVhdGVSZXN1bHQuZmlsdGVyKChyKSA9PiAhIXIuZXJyb3IpO1xuICAgICAgICAgIGlmICh1cGxvYWRFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgdXBsb2FkIGVycm9yc1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcih1cGxvYWRFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy4jdXBsb2FkVGFyZ2V0Rmxhdm9yPy5hcHBseUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy4jb3ZlcmxheS5vcGVuKHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvci5hcHBseUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBjcmVhdGVkT2JqZWN0SURzOiBjcmVhdGVSZXN1bHQuZmlsdGVyKChyKSA9PiByLmlkKS5tYXAoKHIpID0+IHIuaWQpLFxuICAgICAgICAgICAgICBmbGF2b3I6IHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI3VwbG9hZFRhcmdldEZsYXZvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZCgoKSA9PiB0aGlzLiNkcml2ZS5zZXRCdXN5KGZhbHNlKSk7XG4gICAgfVxuICB9XG59XG4iLCI8eXV2LWxpc3QgKGl0ZW1TZWxlY3QpPVwib25MaXN0SXRlbVNlbGVjdCgkZXZlbnQpXCIgc2VsZWN0T25FbnRlcj1cInRydWVcIj5cbiAgQGZvciAoaSBvZiBkZWZhdWx0SXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgIDxkaXYgeXV2TGlzdEl0ZW0+XG4gICAgICA8eXZjLWljb24gW3N2Z109XCJpLmljb25cIj48L3l2Yy1pY29uPlxuICAgICAge3sgaS5sYWJlbCB9fVxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBVcGxvYWQgZmlsZSB3aXRoIGZsYXZvciAtLT5cbiAgQGZvciAoZiBvZiBmbGF2b3JMaXN0SXRlbXM7IHRyYWNrIGYuZmxhdm9yLmlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsYXZvclwiIHl1dkxpc3RJdGVtPlxuICAgICAgPHl2Yy1pY29uIFtzdmddPVwiZi5mbGF2b3IuaWNvblwiPjwveXZjLWljb24+XG4gICAgICB7eyBmLmxhYmVsIH19XG4gICAgPC9kaXY+XG4gIH1cbjwveXV2LWxpc3Q+XG5cbjxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBtdWx0aXBsZT1cInRydWVcIiAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJjcmVhdGVEb2N1bWVudChmaWxlSW5wdXQpXCIgLz5cbiJdfQ==
|
package/esm2022/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.mjs
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, computed, effect, inject, signal, viewChildren } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
6
|
+
import { BaseObjectTypeField, ContentStreamField, Operator, SearchService, Situation, SystemService } from '@yuuvis/client-core';
|
|
7
|
+
import { RangeSelectDateComponent, RangeSelectFilesizeComponent } from '@yuuvis/client-framework/forms';
|
|
8
|
+
import { ListComponent, ListItemDirective } from '@yuuvis/client-framework/list';
|
|
9
|
+
import { ObjectFormComponent } from '@yuuvis/client-framework/object-form';
|
|
10
|
+
import { ShellService } from '@yuuvis/client-shell-core';
|
|
11
|
+
import { YvcCheckboxModule } from '@yuuvis/components/checkbox';
|
|
12
|
+
import { YvcDropdownModule } from '@yuuvis/components/dropdown';
|
|
13
|
+
import { ICONS, YvcIconModule } from '@yuuvis/components/icon';
|
|
14
|
+
import { YvcOverlayRef } from '@yuuvis/components/overlay';
|
|
15
|
+
import { YvcSplitViewModule } from '@yuuvis/components/split-view';
|
|
16
|
+
import { finalize } from 'rxjs/operators';
|
|
17
|
+
import { APP_DRIVE_ICONS } from '../../../drive.icons';
|
|
18
|
+
import { DriveService } from '../../../services/drive/drive.service';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "@angular/common";
|
|
21
|
+
import * as i2 from "@yuuvis/components/dropdown";
|
|
22
|
+
import * as i3 from "@yuuvis/client-core";
|
|
23
|
+
import * as i4 from "@yuuvis/components/split-view";
|
|
24
|
+
import * as i5 from "@yuuvis/components/icon";
|
|
25
|
+
import * as i6 from "@angular/forms";
|
|
26
|
+
export class DriveSearchOverlayComponent {
|
|
27
|
+
#fb;
|
|
28
|
+
#oRef;
|
|
29
|
+
#shell;
|
|
30
|
+
#system;
|
|
31
|
+
#drive;
|
|
32
|
+
#search;
|
|
33
|
+
#query;
|
|
34
|
+
#queryEffect;
|
|
35
|
+
#initialFormData;
|
|
36
|
+
constructor() {
|
|
37
|
+
this.translate = inject(TranslateService);
|
|
38
|
+
this.#fb = inject(FormBuilder);
|
|
39
|
+
this.#oRef = inject(YvcOverlayRef);
|
|
40
|
+
this.#shell = inject(ShellService);
|
|
41
|
+
this.#system = inject(SystemService);
|
|
42
|
+
this.#drive = inject(DriveService);
|
|
43
|
+
this.#search = inject(SearchService);
|
|
44
|
+
this.objectForms = viewChildren(ObjectFormComponent);
|
|
45
|
+
this.ANY_OPTION = 'any';
|
|
46
|
+
this.#query = this.#drive.state$.query;
|
|
47
|
+
this.#queryEffect = effect(() => {
|
|
48
|
+
const q = this.#query();
|
|
49
|
+
if (q)
|
|
50
|
+
this.filterForm.patchValue(this.#queryToForm(q));
|
|
51
|
+
});
|
|
52
|
+
this.icons = {
|
|
53
|
+
arrow: ICONS.arrowDown,
|
|
54
|
+
remove: ICONS.clear,
|
|
55
|
+
unchecked: APP_DRIVE_ICONS.unchecked,
|
|
56
|
+
checked: APP_DRIVE_ICONS.checked
|
|
57
|
+
};
|
|
58
|
+
this.#initialFormData = {};
|
|
59
|
+
this.selectedFlavorsRec = {};
|
|
60
|
+
this.formStates = {};
|
|
61
|
+
this.flavorFormOptions = signal({});
|
|
62
|
+
this.flavorForms = computed(() => {
|
|
63
|
+
const ffo = this.flavorFormOptions() || {};
|
|
64
|
+
return Object.keys(ffo).map((k) => ({
|
|
65
|
+
id: k,
|
|
66
|
+
icon: this.selectedFlavorsRec[k]?.icon,
|
|
67
|
+
label: this.translate.instant(k),
|
|
68
|
+
formOptions: ffo[k]
|
|
69
|
+
}));
|
|
70
|
+
});
|
|
71
|
+
this.scopeOptions = signal([]);
|
|
72
|
+
this.filterForm = this.#fb.nonNullable.group({
|
|
73
|
+
term: [this.#oRef.data.term || ''],
|
|
74
|
+
scope: [this.ANY_OPTION],
|
|
75
|
+
modified: [],
|
|
76
|
+
created: [],
|
|
77
|
+
contentlength: []
|
|
78
|
+
});
|
|
79
|
+
this.searchTokens = [];
|
|
80
|
+
this.flavors = this.#shell.getObjectFlavors().map((f) => ({ ...f, label: this.translate.instant(f.id) }));
|
|
81
|
+
this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
|
|
82
|
+
this.#setupOptions();
|
|
83
|
+
this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
|
|
84
|
+
}
|
|
85
|
+
typeSelected(idx) {
|
|
86
|
+
this.#toggleType(this.flavors[idx[0]]);
|
|
87
|
+
}
|
|
88
|
+
#toggleType(t) {
|
|
89
|
+
if (this.selectedFlavorsRec[t.id]) {
|
|
90
|
+
delete this.selectedFlavorsRec[t.id];
|
|
91
|
+
const ffo = this.flavorFormOptions() || {};
|
|
92
|
+
delete ffo[t.id];
|
|
93
|
+
this.flavorFormOptions.set({ ...ffo });
|
|
94
|
+
delete this.formStates[t.id];
|
|
95
|
+
this.#getCombinedFormState();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.selectedFlavorsRec[t.id] = t;
|
|
99
|
+
this.#system.getObjectTypeForm(t.sot, Situation.SEARCH).subscribe((formModel) => {
|
|
100
|
+
this.flavorFormOptions.set({
|
|
101
|
+
...this.flavorFormOptions(),
|
|
102
|
+
[t.id]: {
|
|
103
|
+
formModel,
|
|
104
|
+
data: {}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// initial setup of types/flavors
|
|
111
|
+
#setTypes(sots) {
|
|
112
|
+
const sotQA = {};
|
|
113
|
+
this.flavors
|
|
114
|
+
.filter((f) => sots.includes(f.sot))
|
|
115
|
+
.forEach((f) => {
|
|
116
|
+
this.selectedFlavorsRec[f.id] = f;
|
|
117
|
+
sotQA[f.sot] = f.id;
|
|
118
|
+
});
|
|
119
|
+
this.#system
|
|
120
|
+
.getObjectTypeForms(sots, Situation.SEARCH)
|
|
121
|
+
.pipe(finalize(() => (this.#initialFormData = {})))
|
|
122
|
+
.subscribe((forms) => {
|
|
123
|
+
const ffo = {};
|
|
124
|
+
Object.keys(forms).forEach((sot) => {
|
|
125
|
+
ffo[sotQA[sot]] = {
|
|
126
|
+
formModel: forms[sot],
|
|
127
|
+
data: this.#initialFormData
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
this.flavorFormOptions.set(ffo);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
onFormStatusChanged(formId, evt) {
|
|
134
|
+
this.formStates[formId] = evt;
|
|
135
|
+
this.#getCombinedFormState();
|
|
136
|
+
}
|
|
137
|
+
#onFormValueChange(v) {
|
|
138
|
+
this.searchTokens = [];
|
|
139
|
+
if (this.filterForm.value.term) {
|
|
140
|
+
this.searchTokens.push({
|
|
141
|
+
fromControlName: 'term',
|
|
142
|
+
label: this.translate.instant('yuv.app.drive.search.meta.search-token.term', { value: this.filterForm.value.term })
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const created = this.filterForm.value.created;
|
|
146
|
+
if (created) {
|
|
147
|
+
this.searchTokens.push({
|
|
148
|
+
fromControlName: 'created',
|
|
149
|
+
label: this.translate.instant('yuv.app.drive.search.meta.search-token.created', { value: created.label })
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const modified = this.filterForm.value.modified;
|
|
153
|
+
if (modified) {
|
|
154
|
+
this.searchTokens.push({
|
|
155
|
+
fromControlName: 'modified',
|
|
156
|
+
label: this.translate.instant('yuv.app.drive.search.meta.search-token.modified', { value: modified.label })
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
const contentlength = this.filterForm.value.contentlength;
|
|
160
|
+
if (contentlength) {
|
|
161
|
+
this.searchTokens.push({
|
|
162
|
+
fromControlName: 'contentlength',
|
|
163
|
+
label: this.translate.instant('yuv.app.drive.search.meta.search-token.contentlength', { value: contentlength.label })
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (this.filterForm.value.scope !== this.ANY_OPTION && this.filterForm.value.term) {
|
|
167
|
+
const o = this.scopeOptions().find((o) => o.value === this.filterForm.value.scope);
|
|
168
|
+
if (o)
|
|
169
|
+
this.searchTokens.push({
|
|
170
|
+
fromControlName: 'scope',
|
|
171
|
+
label: this.translate.instant('yuv.app.drive.search.meta.search-token.where', { value: o.label })
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
removeSearchToken(t) {
|
|
176
|
+
this.filterForm.patchValue({
|
|
177
|
+
[t.fromControlName]: t.fromControlName === 'term' ? '' : this.ANY_OPTION
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
#getCombinedFormState() {
|
|
181
|
+
const combinedFormState = {
|
|
182
|
+
dirty: false,
|
|
183
|
+
indexdataChanged: false,
|
|
184
|
+
invalid: false,
|
|
185
|
+
data: {}
|
|
186
|
+
};
|
|
187
|
+
Object.values(this.formStates).forEach((s) => {
|
|
188
|
+
if (s.dirty) {
|
|
189
|
+
combinedFormState.dirty = s.dirty;
|
|
190
|
+
}
|
|
191
|
+
if (s.indexdataChanged) {
|
|
192
|
+
combinedFormState.indexdataChanged = s.indexdataChanged;
|
|
193
|
+
}
|
|
194
|
+
if (s.invalid) {
|
|
195
|
+
combinedFormState.invalid = s.invalid;
|
|
196
|
+
}
|
|
197
|
+
combinedFormState.data = { ...combinedFormState.data, ...s.data };
|
|
198
|
+
});
|
|
199
|
+
this.combinedFormState = combinedFormState;
|
|
200
|
+
return this.combinedFormState;
|
|
201
|
+
}
|
|
202
|
+
cancel() {
|
|
203
|
+
this.#oRef?.close();
|
|
204
|
+
}
|
|
205
|
+
submit() {
|
|
206
|
+
this.#oRef?.close(this.#formToQuery());
|
|
207
|
+
}
|
|
208
|
+
//Converts the form values to a search query
|
|
209
|
+
#formToQuery() {
|
|
210
|
+
const filters = this.#search.formDataToSearchFilter(this.#getCombinedFormState().data);
|
|
211
|
+
// types
|
|
212
|
+
const sots = Object.values(this.selectedFlavorsRec).map((f) => f.sot);
|
|
213
|
+
if (sots.length) {
|
|
214
|
+
filters.push({
|
|
215
|
+
f: BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,
|
|
216
|
+
o: Operator.IN,
|
|
217
|
+
v1: sots
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// created
|
|
221
|
+
if (this.filterForm.value.created) {
|
|
222
|
+
const df = this.#search.rangeValueToSearchFilter(this.filterForm.value.created.rangeValue, BaseObjectTypeField.CREATION_DATE);
|
|
223
|
+
df && filters.push(df);
|
|
224
|
+
}
|
|
225
|
+
// modified
|
|
226
|
+
if (this.filterForm.value.modified) {
|
|
227
|
+
const df = this.#search.rangeValueToSearchFilter(this.filterForm.value.modified.rangeValue, BaseObjectTypeField.MODIFICATION_DATE);
|
|
228
|
+
df && filters.push(df);
|
|
229
|
+
}
|
|
230
|
+
// content length
|
|
231
|
+
if (this.filterForm.value.contentlength) {
|
|
232
|
+
const df = this.#search.rangeValueToSearchFilter(this.filterForm.value.contentlength.rangeValue, ContentStreamField.LENGTH);
|
|
233
|
+
df && filters.push(df);
|
|
234
|
+
}
|
|
235
|
+
const searchQuery = {
|
|
236
|
+
term: this.filterForm.value.term,
|
|
237
|
+
filters
|
|
238
|
+
};
|
|
239
|
+
// search scope
|
|
240
|
+
if (this.filterForm.value.scope !== this.ANY_OPTION)
|
|
241
|
+
searchQuery.scope = this.filterForm.value.scope;
|
|
242
|
+
return searchQuery;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Converts the form values to a search query
|
|
246
|
+
* @param q The search query
|
|
247
|
+
*/
|
|
248
|
+
#queryToForm(q) {
|
|
249
|
+
const patch = {};
|
|
250
|
+
if (q?.term)
|
|
251
|
+
patch['term'] = q.term;
|
|
252
|
+
if (q?.scope)
|
|
253
|
+
patch['scope'] = q.scope;
|
|
254
|
+
q?.filters?.forEach((f) => {
|
|
255
|
+
switch (f.f) {
|
|
256
|
+
case BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS: {
|
|
257
|
+
const sots = f.v1;
|
|
258
|
+
// filter by available flavors
|
|
259
|
+
const flavorSots = this.flavors.map((f) => f.sot);
|
|
260
|
+
this.#setTypes(sots.filter((sot) => flavorSots.includes(sot)));
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case BaseObjectTypeField.CREATION_DATE: {
|
|
264
|
+
const rsv = {
|
|
265
|
+
rangeValue: {
|
|
266
|
+
operator: f.o,
|
|
267
|
+
firstValue: f.v1,
|
|
268
|
+
secondValue: f.v2
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
patch['created'] = rsv;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
case BaseObjectTypeField.MODIFICATION_DATE: {
|
|
275
|
+
const rsv = {
|
|
276
|
+
rangeValue: {
|
|
277
|
+
operator: f.o,
|
|
278
|
+
firstValue: f.v1,
|
|
279
|
+
secondValue: f.v2
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
patch['modified'] = rsv;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
case ContentStreamField.LENGTH: {
|
|
286
|
+
const rsv = {
|
|
287
|
+
rangeValue: {
|
|
288
|
+
operator: f.o,
|
|
289
|
+
firstValue: f.v1,
|
|
290
|
+
secondValue: f.v2
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
patch['contentlength'] = rsv;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
default: {
|
|
297
|
+
// check for values to inject into flavor forms
|
|
298
|
+
this.#initialFormData[f.f] = f.v1;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
return patch;
|
|
303
|
+
}
|
|
304
|
+
#setupOptions() {
|
|
305
|
+
this.#setupScopeOptions();
|
|
306
|
+
}
|
|
307
|
+
#setupScopeOptions() {
|
|
308
|
+
this.scopeOptions.set([
|
|
309
|
+
{
|
|
310
|
+
label: this.translate.instant('yuv.app.drive.search.filter.option.where.any'),
|
|
311
|
+
value: this.ANY_OPTION
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
label: this.translate.instant('yuv.app.drive.search.filter.option.where.content'),
|
|
315
|
+
value: 'content'
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
label: this.translate.instant('yuv.app.drive.search.filter.option.where.metadata'),
|
|
319
|
+
value: 'metadata'
|
|
320
|
+
}
|
|
321
|
+
]);
|
|
322
|
+
}
|
|
323
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DriveSearchOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
324
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DriveSearchOverlayComponent, isStandalone: true, selector: "ymd-drive-search-overlay", viewQueries: [{ propertyName: "objectForms", predicate: ObjectFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<main>\n <yvc-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.app.drive.search.meta.splitview'\">\n <!-- search options -->\n <ng-template yvcSplitArea [size]=\"40\">\n <form class=\"options\" [formGroup]=\"filterForm\">\n <!-- term and scope -->\n <h2>{{ 'yuv.app.drive.search.meta.options.term' | translate }}</h2>\n <input class=\"term\" type=\"text\" formControlName=\"term\" />\n\n <h2>{{ 'yuv.app.drive.search.meta.options.where' | translate }}</h2>\n <yvc-dropdown formControlName=\"scope\" \n [disabled]=\"!filterForm.value.term\"\n [options]=\"scopeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n\n <!-- types -->\n <h2>{{ 'yuv.app.drive.search.meta.options.type' | translate }}</h2>\n <yuv-list (itemSelect)=\"typeSelected($event)\" [selfHandleSelection]=\"true\">\n @for (t of flavors; track t.id) {\n <div class=\"type\" yuvListItem [ngClass]=\"{ selected: !!selectedFlavorsRec[t.id] }\">\n <yvc-icon [svg]=\"!!selectedFlavorsRec[t.id] ? icons.checked : icons.unchecked\"></yvc-icon>\n {{ t.label }}\n </div>\n }\n </yuv-list>\n\n <!-- created -->\n <h2>{{ 'yuv.app.drive.search.meta.options.created' | translate }}</h2>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n <!-- modified -->\n <h2>{{ 'yuv.app.drive.search.meta.options.modified' | translate }}</h2>\n <yuv-range-select-date formControlName=\"modified\"></yuv-range-select-date>\n \n <!-- content length -->\n <h2>{{ 'yuv.app.drive.search.meta.options.contentlength' | translate }}</h2>\n <yuv-range-select-filesize formControlName=\"contentlength\"></yuv-range-select-filesize>\n </form>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <div class=\"query\">\n <h1>{{ 'yuv.app.drive.search.meta.headline.query' | translate }}</h1>\n\n <div class=\"tokens\">\n @if (flavorForms().length === 0 && !filterForm.value.term) {\n <p>{{ 'yuv.app.drive.search.meta.query.for-everything' | translate }}</p>\n }\n @for (o of flavorForms(); track $index) {\n <details class=\"token\">\n <summary [ngClass]=\"{dirty: formStates[o.id]?.dirty}\">\n <yvc-icon [svg]=\"o.icon\"></yvc-icon>\n {{ o.label }}\n <yvc-icon class=\"arr\" [svg]=\"icons.arrow\"></yvc-icon>\n </summary>\n <yuv-object-form [formOptions]=\"o.formOptions\"\n (statusChanged)=\"onFormStatusChanged(o.id, $event)\"></yuv-object-form>\n </details>\n }\n @for (t of searchTokens; track $index) {\n <div class=\"searchToken token\">\n {{ t.label }}\n <button class=\"icon\" (click)=\"removeSearchToken(t)\">\n <yvc-icon [svg]=\"icons.remove\"></yvc-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </yvc-split-view>\n</main>\n\n<footer>\n <button type=\"button\" class=\"secondary\" (click)=\"cancel()\">{{ 'yuv.app.drive.search.meta.button.cancel' | translate }}</button>\n <button type=\"submit\" class=\"primary\" (click)=\"submit()\">{{ 'yuv.app.drive.search.meta.button.search' | translate }}</button>\n</footer>\n", styles: [":host{display:flex;flex-flow:column;height:100%;overflow:hidden}:host main{flex:1;overflow:hidden}:host main yvc-split-view{height:100%}:host main .query{background-color:var(--panel-background-grey);height:100%;box-sizing:border-box;overflow-y:auto;padding:var(--app-pane-padding)}:host main .query h1{font-size:var(--font-display);font-weight:400;margin:.5rem 0 1rem;color:var(--text-color-caption)}:host main .query .tokens{display:flex;flex-flow:row wrap;align-items:start;gap:var(--app-pane-padding)}:host main .query .tokens>.token{background-color:var(--panel-background);border:1px solid var(--panel-divider-color);animation:searchTokenEnter .2s ease-in-out forwards;box-sizing:border-box;color:var(--text-color-caption);border-radius:4px}:host main .query .tokens details{width:var(--om-section-max-width);max-width:100%}:host main .query .tokens details[open]{width:100%}:host main .query .tokens details[open] yvc-icon.arr{transform:rotate(180deg)}:host main .query .tokens details summary{padding:calc(var(--app-pane-padding) / 2);padding-inline-end:calc(var(--app-pane-padding) * 2);cursor:pointer;display:flex;align-items:center;position:relative;font-weight:700}:host main .query .tokens details summary.dirty:after{content:\"\";width:.5em;height:.5em;border-radius:50%;background-color:rgb(from var(--color-accent) r g b/.8);margin-inline-start:.5em;align-self:start}:host main .query .tokens details summary::marker{display:none}:host main .query .tokens details summary yvc-icon{--icon-size: 18px;margin-inline-end:calc(var(--app-pane-padding) / 2)}:host main .query .tokens details summary yvc-icon.arr{position:absolute;inset-inline-end:0}:host main .query .tokens .searchToken{padding:calc(var(--app-pane-padding) / 2);gap:calc(var(--app-pane-padding) / 2);cursor:pointer;display:flex;align-items:center;line-height:1em;font-weight:700}:host main .query .tokens .searchToken button{padding:0;border:0;--icon-size: 18px}:host main form.options{padding:var(--app-pane-padding);overflow-y:auto;display:flex;flex-flow:column}:host main form.options [aria-disabled=true]{cursor:default;opacity:.5}:host main form.options h2{font-size:var(--font-subhead);font-weight:400}:host main form.options input.term{border:1px solid var(--text-color-hint);padding:.5em;outline-offset:0}:host main form.options input.term:focus{border-color:var(--color-accent);outline:2px solid rgb(from var(--color-accent) r g b/.3)}:host main form.options .type:hover,:host main form.options yuv-list:focus .type[aria-current=true]{background-color:var(--item-focus-background-color)}:host main form.options yvc-dropdown,:host main form.options yuv-range-select-filesize,:host main form.options yuv-range-select-date{cursor:pointer}:host main form.options .type{display:flex;gap:var(--app-pane-padding);align-items:center;padding:calc(var(--app-pane-padding) / 2);cursor:pointer}:host main form.options .type yvc-icon{color:var(--text-color-caption)}:host footer{flex:0 0 auto;display:flex;border-block-start:1px solid var(--panel-divider-color);align-items:center;justify-content:flex-end;gap:calc(var(--app-pane-padding) / 2);padding:var(--app-pane-padding)}@keyframes searchTokenEnter{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i2.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: ObjectFormComponent, selector: "yuv-object-form", inputs: ["formOptions", "inert", "elementExtensions", "isInnerTableForm"], outputs: ["statusChanged", "onFormReady"] }, { kind: "ngmodule", type: YvcSplitViewModule }, { kind: "component", type: i4.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i4.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i5.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: YvcCheckboxModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ListComponent, selector: "yuv-list", inputs: ["multiselect", "selfHandleSelection", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "component", type: RangeSelectDateComponent, selector: "yuv-range-select-date", inputs: ["ranges", "customRange"] }, { kind: "component", type: RangeSelectFilesizeComponent, selector: "yuv-range-select-filesize", inputs: ["ranges"] }] }); }
|
|
325
|
+
}
|
|
326
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DriveSearchOverlayComponent, decorators: [{
|
|
327
|
+
type: Component,
|
|
328
|
+
args: [{ selector: 'ymd-drive-search-overlay', standalone: true, imports: [
|
|
329
|
+
CommonModule,
|
|
330
|
+
YvcDropdownModule,
|
|
331
|
+
TranslateModule,
|
|
332
|
+
ObjectFormComponent,
|
|
333
|
+
YvcSplitViewModule,
|
|
334
|
+
YvcIconModule,
|
|
335
|
+
YvcCheckboxModule,
|
|
336
|
+
ReactiveFormsModule,
|
|
337
|
+
ListComponent,
|
|
338
|
+
ListItemDirective,
|
|
339
|
+
RangeSelectDateComponent,
|
|
340
|
+
RangeSelectFilesizeComponent
|
|
341
|
+
], template: "<main>\n <yvc-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.app.drive.search.meta.splitview'\">\n <!-- search options -->\n <ng-template yvcSplitArea [size]=\"40\">\n <form class=\"options\" [formGroup]=\"filterForm\">\n <!-- term and scope -->\n <h2>{{ 'yuv.app.drive.search.meta.options.term' | translate }}</h2>\n <input class=\"term\" type=\"text\" formControlName=\"term\" />\n\n <h2>{{ 'yuv.app.drive.search.meta.options.where' | translate }}</h2>\n <yvc-dropdown formControlName=\"scope\" \n [disabled]=\"!filterForm.value.term\"\n [options]=\"scopeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n\n <!-- types -->\n <h2>{{ 'yuv.app.drive.search.meta.options.type' | translate }}</h2>\n <yuv-list (itemSelect)=\"typeSelected($event)\" [selfHandleSelection]=\"true\">\n @for (t of flavors; track t.id) {\n <div class=\"type\" yuvListItem [ngClass]=\"{ selected: !!selectedFlavorsRec[t.id] }\">\n <yvc-icon [svg]=\"!!selectedFlavorsRec[t.id] ? icons.checked : icons.unchecked\"></yvc-icon>\n {{ t.label }}\n </div>\n }\n </yuv-list>\n\n <!-- created -->\n <h2>{{ 'yuv.app.drive.search.meta.options.created' | translate }}</h2>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n <!-- modified -->\n <h2>{{ 'yuv.app.drive.search.meta.options.modified' | translate }}</h2>\n <yuv-range-select-date formControlName=\"modified\"></yuv-range-select-date>\n \n <!-- content length -->\n <h2>{{ 'yuv.app.drive.search.meta.options.contentlength' | translate }}</h2>\n <yuv-range-select-filesize formControlName=\"contentlength\"></yuv-range-select-filesize>\n </form>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <div class=\"query\">\n <h1>{{ 'yuv.app.drive.search.meta.headline.query' | translate }}</h1>\n\n <div class=\"tokens\">\n @if (flavorForms().length === 0 && !filterForm.value.term) {\n <p>{{ 'yuv.app.drive.search.meta.query.for-everything' | translate }}</p>\n }\n @for (o of flavorForms(); track $index) {\n <details class=\"token\">\n <summary [ngClass]=\"{dirty: formStates[o.id]?.dirty}\">\n <yvc-icon [svg]=\"o.icon\"></yvc-icon>\n {{ o.label }}\n <yvc-icon class=\"arr\" [svg]=\"icons.arrow\"></yvc-icon>\n </summary>\n <yuv-object-form [formOptions]=\"o.formOptions\"\n (statusChanged)=\"onFormStatusChanged(o.id, $event)\"></yuv-object-form>\n </details>\n }\n @for (t of searchTokens; track $index) {\n <div class=\"searchToken token\">\n {{ t.label }}\n <button class=\"icon\" (click)=\"removeSearchToken(t)\">\n <yvc-icon [svg]=\"icons.remove\"></yvc-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </yvc-split-view>\n</main>\n\n<footer>\n <button type=\"button\" class=\"secondary\" (click)=\"cancel()\">{{ 'yuv.app.drive.search.meta.button.cancel' | translate }}</button>\n <button type=\"submit\" class=\"primary\" (click)=\"submit()\">{{ 'yuv.app.drive.search.meta.button.search' | translate }}</button>\n</footer>\n", styles: [":host{display:flex;flex-flow:column;height:100%;overflow:hidden}:host main{flex:1;overflow:hidden}:host main yvc-split-view{height:100%}:host main .query{background-color:var(--panel-background-grey);height:100%;box-sizing:border-box;overflow-y:auto;padding:var(--app-pane-padding)}:host main .query h1{font-size:var(--font-display);font-weight:400;margin:.5rem 0 1rem;color:var(--text-color-caption)}:host main .query .tokens{display:flex;flex-flow:row wrap;align-items:start;gap:var(--app-pane-padding)}:host main .query .tokens>.token{background-color:var(--panel-background);border:1px solid var(--panel-divider-color);animation:searchTokenEnter .2s ease-in-out forwards;box-sizing:border-box;color:var(--text-color-caption);border-radius:4px}:host main .query .tokens details{width:var(--om-section-max-width);max-width:100%}:host main .query .tokens details[open]{width:100%}:host main .query .tokens details[open] yvc-icon.arr{transform:rotate(180deg)}:host main .query .tokens details summary{padding:calc(var(--app-pane-padding) / 2);padding-inline-end:calc(var(--app-pane-padding) * 2);cursor:pointer;display:flex;align-items:center;position:relative;font-weight:700}:host main .query .tokens details summary.dirty:after{content:\"\";width:.5em;height:.5em;border-radius:50%;background-color:rgb(from var(--color-accent) r g b/.8);margin-inline-start:.5em;align-self:start}:host main .query .tokens details summary::marker{display:none}:host main .query .tokens details summary yvc-icon{--icon-size: 18px;margin-inline-end:calc(var(--app-pane-padding) / 2)}:host main .query .tokens details summary yvc-icon.arr{position:absolute;inset-inline-end:0}:host main .query .tokens .searchToken{padding:calc(var(--app-pane-padding) / 2);gap:calc(var(--app-pane-padding) / 2);cursor:pointer;display:flex;align-items:center;line-height:1em;font-weight:700}:host main .query .tokens .searchToken button{padding:0;border:0;--icon-size: 18px}:host main form.options{padding:var(--app-pane-padding);overflow-y:auto;display:flex;flex-flow:column}:host main form.options [aria-disabled=true]{cursor:default;opacity:.5}:host main form.options h2{font-size:var(--font-subhead);font-weight:400}:host main form.options input.term{border:1px solid var(--text-color-hint);padding:.5em;outline-offset:0}:host main form.options input.term:focus{border-color:var(--color-accent);outline:2px solid rgb(from var(--color-accent) r g b/.3)}:host main form.options .type:hover,:host main form.options yuv-list:focus .type[aria-current=true]{background-color:var(--item-focus-background-color)}:host main form.options yvc-dropdown,:host main form.options yuv-range-select-filesize,:host main form.options yuv-range-select-date{cursor:pointer}:host main form.options .type{display:flex;gap:var(--app-pane-padding);align-items:center;padding:calc(var(--app-pane-padding) / 2);cursor:pointer}:host main form.options .type yvc-icon{color:var(--text-color-caption)}:host footer{flex:0 0 auto;display:flex;border-block-start:1px solid var(--panel-divider-color);align-items:center;justify-content:flex-end;gap:calc(var(--app-pane-padding) / 2);padding:var(--app-pane-padding)}@keyframes searchTokenEnter{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
342
|
+
}], ctorParameters: () => [] });
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmUtc2VhcmNoLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvY29tcG9uZW50cy9kcml2ZS1zZWFyY2gvZHJpdmUtc2VhcmNoLW92ZXJsYXkvZHJpdmUtc2VhcmNoLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvY29tcG9uZW50cy9kcml2ZS1zZWFyY2gvZHJpdmUtc2VhcmNoLW92ZXJsYXkvZHJpdmUtc2VhcmNoLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLFFBQVEsRUFJUixhQUFhLEVBQ2IsU0FBUyxFQUNULGFBQWEsRUFDZCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCx3QkFBd0IsRUFFeEIsNEJBQTRCLEVBRTdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFBMEIsbUJBQW1CLEVB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VSwyQkFBMkI7bUdBQTNCLDJCQUEyQixvSEFTVSxtQkFBbUIsZ0VDcEVyRSw0NEdBNEVBLG12R0RqQ0ksWUFBWSw0SEFDWixpQkFBaUIsb05BQ2pCLGVBQWUsNEZBQ2YsbUJBQW1CLGlMQUNuQixrQkFBa0IsbWRBQ2xCLGFBQWEsOEhBQ2IsaUJBQWlCLDhCQUNqQixtQkFBbUIsNjhCQUNuQixhQUFhLCtKQUNiLGlCQUFpQixzR0FDakIsd0JBQXdCLHFHQUN4Qiw0QkFBNEI7OzRGQUtuQiwyQkFBMkI7a0JBcEJ2QyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQix3QkFBd0I7d0JBQ3hCLDRCQUE0QjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIHNpZ25hbCwgdmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZU9iamVjdFR5cGVGaWVsZCxcbiAgQ29udGVudFN0cmVhbUZpZWxkLFxuICBPcGVyYXRvcixcbiAgUmFuZ2VWYWx1ZSxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoU2VydmljZSxcbiAgU2l0dWF0aW9uLFxuICBTeXN0ZW1TZXJ2aWNlXG59IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHtcbiAgUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50LFxuICBSYW5nZVNlbGVjdERhdGVWYWx1ZSxcbiAgUmFuZ2VTZWxlY3RGaWxlc2l6ZUNvbXBvbmVudCxcbiAgUmFuZ2VTZWxlY3RGaWxlc2l6ZVZhbHVlXG59IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9mb3Jtcyc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9saXN0JztcbmltcG9ydCB7IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQsIE9iamVjdEZvcm1Db21wb25lbnQsIE9iamVjdEZvcm1PcHRpb25zIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL29iamVjdC1mb3JtJztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNDaGVja2JveE1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9jaGVja2JveCc7XG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbiwgWXZjRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSUNPTlMsIFl2Y0ljb25Nb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBZdmNPdmVybGF5UmVmIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHsgWXZjU3BsaXRWaWV3TW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL3NwbGl0LXZpZXcnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBUFBfRFJJVkVfSUNPTlMgfSBmcm9tICcuLi8uLi8uLi9kcml2ZS5pY29ucyc7XG5pbXBvcnQgeyBEcml2ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kcml2ZS9kcml2ZS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIFNlYXJjaFRva2VuIHtcbiAgZnJvbUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1kcml2ZS1zZWFyY2gtb3ZlcmxheScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgWXZjRHJvcGRvd25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE9iamVjdEZvcm1Db21wb25lbnQsXG4gICAgWXZjU3BsaXRWaWV3TW9kdWxlLFxuICAgIFl2Y0ljb25Nb2R1bGUsXG4gICAgWXZjQ2hlY2tib3hNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBMaXN0Q29tcG9uZW50LFxuICAgIExpc3RJdGVtRGlyZWN0aXZlLFxuICAgIFJhbmdlU2VsZWN0RGF0ZUNvbXBvbmVudCxcbiAgICBSYW5nZVNlbGVjdEZpbGVzaXplQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kcml2ZS1zZWFyY2gtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kcml2ZS1zZWFyY2gtb3ZlcmxheS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgRHJpdmVTZWFyY2hPdmVybGF5Q29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAjZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAjb1JlZiA9IGluamVjdChZdmNPdmVybGF5UmVmKTtcbiAgI3NoZWxsID0gaW5qZWN0KFNoZWxsU2VydmljZSk7XG4gICNzeXN0ZW0gPSBpbmplY3QoU3lzdGVtU2VydmljZSk7XG4gICNkcml2ZSA9IGluamVjdChEcml2ZVNlcnZpY2UpO1xuICAjc2VhcmNoID0gaW5qZWN0KFNlYXJjaFNlcnZpY2UpO1xuXG4gIG9iamVjdEZvcm1zID0gdmlld0NoaWxkcmVuPE9iamVjdEZvcm1Db21wb25lbnQ+KE9iamVjdEZvcm1Db21wb25lbnQpO1xuXG4gIEFOWV9PUFRJT04gPSAnYW55JztcblxuICAjcXVlcnkgPSB0aGlzLiNkcml2ZS5zdGF0ZSQucXVlcnk7XG4gICNxdWVyeUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcSA9IHRoaXMuI3F1ZXJ5KCk7XG4gICAgaWYgKHEpIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKHRoaXMuI3F1ZXJ5VG9Gb3JtKHEpKTtcbiAgfSk7XG5cbiAgaWNvbnMgPSB7XG4gICAgYXJyb3c6IElDT05TLmFycm93RG93bixcbiAgICByZW1vdmU6IElDT05TLmNsZWFyLFxuICAgIHVuY2hlY2tlZDogQVBQX0RSSVZFX0lDT05TLnVuY2hlY2tlZCxcbiAgICBjaGVja2VkOiBBUFBfRFJJVkVfSUNPTlMuY2hlY2tlZFxuICB9O1xuICAjaW5pdGlhbEZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIHNlbGVjdGVkRmxhdm9yc1JlYzogUmVjb3JkPHN0cmluZywgT2JqZWN0Rmxhdm9yPiA9IHt9O1xuICBjb21iaW5lZEZvcm1TdGF0ZT86IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQ7XG4gIGZvcm1TdGF0ZXM6IFJlY29yZDxzdHJpbmcsIEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQ+ID0ge307XG5cbiAgZmxhdm9yRm9ybU9wdGlvbnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgT2JqZWN0Rm9ybU9wdGlvbnM+Pih7fSk7XG4gIGZsYXZvckZvcm1zID0gY29tcHV0ZWQ8XG4gICAge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGljb24/OiBzdHJpbmc7XG4gICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICAgIH1bXVxuICA+KCgpID0+IHtcbiAgICBjb25zdCBmZm8gPSB0aGlzLmZsYXZvckZvcm1PcHRpb25zKCkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZmbykubWFwKChrKSA9PiAoe1xuICAgICAgaWQ6IGssXG4gICAgICBpY29uOiB0aGlzLnNlbGVjdGVkRmxhdm9yc1JlY1trXT8uaWNvbixcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGspLFxuICAgICAgZm9ybU9wdGlvbnM6IGZmb1trXVxuICAgIH0pKTtcbiAgfSk7XG5cbiAgc2NvcGVPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcblxuICBmaWx0ZXJGb3JtID0gdGhpcy4jZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgIHRlcm06IFt0aGlzLiNvUmVmLmRhdGEudGVybSB8fCAnJ10sXG4gICAgc2NvcGU6IFt0aGlzLkFOWV9PUFRJT05dLFxuICAgIG1vZGlmaWVkOiBbXSxcbiAgICBjcmVhdGVkOiBbXSxcbiAgICBjb250ZW50bGVuZ3RoOiBbXVxuICB9KTtcblxuICBzZWFyY2hUb2tlbnM6IFNlYXJjaFRva2VuW10gPSBbXTtcbiAgZmxhdm9yczogKE9iamVjdEZsYXZvciAmIHsgbGFiZWw6IHN0cmluZyB9KVtdID0gdGhpcy4jc2hlbGwuZ2V0T2JqZWN0Rmxhdm9ycygpLm1hcCgoZikgPT4gKHsgLi4uZiwgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZi5pZCkgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMuI3NldHVwT3B0aW9ucygpKTtcbiAgICB0aGlzLiNzZXR1cE9wdGlvbnMoKTtcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgodikgPT4gdGhpcy4jb25Gb3JtVmFsdWVDaGFuZ2UodikpO1xuICB9XG5cbiAgdHlwZVNlbGVjdGVkKGlkeDogbnVtYmVyW10pIHtcbiAgICB0aGlzLiN0b2dnbGVUeXBlKHRoaXMuZmxhdm9yc1tpZHhbMF1dKTtcbiAgfVxuXG4gICN0b2dnbGVUeXBlKHQ6IE9iamVjdEZsYXZvcikge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxhdm9yc1JlY1t0LmlkXSkge1xuICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0ZWRGbGF2b3JzUmVjW3QuaWRdO1xuXG4gICAgICBjb25zdCBmZm86IFJlY29yZDxzdHJpbmcsIE9iamVjdEZvcm1PcHRpb25zPiA9IHRoaXMuZmxhdm9yRm9ybU9wdGlvbnMoKSB8fCB7fTtcbiAgICAgIGRlbGV0ZSBmZm9bdC5pZF07XG4gICAgICB0aGlzLmZsYXZvckZvcm1PcHRpb25zLnNldCh7IC4uLmZmbyB9KTtcblxuICAgICAgZGVsZXRlIHRoaXMuZm9ybVN0YXRlc1t0LmlkXTtcbiAgICAgIHRoaXMuI2dldENvbWJpbmVkRm9ybVN0YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGF2b3JzUmVjW3QuaWRdID0gdDtcbiAgICAgIHRoaXMuI3N5c3RlbS5nZXRPYmplY3RUeXBlRm9ybSh0LnNvdCwgU2l0dWF0aW9uLlNFQVJDSCkuc3Vic2NyaWJlKChmb3JtTW9kZWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZsYXZvckZvcm1PcHRpb25zLnNldCh7XG4gICAgICAgICAgLi4udGhpcy5mbGF2b3JGb3JtT3B0aW9ucygpLFxuICAgICAgICAgIFt0LmlkXToge1xuICAgICAgICAgICAgZm9ybU1vZGVsLFxuICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5pdGlhbCBzZXR1cCBvZiB0eXBlcy9mbGF2b3JzXG4gICNzZXRUeXBlcyhzb3RzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHNvdFFBOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdGhpcy5mbGF2b3JzXG4gICAgICAuZmlsdGVyKChmKSA9PiBzb3RzLmluY2x1ZGVzKGYuc290KSlcbiAgICAgIC5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbGF2b3JzUmVjW2YuaWRdID0gZjtcbiAgICAgICAgc290UUFbZi5zb3RdID0gZi5pZDtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jc3lzdGVtXG4gICAgICAuZ2V0T2JqZWN0VHlwZUZvcm1zKHNvdHMsIFNpdHVhdGlvbi5TRUFSQ0gpXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy4jaW5pdGlhbEZvcm1EYXRhID0ge30pKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZvcm1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IGZmbzogUmVjb3JkPHN0cmluZywgT2JqZWN0Rm9ybU9wdGlvbnM+ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1zKS5mb3JFYWNoKChzb3QpID0+IHtcbiAgICAgICAgICBmZm9bc290UUFbc290XV0gPSB7XG4gICAgICAgICAgICBmb3JtTW9kZWw6IGZvcm1zW3NvdF0sXG4gICAgICAgICAgICBkYXRhOiB0aGlzLiNpbml0aWFsRm9ybURhdGFcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mbGF2b3JGb3JtT3B0aW9ucy5zZXQoZmZvKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25Gb3JtU3RhdHVzQ2hhbmdlZChmb3JtSWQ6IHN0cmluZywgZXZ0OiBGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5mb3JtU3RhdGVzW2Zvcm1JZF0gPSBldnQ7XG4gICAgdGhpcy4jZ2V0Q29tYmluZWRGb3JtU3RhdGUoKTtcbiAgfVxuXG4gICNvbkZvcm1WYWx1ZUNoYW5nZSh2OiBhbnkpIHtcbiAgICB0aGlzLnNlYXJjaFRva2VucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS52YWx1ZS50ZXJtKSB7XG4gICAgICB0aGlzLnNlYXJjaFRva2Vucy5wdXNoKHtcbiAgICAgICAgZnJvbUNvbnRyb2xOYW1lOiAndGVybScsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5tZXRhLnNlYXJjaC10b2tlbi50ZXJtJywgeyB2YWx1ZTogdGhpcy5maWx0ZXJGb3JtLnZhbHVlLnRlcm0gfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVkOiBSYW5nZVNlbGVjdERhdGVWYWx1ZSB8IHVuZGVmaW5lZCA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5jcmVhdGVkIGFzIFJhbmdlU2VsZWN0RGF0ZVZhbHVlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChjcmVhdGVkKSB7XG4gICAgICB0aGlzLnNlYXJjaFRva2Vucy5wdXNoKHtcbiAgICAgICAgZnJvbUNvbnRyb2xOYW1lOiAnY3JlYXRlZCcsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5tZXRhLnNlYXJjaC10b2tlbi5jcmVhdGVkJywgeyB2YWx1ZTogY3JlYXRlZC5sYWJlbCB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZWQ6IFJhbmdlU2VsZWN0RGF0ZVZhbHVlIHwgdW5kZWZpbmVkID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlLm1vZGlmaWVkIGFzIFJhbmdlU2VsZWN0RGF0ZVZhbHVlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgdGhpcy5zZWFyY2hUb2tlbnMucHVzaCh7XG4gICAgICAgIGZyb21Db250cm9sTmFtZTogJ21vZGlmaWVkJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEuc2VhcmNoLXRva2VuLm1vZGlmaWVkJywgeyB2YWx1ZTogbW9kaWZpZWQubGFiZWwgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRsZW5ndGg6IFJhbmdlU2VsZWN0RmlsZXNpemVWYWx1ZSB8IHVuZGVmaW5lZCA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5jb250ZW50bGVuZ3RoIGFzIFJhbmdlU2VsZWN0RmlsZXNpemVWYWx1ZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoY29udGVudGxlbmd0aCkge1xuICAgICAgdGhpcy5zZWFyY2hUb2tlbnMucHVzaCh7XG4gICAgICAgIGZyb21Db250cm9sTmFtZTogJ2NvbnRlbnRsZW5ndGgnLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2gubWV0YS5zZWFyY2gtdG9rZW4uY29udGVudGxlbmd0aCcsIHsgdmFsdWU6IGNvbnRlbnRsZW5ndGgubGFiZWwgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckZvcm0udmFsdWUuc2NvcGUgIT09IHRoaXMuQU5ZX09QVElPTiAmJiB0aGlzLmZpbHRlckZvcm0udmFsdWUudGVybSkge1xuICAgICAgY29uc3QgbyA9IHRoaXMuc2NvcGVPcHRpb25zKCkuZmluZCgobykgPT4gby52YWx1ZSA9PT0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlLnNjb3BlKTtcbiAgICAgIGlmIChvKVxuICAgICAgICB0aGlzLnNlYXJjaFRva2Vucy5wdXNoKHtcbiAgICAgICAgICBmcm9tQ29udHJvbE5hbWU6ICdzY29wZScsXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEuc2VhcmNoLXRva2VuLndoZXJlJywgeyB2YWx1ZTogby5sYWJlbCB9KVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWFyY2hUb2tlbih0OiBTZWFyY2hUb2tlbikge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIFt0LmZyb21Db250cm9sTmFtZV06IHQuZnJvbUNvbnRyb2xOYW1lID09PSAndGVybScgPyAnJyA6IHRoaXMuQU5ZX09QVElPTlxuICAgIH0pO1xuICB9XG5cbiAgI2dldENvbWJpbmVkRm9ybVN0YXRlKCk6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQge1xuICAgIGNvbnN0IGNvbWJpbmVkRm9ybVN0YXRlID0ge1xuICAgICAgZGlydHk6IGZhbHNlLFxuICAgICAgaW5kZXhkYXRhQ2hhbmdlZDogZmFsc2UsXG4gICAgICBpbnZhbGlkOiBmYWxzZSxcbiAgICAgIGRhdGE6IHt9XG4gICAgfTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybVN0YXRlcykuZm9yRWFjaCgocykgPT4ge1xuICAgICAgaWYgKHMuZGlydHkpIHtcbiAgICAgICAgY29tYmluZWRGb3JtU3RhdGUuZGlydHkgPSBzLmRpcnR5O1xuICAgICAgfVxuICAgICAgaWYgKHMuaW5kZXhkYXRhQ2hhbmdlZCkge1xuICAgICAgICBjb21iaW5lZEZvcm1TdGF0ZS5pbmRleGRhdGFDaGFuZ2VkID0gcy5pbmRleGRhdGFDaGFuZ2VkO1xuICAgICAgfVxuICAgICAgaWYgKHMuaW52YWxpZCkge1xuICAgICAgICBjb21iaW5lZEZvcm1TdGF0ZS5pbnZhbGlkID0gcy5pbnZhbGlkO1xuICAgICAgfVxuICAgICAgY29tYmluZWRGb3JtU3RhdGUuZGF0YSA9IHsgLi4uY29tYmluZWRGb3JtU3RhdGUuZGF0YSwgLi4ucy5kYXRhIH07XG4gICAgfSk7XG4gICAgdGhpcy5jb21iaW5lZEZvcm1TdGF0ZSA9IGNvbWJpbmVkRm9ybVN0YXRlO1xuICAgIHJldHVybiB0aGlzLmNvbWJpbmVkRm9ybVN0YXRlO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuI29SZWY/LmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy4jb1JlZj8uY2xvc2UodGhpcy4jZm9ybVRvUXVlcnkoKSk7XG4gIH1cblxuICAvL0NvbnZlcnRzIHRoZSBmb3JtIHZhbHVlcyB0byBhIHNlYXJjaCBxdWVyeVxuICAjZm9ybVRvUXVlcnkoKTogU2VhcmNoUXVlcnkge1xuICAgIGNvbnN0IGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gdGhpcy4jc2VhcmNoLmZvcm1EYXRhVG9TZWFyY2hGaWx0ZXIodGhpcy4jZ2V0Q29tYmluZWRGb3JtU3RhdGUoKS5kYXRhKTtcbiAgICAvLyB0eXBlc1xuICAgIGNvbnN0IHNvdHMgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0ZWRGbGF2b3JzUmVjKS5tYXAoKGYpID0+IGYuc290KTtcbiAgICBpZiAoc290cy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEUyxcbiAgICAgICAgbzogT3BlcmF0b3IuSU4sXG4gICAgICAgIHYxOiBzb3RzXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gY3JlYXRlZFxuICAgIGlmICh0aGlzLmZpbHRlckZvcm0udmFsdWUuY3JlYXRlZCkge1xuICAgICAgY29uc3QgZGYgPSB0aGlzLiNzZWFyY2gucmFuZ2VWYWx1ZVRvU2VhcmNoRmlsdGVyKFxuICAgICAgICAodGhpcy5maWx0ZXJGb3JtLnZhbHVlLmNyZWF0ZWQgYXMgUmFuZ2VTZWxlY3REYXRlVmFsdWUpLnJhbmdlVmFsdWUgYXMgUmFuZ2VWYWx1ZSxcbiAgICAgICAgQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFXG4gICAgICApO1xuICAgICAgZGYgJiYgZmlsdGVycy5wdXNoKGRmKTtcbiAgICB9XG4gICAgLy8gbW9kaWZpZWRcbiAgICBpZiAodGhpcy5maWx0ZXJGb3JtLnZhbHVlLm1vZGlmaWVkKSB7XG4gICAgICBjb25zdCBkZiA9IHRoaXMuI3NlYXJjaC5yYW5nZVZhbHVlVG9TZWFyY2hGaWx0ZXIoXG4gICAgICAgICh0aGlzLmZpbHRlckZvcm0udmFsdWUubW9kaWZpZWQgYXMgUmFuZ2VTZWxlY3REYXRlVmFsdWUpLnJhbmdlVmFsdWUgYXMgUmFuZ2VWYWx1ZSxcbiAgICAgICAgQmFzZU9iamVjdFR5cGVGaWVsZC5NT0RJRklDQVRJT05fREFURVxuICAgICAgKTtcbiAgICAgIGRmICYmIGZpbHRlcnMucHVzaChkZik7XG4gICAgfVxuICAgIC8vIGNvbnRlbnQgbGVuZ3RoXG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5jb250ZW50bGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZiA9IHRoaXMuI3NlYXJjaC5yYW5nZVZhbHVlVG9TZWFyY2hGaWx0ZXIoXG4gICAgICAgICh0aGlzLmZpbHRlckZvcm0udmFsdWUuY29udGVudGxlbmd0aCBhcyBSYW5nZVNlbGVjdERhdGVWYWx1ZSkucmFuZ2VWYWx1ZSBhcyBSYW5nZVZhbHVlLFxuICAgICAgICBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RIXG4gICAgICApO1xuICAgICAgZGYgJiYgZmlsdGVycy5wdXNoKGRmKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICB0ZXJtOiB0aGlzLmZpbHRlckZvcm0udmFsdWUudGVybSxcbiAgICAgIGZpbHRlcnNcbiAgICB9O1xuICAgIC8vIHNlYXJjaCBzY29wZVxuICAgIGlmICh0aGlzLmZpbHRlckZvcm0udmFsdWUuc2NvcGUgIT09IHRoaXMuQU5ZX09QVElPTikgc2VhcmNoUXVlcnkuc2NvcGUgPSB0aGlzLmZpbHRlckZvcm0udmFsdWUuc2NvcGUgYXMgJ21ldGFkYXRhJyB8ICdjb250ZW50JztcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGZvcm0gdmFsdWVzIHRvIGEgc2VhcmNoIHF1ZXJ5XG4gICAqIEBwYXJhbSBxIFRoZSBzZWFyY2ggcXVlcnlcbiAgICovXG4gICNxdWVyeVRvRm9ybShxOiBTZWFyY2hRdWVyeSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChxPy50ZXJtKSBwYXRjaFsndGVybSddID0gcS50ZXJtO1xuICAgIGlmIChxPy5zY29wZSkgcGF0Y2hbJ3Njb3BlJ10gPSBxLnNjb3BlO1xuXG4gICAgcT8uZmlsdGVycz8uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgc3dpdGNoIChmLmYpIHtcbiAgICAgICAgY2FzZSBCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFM6IHtcbiAgICAgICAgICBjb25zdCBzb3RzID0gZi52MSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAvLyBmaWx0ZXIgYnkgYXZhaWxhYmxlIGZsYXZvcnNcbiAgICAgICAgICBjb25zdCBmbGF2b3JTb3RzID0gdGhpcy5mbGF2b3JzLm1hcCgoZikgPT4gZi5zb3QpO1xuICAgICAgICAgIHRoaXMuI3NldFR5cGVzKHNvdHMuZmlsdGVyKChzb3QpID0+IGZsYXZvclNvdHMuaW5jbHVkZXMoc290KSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFOiB7XG4gICAgICAgICAgY29uc3QgcnN2OiBSYW5nZVNlbGVjdERhdGVWYWx1ZSA9IHtcbiAgICAgICAgICAgIHJhbmdlVmFsdWU6IHtcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IGYubyxcbiAgICAgICAgICAgICAgZmlyc3RWYWx1ZTogZi52MSxcbiAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IGYudjJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHBhdGNoWydjcmVhdGVkJ10gPSByc3Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBCYXNlT2JqZWN0VHlwZUZpZWxkLk1PRElGSUNBVElPTl9EQVRFOiB7XG4gICAgICAgICAgY29uc3QgcnN2OiBSYW5nZVNlbGVjdERhdGVWYWx1ZSA9IHtcbiAgICAgICAgICAgIHJhbmdlVmFsdWU6IHtcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IGYubyxcbiAgICAgICAgICAgICAgZmlyc3RWYWx1ZTogZi52MSxcbiAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IGYudjJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHBhdGNoWydtb2RpZmllZCddID0gcnN2O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSDoge1xuICAgICAgICAgIGNvbnN0IHJzdjogUmFuZ2VTZWxlY3RGaWxlc2l6ZVZhbHVlID0ge1xuICAgICAgICAgICAgcmFuZ2VWYWx1ZToge1xuICAgICAgICAgICAgICBvcGVyYXRvcjogZi5vLFxuICAgICAgICAgICAgICBmaXJzdFZhbHVlOiBmLnYxLFxuICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogZi52MlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcGF0Y2hbJ2NvbnRlbnRsZW5ndGgnXSA9IHJzdjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgLy8gY2hlY2sgZm9yIHZhbHVlcyB0byBpbmplY3QgaW50byBmbGF2b3IgZm9ybXNcbiAgICAgICAgICB0aGlzLiNpbml0aWFsRm9ybURhdGFbZi5mXSA9IGYudjE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGF0Y2g7XG4gIH1cblxuICAjc2V0dXBPcHRpb25zKCkge1xuICAgIHRoaXMuI3NldHVwU2NvcGVPcHRpb25zKCk7XG4gIH1cblxuICAjc2V0dXBTY29wZU9wdGlvbnMoKSB7XG4gICAgdGhpcy5zY29wZU9wdGlvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24ud2hlcmUuYW55JyksXG4gICAgICAgIHZhbHVlOiB0aGlzLkFOWV9PUFRJT05cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLndoZXJlLmNvbnRlbnQnKSxcbiAgICAgICAgdmFsdWU6ICdjb250ZW50J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24ud2hlcmUubWV0YWRhdGEnKSxcbiAgICAgICAgdmFsdWU6ICdtZXRhZGF0YSdcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufVxuIiwiPG1haW4+XG4gIDx5dmMtc3BsaXQtdmlldyBbZ3V0dGVyU2l6ZV09XCIxXCIgW2xheW91dFNldHRpbmdzSURdPVwiJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEuc3BsaXR2aWV3J1wiPlxuICAgIDwhLS0gc2VhcmNoIG9wdGlvbnMgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI0MFwiPlxuICAgICAgPGZvcm0gY2xhc3M9XCJvcHRpb25zXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICAgIDwhLS0gIHRlcm0gYW5kIHNjb3BlIC0tPlxuICAgICAgICA8aDI+e3sgJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEub3B0aW9ucy50ZXJtJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRlcm1cIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRlcm1cIiAvPlxuXG4gICAgICAgIDxoMj57eyAneXV2LmFwcC5kcml2ZS5zZWFyY2gubWV0YS5vcHRpb25zLndoZXJlJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwic2NvcGVcIiBcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJGb3JtLnZhbHVlLnRlcm1cIlxuICAgICAgICBbb3B0aW9uc109XCJzY29wZU9wdGlvbnMoKVwiIFtkaXNhYmxlQ2xlYXJCdXR0b25dPVwidHJ1ZVwiPjwveXZjLWRyb3Bkb3duPlxuXG4gICAgICAgIDwhLS0gIHR5cGVzIC0tPlxuICAgICAgICA8aDI+e3sgJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEub3B0aW9ucy50eXBlJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDx5dXYtbGlzdCAoaXRlbVNlbGVjdCk9XCJ0eXBlU2VsZWN0ZWQoJGV2ZW50KVwiIFtzZWxmSGFuZGxlU2VsZWN0aW9uXT1cInRydWVcIj5cbiAgICAgICAgICBAZm9yICh0IG9mIGZsYXZvcnM7IHRyYWNrIHQuaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlXCIgeXV2TGlzdEl0ZW0gW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogISFzZWxlY3RlZEZsYXZvcnNSZWNbdC5pZF0gfVwiPlxuICAgICAgICAgICAgICA8eXZjLWljb24gW3N2Z109XCIhIXNlbGVjdGVkRmxhdm9yc1JlY1t0LmlkXSA/IGljb25zLmNoZWNrZWQgOiBpY29ucy51bmNoZWNrZWRcIj48L3l2Yy1pY29uPlxuICAgICAgICAgICAgICB7eyB0LmxhYmVsIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwveXV2LWxpc3Q+XG5cbiAgICAgICAgPCEtLSBjcmVhdGVkIC0tPlxuICAgICAgICA8aDI+e3sgJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEub3B0aW9ucy5jcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDx5dXYtcmFuZ2Utc2VsZWN0LWRhdGUgZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRlZFwiPjwveXV2LXJhbmdlLXNlbGVjdC1kYXRlPlxuXG4gICAgICAgIDwhLS0gbW9kaWZpZWQgLS0+XG4gICAgICAgIDxoMj57eyAneXV2LmFwcC5kcml2ZS5zZWFyY2gubWV0YS5vcHRpb25zLm1vZGlmaWVkJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDx5dXYtcmFuZ2Utc2VsZWN0LWRhdGUgZm9ybUNvbnRyb2xOYW1lPVwibW9kaWZpZWRcIj48L3l1di1yYW5nZS1zZWxlY3QtZGF0ZT5cbiAgICAgICBcbiAgICAgICAgPCEtLSBjb250ZW50IGxlbmd0aCAtLT5cbiAgICAgICAgPGgyPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5tZXRhLm9wdGlvbnMuY29udGVudGxlbmd0aCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgICAgICA8eXV2LXJhbmdlLXNlbGVjdC1maWxlc2l6ZSBmb3JtQ29udHJvbE5hbWU9XCJjb250ZW50bGVuZ3RoXCI+PC95dXYtcmFuZ2Utc2VsZWN0LWZpbGVzaXplPlxuICAgICAgPC9mb3JtPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjYwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicXVlcnlcIj5cbiAgICAgICAgPGgxPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5tZXRhLmhlYWRsaW5lLnF1ZXJ5JyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRva2Vuc1wiPlxuICAgICAgICAgIEBpZiAoZmxhdm9yRm9ybXMoKS5sZW5ndGggPT09IDAgJiYgIWZpbHRlckZvcm0udmFsdWUudGVybSkge1xuICAgICAgICAgICAgPHA+e3sgJ3l1di5hcHAuZHJpdmUuc2VhcmNoLm1ldGEucXVlcnkuZm9yLWV2ZXJ5dGhpbmcnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChvIG9mIGZsYXZvckZvcm1zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9XCJ0b2tlblwiPlxuICAgICAgICAgICAgICA8c3VtbWFyeSBbbmdDbGFzc109XCJ7ZGlydHk6IGZvcm1TdGF0ZXNbby5pZF0/LmRpcnR5fVwiPlxuICAgICAgICAgICAgICAgIDx5dmMtaWNvbiBbc3ZnXT1cIm8uaWNvblwiPjwveXZjLWljb24+XG4gICAgICAgICAgICAgICAge3sgby5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDx5dmMtaWNvbiBjbGFzcz1cImFyclwiIFtzdmddPVwiaWNvbnMuYXJyb3dcIj48L3l2Yy1pY29uPlxuICAgICAgICAgICAgICA8L3N1bW1hcnk+XG4gICAgICAgICAgICAgIDx5dXYtb2JqZWN0LWZvcm0gW2Zvcm1PcHRpb25zXT1cIm8uZm9ybU9wdGlvbnNcIlxuICAgICAgICAgICAgICAoc3RhdHVzQ2hhbmdlZCk9XCJvbkZvcm1TdGF0dXNDaGFuZ2VkKG8uaWQsICRldmVudClcIj48L3l1di1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAodCBvZiBzZWFyY2hUb2tlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaFRva2VuIHRva2VuXCI+XG4gICAgICAgICAgICAgIHt7IHQubGFiZWwgfX1cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb25cIiAoY2xpY2spPVwicmVtb3ZlU2VhcmNoVG9rZW4odClcIj5cbiAgICAgICAgICAgICAgICA8eXZjLWljb24gW3N2Z109XCJpY29ucy5yZW1vdmVcIj48L3l2Yy1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3l2Yy1zcGxpdC12aWV3PlxuPC9tYWluPlxuXG48Zm9vdGVyPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWwoKVwiPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5tZXRhLmJ1dHRvbi5jYW5jZWwnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwicHJpbWFyeVwiIChjbGljayk9XCJzdWJtaXQoKVwiPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5tZXRhLmJ1dHRvbi5zZWFyY2gnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG48L2Zvb3Rlcj5cbiJdfQ==
|