@yuuvis/app-drive 0.7.3

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 (107) hide show
  1. package/README.md +47 -0
  2. package/esm2022/extensions/index.mjs +2 -0
  3. package/esm2022/extensions/lib/extensions.module.mjs +35 -0
  4. package/esm2022/extensions/lib/extensions.service.mjs +44 -0
  5. package/esm2022/extensions/lib/object-config.defaults.mjs +19 -0
  6. package/esm2022/extensions/yuuvis-app-drive-extensions.mjs +5 -0
  7. package/esm2022/index.mjs +5 -0
  8. package/esm2022/lib/actions/copy-link/copy-link.action.mjs +40 -0
  9. package/esm2022/lib/actions/index.mjs +7 -0
  10. package/esm2022/lib/actions/manage-versions/manage-versions.action.mjs +33 -0
  11. package/esm2022/lib/actions/manage-versions/manage-versions.component.mjs +105 -0
  12. package/esm2022/lib/actions/paste/paste.action.mjs +41 -0
  13. package/esm2022/lib/actions/rename/rename.action.mjs +31 -0
  14. package/esm2022/lib/actions/rename/rename.component.mjs +42 -0
  15. package/esm2022/lib/actions/rename/rename.validator.mjs +23 -0
  16. package/esm2022/lib/actions/updateContent/update.content.action.mjs +52 -0
  17. package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +109 -0
  18. package/esm2022/lib/components/add-button/add-button.component.mjs +39 -0
  19. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +74 -0
  20. package/esm2022/lib/components/folder-tree/folder-tree.component.mjs +89 -0
  21. package/esm2022/lib/components/index.mjs +10 -0
  22. package/esm2022/lib/components/object-name/object-name.component.mjs +60 -0
  23. package/esm2022/lib/components/overlay/create-folder/create-folder.component.mjs +48 -0
  24. package/esm2022/lib/components/paste-from-clipboard/paste-from-clipboard.component.mjs +28 -0
  25. package/esm2022/lib/components/ribbon/ribbon.component.mjs +102 -0
  26. package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +38 -0
  27. package/esm2022/lib/components/search-filter/search-filter.component.mjs +429 -0
  28. package/esm2022/lib/components/sort/sort.component.mjs +156 -0
  29. package/esm2022/lib/components/versions-list/tile/tile.component.mjs +60 -0
  30. package/esm2022/lib/components/versions-list/versions-list.component.mjs +94 -0
  31. package/esm2022/lib/container/drive/drive.component.mjs +116 -0
  32. package/esm2022/lib/drive.icons.mjs +16 -0
  33. package/esm2022/lib/drive.schema.mjs +49 -0
  34. package/esm2022/lib/lib.routes.mjs +17 -0
  35. package/esm2022/lib/pages/files/files.component.mjs +377 -0
  36. package/esm2022/lib/pages/object/object.component.mjs +200 -0
  37. package/esm2022/lib/services/drive/drive.interface.mjs +14 -0
  38. package/esm2022/lib/services/drive/drive.service.mjs +437 -0
  39. package/esm2022/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.mjs +158 -0
  40. package/esm2022/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.interface.mjs +2 -0
  41. package/esm2022/lib/services/drive/versions/versions.mapping.mjs +42 -0
  42. package/esm2022/lib/services/index.mjs +5 -0
  43. package/esm2022/lib/services/providers/drive.providers.mjs +10 -0
  44. package/esm2022/lib/services/resolver/files.resolver.mjs +12 -0
  45. package/esm2022/lib/services/resolver/index.mjs +3 -0
  46. package/esm2022/lib/services/resolver/versions.route.resolver.mjs +10 -0
  47. package/esm2022/lib/services/stored-query/stored-query.data.mjs +25 -0
  48. package/esm2022/lib/services/stored-query/stored-query.interface.mjs +2 -0
  49. package/esm2022/lib/services/stored-query/stored-query.service.mjs +41 -0
  50. package/esm2022/lib/services/tokens/breadcrumb-max-depth.token.mjs +3 -0
  51. package/esm2022/lib/services/tokens/index.mjs +2 -0
  52. package/esm2022/yuuvis-app-drive.mjs +5 -0
  53. package/extensions/README.md +3 -0
  54. package/extensions/index.d.ts +1 -0
  55. package/extensions/lib/extensions.module.d.ts +6 -0
  56. package/extensions/lib/extensions.service.d.ts +7 -0
  57. package/extensions/lib/object-config.defaults.d.ts +2 -0
  58. package/fesm2022/yuuvis-app-drive-extensions.mjs +99 -0
  59. package/fesm2022/yuuvis-app-drive-extensions.mjs.map +1 -0
  60. package/fesm2022/yuuvis-app-drive.mjs +2945 -0
  61. package/fesm2022/yuuvis-app-drive.mjs.map +1 -0
  62. package/index.d.ts +4 -0
  63. package/lib/actions/copy-link/copy-link.action.d.ts +18 -0
  64. package/lib/actions/index.d.ts +6 -0
  65. package/lib/actions/manage-versions/manage-versions.action.d.ts +17 -0
  66. package/lib/actions/manage-versions/manage-versions.component.d.ts +32 -0
  67. package/lib/actions/paste/paste.action.d.ts +17 -0
  68. package/lib/actions/rename/rename.action.d.ts +17 -0
  69. package/lib/actions/rename/rename.component.d.ts +12 -0
  70. package/lib/actions/rename/rename.validator.d.ts +5 -0
  71. package/lib/actions/updateContent/update.content.action.d.ts +18 -0
  72. package/lib/components/add-button/add-button-overlay/add-button-overlay.component.d.ts +26 -0
  73. package/lib/components/add-button/add-button.component.d.ts +12 -0
  74. package/lib/components/breadcrumb/breadcrumb.component.d.ts +25 -0
  75. package/lib/components/folder-tree/folder-tree.component.d.ts +13 -0
  76. package/lib/components/index.d.ts +8 -0
  77. package/lib/components/object-name/object-name.component.d.ts +21 -0
  78. package/lib/components/overlay/create-folder/create-folder.component.d.ts +12 -0
  79. package/lib/components/paste-from-clipboard/paste-from-clipboard.component.d.ts +13 -0
  80. package/lib/components/ribbon/ribbon.component.d.ts +24 -0
  81. package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +13 -0
  82. package/lib/components/search-filter/search-filter.component.d.ts +23 -0
  83. package/lib/components/sort/sort.component.d.ts +31 -0
  84. package/lib/components/versions-list/tile/tile.component.d.ts +14 -0
  85. package/lib/components/versions-list/versions-list.component.d.ts +17 -0
  86. package/lib/container/drive/drive.component.d.ts +36 -0
  87. package/lib/drive.icons.d.ts +15 -0
  88. package/lib/drive.schema.d.ts +23 -0
  89. package/lib/lib.routes.d.ts +2 -0
  90. package/lib/pages/files/files.component.d.ts +101 -0
  91. package/lib/pages/object/object.component.d.ts +35 -0
  92. package/lib/services/drive/drive.interface.d.ts +62 -0
  93. package/lib/services/drive/drive.service.d.ts +64 -0
  94. package/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.d.ts +31 -0
  95. package/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.interface.d.ts +8 -0
  96. package/lib/services/drive/versions/versions.mapping.d.ts +2 -0
  97. package/lib/services/index.d.ts +4 -0
  98. package/lib/services/providers/drive.providers.d.ts +7 -0
  99. package/lib/services/resolver/files.resolver.d.ts +2 -0
  100. package/lib/services/resolver/index.d.ts +2 -0
  101. package/lib/services/resolver/versions.route.resolver.d.ts +2 -0
  102. package/lib/services/stored-query/stored-query.data.d.ts +5 -0
  103. package/lib/services/stored-query/stored-query.interface.d.ts +5 -0
  104. package/lib/services/stored-query/stored-query.service.d.ts +10 -0
  105. package/lib/services/tokens/breadcrumb-max-depth.token.d.ts +2 -0
  106. package/lib/services/tokens/index.d.ts +1 -0
  107. package/package.json +41 -0
@@ -0,0 +1,156 @@
1
+ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
2
+ import { Directionality } from '@angular/cdk/bidi';
3
+ import { NgClass } from '@angular/common';
4
+ import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, output, signal, viewChildren } from '@angular/core';
5
+ import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
6
+ import { BaseObjectTypeField, ContentStreamField, SystemService } from '@yuuvis/client-core';
7
+ import { ListItemDirective } from '@yuuvis/client-framework/list';
8
+ import { YvcIconModule } from '@yuuvis/components/icon';
9
+ import { APP_DRIVE_ICONS } from '../../drive.icons';
10
+ import { FS_PROPERTIES } from '../../drive.schema';
11
+ import { DriveService } from '../../services';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@yuuvis/components/icon";
14
+ export class SortComponent {
15
+ constructor() {
16
+ this.#drive = inject(DriveService);
17
+ this.#systemService = inject(SystemService);
18
+ this.#fb = inject(FormBuilder);
19
+ this.#dir = inject(Directionality);
20
+ this.sortIcon = APP_DRIVE_ICONS.sort;
21
+ this.items = viewChildren(ListItemDirective);
22
+ this.#itemsEffect = effect(() => {
23
+ const i = this.items();
24
+ if (this.#keyManager)
25
+ this.#keyManager.destroy();
26
+ this.#keyManager = new ActiveDescendantKeyManager(i).withWrap().withHorizontalOrientation(this.#dir.value);
27
+ });
28
+ this.sortOptions = signal(this.#initSortOptions());
29
+ this.orderOptions = signal([
30
+ { label: 'Ascending', value: 'asc', type: 'order' },
31
+ { label: 'Descending', value: 'desc', type: 'order' }
32
+ ]);
33
+ this.sortFields = computed(() => [...this.sortOptions(), ...this.orderOptions()]);
34
+ this.sortChanged = output();
35
+ }
36
+ #drive;
37
+ #systemService;
38
+ #fb;
39
+ #dir;
40
+ onBlur() {
41
+ this.#keyManager.setActiveItem(-1);
42
+ }
43
+ onKeydown(event) {
44
+ event.code === 'Escape' && this.#keyManager.setActiveItem(-1);
45
+ event.target instanceof HTMLButtonElement && this.#keyManager.setActiveItem(-1);
46
+ if (event.code === 'Space' || event.code === 'Enter') {
47
+ const aii = this.#keyManager.activeItemIndex !== null ? this.#keyManager.activeItemIndex : -1;
48
+ aii >= 0 && this.selectSortByIndex(aii);
49
+ }
50
+ else
51
+ this.#keyManager?.onKeydown(event);
52
+ }
53
+ #keyManager;
54
+ #itemsEffect;
55
+ selectSortByIndex(idx) {
56
+ this.selectSort(this.sortFields()[idx].type, this.sortFields()[idx].value);
57
+ }
58
+ selectSort(type, value) {
59
+ this.sortForm.get('sort')?.value === value ? this.sortForm.get('sort')?.setValue(null) : this.sortForm.get(type)?.setValue(value);
60
+ this.onSelectionChange();
61
+ }
62
+ ngOnInit() {
63
+ this.sortForm = this.#fb.nonNullable.group({
64
+ sort: [],
65
+ order: [this.orderOptions()[0].value] // Default: Ascending
66
+ });
67
+ // TODO: Check if this is necessary. It breaks stored queries first load by resetting sort
68
+ // this.onSelectionChange();
69
+ }
70
+ // Emit the form values when changes occur
71
+ onSelectionChange() {
72
+ const { sort, order } = this.sortForm.value;
73
+ this.#drive.setSort(sort, order);
74
+ this.sortChanged.emit({ sort, order });
75
+ }
76
+ #initSortOptions() {
77
+ const baseData = [];
78
+ const fields = [FS_PROPERTIES.name, BaseObjectTypeField.CREATION_DATE, BaseObjectTypeField.MODIFICATION_DATE];
79
+ const contentFields = [ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];
80
+ [...fields, ...contentFields].forEach((f) => {
81
+ baseData.push({
82
+ label: this.#systemService.getLocalizedLabel(f) || f,
83
+ value: f,
84
+ type: 'sort'
85
+ });
86
+ });
87
+ return baseData;
88
+ }
89
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SortComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
90
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SortComponent, isStandalone: true, selector: "ymd-sort", outputs: { sortChanged: "sortChanged" }, host: { listeners: { "blur": "onBlur()", "keydown": "onKeydown($event)" } }, viewQueries: [{ propertyName: "items", predicate: ListItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
91
+ <button popovertarget="sort" class="sort-button">
92
+ <yvc-icon [svg]="sortIcon" />
93
+ </button>
94
+
95
+ <dialog popover id="sort" class="sort-menu">
96
+ <ol class="sort-group" tabindex="0">
97
+ @for (option of sortFields(); track $index) {
98
+ @let selected = sortForm.value[option.type] === option.value;
99
+ <li
100
+ class="sort-item"
101
+ [class.selected]="selected"
102
+ [ngClass]="{ selected: selected, 'sort-group-item': option.type === 'sort', 'order-group-item': option.type === 'order' }"
103
+ yuvListItem
104
+ [selected]="selected"
105
+ (click)="selectSort(option.type, option.value)"
106
+ >
107
+ <div class="label">
108
+ {{ option.label }}
109
+ </div>
110
+ </li>
111
+ @if (sortFields().length - 3 === $index) {
112
+ <div class="divider"></div>
113
+ }
114
+ }
115
+ </ol>
116
+ </dialog>
117
+ `, isInline: true, styles: ["@charset \"UTF-8\";.sort-button{padding:calc(var(--app-pane-padding) / 4);anchor-name:--sort-button}dialog::backdrop{background-color:#ff69b4;display:none}.sort-menu{display:none;background-color:var(--panel-background);color:var(--text-color-body);border-color:var(--panel-background);position:absolute;position-anchor:--sort-button;position-area:block-end center;margin:0;inset:auto;bottom:anchor(bottom);left:anchor(right);opacity:0;transition:opacity .3s,display .3s,overlay .3s;transition-behavior:allow-discrete;position-try-fallbacks:--left;margin-left:.25rem;box-shadow:0 1px 12px #0000001a;border:1px solid var(--panel-divider-color)}.sort-menu::backdrop{background-color:#ff69b4;display:none;-webkit-backdrop-filter:none;backdrop-filter:none}.sort-menu:popover-open{display:grid;opacity:1}@starting-style{.sort-menu:popover-open{display:grid;opacity:0}}@position-try --left{inset:auto;top:anchor(bottom);right:anchor(right)}.sort-group{list-style-type:none;padding-inline:0;margin-block:0;padding:.5rem}.sort-group [yuvListItem]{padding-left:calc(var(--font-body) + 2px);line-height:1.5em;display:flex;align-items:center;text-decoration:none;white-space:nowrap;border-radius:2px;color:var(--text-color-caption)}.sort-group [yuvListItem][aria-selected=true]:before{content:\"\\2022\";position:absolute;left:var(--font-body);font-size:var(--font-title)}.sort-group [yuvListItem][aria-current=true],.sort-group [yuvListItem]:hover{cursor:pointer;color:var(--text-color-body);background-color:var(--item-focus-background-color);outline:2px solid var(--item-focus-background-color)}.sort-group [yuvListItem][aria-current=true]{outline-color:var(--text-color-caption)}.sort-group [yuvListItem] .label{margin-right:.5rem;padding:.1rem 0}.sort-group .divider{margin:.5rem 0;border-top:1px solid var(--panel-divider-color)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SortComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'ymd-sort', standalone: true, imports: [NgClass, YvcIconModule, ListItemDirective, ReactiveFormsModule], template: `
122
+ <button popovertarget="sort" class="sort-button">
123
+ <yvc-icon [svg]="sortIcon" />
124
+ </button>
125
+
126
+ <dialog popover id="sort" class="sort-menu">
127
+ <ol class="sort-group" tabindex="0">
128
+ @for (option of sortFields(); track $index) {
129
+ @let selected = sortForm.value[option.type] === option.value;
130
+ <li
131
+ class="sort-item"
132
+ [class.selected]="selected"
133
+ [ngClass]="{ selected: selected, 'sort-group-item': option.type === 'sort', 'order-group-item': option.type === 'order' }"
134
+ yuvListItem
135
+ [selected]="selected"
136
+ (click)="selectSort(option.type, option.value)"
137
+ >
138
+ <div class="label">
139
+ {{ option.label }}
140
+ </div>
141
+ </li>
142
+ @if (sortFields().length - 3 === $index) {
143
+ <div class="divider"></div>
144
+ }
145
+ }
146
+ </ol>
147
+ </dialog>
148
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@charset \"UTF-8\";.sort-button{padding:calc(var(--app-pane-padding) / 4);anchor-name:--sort-button}dialog::backdrop{background-color:#ff69b4;display:none}.sort-menu{display:none;background-color:var(--panel-background);color:var(--text-color-body);border-color:var(--panel-background);position:absolute;position-anchor:--sort-button;position-area:block-end center;margin:0;inset:auto;bottom:anchor(bottom);left:anchor(right);opacity:0;transition:opacity .3s,display .3s,overlay .3s;transition-behavior:allow-discrete;position-try-fallbacks:--left;margin-left:.25rem;box-shadow:0 1px 12px #0000001a;border:1px solid var(--panel-divider-color)}.sort-menu::backdrop{background-color:#ff69b4;display:none;-webkit-backdrop-filter:none;backdrop-filter:none}.sort-menu:popover-open{display:grid;opacity:1}@starting-style{.sort-menu:popover-open{display:grid;opacity:0}}@position-try --left{inset:auto;top:anchor(bottom);right:anchor(right)}.sort-group{list-style-type:none;padding-inline:0;margin-block:0;padding:.5rem}.sort-group [yuvListItem]{padding-left:calc(var(--font-body) + 2px);line-height:1.5em;display:flex;align-items:center;text-decoration:none;white-space:nowrap;border-radius:2px;color:var(--text-color-caption)}.sort-group [yuvListItem][aria-selected=true]:before{content:\"\\2022\";position:absolute;left:var(--font-body);font-size:var(--font-title)}.sort-group [yuvListItem][aria-current=true],.sort-group [yuvListItem]:hover{cursor:pointer;color:var(--text-color-body);background-color:var(--item-focus-background-color);outline:2px solid var(--item-focus-background-color)}.sort-group [yuvListItem][aria-current=true]{outline-color:var(--text-color-caption)}.sort-group [yuvListItem] .label{margin-right:.5rem;padding:.1rem 0}.sort-group .divider{margin:.5rem 0;border-top:1px solid var(--panel-divider-color)}\n"] }]
149
+ }], propDecorators: { onBlur: [{
150
+ type: HostListener,
151
+ args: ['blur']
152
+ }], onKeydown: [{
153
+ type: HostListener,
154
+ args: ['keydown', ['$event']]
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NvcnQvc29ydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBMEM5QyxNQUFNLE9BQU8sYUFBYTtJQW5DMUI7UUFvQ1csV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxRQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLFNBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFvQnZDLGFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO1FBRWhDLFVBQUssR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RyxDQUFDLENBQUMsQ0FBQztRQUVILGdCQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDOUMsaUJBQVksR0FBRyxNQUFNLENBQWU7WUFDbEMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUNuRCxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFJN0UsZ0JBQVcsR0FBRyxNQUFNLEVBQW1DLENBQUM7S0EyQ3pEO0lBcEZVLE1BQU0sQ0FBd0I7SUFDOUIsY0FBYyxDQUF5QjtJQUN2QyxHQUFHLENBQXVCO0lBQzFCLElBQUksQ0FBMEI7SUFHdkMsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELEtBQUssQ0FBQyxNQUFNLFlBQVksaUJBQWlCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDckQsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEcsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQzs7WUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFpRDtJQUs1RCxZQUFZLENBSVQ7SUFhSCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3pDLElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQjtTQUM1RCxDQUFDLENBQUM7UUFFSCwwRkFBMEY7UUFDMUYsNEJBQTRCO0lBQzlCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCO1FBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxRQUFRLEdBQWlCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUcsTUFBTSxhQUFhLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEYsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEQsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7K0dBcEZVLGFBQWE7bUdBQWIsYUFBYSxvTkEwQkgsaUJBQWlCLGdFQXpENUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCVCw0MkRBNUJTLE9BQU8sbUZBQUUsYUFBYSwrSEFBRSxpQkFBaUIscUdBQUUsbUJBQW1COzs0RkFnQzdELGFBQWE7a0JBbkN6QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLFlBQy9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU07OEJBUy9DLE1BQU07c0JBREwsWUFBWTt1QkFBQyxNQUFNO2dCQU1wQixTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgSG9zdExpc3RlbmVyLCBpbmplY3QsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VPYmplY3RUeXBlRmllbGQsIENvbnRlbnRTdHJlYW1GaWVsZCwgU3lzdGVtU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgTGlzdEl0ZW1EaXJlY3RpdmUgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvbGlzdCc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQVBQX0RSSVZFX0lDT05TIH0gZnJvbSAnLi4vLi4vZHJpdmUuaWNvbnMnO1xuaW1wb3J0IHsgRlNfUFJPUEVSVElFUyB9IGZyb20gJy4uLy4uL2RyaXZlLnNjaGVtYSc7XG5pbXBvcnQgeyBEcml2ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbmludGVyZmFjZSBTb3J0T3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgdHlwZTogJ3NvcnQnIHwgJ29yZGVyJztcbn1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1zb3J0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIFl2Y0ljb25Nb2R1bGUsIExpc3RJdGVtRGlyZWN0aXZlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YnV0dG9uIHBvcG92ZXJ0YXJnZXQ9XCJzb3J0XCIgY2xhc3M9XCJzb3J0LWJ1dHRvblwiPlxuICAgICAgPHl2Yy1pY29uIFtzdmddPVwic29ydEljb25cIiAvPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpYWxvZyBwb3BvdmVyIGlkPVwic29ydFwiIGNsYXNzPVwic29ydC1tZW51XCI+XG4gICAgICA8b2wgY2xhc3M9XCJzb3J0LWdyb3VwXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIEBmb3IgKG9wdGlvbiBvZiBzb3J0RmllbGRzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIEBsZXQgc2VsZWN0ZWQgPSBzb3J0Rm9ybS52YWx1ZVtvcHRpb24udHlwZV0gPT09IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIGNsYXNzPVwic29ydC1pdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IHNlbGVjdGVkOiBzZWxlY3RlZCwgJ3NvcnQtZ3JvdXAtaXRlbSc6IG9wdGlvbi50eXBlID09PSAnc29ydCcsICdvcmRlci1ncm91cC1pdGVtJzogb3B0aW9uLnR5cGUgPT09ICdvcmRlcicgfVwiXG4gICAgICAgICAgICB5dXZMaXN0SXRlbVxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTb3J0KG9wdGlvbi50eXBlLCBvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIEBpZiAoc29ydEZpZWxkcygpLmxlbmd0aCAtIDMgPT09ICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvb2w+XG4gICAgPC9kaWFsb2c+XG4gIGAsXG4gIHN0eWxlVXJsczogW2AuL3NvcnQuY29tcG9uZW50LnNjc3NgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU29ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5ICNkcml2ZSA9IGluamVjdChEcml2ZVNlcnZpY2UpO1xuICByZWFkb25seSAjc3lzdGVtU2VydmljZSA9IGluamVjdChTeXN0ZW1TZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2ZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcmVhZG9ubHkgI2RpciA9IGluamVjdChEaXJlY3Rpb25hbGl0eSk7XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLiNrZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnICYmIHRoaXMuI2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgdGhpcy4ja2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcblxuICAgIGlmIChldmVudC5jb2RlID09PSAnU3BhY2UnIHx8IGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgIGNvbnN0IGFpaTogbnVtYmVyID0gdGhpcy4ja2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggIT09IG51bGwgPyB0aGlzLiNrZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCA6IC0xO1xuICAgICAgYWlpID49IDAgJiYgdGhpcy5zZWxlY3RTb3J0QnlJbmRleChhaWkpO1xuICAgIH0gZWxzZSB0aGlzLiNrZXlNYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpO1xuICB9XG5cbiAgI2tleU1hbmFnZXIhOiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxMaXN0SXRlbURpcmVjdGl2ZT47XG5cbiAgc29ydEljb24gPSBBUFBfRFJJVkVfSUNPTlMuc29ydDtcblxuICBpdGVtcyA9IHZpZXdDaGlsZHJlbihMaXN0SXRlbURpcmVjdGl2ZSk7XG4gICNpdGVtc0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaSA9IHRoaXMuaXRlbXMoKTtcbiAgICBpZiAodGhpcy4ja2V5TWFuYWdlcikgdGhpcy4ja2V5TWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy4ja2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcihpKS53aXRoV3JhcCgpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy4jZGlyLnZhbHVlKTtcbiAgfSk7XG5cbiAgc29ydE9wdGlvbnMgPSBzaWduYWwodGhpcy4jaW5pdFNvcnRPcHRpb25zKCkpO1xuICBvcmRlck9wdGlvbnMgPSBzaWduYWw8U29ydE9wdGlvbltdPihbXG4gICAgeyBsYWJlbDogJ0FzY2VuZGluZycsIHZhbHVlOiAnYXNjJywgdHlwZTogJ29yZGVyJyB9LFxuICAgIHsgbGFiZWw6ICdEZXNjZW5kaW5nJywgdmFsdWU6ICdkZXNjJywgdHlwZTogJ29yZGVyJyB9XG4gIF0pO1xuICBzb3J0RmllbGRzID0gY29tcHV0ZWQoKCkgPT4gWy4uLnRoaXMuc29ydE9wdGlvbnMoKSwgLi4udGhpcy5vcmRlck9wdGlvbnMoKV0pO1xuXG4gIHNvcnRGb3JtITogRm9ybUdyb3VwOyAvLyBSZWFjdGl2ZSBGb3JtXG5cbiAgc29ydENoYW5nZWQgPSBvdXRwdXQ8eyBzb3J0OiBzdHJpbmc7IG9yZGVyOiBzdHJpbmcgfT4oKTtcblxuICBzZWxlY3RTb3J0QnlJbmRleChpZHg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0U29ydCh0aGlzLnNvcnRGaWVsZHMoKVtpZHhdLnR5cGUsIHRoaXMuc29ydEZpZWxkcygpW2lkeF0udmFsdWUpO1xuICB9XG5cbiAgc2VsZWN0U29ydCh0eXBlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRGb3JtLmdldCgnc29ydCcpPy52YWx1ZSA9PT0gdmFsdWUgPyB0aGlzLnNvcnRGb3JtLmdldCgnc29ydCcpPy5zZXRWYWx1ZShudWxsKSA6IHRoaXMuc29ydEZvcm0uZ2V0KHR5cGUpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0Rm9ybSA9IHRoaXMuI2ZiLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICAgIHNvcnQ6IFtdLFxuICAgICAgb3JkZXI6IFt0aGlzLm9yZGVyT3B0aW9ucygpWzBdLnZhbHVlXSAvLyBEZWZhdWx0OiBBc2NlbmRpbmdcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVjZXNzYXJ5LiBJdCBicmVha3Mgc3RvcmVkIHF1ZXJpZXMgZmlyc3QgbG9hZCBieSByZXNldHRpbmcgc29ydFxuICAgIC8vIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIEVtaXQgdGhlIGZvcm0gdmFsdWVzIHdoZW4gY2hhbmdlcyBvY2N1clxuICBvblNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICBjb25zdCB7IHNvcnQsIG9yZGVyIH0gPSB0aGlzLnNvcnRGb3JtLnZhbHVlO1xuICAgIHRoaXMuI2RyaXZlLnNldFNvcnQoc29ydCwgb3JkZXIpO1xuICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdCh7IHNvcnQsIG9yZGVyIH0pO1xuICB9XG5cbiAgI2luaXRTb3J0T3B0aW9ucygpIHtcbiAgICBjb25zdCBiYXNlRGF0YTogU29ydE9wdGlvbltdID0gW107XG4gICAgY29uc3QgZmllbGRzID0gW0ZTX1BST1BFUlRJRVMubmFtZSwgQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLCBCYXNlT2JqZWN0VHlwZUZpZWxkLk1PRElGSUNBVElPTl9EQVRFXTtcbiAgICBjb25zdCBjb250ZW50RmllbGRzID0gW0NvbnRlbnRTdHJlYW1GaWVsZC5MRU5HVEgsIENvbnRlbnRTdHJlYW1GaWVsZC5NSU1FX1RZUEVdO1xuXG4gICAgWy4uLmZpZWxkcywgLi4uY29udGVudEZpZWxkc10uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgYmFzZURhdGEucHVzaCh7XG4gICAgICAgIGxhYmVsOiB0aGlzLiNzeXN0ZW1TZXJ2aWNlLmdldExvY2FsaXplZExhYmVsKGYpIHx8IGYsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB0eXBlOiAnc29ydCdcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhc2VEYXRhO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { DatePipe } from '@angular/common';
2
+ import { Component, computed, input, output } from '@angular/core';
3
+ import { BaseObjectTypeField, TranslateModule } from '@yuuvis/client-core';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@yuuvis/client-core";
6
+ export class VersionTileComponent {
7
+ constructor() {
8
+ this.tile = input.required();
9
+ this.rendererInputs = computed(() => ({
10
+ icon: this.tile().icon,
11
+ version: this.tile().instanceData?.[BaseObjectTypeField.VERSION_NUMBER],
12
+ date: this.tile().instanceData?.[BaseObjectTypeField.MODIFICATION_DATE],
13
+ modified: this.tile().instanceData?.[BaseObjectTypeField.MODIFIED_BY + '_title']
14
+ }));
15
+ this.selectedVersion = output();
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VersionTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: VersionTileComponent, isStandalone: true, selector: "ymd-version-tile", inputs: { tile: { classPropertyName: "tile", publicName: "tile", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectedVersion: "selectedVersion" }, ngImport: i0, template: `
19
+ <div
20
+ class="slots"
21
+ title="{{
22
+ 'yuv.app.drive.versions.desctiption.label'
23
+ | translate: { version: rendererInputs().version, modifieer: rendererInputs().modified, date: rendererInputs().date | date: 'medium' }
24
+ }}"
25
+ >
26
+ <div data-slot="version" class="version">
27
+ <span>{{ 'yuv.app.drive.versions.label' | translate }}: {{ rendererInputs().version }}</span>
28
+ </div>
29
+ <div data-slot="date" class="date" title="{{ rendererInputs().date | date: 'medium' }}">
30
+ {{ rendererInputs().date | date: 'shortDate' }}
31
+ </div>
32
+ <div data-slot="modified" class="modified" title="{{ rendererInputs().modified }}">
33
+ {{ rendererInputs().modified }}
34
+ </div>
35
+ </div>
36
+ `, isInline: true, styles: [":host{--_tile-background: var(--tile-background, transparent);--_tile-icon-fill: var(--tile-icon-fill, currentColor);--_tile-padding: var(--tile-padding, var(--app-pane-padding));--_tile-action-icon-size: var(--tile-action-icon-size);--_tile-icon-size: var(--tile-icon-size);--_transition-duration: var(--transition-duration, .1s);display:flex;align-items:center;background-color:var(--_tile-background);padding:var(--_tile-padding);transition:background-color var(--_transition-duration)}:host .slots{display:grid;grid-template-columns:1fr 2fr;grid-template-rows:repeat(2,1fr);grid-template-areas:\"version version\" \"date modified\";flex:1;gap:calc(var(--_tile-padding) / 2) calc(var(--_tile-padding) * 2)}:host [data-slot]{align-items:center;-webkit-user-select:none;user-select:none;display:grid}:host [data-slot=icon]{--icon-renderer-icon-size: var(--_tile-icon-size);color:var(--_tile-icon-fill);width:0;grid-area:icon;display:grid;align-items:center;justify-content:center}:host [data-slot=version]{font-weight:700;grid-area:version}:host [data-slot=date]{grid-area:date}:host [data-slot=modified]{grid-area:modified;white-space:nowrap;justify-self:end}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VersionTileComponent, decorators: [{
39
+ type: Component,
40
+ args: [{ selector: 'ymd-version-tile', standalone: true, imports: [DatePipe, TranslateModule], template: `
41
+ <div
42
+ class="slots"
43
+ title="{{
44
+ 'yuv.app.drive.versions.desctiption.label'
45
+ | translate: { version: rendererInputs().version, modifieer: rendererInputs().modified, date: rendererInputs().date | date: 'medium' }
46
+ }}"
47
+ >
48
+ <div data-slot="version" class="version">
49
+ <span>{{ 'yuv.app.drive.versions.label' | translate }}: {{ rendererInputs().version }}</span>
50
+ </div>
51
+ <div data-slot="date" class="date" title="{{ rendererInputs().date | date: 'medium' }}">
52
+ {{ rendererInputs().date | date: 'shortDate' }}
53
+ </div>
54
+ <div data-slot="modified" class="modified" title="{{ rendererInputs().modified }}">
55
+ {{ rendererInputs().modified }}
56
+ </div>
57
+ </div>
58
+ `, styles: [":host{--_tile-background: var(--tile-background, transparent);--_tile-icon-fill: var(--tile-icon-fill, currentColor);--_tile-padding: var(--tile-padding, var(--app-pane-padding));--_tile-action-icon-size: var(--tile-action-icon-size);--_tile-icon-size: var(--tile-icon-size);--_transition-duration: var(--transition-duration, .1s);display:flex;align-items:center;background-color:var(--_tile-background);padding:var(--_tile-padding);transition:background-color var(--_transition-duration)}:host .slots{display:grid;grid-template-columns:1fr 2fr;grid-template-rows:repeat(2,1fr);grid-template-areas:\"version version\" \"date modified\";flex:1;gap:calc(var(--_tile-padding) / 2) calc(var(--_tile-padding) * 2)}:host [data-slot]{align-items:center;-webkit-user-select:none;user-select:none;display:grid}:host [data-slot=icon]{--icon-renderer-icon-size: var(--_tile-icon-size);color:var(--_tile-icon-fill);width:0;grid-area:icon;display:grid;align-items:center;justify-content:center}:host [data-slot=version]{font-weight:700;grid-area:version}:host [data-slot=date]{grid-area:date}:host [data-slot=modified]{grid-area:modified;white-space:nowrap;justify-self:end}\n"] }]
59
+ }] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3ZlcnNpb25zLWxpc3QvdGlsZS90aWxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQTRCM0UsTUFBTSxPQUFPLG9CQUFvQjtJQXpCakM7UUEwQkUsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVksQ0FBQztRQUVsQyxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSTtZQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQztZQUN2RSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFTO1lBQy9FLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztTQUNqRixDQUFDLENBQUMsQ0FBQztRQUVKLG9CQUFlLEdBQUcsTUFBTSxFQUFPLENBQUM7S0FDakM7K0dBWFksb0JBQW9CO21HQUFwQixvQkFBb0IsNlBBckJyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULGd0Q0FuQlMsUUFBUSw0Q0FBRSxlQUFlOzs0RkFzQnhCLG9CQUFvQjtrQkF6QmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsWUFDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VPYmplY3RUeXBlRmllbGQsIFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVGlsZURhdGEgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvdGlsZS1saXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneW1kLXZlcnNpb24tdGlsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtEYXRlUGlwZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNsb3RzXCJcbiAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgJ3l1di5hcHAuZHJpdmUudmVyc2lvbnMuZGVzY3RpcHRpb24ubGFiZWwnXG4gICAgICAgICAgfCB0cmFuc2xhdGU6IHsgdmVyc2lvbjogcmVuZGVyZXJJbnB1dHMoKS52ZXJzaW9uLCBtb2RpZmllZXI6IHJlbmRlcmVySW5wdXRzKCkubW9kaWZpZWQsIGRhdGU6IHJlbmRlcmVySW5wdXRzKCkuZGF0ZSB8IGRhdGU6ICdtZWRpdW0nIH1cbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8ZGl2IGRhdGEtc2xvdD1cInZlcnNpb25cIiBjbGFzcz1cInZlcnNpb25cIj5cbiAgICAgICAgPHNwYW4+e3sgJ3l1di5hcHAuZHJpdmUudmVyc2lvbnMubGFiZWwnIHwgdHJhbnNsYXRlIH19OiB7eyByZW5kZXJlcklucHV0cygpLnZlcnNpb24gfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZGF0YS1zbG90PVwiZGF0ZVwiIGNsYXNzPVwiZGF0ZVwiIHRpdGxlPVwie3sgcmVuZGVyZXJJbnB1dHMoKS5kYXRlIHwgZGF0ZTogJ21lZGl1bScgfX1cIj5cbiAgICAgICAge3sgcmVuZGVyZXJJbnB1dHMoKS5kYXRlIHwgZGF0ZTogJ3Nob3J0RGF0ZScgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBkYXRhLXNsb3Q9XCJtb2RpZmllZFwiIGNsYXNzPVwibW9kaWZpZWRcIiB0aXRsZT1cInt7IHJlbmRlcmVySW5wdXRzKCkubW9kaWZpZWQgfX1cIj5cbiAgICAgICAge3sgcmVuZGVyZXJJbnB1dHMoKS5tb2RpZmllZCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsOiAnLi90aWxlLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBWZXJzaW9uVGlsZUNvbXBvbmVudCB7XG4gIHRpbGUgPSBpbnB1dC5yZXF1aXJlZDxUaWxlRGF0YT4oKTtcblxuICByZW5kZXJlcklucHV0cyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgaWNvbjogdGhpcy50aWxlKCkuaWNvbixcbiAgICB2ZXJzaW9uOiB0aGlzLnRpbGUoKS5pbnN0YW5jZURhdGE/LltCYXNlT2JqZWN0VHlwZUZpZWxkLlZFUlNJT05fTlVNQkVSXSxcbiAgICBkYXRlOiB0aGlzLnRpbGUoKS5pbnN0YW5jZURhdGE/LltCYXNlT2JqZWN0VHlwZUZpZWxkLk1PRElGSUNBVElPTl9EQVRFXSBhcyBEYXRlLFxuICAgIG1vZGlmaWVkOiB0aGlzLnRpbGUoKS5pbnN0YW5jZURhdGE/LltCYXNlT2JqZWN0VHlwZUZpZWxkLk1PRElGSUVEX0JZICsgJ190aXRsZSddXG4gIH0pKTtcblxuICBzZWxlY3RlZFZlcnNpb24gPSBvdXRwdXQ8YW55PigpO1xufVxuIl19
@@ -0,0 +1,94 @@
1
+ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, viewChildren } from '@angular/core';
4
+ import { ClickDoubleDirective } from '@yuuvis/client-framework/common';
5
+ import { ListItemDirective } from '@yuuvis/client-framework/list';
6
+ import { finalize } from 'rxjs/operators';
7
+ import { DriveService } from '../../services';
8
+ import { VersionTileComponent } from './tile/tile.component';
9
+ import * as i0 from "@angular/core";
10
+ export class VersionsListComponent {
11
+ constructor() {
12
+ this.#drive = inject(DriveService);
13
+ this.versionsList = this.#drive.state$.versions.versionsList;
14
+ this.selectedVersion = this.#drive.state$.versions.selectedVersion;
15
+ this.selection = computed(() => (this.selectedVersion() || []).map((v) => v.version));
16
+ this.listItems = viewChildren(ListItemDirective);
17
+ this.#itemsEffect = effect(() => {
18
+ const items = this.listItems();
19
+ if (this.#keyManager)
20
+ this.#keyManager.destroy();
21
+ this.#keyManager = new ActiveDescendantKeyManager(items).withWrap();
22
+ });
23
+ }
24
+ #drive;
25
+ onBlur() {
26
+ this.#keyManager.setActiveItem(-1);
27
+ }
28
+ onKeydown(event) {
29
+ event.preventDefault();
30
+ event.code === 'Escape' && this.#keyManager.setActiveItem(-1);
31
+ event.target instanceof HTMLButtonElement && this.#keyManager.setActiveItem(-1);
32
+ if (event.code === 'Space' || event.code === 'Enter') {
33
+ const aii = this.#keyManager.activeItemIndex !== null ? this.#keyManager.activeItemIndex : -1;
34
+ aii >= 0 && this.selectedVersionByIndex(aii);
35
+ }
36
+ else
37
+ this.#keyManager?.onKeydown(event);
38
+ }
39
+ #keyManager;
40
+ #itemsEffect;
41
+ selectedVersionAction(event) {
42
+ this.#drive.setBusy(true);
43
+ this.#drive
44
+ .setNewVersion(event.version)
45
+ .pipe(finalize(() => this.#drive.setBusy(false)))
46
+ .subscribe();
47
+ }
48
+ selectedVersionByIndex(index) {
49
+ this.setSelectedVersion(this.versionsList()[index]);
50
+ }
51
+ setSelectedVersion(version) {
52
+ this.#drive.setSelectedVersion(version).subscribe();
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VersionsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: VersionsListComponent, isStandalone: true, selector: "ymd-versions-list", host: { attributes: { "tabindex": "0", "role": "listbox" }, listeners: { "blur": "onBlur()", "keydown": "onKeydown($event)" } }, viewQueries: [{ propertyName: "listItems", predicate: ListItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: ` @let versions = versionsList();
56
+ @if (versions) {
57
+ @for (version of versions; track $index) {
58
+ <ymd-version-tile
59
+ yuvListItem
60
+ [tile]="version"
61
+ [attr.aria-selected]="selection().includes(version.dmsObject.version)"
62
+ [selected]="selection().includes(version.dmsObject.version)"
63
+ (click.single)="setSelectedVersion(version)"
64
+ (selectedVersion)="selectedVersionAction($event)"
65
+ ></ymd-version-tile>
66
+ }
67
+ }`, isInline: true, styles: [":host{--_tile-hover-background: var(--tile-hover-background, var(--item-focus-background-color));--_tile-selected-background: var(--tile-selected-background, var(--item-selected-background-color));--_tile-selected-icon-fill: var(--tile-selected-icon-fill, var(--color-accent))}:host ymd-version-tile{cursor:pointer;background-color:var(--tile-background)}:host ymd-version-tile:not(.last){border:var(--tile-border);border-width:var(--tile-border-width);margin-block-end:var(--tile-gap)}:host ymd-version-tile:hover,:host ymd-version-tile[aria-current=true]{--tile-background: var(--_tile-hover-background)}:host ymd-version-tile[aria-selected=true]{--tile-background: var(--_tile-selected-background);--tile-icon-fill: var(--_tile-selected-icon-fill)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: VersionTileComponent, selector: "ymd-version-tile", inputs: ["tile"], outputs: ["selectedVersion"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "directive", type: ClickDoubleDirective, selector: "[click.single],[click.double]", inputs: ["debounceTime"], outputs: ["click.double", "click.single"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VersionsListComponent, decorators: [{
70
+ type: Component,
71
+ args: [{ selector: 'ymd-versions-list', standalone: true, imports: [CommonModule, VersionTileComponent, ListItemDirective, ClickDoubleDirective], template: ` @let versions = versionsList();
72
+ @if (versions) {
73
+ @for (version of versions; track $index) {
74
+ <ymd-version-tile
75
+ yuvListItem
76
+ [tile]="version"
77
+ [attr.aria-selected]="selection().includes(version.dmsObject.version)"
78
+ [selected]="selection().includes(version.dmsObject.version)"
79
+ (click.single)="setSelectedVersion(version)"
80
+ (selectedVersion)="selectedVersionAction($event)"
81
+ ></ymd-version-tile>
82
+ }
83
+ }`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
84
+ tabindex: '0',
85
+ role: 'listbox'
86
+ }, styles: [":host{--_tile-hover-background: var(--tile-hover-background, var(--item-focus-background-color));--_tile-selected-background: var(--tile-selected-background, var(--item-selected-background-color));--_tile-selected-icon-fill: var(--tile-selected-icon-fill, var(--color-accent))}:host ymd-version-tile{cursor:pointer;background-color:var(--tile-background)}:host ymd-version-tile:not(.last){border:var(--tile-border);border-width:var(--tile-border-width);margin-block-end:var(--tile-gap)}:host ymd-version-tile:hover,:host ymd-version-tile[aria-current=true]{--tile-background: var(--_tile-hover-background)}:host ymd-version-tile[aria-selected=true]{--tile-background: var(--_tile-selected-background);--tile-icon-fill: var(--_tile-selected-icon-fill)}\n"] }]
87
+ }], propDecorators: { onBlur: [{
88
+ type: HostListener,
89
+ args: ['blur']
90
+ }], onKeydown: [{
91
+ type: HostListener,
92
+ args: ['keydown', ['$event']]
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3ZlcnNpb25zLWxpc3QvdmVyc2lvbnMtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6SCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQTBCN0QsTUFBTSxPQUFPLHFCQUFxQjtJQXhCbEM7UUF5QkUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5QixpQkFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDeEQsb0JBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQzlELGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFD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USxFQUFFLEdBQUc7d0JBQ2IsSUFBSSxFQUFFLFNBQVM7cUJBQ2hCOzhCQVVELE1BQU07c0JBREwsWUFBWTt1QkFBQyxNQUFNO2dCQU1wQixTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgSG9zdExpc3RlbmVyLCBpbmplY3QsIHZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG1zT2JqZWN0IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBDbGlja0RvdWJsZURpcmVjdGl2ZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24nO1xuaW1wb3J0IHsgTGlzdEl0ZW1EaXJlY3RpdmUgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvbGlzdCc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyaXZlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IFZlcnNpb25UaWxlQ29tcG9uZW50IH0gZnJvbSAnLi90aWxlL3RpbGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneW1kLXZlcnNpb25zLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBWZXJzaW9uVGlsZUNvbXBvbmVudCwgTGlzdEl0ZW1EaXJlY3RpdmUsIENsaWNrRG91YmxlRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGAgQGxldCB2ZXJzaW9ucyA9IHZlcnNpb25zTGlzdCgpO1xuICAgIEBpZiAodmVyc2lvbnMpIHtcbiAgICAgIEBmb3IgKHZlcnNpb24gb2YgdmVyc2lvbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8eW1kLXZlcnNpb24tdGlsZVxuICAgICAgICAgIHl1dkxpc3RJdGVtXG4gICAgICAgICAgW3RpbGVdPVwidmVyc2lvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzZWxlY3Rpb24oKS5pbmNsdWRlcyh2ZXJzaW9uLmRtc09iamVjdC52ZXJzaW9uKVwiXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGlvbigpLmluY2x1ZGVzKHZlcnNpb24uZG1zT2JqZWN0LnZlcnNpb24pXCJcbiAgICAgICAgICAoY2xpY2suc2luZ2xlKT1cInNldFNlbGVjdGVkVmVyc2lvbih2ZXJzaW9uKVwiXG4gICAgICAgICAgKHNlbGVjdGVkVmVyc2lvbik9XCJzZWxlY3RlZFZlcnNpb25BY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgID48L3ltZC12ZXJzaW9uLXRpbGU+XG4gICAgICB9XG4gICAgfWAsXG4gIHN0eWxlVXJsOiAnLi92ZXJzaW9ucy1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICB0YWJpbmRleDogJzAnLFxuICAgIHJvbGU6ICdsaXN0Ym94J1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIFZlcnNpb25zTGlzdENvbXBvbmVudCB7XG4gICNkcml2ZSA9IGluamVjdChEcml2ZVNlcnZpY2UpO1xuXG4gIHZlcnNpb25zTGlzdCA9IHRoaXMuI2RyaXZlLnN0YXRlJC52ZXJzaW9ucy52ZXJzaW9uc0xpc3Q7XG4gIHNlbGVjdGVkVmVyc2lvbiA9IHRoaXMuI2RyaXZlLnN0YXRlJC52ZXJzaW9ucy5zZWxlY3RlZFZlcnNpb247XG4gIHNlbGVjdGlvbiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNlbGVjdGVkVmVyc2lvbigpIHx8IFtdKS5tYXAoKHY6IERtc09iamVjdCkgPT4gdi52ZXJzaW9uKSk7XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLiNrZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgJiYgdGhpcy4ja2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiB0aGlzLiNrZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScgfHwgZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgY29uc3QgYWlpOiBudW1iZXIgPSB0aGlzLiNrZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCAhPT0gbnVsbCA/IHRoaXMuI2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IDogLTE7XG4gICAgICBhaWkgPj0gMCAmJiB0aGlzLnNlbGVjdGVkVmVyc2lvbkJ5SW5kZXgoYWlpKTtcbiAgICB9IGVsc2UgdGhpcy4ja2V5TWFuYWdlcj8ub25LZXlkb3duKGV2ZW50KTtcbiAgfVxuXG4gICNrZXlNYW5hZ2VyITogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8TGlzdEl0ZW1EaXJlY3RpdmU+O1xuXG4gIGxpc3RJdGVtcyA9IHZpZXdDaGlsZHJlbihMaXN0SXRlbURpcmVjdGl2ZSk7XG4gICNpdGVtc0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmxpc3RJdGVtcygpO1xuICAgIGlmICh0aGlzLiNrZXlNYW5hZ2VyKSB0aGlzLiNrZXlNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLiNrZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyKGl0ZW1zKS53aXRoV3JhcCgpO1xuICB9KTtcblxuICBzZWxlY3RlZFZlcnNpb25BY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuI2RyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgdGhpcy4jZHJpdmVcbiAgICAgIC5zZXROZXdWZXJzaW9uKGV2ZW50LnZlcnNpb24pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLiNkcml2ZS5zZXRCdXN5KGZhbHNlKSkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWxlY3RlZFZlcnNpb25CeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkVmVyc2lvbih0aGlzLnZlcnNpb25zTGlzdCgpW2luZGV4XSk7XG4gIH1cblxuICBzZXRTZWxlY3RlZFZlcnNpb24odmVyc2lvbjogYW55KSB7XG4gICAgdGhpcy4jZHJpdmUuc2V0U2VsZWN0ZWRWZXJzaW9uKHZlcnNpb24pLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,116 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, DestroyRef, inject } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
+ import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';
6
+ import { TranslateModule } from '@yuuvis/client-core';
7
+ import { ActionsService } from '@yuuvis/client-framework/actions';
8
+ import { YUV_ICONS } from '@yuuvis/client-framework/icons';
9
+ import { UploadProgressComponent } from '@yuuvis/client-framework/upload-progress';
10
+ import { AppLogoComponent } from '@yuuvis/client-shell';
11
+ import { ICONS, YvcIconModule } from '@yuuvis/components/icon';
12
+ import { YvcOverflowMenuComponent } from '@yuuvis/components/overflow-menu';
13
+ import { YvcOverlayModule } from '@yuuvis/components/overlay';
14
+ import { filter } from 'rxjs/operators';
15
+ import { APP_DRIVE_ICONS } from '../../drive.icons';
16
+ import { APP_ACTIONS, APP_SCHEMA } from '../../drive.schema';
17
+ import { DriveService } from '../../services/drive/drive.service';
18
+ import { RenameAction } from '../../actions/rename/rename.action';
19
+ import { PasteAction } from '../../actions/paste/paste.action';
20
+ import { UpdateContentAction } from '../../actions/updateContent/update.content.action';
21
+ import { CopyLinkAction } from '../../actions/copy-link/copy-link.action';
22
+ import { ManageVersionsAction } from '../../actions';
23
+ import * as i0 from "@angular/core";
24
+ import * as i1 from "@angular/router";
25
+ import * as i2 from "@yuuvis/client-core";
26
+ export class DriveFrameComponent {
27
+ #router;
28
+ #route;
29
+ #drive;
30
+ #actionsService;
31
+ #destroyRef;
32
+ #actions;
33
+ constructor() {
34
+ this.#router = inject(Router);
35
+ this.#route = inject(ActivatedRoute);
36
+ this.#drive = inject(DriveService);
37
+ this.#actionsService = inject(ActionsService);
38
+ this.#destroyRef = inject(DestroyRef);
39
+ this.query = this.#drive.state$.query;
40
+ this.currentFolder = this.#drive.state$.currentFolder;
41
+ this.busy = this.#drive.state$.busy;
42
+ this.appName = APP_SCHEMA.name;
43
+ this.appIcon = APP_SCHEMA.icon;
44
+ this.icons = {
45
+ ...APP_DRIVE_ICONS,
46
+ search: ICONS.search,
47
+ add: YUV_ICONS.add
48
+ };
49
+ this.headerNavItems = [
50
+ // TODO: enable again once favorite feature is implemented
51
+ // {
52
+ // id: 'favorites',
53
+ // disabled: true,
54
+ // label: this.translate.instant('yuv.app.drive.nav.favorites'),
55
+ // icon: this.icons.favorite,
56
+ // callback: () => {
57
+ // this.router.navigate(['favorites'], {relativeTo: this.route})
58
+ // }
59
+ // }
60
+ ];
61
+ this.#actions = [
62
+ { id: APP_ACTIONS.rename, action: RenameAction },
63
+ { id: APP_ACTIONS.paste, action: PasteAction },
64
+ { id: APP_ACTIONS.contentUpdate, action: UpdateContentAction },
65
+ { id: APP_ACTIONS.copyLink, action: CopyLinkAction },
66
+ { id: APP_ACTIONS.manageVersions, action: ManageVersionsAction }
67
+ ];
68
+ this.#registerActions();
69
+ // TODO: make use of global shortcuts
70
+ // this.shellService.globalShortcuts$.pipe(takeUntilDestroyed()).subscribe((s: GlobalShortcut) => {
71
+ // if (s === GlobalShortcut.search) this.router.navigate([{ outlets: { modal: ['find'] } }], { relativeTo: this.route });
72
+ // });
73
+ }
74
+ #trackRouteChanges() {
75
+ // listen to navigation/route changes in order to restore it later on
76
+ this.#router.events
77
+ .pipe(takeUntilDestroyed(this.#destroyRef), filter((e) => e instanceof NavigationEnd))
78
+ .subscribe((e) => {
79
+ this.#drive.lastRouteURL = e.urlAfterRedirects;
80
+ });
81
+ }
82
+ onUploadProgressResultItemClick(uploadRes) {
83
+ if (uploadRes && uploadRes.objectId) {
84
+ this.#router.navigate(['object', uploadRes.objectId], { relativeTo: this.#route });
85
+ }
86
+ }
87
+ #registerActions() {
88
+ this.#actionsService.registerActions(this.#actions);
89
+ }
90
+ ngOnInit() {
91
+ if (this.#drive.lastRouteURL)
92
+ this.#router.navigateByUrl(this.#drive.lastRouteURL).then(() => this.#trackRouteChanges());
93
+ else
94
+ this.#trackRouteChanges();
95
+ }
96
+ ngOnDestroy() {
97
+ this.#actions.forEach((a) => this.#actionsService.concealActions([a.id]));
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DriveFrameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DriveFrameComponent, isStandalone: true, selector: "ymd-drive", ngImport: i0, template: "<yuv-upload-progress (resultItemClick)=\"onUploadProgressResultItemClick($event)\"></yuv-upload-progress>\n\n<header>\n <yuv-app-logo [label]=\"appName\" routerLink=\"files\"></yuv-app-logo>\n\n <nav [attr.aria-label]=\"'yuv.app.drive.navigation.aria.label' | translate\">\n <yvc-overflow-menu [menuItems]=\"headerNavItems\"></yvc-overflow-menu>\n </nav>\n</header>\n\n<section class=\"drive-main__content\" [attr.aria-label]=\"'yuv.app.drive.content.aria.label' | translate\">\n <router-outlet></router-outlet>\n</section>\n\n<router-outlet name=\"modal\"></router-outlet>\n", styles: [":host{--app-drive-header-background: var(--panel-background);display:flex;flex-flow:column;height:100%}:host header{flex:0 0 auto;display:grid;grid-template-rows:auto;grid-template-columns:auto 1fr auto auto;grid-template-areas:\"logo . . nav\";gap:var(--app-pane-padding);align-items:center;height:var(--client-shell-bar-width);background-color:var(--app-drive-header-background)}:host header yuv-app-logo{--band-icon-size: 50px;--icon-color: var(--app-drive-header-background)}:host header ymd-drive-search{max-width:400px}:host header nav{grid-area:nav}:host header nav yvc-overflow-menu{--menu-item-padding: calc(var(--app-pane-padding) / 4);--menu-item-icon-size: 18px;--menu-item-gap: calc(var(--app-pane-padding) / 4)}:host .drive-main__content{flex:1;overflow-y:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: YvcOverflowMenuComponent, selector: "yvc-overflow-menu", inputs: ["overflowIcon", "groupLabels", "menuItems", "hideLabels"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: YvcOverlayModule }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: AppLogoComponent, selector: "yuv-app-logo", inputs: ["icon", "label"] }, { kind: "component", type: UploadProgressComponent, selector: "yuv-upload-progress", outputs: ["resultItemClick"] }] }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DriveFrameComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'ymd-drive', standalone: true, imports: [
105
+ CommonModule,
106
+ RouterModule,
107
+ YvcOverflowMenuComponent,
108
+ ReactiveFormsModule,
109
+ TranslateModule,
110
+ YvcOverlayModule,
111
+ YvcIconModule,
112
+ AppLogoComponent,
113
+ UploadProgressComponent
114
+ ], template: "<yuv-upload-progress (resultItemClick)=\"onUploadProgressResultItemClick($event)\"></yuv-upload-progress>\n\n<header>\n <yuv-app-logo [label]=\"appName\" routerLink=\"files\"></yuv-app-logo>\n\n <nav [attr.aria-label]=\"'yuv.app.drive.navigation.aria.label' | translate\">\n <yvc-overflow-menu [menuItems]=\"headerNavItems\"></yvc-overflow-menu>\n </nav>\n</header>\n\n<section class=\"drive-main__content\" [attr.aria-label]=\"'yuv.app.drive.content.aria.label' | translate\">\n <router-outlet></router-outlet>\n</section>\n\n<router-outlet name=\"modal\"></router-outlet>\n", styles: [":host{--app-drive-header-background: var(--panel-background);display:flex;flex-flow:column;height:100%}:host header{flex:0 0 auto;display:grid;grid-template-rows:auto;grid-template-columns:auto 1fr auto auto;grid-template-areas:\"logo . . nav\";gap:var(--app-pane-padding);align-items:center;height:var(--client-shell-bar-width);background-color:var(--app-drive-header-background)}:host header yuv-app-logo{--band-icon-size: 50px;--icon-color: var(--app-drive-header-background)}:host header ymd-drive-search{max-width:400px}:host header nav{grid-area:nav}:host header nav yvc-overflow-menu{--menu-item-padding: calc(var(--app-pane-padding) / 4);--menu-item-icon-size: 18px;--menu-item-gap: calc(var(--app-pane-padding) / 4)}:host .drive-main__content{flex:1;overflow-y:hidden}\n"] }]
115
+ }], ctorParameters: () => [] });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvY29udGFpbmVyL2RyaXZlL2RyaXZlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL2NvbnRhaW5lci9kcml2ZS9kcml2ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTZCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEYsT0FBTyxFQUFlLGVBQWUsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFZLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUQs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QUFtQiw4QkFDbkIsZUFBZSwyRkFDZixnQkFBZ0IsOEJBQ2hCLGFBQWEsK0JBQ2IsZ0JBQWdCLG9GQUNoQix1QkFBdUI7OzRGQUtkLG1CQUFtQjtrQkFqQi9CLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3FCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBTaWduYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTZWFyY2hRdWVyeSwgVHJhbnNsYXRlTW9kdWxlLCBVcGxvYWRSZXN1bHQgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IEFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2FjdGlvbnMnO1xuaW1wb3J0IHsgWVVWX0lDT05TIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2ljb25zJztcbmltcG9ydCB7IFVwbG9hZFByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3VwbG9hZC1wcm9ncmVzcyc7XG5pbXBvcnQgeyBBcHBMb2dvQ29tcG9uZW50IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwnO1xuaW1wb3J0IHsgSUNPTlMsIFl2Y0ljb25Nb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBNZW51SXRlbSwgWXZjT3ZlcmZsb3dNZW51Q29tcG9uZW50IH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJmbG93LW1lbnUnO1xuaW1wb3J0IHsgWXZjT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcblxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQVBQX0RSSVZFX0lDT05TIH0gZnJvbSAnLi4vLi4vZHJpdmUuaWNvbnMnO1xuaW1wb3J0IHsgQVBQX0FDVElPTlMsIEFQUF9TQ0hFTUEgfSBmcm9tICcuLi8uLi9kcml2ZS5zY2hlbWEnO1xuaW1wb3J0IHsgRHJpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJpdmUvZHJpdmUuc2VydmljZSc7XG5pbXBvcnQgeyBSZW5hbWVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zL3JlbmFtZS9yZW5hbWUuYWN0aW9uJztcbmltcG9ydCB7IFBhc3RlQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9wYXN0ZS9wYXN0ZS5hY3Rpb24nO1xuaW1wb3J0IHsgVXBkYXRlQ29udGVudEFjdGlvbiB9IGZyb20gJy4uLy4uL2FjdGlvbnMvdXBkYXRlQ29udGVudC91cGRhdGUuY29udGVudC5hY3Rpb24nO1xuaW1wb3J0IHsgQ29weUxpbmtBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zL2NvcHktbGluay9jb3B5LWxpbmsuYWN0aW9uJztcbmltcG9ydCB7IE1hbmFnZVZlcnNpb25zQWN0aW9uIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1kcml2ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFl2Y092ZXJmbG93TWVudUNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBZdmNPdmVybGF5TW9kdWxlLFxuICAgIFl2Y0ljb25Nb2R1bGUsXG4gICAgQXBwTG9nb0NvbXBvbmVudCxcbiAgICBVcGxvYWRQcm9ncmVzc0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJpdmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHJpdmUuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIERyaXZlRnJhbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICNyb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgI3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgI2RyaXZlID0gaW5qZWN0KERyaXZlU2VydmljZSk7XG4gICNhY3Rpb25zU2VydmljZSA9IGluamVjdChBY3Rpb25zU2VydmljZSk7XG4gICNkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHF1ZXJ5OiBTaWduYWw8U2VhcmNoUXVlcnkgfCBudWxsPiA9IHRoaXMuI2RyaXZlLnN0YXRlJC5xdWVyeTtcbiAgY3VycmVudEZvbGRlcjogU2lnbmFsPHN0cmluZyB8IG51bGw+ID0gdGhpcy4jZHJpdmUuc3RhdGUkLmN1cnJlbnRGb2xkZXI7XG4gIGJ1c3kgPSB0aGlzLiNkcml2ZS5zdGF0ZSQuYnVzeTtcblxuICBhcHBOYW1lID0gQVBQX1NDSEVNQS5uYW1lO1xuICBhcHBJY29uID0gQVBQX1NDSEVNQS5pY29uO1xuICBpY29ucyA9IHtcbiAgICAuLi5BUFBfRFJJVkVfSUNPTlMsXG4gICAgc2VhcmNoOiBJQ09OUy5zZWFyY2gsXG4gICAgYWRkOiBZVVZfSUNPTlMuYWRkXG4gIH07XG4gIGhlYWRlck5hdkl0ZW1zOiBNZW51SXRlbVtdID0gW1xuICAgIC8vIFRPRE86IGVuYWJsZSBhZ2FpbiBvbmNlIGZhdm9yaXRlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWRcbiAgICAvLyB7XG4gICAgLy8gICBpZDogJ2Zhdm9yaXRlcycsXG4gICAgLy8gICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLm5hdi5mYXZvcml0ZXMnKSxcbiAgICAvLyAgIGljb246IHRoaXMuaWNvbnMuZmF2b3JpdGUsXG4gICAgLy8gICBjYWxsYmFjazogKCkgPT4ge1xuICAgIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2Zhdm9yaXRlcyddLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZX0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICBdO1xuXG4gICNhY3Rpb25zID0gW1xuICAgIHsgaWQ6IEFQUF9BQ1RJT05TLnJlbmFtZSwgYWN0aW9uOiBSZW5hbWVBY3Rpb24gfSxcbiAgICB7IGlkOiBBUFBfQUNUSU9OUy5wYXN0ZSwgYWN0aW9uOiBQYXN0ZUFjdGlvbiB9LFxuICAgIHsgaWQ6IEFQUF9BQ1RJT05TLmNvbnRlbnRVcGRhdGUsIGFjdGlvbjogVXBkYXRlQ29udGVudEFjdGlvbiB9LFxuICAgIHsgaWQ6IEFQUF9BQ1RJT05TLmNvcHlMaW5rLCBhY3Rpb246IENvcHlMaW5rQWN0aW9uIH0sXG4gICAgeyBpZDogQVBQX0FDVElPTlMubWFuYWdlVmVyc2lvbnMsIGFjdGlvbjogTWFuYWdlVmVyc2lvbnNBY3Rpb24gfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuI3JlZ2lzdGVyQWN0aW9ucygpO1xuICAgIC8vIFRPRE86IG1ha2UgdXNlIG9mIGdsb2JhbCBzaG9ydGN1dHNcbiAgICAvLyB0aGlzLnNoZWxsU2VydmljZS5nbG9iYWxTaG9ydGN1dHMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoczogR2xvYmFsU2hvcnRjdXQpID0+IHtcbiAgICAvLyAgIGlmIChzID09PSBHbG9iYWxTaG9ydGN1dC5zZWFyY2gpIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgbW9kYWw6IFsnZmluZCddIH0gfV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gICN0cmFja1JvdXRlQ2hhbmdlcygpIHtcbiAgICAvLyBsaXN0ZW4gdG8gbmF2aWdhdGlvbi9yb3V0ZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHJlc3RvcmUgaXQgbGF0ZXIgb25cbiAgICB0aGlzLiNyb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpLFxuICAgICAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICB0aGlzLiNkcml2ZS5sYXN0Um91dGVVUkwgPSAoZSBhcyBOYXZpZ2F0aW9uRW5kKS51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgIH0pO1xuICB9XG5cbiAgb25VcGxvYWRQcm9ncmVzc1Jlc3VsdEl0ZW1DbGljayh1cGxvYWRSZXM6IFVwbG9hZFJlc3VsdCkge1xuICAgIGlmICh1cGxvYWRSZXMgJiYgdXBsb2FkUmVzLm9iamVjdElkKSB7XG4gICAgICB0aGlzLiNyb3V0ZXIubmF2aWdhdGUoWydvYmplY3QnLCB1cGxvYWRSZXMub2JqZWN0SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuI3JvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gICNyZWdpc3RlckFjdGlvbnMoKSB7XG4gICAgdGhpcy4jYWN0aW9uc1NlcnZpY2UucmVnaXN0ZXJBY3Rpb25zKHRoaXMuI2FjdGlvbnMpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2RyaXZlLmxhc3RSb3V0ZVVSTCkgdGhpcy4jcm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy4jZHJpdmUubGFzdFJvdXRlVVJMKS50aGVuKCgpID0+IHRoaXMuI3RyYWNrUm91dGVDaGFuZ2VzKCkpO1xuICAgIGVsc2UgdGhpcy4jdHJhY2tSb3V0ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2FjdGlvbnMuZm9yRWFjaCgoYSkgPT4gdGhpcy4jYWN0aW9uc1NlcnZpY2UuY29uY2VhbEFjdGlvbnMoW2EuaWRdKSk7XG4gIH1cbn1cbiIsIjx5dXYtdXBsb2FkLXByb2dyZXNzIChyZXN1bHRJdGVtQ2xpY2spPVwib25VcGxvYWRQcm9ncmVzc1Jlc3VsdEl0ZW1DbGljaygkZXZlbnQpXCI+PC95dXYtdXBsb2FkLXByb2dyZXNzPlxuXG48aGVhZGVyPlxuICA8eXV2LWFwcC1sb2dvIFtsYWJlbF09XCJhcHBOYW1lXCIgcm91dGVyTGluaz1cImZpbGVzXCI+PC95dXYtYXBwLWxvZ28+XG5cbiAgPG5hdiBbYXR0ci5hcmlhLWxhYmVsXT1cIid5dXYuYXBwLmRyaXZlLm5hdmlnYXRpb24uYXJpYS5sYWJlbCcgfCB0cmFuc2xhdGVcIj5cbiAgICA8eXZjLW92ZXJmbG93LW1lbnUgW21lbnVJdGVtc109XCJoZWFkZXJOYXZJdGVtc1wiPjwveXZjLW92ZXJmbG93LW1lbnU+XG4gIDwvbmF2PlxuPC9oZWFkZXI+XG5cbjxzZWN0aW9uIGNsYXNzPVwiZHJpdmUtbWFpbl9fY29udGVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3l1di5hcHAuZHJpdmUuY29udGVudC5hcmlhLmxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG48L3NlY3Rpb24+XG5cbjxyb3V0ZXItb3V0bGV0IG5hbWU9XCJtb2RhbFwiPjwvcm91dGVyLW91dGxldD5cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ export const APP_DRIVE_ICONS = {
2
+ file: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z"/></svg>',
3
+ folder: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h240l80 80h320q33 0 56.5 23.5T880-640H447l-80-80H160v480l96-320h684L837-217q-8 26-29.5 41.5T760-160H160Zm84-80h516l72-240H316l-72 240Zm0 0 72-240-72 240Zm-84-400v-80 80Z"/></svg>',
4
+ folderx: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h240l80 80h320q33 0 56.5 23.5T880-640v400q0 33-23.5 56.5T800-160H160Zm0-80h640v-400H447l-80-80H160v480Zm0 0v-480 480Z"/></svg>',
5
+ favorite: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143ZM233-120l65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Zm247-350Z"/></svg>',
6
+ settings: '<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#e8eaed"><path d="M447-288h64l14-56.31q14-4.69 26.5-11.19Q564-362 575-372l55 16 32-55-41-38.52q2-13.48 3-29.98t-2-29.5l40-38-32-55-54 15q-11-10-24-17t-27-12l-13-56h-65l-12 56q-14 5-27 12t-24 17l-54-16-32 56 41 38q-3 14-3 29.5t3 29.5l-41 39 32 56 55-17q11 9 23.5 16t26.5 12l12 56Zm32.79-120Q450-408 429-429.21t-21-51Q408-510 429.21-531t51-21Q510-552 531-530.79t21 51Q552-450 530.79-429t-51 21ZM216-144q-29.7 0-50.85-21.15Q144-186.3 144-216v-528q0-29.7 21.15-50.85Q186.3-816 216-816h528q29.7 0 50.85 21.15Q816-773.7 816-744v528q0 29.7-21.15 50.85Q773.7-144 744-144H216Zm0-72h528v-528H216v528Zm0-528v528-528Z"/></svg>',
7
+ sort: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#5f6368" viewBox="0 -960 960 960"><path d="M320-440v-287L217-624l-57-56 200-200 200 200-57 56-103-103v287h-80ZM600-80 400-280l57-56 103 103v-287h80v287l103-103 57 56L600-80Z"/></svg>',
8
+ home: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#e8eaed" viewBox="0 -960 960 960"><path d="M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z"/></svg>',
9
+ toggleLeft: '<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#e8eaed"><path d="M211-144q-27.64 0-47.32-19.68T144-211v-538q0-27.64 19.68-47.32T211-816h538q27.64 0 47.32 19.68T816-749v538q0 27.64-19.68 47.32T749-144H211Zm125-72v-528H216v528h120Zm72 0h336v-528H408v528Zm-72 0H216h120Z"/></svg>',
10
+ toggleRight: '<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#e8eaed"><path d="M211-144q-27.64 0-47.32-19.68T144-211v-538q0-27.64 19.68-47.32T211-816h538q27.64 0 47.32 19.68T816-749v538q0 27.64-19.68 47.32T749-144H211Zm413-72h120v-528H624v528Zm-72 0v-528H216v528h336Zm72 0h120-120Z"/></svg>',
11
+ clipboard: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M620-163 450-333l56-56 114 114 226-226 56 56-282 282Zm220-397h-80v-200h-80v120H280v-120h-80v560h240v80H200q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v200ZM480-760q17 0 28.5-11.5T520-800q0-17-11.5-28.5T480-840q-17 0-28.5 11.5T440-800q0 17 11.5 28.5T480-760Z"/></svg>',
12
+ addCircle: '<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#e8eaed"><path d="M444-288h72v-156h156v-72H516v-156h-72v156H288v72h156v156Zm36.28 192Q401-96 331-126t-122.5-82.5Q156-261 126-330.96t-30-149.5Q96-560 126-629.5q30-69.5 82.5-122T330.96-834q69.96-30 149.5-30t149.04 30q69.5 30 122 82.5T834-629.28q30 69.73 30 149Q864-401 834-331t-82.5 122.5Q699-156 629.28-126q-69.73 30-149 30Zm-.28-72q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Zm0-312Z"/></svg>',
13
+ createFolder: '<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#e8eaed"><path d="M576-324h72v-72h72v-72h-72v-72h-72v72h-72v72h72v72ZM168-192q-29 0-50.5-21.5T96-264v-432q0-29.7 21.5-50.85Q139-768 168-768h216l96 96h312q29.7 0 50.85 21.15Q864-629.7 864-600v336q0 29-21.15 50.5T792-192H168Zm0-72h624v-336H450l-96-96H168v432Zm0 0v-432 432Z"/></svg>',
14
+ createFile: '<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#e8eaed"><path d="M444-240h72v-108h108v-72H516v-108h-72v108H336v72h108v108ZM263.72-96Q234-96 213-117.15T192-168v-624q0-29.7 21.15-50.85Q234.3-864 264-864h312l192 192v504q0 29.7-21.16 50.85Q725.68-96 695.96-96H263.72ZM528-624v-168H264v624h432v-456H528ZM264-792v189-189 624-624Z"/></svg>'
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmUuaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9kcml2ZS5pY29ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0IsSUFBSSxFQUFFLGlTQUFpUztJQUN2UyxNQUFNLEVBQ0osbVdBQW1XO0lBQ3JXLE9BQU8sRUFDTCwrU0FBK1M7SUFDalQsUUFBUSxFQUNOLDJTQUEyUztJQUM3UyxRQUFRLEVBQ04sMHNCQUEwc0I7SUFDNXNCLElBQUksRUFBRSw2UEFBNlA7SUFDblEsSUFBSSxFQUFFLGlQQUFpUDtJQUN2UCxVQUFVLEVBQ1IseVVBQXlVO0lBQzNVLFdBQVcsRUFDVCx5VUFBeVU7SUFFM1UsU0FBUyxFQUNQLG9kQUFvZDtJQUN0ZCxTQUFTLEVBQ1AsbWhCQUFtaEI7SUFDcmhCLFlBQVksRUFDViw0WEFBNFg7SUFDOVgsVUFBVSxFQUNSLGlZQUFpWTtDQUNwWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFQUF9EUklWRV9JQ09OUyA9IHtcbiAgZmlsZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNMjQwLTgwcS0zMyAwLTU2LjUtMjMuNVQxNjAtMTYwdi02NDBxMC0zMyAyMy41LTU2LjVUMjQwLTg4MGgzMjBsMjQwIDI0MHY0ODBxMCAzMy0yMy41IDU2LjVUNzIwLTgwSDI0MFptMjgwLTUyMHYtMjAwSDI0MHY2NDBoNDgwdi00NDBINTIwWk0yNDAtODAwdjIwMC0yMDAgNjQwLTY0MFpcIi8+PC9zdmc+JyxcbiAgZm9sZGVyOlxuICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIiNlOGVhZWRcIj48cGF0aCBkPVwiTTE2MC0xNjBxLTMzIDAtNTYuNS0yMy41VDgwLTI0MHYtNDgwcTAtMzMgMjMuNS01Ni41VDE2MC04MDBoMjQwbDgwIDgwaDMyMHEzMyAwIDU2LjUgMjMuNVQ4ODAtNjQwSDQ0N2wtODAtODBIMTYwdjQ4MGw5Ni0zMjBoNjg0TDgzNy0yMTdxLTggMjYtMjkuNSA0MS41VDc2MC0xNjBIMTYwWm04NC04MGg1MTZsNzItMjQwSDMxNmwtNzIgMjQwWm0wIDAgNzItMjQwLTcyIDI0MFptLTg0LTQwMHYtODAgODBaXCIvPjwvc3ZnPicsXG4gIGZvbGRlcng6XG4gICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNMTYwLTE2MHEtMzMgMC01Ni41LTIzLjVUODAtMjQwdi00ODBxMC0zMyAyMy41LTU2LjVUMTYwLTgwMGgyNDBsODAgODBoMzIwcTMzIDAgNTYuNSAyMy41VDg4MC02NDB2NDAwcTAgMzMtMjMuNSA1Ni41VDgwMC0xNjBIMTYwWm0wLTgwaDY0MHYtNDAwSDQ0N2wtODAtODBIMTYwdjQ4MFptMCAwdi00ODAgNDgwWlwiLz48L3N2Zz4nLFxuICBmYXZvcml0ZTpcbiAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCIjZThlYWVkXCI+PHBhdGggZD1cIm0zNTQtMjg3IDEyNi03NiAxMjYgNzctMzMtMTQ0IDExMS05Ni0xNDYtMTMtNTgtMTM2LTU4IDEzNS0xNDYgMTMgMTExIDk3LTMzIDE0M1pNMjMzLTEyMGw2NS0yODFMODAtNTkwbDI4OC0yNSAxMTItMjY1IDExMiAyNjUgMjg4IDI1LTIxOCAxODkgNjUgMjgxLTI0Ny0xNDktMjQ3IDE0OVptMjQ3LTM1MFpcIi8+PC9zdmc+JyxcbiAgc2V0dGluZ3M6XG4gICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjIwcHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjIwcHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNNDQ3LTI4OGg2NGwxNC01Ni4zMXExNC00LjY5IDI2LjUtMTEuMTlRNTY0LTM2MiA1NzUtMzcybDU1IDE2IDMyLTU1LTQxLTM4LjUycTItMTMuNDggMy0yOS45OHQtMi0yOS41bDQwLTM4LTMyLTU1LTU0IDE1cS0xMS0xMC0yNC0xN3QtMjctMTJsLTEzLTU2aC02NWwtMTIgNTZxLTE0IDUtMjcgMTJ0LTI0IDE3bC01NC0xNi0zMiA1NiA0MSAzOHEtMyAxNC0zIDI5LjV0MyAyOS41bC00MSAzOSAzMiA1NiA1NS0xN3ExMSA5IDIzLjUgMTZ0MjYuNSAxMmwxMiA1NlptMzIuNzktMTIwUTQ1MC00MDggNDI5LTQyOS4yMXQtMjEtNTFRNDA4LTUxMCA0MjkuMjEtNTMxdDUxLTIxUTUxMC01NTIgNTMxLTUzMC43OXQyMSA1MVE1NTItNDUwIDUzMC43OS00Mjl0LTUxIDIxWk0yMTYtMTQ0cS0yOS43IDAtNTAuODUtMjEuMTVRMTQ0LTE4Ni4zIDE0NC0yMTZ2LTUyOHEwLTI5LjcgMjEuMTUtNTAuODVRMTg2LjMtODE2IDIxNi04MTZoNTI4cTI5LjcgMCA1MC44NSAyMS4xNVE4MTYtNzczLjcgODE2LTc0NHY1MjhxMCAyOS43LTIxLjE1IDUwLjg1UTc3My43LTE0NCA3NDQtMTQ0SDIxNlptMC03Mmg1Mjh2LTUyOEgyMTZ2NTI4Wm0wLTUyOHY1MjgtNTI4WlwiLz48L3N2Zz4nLFxuICBzb3J0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIiM1ZjYzNjhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIj48cGF0aCBkPVwiTTMyMC00NDB2LTI4N0wyMTctNjI0bC01Ny01NiAyMDAtMjAwIDIwMCAyMDAtNTcgNTYtMTAzLTEwM3YyODdoLTgwWk02MDAtODAgNDAwLTI4MGw1Ny01NiAxMDMgMTAzdi0yODdoODB2Mjg3bDEwMy0xMDMgNTcgNTZMNjAwLTgwWlwiLz48L3N2Zz4nLFxuICBob21lOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIiNlOGVhZWRcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIj48cGF0aCBkPVwiTTI0MC0yMDBoMTIwdi0yNDBoMjQwdjI0MGgxMjB2LTM2MEw0ODAtNzQwIDI0MC01NjB2MzYwWm0tODAgODB2LTQ4MGwzMjAtMjQwIDMyMCAyNDB2NDgwSDUyMHYtMjQwaC04MHYyNDBIMTYwWm0zMjAtMzUwWlwiLz48L3N2Zz4nLFxuICB0b2dnbGVMZWZ0OlxuICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyMHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyMHB4XCIgZmlsbD1cIiNlOGVhZWRcIj48cGF0aCBkPVwiTTIxMS0xNDRxLTI3LjY0IDAtNDcuMzItMTkuNjhUMTQ0LTIxMXYtNTM4cTAtMjcuNjQgMTkuNjgtNDcuMzJUMjExLTgxNmg1MzhxMjcuNjQgMCA0Ny4zMiAxOS42OFQ4MTYtNzQ5djUzOHEwIDI3LjY0LTE5LjY4IDQ3LjMyVDc0OS0xNDRIMjExWm0xMjUtNzJ2LTUyOEgyMTZ2NTI4aDEyMFptNzIgMGgzMzZ2LTUyOEg0MDh2NTI4Wm0tNzIgMEgyMTZoMTIwWlwiLz48L3N2Zz4nLFxuICB0b2dnbGVSaWdodDpcbiAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjBweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjBweFwiIGZpbGw9XCIjZThlYWVkXCI+PHBhdGggZD1cIk0yMTEtMTQ0cS0yNy42NCAwLTQ3LjMyLTE5LjY4VDE0NC0yMTF2LTUzOHEwLTI3LjY0IDE5LjY4LTQ3LjMyVDIxMS04MTZoNTM4cTI3LjY0IDAgNDcuMzIgMTkuNjhUODE2LTc0OXY1MzhxMCAyNy42NC0xOS42OCA0Ny4zMlQ3NDktMTQ0SDIxMVptNDEzLTcyaDEyMHYtNTI4SDYyNHY1MjhabS03MiAwdi01MjhIMjE2djUyOGgzMzZabTcyIDBoMTIwLTEyMFpcIi8+PC9zdmc+JyxcblxuICBjbGlwYm9hcmQ6XG4gICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNNjIwLTE2MyA0NTAtMzMzbDU2LTU2IDExNCAxMTQgMjI2LTIyNiA1NiA1Ni0yODIgMjgyWm0yMjAtMzk3aC04MHYtMjAwaC04MHYxMjBIMjgwdi0xMjBoLTgwdjU2MGgyNDB2ODBIMjAwcS0zMyAwLTU2LjUtMjMuNVQxMjAtMjAwdi01NjBxMC0zMyAyMy41LTU2LjVUMjAwLTg0MGgxNjdxMTEtMzUgNDMtNTcuNXQ3MC0yMi41cTQwIDAgNzEuNSAyMi41VDU5NC04NDBoMTY2cTMzIDAgNTYuNSAyMy41VDg0MC03NjB2MjAwWk00ODAtNzYwcTE3IDAgMjguNS0xMS41VDUyMC04MDBxMC0xNy0xMS41LTI4LjVUNDgwLTg0MHEtMTcgMC0yOC41IDExLjVUNDQwLTgwMHEwIDE3IDExLjUgMjguNVQ0ODAtNzYwWlwiLz48L3N2Zz4nLFxuICBhZGRDaXJjbGU6XG4gICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjIwcHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjIwcHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNNDQ0LTI4OGg3MnYtMTU2aDE1NnYtNzJINTE2di0xNTZoLTcydjE1NkgyODh2NzJoMTU2djE1NlptMzYuMjggMTkyUTQwMS05NiAzMzEtMTI2dC0xMjIuNS04Mi41UTE1Ni0yNjEgMTI2LTMzMC45NnQtMzAtMTQ5LjVROTYtNTYwIDEyNi02MjkuNXEzMC02OS41IDgyLjUtMTIyVDMzMC45Ni04MzRxNjkuOTYtMzAgMTQ5LjUtMzB0MTQ5LjA0IDMwcTY5LjUgMzAgMTIyIDgyLjVUODM0LTYyOS4yOHEzMCA2OS43MyAzMCAxNDlRODY0LTQwMSA4MzQtMzMxdC04Mi41IDEyMi41UTY5OS0xNTYgNjI5LjI4LTEyNnEtNjkuNzMgMzAtMTQ5IDMwWm0tLjI4LTcycTEzMCAwIDIyMS05MXQ5MS0yMjFxMC0xMzAtOTEtMjIxdC0yMjEtOTFxLTEzMCAwLTIyMSA5MXQtOTEgMjIxcTAgMTMwIDkxIDIyMXQyMjEgOTFabTAtMzEyWlwiLz48L3N2Zz4nLFxuICBjcmVhdGVGb2xkZXI6XG4gICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjIwcHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjIwcHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNNTc2LTMyNGg3MnYtNzJoNzJ2LTcyaC03MnYtNzJoLTcydjcyaC03MnY3Mmg3MnY3MlpNMTY4LTE5MnEtMjkgMC01MC41LTIxLjVUOTYtMjY0di00MzJxMC0yOS43IDIxLjUtNTAuODVRMTM5LTc2OCAxNjgtNzY4aDIxNmw5NiA5NmgzMTJxMjkuNyAwIDUwLjg1IDIxLjE1UTg2NC02MjkuNyA4NjQtNjAwdjMzNnEwIDI5LTIxLjE1IDUwLjVUNzkyLTE5MkgxNjhabTAtNzJoNjI0di0zMzZINDUwbC05Ni05NkgxNjh2NDMyWm0wIDB2LTQzMiA0MzJaXCIvPjwvc3ZnPicsXG4gIGNyZWF0ZUZpbGU6XG4gICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjIwcHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjIwcHhcIiBmaWxsPVwiI2U4ZWFlZFwiPjxwYXRoIGQ9XCJNNDQ0LTI0MGg3MnYtMTA4aDEwOHYtNzJINTE2di0xMDhoLTcydjEwOEgzMzZ2NzJoMTA4djEwOFpNMjYzLjcyLTk2UTIzNC05NiAyMTMtMTE3LjE1VDE5Mi0xNjh2LTYyNHEwLTI5LjcgMjEuMTUtNTAuODVRMjM0LjMtODY0IDI2NC04NjRoMzEybDE5MiAxOTJ2NTA0cTAgMjkuNy0yMS4xNiA1MC44NVE3MjUuNjgtOTYgNjk1Ljk2LTk2SDI2My43MlpNNTI4LTYyNHYtMTY4SDI2NHY2MjRoNDMydi00NTZINTI4Wk0yNjQtNzkydjE4OS0xODkgNjI0LTYyNFpcIi8+PC9zdmc+J1xufTtcbiJdfQ==