@seniorsistemas/data-seniorx-core 2.3.0 → 3.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/core/constants/autocomplete.const.d.ts +4 -0
- package/core/constants/context-selector.const.d.ts +1 -0
- package/core/constants/gantt.const.d.ts +7 -0
- package/core/constants/hyperlink.const.d.ts +1 -0
- package/core/constants/inline-edit.const.d.ts +4 -0
- package/core/constants/kanban.const.d.ts +2 -0
- package/core/constants/pin-code-field.const.d.ts +5 -0
- package/core/constants/rating-scale.const.d.ts +1 -0
- package/core/constants/spotlight.const.d.ts +8 -0
- package/core/constants/star-rating.const.d.ts +4 -0
- package/core/constants/stepper.const.d.ts +1 -0
- package/core/constants/tiered-menu.const.d.ts +3 -0
- package/core/types/autocomplete.type.d.ts +9 -0
- package/core/types/chat.type.d.ts +12 -0
- package/core/types/checkbox-list.type.d.ts +12 -0
- package/core/types/gantt.type.d.ts +22 -0
- package/core/types/grid-menu.type.d.ts +13 -0
- package/core/types/hyperlink.type.d.ts +1 -0
- package/core/types/image-cropper.type.d.ts +20 -0
- package/core/types/inline-edit.type.d.ts +26 -0
- package/core/types/kanban.type.d.ts +36 -0
- package/core/types/panel.type.d.ts +16 -0
- package/core/types/profile-picture-picker.type.d.ts +9 -0
- package/core/types/rating-scale.type.d.ts +5 -0
- package/core/types/select-button.type.d.ts +1 -0
- package/core/types/spotlight.type.d.ts +34 -0
- package/core/types/star-rating.type.d.ts +1 -0
- package/core/types/stepper.type.d.ts +20 -0
- package/core/types/table-column.type.d.ts +3 -1
- package/core/types/table-options.type.d.ts +8 -2
- package/core/types/table.type.d.ts +1 -1
- package/core/types/tiered-menu.type.d.ts +16 -0
- package/core/types/tree.type.d.ts +25 -0
- package/core/types/workspace-switch.type.d.ts +6 -0
- package/core/utils/body-scroll.util.d.ts +2 -0
- package/core/utils/roving-focus.util.d.ts +2 -0
- package/core/utils/selection.util.d.ts +3 -0
- package/core/utils/tree.util.d.ts +4 -0
- package/esm2022/core/constants/autocomplete.const.mjs +5 -0
- package/esm2022/core/constants/context-selector.const.mjs +2 -0
- package/esm2022/core/constants/gantt.const.mjs +7 -0
- package/esm2022/core/constants/hyperlink.const.mjs +2 -1
- package/esm2022/core/constants/inline-edit.const.mjs +5 -0
- package/esm2022/core/constants/kanban.const.mjs +3 -0
- package/esm2022/core/constants/pin-code-field.const.mjs +6 -0
- package/esm2022/core/constants/rating-scale.const.mjs +2 -0
- package/esm2022/core/constants/spotlight.const.mjs +9 -0
- package/esm2022/core/constants/star-rating.const.mjs +5 -0
- package/esm2022/core/constants/stepper.const.mjs +2 -0
- package/esm2022/core/constants/table.const.mjs +2 -2
- package/esm2022/core/constants/tiered-menu.const.mjs +4 -0
- package/esm2022/core/types/autocomplete.type.mjs +2 -0
- package/esm2022/core/types/chat.type.mjs +2 -0
- package/esm2022/core/types/checkbox-list.type.mjs +2 -0
- package/esm2022/core/types/gantt.type.mjs +2 -0
- package/esm2022/core/types/grid-menu.type.mjs +2 -0
- package/esm2022/core/types/hyperlink.type.mjs +1 -1
- package/esm2022/core/types/image-cropper.type.mjs +2 -0
- package/esm2022/core/types/inline-edit.type.mjs +2 -0
- package/esm2022/core/types/kanban.type.mjs +2 -0
- package/esm2022/core/types/panel.type.mjs +9 -0
- package/esm2022/core/types/profile-picture-picker.type.mjs +2 -0
- package/esm2022/core/types/rating-scale.type.mjs +2 -0
- package/esm2022/core/types/select-button.type.mjs +1 -1
- package/esm2022/core/types/spotlight.type.mjs +2 -0
- package/esm2022/core/types/star-rating.type.mjs +2 -0
- package/esm2022/core/types/stepper.type.mjs +7 -0
- package/esm2022/core/types/table-column.type.mjs +1 -1
- package/esm2022/core/types/table-options.type.mjs +1 -1
- package/esm2022/core/types/table.type.mjs +1 -1
- package/esm2022/core/types/tiered-menu.type.mjs +2 -0
- package/esm2022/core/types/tree.type.mjs +2 -0
- package/esm2022/core/types/workspace-switch.type.mjs +2 -0
- package/esm2022/core/utils/body-scroll.util.mjs +19 -0
- package/esm2022/core/utils/combobox.util.mjs +3 -2
- package/esm2022/core/utils/roving-focus.util.mjs +20 -0
- package/esm2022/core/utils/selection.util.mjs +13 -0
- package/esm2022/core/utils/string.util.mjs +8 -3
- package/esm2022/core/utils/tree.util.mjs +23 -0
- package/esm2022/features/accordion/accordion.component.mjs +2 -2
- package/esm2022/features/accordion/{accordion-item.component.mjs → components/accordion-item/accordion-item.component.mjs} +7 -7
- package/esm2022/features/autocomplete/autocomplete.component.mjs +501 -0
- package/esm2022/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +30 -0
- package/esm2022/features/breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2022/features/card-list/card/card.component.mjs +63 -99
- package/esm2022/features/chat/chat.component.mjs +126 -0
- package/esm2022/features/checkbox-list/checkbox-list.component.mjs +125 -0
- package/esm2022/features/combobox/combobox.component.mjs +20 -8
- package/esm2022/features/context-selector/context-selector.component.mjs +198 -0
- package/esm2022/features/filters/filters.component.mjs +1 -1
- package/esm2022/features/gantt/components/gantt-side-table/gantt-side-table.component.mjs +17 -0
- package/esm2022/features/gantt/gantt-date.utils.mjs +97 -0
- package/esm2022/features/gantt/gantt.component.mjs +89 -0
- package/esm2022/features/gantt/gantt.engine.mjs +662 -0
- package/esm2022/features/grid-menu/grid-menu.component.mjs +104 -0
- package/esm2022/features/hyperlink/hyperlink.component.mjs +7 -4
- package/esm2022/features/icon-picker/icon-picker.component.mjs +3 -3
- package/esm2022/features/image-cropper/image-cropper.component.mjs +218 -0
- package/esm2022/features/image-cropper/services/image-cropper.service.mjs +50 -0
- package/esm2022/features/infinite-scroll/infinite-scroll.directive.mjs +89 -0
- package/esm2022/features/info-sign/info-sign.component.mjs +3 -3
- package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +38 -0
- package/esm2022/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +29 -0
- package/esm2022/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.mjs +29 -0
- package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +131 -0
- package/esm2022/features/inline-edit/fields/inline-edit-field.mjs +17 -0
- package/esm2022/features/inline-edit/fields/inline-edit-number-field.mjs +15 -0
- package/esm2022/features/inline-edit/fields/inline-edit-text-field.mjs +11 -0
- package/esm2022/features/inline-edit/fields/inline-edit-textarea-field.mjs +15 -0
- package/esm2022/features/inline-edit/inline-edit.component.mjs +27 -0
- package/esm2022/features/interactive-content/interactive-content.directive.mjs +140 -0
- package/esm2022/features/kanban/components/kanban-column/kanban-column.component.mjs +88 -0
- package/esm2022/features/kanban/components/kanban-item/kanban-item.component.mjs +72 -0
- package/esm2022/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +19 -0
- package/esm2022/features/kanban/directives/kanban-template.directive.mjs +22 -0
- package/esm2022/features/kanban/kanban.component.mjs +198 -0
- package/esm2022/features/kanban/services/kanban-event.service.mjs +27 -0
- package/esm2022/features/loading-state/loading-state.component.mjs +3 -62
- package/esm2022/features/mouse-events/directives/double-click.directive.mjs +34 -0
- package/esm2022/features/mouse-events/directives/long-press.directive.mjs +61 -0
- package/esm2022/features/paginator/paginator.component.mjs +8 -3
- package/esm2022/features/panel/panel.component.mjs +43 -11
- package/esm2022/features/pin-code-field/pin-code-field.component.mjs +234 -0
- package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +330 -0
- package/esm2022/features/rating-scale/rating-scale.component.mjs +86 -0
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
- package/esm2022/features/scaffold/scaffold.component.mjs +4 -6
- package/esm2022/features/select-button/select-button.component.mjs +7 -4
- package/esm2022/features/speech-recognition/services/speech-recognition.service.mjs +148 -0
- package/esm2022/features/speech-recognition/services/text-to-speech.service.mjs +88 -0
- package/esm2022/features/speech-recognition/speech-recognition.component.mjs +243 -0
- package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +521 -0
- package/esm2022/features/spotlight/directives/spotlight-step.directive.mjs +38 -0
- package/esm2022/features/spotlight/services/spotlight-tour.service.mjs +179 -0
- package/esm2022/features/spotlight/spotlight.component.mjs +160 -0
- package/esm2022/features/star-rating/star-rating.component.mjs +95 -0
- package/esm2022/features/stepper/stepper.component.mjs +86 -0
- package/esm2022/features/switch/switch.component.mjs +12 -8
- package/esm2022/features/tab/{tab-item.component.mjs → components/tab-item/tab-item.component.mjs} +1 -1
- package/esm2022/features/tab/tab.component.mjs +4 -4
- package/esm2022/features/table/components/table-cell-content.component.mjs +14 -5
- package/esm2022/features/table/table.component.mjs +220 -29
- package/esm2022/features/table/utils/table-data.util.mjs +71 -8
- package/esm2022/features/table/utils/table-layout.util.mjs +21 -1
- package/esm2022/features/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +367 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.mjs +11 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +97 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +181 -0
- package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +246 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.event.service.mjs +16 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.global.service.mjs +12 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.service.mjs +49 -0
- package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +169 -0
- package/esm2022/features/tree/tree.component.mjs +211 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.mjs +41 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.mjs +38 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.mjs +29 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.mjs +29 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.mjs +35 -0
- package/esm2022/features/visual-sql-editor/services/visual-sql-editor-flow.service.mjs +106 -0
- package/esm2022/features/visual-sql-editor/services/visual-sql-editor-state.service.mjs +230 -0
- package/esm2022/features/visual-sql-editor/types/visual-sql-editor.types.mjs +2 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.mjs +72 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sql.util.mjs +281 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-text.util.mjs +37 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor.constants.mjs +89 -0
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +172 -630
- package/esm2022/locales/en.json +351 -3
- package/esm2022/locales/es-CO.json +351 -3
- package/esm2022/locales/pt.json +351 -3
- package/esm2022/providers/features.provider.mjs +40 -4
- package/esm2022/public-api.mjs +56 -3
- package/features/accordion/accordion.component.d.ts +1 -1
- package/features/accordion/{accordion-item.component.d.ts → components/accordion-item/accordion-item.component.d.ts} +1 -1
- package/features/autocomplete/autocomplete.component.d.ts +102 -0
- package/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +11 -0
- package/features/card-list/card/card.component.d.ts +14 -34
- package/features/chat/chat.component.d.ts +31 -0
- package/features/checkbox-list/checkbox-list.component.d.ts +26 -0
- package/features/combobox/combobox.component.d.ts +2 -1
- package/features/context-selector/context-selector.component.d.ts +37 -0
- package/features/gantt/components/gantt-side-table/gantt-side-table.component.d.ts +8 -0
- package/features/gantt/gantt-date.utils.d.ts +36 -0
- package/features/gantt/gantt.component.d.ts +24 -0
- package/features/gantt/gantt.engine.d.ts +52 -0
- package/features/grid-menu/grid-menu.component.d.ts +29 -0
- package/features/hyperlink/hyperlink.component.d.ts +2 -1
- package/features/image-cropper/image-cropper.component.d.ts +43 -0
- package/features/image-cropper/services/image-cropper.service.d.ts +13 -0
- package/features/infinite-scroll/infinite-scroll.directive.d.ts +25 -0
- package/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +13 -0
- package/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.d.ts +13 -0
- package/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.d.ts +13 -0
- package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +37 -0
- package/features/inline-edit/fields/inline-edit-field.d.ts +12 -0
- package/features/inline-edit/fields/inline-edit-number-field.d.ts +9 -0
- package/features/inline-edit/fields/inline-edit-text-field.d.ts +7 -0
- package/features/inline-edit/fields/inline-edit-textarea-field.d.ts +9 -0
- package/features/inline-edit/inline-edit.component.d.ts +13 -0
- package/features/interactive-content/interactive-content.directive.d.ts +31 -0
- package/features/kanban/components/kanban-column/kanban-column.component.d.ts +22 -0
- package/features/kanban/components/kanban-item/kanban-item.component.d.ts +23 -0
- package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +8 -0
- package/features/kanban/directives/kanban-template.directive.d.ts +10 -0
- package/features/kanban/kanban.component.d.ts +32 -0
- package/features/kanban/services/kanban-event.service.d.ts +15 -0
- package/features/loading-state/loading-state.component.d.ts +0 -2
- package/features/mouse-events/directives/double-click.directive.d.ts +11 -0
- package/features/mouse-events/directives/long-press.directive.d.ts +14 -0
- package/features/panel/panel.component.d.ts +12 -3
- package/features/pin-code-field/pin-code-field.component.d.ts +44 -0
- package/features/profile-picture-picker/profile-picture-picker.component.d.ts +77 -0
- package/features/rating-scale/rating-scale.component.d.ts +24 -0
- package/features/select-button/select-button.component.d.ts +2 -1
- package/features/speech-recognition/services/speech-recognition.service.d.ts +29 -0
- package/features/speech-recognition/services/text-to-speech.service.d.ts +24 -0
- package/features/speech-recognition/speech-recognition.component.d.ts +50 -0
- package/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.d.ts +59 -0
- package/features/spotlight/directives/spotlight-step.directive.d.ts +13 -0
- package/features/spotlight/services/spotlight-tour.service.d.ts +46 -0
- package/features/spotlight/spotlight.component.d.ts +59 -0
- package/features/star-rating/star-rating.component.d.ts +26 -0
- package/features/stepper/stepper.component.d.ts +23 -0
- package/features/switch/switch.component.d.ts +2 -1
- package/features/tab/tab.component.d.ts +1 -1
- package/features/table/components/table-cell-content.component.d.ts +4 -3
- package/features/table/table.component.d.ts +40 -5
- package/features/table/utils/table-data.util.d.ts +1 -0
- package/features/table/utils/table-layout.util.d.ts +1 -0
- package/features/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +49 -0
- package/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.d.ts +5 -0
- package/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +19 -0
- package/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +26 -0
- package/features/tiered-menu/directives/tiered-menu.directive.d.ts +44 -0
- package/features/tiered-menu/services/tiered-menu.event.service.d.ts +13 -0
- package/features/tiered-menu/services/tiered-menu.global.service.d.ts +7 -0
- package/features/tiered-menu/services/tiered-menu.service.d.ts +14 -0
- package/features/tree/components/tree-node-item/tree-node-item.component.d.ts +37 -0
- package/features/tree/tree.component.d.ts +37 -0
- package/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.d.ts +18 -0
- package/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.d.ts +17 -0
- package/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.d.ts +13 -0
- package/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.d.ts +13 -0
- package/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.d.ts +15 -0
- package/features/visual-sql-editor/services/visual-sql-editor-flow.service.d.ts +26 -0
- package/features/visual-sql-editor/services/visual-sql-editor-state.service.d.ts +72 -0
- package/features/visual-sql-editor/types/visual-sql-editor.types.d.ts +182 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.d.ts +14 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-sql.util.d.ts +81 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-text.util.d.ts +15 -0
- package/features/visual-sql-editor/utils/visual-sql-editor.constants.d.ts +36 -0
- package/features/visual-sql-editor/visual-sql-editor.component.d.ts +37 -199
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14883 -6353
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +8 -8
- package/public-api.d.ts +72 -2
- package/src/locales/en.json +353 -15
- package/src/locales/es-CO.json +352 -14
- package/src/locales/pt.json +352 -14
- package/styles/sdc-global-variables.scss +1 -1
- package/styles.css +1 -1
- /package/features/tab/{tab-item.component.d.ts → components/tab-item/tab-item.component.d.ts} +0 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, forwardRef, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
+
import { ImageCropperService } from '../image-cropper/services/image-cropper.service';
|
|
6
|
+
import { ModalComponent } from '../modal/modal.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ngx-translate/core";
|
|
9
|
+
export class ProfilePicturePickerComponent {
|
|
10
|
+
static nextId = 0;
|
|
11
|
+
static allocateComponentId() {
|
|
12
|
+
const nextId = ProfilePicturePickerComponent.nextId;
|
|
13
|
+
ProfilePicturePickerComponent.nextId += 1;
|
|
14
|
+
return `profile-picture-picker-${nextId}`;
|
|
15
|
+
}
|
|
16
|
+
fileInput;
|
|
17
|
+
componentId = ProfilePicturePickerComponent.allocateComponentId();
|
|
18
|
+
subtitle;
|
|
19
|
+
simpleTitle;
|
|
20
|
+
actionTitle;
|
|
21
|
+
removeButtonLabel;
|
|
22
|
+
changeButtonLabel;
|
|
23
|
+
aspectRatio = 1;
|
|
24
|
+
maxFileSize;
|
|
25
|
+
accept;
|
|
26
|
+
supportedExtensions = [];
|
|
27
|
+
confirmBeforeApply = false;
|
|
28
|
+
confirmTitle = 'platform.datacore.profile_picture_picker.confirm_title';
|
|
29
|
+
confirmMessage = 'platform.datacore.profile_picture_picker.confirm_message';
|
|
30
|
+
confirmAcceptLabel = 'platform.datacore.profile_picture_picker.confirm_accept';
|
|
31
|
+
confirmRejectLabel = 'platform.datacore.profile_picture_picker.confirm_reject';
|
|
32
|
+
set image(value) {
|
|
33
|
+
this._image = value;
|
|
34
|
+
this.cdr.markForCheck();
|
|
35
|
+
}
|
|
36
|
+
get image() {
|
|
37
|
+
return this._image;
|
|
38
|
+
}
|
|
39
|
+
imageChange = new EventEmitter();
|
|
40
|
+
removedImage = new EventEmitter();
|
|
41
|
+
invalidFile = new EventEmitter();
|
|
42
|
+
confirmVisible = false;
|
|
43
|
+
dragActive = false;
|
|
44
|
+
_image = null;
|
|
45
|
+
pendingImageData = null;
|
|
46
|
+
cdr = inject(ChangeDetectorRef);
|
|
47
|
+
imageCropperService = inject(ImageCropperService);
|
|
48
|
+
onChange = () => { };
|
|
49
|
+
onTouched = () => { };
|
|
50
|
+
get imageBase64() {
|
|
51
|
+
if (!this._image) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (typeof this._image === 'string') {
|
|
55
|
+
return this._image;
|
|
56
|
+
}
|
|
57
|
+
return this._image.base64;
|
|
58
|
+
}
|
|
59
|
+
get hasImage() {
|
|
60
|
+
return !!this.imageBase64;
|
|
61
|
+
}
|
|
62
|
+
get confirmPreview() {
|
|
63
|
+
return this.pendingImageData?.base64 ?? null;
|
|
64
|
+
}
|
|
65
|
+
get resolvedRemoveLabel() {
|
|
66
|
+
return this.removeButtonLabel ?? 'platform.datacore.profile_picture_picker.remove';
|
|
67
|
+
}
|
|
68
|
+
get resolvedChangeLabel() {
|
|
69
|
+
return this.changeButtonLabel ?? 'platform.datacore.profile_picture_picker.change';
|
|
70
|
+
}
|
|
71
|
+
get resolvedSimpleTitle() {
|
|
72
|
+
return this.simpleTitle ?? 'platform.datacore.profile_picture_picker.drag_or';
|
|
73
|
+
}
|
|
74
|
+
get resolvedActionTitle() {
|
|
75
|
+
return this.actionTitle ?? 'platform.datacore.profile_picture_picker.select_file';
|
|
76
|
+
}
|
|
77
|
+
get usesRoundedCrop() {
|
|
78
|
+
return Math.abs(this.aspectRatio - 1) < 0.001;
|
|
79
|
+
}
|
|
80
|
+
get confirmPreviewAspectRatio() {
|
|
81
|
+
return this.usesRoundedCrop ? '1 / 1' : `${this.aspectRatio}`;
|
|
82
|
+
}
|
|
83
|
+
get confirmFooterButtons() {
|
|
84
|
+
return [
|
|
85
|
+
{
|
|
86
|
+
id: 'profile-picture-confirm-reject',
|
|
87
|
+
label: this.confirmRejectLabel,
|
|
88
|
+
severity: 'secondary',
|
|
89
|
+
action: () => this.rejectPendingImage()
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'profile-picture-confirm-accept',
|
|
93
|
+
label: this.confirmAcceptLabel,
|
|
94
|
+
severity: 'primary',
|
|
95
|
+
action: () => this.acceptPendingImage()
|
|
96
|
+
}
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
onAvatarClick() {
|
|
100
|
+
if (this.hasImage) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.openFileSelector();
|
|
104
|
+
}
|
|
105
|
+
onActionClick() {
|
|
106
|
+
this.onChangeClick();
|
|
107
|
+
}
|
|
108
|
+
onChangeClick() {
|
|
109
|
+
this.openFileSelector();
|
|
110
|
+
}
|
|
111
|
+
onRemoveClick() {
|
|
112
|
+
this._image = null;
|
|
113
|
+
this.onChange(null);
|
|
114
|
+
this.onTouched();
|
|
115
|
+
this.removedImage.emit();
|
|
116
|
+
this.cdr.markForCheck();
|
|
117
|
+
}
|
|
118
|
+
onFileSelected(event) {
|
|
119
|
+
const input = event.target;
|
|
120
|
+
const file = input.files?.[0];
|
|
121
|
+
if (!input.files || !file) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Reset value so same file can be selected again
|
|
125
|
+
input.value = '';
|
|
126
|
+
this.processFile(file);
|
|
127
|
+
}
|
|
128
|
+
onDragEnter(event) {
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
if (!this.hasDraggedFile(event)) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.dragActive = true;
|
|
134
|
+
this.cdr.markForCheck();
|
|
135
|
+
}
|
|
136
|
+
onDragOver(event) {
|
|
137
|
+
this.onDragEnter(event);
|
|
138
|
+
}
|
|
139
|
+
onDragLeave(event) {
|
|
140
|
+
const relatedTarget = event.relatedTarget;
|
|
141
|
+
if (relatedTarget && event.currentTarget?.contains(relatedTarget)) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.dragActive = false;
|
|
145
|
+
this.cdr.markForCheck();
|
|
146
|
+
}
|
|
147
|
+
onDrop(event) {
|
|
148
|
+
event.preventDefault();
|
|
149
|
+
this.dragActive = false;
|
|
150
|
+
const file = event.dataTransfer?.files?.[0];
|
|
151
|
+
if (!file) {
|
|
152
|
+
this.cdr.markForCheck();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
this.processFile(file);
|
|
156
|
+
}
|
|
157
|
+
onConfirmVisibleChange(visible) {
|
|
158
|
+
this.confirmVisible = visible;
|
|
159
|
+
if (!visible) {
|
|
160
|
+
this.pendingImageData = null;
|
|
161
|
+
}
|
|
162
|
+
this.cdr.markForCheck();
|
|
163
|
+
}
|
|
164
|
+
writeValue(value) {
|
|
165
|
+
this._image = value;
|
|
166
|
+
this.cdr.markForCheck();
|
|
167
|
+
}
|
|
168
|
+
registerOnChange(fn) {
|
|
169
|
+
this.onChange = fn;
|
|
170
|
+
}
|
|
171
|
+
registerOnTouched(fn) {
|
|
172
|
+
this.onTouched = fn;
|
|
173
|
+
}
|
|
174
|
+
setDisabledState(_isDisabled) {
|
|
175
|
+
// Disabled state handling can be extended in phase 2
|
|
176
|
+
this.cdr.markForCheck();
|
|
177
|
+
}
|
|
178
|
+
openFileSelector() {
|
|
179
|
+
this.fileInput?.nativeElement.click();
|
|
180
|
+
}
|
|
181
|
+
processFile(file) {
|
|
182
|
+
const validationError = this.validateFile(file);
|
|
183
|
+
if (validationError) {
|
|
184
|
+
this.invalidFile.emit({ file, validation: validationError });
|
|
185
|
+
this.cdr.markForCheck();
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const reader = new FileReader();
|
|
189
|
+
reader.onload = (e) => {
|
|
190
|
+
const base64 = e.target?.result;
|
|
191
|
+
this.openCropperWithFile(file, base64);
|
|
192
|
+
};
|
|
193
|
+
reader.readAsDataURL(file);
|
|
194
|
+
}
|
|
195
|
+
validateFile(file) {
|
|
196
|
+
if (!file.type.startsWith('image/')) {
|
|
197
|
+
return 'typeInvalid';
|
|
198
|
+
}
|
|
199
|
+
if (this.supportedExtensions.length > 0) {
|
|
200
|
+
const ext = this.getExtension(file.name);
|
|
201
|
+
const supportedExtensions = this.supportedExtensions.map((entry) => this.normalizeExtension(entry));
|
|
202
|
+
if (!supportedExtensions.includes(ext)) {
|
|
203
|
+
return 'unsupportedExtension';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (this.maxFileSize !== undefined && file.size > this.maxFileSize) {
|
|
207
|
+
return 'maxFileSize';
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
getExtension(filename) {
|
|
212
|
+
const parts = filename.split('.');
|
|
213
|
+
return parts.length > 1 ? this.normalizeExtension(parts[parts.length - 1]) : '';
|
|
214
|
+
}
|
|
215
|
+
normalizeExtension(extension) {
|
|
216
|
+
const normalized = extension.trim().toLowerCase();
|
|
217
|
+
if (!normalized) {
|
|
218
|
+
return '';
|
|
219
|
+
}
|
|
220
|
+
return normalized.startsWith('.') ? normalized : `.${normalized}`;
|
|
221
|
+
}
|
|
222
|
+
openCropperWithFile(file, base64) {
|
|
223
|
+
this.imageCropperService.show({
|
|
224
|
+
imageSource: base64,
|
|
225
|
+
aspectRatio: this.aspectRatio,
|
|
226
|
+
rounded: this.usesRoundedCrop,
|
|
227
|
+
allowRemove: false,
|
|
228
|
+
allowSelectAnother: true,
|
|
229
|
+
changeImage: () => this.openFileSelector(),
|
|
230
|
+
croppedImage: (croppedBase64) => {
|
|
231
|
+
const data = {
|
|
232
|
+
source: file,
|
|
233
|
+
base64: croppedBase64
|
|
234
|
+
};
|
|
235
|
+
this.handleCroppedImageData(data);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
handleCroppedImageData(data) {
|
|
240
|
+
if (!this.confirmBeforeApply) {
|
|
241
|
+
this.applyImageData(data);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.pendingImageData = data;
|
|
245
|
+
this.confirmVisible = true;
|
|
246
|
+
this.cdr.markForCheck();
|
|
247
|
+
}
|
|
248
|
+
applyImageData(data) {
|
|
249
|
+
this._image = data;
|
|
250
|
+
this.onChange(data);
|
|
251
|
+
this.onTouched();
|
|
252
|
+
this.imageChange.emit(data);
|
|
253
|
+
this.cdr.markForCheck();
|
|
254
|
+
}
|
|
255
|
+
acceptPendingImage() {
|
|
256
|
+
if (this.pendingImageData) {
|
|
257
|
+
this.applyImageData(this.pendingImageData);
|
|
258
|
+
}
|
|
259
|
+
this.pendingImageData = null;
|
|
260
|
+
this.confirmVisible = false;
|
|
261
|
+
this.cdr.markForCheck();
|
|
262
|
+
}
|
|
263
|
+
rejectPendingImage() {
|
|
264
|
+
this.pendingImageData = null;
|
|
265
|
+
this.confirmVisible = false;
|
|
266
|
+
this.cdr.markForCheck();
|
|
267
|
+
}
|
|
268
|
+
hasDraggedFile(event) {
|
|
269
|
+
const types = event.dataTransfer?.types;
|
|
270
|
+
return !!types && Array.from(types).includes('Files');
|
|
271
|
+
}
|
|
272
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfilePicturePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
273
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ProfilePicturePickerComponent, isStandalone: true, selector: "sdc-profile-picture-picker", inputs: { subtitle: "subtitle", simpleTitle: "simpleTitle", actionTitle: "actionTitle", removeButtonLabel: "removeButtonLabel", changeButtonLabel: "changeButtonLabel", aspectRatio: "aspectRatio", maxFileSize: "maxFileSize", accept: "accept", supportedExtensions: "supportedExtensions", confirmBeforeApply: "confirmBeforeApply", confirmTitle: "confirmTitle", confirmMessage: "confirmMessage", confirmAcceptLabel: "confirmAcceptLabel", confirmRejectLabel: "confirmRejectLabel", image: "image" }, outputs: { imageChange: "imageChange", removedImage: "removedImage", invalidFile: "invalidFile" }, providers: [
|
|
274
|
+
{
|
|
275
|
+
provide: NG_VALUE_ACCESSOR,
|
|
276
|
+
useExisting: forwardRef(() => ProfilePicturePickerComponent),
|
|
277
|
+
multi: true
|
|
278
|
+
}
|
|
279
|
+
], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div\n class=\"sdc-profile-picture-picker\"\n [class.sdc-profile-picture-picker--dragover]=\"dragActive\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__avatar\"\n [class.sdc-profile-picture-picker__avatar--clickable]=\"!hasImage\"\n (click)=\"onAvatarClick()\"\n [disabled]=\"hasImage\"\n [attr.aria-label]=\"resolvedActionTitle | translate\"\n >\n @if (hasImage) {\n <img\n class=\"sdc-profile-picture-picker__avatar-img\"\n [src]=\"imageBase64\"\n width=\"128\"\n height=\"128\"\n alt=\"\"\n aria-hidden=\"true\"\n />\n } @else {\n <i class=\"far fa-user sdc-profile-picture-picker__avatar-icon\" aria-hidden=\"true\"></i>\n }\n </button>\n\n <div class=\"sdc-profile-picture-picker__info\">\n @if (hasImage) {\n <div class=\"sdc-profile-picture-picker__buttons\">\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__btn sdc-profile-picture-picker__btn--change\"\n (click)=\"onChangeClick()\"\n >\n {{ resolvedChangeLabel | translate }}\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__btn sdc-profile-picture-picker__btn--remove\"\n (click)=\"onRemoveClick()\"\n >\n {{ resolvedRemoveLabel | translate }}\n </button>\n </div>\n } @else {\n <div class=\"sdc-profile-picture-picker__title\">\n <span class=\"sdc-profile-picture-picker__simple-title\">{{ resolvedSimpleTitle | translate }}</span>\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__action action\"\n (click)=\"onActionClick()\"\n >\n {{ resolvedActionTitle | translate }}\n </button>\n </div>\n }\n\n @if (subtitle) {\n <div class=\"sdc-profile-picture-picker__subtitle\">\n {{ subtitle | translate }}\n </div>\n }\n </div>\n\n <input\n #fileInput\n [id]=\"'profile-picture-input-' + componentId\"\n type=\"file\"\n class=\"sdc-profile-picture-picker__file-input\"\n [accept]=\"accept\"\n [attr.aria-label]=\"resolvedActionTitle | translate\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n (change)=\"onFileSelected($event)\"\n />\n\n <sdc-modal\n [visible]=\"confirmVisible\"\n (visibleChange)=\"onConfirmVisibleChange($event)\"\n [header]=\"confirmTitle\"\n [width]=\"'33.75rem'\"\n [closable]=\"true\"\n [maximizable]=\"false\"\n [responsive]=\"true\"\n [appendToBody]=\"true\"\n [footerButtons]=\"confirmFooterButtons\"\n styleClass=\"sdc-profile-picture-picker__confirm-modal\"\n >\n <div class=\"sdc-profile-picture-picker__confirm-content\">\n <p class=\"sdc-profile-picture-picker__confirm-message\">\n {{ confirmMessage | translate }}\n </p>\n\n @if (confirmPreview) {\n <div\n class=\"sdc-profile-picture-picker__confirm-preview\"\n [class.sdc-profile-picture-picker__confirm-preview--rounded]=\"usesRoundedCrop\"\n >\n <img\n class=\"sdc-profile-picture-picker__confirm-preview-image\"\n [class.sdc-profile-picture-picker__confirm-preview-image--rounded]=\"usesRoundedCrop\"\n [style.aspect-ratio]=\"confirmPreviewAspectRatio\"\n [src]=\"confirmPreview\"\n alt=\"preview\"\n width=\"280\"\n height=\"280\"\n />\n </div>\n }\n </div>\n </sdc-modal>\n</div>\n", styles: [":host{display:block}.sdc-profile-picture-picker{--sdc-ppp-avatar-size: 5rem;--sdc-ppp-avatar-bg: #e5eaea;--sdc-ppp-avatar-color: #697882;--sdc-ppp-action-color: #428bca;--sdc-ppp-subtitle-color: #697882;--sdc-ppp-subtitle-size: .75rem;--sdc-ppp-btn-gap: .5rem;--sdc-ppp-btn-color-change: #428bca;--sdc-ppp-btn-color-remove: #d9534f;display:flex;align-items:center;gap:1.25rem;padding:.5rem;border:1px dashed transparent;border-radius:.75rem;transition:border-color .18s ease,background-color .18s ease,box-shadow .18s ease}.sdc-profile-picture-picker--dragover{border-color:var(--sdc-ppp-action-color);background:#428bca0f;box-shadow:0 0 0 3px #428bca1f}.sdc-profile-picture-picker__avatar{flex-shrink:0;width:var(--sdc-ppp-avatar-size);height:var(--sdc-ppp-avatar-size);border-radius:50%;background-color:var(--sdc-ppp-avatar-bg);color:var(--sdc-ppp-avatar-color);overflow:hidden;display:flex;align-items:center;justify-content:center;font-size:calc(var(--sdc-ppp-avatar-size) * .45)}.sdc-profile-picture-picker__avatar--clickable{cursor:pointer}.sdc-profile-picture-picker__avatar--clickable:hover{opacity:.85}.sdc-profile-picture-picker__avatar--clickable:focus-visible{outline:2px solid var(--sdc-ppp-action-color);outline-offset:2px}.sdc-profile-picture-picker__avatar-img{width:100%;height:100%;object-fit:cover;display:block}.sdc-profile-picture-picker__avatar-icon{pointer-events:none}.sdc-profile-picture-picker__info{display:flex;flex-direction:column;gap:.5rem;min-width:0}.sdc-profile-picture-picker__title{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem}.sdc-profile-picture-picker__simple-title{color:inherit}.sdc-profile-picture-picker__action{cursor:pointer;color:var(--sdc-ppp-action-color);text-decoration:underline;background:none;border:none;padding:0;font:inherit}.sdc-profile-picture-picker__action:hover{opacity:.8}.sdc-profile-picture-picker__action:focus-visible{outline:2px solid var(--sdc-ppp-action-color);outline-offset:2px;border-radius:2px}.sdc-profile-picture-picker__subtitle{font-size:var(--sdc-ppp-subtitle-size);color:var(--sdc-ppp-subtitle-color)}.sdc-profile-picture-picker__buttons{display:flex;gap:var(--sdc-ppp-btn-gap);flex-wrap:wrap}.sdc-profile-picture-picker__btn{background:none;border:none;padding:0;font:inherit;cursor:pointer;text-decoration:underline}.sdc-profile-picture-picker__btn--change{color:var(--sdc-ppp-btn-color-change)}.sdc-profile-picture-picker__btn--remove{color:var(--sdc-ppp-btn-color-remove)}.sdc-profile-picture-picker__btn:hover{opacity:.8}.sdc-profile-picture-picker__btn:focus-visible{outline:2px solid currentColor;outline-offset:2px;border-radius:2px}.sdc-profile-picture-picker__file-input{display:none;position:absolute;width:0;height:0;opacity:0;pointer-events:none}.sdc-profile-picture-picker__confirm-content{display:flex;flex-direction:column;gap:1rem}.sdc-profile-picture-picker__confirm-message{margin:0;color:#45535e;font-size:.9375rem;line-height:1.5}.sdc-profile-picture-picker__confirm-preview{display:flex;justify-content:center;padding:1rem;border:1px solid #d7e1e8;border-radius:1rem;background:linear-gradient(180deg,#fcfdff,#f4f8fb)}.sdc-profile-picture-picker__confirm-preview--rounded{border-radius:999px}.sdc-profile-picture-picker__confirm-preview-image{display:block;width:min(100%,15rem);aspect-ratio:1/1;border-radius:1rem;object-fit:cover;box-shadow:0 10px 24px #0f172a24}.sdc-profile-picture-picker__confirm-preview-image--rounded{border-radius:50%}@media (max-width: 640px){.sdc-profile-picture-picker{align-items:flex-start;flex-direction:column}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
280
|
+
}
|
|
281
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfilePicturePickerComponent, decorators: [{
|
|
282
|
+
type: Component,
|
|
283
|
+
args: [{ selector: 'sdc-profile-picture-picker', standalone: true, imports: [CommonModule, TranslateModule, ModalComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, providers: [
|
|
284
|
+
{
|
|
285
|
+
provide: NG_VALUE_ACCESSOR,
|
|
286
|
+
useExisting: forwardRef(() => ProfilePicturePickerComponent),
|
|
287
|
+
multi: true
|
|
288
|
+
}
|
|
289
|
+
], template: "<div\n class=\"sdc-profile-picture-picker\"\n [class.sdc-profile-picture-picker--dragover]=\"dragActive\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__avatar\"\n [class.sdc-profile-picture-picker__avatar--clickable]=\"!hasImage\"\n (click)=\"onAvatarClick()\"\n [disabled]=\"hasImage\"\n [attr.aria-label]=\"resolvedActionTitle | translate\"\n >\n @if (hasImage) {\n <img\n class=\"sdc-profile-picture-picker__avatar-img\"\n [src]=\"imageBase64\"\n width=\"128\"\n height=\"128\"\n alt=\"\"\n aria-hidden=\"true\"\n />\n } @else {\n <i class=\"far fa-user sdc-profile-picture-picker__avatar-icon\" aria-hidden=\"true\"></i>\n }\n </button>\n\n <div class=\"sdc-profile-picture-picker__info\">\n @if (hasImage) {\n <div class=\"sdc-profile-picture-picker__buttons\">\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__btn sdc-profile-picture-picker__btn--change\"\n (click)=\"onChangeClick()\"\n >\n {{ resolvedChangeLabel | translate }}\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__btn sdc-profile-picture-picker__btn--remove\"\n (click)=\"onRemoveClick()\"\n >\n {{ resolvedRemoveLabel | translate }}\n </button>\n </div>\n } @else {\n <div class=\"sdc-profile-picture-picker__title\">\n <span class=\"sdc-profile-picture-picker__simple-title\">{{ resolvedSimpleTitle | translate }}</span>\n <button\n type=\"button\"\n class=\"sdc-profile-picture-picker__action action\"\n (click)=\"onActionClick()\"\n >\n {{ resolvedActionTitle | translate }}\n </button>\n </div>\n }\n\n @if (subtitle) {\n <div class=\"sdc-profile-picture-picker__subtitle\">\n {{ subtitle | translate }}\n </div>\n }\n </div>\n\n <input\n #fileInput\n [id]=\"'profile-picture-input-' + componentId\"\n type=\"file\"\n class=\"sdc-profile-picture-picker__file-input\"\n [accept]=\"accept\"\n [attr.aria-label]=\"resolvedActionTitle | translate\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n (change)=\"onFileSelected($event)\"\n />\n\n <sdc-modal\n [visible]=\"confirmVisible\"\n (visibleChange)=\"onConfirmVisibleChange($event)\"\n [header]=\"confirmTitle\"\n [width]=\"'33.75rem'\"\n [closable]=\"true\"\n [maximizable]=\"false\"\n [responsive]=\"true\"\n [appendToBody]=\"true\"\n [footerButtons]=\"confirmFooterButtons\"\n styleClass=\"sdc-profile-picture-picker__confirm-modal\"\n >\n <div class=\"sdc-profile-picture-picker__confirm-content\">\n <p class=\"sdc-profile-picture-picker__confirm-message\">\n {{ confirmMessage | translate }}\n </p>\n\n @if (confirmPreview) {\n <div\n class=\"sdc-profile-picture-picker__confirm-preview\"\n [class.sdc-profile-picture-picker__confirm-preview--rounded]=\"usesRoundedCrop\"\n >\n <img\n class=\"sdc-profile-picture-picker__confirm-preview-image\"\n [class.sdc-profile-picture-picker__confirm-preview-image--rounded]=\"usesRoundedCrop\"\n [style.aspect-ratio]=\"confirmPreviewAspectRatio\"\n [src]=\"confirmPreview\"\n alt=\"preview\"\n width=\"280\"\n height=\"280\"\n />\n </div>\n }\n </div>\n </sdc-modal>\n</div>\n", styles: [":host{display:block}.sdc-profile-picture-picker{--sdc-ppp-avatar-size: 5rem;--sdc-ppp-avatar-bg: #e5eaea;--sdc-ppp-avatar-color: #697882;--sdc-ppp-action-color: #428bca;--sdc-ppp-subtitle-color: #697882;--sdc-ppp-subtitle-size: .75rem;--sdc-ppp-btn-gap: .5rem;--sdc-ppp-btn-color-change: #428bca;--sdc-ppp-btn-color-remove: #d9534f;display:flex;align-items:center;gap:1.25rem;padding:.5rem;border:1px dashed transparent;border-radius:.75rem;transition:border-color .18s ease,background-color .18s ease,box-shadow .18s ease}.sdc-profile-picture-picker--dragover{border-color:var(--sdc-ppp-action-color);background:#428bca0f;box-shadow:0 0 0 3px #428bca1f}.sdc-profile-picture-picker__avatar{flex-shrink:0;width:var(--sdc-ppp-avatar-size);height:var(--sdc-ppp-avatar-size);border-radius:50%;background-color:var(--sdc-ppp-avatar-bg);color:var(--sdc-ppp-avatar-color);overflow:hidden;display:flex;align-items:center;justify-content:center;font-size:calc(var(--sdc-ppp-avatar-size) * .45)}.sdc-profile-picture-picker__avatar--clickable{cursor:pointer}.sdc-profile-picture-picker__avatar--clickable:hover{opacity:.85}.sdc-profile-picture-picker__avatar--clickable:focus-visible{outline:2px solid var(--sdc-ppp-action-color);outline-offset:2px}.sdc-profile-picture-picker__avatar-img{width:100%;height:100%;object-fit:cover;display:block}.sdc-profile-picture-picker__avatar-icon{pointer-events:none}.sdc-profile-picture-picker__info{display:flex;flex-direction:column;gap:.5rem;min-width:0}.sdc-profile-picture-picker__title{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem}.sdc-profile-picture-picker__simple-title{color:inherit}.sdc-profile-picture-picker__action{cursor:pointer;color:var(--sdc-ppp-action-color);text-decoration:underline;background:none;border:none;padding:0;font:inherit}.sdc-profile-picture-picker__action:hover{opacity:.8}.sdc-profile-picture-picker__action:focus-visible{outline:2px solid var(--sdc-ppp-action-color);outline-offset:2px;border-radius:2px}.sdc-profile-picture-picker__subtitle{font-size:var(--sdc-ppp-subtitle-size);color:var(--sdc-ppp-subtitle-color)}.sdc-profile-picture-picker__buttons{display:flex;gap:var(--sdc-ppp-btn-gap);flex-wrap:wrap}.sdc-profile-picture-picker__btn{background:none;border:none;padding:0;font:inherit;cursor:pointer;text-decoration:underline}.sdc-profile-picture-picker__btn--change{color:var(--sdc-ppp-btn-color-change)}.sdc-profile-picture-picker__btn--remove{color:var(--sdc-ppp-btn-color-remove)}.sdc-profile-picture-picker__btn:hover{opacity:.8}.sdc-profile-picture-picker__btn:focus-visible{outline:2px solid currentColor;outline-offset:2px;border-radius:2px}.sdc-profile-picture-picker__file-input{display:none;position:absolute;width:0;height:0;opacity:0;pointer-events:none}.sdc-profile-picture-picker__confirm-content{display:flex;flex-direction:column;gap:1rem}.sdc-profile-picture-picker__confirm-message{margin:0;color:#45535e;font-size:.9375rem;line-height:1.5}.sdc-profile-picture-picker__confirm-preview{display:flex;justify-content:center;padding:1rem;border:1px solid #d7e1e8;border-radius:1rem;background:linear-gradient(180deg,#fcfdff,#f4f8fb)}.sdc-profile-picture-picker__confirm-preview--rounded{border-radius:999px}.sdc-profile-picture-picker__confirm-preview-image{display:block;width:min(100%,15rem);aspect-ratio:1/1;border-radius:1rem;object-fit:cover;box-shadow:0 10px 24px #0f172a24}.sdc-profile-picture-picker__confirm-preview-image--rounded{border-radius:50%}@media (max-width: 640px){.sdc-profile-picture-picker{align-items:flex-start;flex-direction:column}}\n"] }]
|
|
290
|
+
}], propDecorators: { fileInput: [{
|
|
291
|
+
type: ViewChild,
|
|
292
|
+
args: ['fileInput']
|
|
293
|
+
}], subtitle: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], simpleTitle: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], actionTitle: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], removeButtonLabel: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], changeButtonLabel: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], aspectRatio: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], maxFileSize: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], accept: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], supportedExtensions: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], confirmBeforeApply: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], confirmTitle: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], confirmMessage: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], confirmAcceptLabel: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], confirmRejectLabel: [{
|
|
320
|
+
type: Input
|
|
321
|
+
}], image: [{
|
|
322
|
+
type: Input
|
|
323
|
+
}], imageChange: [{
|
|
324
|
+
type: Output
|
|
325
|
+
}], removedImage: [{
|
|
326
|
+
type: Output
|
|
327
|
+
}], invalidFile: [{
|
|
328
|
+
type: Output
|
|
329
|
+
}] } });
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBT3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBb0IxRCxNQUFNLE9BQU8sNkJBQTZCO0lBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLE1BQU0sQ0FBQyxtQkFBbUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsNkJBQTZCLENBQUMsTUFBTSxDQUFDO1FBQ3BELDZCQUE2QixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDMUMsT0FBTywwQkFBMEIsTUFBTSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUV1QixTQUFTLENBQWdDO0lBRTlDLFdBQVcsR0FBRyw2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QXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRmlsZVZhbGlkYXRpb25FcnJvcnMsXG4gIFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YVxufSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIudHlwZSc7XG5pbXBvcnQgdHlwZSB7IE1vZGFsQnV0dG9uIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9tb2RhbC50eXBlJztcbmltcG9ydCB7IEltYWdlQ3JvcHBlclNlcnZpY2UgfSBmcm9tICcuLi9pbWFnZS1jcm9wcGVyL3NlcnZpY2VzL2ltYWdlLWNyb3BwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5cbnR5cGUgUHJvZmlsZVBpY3R1cmVWYWx1ZSA9IHN0cmluZyB8IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSB8IG51bGw7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBNb2RhbENvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9maWxlLXBpY3R1cmUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWxsb2NhdGVDb21wb25lbnRJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5leHRJZCA9IFByb2ZpbGVQaWN0dXJlUGlja2VyQ29tcG9uZW50Lm5leHRJZDtcbiAgICBQcm9maWxlUGljdHVyZVBpY2tlckNvbXBvbmVudC5uZXh0SWQgKz0gMTtcbiAgICByZXR1cm4gYHByb2ZpbGUtcGljdHVyZS1waWNrZXItJHtuZXh0SWR9YDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dD86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbXBvbmVudElkID0gUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQuYWxsb2NhdGVDb21wb25lbnRJZCgpO1xuXG4gIEBJbnB1dCgpIHN1YnRpdGxlPzogc3RyaW5nO1xuICBASW5wdXQoKSBzaW1wbGVUaXRsZT86IHN0cmluZztcbiAgQElucHV0KCkgYWN0aW9uVGl0bGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlbW92ZUJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBjaGFuZ2VCdXR0b25MYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgYXNwZWN0UmF0aW8gPSAxO1xuICBASW5wdXQoKSBtYXhGaWxlU2l6ZT86IG51bWJlcjtcbiAgQElucHV0KCkgYWNjZXB0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBzdXBwb3J0ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlQXBwbHkgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybVRpdGxlID0gJ3BsYXRmb3JtLmRhdGFjb3JlLnByb2ZpbGVfcGljdHVyZV9waWNrZXIuY29uZmlybV90aXRsZSc7XG4gIEBJbnB1dCgpIGNvbmZpcm1NZXNzYWdlID0gJ3BsYXRmb3JtLmRhdGFjb3JlLnByb2ZpbGVfcGljdHVyZV9waWNrZXIuY29uZmlybV9tZXNzYWdlJztcbiAgQElucHV0KCkgY29uZmlybUFjY2VwdExhYmVsID0gJ3BsYXRmb3JtLmRhdGFjb3JlLnByb2ZpbGVfcGljdHVyZV9waWNrZXIuY29uZmlybV9hY2NlcHQnO1xuICBASW5wdXQoKSBjb25maXJtUmVqZWN0TGFiZWwgPSAncGxhdGZvcm0uZGF0YWNvcmUucHJvZmlsZV9waWN0dXJlX3BpY2tlci5jb25maXJtX3JlamVjdCc7XG5cbiAgQElucHV0KCkgc2V0IGltYWdlKHZhbHVlOiBQcm9maWxlUGljdHVyZVZhbHVlKSB7XG4gICAgdGhpcy5faW1hZ2UgPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBpbWFnZSgpOiBQcm9maWxlUGljdHVyZVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2U7XG4gIH1cblxuICBAT3V0cHV0KCkgaW1hZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZWRJbWFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGludmFsaWRGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlVmFsaWRhdGlvbkVycm9ycz4oKTtcblxuICBwcm90ZWN0ZWQgY29uZmlybVZpc2libGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGRyYWdBY3RpdmUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pbWFnZTogUHJvZmlsZVBpY3R1cmVWYWx1ZSA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ0ltYWdlRGF0YTogUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbWFnZUNyb3BwZXJTZXJ2aWNlID0gaW5qZWN0KEltYWdlQ3JvcHBlclNlcnZpY2UpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgZ2V0IGltYWdlQmFzZTY0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5faW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5faW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW1hZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlLmJhc2U2NDtcbiAgfVxuXG4gIGdldCBoYXNJbWFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmltYWdlQmFzZTY0O1xuICB9XG5cbiAgZ2V0IGNvbmZpcm1QcmV2aWV3KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBlbmRpbmdJbWFnZURhdGE/LmJhc2U2NCA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkUmVtb3ZlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVCdXR0b25MYWJlbCA/PyAncGxhdGZvcm0uZGF0YWNvcmUucHJvZmlsZV9waWN0dXJlX3BpY2tlci5yZW1vdmUnO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkQ2hhbmdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VCdXR0b25MYWJlbCA/PyAncGxhdGZvcm0uZGF0YWNvcmUucHJvZmlsZV9waWN0dXJlX3BpY2tlci5jaGFuZ2UnO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkU2ltcGxlVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaW1wbGVUaXRsZSA/PyAncGxhdGZvcm0uZGF0YWNvcmUucHJvZmlsZV9waWN0dXJlX3BpY2tlci5kcmFnX29yJztcbiAgfVxuXG4gIGdldCByZXNvbHZlZEFjdGlvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uVGl0bGUgPz8gJ3BsYXRmb3JtLmRhdGFjb3JlLnByb2ZpbGVfcGljdHVyZV9waWNrZXIuc2VsZWN0X2ZpbGUnO1xuICB9XG5cbiAgZ2V0IHVzZXNSb3VuZGVkQ3JvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTWF0aC5hYnModGhpcy5hc3BlY3RSYXRpbyAtIDEpIDwgMC4wMDE7XG4gIH1cblxuICBnZXQgY29uZmlybVByZXZpZXdBc3BlY3RSYXRpbygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVzZXNSb3VuZGVkQ3JvcCA/ICcxIC8gMScgOiBgJHt0aGlzLmFzcGVjdFJhdGlvfWA7XG4gIH1cblxuICBnZXQgY29uZmlybUZvb3RlckJ1dHRvbnMoKTogTW9kYWxCdXR0b25bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdwcm9maWxlLXBpY3R1cmUtY29uZmlybS1yZWplY3QnLFxuICAgICAgICBsYWJlbDogdGhpcy5jb25maXJtUmVqZWN0TGFiZWwsXG4gICAgICAgIHNldmVyaXR5OiAnc2Vjb25kYXJ5JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnJlamVjdFBlbmRpbmdJbWFnZSgpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3Byb2ZpbGUtcGljdHVyZS1jb25maXJtLWFjY2VwdCcsXG4gICAgICAgIGxhYmVsOiB0aGlzLmNvbmZpcm1BY2NlcHRMYWJlbCxcbiAgICAgICAgc2V2ZXJpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmFjY2VwdFBlbmRpbmdJbWFnZSgpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIG9uQXZhdGFyQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzSW1hZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTtcbiAgfVxuXG4gIG9uQWN0aW9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUNsaWNrKCk7XG4gIH1cblxuICBvbkNoYW5nZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkZpbGVTZWxlY3RvcigpO1xuICB9XG5cbiAgb25SZW1vdmVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbWFnZSA9IG51bGw7XG4gICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMucmVtb3ZlZEltYWdlLmVtaXQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG5cbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8ICFmaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdmFsdWUgc28gc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgdGhpcy5wcm9jZXNzRmlsZShmaWxlKTtcbiAgfVxuXG4gIG9uRHJhZ0VudGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5oYXNEcmFnZ2VkRmlsZShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWdBY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkRyYWdFbnRlcihldmVudCk7XG4gIH1cblxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSB8IG51bGw7XG5cbiAgICBpZiAocmVsYXRlZFRhcmdldCAmJiAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGwpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZHJhZ0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzRmlsZShmaWxlKTtcbiAgfVxuXG4gIG9uQ29uZmlybVZpc2libGVDaGFuZ2UodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybVZpc2libGUgPSB2aXNpYmxlO1xuXG4gICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbWFnZURhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogUHJvZmlsZVBpY3R1cmVWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuX2ltYWdlID0gdmFsdWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFByb2ZpbGVQaWN0dXJlVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKF9pc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gRGlzYWJsZWQgc3RhdGUgaGFuZGxpbmcgY2FuIGJlIGV4dGVuZGVkIGluIHBoYXNlIDJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkZpbGVTZWxlY3RvcigpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dD8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZUZpbGUoZmlsZSk7XG5cbiAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aGlzLmludmFsaWRGaWxlLmVtaXQoeyBmaWxlLCB2YWxpZGF0aW9uOiB2YWxpZGF0aW9uRXJyb3IgfSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgYmFzZTY0ID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICB0aGlzLm9wZW5Dcm9wcGVyV2l0aEZpbGUoZmlsZSwgYmFzZTY0KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpbGUoZmlsZTogRmlsZSk6IGltcG9ydCgnLi4vLi4vY29yZS90eXBlcy9wcm9maWxlLXBpY3R1cmUtcGlja2VyLnR5cGUnKS5GaWxlVmFsaWRhdGlvbiB8IG51bGwge1xuICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gICAgICByZXR1cm4gJ3R5cGVJbnZhbGlkJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4dCA9IHRoaXMuZ2V0RXh0ZW5zaW9uKGZpbGUubmFtZSk7XG4gICAgICBjb25zdCBzdXBwb3J0ZWRFeHRlbnNpb25zID0gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLm1hcCgoZW50cnkpID0+IHRoaXMubm9ybWFsaXplRXh0ZW5zaW9uKGVudHJ5KSk7XG4gICAgICBpZiAoIXN1cHBvcnRlZEV4dGVuc2lvbnMuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkRXh0ZW5zaW9uJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhGaWxlU2l6ZSAhPT0gdW5kZWZpbmVkICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHtcbiAgICAgIHJldHVybiAnbWF4RmlsZVNpemUnO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRlbnNpb24oZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlbmFtZS5zcGxpdCgnLicpO1xuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxID8gdGhpcy5ub3JtYWxpemVFeHRlbnNpb24ocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIDogJyc7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUV4dGVuc2lvbihleHRlbnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGV4dGVuc2lvbi50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZC5zdGFydHNXaXRoKCcuJykgPyBub3JtYWxpemVkIDogYC4ke25vcm1hbGl6ZWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkNyb3BwZXJXaXRoRmlsZShmaWxlOiBGaWxlLCBiYXNlNjQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW1hZ2VDcm9wcGVyU2VydmljZS5zaG93KHtcbiAgICAgIGltYWdlU291cmNlOiBiYXNlNjQsXG4gICAgICBhc3BlY3RSYXRpbzogdGhpcy5hc3BlY3RSYXRpbyxcbiAgICAgIHJvdW5kZWQ6IHRoaXMudXNlc1JvdW5kZWRDcm9wLFxuICAgICAgYWxsb3dSZW1vdmU6IGZhbHNlLFxuICAgICAgYWxsb3dTZWxlY3RBbm90aGVyOiB0cnVlLFxuICAgICAgY2hhbmdlSW1hZ2U6ICgpID0+IHRoaXMub3BlbkZpbGVTZWxlY3RvcigpLFxuICAgICAgY3JvcHBlZEltYWdlOiAoY3JvcHBlZEJhc2U2NDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSA9IHtcbiAgICAgICAgICBzb3VyY2U6IGZpbGUsXG4gICAgICAgICAgYmFzZTY0OiBjcm9wcGVkQmFzZTY0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFuZGxlQ3JvcHBlZEltYWdlRGF0YShkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ3JvcHBlZEltYWdlRGF0YShkYXRhOiBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybUJlZm9yZUFwcGx5KSB7XG4gICAgICB0aGlzLmFwcGx5SW1hZ2VEYXRhKGRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0ltYWdlRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jb25maXJtVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW1hZ2VEYXRhKGRhdGE6IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSk6IHZvaWQge1xuICAgIHRoaXMuX2ltYWdlID0gZGF0YTtcbiAgICB0aGlzLm9uQ2hhbmdlKGRhdGEpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5pbWFnZUNoYW5nZS5lbWl0KGRhdGEpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY2NlcHRQZW5kaW5nSW1hZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0ltYWdlRGF0YSkge1xuICAgICAgdGhpcy5hcHBseUltYWdlRGF0YSh0aGlzLnBlbmRpbmdJbWFnZURhdGEpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0ltYWdlRGF0YSA9IG51bGw7XG4gICAgdGhpcy5jb25maXJtVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWplY3RQZW5kaW5nSW1hZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nSW1hZ2VEYXRhID0gbnVsbDtcbiAgICB0aGlzLmNvbmZpcm1WaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGhhc0RyYWdnZWRGaWxlKGV2ZW50OiBEcmFnRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8udHlwZXM7XG4gICAgcmV0dXJuICEhdHlwZXMgJiYgQXJyYXkuZnJvbSh0eXBlcykuaW5jbHVkZXMoJ0ZpbGVzJyk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlclwiXG4gIFtjbGFzcy5zZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlci0tZHJhZ292ZXJdPVwiZHJhZ0FjdGl2ZVwiXG4gIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiXG4gIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19hdmF0YXJcIlxuICAgIFtjbGFzcy5zZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlcl9fYXZhdGFyLS1jbGlja2FibGVdPVwiIWhhc0ltYWdlXCJcbiAgICAoY2xpY2spPVwib25BdmF0YXJDbGljaygpXCJcbiAgICBbZGlzYWJsZWRdPVwiaGFzSW1hZ2VcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb2x2ZWRBY3Rpb25UaXRsZSB8IHRyYW5zbGF0ZVwiXG4gID5cbiAgICBAaWYgKGhhc0ltYWdlKSB7XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwic2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2F2YXRhci1pbWdcIlxuICAgICAgICBbc3JjXT1cImltYWdlQmFzZTY0XCJcbiAgICAgICAgd2lkdGg9XCIxMjhcIlxuICAgICAgICBoZWlnaHQ9XCIxMjhcIlxuICAgICAgICBhbHQ9XCJcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLXVzZXIgc2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2F2YXRhci1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgIH1cbiAgPC9idXR0b24+XG5cbiAgPGRpdiBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19pbmZvXCI+XG4gICAgQGlmIChoYXNJbWFnZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19idXR0b25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19idG4gc2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2J0bi0tY2hhbmdlXCJcbiAgICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VDbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHJlc29sdmVkQ2hhbmdlTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2J0biBzZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlcl9fYnRuLS1yZW1vdmVcIlxuICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcmVzb2x2ZWRSZW1vdmVMYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX190aXRsZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19zaW1wbGUtdGl0bGVcIj57eyByZXNvbHZlZFNpbXBsZVRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlcl9fYWN0aW9uIGFjdGlvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyByZXNvbHZlZEFjdGlvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChzdWJ0aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19zdWJ0aXRsZVwiPlxuICAgICAgICB7eyBzdWJ0aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8aW5wdXRcbiAgICAjZmlsZUlucHV0XG4gICAgW2lkXT1cIidwcm9maWxlLXBpY3R1cmUtaW5wdXQtJyArIGNvbXBvbmVudElkXCJcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgY2xhc3M9XCJzZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlcl9fZmlsZS1pbnB1dFwiXG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb2x2ZWRBY3Rpb25UaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAvPlxuXG4gIDxzZGMtbW9kYWxcbiAgICBbdmlzaWJsZV09XCJjb25maXJtVmlzaWJsZVwiXG4gICAgKHZpc2libGVDaGFuZ2UpPVwib25Db25maXJtVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbaGVhZGVyXT1cImNvbmZpcm1UaXRsZVwiXG4gICAgW3dpZHRoXT1cIiczMy43NXJlbSdcIlxuICAgIFtjbG9zYWJsZV09XCJ0cnVlXCJcbiAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgIFtyZXNwb25zaXZlXT1cInRydWVcIlxuICAgIFthcHBlbmRUb0JvZHldPVwidHJ1ZVwiXG4gICAgW2Zvb3RlckJ1dHRvbnNdPVwiY29uZmlybUZvb3RlckJ1dHRvbnNcIlxuICAgIHN0eWxlQ2xhc3M9XCJzZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlcl9fY29uZmlybS1tb2RhbFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2NvbmZpcm0tY29udGVudFwiPlxuICAgICAgPHAgY2xhc3M9XCJzZGMtcHJvZmlsZS1waWN0dXJlLXBpY2tlcl9fY29uZmlybS1tZXNzYWdlXCI+XG4gICAgICAgIHt7IGNvbmZpcm1NZXNzYWdlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG5cbiAgICAgIEBpZiAoY29uZmlybVByZXZpZXcpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2NvbmZpcm0tcHJldmlld1wiXG4gICAgICAgICAgW2NsYXNzLnNkYy1wcm9maWxlLXBpY3R1cmUtcGlja2VyX19jb25maXJtLXByZXZpZXctLXJvdW5kZWRdPVwidXNlc1JvdW5kZWRDcm9wXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwic2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2NvbmZpcm0tcHJldmlldy1pbWFnZVwiXG4gICAgICAgICAgICBbY2xhc3Muc2RjLXByb2ZpbGUtcGljdHVyZS1waWNrZXJfX2NvbmZpcm0tcHJldmlldy1pbWFnZS0tcm91bmRlZF09XCJ1c2VzUm91bmRlZENyb3BcIlxuICAgICAgICAgICAgW3N0eWxlLmFzcGVjdC1yYXRpb109XCJjb25maXJtUHJldmlld0FzcGVjdFJhdGlvXCJcbiAgICAgICAgICAgIFtzcmNdPVwiY29uZmlybVByZXZpZXdcIlxuICAgICAgICAgICAgYWx0PVwicHJldmlld1wiXG4gICAgICAgICAgICB3aWR0aD1cIjI4MFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyODBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L3NkYy1tb2RhbD5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewEncapsulation, forwardRef, inject } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { RATING_SCALE_ARIA_LABEL_KEY } from '../../core/constants/rating-scale.const';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
8
|
+
export class RatingScaleComponent {
|
|
9
|
+
cdr = inject(ChangeDetectorRef);
|
|
10
|
+
translate = inject(TranslateService);
|
|
11
|
+
nodes = [];
|
|
12
|
+
startLabel;
|
|
13
|
+
endLabel;
|
|
14
|
+
disabled = false;
|
|
15
|
+
value = null;
|
|
16
|
+
onChangeFn = () => { };
|
|
17
|
+
onTouchedFn = () => { };
|
|
18
|
+
get groupAriaLabel() {
|
|
19
|
+
if (this.startLabel && this.endLabel) {
|
|
20
|
+
return `${this.translate.instant(this.startLabel)} - ${this.translate.instant(this.endLabel)}`;
|
|
21
|
+
}
|
|
22
|
+
if (this.startLabel) {
|
|
23
|
+
return this.translate.instant(this.startLabel);
|
|
24
|
+
}
|
|
25
|
+
if (this.endLabel) {
|
|
26
|
+
return this.translate.instant(this.endLabel);
|
|
27
|
+
}
|
|
28
|
+
return this.translate.instant(RATING_SCALE_ARIA_LABEL_KEY);
|
|
29
|
+
}
|
|
30
|
+
isSelected(node) {
|
|
31
|
+
return this.value?.id === node.id;
|
|
32
|
+
}
|
|
33
|
+
getNodeAriaLabel(node) {
|
|
34
|
+
return node.title ? this.translate.instant(node.title) : node.id;
|
|
35
|
+
}
|
|
36
|
+
selectNode(node) {
|
|
37
|
+
if (this.disabled) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.value = node;
|
|
41
|
+
this.onChangeFn(node);
|
|
42
|
+
this.onTouchedFn();
|
|
43
|
+
this.cdr.markForCheck();
|
|
44
|
+
}
|
|
45
|
+
writeValue(value) {
|
|
46
|
+
this.value = value ?? null;
|
|
47
|
+
this.cdr.markForCheck();
|
|
48
|
+
}
|
|
49
|
+
registerOnChange(fn) {
|
|
50
|
+
this.onChangeFn = fn;
|
|
51
|
+
}
|
|
52
|
+
registerOnTouched(fn) {
|
|
53
|
+
this.onTouchedFn = fn;
|
|
54
|
+
}
|
|
55
|
+
setDisabledState(isDisabled) {
|
|
56
|
+
this.disabled = isDisabled;
|
|
57
|
+
this.cdr.markForCheck();
|
|
58
|
+
}
|
|
59
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RatingScaleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RatingScaleComponent, isStandalone: true, selector: "sdc-rating-scale", inputs: { nodes: "nodes", startLabel: "startLabel", endLabel: "endLabel", disabled: "disabled" }, providers: [
|
|
61
|
+
{
|
|
62
|
+
provide: NG_VALUE_ACCESSOR,
|
|
63
|
+
useExisting: forwardRef(() => RatingScaleComponent),
|
|
64
|
+
multi: true
|
|
65
|
+
}
|
|
66
|
+
], ngImport: i0, template: "<div\n class=\"sdc-rating-scale\"\n [class.sdc-rating-scale--disabled]=\"disabled\"\n>\n <div class=\"sdc-rating-scale__track\">\n @if (startLabel) {\n <span class=\"sdc-rating-scale__extreme-label sdc-rating-scale__extreme-label--start\">\n {{ startLabel | translate }}\n </span>\n }\n\n <div\n class=\"sdc-rating-scale__nodes\"\n role=\"radiogroup\"\n [attr.aria-label]=\"groupAriaLabel\"\n [attr.aria-disabled]=\"disabled\"\n >\n @for (node of nodes; track node.id) {\n <button\n type=\"button\"\n class=\"sdc-rating-scale__node\"\n [class.sdc-rating-scale__node--selected]=\"isSelected(node)\"\n [attr.aria-label]=\"getNodeAriaLabel(node)\"\n [disabled]=\"disabled\"\n (click)=\"selectNode(node)\"\n >\n @if (node.icon) {\n <i class=\"sdc-rating-scale__node-icon fa {{ node.icon }}\" aria-hidden=\"true\"></i>\n }\n\n @if (node.title) {\n <span class=\"sdc-rating-scale__node-title\">{{ node.title | translate }}</span>\n }\n </button>\n }\n </div>\n\n @if (endLabel) {\n <span class=\"sdc-rating-scale__extreme-label sdc-rating-scale__extreme-label--end\">\n {{ endLabel | translate }}\n </span>\n }\n </div>\n</div>\n", styles: [":host{display:block}.sdc-rating-scale{--sdc-rating-scale-node-bg: #fff;--sdc-rating-scale-node-border: #7892a1;--sdc-rating-scale-node-radius: 6px;--sdc-rating-scale-node-selected-bg: #d5e8ec;--sdc-rating-scale-node-selected-border: #428bca;--sdc-rating-scale-node-selected-color: #428bca;--sdc-rating-scale-node-hover-bg: #dedce5;--sdc-rating-scale-icon-color: #6e7280;--sdc-rating-scale-label-color: #212533;--sdc-rating-scale-extreme-label-color: #080808;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif)}.sdc-rating-scale--disabled{cursor:not-allowed;opacity:.65}.sdc-rating-scale__track{align-items:center;display:flex;gap:.75rem}.sdc-rating-scale__nodes{align-items:center;display:flex;flex:1;gap:.5rem;justify-content:center}.sdc-rating-scale__node{align-items:center;background:var(--sdc-rating-scale-node-bg);border:1px solid var(--sdc-rating-scale-node-border);border-radius:var(--sdc-rating-scale-node-radius);box-sizing:border-box;color:var(--sdc-rating-scale-label-color);cursor:pointer;display:inline-flex;flex:1 1 0%;flex-direction:column;font-family:inherit;font-size:.875rem;gap:.25rem;justify-content:center;max-width:5.5rem;min-height:2.5rem;min-width:2.5rem;padding:.375rem .5rem;transition:background var(--sdc-transition-fast, .18s ease),border-color var(--sdc-transition-fast, .18s ease),color var(--sdc-transition-fast, .18s ease)}.sdc-rating-scale__node:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-rating-scale__node:disabled{cursor:not-allowed;pointer-events:none}.sdc-rating-scale__node:hover:not(:disabled){background:var(--sdc-rating-scale-node-hover-bg)}.sdc-rating-scale__node--selected{background:var(--sdc-rating-scale-node-selected-bg);border-color:var(--sdc-rating-scale-node-selected-border);color:var(--sdc-rating-scale-node-selected-color)}.sdc-rating-scale__node-icon{color:var(--sdc-rating-scale-icon-color);font-size:1.125rem}.sdc-rating-scale__node--selected .sdc-rating-scale__node-icon{color:var(--sdc-rating-scale-node-selected-color)}.sdc-rating-scale__node-title{font-size:.75rem;line-height:1}.sdc-rating-scale__extreme-label{color:var(--sdc-rating-scale-extreme-label-color);font-size:.75rem;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
67
|
+
}
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RatingScaleComponent, decorators: [{
|
|
69
|
+
type: Component,
|
|
70
|
+
args: [{ selector: 'sdc-rating-scale', standalone: true, imports: [CommonModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, providers: [
|
|
71
|
+
{
|
|
72
|
+
provide: NG_VALUE_ACCESSOR,
|
|
73
|
+
useExisting: forwardRef(() => RatingScaleComponent),
|
|
74
|
+
multi: true
|
|
75
|
+
}
|
|
76
|
+
], template: "<div\n class=\"sdc-rating-scale\"\n [class.sdc-rating-scale--disabled]=\"disabled\"\n>\n <div class=\"sdc-rating-scale__track\">\n @if (startLabel) {\n <span class=\"sdc-rating-scale__extreme-label sdc-rating-scale__extreme-label--start\">\n {{ startLabel | translate }}\n </span>\n }\n\n <div\n class=\"sdc-rating-scale__nodes\"\n role=\"radiogroup\"\n [attr.aria-label]=\"groupAriaLabel\"\n [attr.aria-disabled]=\"disabled\"\n >\n @for (node of nodes; track node.id) {\n <button\n type=\"button\"\n class=\"sdc-rating-scale__node\"\n [class.sdc-rating-scale__node--selected]=\"isSelected(node)\"\n [attr.aria-label]=\"getNodeAriaLabel(node)\"\n [disabled]=\"disabled\"\n (click)=\"selectNode(node)\"\n >\n @if (node.icon) {\n <i class=\"sdc-rating-scale__node-icon fa {{ node.icon }}\" aria-hidden=\"true\"></i>\n }\n\n @if (node.title) {\n <span class=\"sdc-rating-scale__node-title\">{{ node.title | translate }}</span>\n }\n </button>\n }\n </div>\n\n @if (endLabel) {\n <span class=\"sdc-rating-scale__extreme-label sdc-rating-scale__extreme-label--end\">\n {{ endLabel | translate }}\n </span>\n }\n </div>\n</div>\n", styles: [":host{display:block}.sdc-rating-scale{--sdc-rating-scale-node-bg: #fff;--sdc-rating-scale-node-border: #7892a1;--sdc-rating-scale-node-radius: 6px;--sdc-rating-scale-node-selected-bg: #d5e8ec;--sdc-rating-scale-node-selected-border: #428bca;--sdc-rating-scale-node-selected-color: #428bca;--sdc-rating-scale-node-hover-bg: #dedce5;--sdc-rating-scale-icon-color: #6e7280;--sdc-rating-scale-label-color: #212533;--sdc-rating-scale-extreme-label-color: #080808;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif)}.sdc-rating-scale--disabled{cursor:not-allowed;opacity:.65}.sdc-rating-scale__track{align-items:center;display:flex;gap:.75rem}.sdc-rating-scale__nodes{align-items:center;display:flex;flex:1;gap:.5rem;justify-content:center}.sdc-rating-scale__node{align-items:center;background:var(--sdc-rating-scale-node-bg);border:1px solid var(--sdc-rating-scale-node-border);border-radius:var(--sdc-rating-scale-node-radius);box-sizing:border-box;color:var(--sdc-rating-scale-label-color);cursor:pointer;display:inline-flex;flex:1 1 0%;flex-direction:column;font-family:inherit;font-size:.875rem;gap:.25rem;justify-content:center;max-width:5.5rem;min-height:2.5rem;min-width:2.5rem;padding:.375rem .5rem;transition:background var(--sdc-transition-fast, .18s ease),border-color var(--sdc-transition-fast, .18s ease),color var(--sdc-transition-fast, .18s ease)}.sdc-rating-scale__node:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-rating-scale__node:disabled{cursor:not-allowed;pointer-events:none}.sdc-rating-scale__node:hover:not(:disabled){background:var(--sdc-rating-scale-node-hover-bg)}.sdc-rating-scale__node--selected{background:var(--sdc-rating-scale-node-selected-bg);border-color:var(--sdc-rating-scale-node-selected-border);color:var(--sdc-rating-scale-node-selected-color)}.sdc-rating-scale__node-icon{color:var(--sdc-rating-scale-icon-color);font-size:1.125rem}.sdc-rating-scale__node--selected .sdc-rating-scale__node-icon{color:var(--sdc-rating-scale-node-selected-color)}.sdc-rating-scale__node-title{font-size:.75rem;line-height:1}.sdc-rating-scale__extreme-label{color:var(--sdc-rating-scale-extreme-label-color);font-size:.75rem;white-space:nowrap}\n"] }]
|
|
77
|
+
}], propDecorators: { nodes: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], startLabel: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], endLabel: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], disabled: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}] } });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLXNjYWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvcmF0aW5nLXNjYWxlL3JhdGluZy1zY2FsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3JhdGluZy1zY2FsZS9yYXRpbmctc2NhbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7O0FBbUJ0RixNQUFNLE9BQU8sb0JBQW9CO0lBQ2QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU3QyxLQUFLLEdBQXNCLEVBQUUsQ0FBQztJQUM5QixVQUFVLENBQVU7SUFDcEIsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFMUIsS0FBSyxHQUEyQixJQUFJLENBQUM7SUFFN0IsVUFBVSxHQUE0QyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDL0QsV0FBVyxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUzQyxJQUFJLGNBQWM7UUFDaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElB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Q0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBSQVRJTkdfU0NBTEVfQVJJQV9MQUJFTF9LRVkgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9yYXRpbmctc2NhbGUuY29uc3QnO1xuaW1wb3J0IHR5cGUgeyBSYXRpbmdTY2FsZU5vZGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3JhdGluZy1zY2FsZS50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXJhdGluZy1zY2FsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yYXRpbmctc2NhbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmF0aW5nLXNjYWxlLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhdGluZ1NjYWxlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJhdGluZ1NjYWxlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIG5vZGVzOiBSYXRpbmdTY2FsZU5vZGVbXSA9IFtdO1xuICBASW5wdXQoKSBzdGFydExhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBlbmRMYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICB2YWx1ZTogUmF0aW5nU2NhbGVOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUZuOiAodmFsdWU6IFJhdGluZ1NjYWxlTm9kZSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWRGbjogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGdldCBncm91cEFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnN0YXJ0TGFiZWwgJiYgdGhpcy5lbmRMYWJlbCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5zdGFydExhYmVsKX0gLSAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5lbmRMYWJlbCl9YDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydExhYmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLnN0YXJ0TGFiZWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZExhYmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmVuZExhYmVsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChSQVRJTkdfU0NBTEVfQVJJQV9MQUJFTF9LRVkpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChub2RlOiBSYXRpbmdTY2FsZU5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZT8uaWQgPT09IG5vZGUuaWQ7XG4gIH1cblxuICBnZXROb2RlQXJpYUxhYmVsKG5vZGU6IFJhdGluZ1NjYWxlTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUudGl0bGUgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KG5vZGUudGl0bGUpIDogbm9kZS5pZDtcbiAgfVxuXG4gIHNlbGVjdE5vZGUobm9kZTogUmF0aW5nU2NhbGVOb2RlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gbm9kZTtcbiAgICB0aGlzLm9uQ2hhbmdlRm4obm9kZSk7XG4gICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogUmF0aW5nU2NhbGVOb2RlIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSA/PyBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBSYXRpbmdTY2FsZU5vZGUgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2RjLXJhdGluZy1zY2FsZVwiXG4gIFtjbGFzcy5zZGMtcmF0aW5nLXNjYWxlLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzZGMtcmF0aW5nLXNjYWxlX190cmFja1wiPlxuICAgIEBpZiAoc3RhcnRMYWJlbCkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcmF0aW5nLXNjYWxlX19leHRyZW1lLWxhYmVsIHNkYy1yYXRpbmctc2NhbGVfX2V4dHJlbWUtbGFiZWwtLXN0YXJ0XCI+XG4gICAgICAgIHt7IHN0YXJ0TGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNkYy1yYXRpbmctc2NhbGVfX25vZGVzXCJcbiAgICAgIHJvbGU9XCJyYWRpb2dyb3VwXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ3JvdXBBcmlhTGFiZWxcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgPlxuICAgICAgQGZvciAobm9kZSBvZiBub2RlczsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtcmF0aW5nLXNjYWxlX19ub2RlXCJcbiAgICAgICAgICBbY2xhc3Muc2RjLXJhdGluZy1zY2FsZV9fbm9kZS0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXROb2RlQXJpYUxhYmVsKG5vZGUpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3ROb2RlKG5vZGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAobm9kZS5pY29uKSB7XG4gICAgICAgICAgICA8aSBjbGFzcz1cInNkYy1yYXRpbmctc2NhbGVfX25vZGUtaWNvbiBmYSB7eyBub2RlLmljb24gfX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChub2RlLnRpdGxlKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1yYXRpbmctc2NhbGVfX25vZGUtdGl0bGVcIj57eyBub2RlLnRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGVuZExhYmVsKSB7XG4gICAgICA8c3BhbiBjbGFzcz1cInNkYy1yYXRpbmctc2NhbGVfX2V4dHJlbWUtbGFiZWwgc2RjLXJhdGluZy1zY2FsZV9fZXh0cmVtZS1sYWJlbC0tZW5kXCI+XG4gICAgICAgIHt7IGVuZExhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|