@gravitee/ui-particles-angular 4.13.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/gravitee-ui-particles-angular.js → esm2020/gravitee-ui-particles-angular.mjs} +0 -0
- package/{esm2015/lib/gio-avatar/gio-avatar.component.js → esm2020/lib/gio-avatar/gio-avatar.component.mjs} +5 -9
- package/{esm2015/lib/gio-avatar/gio-avatar.module.js → esm2020/lib/gio-avatar/gio-avatar.module.mjs} +5 -6
- package/{esm2015/lib/gio-avatar/index.js → esm2020/lib/gio-avatar/index.mjs} +0 -0
- package/esm2020/lib/gio-banner/gio-banner.component.mjs +101 -0
- package/{esm2015/lib/gio-banner/gio-banner.module.js → esm2020/lib/gio-banner/gio-banner.module.mjs} +5 -12
- package/{esm2015/lib/gio-breadcrumb/gio-breadcrumb-item.directive.js → esm2020/lib/gio-breadcrumb/gio-breadcrumb-item.directive.mjs} +3 -3
- package/esm2020/lib/gio-breadcrumb/gio-breadcrumb.component.mjs +32 -0
- package/{esm2015/lib/gio-breadcrumb/gio-breadcrumb.module.js → esm2020/lib/gio-breadcrumb/gio-breadcrumb.module.mjs} +5 -6
- package/{esm2015/lib/gio-breadcrumb/index.js → esm2020/lib/gio-breadcrumb/index.mjs} +0 -0
- package/esm2020/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.component.mjs +55 -0
- package/esm2020/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.harness.mjs +40 -0
- package/{esm2015/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.module.js → esm2020/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.module.mjs} +5 -6
- package/esm2020/lib/gio-confirm-dialog/gio-confirm-dialog.component.mjs +40 -0
- package/esm2020/lib/gio-confirm-dialog/gio-confirm-dialog.harness.mjs +34 -0
- package/{esm2015/lib/gio-confirm-dialog/gio-confirm-dialog.module.js → esm2020/lib/gio-confirm-dialog/gio-confirm-dialog.module.mjs} +5 -6
- package/esm2020/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +29 -0
- package/esm2020/lib/gio-form-file-picker/gio-form-file-picker-empty/gio-form-file-picker-empty.component.mjs +27 -0
- package/esm2020/lib/gio-form-file-picker/gio-form-file-picker-label/gio-form-file-picker-label.component.mjs +26 -0
- package/esm2020/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +95 -0
- package/esm2020/lib/gio-form-file-picker/gio-form-file-picker.component.mjs +167 -0
- package/{esm2015/lib/gio-form-file-picker/gio-form-file-picker.model.js → esm2020/lib/gio-form-file-picker/gio-form-file-picker.model.mjs} +0 -0
- package/{esm2015/lib/gio-form-file-picker/gio-form-file-picker.module.js → esm2020/lib/gio-form-file-picker/gio-form-file-picker.module.mjs} +4 -4
- package/{esm2015/lib/gio-form-file-picker/index.js → esm2020/lib/gio-form-file-picker/index.mjs} +0 -0
- package/esm2020/lib/gio-form-headers/gio-form-headers.component.mjs +233 -0
- package/esm2020/lib/gio-form-headers/gio-form-headers.harness.mjs +65 -0
- package/{esm2015/lib/gio-form-headers/gio-form-headers.module.js → esm2020/lib/gio-form-headers/gio-form-headers.module.mjs} +5 -6
- package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +243 -0
- package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +67 -0
- package/{esm2015/lib/gio-form-tags-input/gio-form-tags-input.module.js → esm2020/lib/gio-form-tags-input/gio-form-tags-input.module.mjs} +5 -6
- package/{esm2015/lib/gio-icons/gio-icons.module.js → esm2020/lib/gio-icons/gio-icons.module.mjs} +5 -6
- package/esm2020/lib/gio-menu/gio-menu-footer/gio-menu-footer.component.mjs +26 -0
- package/esm2020/lib/gio-menu/gio-menu-header/gio-menu-header.component.mjs +26 -0
- package/{esm2015/lib/gio-menu/gio-menu-item/gio-menu-item.component.js → esm2020/lib/gio-menu/gio-menu-item/gio-menu-item.component.mjs} +5 -9
- package/esm2020/lib/gio-menu/gio-menu-list/gio-menu-list.component.mjs +26 -0
- package/esm2020/lib/gio-menu/gio-menu-selector/gio-menu-selector.component.mjs +53 -0
- package/esm2020/lib/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +41 -0
- package/esm2020/lib/gio-menu/gio-menu.component.mjs +50 -0
- package/{esm2015/lib/gio-menu/gio-menu.module.js → esm2020/lib/gio-menu/gio-menu.module.mjs} +4 -4
- package/{esm2015/lib/gio-menu/gio-menu.service.js → esm2020/lib/gio-menu/gio-menu.service.mjs} +3 -3
- package/{esm2015/lib/gio-menu/index.js → esm2020/lib/gio-menu/index.mjs} +0 -0
- package/esm2020/lib/gio-save-bar/gio-save-bar.component.mjs +129 -0
- package/esm2020/lib/gio-save-bar/gio-save-bar.harness.mjs +49 -0
- package/{esm2015/lib/gio-save-bar/gio-save-bar.module.js → esm2020/lib/gio-save-bar/gio-save-bar.module.mjs} +5 -6
- package/esm2020/lib/gio-submenu/gio-submenu-group/gio-submenu-group.component.mjs +31 -0
- package/esm2020/lib/gio-submenu/gio-submenu-item/gio-submenu-item.component.mjs +42 -0
- package/{esm2015/lib/gio-submenu/gio-submenu.component.js → esm2020/lib/gio-submenu/gio-submenu.component.mjs} +9 -13
- package/{esm2015/lib/gio-submenu/gio-submenu.module.js → esm2020/lib/gio-submenu/gio-submenu.module.mjs} +4 -4
- package/{esm2015/lib/gio-submenu/index.js → esm2020/lib/gio-submenu/index.mjs} +0 -0
- package/esm2020/lib/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.mjs +35 -0
- package/esm2020/lib/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.mjs +35 -0
- package/{esm2015/lib/gio-top-bar/gio-top-bar-link/gio-top-bar-link.module.js → esm2020/lib/gio-top-bar/gio-top-bar-link/gio-top-bar-link.module.mjs} +4 -4
- package/esm2020/lib/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.component.mjs +26 -0
- package/{esm2015/lib/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.module.js → esm2020/lib/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.module.mjs} +4 -4
- package/esm2020/lib/gio-top-bar/gio-top-bar.component.mjs +34 -0
- package/{esm2015/lib/gio-top-bar/gio-top-bar.module.js → esm2020/lib/gio-top-bar/gio-top-bar.module.mjs} +4 -4
- package/{esm2015/lib/gio-top-bar/index.js → esm2020/lib/gio-top-bar/index.mjs} +0 -0
- package/{esm2015/lib/public-api.js → esm2020/lib/public-api.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{gravitee-ui-particles-angular.js → gravitee-ui-particles-angular.mjs} +223 -413
- package/fesm2015/gravitee-ui-particles-angular.mjs.map +1 -0
- package/fesm2020/gravitee-ui-particles-angular.mjs +2754 -0
- package/fesm2020/gravitee-ui-particles-angular.mjs.map +1 -0
- package/package.json +25 -12
- package/bundles/gravitee-ui-particles-angular.umd.js +0 -3727
- package/bundles/gravitee-ui-particles-angular.umd.js.map +0 -1
- package/esm2015/lib/gio-banner/gio-banner.component.js +0 -121
- package/esm2015/lib/gio-breadcrumb/gio-breadcrumb.component.js +0 -36
- package/esm2015/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.component.js +0 -60
- package/esm2015/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.harness.js +0 -45
- package/esm2015/lib/gio-confirm-dialog/gio-confirm-dialog.component.js +0 -45
- package/esm2015/lib/gio-confirm-dialog/gio-confirm-dialog.harness.js +0 -39
- package/esm2015/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.js +0 -34
- package/esm2015/lib/gio-form-file-picker/gio-form-file-picker-empty/gio-form-file-picker-empty.component.js +0 -31
- package/esm2015/lib/gio-form-file-picker/gio-form-file-picker-label/gio-form-file-picker-label.component.js +0 -31
- package/esm2015/lib/gio-form-file-picker/gio-form-file-picker.component.harness.js +0 -114
- package/esm2015/lib/gio-form-file-picker/gio-form-file-picker.component.js +0 -177
- package/esm2015/lib/gio-form-headers/gio-form-headers.component.js +0 -237
- package/esm2015/lib/gio-form-headers/gio-form-headers.harness.js +0 -76
- package/esm2015/lib/gio-form-tags-input/gio-form-tags-input.component.js +0 -255
- package/esm2015/lib/gio-form-tags-input/gio-form-tags-input.harness.js +0 -78
- package/esm2015/lib/gio-menu/gio-menu-footer/gio-menu-footer.component.js +0 -30
- package/esm2015/lib/gio-menu/gio-menu-header/gio-menu-header.component.js +0 -30
- package/esm2015/lib/gio-menu/gio-menu-list/gio-menu-list.component.js +0 -30
- package/esm2015/lib/gio-menu/gio-menu-selector/gio-menu-selector.component.js +0 -57
- package/esm2015/lib/gio-menu/gio-menu-selector/gio-menu-selector.harness.js +0 -48
- package/esm2015/lib/gio-menu/gio-menu.component.js +0 -55
- package/esm2015/lib/gio-save-bar/gio-save-bar.component.js +0 -135
- package/esm2015/lib/gio-save-bar/gio-save-bar.harness.js +0 -60
- package/esm2015/lib/gio-submenu/gio-submenu-group/gio-submenu-group.component.js +0 -35
- package/esm2015/lib/gio-submenu/gio-submenu-item/gio-submenu-item.component.js +0 -47
- package/esm2015/lib/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.js +0 -39
- package/esm2015/lib/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.js +0 -39
- package/esm2015/lib/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.component.js +0 -30
- package/esm2015/lib/gio-top-bar/gio-top-bar.component.js +0 -38
- package/fesm2015/gravitee-ui-particles-angular.js.map +0 -1
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
export class GioFormFilePickerLabelComponent {
|
|
19
|
-
}
|
|
20
|
-
GioFormFilePickerLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: GioFormFilePickerLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
-
GioFormFilePickerLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: GioFormFilePickerLabelComponent, selector: "gio-form-file-picker-label", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"mat-caption\"><ng-content></ng-content></div>\n", styles: [":host{padding-left:8px;margin-bottom:-4px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: GioFormFilePickerLabelComponent, decorators: [{
|
|
23
|
-
type: Component,
|
|
24
|
-
args: [{
|
|
25
|
-
selector: 'gio-form-file-picker-label',
|
|
26
|
-
templateUrl: './gio-form-file-picker-label.component.html',
|
|
27
|
-
styleUrls: ['./gio-form-file-picker-label.component.scss'],
|
|
28
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
|
-
}]
|
|
30
|
-
}] });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tZmlsZS1waWNrZXItbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1maWxlLXBpY2tlci9naW8tZm9ybS1maWxlLXBpY2tlci1sYWJlbC9naW8tZm9ybS1maWxlLXBpY2tlci1sYWJlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLWxhYmVsL2dpby1mb3JtLWZpbGUtcGlja2VyLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFRbkUsTUFBTSxPQUFPLCtCQUErQjs7NkhBQS9CLCtCQUErQjtpSEFBL0IsK0JBQStCLGtFQ3ZCNUMsNnRCQWtCQTs0RkRLYSwrQkFBK0I7a0JBTjNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLDZDQUE2QztvQkFDMUQsU0FBUyxFQUFFLENBQUMsNkNBQTZDLENBQUM7b0JBQzFELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLWZpbGUtcGlja2VyLWxhYmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLWZpbGUtcGlja2VyLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2lvLWZvcm0tZmlsZS1waWNrZXItbGFiZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1GaWxlUGlja2VyTGFiZWxDb21wb25lbnQge31cbiIsIjwhLS1cblxuICAgIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICAgIFxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIFxuICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi0tPlxuPGRpdiBjbGFzcz1cIm1hdC1jYXB0aW9uXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PlxuIl19
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
|
|
18
|
-
export class GioFormFilePickerInputHarness extends ComponentHarness {
|
|
19
|
-
constructor() {
|
|
20
|
-
super(...arguments);
|
|
21
|
-
this._mainDiv = this.locatorFor('.file-picker__add-button');
|
|
22
|
-
this._hasErrorClass = this.locatorForOptional('[class="file-picker__add-button error"]');
|
|
23
|
-
this._inputFile = this.locatorFor('input[type="file"]');
|
|
24
|
-
this._getDisabledElement = this.locatorForOptional('.disabled');
|
|
25
|
-
}
|
|
26
|
-
static with(options) {
|
|
27
|
-
return new HarnessPredicate(GioFormFilePickerInputHarness, options).addOption('formControlName', options.formControlName, (harness, text) => HarnessPredicate.stringMatches(harness.getFormControlName(), text));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Hack force onload on Image Object
|
|
31
|
-
* GioFormFilePickerComponent use a Image Object to check if the file is an image.
|
|
32
|
-
* This method allow to force onload event on the Image Object.
|
|
33
|
-
* @param excludeSrc call onerror instead of onload for this src
|
|
34
|
-
*/
|
|
35
|
-
static forceImageOnload(excludeSrc = []) {
|
|
36
|
-
Object.defineProperties(Image.prototype, {
|
|
37
|
-
src: {
|
|
38
|
-
get: function () {
|
|
39
|
-
return this._src;
|
|
40
|
-
},
|
|
41
|
-
set: function (src) {
|
|
42
|
-
this._src = src;
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
onload: {
|
|
46
|
-
get: function () {
|
|
47
|
-
return this._onload;
|
|
48
|
-
},
|
|
49
|
-
set: function (fn) {
|
|
50
|
-
this._onload = fn;
|
|
51
|
-
excludeSrc.includes(this._src) ? this.onerror() : this.onload();
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
getFormControlName() {
|
|
57
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
const filePickerInputHarness = yield this.host();
|
|
59
|
-
return filePickerInputHarness.getAttribute('formControlName');
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
hasErrorClass() {
|
|
63
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
return !!(yield this._hasErrorClass());
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
clickInside() {
|
|
68
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
yield (yield this._mainDiv()).click();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
getInputFileAccept() {
|
|
73
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
return yield (yield this._inputFile()).getAttribute('accept');
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
getPreviews() {
|
|
78
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
const previewImages = yield this.locatorForAll('.file-picker__preview__image')();
|
|
80
|
-
const previewFiles = yield this.locatorForAll('.file-picker__preview__file')();
|
|
81
|
-
return Promise.all([
|
|
82
|
-
...previewImages.map(previewImage => previewImage.getAttribute('style')),
|
|
83
|
-
...previewFiles.map(previewFile => previewFile.text()),
|
|
84
|
-
]);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
isAddButtonPresent() {
|
|
88
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
-
return (yield this.locatorForOptional('gio-form-file-picker-add-button')()) !== null;
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
isDisabled() {
|
|
93
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
-
return !!(yield this._getDisabledElement());
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
deleteFile(fileIndex = 0) {
|
|
98
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
-
const deleteButtons = yield this.locatorForAll('.file-picker__preview__delete')();
|
|
100
|
-
return deleteButtons[fileIndex].click();
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
dropFiles(files) {
|
|
104
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
-
const filePickerDropZone = yield this.locatorFor('.file-picker')();
|
|
106
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
-
yield filePickerDropZone.dispatchEvent('drop', { dataTransfer: { files } });
|
|
108
|
-
// Wait event is dispatched
|
|
109
|
-
yield new Promise(resolve => setTimeout(resolve, 50));
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
GioFormFilePickerInputHarness.hostSelector = 'gio-form-file-picker';
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tZmlsZS1waWNrZXIuY29tcG9uZW50Lmhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLmNvbXBvbmVudC5oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU85RixNQUFNLE9BQU8sNkJBQThCLFNBQVEsZ0JBQWdCO0lBQW5FOztRQXdDWSxhQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDcEYsZUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRCx3QkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFvRHZFLENBQUM7SUE1RlEsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUF3QztRQUN6RCxPQUFPLElBQUksZ0JBQWdCLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUMzRSxpQkFBaUIsRUFDakIsT0FBTyxDQUFDLGVBQWUsRUFDdkIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQ3RGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBdUIsRUFBRTtRQUN0RCxNQUFNLENBQUMs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QVksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFTLENBQUMsQ0FBQztZQUVuRiwyQkFBMkI7WUFDM0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO0tBQUE7O0FBN0ZhLDBDQUFZLEdBQUcsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQmFzZUhhcm5lc3NGaWx0ZXJzLCBDb21wb25lbnRIYXJuZXNzLCBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuXG5pbnRlcmZhY2UgR2lvRm9ybUZpbGVQaWNrZXJIYXJuZXNzRmlsdGVycyBleHRlbmRzIEJhc2VIYXJuZXNzRmlsdGVycyB7XG4gIC8qKiBGaWx0ZXJzIGJhc2VkIG9uIHRoZSBmb3JtQ29udHJvbE5hbWUgICovXG4gIGZvcm1Db250cm9sTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1GaWxlUGlja2VySW5wdXRIYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1mb3JtLWZpbGUtcGlja2VyJztcblxuICBwdWJsaWMgc3RhdGljIHdpdGgob3B0aW9uczogR2lvRm9ybUZpbGVQaWNrZXJIYXJuZXNzRmlsdGVycyk6IEhhcm5lc3NQcmVkaWNhdGU8R2lvRm9ybUZpbGVQaWNrZXJJbnB1dEhhcm5lc3M+IHtcbiAgICByZXR1cm4gbmV3IEhhcm5lc3NQcmVkaWNhdGUoR2lvRm9ybUZpbGVQaWNrZXJJbnB1dEhhcm5lc3MsIG9wdGlvbnMpLmFkZE9wdGlvbihcbiAgICAgICdmb3JtQ29udHJvbE5hbWUnLFxuICAgICAgb3B0aW9ucy5mb3JtQ29udHJvbE5hbWUsXG4gICAgICAoaGFybmVzcywgdGV4dCkgPT4gSGFybmVzc1ByZWRpY2F0ZS5zdHJpbmdNYXRjaGVzKGhhcm5lc3MuZ2V0Rm9ybUNvbnRyb2xOYW1lKCksIHRleHQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFjayBmb3JjZSBvbmxvYWQgb24gSW1hZ2UgT2JqZWN0XG4gICAqIEdpb0Zvcm1GaWxlUGlja2VyQ29tcG9uZW50IHVzZSBhIEltYWdlIE9iamVjdCB0byBjaGVjayBpZiB0aGUgZmlsZSBpcyBhbiBpbWFnZS5cbiAgICogVGhpcyBtZXRob2QgYWxsb3cgdG8gZm9yY2Ugb25sb2FkIGV2ZW50IG9uIHRoZSBJbWFnZSBPYmplY3QuXG4gICAqIEBwYXJhbSBleGNsdWRlU3JjIGNhbGwgb25lcnJvciBpbnN0ZWFkIG9mIG9ubG9hZCBmb3IgdGhpcyBzcmNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yY2VJbWFnZU9ubG9hZChleGNsdWRlU3JjOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW1hZ2UucHJvdG90eXBlLCB7XG4gICAgICBzcmM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NyYztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3JjKSB7XG4gICAgICAgICAgdGhpcy5fc3JjID0gc3JjO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9ubG9hZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25sb2FkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIHRoaXMuX29ubG9hZCA9IGZuO1xuXG4gICAgICAgICAgZXhjbHVkZVNyYy5pbmNsdWRlcyh0aGlzLl9zcmMpID8gdGhpcy5vbmVycm9yKCkgOiB0aGlzLm9ubG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbWFpbkRpdiA9IHRoaXMubG9jYXRvckZvcignLmZpbGUtcGlja2VyX19hZGQtYnV0dG9uJyk7XG4gIHByb3RlY3RlZCBfaGFzRXJyb3JDbGFzcyA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdbY2xhc3M9XCJmaWxlLXBpY2tlcl9fYWRkLWJ1dHRvbiBlcnJvclwiXScpO1xuICBwcm90ZWN0ZWQgX2lucHV0RmlsZSA9IHRoaXMubG9jYXRvckZvcignaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgcHJvdGVjdGVkIF9nZXREaXNhYmxlZEVsZW1lbnQgPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbCgnLmRpc2FibGVkJyk7XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRGb3JtQ29udHJvbE5hbWUoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBpY2tlcklucHV0SGFybmVzcyA9IGF3YWl0IHRoaXMuaG9zdCgpO1xuICAgIHJldHVybiBmaWxlUGlja2VySW5wdXRIYXJuZXNzLmdldEF0dHJpYnV0ZSgnZm9ybUNvbnRyb2xOYW1lJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFzRXJyb3JDbGFzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5faGFzRXJyb3JDbGFzcygpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjbGlja0luc2lkZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5fbWFpbkRpdigpKS5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldElucHV0RmlsZUFjY2VwdCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuX2lucHV0RmlsZSgpKS5nZXRBdHRyaWJ1dGUoJ2FjY2VwdCcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFByZXZpZXdzKCk6IFByb21pc2U8KHN0cmluZyB8IG51bGwpW10+IHtcbiAgICBjb25zdCBwcmV2aWV3SW1hZ2VzID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yQWxsKCcuZmlsZS1waWNrZXJfX3ByZXZpZXdfX2ltYWdlJykoKTtcbiAgICBjb25zdCBwcmV2aWV3RmlsZXMgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JBbGwoJy5maWxlLXBpY2tlcl9fcHJldmlld19fZmlsZScpKCk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgLi4ucHJldmlld0ltYWdlcy5tYXAocHJldmlld0ltYWdlID0+IHByZXZpZXdJbWFnZS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykpLFxuICAgICAgLi4ucHJldmlld0ZpbGVzLm1hcChwcmV2aWV3RmlsZSA9PiBwcmV2aWV3RmlsZS50ZXh0KCkpLFxuICAgIF0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzQWRkQnV0dG9uUHJlc2VudCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdnaW8tZm9ybS1maWxlLXBpY2tlci1hZGQtYnV0dG9uJykoKSkgIT09IG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNEaXNhYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5fZ2V0RGlzYWJsZWRFbGVtZW50KCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUZpbGUoZmlsZUluZGV4ID0gMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRlbGV0ZUJ1dHRvbnMgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JBbGwoJy5maWxlLXBpY2tlcl9fcHJldmlld19fZGVsZXRlJykoKTtcblxuICAgIHJldHVybiBkZWxldGVCdXR0b25zW2ZpbGVJbmRleF0uY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkcm9wRmlsZXMoZmlsZXM6IEZpbGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQaWNrZXJEcm9wWm9uZSA9IGF3YWl0IHRoaXMubG9jYXRvckZvcignLmZpbGUtcGlja2VyJykoKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgYXdhaXQgZmlsZVBpY2tlckRyb3Bab25lLmRpc3BhdGNoRXZlbnQoJ2Ryb3AnLCB7IGRhdGFUcmFuc2ZlcjogeyBmaWxlcyB9IH0gYXMgYW55KTtcblxuICAgIC8vIFdhaXQgZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { ChangeDetectionStrategy, Component, Input, Optional, Self } from '@angular/core';
|
|
18
|
-
import { isArray, isNil, remove } from 'lodash';
|
|
19
|
-
import { ReadMode } from 'ngx-file-helpers';
|
|
20
|
-
import { tap } from 'rxjs/operators';
|
|
21
|
-
import { NewFile } from './gio-form-file-picker.model';
|
|
22
|
-
import * as i0 from "@angular/core";
|
|
23
|
-
import * as i1 from "@angular/forms";
|
|
24
|
-
import * as i2 from "./gio-form-file-picker-add-button/gio-form-file-picker-add-button.component";
|
|
25
|
-
import * as i3 from "@angular/material/icon";
|
|
26
|
-
import * as i4 from "./gio-form-file-picker-empty/gio-form-file-picker-empty.component";
|
|
27
|
-
import * as i5 from "@angular/common";
|
|
28
|
-
import * as i6 from "ngx-file-helpers";
|
|
29
|
-
export class GioFormFilePickerComponent {
|
|
30
|
-
constructor(changeDetectorRef, ngControl) {
|
|
31
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
32
|
-
this.ngControl = ngControl;
|
|
33
|
-
this.multiple = false;
|
|
34
|
-
this.accept = '*';
|
|
35
|
-
this.fileValues = [];
|
|
36
|
-
this.readMode = ReadMode.dataURL;
|
|
37
|
-
this.dragHover = false;
|
|
38
|
-
this.isDisabled = false;
|
|
39
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
40
|
-
this.onChangeCallback = () => { };
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
42
|
-
this.onTouchedCallback = () => { };
|
|
43
|
-
if (ngControl) {
|
|
44
|
-
// Setting the value accessor directly (instead of using
|
|
45
|
-
// the providers `NG_VALUE_ACCESSOR`) to avoid running into a circular import.
|
|
46
|
-
ngControl.valueAccessor = this;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
set disabled(disabled) {
|
|
50
|
-
this.setDisabledState(disabled);
|
|
51
|
-
}
|
|
52
|
-
ngOnInit() {
|
|
53
|
-
if (this.ngControl && this.ngControl.statusChanges) {
|
|
54
|
-
// As the change detection is OnPush we have to markForCheck the component after a validation change because no input/output or values have changed
|
|
55
|
-
this.ngControl.statusChanges.pipe(tap(() => this.changeDetectorRef.markForCheck())).subscribe();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
get isComplete() {
|
|
59
|
-
return (!this.multiple && this.fileValues.length === 1) || false;
|
|
60
|
-
}
|
|
61
|
-
get isValid() {
|
|
62
|
-
return !this.ngControl || !this.ngControl.touched || this.ngControl.valid;
|
|
63
|
-
}
|
|
64
|
-
// implement by ControlValueAccessor
|
|
65
|
-
writeValue(inputs) {
|
|
66
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
if (isNil(inputs) || !isArray(inputs)) {
|
|
68
|
-
this.fileValues = [];
|
|
69
|
-
return Promise.resolve();
|
|
70
|
-
}
|
|
71
|
-
this.fileValues = yield Promise.all(inputs.map((input) => __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
return ({
|
|
73
|
-
isNew: false,
|
|
74
|
-
name: input,
|
|
75
|
-
dataUrl: input,
|
|
76
|
-
isImage: yield isImgUrl(input),
|
|
77
|
-
});
|
|
78
|
-
})));
|
|
79
|
-
this.changeDetectorRef.markForCheck();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// implement by ControlValueAccessor
|
|
83
|
-
registerOnChange(fn) {
|
|
84
|
-
this.onChangeCallback = fn;
|
|
85
|
-
}
|
|
86
|
-
// implement by ControlValueAccessor
|
|
87
|
-
registerOnTouched(fn) {
|
|
88
|
-
this.onTouchedCallback = fn;
|
|
89
|
-
}
|
|
90
|
-
// implement by ControlValueAccessor
|
|
91
|
-
setDisabledState(isDisabled) {
|
|
92
|
-
this.isDisabled = isDisabled;
|
|
93
|
-
}
|
|
94
|
-
onFilePicked(event) {
|
|
95
|
-
this.handleReceivedFileEvent(event);
|
|
96
|
-
}
|
|
97
|
-
onFileDropped(event) {
|
|
98
|
-
this.handleReceivedFileEvent(event);
|
|
99
|
-
}
|
|
100
|
-
onRemoveFile(file) {
|
|
101
|
-
this.onTouchedCallback();
|
|
102
|
-
this.dragHover = false;
|
|
103
|
-
remove(this.fileValues, { name: file.name });
|
|
104
|
-
this.emitFileValue();
|
|
105
|
-
}
|
|
106
|
-
onTouched() {
|
|
107
|
-
this.onTouchedCallback();
|
|
108
|
-
this.dragHover = false;
|
|
109
|
-
}
|
|
110
|
-
onDragEnter($event) {
|
|
111
|
-
const el = $event.target;
|
|
112
|
-
if (el) {
|
|
113
|
-
this.dragHover = true;
|
|
114
|
-
this.onTouchedCallback();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
onDragOver($event) {
|
|
118
|
-
const el = $event.target;
|
|
119
|
-
if (el) {
|
|
120
|
-
this.dragHover = false;
|
|
121
|
-
this.onTouchedCallback();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
handleReceivedFileEvent(event) {
|
|
125
|
-
this.onTouchedCallback();
|
|
126
|
-
this.dragHover = false;
|
|
127
|
-
if (!this.multiple) {
|
|
128
|
-
this.fileValues = [];
|
|
129
|
-
}
|
|
130
|
-
this.fileValues.push({
|
|
131
|
-
name: event.name,
|
|
132
|
-
isNew: true,
|
|
133
|
-
dataUrl: event.content,
|
|
134
|
-
file: event.underlyingFile,
|
|
135
|
-
isImage: event.type.startsWith('image/'),
|
|
136
|
-
});
|
|
137
|
-
this.emitFileValue();
|
|
138
|
-
}
|
|
139
|
-
emitFileValue() {
|
|
140
|
-
this.onChangeCallback(this.fileValues.map(fileValue => fileValue.isNew ? new NewFile(fileValue.name, fileValue.dataUrl, fileValue.file) : fileValue.dataUrl));
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
GioFormFilePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: GioFormFilePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
144
|
-
GioFormFilePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: GioFormFilePickerComponent, selector: "gio-form-file-picker", inputs: { multiple: "multiple", accept: "accept", disabled: "disabled" }, ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<ng-content select=\"gio-form-file-picker-label\"></ng-content>\n<div\n *ngIf=\"!isDisabled; else disabledTpl\"\n class=\"file-picker\"\n ngxFileDropzone\n [readMode]=\"readMode\"\n (fileDrop)=\"onFileDropped($event)\"\n (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragOver($event)\"\n (blur)=\"dragHover = false\"\n>\n <div\n *ngIf=\"!isComplete\"\n class=\"file-picker__add-button\"\n [class.complete]=\"isComplete\"\n [class.error]=\"!isValid\"\n [class.drag-hover]=\"dragHover\"\n ngxFilePicker\n [accept]=\"accept\"\n [readMode]=\"readMode\"\n [multiple]=\"multiple\"\n (filePick)=\"onFilePicked($event)\"\n (click)=\"onTouched()\"\n >\n <div #addButton class=\"file-picker__add-button__content\"><ng-content select=\"gio-form-file-picker-add-button\"></ng-content></div>\n <gio-form-file-picker-add-button *ngIf=\"addButton.children.length === 0\"></gio-form-file-picker-add-button>\n </div>\n <div *ngFor=\"let fileValue of fileValues\" class=\"file-picker__preview\" [class.drag-hover]=\"dragHover\" [class.error]=\"!isValid\">\n <a class=\"file-picker__preview__delete\" (click)=\"onRemoveFile(fileValue)\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </a>\n\n <ng-container *ngTemplateOutlet=\"filePreview; context: { fileValue: this.fileValue }\"></ng-container>\n </div>\n</div>\n\n<ng-template #disabledTpl>\n <div class=\"file-picker disabled\">\n <ng-container *ngIf=\"fileValues.length === 0\">\n <span #previewEmpty class=\"file-picker__preview-empty disabled\">\n <ng-content select=\"gio-form-file-picker-empty\"></ng-content>\n <gio-form-file-picker-empty\n *ngIf=\"previewEmpty.children.length === 0\"\n class=\"file-picker__preview-empty__default\"\n ></gio-form-file-picker-empty>\n </span>\n </ng-container>\n\n <div class=\"file-picker__preview disabled\" *ngFor=\"let fileValue of fileValues\">\n <ng-container *ngTemplateOutlet=\"filePreview; context: { fileValue: this.fileValue }\"></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #filePreview let-fileValue=\"fileValue\">\n <div class=\"file-picker__preview__image\" *ngIf=\"fileValue.isImage\" [style.background-image]=\"'url(' + fileValue.dataUrl + ')'\"></div>\n <div class=\"file-picker__preview__file\" *ngIf=\"!fileValue.isImage\">\n <p>{{ fileValue.name }}</p>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}.file-picker{display:flex;flex:1 1 auto;flex-flow:row wrap;padding:4px}.file-picker__add-button{border:2px dashed #606274;margin:4px;border-radius:6px;cursor:pointer}.file-picker__add-button:hover,.file-picker__add-button.drag-hover{border:2px dashed #876fec;background-color:#0000000a}.file-picker__add-button.drag-hover{pointer-events:none}.file-picker__add-button.complete{padding:6px;border:none}.file-picker__add-button.error{border:2px dashed #ec4899}.file-picker__preview,.file-picker__preview-empty{position:relative;display:flex;min-width:130px;min-height:130px;flex:0 0 130px;flex-flow:column nowrap;justify-content:space-between;padding:6px;border:2px solid #606274;margin:4px;border-radius:6px;inline-size:-moz-fit-content;inline-size:fit-content}.file-picker__preview.drag-hover,.file-picker__preview-empty.drag-hover{pointer-events:none}.file-picker__preview__image,.file-picker__preview-empty__image{width:100%;height:100%;background-position-x:center;background-position-y:center;background-repeat:no-repeat;background-size:contain}.file-picker__preview__file,.file-picker__preview-empty__file{display:flex;flex:1 1 auto;flex-direction:column;align-content:center;align-items:center;justify-content:center;text-align:center;font:400 12px / 16px \"Golos UI\",Roboto,\"Helvetica Neue\",sans-serif;letter-spacing:normal}.file-picker__preview__file code,.file-picker__preview-empty__file code{font:400 12px / 16px \"Golos UI\",Roboto,\"Helvetica Neue\",sans-serif;letter-spacing:normal}.file-picker__preview.disabled,.file-picker__preview-empty.disabled{border:2px solid #e0e0e0}.file-picker__preview.error{border:2px solid #ec4899}.file-picker__preview__delete{position:absolute;z-index:200;top:0;right:0;width:24px;height:24px;background-color:#f7f8fdb3;border-radius:3px;color:#100c27;cursor:pointer}.file-picker__preview__delete:hover{color:#fe733f}.file-picker__preview-empty__default{text-align:center}\n"], components: [{ type: i2.GioFormFilePickerAddButtonComponent, selector: "gio-form-file-picker-add-button" }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.GioFormFilePickerEmptyComponent, selector: "gio-form-file-picker-empty" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.FileDropzoneDirective, selector: "[ngxFileDropzone]", outputs: ["fileDrop"], exportAs: ["ngxFileDropzone"] }, { type: i6.FilePickerDirective, selector: "[ngxFilePicker]", inputs: ["accept", "multiple"], outputs: ["filePick"], exportAs: ["ngxFilePicker"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: GioFormFilePickerComponent, decorators: [{
|
|
146
|
-
type: Component,
|
|
147
|
-
args: [{
|
|
148
|
-
selector: 'gio-form-file-picker',
|
|
149
|
-
templateUrl: './gio-form-file-picker.component.html',
|
|
150
|
-
styleUrls: ['./gio-form-file-picker.component.scss'],
|
|
151
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
152
|
-
}]
|
|
153
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
|
|
154
|
-
type: Self
|
|
155
|
-
}, {
|
|
156
|
-
type: Optional
|
|
157
|
-
}] }]; }, propDecorators: { multiple: [{
|
|
158
|
-
type: Input
|
|
159
|
-
}], accept: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], disabled: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}] } });
|
|
164
|
-
const isImgUrl = (url) => {
|
|
165
|
-
try {
|
|
166
|
-
const img = new Image();
|
|
167
|
-
img.src = url;
|
|
168
|
-
return new Promise(resolve => {
|
|
169
|
-
img.onerror = () => resolve(false);
|
|
170
|
-
img.onload = () => resolve(true);
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
return Promise.resolve(false);
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tZmlsZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1maWxlLXBpY2tlci9naW8tZm9ybS1maWxlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJILE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoRCxPQUFPLEVBQVksUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7QUFnQnZELE1BQU0sT0FBTywwQkFBMEI7SUFzQnJDLFlBQW9CLGlCQUFvQyxFQUE2QixTQUFxQjtRQUF0RixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQTZCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFwQm5HLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQU9iLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBYSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxH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LENBQUMsQ0FBQztLQUNKO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0I7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNOaWwsIHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSZWFkRmlsZSwgUmVhZE1vZGUgfSBmcm9tICduZ3gtZmlsZS1oZWxwZXJzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmV3RmlsZSB9IGZyb20gJy4vZ2lvLWZvcm0tZmlsZS1waWNrZXIubW9kZWwnO1xuXG50eXBlIEZpbGVWYWx1ZSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpc05ldzogYm9vbGVhbjtcbiAgZGF0YVVybDogc3RyaW5nO1xuICBmaWxlPzogRmlsZTtcbiAgaXNJbWFnZTogYm9vbGVhbjtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLWZpbGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLWZpbGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2lvLWZvcm0tZmlsZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1GaWxlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY2NlcHQgPSAnKic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZCk7XG4gIH1cblxuICBwdWJsaWMgZmlsZVZhbHVlczogRmlsZVZhbHVlW10gPSBbXTtcbiAgcHVibGljIHJlYWRNb2RlOiBSZWFkTW9kZSA9IFJlYWRNb2RlLmRhdGFVUkw7XG4gIHB1YmxpYyBkcmFnSG92ZXIgPSBmYWxzZTtcbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKGZpbGVzOiAoc3RyaW5nIHwgTmV3RmlsZSlbXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2sgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sPzogTmdDb250cm9sKSB7XG4gICAgaWYgKG5nQ29udHJvbCkge1xuICAgICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgYWNjZXNzb3IgZGlyZWN0bHkgKGluc3RlYWQgb2YgdXNpbmdcbiAgICAgIC8vIHRoZSBwcm92aWRlcnMgYE5HX1ZBTFVFX0FDQ0VTU09SYCkgdG8gYXZvaWQgcnVubmluZyBpbnRvIGEgY2lyY3VsYXIgaW1wb3J0LlxuICAgICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcykge1xuICAgICAgLy8gQXMgdGhlIGNoYW5nZSBkZXRlY3Rpb24gaXMgT25QdXNoIHdlIGhhdmUgdG8gbWFya0ZvckNoZWNrIHRoZSBjb21wb25lbnQgYWZ0ZXIgYSB2YWxpZGF0aW9uIGNoYW5nZSBiZWNhdXNlIG5vIGlucHV0L291dHB1dCBvciB2YWx1ZXMgaGF2ZSBjaGFuZ2VkXG4gICAgICB0aGlzLm5nQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFwKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLmZpbGVWYWx1ZXMubGVuZ3RoID09PSAxKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgcmV0dXJuICF0aGlzLm5nQ29udHJvbCB8fCAhdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCB8fCB0aGlzLm5nQ29udHJvbC52YWxpZDtcbiAgfVxuXG4gIC8vIGltcGxlbWVudCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZShpbnB1dHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChpc05pbChpbnB1dHMpIHx8ICFpc0FycmF5KGlucHV0cykpIHtcbiAgICAgIHRoaXMuZmlsZVZhbHVlcyA9IFtdO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgaW5wdXRzLm1hcChhc3luYyBpbnB1dCA9PiAoe1xuICAgICAgICBpc05ldzogZmFsc2UsXG4gICAgICAgIG5hbWU6IGlucHV0LFxuICAgICAgICBkYXRhVXJsOiBpbnB1dCxcbiAgICAgICAgaXNJbWFnZTogYXdhaXQgaXNJbWdVcmwoaW5wdXQpLFxuICAgICAgfSkpLFxuICAgICk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIGltcGxlbWVudCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHY6IHVua25vd24pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIC8vIGltcGxlbWVudCBieSBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICAvLyBpbXBsZW1lbnQgYnkgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgb25GaWxlUGlja2VkKGV2ZW50OiBSZWFkRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlUmVjZWl2ZWRGaWxlRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsZURyb3BwZWQoZXZlbnQ6IFJlYWRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVSZWNlaXZlZEZpbGVFdmVudChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25SZW1vdmVGaWxlKGZpbGU6IEZpbGVWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmRyYWdIb3ZlciA9IGZhbHNlO1xuXG4gICAgcmVtb3ZlKHRoaXMuZmlsZVZhbHVlcywgeyBuYW1lOiBmaWxlLm5hbWUgfSk7XG5cbiAgICB0aGlzLmVtaXRGaWxlVmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuZHJhZ0hvdmVyID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnRW50ZXIoJGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9ICRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChlbCkge1xuICAgICAgdGhpcy5kcmFnSG92ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkRyYWdPdmVyKCRldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIGlmIChlbCkge1xuICAgICAgdGhpcy5kcmFnSG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlY2VpdmVkRmlsZUV2ZW50KGV2ZW50OiBSZWFkRmlsZSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuZHJhZ0hvdmVyID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuZmlsZVZhbHVlcyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZVZhbHVlcy5wdXNoKHtcbiAgICAgIG5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBpc05ldzogdHJ1ZSxcbiAgICAgIGRhdGFVcmw6IGV2ZW50LmNvbnRlbnQsXG4gICAgICBmaWxlOiBldmVudC51bmRlcmx5aW5nRmlsZSxcbiAgICAgIGlzSW1hZ2U6IGV2ZW50LnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmVtaXRGaWxlVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbGVWYWx1ZSgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soXG4gICAgICB0aGlzLmZpbGVWYWx1ZXMubWFwKGZpbGVWYWx1ZSA9PlxuICAgICAgICBmaWxlVmFsdWUuaXNOZXcgPyBuZXcgTmV3RmlsZShmaWxlVmFsdWUubmFtZSwgZmlsZVZhbHVlLmRhdGFVcmwsIGZpbGVWYWx1ZS5maWxlKSA6IGZpbGVWYWx1ZS5kYXRhVXJsLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IGlzSW1nVXJsID0gKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaW1nLnNyYyA9IHVybDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlc29sdmUoZmFsc2UpO1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH1cbn07XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAgICBcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICBcbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgIFxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxuZy1jb250ZW50IHNlbGVjdD1cImdpby1mb3JtLWZpbGUtcGlja2VyLWxhYmVsXCI+PC9uZy1jb250ZW50PlxuPGRpdlxuICAqbmdJZj1cIiFpc0Rpc2FibGVkOyBlbHNlIGRpc2FibGVkVHBsXCJcbiAgY2xhc3M9XCJmaWxlLXBpY2tlclwiXG4gIG5neEZpbGVEcm9wem9uZVxuICBbcmVhZE1vZGVdPVwicmVhZE1vZGVcIlxuICAoZmlsZURyb3ApPVwib25GaWxlRHJvcHBlZCgkZXZlbnQpXCJcbiAgKGRyYWdlbnRlcik9XCJvbkRyYWdFbnRlcigkZXZlbnQpXCJcbiAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAoYmx1cik9XCJkcmFnSG92ZXIgPSBmYWxzZVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cIiFpc0NvbXBsZXRlXCJcbiAgICBjbGFzcz1cImZpbGUtcGlja2VyX19hZGQtYnV0dG9uXCJcbiAgICBbY2xhc3MuY29tcGxldGVdPVwiaXNDb21wbGV0ZVwiXG4gICAgW2NsYXNzLmVycm9yXT1cIiFpc1ZhbGlkXCJcbiAgICBbY2xhc3MuZHJhZy1ob3Zlcl09XCJkcmFnSG92ZXJcIlxuICAgIG5neEZpbGVQaWNrZXJcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgW3JlYWRNb2RlXT1cInJlYWRNb2RlXCJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgIChmaWxlUGljayk9XCJvbkZpbGVQaWNrZWQoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIm9uVG91Y2hlZCgpXCJcbiAgPlxuICAgIDxkaXYgI2FkZEJ1dHRvbiBjbGFzcz1cImZpbGUtcGlja2VyX19hZGQtYnV0dG9uX19jb250ZW50XCI+PG5nLWNvbnRlbnQgc2VsZWN0PVwiZ2lvLWZvcm0tZmlsZS1waWNrZXItYWRkLWJ1dHRvblwiPjwvbmctY29udGVudD48L2Rpdj5cbiAgICA8Z2lvLWZvcm0tZmlsZS1waWNrZXItYWRkLWJ1dHRvbiAqbmdJZj1cImFkZEJ1dHRvbi5jaGlsZHJlbi5sZW5ndGggPT09IDBcIj48L2dpby1mb3JtLWZpbGUtcGlja2VyLWFkZC1idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlVmFsdWUgb2YgZmlsZVZhbHVlc1wiIGNsYXNzPVwiZmlsZS1waWNrZXJfX3ByZXZpZXdcIiBbY2xhc3MuZHJhZy1ob3Zlcl09XCJkcmFnSG92ZXJcIiBbY2xhc3MuZXJyb3JdPVwiIWlzVmFsaWRcIj5cbiAgICA8YSBjbGFzcz1cImZpbGUtcGlja2VyX19wcmV2aWV3X19kZWxldGVcIiAoY2xpY2spPVwib25SZW1vdmVGaWxlKGZpbGVWYWx1ZSlcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZ2lvOmNhbmNlbFwiPjwvbWF0LWljb24+XG4gICAgPC9hPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVQcmV2aWV3OyBjb250ZXh0OiB7IGZpbGVWYWx1ZTogdGhpcy5maWxlVmFsdWUgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Rpc2FibGVkVHBsPlxuICA8ZGl2IGNsYXNzPVwiZmlsZS1waWNrZXIgZGlzYWJsZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsZVZhbHVlcy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxzcGFuICNwcmV2aWV3RW1wdHkgY2xhc3M9XCJmaWxlLXBpY2tlcl9fcHJldmlldy1lbXB0eSBkaXNhYmxlZFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnaW8tZm9ybS1maWxlLXBpY2tlci1lbXB0eVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPGdpby1mb3JtLWZpbGUtcGlja2VyLWVtcHR5XG4gICAgICAgICAgKm5nSWY9XCJwcmV2aWV3RW1wdHkuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICBjbGFzcz1cImZpbGUtcGlja2VyX19wcmV2aWV3LWVtcHR5X19kZWZhdWx0XCJcbiAgICAgICAgPjwvZ2lvLWZvcm0tZmlsZS1waWNrZXItZW1wdHk+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1waWNrZXJfX3ByZXZpZXcgZGlzYWJsZWRcIiAqbmdGb3I9XCJsZXQgZmlsZVZhbHVlIG9mIGZpbGVWYWx1ZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlUHJldmlldzsgY29udGV4dDogeyBmaWxlVmFsdWU6IHRoaXMuZmlsZVZhbHVlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbGVQcmV2aWV3IGxldC1maWxlVmFsdWU9XCJmaWxlVmFsdWVcIj5cbiAgPGRpdiBjbGFzcz1cImZpbGUtcGlja2VyX19wcmV2aWV3X19pbWFnZVwiICpuZ0lmPVwiZmlsZVZhbHVlLmlzSW1hZ2VcIiBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCIndXJsKCcgKyBmaWxlVmFsdWUuZGF0YVVybCArICcpJ1wiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmlsZS1waWNrZXJfX3ByZXZpZXdfX2ZpbGVcIiAqbmdJZj1cIiFmaWxlVmFsdWUuaXNJbWFnZVwiPlxuICAgIDxwPnt7IGZpbGVWYWx1ZS5uYW1lIH19PC9wPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|