barsa-sap-ui 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/barsa-sap-ui.mjs +419 -367
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-bar-download-file/barsa-bar-download-file.component.d.ts +10 -0
- package/lib/barsa-sap-ui.module.d.ts +237 -236
- package/lib/file-viewer-popover/file-viewer-popover.component.d.ts +1 -1
- package/lib/ui-map/ui-map.component.d.ts +2 -0
- package/package.json +3 -5
- package/public-api.d.ts +1 -0
- package/esm2022/barsa-sap-ui.mjs +0 -5
- package/esm2022/lib/apply-conditional-formmatings.directive.mjs +0 -89
- package/esm2022/lib/avatar-size.pipe.mjs +0 -40
- package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +0 -41
- package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +0 -145
- package/esm2022/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +0 -23
- package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +0 -29
- package/esm2022/lib/barsa-breadcrumbs/barsa-breadcrumbs.component.mjs +0 -24
- package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +0 -24
- package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +0 -31
- package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +0 -41
- package/esm2022/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +0 -24
- package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +0 -242
- package/esm2022/lib/barsa-chat/chat.model.mjs +0 -8
- package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +0 -13
- package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +0 -22
- package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +0 -66
- package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +0 -78
- package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +0 -22
- package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +0 -13
- package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +0 -15
- package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +0 -72
- package/esm2022/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +0 -23
- package/esm2022/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +0 -14
- package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +0 -14
- package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +0 -26
- package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +0 -71
- package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +0 -40
- package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +0 -61
- package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +0 -45
- package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +0 -58
- package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +0 -27
- package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +0 -94
- package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +0 -22
- package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +0 -37
- package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +0 -41
- package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +0 -29
- package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +0 -23
- package/esm2022/lib/barsa-modal/barsa-modal.component.mjs +0 -43
- package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +0 -83
- package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +0 -57
- package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +0 -159
- package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +0 -17
- package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +0 -30
- package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +0 -14
- package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +0 -34
- package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +0 -46
- package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +0 -79
- package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +0 -30
- package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +0 -31
- package/esm2022/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +0 -28
- package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +0 -102
- package/esm2022/lib/barsa-row-inline-actionlist/barsa-row-inline-actionlist.component.mjs +0 -26
- package/esm2022/lib/barsa-sap-ui-routing.module.mjs +0 -18
- package/esm2022/lib/barsa-sap-ui.module.mjs +0 -374
- package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +0 -29
- package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +0 -170
- package/esm2022/lib/barsa-tab-route-manager/barsa-tab-route-manager.component.mjs +0 -18
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +0 -29
- package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +0 -222
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +0 -87
- package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +0 -60
- package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +0 -26
- package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +0 -23
- package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +0 -37
- package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +0 -418
- package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +0 -36
- package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +0 -153
- package/esm2022/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +0 -19
- package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +0 -216
- package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +0 -74
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -50
- package/esm2022/lib/captcha-field/captcha-field.component.mjs +0 -28
- package/esm2022/lib/card-item/card-item.component.mjs +0 -64
- package/esm2022/lib/card-view-content/card-view-content.component.mjs +0 -46
- package/esm2022/lib/col-renderer.directive.mjs +0 -46
- package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +0 -56
- package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +0 -60
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +0 -88
- package/esm2022/lib/constants.mjs +0 -425
- package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +0 -41
- package/esm2022/lib/device-info-field-base.mjs +0 -23
- package/esm2022/lib/dialog-handler.directive.mjs +0 -28
- package/esm2022/lib/download-files.directive.mjs +0 -33
- package/esm2022/lib/dynamic-page-size.pipe.mjs +0 -26
- package/esm2022/lib/file-in-dialog/file-in-dialog.component.mjs +0 -44
- package/esm2022/lib/file-viewer/file-viewer.component.mjs +0 -47
- package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +0 -71
- package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +0 -39
- package/esm2022/lib/form-dialog/form-dialog.component.mjs +0 -171
- package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +0 -50
- package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +0 -62
- package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +0 -45
- package/esm2022/lib/form-wizard/form-wizard.component.mjs +0 -21
- package/esm2022/lib/fullscreen-dialog.directive.mjs +0 -59
- package/esm2022/lib/fullscreen-files.directive.mjs +0 -42
- package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +0 -213
- package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +0 -215
- package/esm2022/lib/global-search/global-search.component.mjs +0 -27
- package/esm2022/lib/global-search-module/global-search-module.component.mjs +0 -29
- package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +0 -25
- package/esm2022/lib/header-avatar/header-avatar.component.mjs +0 -18
- package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +0 -48
- package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -23
- package/esm2022/lib/index.mjs +0 -543
- package/esm2022/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +0 -32
- package/esm2022/lib/layout-actions/layout-actions.component.mjs +0 -70
- package/esm2022/lib/layout-control/layout-control.component.mjs +0 -302
- package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +0 -183
- package/esm2022/lib/list-item/list-item.component.mjs +0 -34
- package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +0 -42
- package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +0 -82
- package/esm2022/lib/ly-label/ly-label.component.mjs +0 -37
- package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +0 -83
- package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +0 -17
- package/esm2022/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +0 -24
- package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +0 -83
- package/esm2022/lib/ly-line/ly-line.component.mjs +0 -56
- package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +0 -22
- package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +0 -45
- package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +0 -44
- package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +0 -51
- package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +0 -43
- package/esm2022/lib/mask/mask.component.mjs +0 -22
- package/esm2022/lib/message-strip/message-strip.component.mjs +0 -28
- package/esm2022/lib/models/grid-data-provider.mjs +0 -114
- package/esm2022/lib/models/grid-view.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -2
- package/esm2022/lib/no-data/no-data.component.mjs +0 -31
- package/esm2022/lib/notification-item/notification-item.component.mjs +0 -57
- package/esm2022/lib/notification-popup.service.mjs +0 -92
- package/esm2022/lib/object-status-icon.pipe.mjs +0 -26
- package/esm2022/lib/progress-indicator/progress-indicator.component.mjs +0 -18
- package/esm2022/lib/report-navigator/report-navigator.component.mjs +0 -68
- package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +0 -60
- package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +0 -35
- package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +0 -97
- package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +0 -88
- package/esm2022/lib/report-tree-base.mjs +0 -386
- package/esm2022/lib/report-view-renderer.directive.mjs +0 -385
- package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +0 -50
- package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +0 -84
- package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +0 -72
- package/esm2022/lib/sap-font-class.pipe.mjs +0 -29
- package/esm2022/lib/sap-font.pipe.mjs +0 -29
- package/esm2022/lib/sap-size.pipe.mjs +0 -27
- package/esm2022/lib/sap-ui-report-base.component.mjs +0 -805
- package/esm2022/lib/search-panel/search-panel.component.mjs +0 -63
- package/esm2022/lib/static-text/static-text.component.mjs +0 -15
- package/esm2022/lib/table-th.directive.mjs +0 -86
- package/esm2022/lib/title/title.component.mjs +0 -15
- package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +0 -34
- package/esm2022/lib/ui-bpmn-viewer/ui-bpmn-viewer.component.mjs +0 -33
- package/esm2022/lib/ui-button/ui-button.component.mjs +0 -32
- package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +0 -53
- package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +0 -57
- package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +0 -42
- package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +0 -39
- package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +0 -50
- package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +0 -38
- package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +0 -191
- package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +0 -150
- package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +0 -110
- package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +0 -53
- package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +0 -121
- package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +0 -100
- package/esm2022/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +0 -32
- package/esm2022/lib/ui-graph/ui-graph.component.mjs +0 -17
- package/esm2022/lib/ui-grid/ui-grid.component.mjs +0 -25
- package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +0 -43
- package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +0 -66
- package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +0 -75
- package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +0 -58
- package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +0 -123
- package/esm2022/lib/ui-html-viewer/ui-html-viewer.component.mjs +0 -16
- package/esm2022/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +0 -11
- package/esm2022/lib/ui-label/ui-label.component.mjs +0 -12
- package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +0 -379
- package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +0 -84
- package/esm2022/lib/ui-map/ui-map.component.mjs +0 -58
- package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +0 -124
- package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +0 -19
- package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +0 -14
- package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +0 -55
- package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +0 -429
- package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +0 -28
- package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +0 -37
- package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +0 -59
- package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +0 -93
- package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +0 -36
- package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +0 -56
- package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +0 -28
- package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +0 -33
- package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +0 -27
- package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +0 -21
- package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +0 -268
- package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +0 -101
- package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +0 -261
- package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +0 -48
- package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +0 -36
- package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +0 -46
- package/esm2022/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +0 -24
- package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +0 -55
- package/esm2022/lib/ui-single-picture/ui-single-picture.component.mjs +0 -36
- package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +0 -20
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +0 -289
- package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +0 -49
- package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +0 -52
- package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +0 -48
- package/esm2022/lib/ui-time-span/ui-time-span.component.mjs +0 -24
- package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +0 -53
- package/esm2022/lib/ui-tree/ui-tree.component.mjs +0 -114
- package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +0 -100
- package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +0 -23
- package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +0 -306
- package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +0 -25
- package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +0 -93
- package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +0 -119
- package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +0 -32
- package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +0 -48
- package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +0 -53
- package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +0 -114
- package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +0 -43
- package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +0 -196
- package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +0 -44
- package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +0 -84
- package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +0 -65
- package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +0 -116
- package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +0 -54
- package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +0 -174
- package/esm2022/lib/upload-file-status.pipe.mjs +0 -28
- package/esm2022/lib/util-chat-time-badge.pipe.mjs +0 -18
- package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +0 -23
- package/esm2022/lib/wizard-layout.directive.mjs +0 -103
- package/esm2022/public-api.mjs +0 -233
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, HostListener, Input, TemplateRef, ViewChild } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
-
import { debounceTime, map, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
-
import { MultiInputComponent } from '@fundamental-ngx/core';
|
|
5
|
-
import { BarsaApi } from 'barsa-novin-ray-core';
|
|
6
|
-
import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/forms";
|
|
9
|
-
import * as i2 from "barsa-novin-ray-core";
|
|
10
|
-
import * as i3 from "@fundamental-ngx/core/bar";
|
|
11
|
-
import * as i4 from "@fundamental-ngx/core/button";
|
|
12
|
-
import * as i5 from "@fundamental-ngx/core/dialog";
|
|
13
|
-
import * as i6 from "@fundamental-ngx/cdk/utils";
|
|
14
|
-
import * as i7 from "@fundamental-ngx/core/title";
|
|
15
|
-
import * as i8 from "@fundamental-ngx/core/multi-input";
|
|
16
|
-
import * as i9 from "@fundamental-ngx/core/toolbar";
|
|
17
|
-
import * as i10 from "@fundamental-ngx/core/token";
|
|
18
|
-
import * as i11 from "../ui-ulv-main-ui/ui-ulv-main-ui.component";
|
|
19
|
-
import * as i12 from "../fullscreen-dialog.directive";
|
|
20
|
-
import * as i13 from "@angular/common";
|
|
21
|
-
export class UiLinearListContainerWithButtonComponent extends DeviceInfoFieldBaseComponent {
|
|
22
|
-
constructor() {
|
|
23
|
-
super(...arguments);
|
|
24
|
-
this.mobile = false;
|
|
25
|
-
this.dropDownValuesSource = new BehaviorSubject([]);
|
|
26
|
-
this.dropDownValues$ = this.dropDownValuesSource.asObservable().pipe(map((moList) => {
|
|
27
|
-
const t = moList.filter((c) => this.value.find((d) => d.Id === c.Id) === undefined);
|
|
28
|
-
return t;
|
|
29
|
-
}), tap((moList) => (this.firstItem = {
|
|
30
|
-
$Caption: moList[0]?.$Caption,
|
|
31
|
-
Id: moList[0]?.Id,
|
|
32
|
-
Text: moList[0]?.$Caption,
|
|
33
|
-
Data: moList[0]
|
|
34
|
-
})), map((molist) => molist.map((c) => c.Id)));
|
|
35
|
-
this.report = null;
|
|
36
|
-
this.term = '';
|
|
37
|
-
this.termSource = new Subject();
|
|
38
|
-
this.rtl = BarsaApi.LoginFormData.IsRtl;
|
|
39
|
-
this.showUlvSource = new Subject();
|
|
40
|
-
this._setWidth = false;
|
|
41
|
-
this.displayFunc = (id) => {
|
|
42
|
-
const allItems = [...this.value, ...this.dropDownValuesSource.getValue()];
|
|
43
|
-
const existInValue = allItems.find((c) => c.Id === id);
|
|
44
|
-
if (existInValue) {
|
|
45
|
-
return existInValue.Text ?? existInValue.$Caption;
|
|
46
|
-
}
|
|
47
|
-
return '';
|
|
48
|
-
};
|
|
49
|
-
/* eslint-disable */
|
|
50
|
-
this.GetTextItemValue = () => this.term;
|
|
51
|
-
/* eslint-disable */
|
|
52
|
-
this.show = () => {
|
|
53
|
-
this._openUlv();
|
|
54
|
-
};
|
|
55
|
-
/* eslint-disable */
|
|
56
|
-
this.hide = () => {
|
|
57
|
-
this._changeDropDownOpenState(false);
|
|
58
|
-
};
|
|
59
|
-
/* eslint-disable */
|
|
60
|
-
this.hidden = () => {
|
|
61
|
-
return this.multiInputComponent && !this.multiInputComponent.open && !this.dialogOpen;
|
|
62
|
-
};
|
|
63
|
-
this.GetSelectionData = () => {
|
|
64
|
-
return this.multiInputComponent.selected;
|
|
65
|
-
/* eslint-disable */
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
set UlvUi(val) {
|
|
69
|
-
if (val) {
|
|
70
|
-
const moList = val.Setting.Data.MoDataList;
|
|
71
|
-
this.dropDownValuesSource.next(moList);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
const moList = [];
|
|
75
|
-
this.dropDownValuesSource.next(moList);
|
|
76
|
-
}
|
|
77
|
-
this._ulvUi = val;
|
|
78
|
-
}
|
|
79
|
-
onKeyEnter() {
|
|
80
|
-
if (this.term) {
|
|
81
|
-
if (!this.dropDownValuesSource.getValue().length) {
|
|
82
|
-
this.fireContextEvent('RequestCommand', this.context, 'New');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
onKeyDown() {
|
|
87
|
-
if (!this.term && this.hidden()) {
|
|
88
|
-
this.context.fireEvent('RequestFilter2');
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
onKeyEsc() {
|
|
92
|
-
this._changeDropDownOpenState(false);
|
|
93
|
-
}
|
|
94
|
-
ngOnInit() {
|
|
95
|
-
this.showUlvSource
|
|
96
|
-
.asObservable()
|
|
97
|
-
.pipe(takeUntil(this._onDestroy$))
|
|
98
|
-
.subscribe(() => this._openUlv());
|
|
99
|
-
super.ngOnInit();
|
|
100
|
-
this.report = this.Setting.Report;
|
|
101
|
-
this.originalMoList = [...this.value];
|
|
102
|
-
this.termSource
|
|
103
|
-
.asObservable()
|
|
104
|
-
.pipe(takeUntil(this._onDestroy$), debounceTime(200), tap((term) => {
|
|
105
|
-
this.term = term;
|
|
106
|
-
if (!term) {
|
|
107
|
-
this.dropDownValuesSource.next([]);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
this.context.fireEvent('RequestFilter', term);
|
|
111
|
-
}
|
|
112
|
-
}))
|
|
113
|
-
.subscribe();
|
|
114
|
-
// this.multiInputComponent.selected = this.originalMoList;
|
|
115
|
-
this._setIdsOMoByValue();
|
|
116
|
-
// const oldHanlde = this.multiInputComponent._addOnButtonClicked;
|
|
117
|
-
this.multiInputComponent._addOnButtonClicked = () => {
|
|
118
|
-
this._handleAddonButtonClicked();
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
ngAfterViewInit() {
|
|
122
|
-
super.ngAfterViewInit();
|
|
123
|
-
this._portalService.windowResize$.pipe(takeUntil(this._onDestroy$)).subscribe((c) => {
|
|
124
|
-
this._resizeTokenizer('100%');
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
this._resizeTokenizer();
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
onVisibilityChange(e) {
|
|
131
|
-
if (e === 'Visible' && !this._setWidth) {
|
|
132
|
-
this._setWidth = true;
|
|
133
|
-
this._resizeTokenizer();
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
_resizeTokenizer(width = '') {
|
|
137
|
-
const elDom = this._el.nativeElement;
|
|
138
|
-
const x = elDom.querySelector('fd-tokenizer');
|
|
139
|
-
if (!width && x) {
|
|
140
|
-
const wx = x.getBoundingClientRect().width;
|
|
141
|
-
if (!wx) {
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
width = `${wx}px`;
|
|
145
|
-
}
|
|
146
|
-
this._renderer2.setStyle(x, 'width', `${width}`);
|
|
147
|
-
}
|
|
148
|
-
valueFn(e) {
|
|
149
|
-
return e;
|
|
150
|
-
}
|
|
151
|
-
onSearchTermChange(term) {
|
|
152
|
-
this.termSource.next(term);
|
|
153
|
-
}
|
|
154
|
-
onOpenReport() {
|
|
155
|
-
this._triggerClicked = true;
|
|
156
|
-
if (this.report) {
|
|
157
|
-
this.termSource.next('');
|
|
158
|
-
}
|
|
159
|
-
this.context.fireEvent('TriggerClick', this.context);
|
|
160
|
-
}
|
|
161
|
-
onSelectedChange(arr) {
|
|
162
|
-
this._selectedChanged(arr);
|
|
163
|
-
}
|
|
164
|
-
onRemoveSelected(mo) {
|
|
165
|
-
this._removeFromSelected(mo);
|
|
166
|
-
this._ulvUi.viewerControl.DeSelectRecords([mo]);
|
|
167
|
-
// this._ulvUi.viewerControl.fireEvent('rowdeselect', this._ulvUi.viewerControl, -1, mo);
|
|
168
|
-
}
|
|
169
|
-
onDismiss() {
|
|
170
|
-
this._closeDialog();
|
|
171
|
-
}
|
|
172
|
-
onOk() {
|
|
173
|
-
// this._selectedChanged(this.dialogRef.data.selectedItems);
|
|
174
|
-
this._closeDialog();
|
|
175
|
-
}
|
|
176
|
-
onClear() {
|
|
177
|
-
this.dialogRef.data.ulvUi.viewerControl.ClearAllSelected();
|
|
178
|
-
this.dialogRef.data.selectedItems = [];
|
|
179
|
-
}
|
|
180
|
-
_handleAddonButtonClicked() {
|
|
181
|
-
if (this.parameters?.ExecuteAddonButton) {
|
|
182
|
-
this._executeCommand();
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
this.onOpenReport();
|
|
186
|
-
}
|
|
187
|
-
_executeCommand() {
|
|
188
|
-
const { AddonButtonCommand } = this.parameters;
|
|
189
|
-
this.context.fireEvent('AddonButtonClicked', this.context, AddonButtonCommand);
|
|
190
|
-
}
|
|
191
|
-
_trackBySelectedFn(_index, item) {
|
|
192
|
-
return item.Id;
|
|
193
|
-
}
|
|
194
|
-
_setValue(value) {
|
|
195
|
-
this.originalMoList = [...value];
|
|
196
|
-
this._setIdsOMoByValue();
|
|
197
|
-
super._setValue(value);
|
|
198
|
-
}
|
|
199
|
-
_setIdsOMoByValue() {
|
|
200
|
-
this.idsOfMo = this.originalMoList.map((c) => c.Id);
|
|
201
|
-
}
|
|
202
|
-
_changeDropDownOpenState(val) {
|
|
203
|
-
if (this.multiInputComponent && this.multiInputComponent.open !== val) {
|
|
204
|
-
this.multiInputComponent.open = val;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
_openUlv() {
|
|
208
|
-
if (this.report && !this.term && this._triggerClicked) {
|
|
209
|
-
if (this.dialogOpen || !this._ulvUi) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
const view = this._ulvUi.Setting.View;
|
|
213
|
-
view.IsCheckList = true;
|
|
214
|
-
this.dialogOpen = true;
|
|
215
|
-
const deviceSize = this._portalService.deviceSize;
|
|
216
|
-
const largeScreen = deviceSize === 'l' || deviceSize === 'xl';
|
|
217
|
-
const dialogConfig = {
|
|
218
|
-
data: {
|
|
219
|
-
ulvUi: this._ulvUi,
|
|
220
|
-
title: this._bbbPipe.transform('Select'),
|
|
221
|
-
selectedItems: [...this.originalMoList]
|
|
222
|
-
},
|
|
223
|
-
escKeyCloseable: false,
|
|
224
|
-
dialogPanelClass: `ulv-selection-form-dialog ${deviceSize ? 'ulv-selection-form-dialog-mobile' : ''}`
|
|
225
|
-
};
|
|
226
|
-
if (largeScreen) {
|
|
227
|
-
dialogConfig.width = '60vw';
|
|
228
|
-
dialogConfig.height = '60vh';
|
|
229
|
-
dialogConfig.minWidth = '600';
|
|
230
|
-
dialogConfig.minHeight = '360';
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
dialogConfig.mobile = true;
|
|
234
|
-
dialogConfig.fullScreen = true;
|
|
235
|
-
}
|
|
236
|
-
if (this._ulvUi?.Setting?.Extra?.DefaultCommandsAccess?.View) {
|
|
237
|
-
this._ulvUi.Setting.Extra.DefaultCommandsAccess.View = false;
|
|
238
|
-
}
|
|
239
|
-
const dataSetting = this._ulvUi.Setting.Data;
|
|
240
|
-
if (largeScreen && dataSetting) {
|
|
241
|
-
if (dataSetting.Paging?.HasPaging) {
|
|
242
|
-
dialogConfig.height = '100vh';
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
dialogConfig.height = dataSetting.MoDataList.length > 10 ? '100vh' : '60vh';
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
const dialogRef = this._dialogService.open(this.dialogContainer, dialogConfig);
|
|
249
|
-
dialogRef.afterClosed.subscribe((value) => {
|
|
250
|
-
this._dialogClose(this.dialogRef.data.selectedItems);
|
|
251
|
-
});
|
|
252
|
-
if (!this._ulvUi.$RegisterEvent) {
|
|
253
|
-
this._ulvUi.$RegisterEvent = true;
|
|
254
|
-
this._ulvUi.viewerControl.on({
|
|
255
|
-
afterrender: () => {
|
|
256
|
-
this._ulvUi.viewerControl.readyToSelect = true;
|
|
257
|
-
this.dialogRef.data.selectedItems = [];
|
|
258
|
-
this._ulvUi.viewerControl.ClearAllSelected();
|
|
259
|
-
this._ulvUi.viewerControl.selectRecords(this.originalMoList);
|
|
260
|
-
this.dialogRef.data.selectedItems = [...this.originalMoList];
|
|
261
|
-
},
|
|
262
|
-
rowSelectAll: (context) => {
|
|
263
|
-
context.Setting.Data.MoDataList.forEach((mo) => {
|
|
264
|
-
this._addMoToSelected(mo);
|
|
265
|
-
});
|
|
266
|
-
},
|
|
267
|
-
rowDeselectAll: (context) => {
|
|
268
|
-
context.Setting.Data.MoDataList.forEach((mo) => {
|
|
269
|
-
this._removeFromSelected(mo);
|
|
270
|
-
});
|
|
271
|
-
},
|
|
272
|
-
rowselect: (sender, index, mo) => {
|
|
273
|
-
//if (this.originalMoList.length > 0) {
|
|
274
|
-
// قبل از رندر شدن این اتفاق می افتاد
|
|
275
|
-
this._addMoToSelected(mo);
|
|
276
|
-
//}
|
|
277
|
-
},
|
|
278
|
-
rowdeselect: (sender, index, mo) => {
|
|
279
|
-
this._removeFromSelected(mo);
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
this.dialogRef = dialogRef;
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
this._changeDropDownOpenState(true);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
_closeDialog() {
|
|
290
|
-
this._triggerClicked = false;
|
|
291
|
-
this.dialogOpen = false;
|
|
292
|
-
this.dialogRef.close();
|
|
293
|
-
}
|
|
294
|
-
_addMoToSelected(mo) {
|
|
295
|
-
if (!mo) {
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
const selected = this.dialogRef.data.selectedItems;
|
|
299
|
-
if (!selected.find((c) => c.Id === mo.Id)) {
|
|
300
|
-
selected.push({
|
|
301
|
-
Id: mo.Id,
|
|
302
|
-
Text: mo.$Caption,
|
|
303
|
-
Data: mo,
|
|
304
|
-
$Caption: mo.$Caption
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
_removeFromSelected(mo) {
|
|
309
|
-
const selected = this.dialogRef.data.selectedItems.filter((c) => c.Id !== mo.Id);
|
|
310
|
-
this.dialogRef.data.selectedItems = selected;
|
|
311
|
-
}
|
|
312
|
-
_dialogClose(moList) {
|
|
313
|
-
this.dropDownValuesSource.next(moList);
|
|
314
|
-
this._selectedChanged(moList.map((c) => c.Id));
|
|
315
|
-
}
|
|
316
|
-
_selectedChanged(arr) {
|
|
317
|
-
const deletedItems = [];
|
|
318
|
-
const addedItems = [];
|
|
319
|
-
const value = [...this.value];
|
|
320
|
-
value.forEach((mo) => {
|
|
321
|
-
const selectedMo = arr.find((moId) => moId === mo.Id);
|
|
322
|
-
if (!selectedMo) {
|
|
323
|
-
mo.Data.$IsChecked = false;
|
|
324
|
-
deletedItems.push(mo.Data);
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
arr.forEach((moId) => {
|
|
328
|
-
const selectedMo = this.originalMoList.find((c) => c.Id === moId);
|
|
329
|
-
if (!selectedMo) {
|
|
330
|
-
const mo2 = this.dropDownValuesSource.getValue().find((c) => c.Id === moId);
|
|
331
|
-
if (mo2) {
|
|
332
|
-
mo2.$IsChecked = true;
|
|
333
|
-
addedItems.push(mo2);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
});
|
|
337
|
-
if (deletedItems.length > 0) {
|
|
338
|
-
this.fireContextEvent('RequestCommand', this.context, 'Delete', deletedItems);
|
|
339
|
-
}
|
|
340
|
-
if (addedItems.length > 0) {
|
|
341
|
-
this.fireContextEvent('RequestCommand', this.context, 'Add', addedItems);
|
|
342
|
-
// this._ulvUi.viewerControl.fireEvent('rowclick');
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiLinearListContainerWithButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
346
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiLinearListContainerWithButtonComponent, selector: "bsu-ui-linear-list-container-with-button", inputs: { UlvUi: "UlvUi", GetTextItemValue: "GetTextItemValue", show: "show", hide: "hide", hidden: "hidden", GetSelectionData: "GetSelectionData" }, host: { listeners: { "keydown.enter": "onKeyEnter($event)", "keydown.arrowdown": "onKeyDown($event)", "keydown.esc": "onKeyEsc($event)" } }, viewQueries: [{ propertyName: "multiInputComponent", first: true, predicate: MultiInputComponent, descendants: true, static: true }, { propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-multi-input\n [inputId]=\"id\"\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onVisibilityChange($event)\"\n [class.control-readonly]=\"(readonly$ | async) === true\"\n [dropdownValues]=\"(dropDownValues$ | async)!!\"\n [placeholder]=\"Setting.ControlFieldCaptionTranslated | bbbTranslate\"\n [displayFn]=\"displayFunc\"\n [showAllButton]=\"false\"\n [displayAddonButton]=\"(disableOrReadonly$ | async) !== true\"\n [allowNewTokens]=\"false\"\n [includes]=\"true\"\n [(ngModel)]=\"idsOfMo\"\n [disabled]=\"(disable$ | async) === true\"\n [valueFn]=\"valueFn\"\n (searchTermChange)=\"onSearchTermChange($event)\"\n (selectedChange)=\"onSelectedChange($event)\"\n (addOnButtonClicked)=\"_handleAddonButtonClicked()\"\n></fd-multi-input>\n\n<!-- <button\n*ngIf=\"report\"\nfd-button\n[attr.rtl]=\"rtl\"\n[aria-label]=\"'Advanced' | bbbTranslate\"\nglyph=\"value-help\"\n[disabled]=\"(disableOrReadonly$ | async)!!\"\n(click)=\"onOpenReport()\"\n></button> -->\n\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 id=\"fd-dialog-header-3\" fd-title>{{ dialog.data.title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n @if (dialogConfig.height !== '100vh') {\n <fd-button-bar\n ariaLabel=\"fullscreen\"\n [glyph]=\"dialog.data.fullscreen ? 'exitfullscreen' : 'resize'\"\n fullscreenDialog\n [fullscreen]=\"dialog.data.fullscreen\"\n (fullscreenChanged)=\"dialog.data.fullscreen = $event\"\n [dialog]=\"dialog\"\n [dialogComponent]=\"dialogTpl\"\n ></fd-button-bar>\n }\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"onDismiss()\"></fd-button-bar>\n </div>\n </ng-template>\n <!-- <h3 fd-title>{{ dialog.data.title }}</h3>\n <button fd-dialog-close-button></button> -->\n </fd-dialog-header>\n <fd-dialog-body>\n @if (dialog.data.ulvUi; as ulvUi) {\n <bsu-ui-ulv-main-ui [context]=\"ulvUi\" class=\"linear-list-selection\"></bsu-ui-ulv-main-ui>\n\n }\n <div\n class=\"ulv-selection-form-dialog__row ulv-selection-form-dialog__selection-row\"\n [aria-label]=\"'SelectedItemsAndConditions' | bbbTranslate\"\n >\n <h5 fd-title class=\"selected-and-condition-title\">\n <ng-container>\n <ng-container>{{ 'SelectedItemsAndConditions' | bbbTranslate }} </ng-container>\n ({{ dialog.data.selectedItems?.length || 0 }})\n </ng-container>\n </h5>\n <div class=\"ulv-selection-form-dialog__tokens-wrapper\">\n <div class=\"ulv-selection-form-dialog__tokens\">\n @if (dialog.data.selectedItems) {\n <fd-toolbar>\n <!-- Selected items -->\n @for ( item of dialog.data.selectedItems; track _trackBySelectedFn(selectedIndex, item); let\n selectedIndex = $index) {\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"onRemoveSelected(item)\"\n >{{ item.Text }}\n </fd-token>\n }\n </fd-toolbar>\n }\n </div>\n <button\n class=\"ulv-selection-form-dialog__tokens-clear\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n [aria-label]=\"'Clear' | bbbTranslate\"\n (click)=\"onClear()\"\n ></button>\n </div>\n </div>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <ng-template fdkTemplate=\"footer\">\n <div class=\"fd-bar__right\">\n <button\n fd-button\n data-succes\n [label]=\"'OK' | bbbTranslate\"\n fdType=\"emphasized\"\n (click)=\"onOk()\"\n ></button>\n <button\n fd-button\n data-dismiss-dialog\n fd-dialog-decisive-button\n [label]=\"'Cancel' | bbbTranslate\"\n fdType=\"transparent\"\n (click)=\"onDismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep fd-multi-input .fd-input-group{cursor:default}fd-multi-input{flex-grow:1}button[rtl=true]{margin-right:5px}button[rtl=false]{margin-left:5px}::ng-deep .fd-toolbar{display:flex;flex-wrap:wrap;row-gap:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "directive", type: i3.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i5.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i5.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i5.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i6.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i7.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i8.MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "glyphFont", "dropdownValues", "openDropdownOnAddOnClicked", "addonIconTitle", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "addOnButtonAriaLabel", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i10.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i11.UiUlvMainUiComponent, selector: "bsu-ui-ulv-main-ui", inputs: ["context", "isReportPage", "inDialog", "isMultiSelect", "layoutInfo", "fullscreen"] }, { kind: "directive", type: i12.FullscreenDialogDirective, selector: "[fullscreenDialog]", inputs: ["dialog", "dialogComponent", "fullscreen"], outputs: ["fullscreenChanged"] }, { kind: "pipe", type: i13.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
347
|
-
}
|
|
348
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiLinearListContainerWithButtonComponent, decorators: [{
|
|
349
|
-
type: Component,
|
|
350
|
-
args: [{ selector: 'bsu-ui-linear-list-container-with-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-multi-input\n [inputId]=\"id\"\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onVisibilityChange($event)\"\n [class.control-readonly]=\"(readonly$ | async) === true\"\n [dropdownValues]=\"(dropDownValues$ | async)!!\"\n [placeholder]=\"Setting.ControlFieldCaptionTranslated | bbbTranslate\"\n [displayFn]=\"displayFunc\"\n [showAllButton]=\"false\"\n [displayAddonButton]=\"(disableOrReadonly$ | async) !== true\"\n [allowNewTokens]=\"false\"\n [includes]=\"true\"\n [(ngModel)]=\"idsOfMo\"\n [disabled]=\"(disable$ | async) === true\"\n [valueFn]=\"valueFn\"\n (searchTermChange)=\"onSearchTermChange($event)\"\n (selectedChange)=\"onSelectedChange($event)\"\n (addOnButtonClicked)=\"_handleAddonButtonClicked()\"\n></fd-multi-input>\n\n<!-- <button\n*ngIf=\"report\"\nfd-button\n[attr.rtl]=\"rtl\"\n[aria-label]=\"'Advanced' | bbbTranslate\"\nglyph=\"value-help\"\n[disabled]=\"(disableOrReadonly$ | async)!!\"\n(click)=\"onOpenReport()\"\n></button> -->\n\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 id=\"fd-dialog-header-3\" fd-title>{{ dialog.data.title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n @if (dialogConfig.height !== '100vh') {\n <fd-button-bar\n ariaLabel=\"fullscreen\"\n [glyph]=\"dialog.data.fullscreen ? 'exitfullscreen' : 'resize'\"\n fullscreenDialog\n [fullscreen]=\"dialog.data.fullscreen\"\n (fullscreenChanged)=\"dialog.data.fullscreen = $event\"\n [dialog]=\"dialog\"\n [dialogComponent]=\"dialogTpl\"\n ></fd-button-bar>\n }\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"onDismiss()\"></fd-button-bar>\n </div>\n </ng-template>\n <!-- <h3 fd-title>{{ dialog.data.title }}</h3>\n <button fd-dialog-close-button></button> -->\n </fd-dialog-header>\n <fd-dialog-body>\n @if (dialog.data.ulvUi; as ulvUi) {\n <bsu-ui-ulv-main-ui [context]=\"ulvUi\" class=\"linear-list-selection\"></bsu-ui-ulv-main-ui>\n\n }\n <div\n class=\"ulv-selection-form-dialog__row ulv-selection-form-dialog__selection-row\"\n [aria-label]=\"'SelectedItemsAndConditions' | bbbTranslate\"\n >\n <h5 fd-title class=\"selected-and-condition-title\">\n <ng-container>\n <ng-container>{{ 'SelectedItemsAndConditions' | bbbTranslate }} </ng-container>\n ({{ dialog.data.selectedItems?.length || 0 }})\n </ng-container>\n </h5>\n <div class=\"ulv-selection-form-dialog__tokens-wrapper\">\n <div class=\"ulv-selection-form-dialog__tokens\">\n @if (dialog.data.selectedItems) {\n <fd-toolbar>\n <!-- Selected items -->\n @for ( item of dialog.data.selectedItems; track _trackBySelectedFn(selectedIndex, item); let\n selectedIndex = $index) {\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"onRemoveSelected(item)\"\n >{{ item.Text }}\n </fd-token>\n }\n </fd-toolbar>\n }\n </div>\n <button\n class=\"ulv-selection-form-dialog__tokens-clear\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n [aria-label]=\"'Clear' | bbbTranslate\"\n (click)=\"onClear()\"\n ></button>\n </div>\n </div>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <ng-template fdkTemplate=\"footer\">\n <div class=\"fd-bar__right\">\n <button\n fd-button\n data-succes\n [label]=\"'OK' | bbbTranslate\"\n fdType=\"emphasized\"\n (click)=\"onOk()\"\n ></button>\n <button\n fd-button\n data-dismiss-dialog\n fd-dialog-decisive-button\n [label]=\"'Cancel' | bbbTranslate\"\n fdType=\"transparent\"\n (click)=\"onDismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep fd-multi-input .fd-input-group{cursor:default}fd-multi-input{flex-grow:1}button[rtl=true]{margin-right:5px}button[rtl=false]{margin-left:5px}::ng-deep .fd-toolbar{display:flex;flex-wrap:wrap;row-gap:5px}\n"] }]
|
|
351
|
-
}], propDecorators: { multiInputComponent: [{
|
|
352
|
-
type: ViewChild,
|
|
353
|
-
args: [MultiInputComponent, { static: true }]
|
|
354
|
-
}], dialogContainer: [{
|
|
355
|
-
type: ViewChild,
|
|
356
|
-
args: ['container', { read: TemplateRef }]
|
|
357
|
-
}], UlvUi: [{
|
|
358
|
-
type: Input
|
|
359
|
-
}], onKeyEnter: [{
|
|
360
|
-
type: HostListener,
|
|
361
|
-
args: ['keydown.enter', ['$event']]
|
|
362
|
-
}], onKeyDown: [{
|
|
363
|
-
type: HostListener,
|
|
364
|
-
args: ['keydown.arrowdown', ['$event']]
|
|
365
|
-
}], onKeyEsc: [{
|
|
366
|
-
type: HostListener,
|
|
367
|
-
args: ['keydown.esc', ['$event']]
|
|
368
|
-
}], GetTextItemValue: [{
|
|
369
|
-
type: Input
|
|
370
|
-
}], show: [{
|
|
371
|
-
type: Input
|
|
372
|
-
}], hide: [{
|
|
373
|
-
type: Input
|
|
374
|
-
}], hidden: [{
|
|
375
|
-
type: Input
|
|
376
|
-
}], GetSelectionData: [{
|
|
377
|
-
type: Input
|
|
378
|
-
}] } });
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi91aS1saW5lYXItbGlzdC1jb250YWluZXItd2l0aC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBY3pFLE1BQU0sT0FBTyx3Q0FBeUMsU0FBUSw0QkFBNEI7SUFOMUY7O1FBcUJJLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZix5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsb0JBQWUsR0FBRyxJQUFJLENBQUMs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Z0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlhbG9nUmVmLCBNdWx0aUlucHV0Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcbmltcG9ydCB7IEJhcnNhQXBpLCBNZXRhb2JqZWN0RGF0YU1vZGVsLCBSZXBvcnRNb2RlbCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcblxuaW50ZXJmYWNlIExpbmVhckl0ZW1NbyBleHRlbmRzIE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIERhdGE6IE1ldGFvYmplY3REYXRhTW9kZWw7XG4gICAgSWQ6IHN0cmluZztcbiAgICBUZXh0OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXVpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlMaW5lYXJMaXN0Q29udGFpbmVyV2l0aEJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoTXVsdGlJbnB1dENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBtdWx0aUlucHV0Q29tcG9uZW50OiBNdWx0aUlucHV0Q29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBkaWFsb2dDb250YWluZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgc2V0IFVsdlVpKHZhbDogeyBTZXR0aW5nOiBSZXBvcnRNb2RlbCB9KSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vTGlzdCA9IHZhbC5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdDtcbiAgICAgICAgICAgIHRoaXMuZHJvcERvd25WYWx1ZXNTb3VyY2UubmV4dChtb0xpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbW9MaXN0ID0gW107XG4gICAgICAgICAgICB0aGlzLmRyb3BEb3duVmFsdWVzU291cmNlLm5leHQobW9MaXN0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bHZVaSA9IHZhbDtcbiAgICB9XG4gICAgbW9iaWxlID0gZmFsc2U7XG4gICAgZHJvcERvd25WYWx1ZXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xuICAgIGRyb3BEb3duVmFsdWVzJCA9IHRoaXMuZHJvcERvd25WYWx1ZXNTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgbWFwKChtb0xpc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBtb0xpc3QuZmlsdGVyKChjKSA9PiB0aGlzLnZhbHVlLmZpbmQoKGQpID0+IGQuSWQgPT09IGMuSWQpID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoXG4gICAgICAgICAgICAobW9MaXN0KSA9PlxuICAgICAgICAgICAgICAgICh0aGlzLmZpcnN0SXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJENhcHRpb246IG1vTGlzdFswXT8uJENhcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIElkOiBtb0xpc3RbMF0/LklkLFxuICAgICAgICAgICAgICAgICAgICBUZXh0OiBtb0xpc3RbMF0/LiRDYXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBEYXRhOiBtb0xpc3RbMF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBtYXAoKG1vbGlzdCkgPT4gbW9saXN0Lm1hcCgoYykgPT4gYy5JZCkpXG4gICAgKTtcbiAgICBzZWxlY3RlZDogYW55W107XG4gICAgcmVwb3J0ID0gbnVsbDtcbiAgICB0ZXJtID0gJyc7XG4gICAgdGVybVNvdXJjZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBvcmlnaW5hbE1vTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xuICAgIHZhbHVlOiBNZXRhb2JqZWN0RGF0YU1vZGVsW107XG4gICAgcnRsID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1J0bDtcbiAgICBkaWFsb2dSZWY6IERpYWxvZ1JlZjtcbiAgICBkaWFsb2dPcGVuOiBib29sZWFuO1xuICAgIGZpcnN0SXRlbTogTGluZWFySXRlbU1vO1xuICAgIGlkc09mTW86IHN0cmluZ1tdO1xuICAgIHBhcmFtZXRlcnM6IFVpTGluZWFyTGlzdENvbnRhaW5lclNldHRpbmc7XG4gICAgcHJpdmF0ZSBzaG93VWx2U291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF91bHZVaTogeyBba2V5OiBzdHJpbmddOiBhbnk7IFNldHRpbmc6IFJlcG9ydE1vZGVsIH07XG4gICAgcHJpdmF0ZSBfdHJpZ2dlckNsaWNrZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfc2V0V2lkdGggPSBmYWxzZTtcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgICBvbktleUVudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50ZXJtKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZHJvcERvd25WYWx1ZXNTb3VyY2UuZ2V0VmFsdWUoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ1JlcXVlc3RDb21tYW5kJywgdGhpcy5jb250ZXh0LCAnTmV3Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIG9uS2V5RG93bigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRlcm0gJiYgdGhpcy5oaWRkZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUmVxdWVzdEZpbHRlcjInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVzYycsIFsnJGV2ZW50J10pXG4gICAgb25LZXlFc2MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyb3BEb3duT3BlblN0YXRlKGZhbHNlKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd1VsdlNvdXJjZVxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29wZW5VbHYoKSk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMucmVwb3J0ID0gdGhpcy5TZXR0aW5nLlJlcG9ydDtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE1vTGlzdCA9IFsuLi50aGlzLnZhbHVlXTtcbiAgICAgICAgdGhpcy50ZXJtU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICB0YXAoKHRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duVmFsdWVzU291cmNlLm5leHQoW10pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUmVxdWVzdEZpbHRlcicsIHRlcm0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gdGhpcy5tdWx0aUlucHV0Q29tcG9uZW50LnNlbGVjdGVkID0gdGhpcy5vcmlnaW5hbE1vTGlzdDtcbiAgICAgICAgdGhpcy5fc2V0SWRzT01vQnlWYWx1ZSgpO1xuXG4gICAgICAgIC8vIGNvbnN0IG9sZEhhbmxkZSA9IHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5fYWRkT25CdXR0b25DbGlja2VkO1xuICAgICAgICB0aGlzLm11bHRpSW5wdXRDb21wb25lbnQuX2FkZE9uQnV0dG9uQ2xpY2tlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFkZG9uQnV0dG9uQ2xpY2tlZCgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2Uud2luZG93UmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemVUb2tlbml6ZXIoJzEwMCUnKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZVRva2VuaXplcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblZpc2liaWxpdHlDaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICBpZiAoZSA9PT0gJ1Zpc2libGUnICYmICF0aGlzLl9zZXRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0V2lkdGggPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplVG9rZW5pemVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2l6ZVRva2VuaXplcih3aWR0aDogc3RyaW5nID0gJycpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB4ID0gZWxEb20ucXVlcnlTZWxlY3RvcignZmQtdG9rZW5pemVyJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICghd2lkdGggJiYgeCkge1xuICAgICAgICAgICAgY29uc3Qgd3ggPSB4LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgaWYgKCF3eCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZHRoID0gYCR7d3h9cHhgO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh4LCAnd2lkdGgnLCBgJHt3aWR0aH1gKTtcbiAgICB9XG4gICAgdmFsdWVGbihlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICBvblNlYXJjaFRlcm1DaGFuZ2UodGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVybVNvdXJjZS5uZXh0KHRlcm0pO1xuICAgIH1cbiAgICBvbk9wZW5SZXBvcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLnRlcm1Tb3VyY2UubmV4dCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnVHJpZ2dlckNsaWNrJywgdGhpcy5jb250ZXh0KTtcbiAgICB9XG4gICAgb25TZWxlY3RlZENoYW5nZShhcnI6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ2hhbmdlZChhcnIpO1xuICAgIH1cbiAgICBvblJlbW92ZVNlbGVjdGVkKG1vKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21TZWxlY3RlZChtbyk7XG4gICAgICAgIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuRGVTZWxlY3RSZWNvcmRzKFttb10pO1xuICAgICAgICAvLyB0aGlzLl91bHZVaS52aWV3ZXJDb250cm9sLmZpcmVFdmVudCgncm93ZGVzZWxlY3QnLCB0aGlzLl91bHZVaS52aWV3ZXJDb250cm9sLCAtMSwgbW8pO1xuICAgIH1cbiAgICBvbkRpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nsb3NlRGlhbG9nKCk7XG4gICAgfVxuICAgIG9uT2soKTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMuX3NlbGVjdGVkQ2hhbmdlZCh0aGlzLmRpYWxvZ1JlZi5kYXRhLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB0aGlzLl9jbG9zZURpYWxvZygpO1xuICAgIH1cbiAgICBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kYXRhLnVsdlVpLnZpZXdlckNvbnRyb2wuQ2xlYXJBbGxTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kYXRhLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9oYW5kbGVBZGRvbkJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnM/LkV4ZWN1dGVBZGRvbkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZUNvbW1hbmQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uT3BlblJlcG9ydCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2V4ZWN1dGVDb21tYW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IEFkZG9uQnV0dG9uQ29tbWFuZCB9ID0gdGhpcy5wYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdBZGRvbkJ1dHRvbkNsaWNrZWQnLCB0aGlzLmNvbnRleHQsIEFkZG9uQnV0dG9uQ29tbWFuZCk7XG4gICAgfVxuICAgIF90cmFja0J5U2VsZWN0ZWRGbihfaW5kZXg6IG51bWJlciwgaXRlbTogTWV0YW9iamVjdERhdGFNb2RlbCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLklkO1xuICAgIH1cbiAgICBkaXNwbGF5RnVuYyA9IChpZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgYWxsSXRlbXMgPSBbLi4udGhpcy52YWx1ZSwgLi4udGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5nZXRWYWx1ZSgpXTtcbiAgICAgICAgY29uc3QgZXhpc3RJblZhbHVlID0gYWxsSXRlbXMuZmluZCgoYykgPT4gYy5JZCA9PT0gaWQpO1xuICAgICAgICBpZiAoZXhpc3RJblZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RJblZhbHVlLlRleHQgPz8gZXhpc3RJblZhbHVlLiRDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIF9zZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub3JpZ2luYWxNb0xpc3QgPSBbLi4udmFsdWVdO1xuICAgICAgICB0aGlzLl9zZXRJZHNPTW9CeVZhbHVlKCk7XG4gICAgICAgIHN1cGVyLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgR2V0VGV4dEl0ZW1WYWx1ZSA9ICgpID0+IHRoaXMudGVybTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIHNob3cgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX29wZW5VbHYoKTtcbiAgICB9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgaGlkZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRHJvcERvd25PcGVuU3RhdGUoZmFsc2UpO1xuICAgIH07XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBoaWRkZW4gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpSW5wdXRDb21wb25lbnQgJiYgIXRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuICYmICF0aGlzLmRpYWxvZ09wZW47XG4gICAgfTtcbiAgICBASW5wdXQoKSBHZXRTZWxlY3Rpb25EYXRhID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0Q29tcG9uZW50LnNlbGVjdGVkO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgcHJpdmF0ZSBfc2V0SWRzT01vQnlWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5pZHNPZk1vID0gdGhpcy5vcmlnaW5hbE1vTGlzdC5tYXAoKGMpID0+IGMuSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoYW5nZURyb3BEb3duT3BlblN0YXRlKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tdWx0aUlucHV0Q29tcG9uZW50ICYmIHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX29wZW5VbHYoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlcG9ydCAmJiAhdGhpcy50ZXJtICYmIHRoaXMuX3RyaWdnZXJDbGlja2VkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dPcGVuIHx8ICF0aGlzLl91bHZVaSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZpZXc6IGFueSA9IHRoaXMuX3VsdlVpLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIHZpZXcuSXNDaGVja0xpc3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZVNpemUgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLmRldmljZVNpemU7XG4gICAgICAgICAgICBjb25zdCBsYXJnZVNjcmVlbiA9IGRldmljZVNpemUgPT09ICdsJyB8fCBkZXZpY2VTaXplID09PSAneGwnO1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdWx2VWk6IHRoaXMuX3VsdlVpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1NlbGVjdCcpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbLi4udGhpcy5vcmlnaW5hbE1vTGlzdF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVzY0tleUNsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlhbG9nUGFuZWxDbGFzczogYHVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2cgJHtkZXZpY2VTaXplID8gJ3Vsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2ctbW9iaWxlJyA6ICcnfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobGFyZ2VTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcud2lkdGggPSAnNjB2dyc7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmhlaWdodCA9ICc2MHZoJztcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcubWluV2lkdGggPSAnNjAwJztcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcubWluSGVpZ2h0ID0gJzM2MCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5tb2JpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5mdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl91bHZVaT8uU2V0dGluZz8uRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2Vzcz8uVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsdlVpLlNldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzLlZpZXcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gdGhpcy5fdWx2VWkuU2V0dGluZy5EYXRhO1xuICAgICAgICAgICAgaWYgKGxhcmdlU2NyZWVuICYmIGRhdGFTZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFTZXR0aW5nLlBhZ2luZz8uSGFzUGFnaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSAnMTAwdmgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBkYXRhU2V0dGluZy5Nb0RhdGFMaXN0Lmxlbmd0aCA+IDEwID8gJzEwMHZoJyA6ICc2MHZoJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpYWxvZ0Nsb3NlKHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdWx2VWkuJFJlZ2lzdGVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS4kUmVnaXN0ZXJFdmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbC5vbih7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVycmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS52aWV3ZXJDb250cm9sLnJlYWR5VG9TZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGF0YS5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS52aWV3ZXJDb250cm9sLkNsZWFyQWxsU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuc2VsZWN0UmVjb3Jkcyh0aGlzLm9yaWdpbmFsTW9MaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLm9yaWdpbmFsTW9MaXN0XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcm93U2VsZWN0QWxsOiAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdC5mb3JFYWNoKChtbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZE1vVG9TZWxlY3RlZChtbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcm93RGVzZWxlY3RBbGw6IChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0LmZvckVhY2goKG1vKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbVNlbGVjdGVkKG1vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByb3dzZWxlY3Q6IChzZW5kZXIsIGluZGV4LCBtbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAodGhpcy5vcmlnaW5hbE1vTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDZgtio2YQg2KfYsiDYsdmG2K/YsSDYtNiv2YYg2KfbjNmGINin2KrZgdin2YIg2YXbjCDYp9mB2KrYp9ivXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRNb1RvU2VsZWN0ZWQobW8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy99XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJvd2Rlc2VsZWN0OiAoc2VuZGVyLCBpbmRleCwgbW8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUZyb21TZWxlY3RlZChtbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmID0gZGlhbG9nUmVmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRHJvcERvd25PcGVuU3RhdGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfY2xvc2VEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGlja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9hZGRNb1RvU2VsZWN0ZWQobW86IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIW1vKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmRpYWxvZ1JlZi5kYXRhLnNlbGVjdGVkSXRlbXM7XG4gICAgICAgIGlmICghc2VsZWN0ZWQuZmluZCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBJZDogbW8uSWQsXG4gICAgICAgICAgICAgICAgVGV4dDogbW8uJENhcHRpb24sXG4gICAgICAgICAgICAgICAgRGF0YTogbW8sXG4gICAgICAgICAgICAgICAgJENhcHRpb246IG1vLiRDYXB0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9yZW1vdmVGcm9tU2VsZWN0ZWQobW86IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGF0YS5zZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWQ7XG4gICAgfVxuICAgIHByaXZhdGUgX2RpYWxvZ0Nsb3NlKG1vTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJvcERvd25WYWx1ZXNTb3VyY2UubmV4dChtb0xpc3QpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENoYW5nZWQobW9MaXN0Lm1hcCgoYykgPT4gYy5JZCkpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZWxlY3RlZENoYW5nZWQoYXJyOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZWxldGVkSXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZEl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBbLi4udGhpcy52YWx1ZV07XG4gICAgICAgIHZhbHVlLmZvckVhY2goKG1vKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vID0gYXJyLmZpbmQoKG1vSWQpID0+IG1vSWQgPT09IG1vLklkKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRNbykge1xuICAgICAgICAgICAgICAgIG1vLkRhdGEuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRJdGVtcy5wdXNoKG1vLkRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXJyLmZvckVhY2goKG1vSWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW8gPSB0aGlzLm9yaWdpbmFsTW9MaXN0LmZpbmQoKGMpID0+IGMuSWQgPT09IG1vSWQpO1xuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZE1vKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW8yID0gdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5nZXRWYWx1ZSgpLmZpbmQoKGMpID0+IGMuSWQgPT09IG1vSWQpO1xuICAgICAgICAgICAgICAgIGlmIChtbzIpIHtcbiAgICAgICAgICAgICAgICAgICAgbW8yLiRJc0NoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2gobW8yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGVsZXRlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnUmVxdWVzdENvbW1hbmQnLCB0aGlzLmNvbnRleHQsICdEZWxldGUnLCBkZWxldGVkSXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnUmVxdWVzdENvbW1hbmQnLCB0aGlzLmNvbnRleHQsICdBZGQnLCBhZGRlZEl0ZW1zKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgVWlMaW5lYXJMaXN0Q29udGFpbmVyU2V0dGluZyBleHRlbmRzIE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIEV4ZWN1dGVBZGRvbkJ1dHRvbjogYm9vbGVhbjtcbiAgICBBZGRvbkJ1dHRvbkNvbW1hbmQ6IE1ldGFvYmplY3REYXRhTW9kZWw7XG59XG4iLCI8ZmQtbXVsdGktaW5wdXRcbiAgICBbaW5wdXRJZF09XCJpZFwiXG4gICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICBbaW50ZXJzZWN0aW9uVGhyZXNob2xkXT1cIjAuMVwiXG4gICAgKHZpc2liaWxpdHlDaGFuZ2UpPVwib25WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxuICAgIFtjbGFzcy5jb250cm9sLXJlYWRvbmx5XT1cIihyZWFkb25seSQgfCBhc3luYykgPT09IHRydWVcIlxuICAgIFtkcm9wZG93blZhbHVlc109XCIoZHJvcERvd25WYWx1ZXMkIHwgYXN5bmMpISFcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJTZXR0aW5nLkNvbnRyb2xGaWVsZENhcHRpb25UcmFuc2xhdGVkIHwgYmJiVHJhbnNsYXRlXCJcbiAgICBbZGlzcGxheUZuXT1cImRpc3BsYXlGdW5jXCJcbiAgICBbc2hvd0FsbEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgW2Rpc3BsYXlBZGRvbkJ1dHRvbl09XCIoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICBbYWxsb3dOZXdUb2tlbnNdPVwiZmFsc2VcIlxuICAgIFtpbmNsdWRlc109XCJ0cnVlXCJcbiAgICBbKG5nTW9kZWwpXT1cImlkc09mTW9cIlxuICAgIFtkaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWVcIlxuICAgIFt2YWx1ZUZuXT1cInZhbHVlRm5cIlxuICAgIChzZWFyY2hUZXJtQ2hhbmdlKT1cIm9uU2VhcmNoVGVybUNoYW5nZSgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25TZWxlY3RlZENoYW5nZSgkZXZlbnQpXCJcbiAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cIl9oYW5kbGVBZGRvbkJ1dHRvbkNsaWNrZWQoKVwiXG4+PC9mZC1tdWx0aS1pbnB1dD5cblxuPCEtLSA8YnV0dG9uXG4qbmdJZj1cInJlcG9ydFwiXG5mZC1idXR0b25cblthdHRyLnJ0bF09XCJydGxcIlxuW2FyaWEtbGFiZWxdPVwiJ0FkdmFuY2VkJyB8IGJiYlRyYW5zbGF0ZVwiXG5nbHlwaD1cInZhbHVlLWhlbHBcIlxuW2Rpc2FibGVkXT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhIVwiXG4oY2xpY2spPVwib25PcGVuUmVwb3J0KClcIlxuPjwvYnV0dG9uPiAtLT5cblxuPG5nLXRlbXBsYXRlIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNjb250YWluZXI+XG4gICAgPGZkLWRpYWxvZyBbZGlhbG9nQ29uZmlnXT1cImRpYWxvZ0NvbmZpZ1wiIFtkaWFsb2dSZWZdPVwiZGlhbG9nXCIgI2RpYWxvZ1RwbD5cbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDEgaWQ9XCJmZC1kaWFsb2ctaGVhZGVyLTNcIiBmZC10aXRsZT57eyBkaWFsb2cuZGF0YS50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZGlhbG9nQ29uZmlnLmhlaWdodCAhPT0gJzEwMHZoJykge1xuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiZnVsbHNjcmVlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiZGlhbG9nLmRhdGEuZnVsbHNjcmVlbiA/ICdleGl0ZnVsbHNjcmVlbicgOiAncmVzaXplJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsc2NyZWVuRGlhbG9nXG4gICAgICAgICAgICAgICAgICAgICAgICBbZnVsbHNjcmVlbl09XCJkaWFsb2cuZGF0YS5mdWxsc2NyZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmdWxsc2NyZWVuQ2hhbmdlZCk9XCJkaWFsb2cuZGF0YS5mdWxsc2NyZWVuID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFsb2ddPVwiZGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFsb2dDb21wb25lbnRdPVwiZGlhbG9nVHBsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBhcmlhTGFiZWw9XCJjbG9zZVwiIGdseXBoPVwiZGVjbGluZVwiIChjbGljayk9XCJvbkRpc21pc3MoKVwiPjwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8IS0tIDxoMyBmZC10aXRsZT57eyBkaWFsb2cuZGF0YS50aXRsZSB9fTwvaDM+XG4gICAgICA8YnV0dG9uIGZkLWRpYWxvZy1jbG9zZS1idXR0b24+PC9idXR0b24+IC0tPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIEBpZiAoZGlhbG9nLmRhdGEudWx2VWk7IGFzIHVsdlVpKSB7XG4gICAgICAgICAgICA8YnN1LXVpLXVsdi1tYWluLXVpIFtjb250ZXh0XT1cInVsdlVpXCIgY2xhc3M9XCJsaW5lYXItbGlzdC1zZWxlY3Rpb25cIj48L2JzdS11aS11bHYtbWFpbi11aT5cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidWx2LXNlbGVjdGlvbi1mb3JtLWRpYWxvZ19fcm93IHVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2dfX3NlbGVjdGlvbi1yb3dcIlxuICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIidTZWxlY3RlZEl0ZW1zQW5kQ29uZGl0aW9ucycgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxoNSBmZC10aXRsZSBjbGFzcz1cInNlbGVjdGVkLWFuZC1jb25kaXRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ1NlbGVjdGVkSXRlbXNBbmRDb25kaXRpb25zJyB8IGJiYlRyYW5zbGF0ZSB9fSA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICh7eyBkaWFsb2cuZGF0YS5zZWxlY3RlZEl0ZW1zPy5sZW5ndGggfHwgMCB9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWx2LXNlbGVjdGlvbi1mb3JtLWRpYWxvZ19fdG9rZW5zLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2dfX3Rva2Vuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChkaWFsb2cuZGF0YS5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdGVkIGl0ZW1zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKCBpdGVtIG9mIGRpYWxvZy5kYXRhLnNlbGVjdGVkSXRlbXM7IHRyYWNrIF90cmFja0J5U2VsZWN0ZWRGbihzZWxlY3RlZEluZGV4LCBpdGVtKTsgbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwiaGlnaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cIm9uUmVtb3ZlU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS5UZXh0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC10b2tlbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2dfX3Rva2Vucy1jbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCInQ2xlYXInIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cblxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1iYXJfX3JpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zdWNjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT0snIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT2soKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3MtZGlhbG9nXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1kaWFsb2ctZGVjaXNpdmUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NhbmNlbCcgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|