barsa-sap-ui 1.0.455 → 2.0.1
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/{esm2020 → esm2022}/barsa-sap-ui.mjs +4 -4
- package/esm2022/lib/apply-conditional-formmatings.directive.mjs +89 -0
- package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +41 -0
- package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +127 -0
- package/{esm2020 → esm2022}/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +23 -23
- package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +29 -0
- package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +24 -0
- package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +30 -0
- package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +41 -0
- package/{esm2020 → esm2022}/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +24 -24
- package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +260 -0
- package/esm2022/lib/barsa-chat/chat.model.mjs +8 -0
- package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +13 -0
- package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +22 -0
- package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +56 -0
- package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +77 -0
- package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +22 -0
- package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +13 -0
- package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +15 -0
- package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +72 -0
- package/{esm2020 → esm2022}/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +23 -23
- package/{esm2020 → esm2022}/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +15 -15
- package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +14 -0
- package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +26 -0
- package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
- package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +41 -0
- package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +61 -0
- package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +45 -0
- package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +37 -0
- package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +27 -0
- package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +94 -0
- package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +22 -0
- package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +37 -0
- package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +41 -0
- package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +29 -0
- package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +23 -0
- package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +83 -0
- package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +53 -0
- package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +159 -0
- package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +17 -0
- package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +30 -0
- package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +14 -0
- package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +34 -0
- package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +46 -0
- package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +79 -0
- package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +30 -0
- package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +31 -0
- package/{esm2020 → esm2022}/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +28 -28
- package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +98 -0
- package/{esm2020 → esm2022}/lib/barsa-sap-ui-routing.module.mjs +18 -18
- package/esm2022/lib/barsa-sap-ui.module.mjs +360 -0
- package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
- package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +168 -0
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +27 -0
- package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +198 -0
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +61 -0
- package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +60 -0
- package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +26 -0
- package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +23 -0
- package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +37 -0
- package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +417 -0
- package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +36 -0
- package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +129 -0
- package/{esm2020 → esm2022}/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +19 -19
- package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +208 -0
- package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +78 -0
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +44 -0
- package/{esm2020 → esm2022}/lib/captcha-field/captcha-field.component.mjs +28 -28
- package/esm2022/lib/card-item/card-item.component.mjs +76 -0
- package/esm2022/lib/card-view-content/card-view-content.component.mjs +46 -0
- package/esm2022/lib/col-renderer.directive.mjs +46 -0
- package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
- package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +60 -0
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +85 -0
- package/esm2022/lib/constants.mjs +421 -0
- package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +41 -0
- package/{esm2020 → esm2022}/lib/device-info-field-base.mjs +23 -23
- package/{esm2020 → esm2022}/lib/dialog-handler.directive.mjs +28 -28
- package/esm2022/lib/download-files.directive.mjs +33 -0
- package/esm2022/lib/dynamic-page-size.pipe.mjs +26 -0
- package/{esm2020 → esm2022}/lib/file-in-dialog/file-in-dialog.component.mjs +44 -44
- package/esm2022/lib/file-viewer/file-viewer.component.mjs +39 -0
- package/{esm2020 → esm2022}/lib/file-viewer-content/file-viewer-content.component.mjs +53 -53
- package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +41 -0
- package/esm2022/lib/form-dialog/form-dialog.component.mjs +142 -0
- package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +44 -0
- package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +43 -0
- package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +45 -0
- package/esm2022/lib/form-wizard/form-wizard.component.mjs +21 -0
- package/esm2022/lib/fullscreen-dialog.directive.mjs +59 -0
- package/esm2022/lib/fullscreen-files.directive.mjs +42 -0
- package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +188 -0
- package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +203 -0
- package/{esm2020 → esm2022}/lib/global-search/global-search.component.mjs +27 -27
- package/esm2022/lib/global-search-module/global-search-module.component.mjs +29 -0
- package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +25 -0
- package/esm2022/lib/header-avatar/header-avatar.component.mjs +18 -0
- package/{esm2020 → esm2022}/lib/header-facet-form/header-facet-form.component.mjs +22 -22
- package/{esm2020 → esm2022}/lib/header-facet-key-value/header-facet-key-value.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/header-facet-microchart/header-facet-microchart.component.mjs +21 -21
- package/{esm2020 → esm2022}/lib/header-facet-plain-text/header-facet-plain-text.component.mjs +28 -28
- package/esm2022/lib/header-facet-progress/header-facet-progress.component.mjs +25 -0
- package/esm2022/lib/header-facet-rate/header-facet-rate.component.mjs +25 -0
- package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +48 -0
- package/esm2022/lib/hyperlink/hyperlink.component.mjs +23 -0
- package/esm2022/lib/index.mjs +564 -0
- package/{esm2020 → esm2022}/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -32
- package/esm2022/lib/layout-actions/layout-actions.component.mjs +68 -0
- package/esm2022/lib/layout-control/layout-control.component.mjs +234 -0
- package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +154 -0
- package/esm2022/lib/list-item/list-item.component.mjs +34 -0
- package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +42 -0
- package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +71 -0
- package/esm2022/lib/ly-label/ly-label.component.mjs +34 -0
- package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
- package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
- package/{esm2020 → esm2022}/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -24
- package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +73 -0
- package/esm2022/lib/ly-line/ly-line.component.mjs +56 -0
- package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +22 -0
- package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +52 -0
- package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +44 -0
- package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +50 -0
- package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/mask/mask.component.mjs +22 -22
- package/esm2022/lib/message-strip/message-strip.component.mjs +28 -0
- package/esm2022/lib/models/grid-data-provider.mjs +83 -0
- package/esm2022/lib/models/grid-view.mjs +2 -0
- package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
- package/esm2022/lib/no-data/no-data.component.mjs +31 -0
- package/esm2022/lib/notification-item/notification-item.component.mjs +57 -0
- package/esm2022/lib/notification-popup.service.mjs +92 -0
- package/{esm2020 → esm2022}/lib/progress-indicator/progress-indicator.component.mjs +18 -18
- package/esm2022/lib/report-navigator/report-navigator.component.mjs +63 -0
- package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
- package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
- package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +97 -0
- package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +88 -0
- package/esm2022/lib/report-tree-base.mjs +408 -0
- package/esm2022/lib/report-view-renderer.directive.mjs +366 -0
- package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
- package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
- package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +72 -0
- package/esm2022/lib/sap-font-class.pipe.mjs +29 -0
- package/esm2022/lib/sap-font.pipe.mjs +29 -0
- package/esm2022/lib/sap-size.pipe.mjs +27 -0
- package/esm2022/lib/sap-ui-report-base.component.mjs +765 -0
- package/esm2022/lib/search-panel/search-panel.component.mjs +42 -0
- package/{esm2020 → esm2022}/lib/static-text/static-text.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/title/title.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +18 -18
- package/esm2022/lib/ui-button/ui-button.component.mjs +31 -0
- package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +53 -0
- package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +59 -0
- package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +42 -0
- package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +34 -0
- package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
- package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +34 -0
- package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +191 -0
- package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +149 -0
- package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +110 -0
- package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +53 -0
- package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +121 -0
- package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +92 -0
- package/{esm2020 → esm2022}/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -32
- package/{esm2020 → esm2022}/lib/ui-graph/ui-graph.component.mjs +17 -17
- package/{esm2020 → esm2022}/lib/ui-grid/ui-grid.component.mjs +25 -25
- package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +43 -0
- package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +66 -0
- package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +75 -0
- package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +58 -0
- package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +155 -0
- package/{esm2020 → esm2022}/lib/ui-html-viewer/ui-html-viewer.component.mjs +16 -16
- package/{esm2020 → esm2022}/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -11
- package/{esm2020 → esm2022}/lib/ui-label/ui-label.component.mjs +12 -12
- package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +349 -0
- package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +75 -0
- package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +124 -0
- package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
- package/{esm2020 → esm2022}/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +14 -14
- package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +55 -0
- package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +430 -0
- package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +28 -0
- package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +37 -0
- package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +59 -0
- package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +93 -0
- package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +36 -0
- package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +56 -0
- package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +28 -0
- package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +24 -0
- package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +27 -0
- package/{esm2020 → esm2022}/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -21
- package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +261 -0
- package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +98 -0
- package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +223 -0
- package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +48 -0
- package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +36 -0
- package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +46 -0
- package/{esm2020 → esm2022}/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -24
- package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +37 -0
- package/{esm2020 → esm2022}/lib/ui-single-picture/ui-single-picture.component.mjs +36 -36
- package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +155 -0
- package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +49 -0
- package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +52 -0
- package/{esm2020 → esm2022}/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/ui-time-span/ui-time-span.component.mjs +24 -24
- package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
- package/esm2022/lib/ui-tree/ui-tree.component.mjs +92 -0
- package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +80 -0
- package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +23 -0
- package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +289 -0
- package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +25 -0
- package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +93 -0
- package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +117 -0
- package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +32 -0
- package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +48 -0
- package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +60 -0
- package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +87 -0
- package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
- package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +184 -0
- package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
- package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +84 -0
- package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +65 -0
- package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +116 -0
- package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +44 -0
- package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +115 -0
- package/esm2022/lib/upload-file-status.pipe.mjs +28 -0
- package/esm2022/lib/util-chat-time-badge.pipe.mjs +18 -0
- package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +23 -0
- package/{esm2020 → esm2022}/lib/wizard-layout.directive.mjs +103 -103
- package/{esm2020 → esm2022}/public-api.mjs +230 -222
- package/fesm2022/barsa-sap-ui.mjs +14745 -0
- package/fesm2022/barsa-sap-ui.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/apply-conditional-formmatings.directive.d.ts +25 -25
- package/lib/barsa-answer-card/barsa-answer-card.component.d.ts +12 -12
- package/lib/barsa-asp-viewer/barsa-asp-viewer.component.d.ts +29 -29
- package/lib/barsa-bar-panel/barsa-bar-panel.component.d.ts +9 -9
- package/lib/barsa-base-panel/barsa-base-layout-panel.component.d.ts +12 -12
- package/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.d.ts +15 -15
- package/lib/barsa-card-row-payam/barsa-card-row-payam.component.d.ts +20 -20
- package/lib/barsa-cartable-form/barsa-cartable-form.component.d.ts +10 -10
- package/lib/barsa-cartable-template/barsa-cartable-template.component.d.ts +14 -14
- package/lib/barsa-chat/barsa-chat.component.d.ts +48 -0
- package/lib/barsa-chat/chat.model.d.ts +43 -0
- package/lib/barsa-chat-content/barsa-chat-content.component.d.ts +5 -0
- package/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.d.ts +9 -0
- package/lib/barsa-chat-list/barsa-chat-list.component.d.ts +16 -0
- package/lib/barsa-chat-message/barsa-chat-message.component.d.ts +16 -0
- package/lib/barsa-chat-thread/barsa-chat-thread.component.d.ts +6 -0
- package/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.d.ts +5 -0
- package/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.d.ts +5 -0
- package/lib/barsa-chip/barsa-chip.component.d.ts +20 -20
- package/lib/barsa-column-indicator/barsa-column-indicator.component.d.ts +11 -11
- package/lib/barsa-column-rownumber/barsa-column-rownumber.component.d.ts +8 -8
- package/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.d.ts +6 -6
- package/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.d.ts +10 -10
- package/lib/barsa-date-time-picker/barsa-date-time-picker.component.d.ts +18 -18
- package/lib/barsa-dynamic-field/barsa-dynamic-field.component.d.ts +16 -16
- package/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.d.ts +23 -23
- package/lib/barsa-field-key-value/barsa-field-key-value.component.d.ts +26 -26
- package/lib/barsa-form-side-content/barsa-form-side-content.component.d.ts +25 -23
- package/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.d.ts +16 -16
- package/lib/barsa-group-cartable/barsa-cartable-group.component.d.ts +26 -26
- package/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.d.ts +14 -14
- package/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.d.ts +12 -12
- package/lib/barsa-list-file-linear/barsa-list-file-linear.component.d.ts +17 -17
- package/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.d.ts +8 -8
- package/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.d.ts +9 -9
- package/lib/barsa-monaco-editor/barsa-monaco-editor.component.d.ts +23 -23
- package/lib/barsa-network-offline/barsa-network-offline.component.d.ts +14 -14
- package/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.d.ts +79 -79
- package/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.d.ts +7 -7
- package/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.d.ts +13 -13
- package/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.d.ts +7 -7
- package/lib/barsa-question-answer-form/barsa-question-answer-form.component.d.ts +10 -10
- package/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.d.ts +13 -13
- package/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.d.ts +14 -14
- package/lib/barsa-question-post/barsa-question-post.component.d.ts +10 -10
- package/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.d.ts +9 -9
- package/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.d.ts +15 -15
- package/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.d.ts +31 -31
- package/lib/barsa-sap-ui-routing.module.d.ts +7 -7
- package/lib/barsa-sap-ui.module.d.ts +245 -234
- package/lib/barsa-search-form/barsa-search-form.component.d.ts +8 -8
- package/lib/barsa-simple-form/barsa-simple-form.component.d.ts +73 -73
- package/lib/barsa-table-column/barsa-table-column.component.d.ts +8 -8
- package/lib/barsa-table-header/barsa-table-header.component.d.ts +59 -59
- package/lib/barsa-table-row/barsa-table-row.component.d.ts +18 -18
- package/lib/barsa-tag-categories/barsa-tag-categories.component.d.ts +11 -11
- package/lib/barsa-tag-chip/barsa-tag-chip.component.d.ts +10 -10
- package/lib/barsa-tags-category-row/barsa-tags-category-row.component.d.ts +9 -9
- package/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.d.ts +18 -18
- package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +54 -54
- package/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.d.ts +12 -12
- package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +54 -54
- package/lib/barsa-tree-item/node-has-one-depth-level.pipe.d.ts +8 -8
- package/lib/barsa-ulv-main/barsa-ulv-main.component.d.ts +72 -72
- package/lib/blob-viewer/blob-viewer.component.d.ts +24 -24
- package/lib/breadcrumb/breadcrumb.component.d.ts +17 -17
- package/lib/captcha-field/captcha-field.component.d.ts +10 -10
- package/lib/card-item/card-item.component.d.ts +20 -20
- package/lib/card-view-content/card-view-content.component.d.ts +14 -14
- package/lib/col-renderer.directive.d.ts +10 -10
- package/lib/column-matrix-renderer/column-matrix-renderer.component.d.ts +23 -23
- package/lib/column-matrix-renderer/matrix-value.pipe.d.ts +8 -8
- package/lib/column-renderer/column-renderer.component.d.ts +33 -33
- package/lib/constants.d.ts +12 -12
- package/lib/custom-date-time/custom-date-time.component.d.ts +26 -26
- package/lib/device-info-field-base.d.ts +12 -12
- package/lib/dialog-handler.directive.d.ts +12 -12
- package/lib/download-files.directive.d.ts +9 -9
- package/lib/dynamic-page-size.pipe.d.ts +8 -8
- package/lib/file-in-dialog/file-in-dialog.component.d.ts +16 -16
- package/lib/file-viewer/file-viewer.component.d.ts +21 -21
- package/lib/file-viewer-content/file-viewer-content.component.d.ts +20 -20
- package/lib/file-viewer-popover/file-viewer-popover.component.d.ts +17 -17
- package/lib/form-dialog/form-dialog.component.d.ts +45 -45
- package/lib/form-dialog-less/form-dialog-less.component.d.ts +29 -29
- package/lib/form-toolbar/form-toolbar.component.d.ts +14 -14
- package/lib/form-toolbar-button/form-toolbar-button.component.d.ts +20 -20
- package/lib/form-wizard/form-wizard.component.d.ts +8 -8
- package/lib/fullscreen-dialog.directive.d.ts +20 -20
- package/lib/fullscreen-files.directive.d.ts +16 -16
- package/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.d.ts +76 -76
- package/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.d.ts +18 -18
- package/lib/global-search/global-search.component.d.ts +11 -11
- package/lib/global-search-module/global-search-module.component.d.ts +18 -18
- package/lib/global-search-panel/global-search-panel.component.d.ts +9 -9
- package/lib/header-avatar/header-avatar.component.d.ts +8 -8
- package/lib/header-facet-form/header-facet-form.component.d.ts +9 -9
- package/lib/header-facet-key-value/header-facet-key-value.component.d.ts +11 -11
- package/lib/header-facet-microchart/header-facet-microchart.component.d.ts +8 -8
- package/lib/header-facet-plain-text/header-facet-plain-text.component.d.ts +11 -11
- package/lib/header-facet-progress/header-facet-progress.component.d.ts +11 -11
- package/lib/header-facet-rate/header-facet-rate.component.d.ts +11 -11
- package/lib/htree-create-new/htree-create-new.component.d.ts +13 -13
- package/lib/hyperlink/hyperlink.component.d.ts +7 -7
- package/lib/index.d.ts +102 -100
- package/lib/inline-save-and-cancel/inline-save-and-cancel.component.d.ts +11 -11
- package/lib/layout-actions/layout-actions.component.d.ts +25 -25
- package/lib/layout-control/layout-control.component.d.ts +67 -67
- package/lib/layout-wizard/layout-wizard.component.d.ts +28 -28
- package/lib/list-item/list-item.component.d.ts +14 -14
- package/lib/ly-empty-space/ly-empty-space.component.d.ts +13 -13
- package/lib/ly-horizontal-layout/ly-horizontal-layout.component.d.ts +23 -23
- package/lib/ly-label/ly-label.component.d.ts +16 -16
- package/lib/ly-layout-container/ly-layout-container.component.d.ts +26 -26
- package/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.d.ts +8 -8
- package/lib/ly-layout-field-label/ly-layout-field-label.component.d.ts +13 -13
- package/lib/ly-layout-panel/ly-layout-panel.component.d.ts +26 -26
- package/lib/ly-line/ly-line.component.d.ts +17 -17
- package/lib/ly-simple-label/ly-simple-label.component.d.ts +9 -9
- package/lib/ly-tab-container/ly-tab-container.component.d.ts +19 -19
- package/lib/ly-tab-page/ly-tab-page.component.d.ts +20 -20
- package/lib/ly-vertical-layout/ly-vertical-layout.component.d.ts +19 -19
- package/lib/manage-filters-report/manage-filters-report.component.d.ts +24 -24
- package/lib/mask/mask.component.d.ts +9 -9
- package/lib/message-strip/message-strip.component.d.ts +11 -11
- package/lib/models/grid-data-provider.d.ts +22 -22
- package/lib/models/grid-view.d.ts +61 -61
- package/lib/models/index.d.ts +1 -1
- package/lib/no-data/no-data.component.d.ts +11 -9
- package/lib/notification-item/notification-item.component.d.ts +43 -43
- package/lib/notification-popup.service.d.ts +17 -17
- package/lib/progress-indicator/progress-indicator.component.d.ts +8 -8
- package/lib/report-navigator/report-navigator.component.d.ts +21 -21
- package/lib/report-new-top-form/report-new-top-form.component.d.ts +18 -18
- package/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.d.ts +14 -14
- package/lib/report-search-fields-manage/report-search-fields-manage.component.d.ts +20 -20
- package/lib/report-search-panel-save/report-search-panel-save.component.d.ts +27 -27
- package/lib/report-tree-base.d.ts +62 -62
- package/lib/report-view-renderer.directive.d.ts +117 -117
- package/lib/responsive-toolbar/responsive-toolbar.component.d.ts +19 -19
- package/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.d.ts +24 -24
- package/lib/rich-text-static/rich-text-static.component.d.ts +28 -28
- package/lib/sap-font-class.pipe.d.ts +8 -8
- package/lib/sap-font.pipe.d.ts +9 -9
- package/lib/sap-size.pipe.d.ts +8 -8
- package/lib/sap-ui-report-base.component.d.ts +154 -154
- package/lib/search-panel/search-panel.component.d.ts +14 -14
- package/lib/static-text/static-text.component.d.ts +7 -7
- package/lib/title/title.component.d.ts +7 -7
- package/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.d.ts +9 -9
- package/lib/ui-button/ui-button.component.d.ts +11 -11
- package/lib/ui-calendar/ui-calendar.component.d.ts +19 -19
- package/lib/ui-card-view/ui-card-view.component.d.ts +16 -16
- package/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.d.ts +12 -12
- package/lib/ui-check-box/ui-check-box.component.d.ts +14 -14
- package/lib/ui-color-ui/ui-color-ui.component.d.ts +16 -16
- package/lib/ui-container-with-button/ui-container-with-button.component.d.ts +11 -11
- package/lib/ui-date-range-ex/ui-date-range-ex.component.d.ts +35 -36
- package/lib/ui-date-time/ui-date-time.component.d.ts +39 -40
- package/lib/ui-editable-grid/ui-editable-grid.component.d.ts +43 -43
- package/lib/ui-exception-form/ui-exception-form.component.d.ts +15 -15
- package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +50 -50
- package/lib/ui-form-panel/ui-form-panel.component.d.ts +53 -53
- package/lib/ui-gantt-chart/ui-gantt-chart.component.d.ts +15 -15
- package/lib/ui-graph/ui-graph.component.d.ts +9 -9
- package/lib/ui-grid/ui-grid.component.d.ts +12 -12
- package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +14 -14
- package/lib/ui-grid-filter-item/ui-grid-filter-item.component.d.ts +19 -19
- package/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.d.ts +24 -24
- package/lib/ui-grid-sort-item/ui-grid-sort-item.component.d.ts +25 -25
- package/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.d.ts +28 -28
- package/lib/ui-html-viewer/ui-html-viewer.component.d.ts +9 -9
- package/lib/ui-info-bar-panel/ui-info-bar-panel.component.d.ts +5 -5
- package/lib/ui-label/ui-label.component.d.ts +6 -6
- package/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.d.ts +73 -73
- package/lib/ui-list-view/ui-list-view.component.d.ts +29 -29
- package/lib/ui-matrix-view/ui-matrix-view.component.d.ts +45 -45
- package/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.d.ts +7 -7
- package/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.d.ts +6 -6
- package/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.d.ts +15 -15
- package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +90 -89
- package/lib/ui-monaco-editor/ui-monaco-editor.component.d.ts +10 -7
- package/lib/ui-multi-select-card/ui-multi-select-card.component.d.ts +17 -17
- package/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.d.ts +19 -19
- package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +27 -27
- package/lib/ui-multi-select-radio/ui-multi-select-radio.component.d.ts +17 -17
- package/lib/ui-multi-select-slider/ui-multi-select-slider.component.d.ts +24 -24
- package/lib/ui-multi-select-smile/ui-multi-select-smile.component.d.ts +23 -23
- package/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.d.ts +11 -11
- package/lib/ui-num-int-slider/ui-num-int-slider.component.d.ts +18 -18
- package/lib/ui-num-int-ui/ui-num-int-ui.component.d.ts +10 -10
- package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +79 -79
- package/lib/ui-picture-file/ui-picture-file.component.d.ts +26 -25
- package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +80 -69
- package/lib/ui-radio-group/ui-radio-group.component.d.ts +20 -20
- package/lib/ui-read-only-field/ui-read-only-field.component.d.ts +21 -21
- package/lib/ui-report-container/ui-report-container.component.d.ts +17 -17
- package/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.d.ts +9 -9
- package/lib/ui-simple-combo/ui-simple-combo.component.d.ts +16 -16
- package/lib/ui-single-picture/ui-single-picture.component.d.ts +13 -13
- package/lib/ui-switch-button/ui-switch-button.component.d.ts +11 -11
- package/lib/ui-table-view/ui-table-view.component.d.ts +39 -39
- package/lib/ui-text-area/ui-text-area.component.d.ts +23 -23
- package/lib/ui-text-field/ui-text-field.component.d.ts +23 -23
- package/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.d.ts +13 -13
- package/lib/ui-time-span/ui-time-span.component.d.ts +10 -10
- package/lib/ui-tinymce/ui-tinymce.component.d.ts +22 -22
- package/lib/ui-tree/ui-tree.component.d.ts +37 -37
- package/lib/ui-tree-view/ui-tree-view.component.d.ts +47 -47
- package/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.d.ts +9 -9
- package/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.d.ts +74 -74
- package/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.d.ts +16 -16
- package/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.d.ts +21 -21
- package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +48 -48
- package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +21 -21
- package/lib/ul-toast-adapter/ul-toast-adapter.component.d.ts +13 -13
- package/lib/ulv-column-settings/ulv-column-settings.component.d.ts +20 -20
- package/lib/ulv-context-menu/ulv-context-menu.component.d.ts +31 -31
- package/lib/ulv-filter-settings/ulv-filter-settings.component.d.ts +19 -19
- package/lib/ulv-form-multi-select/ulv-form-multi-select.component.d.ts +26 -26
- package/lib/ulv-groupby-settings/ulv-groupby-settings.component.d.ts +16 -16
- package/lib/ulv-paging/ulv-paging.component.d.ts +28 -28
- package/lib/ulv-selection/ulv-selection.component.d.ts +43 -43
- package/lib/ulv-settings/ulv-settings.component.d.ts +43 -43
- package/lib/ulv-sort-settings/ulv-sort-settings.component.d.ts +16 -16
- package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +49 -49
- package/lib/upload-file-status.pipe.d.ts +9 -9
- package/lib/util-chat-time-badge.pipe.d.ts +7 -0
- package/lib/util-date-to-hh-mm.pipe.d.ts +7 -0
- package/lib/wizard-layout.directive.d.ts +40 -40
- package/package.json +7 -13
- package/public-api.d.ts +226 -218
- package/esm2020/lib/apply-conditional-formmatings.directive.mjs +0 -89
- package/esm2020/lib/barsa-answer-card/barsa-answer-card.component.mjs +0 -41
- package/esm2020/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +0 -127
- package/esm2020/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +0 -29
- package/esm2020/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +0 -25
- package/esm2020/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +0 -30
- package/esm2020/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +0 -41
- package/esm2020/lib/barsa-chip/barsa-chip.component.mjs +0 -72
- package/esm2020/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +0 -15
- package/esm2020/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +0 -26
- package/esm2020/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +0 -71
- package/esm2020/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +0 -42
- package/esm2020/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +0 -61
- package/esm2020/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +0 -45
- package/esm2020/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +0 -37
- package/esm2020/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +0 -27
- package/esm2020/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +0 -94
- package/esm2020/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +0 -22
- package/esm2020/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +0 -37
- package/esm2020/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +0 -41
- package/esm2020/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +0 -29
- package/esm2020/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +0 -23
- package/esm2020/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +0 -83
- package/esm2020/lib/barsa-network-offline/barsa-network-offline.component.mjs +0 -53
- package/esm2020/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +0 -159
- package/esm2020/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +0 -17
- package/esm2020/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +0 -31
- package/esm2020/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +0 -14
- package/esm2020/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +0 -35
- package/esm2020/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +0 -47
- package/esm2020/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +0 -78
- package/esm2020/lib/barsa-question-post/barsa-question-post.component.mjs +0 -30
- package/esm2020/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +0 -31
- package/esm2020/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +0 -98
- package/esm2020/lib/barsa-sap-ui.module.mjs +0 -332
- package/esm2020/lib/barsa-search-form/barsa-search-form.component.mjs +0 -29
- package/esm2020/lib/barsa-simple-form/barsa-simple-form.component.mjs +0 -168
- package/esm2020/lib/barsa-table-column/barsa-table-column.component.mjs +0 -28
- package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +0 -198
- package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +0 -61
- package/esm2020/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +0 -60
- package/esm2020/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +0 -26
- package/esm2020/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +0 -23
- package/esm2020/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +0 -38
- package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +0 -417
- package/esm2020/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +0 -36
- package/esm2020/lib/barsa-tree-item/barsa-tree-item.component.mjs +0 -130
- package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +0 -209
- package/esm2020/lib/blob-viewer/blob-viewer.component.mjs +0 -78
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +0 -45
- package/esm2020/lib/card-item/card-item.component.mjs +0 -76
- package/esm2020/lib/card-view-content/card-view-content.component.mjs +0 -46
- package/esm2020/lib/col-renderer.directive.mjs +0 -46
- package/esm2020/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +0 -56
- package/esm2020/lib/column-matrix-renderer/matrix-value.pipe.mjs +0 -60
- package/esm2020/lib/column-renderer/column-renderer.component.mjs +0 -85
- package/esm2020/lib/constants.mjs +0 -421
- package/esm2020/lib/custom-date-time/custom-date-time.component.mjs +0 -41
- package/esm2020/lib/download-files.directive.mjs +0 -33
- package/esm2020/lib/dynamic-page-size.pipe.mjs +0 -26
- package/esm2020/lib/file-viewer/file-viewer.component.mjs +0 -47
- package/esm2020/lib/file-viewer-popover/file-viewer-popover.component.mjs +0 -41
- package/esm2020/lib/form-dialog/form-dialog.component.mjs +0 -143
- package/esm2020/lib/form-dialog-less/form-dialog-less.component.mjs +0 -45
- package/esm2020/lib/form-toolbar/form-toolbar.component.mjs +0 -42
- package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +0 -46
- package/esm2020/lib/form-wizard/form-wizard.component.mjs +0 -21
- package/esm2020/lib/fullscreen-dialog.directive.mjs +0 -59
- package/esm2020/lib/fullscreen-files.directive.mjs +0 -42
- package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +0 -188
- package/esm2020/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +0 -203
- package/esm2020/lib/global-search-module/global-search-module.component.mjs +0 -30
- package/esm2020/lib/global-search-panel/global-search-panel.component.mjs +0 -25
- package/esm2020/lib/header-avatar/header-avatar.component.mjs +0 -19
- package/esm2020/lib/header-facet-progress/header-facet-progress.component.mjs +0 -26
- package/esm2020/lib/header-facet-rate/header-facet-rate.component.mjs +0 -26
- package/esm2020/lib/htree-create-new/htree-create-new.component.mjs +0 -49
- package/esm2020/lib/hyperlink/hyperlink.component.mjs +0 -23
- package/esm2020/lib/index.mjs +0 -529
- package/esm2020/lib/layout-actions/layout-actions.component.mjs +0 -68
- package/esm2020/lib/layout-control/layout-control.component.mjs +0 -234
- package/esm2020/lib/layout-wizard/layout-wizard.component.mjs +0 -155
- package/esm2020/lib/list-item/list-item.component.mjs +0 -33
- package/esm2020/lib/ly-empty-space/ly-empty-space.component.mjs +0 -42
- package/esm2020/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +0 -71
- package/esm2020/lib/ly-label/ly-label.component.mjs +0 -35
- package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +0 -83
- package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +0 -17
- package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +0 -73
- package/esm2020/lib/ly-line/ly-line.component.mjs +0 -56
- package/esm2020/lib/ly-simple-label/ly-simple-label.component.mjs +0 -23
- package/esm2020/lib/ly-tab-container/ly-tab-container.component.mjs +0 -52
- package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +0 -44
- package/esm2020/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +0 -50
- package/esm2020/lib/manage-filters-report/manage-filters-report.component.mjs +0 -45
- package/esm2020/lib/message-strip/message-strip.component.mjs +0 -28
- package/esm2020/lib/models/grid-data-provider.mjs +0 -83
- package/esm2020/lib/models/grid-view.mjs +0 -2
- package/esm2020/lib/no-data/no-data.component.mjs +0 -23
- package/esm2020/lib/notification-item/notification-item.component.mjs +0 -57
- package/esm2020/lib/notification-popup.service.mjs +0 -88
- package/esm2020/lib/report-navigator/report-navigator.component.mjs +0 -63
- package/esm2020/lib/report-new-top-form/report-new-top-form.component.mjs +0 -60
- package/esm2020/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +0 -35
- package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +0 -98
- package/esm2020/lib/report-search-panel-save/report-search-panel-save.component.mjs +0 -90
- package/esm2020/lib/report-tree-base.mjs +0 -408
- package/esm2020/lib/report-view-renderer.directive.mjs +0 -366
- package/esm2020/lib/responsive-toolbar/responsive-toolbar.component.mjs +0 -50
- package/esm2020/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +0 -84
- package/esm2020/lib/rich-text-static/rich-text-static.component.mjs +0 -72
- package/esm2020/lib/sap-font-class.pipe.mjs +0 -29
- package/esm2020/lib/sap-font.pipe.mjs +0 -29
- package/esm2020/lib/sap-size.pipe.mjs +0 -27
- package/esm2020/lib/sap-ui-report-base.component.mjs +0 -766
- package/esm2020/lib/search-panel/search-panel.component.mjs +0 -43
- package/esm2020/lib/ui-button/ui-button.component.mjs +0 -31
- package/esm2020/lib/ui-calendar/ui-calendar.component.mjs +0 -53
- package/esm2020/lib/ui-card-view/ui-card-view.component.mjs +0 -60
- package/esm2020/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +0 -43
- package/esm2020/lib/ui-check-box/ui-check-box.component.mjs +0 -34
- package/esm2020/lib/ui-color-ui/ui-color-ui.component.mjs +0 -50
- package/esm2020/lib/ui-container-with-button/ui-container-with-button.component.mjs +0 -34
- package/esm2020/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +0 -194
- package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +0 -150
- package/esm2020/lib/ui-editable-grid/ui-editable-grid.component.mjs +0 -110
- package/esm2020/lib/ui-exception-form/ui-exception-form.component.mjs +0 -53
- package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +0 -121
- package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +0 -92
- package/esm2020/lib/ui-grid-columns/ui-grid-columns.component.mjs +0 -44
- package/esm2020/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +0 -67
- package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +0 -76
- package/esm2020/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +0 -59
- package/esm2020/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +0 -156
- package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +0 -349
- package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +0 -75
- package/esm2020/lib/ui-matrix-view/ui-matrix-view.component.mjs +0 -125
- package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +0 -19
- package/esm2020/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +0 -56
- package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +0 -409
- package/esm2020/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +0 -18
- package/esm2020/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +0 -37
- package/esm2020/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +0 -59
- package/esm2020/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +0 -93
- package/esm2020/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +0 -36
- package/esm2020/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +0 -56
- package/esm2020/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +0 -28
- package/esm2020/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +0 -24
- package/esm2020/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +0 -27
- package/esm2020/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +0 -262
- package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +0 -91
- package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +0 -223
- package/esm2020/lib/ui-radio-group/ui-radio-group.component.mjs +0 -48
- package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +0 -36
- package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +0 -46
- package/esm2020/lib/ui-simple-combo/ui-simple-combo.component.mjs +0 -37
- package/esm2020/lib/ui-switch-button/ui-switch-button.component.mjs +0 -20
- package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +0 -151
- package/esm2020/lib/ui-text-area/ui-text-area.component.mjs +0 -49
- package/esm2020/lib/ui-text-field/ui-text-field.component.mjs +0 -52
- package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +0 -53
- package/esm2020/lib/ui-tree/ui-tree.component.mjs +0 -92
- package/esm2020/lib/ui-tree-view/ui-tree-view.component.mjs +0 -81
- package/esm2020/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +0 -24
- package/esm2020/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +0 -289
- package/esm2020/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +0 -26
- package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +0 -91
- package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +0 -117
- package/esm2020/lib/ul-notify-popup/ul-notify-popup.component.mjs +0 -32
- package/esm2020/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +0 -44
- package/esm2020/lib/ulv-column-settings/ulv-column-settings.component.mjs +0 -60
- package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +0 -87
- package/esm2020/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +0 -43
- package/esm2020/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +0 -185
- package/esm2020/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +0 -44
- package/esm2020/lib/ulv-paging/ulv-paging.component.mjs +0 -84
- package/esm2020/lib/ulv-selection/ulv-selection.component.mjs +0 -66
- package/esm2020/lib/ulv-settings/ulv-settings.component.mjs +0 -117
- package/esm2020/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +0 -44
- package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +0 -115
- package/esm2020/lib/upload-file-status.pipe.mjs +0 -28
- package/fesm2015/barsa-sap-ui.mjs +0 -14213
- package/fesm2015/barsa-sap-ui.mjs.map +0 -1
- package/fesm2020/barsa-sap-ui.mjs +0 -14183
- package/fesm2020/barsa-sap-ui.mjs.map +0 -1
|
@@ -0,0 +1,765 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
3
|
+
import { debounceTime, distinctUntilChanged, filter, map, takeUntil, tap, withLatestFrom } from 'rxjs/operators';
|
|
4
|
+
import { TableComponent, ToolbarComponent } from '@fundamental-ngx/core';
|
|
5
|
+
import { BarsaApi, GetAllColumnsSorted, getControlSizeMode, getGridSettings, ReportBaseComponent, getParentHeight, measureText, getUniqueId, SelectionMode } from 'barsa-novin-ray-core';
|
|
6
|
+
import { LayoutControlComponent } from './layout-control/layout-control.component';
|
|
7
|
+
import { GridMoDataList } from './models';
|
|
8
|
+
import { UlvColumnSettingsComponent } from './ulv-column-settings/ulv-column-settings.component';
|
|
9
|
+
import { UlvSortSettingsComponent } from './ulv-sort-settings/ulv-sort-settings.component';
|
|
10
|
+
import { UlvGroupbySettingsComponent } from './ulv-groupby-settings/ulv-groupby-settings.component';
|
|
11
|
+
import { UlvFilterSettingsComponent } from './ulv-filter-settings/ulv-filter-settings.component';
|
|
12
|
+
import { DOCUMENT } from '@angular/common';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
15
|
+
import * as i2 from "@fundamental-ngx/core";
|
|
16
|
+
import * as i3 from "barsa-novin-ray-core";
|
|
17
|
+
export class SapUiReportBaseComponent extends ReportBaseComponent {
|
|
18
|
+
constructor(el, _cdr, _overlay, _contentDensityService, _portalService, _dialogService, _ulvMainService, _layoutService, _renderer, document, _formpanelService) {
|
|
19
|
+
super(_portalService, _ulvMainService);
|
|
20
|
+
this.el = el;
|
|
21
|
+
this._cdr = _cdr;
|
|
22
|
+
this._overlay = _overlay;
|
|
23
|
+
this._contentDensityService = _contentDensityService;
|
|
24
|
+
this._portalService = _portalService;
|
|
25
|
+
this._dialogService = _dialogService;
|
|
26
|
+
this._ulvMainService = _ulvMainService;
|
|
27
|
+
this._layoutService = _layoutService;
|
|
28
|
+
this._renderer = _renderer;
|
|
29
|
+
this.document = document;
|
|
30
|
+
this._formpanelService = _formpanelService;
|
|
31
|
+
this.useLayoutItemTextForControl = false;
|
|
32
|
+
this.parentHeight = 0;
|
|
33
|
+
this.dialogConfig = {
|
|
34
|
+
responsivePadding: true,
|
|
35
|
+
verticalPadding: true,
|
|
36
|
+
minWidth: '40rem',
|
|
37
|
+
minHeight: '90vh',
|
|
38
|
+
maxWidth: '100vw',
|
|
39
|
+
maxHeight: '100vh',
|
|
40
|
+
resizable: true
|
|
41
|
+
};
|
|
42
|
+
this.id = `Report_${getUniqueId(3)}`;
|
|
43
|
+
this.selectedRowsNumber = {};
|
|
44
|
+
this.selectAll = false;
|
|
45
|
+
this.rowClick = true;
|
|
46
|
+
this.cellClick = false;
|
|
47
|
+
this.secondaryColumnsSource = new BehaviorSubject([]);
|
|
48
|
+
this.secondaryColumns$ = this.secondaryColumnsSource.asObservable();
|
|
49
|
+
this.hasDetailsInRow = false;
|
|
50
|
+
this.rowActivable = true;
|
|
51
|
+
this.openOverflowCommands = [];
|
|
52
|
+
this.containerWidthSource$ = new Subject();
|
|
53
|
+
this.singleSelection = SelectionMode.SINGLE;
|
|
54
|
+
this.multipleSelection = SelectionMode.MULTIPLE;
|
|
55
|
+
this._deviceNameSource = new BehaviorSubject('desktop');
|
|
56
|
+
/* eslint-disable */
|
|
57
|
+
this.ShowFormPanelControl = (formpanelCtrlr) => { };
|
|
58
|
+
/* eslint-disable */
|
|
59
|
+
this.ForceCloseChild = () => { };
|
|
60
|
+
/* eslint-disable */
|
|
61
|
+
this.RefreshFormPanelControl = (formpanelCtrlr) => { };
|
|
62
|
+
this.containerWidth$ = this.containerWidthSource$
|
|
63
|
+
.asObservable()
|
|
64
|
+
.pipe(debounceTime(200), distinctUntilChanged());
|
|
65
|
+
this.deviceName$ = this._deviceNameSource.asObservable();
|
|
66
|
+
this.disableResponsive$ = this.deviceName$.pipe(map((c) => c === 'desktop'));
|
|
67
|
+
this.mobileOrTablet$ = this.deviceName$.pipe(map((device) => device === 'mobile' || device === 'tablet'));
|
|
68
|
+
this._oldContainer = BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter;
|
|
69
|
+
this.closeScrollStrategy = this._overlay.scrollStrategies.close();
|
|
70
|
+
this.contentDensity$ = this._contentDensityService.contentDensity;
|
|
71
|
+
this.secondaryColumnsCount$ = this.secondaryColumns$.pipe(map((columns) => columns.length));
|
|
72
|
+
this.columnsCount$ = this.visibleColumns$.pipe(map((columns) => columns.length), map((count) => {
|
|
73
|
+
const access = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.Extra.DefaultCommandsAccess');
|
|
74
|
+
if (access?.View) {
|
|
75
|
+
count++;
|
|
76
|
+
}
|
|
77
|
+
return count;
|
|
78
|
+
}), map((count) => {
|
|
79
|
+
if (this.selectionMode !== 'none') {
|
|
80
|
+
count++;
|
|
81
|
+
}
|
|
82
|
+
return count;
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
onResetWorkflowState(mo) {
|
|
86
|
+
mo.$WorkflowState = null;
|
|
87
|
+
this._resetMoDataList();
|
|
88
|
+
}
|
|
89
|
+
get _typeDefId() {
|
|
90
|
+
return this.context.Setting.Extra.Report.TypeDefId;
|
|
91
|
+
}
|
|
92
|
+
get _inlineEditMode() {
|
|
93
|
+
return this._ulvMainService.getValueInlineEdit();
|
|
94
|
+
}
|
|
95
|
+
get _allowInlineEdit() {
|
|
96
|
+
return this._ulvMainService.getAllowInlineEdit();
|
|
97
|
+
}
|
|
98
|
+
get _access() {
|
|
99
|
+
return this.context.Setting?.Extra?.DefaultCommandsAccess;
|
|
100
|
+
}
|
|
101
|
+
set _access(val) {
|
|
102
|
+
if (this.context.Setting.Extra) {
|
|
103
|
+
this.context.Setting.Extra.DefaultCommandsAccess = val;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.context.Setting.Extra = { DefaultCommandsAccess: val };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
get isCheckList() {
|
|
110
|
+
return this.context.ViewSetting?.IsCheckList;
|
|
111
|
+
}
|
|
112
|
+
ngOnInit() {
|
|
113
|
+
this._setParentHeight();
|
|
114
|
+
this._readViewSetting();
|
|
115
|
+
if (!this._access) {
|
|
116
|
+
this._setDefaultAccess();
|
|
117
|
+
}
|
|
118
|
+
super.ngOnInit();
|
|
119
|
+
this.showOkCancelButtons = this.context.ShowOkCancelButtons;
|
|
120
|
+
this._ulvMainService.layoutInfo$.subscribe((layoutInfo) => {
|
|
121
|
+
if (layoutInfo && layoutInfo.UseLayoutItemTextForControl) {
|
|
122
|
+
this.useLayoutItemTextForControl = true;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
const title = this.viewSetting?.Title;
|
|
126
|
+
if (title) {
|
|
127
|
+
this._ulvMainService.setTitle(title);
|
|
128
|
+
}
|
|
129
|
+
this._ulvMainService.reportId$.subscribe((reportId) => (this.reportId = reportId));
|
|
130
|
+
this._layoutService.setRendered(true);
|
|
131
|
+
this.selectionMode = this.context.ViewSetting?.IsCheckList ? this.multipleSelection : this.singleSelection;
|
|
132
|
+
this._openOnClick = this.viewSetting?.OpenOnClick;
|
|
133
|
+
this.customRowHeight = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.ExtraJsonPropReport.GridRowHeight');
|
|
134
|
+
this.rtl$ = this._portalService.rtl$;
|
|
135
|
+
this.navigationArrow$ = this._portalService.rtl$.pipe(map((isRtl) => (isRtl ? 'navigation-left-arrow' : 'navigation-right-arrow')));
|
|
136
|
+
this.allowInlineEdit$ = this._ulvMainService.allowInlineEdit$;
|
|
137
|
+
this.inlineEditMode$ = this._ulvMainService.inlineEditMode$;
|
|
138
|
+
this.onlyInlineEdit$ = this._ulvMainService.onlyInlineEdit$;
|
|
139
|
+
this._ulvMainService.setCanSaveGridSettings(this.viewSetting?.CanSaveGridSetting);
|
|
140
|
+
this.hasSelected$ = this.moDataList$.pipe(map((moList) => moList.some((c) => c.$IsChecked)));
|
|
141
|
+
this.moDataList$ = this.moDataList$.pipe(map((items) => this._mapCartableMo(items)));
|
|
142
|
+
const gridDataSource = new GridMoDataList(this.moDataList$, this.gridSetting$, this.visibleColumns$, this.searchTerm$);
|
|
143
|
+
this.gridDataSource = gridDataSource;
|
|
144
|
+
this.columns$ = combineLatest([this.gridSetting$, this.secondaryColumns$]).pipe(map(([_, secondaryColumns]) => {
|
|
145
|
+
const secondaries = secondaryColumns.map((c) => c.Name);
|
|
146
|
+
let columns = GetAllColumnsSorted(this.context).filter((c) => !c.Hidden);
|
|
147
|
+
const groupedColumns = _?.SortSettingList?.filter((c) => c.IsGrouped).map((c) => c.Name);
|
|
148
|
+
if (groupedColumns?.length) {
|
|
149
|
+
columns = columns.filter((c) => groupedColumns.indexOf(c.Name) === -1);
|
|
150
|
+
}
|
|
151
|
+
return columns.filter((c) => secondaries.indexOf(c.Name) === -1);
|
|
152
|
+
}), tap((columns) => {
|
|
153
|
+
columns.forEach((c) => {
|
|
154
|
+
c.$CSSClassName = 'column__FieldType' + c.FieldTypeId;
|
|
155
|
+
if (c.FieldTypeId === 38) {
|
|
156
|
+
c.$Width = 'auto';
|
|
157
|
+
}
|
|
158
|
+
if (c.Extra?.IconDisplayTypeEnum === 'Image') {
|
|
159
|
+
c.$Width = '38px';
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
c.$Width = !BarsaApi.LoginFormData.IsUserLoggedIn // if user is anonymous all column width equals to 100%
|
|
163
|
+
? '100%'
|
|
164
|
+
: c.Width > 0
|
|
165
|
+
? c.Width + 'px'
|
|
166
|
+
: '100%';
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}));
|
|
170
|
+
this._ulvMainService.inlineEditMode$.pipe(withLatestFrom(this.hasSelected$), filter(() => this._access.Add !== false));
|
|
171
|
+
this._setContainerWidth();
|
|
172
|
+
}
|
|
173
|
+
ngOnDestroy() {
|
|
174
|
+
super.ngOnDestroy();
|
|
175
|
+
if (this._formpanelService) {
|
|
176
|
+
this._formpanelService.destroy();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
onExecuteToolbarButton(e) {
|
|
180
|
+
const { itemId, options } = e;
|
|
181
|
+
this._ulvMainService.executeToolbarButton(itemId, options);
|
|
182
|
+
}
|
|
183
|
+
onEditMode() {
|
|
184
|
+
this._setInlineEdit(!this._inlineEditMode);
|
|
185
|
+
}
|
|
186
|
+
onSelectNextInlineRecord(mo) {
|
|
187
|
+
this._selectNextInlineRecord(mo);
|
|
188
|
+
}
|
|
189
|
+
onEditFormPanelSave(mo) {
|
|
190
|
+
this._inlineEditSaveFormPanel(mo);
|
|
191
|
+
}
|
|
192
|
+
onEditFormPanelCancel(mo) {
|
|
193
|
+
const moDataList = this.moDataList;
|
|
194
|
+
const hasSelected = moDataList.some((c) => c.$IsChecked);
|
|
195
|
+
if (hasSelected) {
|
|
196
|
+
this._inlineEditSaveFormPanel(mo);
|
|
197
|
+
this._setInlineEdit(false);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
onEditFormPanelValueChange(mo) {
|
|
201
|
+
this._inlineFormPanelValueChange(mo);
|
|
202
|
+
}
|
|
203
|
+
onColumnResized(columns) {
|
|
204
|
+
this._handleColumnsResized(columns);
|
|
205
|
+
}
|
|
206
|
+
onWorkflowShareButtons(e) {
|
|
207
|
+
this._ulvMainService.addWorkflowButtonsInToolbar(e);
|
|
208
|
+
}
|
|
209
|
+
onRowClick($event) {
|
|
210
|
+
const { mo } = $event;
|
|
211
|
+
if (mo.group || this._inlineEditMode) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const moIndex = this._getIndex(mo);
|
|
215
|
+
this._removeCheckedAll();
|
|
216
|
+
if (!mo.$IsChecked) {
|
|
217
|
+
this._rowCheck(mo, moIndex, true);
|
|
218
|
+
}
|
|
219
|
+
if (this.viewSetting?.DisableShowFormOnDoubleClick) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
this._openMo(mo, moIndex);
|
|
223
|
+
}
|
|
224
|
+
onUlvCommand($event) {
|
|
225
|
+
const { mo } = $event;
|
|
226
|
+
const moIndex = this._getIndex(mo);
|
|
227
|
+
this._ulvCommandClicked(mo, moIndex);
|
|
228
|
+
}
|
|
229
|
+
onDeselectAll() {
|
|
230
|
+
this._doCheckedAll(false);
|
|
231
|
+
// this.context.fireEvent('rowselect', this.context); // باعث میشود دوبار selectionchange گزارش فراخوانی شود
|
|
232
|
+
}
|
|
233
|
+
onRowCheck($event) {
|
|
234
|
+
const { mo } = $event;
|
|
235
|
+
const moIndex = this._getIndex(mo);
|
|
236
|
+
if (this._openOnClick) {
|
|
237
|
+
this.onRowClick($event);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
this._rowCheck(mo, moIndex);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
onCartableFormClosed({ mo }) {
|
|
244
|
+
const newMoDataList = this.moDataList;
|
|
245
|
+
const newMoDataList2 = newMoDataList.filter((c) => c.Id !== mo.Id);
|
|
246
|
+
this._resetMoDataList(newMoDataList2);
|
|
247
|
+
this.refreshContextMoDataList(newMoDataList2);
|
|
248
|
+
}
|
|
249
|
+
onExpandClick(mo) {
|
|
250
|
+
mo.$Expanded = !mo.$Expanded;
|
|
251
|
+
this._setVisibility(mo.$Expanded, mo);
|
|
252
|
+
this._resetMoDataList();
|
|
253
|
+
}
|
|
254
|
+
onAllCheckbox(checked) {
|
|
255
|
+
this._doCheckedAll(checked);
|
|
256
|
+
// if (checked) {
|
|
257
|
+
// this.gridDataSource.resultItems.forEach((mo, index) => {
|
|
258
|
+
// this._select(mo, index);
|
|
259
|
+
// });
|
|
260
|
+
// } else {
|
|
261
|
+
// this.gridDataSource.resultItems.forEach((mo, index) => {
|
|
262
|
+
// this._deselect(mo, index);
|
|
263
|
+
// });
|
|
264
|
+
// }
|
|
265
|
+
}
|
|
266
|
+
onSortAscending(column) {
|
|
267
|
+
this._addSortColumn(column.Name, 'ASC');
|
|
268
|
+
}
|
|
269
|
+
onSortDescending(column) {
|
|
270
|
+
this._addSortColumn(column.Name, 'DESC');
|
|
271
|
+
}
|
|
272
|
+
onFilter(selectedColumn) {
|
|
273
|
+
this._showFilterSetting(selectedColumn);
|
|
274
|
+
}
|
|
275
|
+
onColumnSettings(device) {
|
|
276
|
+
this._openSettings('columns', device);
|
|
277
|
+
}
|
|
278
|
+
onSortSettings(device) {
|
|
279
|
+
this._openSettings('sort', device);
|
|
280
|
+
}
|
|
281
|
+
onGroupbySettings(device) {
|
|
282
|
+
this._openSettings('groupby', device);
|
|
283
|
+
}
|
|
284
|
+
onListCheckboxClick($event) {
|
|
285
|
+
const { mo, index, e } = $event;
|
|
286
|
+
this.onRowCheck({ mo, index, cause: 'singleSelect' });
|
|
287
|
+
e.stopPropagation();
|
|
288
|
+
e.preventDefault();
|
|
289
|
+
}
|
|
290
|
+
onListNavigationClick($event) {
|
|
291
|
+
const { mo, index, e } = $event;
|
|
292
|
+
this.onRowClick({ mo, index });
|
|
293
|
+
e.stopPropagation();
|
|
294
|
+
e.preventDefault();
|
|
295
|
+
}
|
|
296
|
+
onSaveTopForm(mo) {
|
|
297
|
+
const newMoDataList = this.moDataList;
|
|
298
|
+
const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
299
|
+
if (existsIndex > -1) {
|
|
300
|
+
newMoDataList[existsIndex] = mo;
|
|
301
|
+
}
|
|
302
|
+
newMoDataList.map((c) => {
|
|
303
|
+
c.$NewInlineMo = undefined;
|
|
304
|
+
c.$IsChecked = false;
|
|
305
|
+
});
|
|
306
|
+
this._resetMoDataList(newMoDataList);
|
|
307
|
+
this.refreshContextMoDataList(newMoDataList);
|
|
308
|
+
}
|
|
309
|
+
onNewTopFormAdd(mo) {
|
|
310
|
+
this._addInlineMoToModataList(mo);
|
|
311
|
+
}
|
|
312
|
+
// protected _inlineEditModeChanged(editMode): void {
|
|
313
|
+
// if (editMode) {
|
|
314
|
+
// const canAdd: boolean = this._access?.Add !== false;
|
|
315
|
+
// let selectedMo = this._getSelected();
|
|
316
|
+
// let newMo;
|
|
317
|
+
// if (canAdd !== false && !selectedMo) {
|
|
318
|
+
// this._createNewInlineRecord();
|
|
319
|
+
// return;
|
|
320
|
+
// }
|
|
321
|
+
// // if (!selectedMo && !newMo && this.moDataList.length > 0) {
|
|
322
|
+
// // selectedMo = this.moDataList[0];
|
|
323
|
+
// // }
|
|
324
|
+
// // if (selectedMo) {
|
|
325
|
+
// // const idOfSelectedMo = this._indexOfMo(selectedMo);
|
|
326
|
+
// // selectedMo.$IsChecked = false;
|
|
327
|
+
// // this._createNewInlineRecord(selectedMo);
|
|
328
|
+
// // this._rowCheck(selectedMo, idOfSelectedMo);
|
|
329
|
+
// // }
|
|
330
|
+
// } else {
|
|
331
|
+
// BarsaApi.Ul.ApplicationCtrlr.CurrentSystemAdapter = this._oldContainer;
|
|
332
|
+
// this._setNewInlineMo(null);
|
|
333
|
+
// }
|
|
334
|
+
// }
|
|
335
|
+
// protected _createNewInlineRecord(selectedMo?: MetaobjectDataModel) {
|
|
336
|
+
// const mo = this._inlineEditPrepareNewMo();
|
|
337
|
+
// const formMo = BarsaApi.Common.Merger.FastMerge(mo, selectedMo, { extendedFields: ['Id,$Caption'] });
|
|
338
|
+
// this._setNewInlineMo(formMo);
|
|
339
|
+
// this._select(formMo, -1);
|
|
340
|
+
// }
|
|
341
|
+
_resetMoDataList(newMoDataList) {
|
|
342
|
+
this._ulvMainService.reSetMoDataList(newMoDataList);
|
|
343
|
+
}
|
|
344
|
+
_getWidth(label) {
|
|
345
|
+
const labelWithPadding = measureText(label);
|
|
346
|
+
if (labelWithPadding < 1) {
|
|
347
|
+
return 0;
|
|
348
|
+
}
|
|
349
|
+
return Math.ceil(labelWithPadding);
|
|
350
|
+
}
|
|
351
|
+
_setParentHeight() {
|
|
352
|
+
this.parentHeight = getParentHeight(this.el.nativeElement);
|
|
353
|
+
}
|
|
354
|
+
_mapCartableMo(items) {
|
|
355
|
+
if (!this.viewSetting) {
|
|
356
|
+
return items;
|
|
357
|
+
}
|
|
358
|
+
const { NameSerializeMo, CartableObjectName } = this.viewSetting;
|
|
359
|
+
if (!NameSerializeMo || !CartableObjectName || !items?.length) {
|
|
360
|
+
return items;
|
|
361
|
+
}
|
|
362
|
+
items.forEach((c) => (c[CartableObjectName] = BarsaApi.Ext.decode('{' + c[NameSerializeMo] + '}')));
|
|
363
|
+
return items;
|
|
364
|
+
}
|
|
365
|
+
onToolbarCreateNewInlineMo() {
|
|
366
|
+
this._createNewInlineMo();
|
|
367
|
+
}
|
|
368
|
+
onCreateNewMo() {
|
|
369
|
+
this._createNewInlineMo(true);
|
|
370
|
+
}
|
|
371
|
+
onMandatory(isMandator) {
|
|
372
|
+
this.context.fireEvent('Mandatory', isMandator);
|
|
373
|
+
}
|
|
374
|
+
onUpdateMo(mo) {
|
|
375
|
+
const moDataList = this.moDataList;
|
|
376
|
+
const moIndex = moDataList.findIndex((c) => c.Id === mo.Id);
|
|
377
|
+
if (moIndex > -1) {
|
|
378
|
+
moDataList[moIndex] = mo;
|
|
379
|
+
this._resetMoDataList(moDataList);
|
|
380
|
+
this.refreshContextMoDataList(moDataList);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
onHasDetailsInRow(value, deviceSize) {
|
|
384
|
+
this.hasDetailsInRow = value;
|
|
385
|
+
this._deviceSizeChanged(deviceSize);
|
|
386
|
+
}
|
|
387
|
+
onEscapeKey(mo) {
|
|
388
|
+
this._handleCancelInlineEdit(mo);
|
|
389
|
+
}
|
|
390
|
+
_handleCancelInlineEdit(mo) {
|
|
391
|
+
const moDataList = this.moDataList;
|
|
392
|
+
const moIndex = moDataList.findIndex((c) => c.Id === mo.Id);
|
|
393
|
+
if (moIndex < 0 || !mo.$NewInlineMo) {
|
|
394
|
+
this._doCheckedAll(false);
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const newMoDataList = moDataList.filter((c) => c.Id !== mo.Id);
|
|
398
|
+
this._resetMoDataList(newMoDataList);
|
|
399
|
+
this.refreshContextMoDataList(newMoDataList);
|
|
400
|
+
}
|
|
401
|
+
_createNewInlineMo(setChanged = false) {
|
|
402
|
+
const moDataList = this.moDataList;
|
|
403
|
+
const existInlineMo = moDataList.find((c) => c.$NewInlineMo);
|
|
404
|
+
if (existInlineMo) {
|
|
405
|
+
this._inlineEditSaveFormPanel(existInlineMo);
|
|
406
|
+
}
|
|
407
|
+
const mo = this._inlineReportCreateNewMo(true);
|
|
408
|
+
if (setChanged) {
|
|
409
|
+
mo.$InlineMoChanged = true;
|
|
410
|
+
}
|
|
411
|
+
this.moDataList.forEach((c) => (c.$IsChecked = false));
|
|
412
|
+
this._addInlineMoToModataList(mo, true);
|
|
413
|
+
}
|
|
414
|
+
_inlineReportCreateNewMo(isChecked) {
|
|
415
|
+
return this._ulvMainService.createNewInlineMo(isChecked);
|
|
416
|
+
}
|
|
417
|
+
_inlineFormPanelValueChange(mo) {
|
|
418
|
+
const newMoDataList = this.moDataList;
|
|
419
|
+
const existMoIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
420
|
+
if (existMoIndex > -1) {
|
|
421
|
+
newMoDataList[existMoIndex] = BarsaApi.Common.MetaObjectWeb.CreateMo(mo);
|
|
422
|
+
this._resetMoDataList(newMoDataList);
|
|
423
|
+
this.refreshContextMoDataList(newMoDataList);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
_selectNextInlineRecord(mo) {
|
|
427
|
+
const newMoDataList = this.moDataList;
|
|
428
|
+
if (!mo.$NewInlineMo) {
|
|
429
|
+
// select next record
|
|
430
|
+
const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
431
|
+
if (existsIndex > -1 && existsIndex + 1 < newMoDataList.length) {
|
|
432
|
+
newMoDataList[existsIndex + 1].$IsChecked = false;
|
|
433
|
+
this._rowCheck(newMoDataList[existsIndex + 1], existsIndex + 1);
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
newMoDataList.map((c) => {
|
|
437
|
+
c.$NewInlineMo = undefined;
|
|
438
|
+
c.$IsChecked = false;
|
|
439
|
+
});
|
|
440
|
+
this._addInlineMoToModataList(this._inlineReportCreateNewMo(true), true);
|
|
441
|
+
}
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
this._createNewInlineMo();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
_inlineEditSaveFormPanel(mo) {
|
|
449
|
+
const newMoDataList = this.moDataList;
|
|
450
|
+
if (!mo.$NewInlineMo) {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
const existsIndex = newMoDataList.findIndex((c) => c.Id === mo.Id);
|
|
454
|
+
if (existsIndex > -1) {
|
|
455
|
+
newMoDataList[existsIndex] = mo;
|
|
456
|
+
}
|
|
457
|
+
newMoDataList.map((c) => {
|
|
458
|
+
c.$NewInlineMo = undefined;
|
|
459
|
+
c.$IsChecked = false;
|
|
460
|
+
});
|
|
461
|
+
// this._ulvMainService.createNewInlineMo();
|
|
462
|
+
}
|
|
463
|
+
_setDefaultAccess() {
|
|
464
|
+
this._access = {
|
|
465
|
+
Add: false,
|
|
466
|
+
AddToList: false,
|
|
467
|
+
Delete: false,
|
|
468
|
+
Edit: false,
|
|
469
|
+
Export: false,
|
|
470
|
+
Print: false,
|
|
471
|
+
Refresh: false,
|
|
472
|
+
RemoveFromList: false,
|
|
473
|
+
View: false
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
_expandMo(selectedMo, expand) {
|
|
477
|
+
selectedMo.$Expanded = expand;
|
|
478
|
+
selectedMo.$Children?.forEach((child) => {
|
|
479
|
+
this._expandMo(child, expand);
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
_indexOfId(id) {
|
|
483
|
+
return this.gridDataSource.resultItems.findIndex((c) => c.Id === id);
|
|
484
|
+
}
|
|
485
|
+
_indexOfMo(mo) {
|
|
486
|
+
return this.gridDataSource.resultItems.findIndex((c) => c.Id === mo.Id);
|
|
487
|
+
}
|
|
488
|
+
_indexOfSelected() {
|
|
489
|
+
return this.gridDataSource.resultItems.findIndex((c) => c.$IsChecked);
|
|
490
|
+
}
|
|
491
|
+
_getIndex(mo) {
|
|
492
|
+
return this.moDataList.findIndex((c) => c.Id === mo.Id);
|
|
493
|
+
}
|
|
494
|
+
_setInlineEdit(value) {
|
|
495
|
+
this._ulvMainService.setInlineEdit(value);
|
|
496
|
+
}
|
|
497
|
+
_readViewSetting() {
|
|
498
|
+
this.viewSetting = this.context.Setting.ClassNames.CustomUi?.Parameters;
|
|
499
|
+
}
|
|
500
|
+
// protected _moDataListChanged(moDataList: MetaobjectDataModel[]): void {
|
|
501
|
+
// super._moDataListChanged(moDataList);
|
|
502
|
+
// if (this._inlineEditMode) {
|
|
503
|
+
// const checkedMoIndex = moDataList.findIndex((c) => c.$IsChecked);
|
|
504
|
+
// if (checkedMoIndex > -1) {
|
|
505
|
+
// const checkedMo = moDataList[checkedMoIndex];
|
|
506
|
+
// if (checkedMo.Id !== this.formPanelCtrlr.Mo.Id) {
|
|
507
|
+
// this._inlineEditorDestroyFormPanelCtrlr();
|
|
508
|
+
// this._inlineEditCreateFormPanelCtrlr(checkedMo, checkedMoIndex);
|
|
509
|
+
// }
|
|
510
|
+
// }
|
|
511
|
+
// }
|
|
512
|
+
// }
|
|
513
|
+
_setVisibility(expand, mo //MetaobjectDataModel
|
|
514
|
+
) {
|
|
515
|
+
mo.$Children?.forEach((child) => {
|
|
516
|
+
child.$Visibility = expand;
|
|
517
|
+
if (child.$Children) {
|
|
518
|
+
this._setVisibility(expand, child);
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
// protected _setNewInlineMo(mo: MetaobjectDataModel | null): void {
|
|
523
|
+
// this._ulvMainService.setNewInlineMo(mo);
|
|
524
|
+
// }
|
|
525
|
+
// protected _inlineEditPrepareNewMo(): MetaobjectDataModel {
|
|
526
|
+
// const newMo = getNewMoGridEditor(this.formSetting, this._typeDefId);
|
|
527
|
+
// newMo.Id = getUniqueId(3);
|
|
528
|
+
// if (this._isComposite()) {
|
|
529
|
+
// const relation = BarsaApi.Common.Util.TryGetValue(this.context.Setting, 'Extra.Relation');
|
|
530
|
+
// newMo[relation.ParentFdName] = relation.ParentMoId;
|
|
531
|
+
// }
|
|
532
|
+
// const newMoDataList = [...this.moDataList, newMo as MetaobjectDataModel];
|
|
533
|
+
// this._ulvMainService.reSetMoDataList(newMoDataList);
|
|
534
|
+
// BarsaApi.Ul.ApplicationCtrlr.fireEvent(
|
|
535
|
+
// BarsaApi.Ul.ApplicationCtrlr.EventEnum.GlobalReportMoAdd,
|
|
536
|
+
// this.context,
|
|
537
|
+
// reportEventMoAdd
|
|
538
|
+
// );
|
|
539
|
+
// this.context.fireEvent('RefreshContextMoDataList', newMoDataList);
|
|
540
|
+
// return newMo as MetaobjectDataModel;
|
|
541
|
+
// }
|
|
542
|
+
_addInlineMoToModataList(newInlineMo, select = false) {
|
|
543
|
+
const newMoDataList = [...this.moDataList, { ...newInlineMo, $IsChecked: select }];
|
|
544
|
+
this._resetMoDataList(newMoDataList);
|
|
545
|
+
this.refreshContextMoDataList(newMoDataList);
|
|
546
|
+
}
|
|
547
|
+
_rowCheck(mo, index, selected = false) {
|
|
548
|
+
const editMode = this._inlineEditMode && this._allowInlineEdit;
|
|
549
|
+
if (mo.$IsChecked && !this.isCheckList) {
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
let selectionMode = this.selectionMode;
|
|
553
|
+
if (editMode) {
|
|
554
|
+
selectionMode = SelectionMode.SINGLE;
|
|
555
|
+
}
|
|
556
|
+
const checked = !mo.$IsChecked || selected;
|
|
557
|
+
this.rowHoverable = false;
|
|
558
|
+
if (selectionMode === 'none') {
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
if (checked) {
|
|
562
|
+
if (selectionMode === 'single' && checked) {
|
|
563
|
+
this._doCheckedAll(false);
|
|
564
|
+
}
|
|
565
|
+
if (editMode) {
|
|
566
|
+
if (index !== -1) {
|
|
567
|
+
// this._setNewInlineMo(null);
|
|
568
|
+
this._select(mo, index);
|
|
569
|
+
}
|
|
570
|
+
// TODO
|
|
571
|
+
// this._setValueInlineMo(mo);
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
this._select(mo, index);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
else
|
|
578
|
+
this._deselect(mo, index);
|
|
579
|
+
}
|
|
580
|
+
// protected _setValueInlineMo(mo: MetaobjectDataModel): void {
|
|
581
|
+
// // this.formPanelCtrlr.SetValue({ ...mo, $TypeDefId: this._typeDefId });
|
|
582
|
+
// }
|
|
583
|
+
_inlineEditorDestroyFormPanelCtrlr() {
|
|
584
|
+
// if (this.formPanelCtrlr) {
|
|
585
|
+
// this._formPanelService.destroy();
|
|
586
|
+
// this.formPanelCtrlr.Destroy();
|
|
587
|
+
// this.formPanelCtrlr = null;
|
|
588
|
+
// }
|
|
589
|
+
}
|
|
590
|
+
_windowResized() {
|
|
591
|
+
this._setContainerWidth();
|
|
592
|
+
this._setParentHeight();
|
|
593
|
+
this._cdr.detectChanges();
|
|
594
|
+
}
|
|
595
|
+
_setContainerWidth() {
|
|
596
|
+
const el = this.el.nativeElement;
|
|
597
|
+
this.containerWidthSource$.next(el.offsetWidth);
|
|
598
|
+
}
|
|
599
|
+
_deviceSizeChanged(deviceSize) {
|
|
600
|
+
const elNativeElement = this.el.nativeElement;
|
|
601
|
+
if (this._inlineEditMode) {
|
|
602
|
+
this.secondaryColumnsSource.next([]);
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
const gridSize = getControlSizeMode(elNativeElement, deviceSize);
|
|
606
|
+
let deviceName = 'desktop';
|
|
607
|
+
this.allColumns
|
|
608
|
+
?.filter((c) => !c.Hidden)
|
|
609
|
+
.forEach((c) => (c.$TextWidth = c.$TextWidth ? c.$TextWidth : this._getWidth(c.Alias) + 10));
|
|
610
|
+
const allColumnsWidth = this.allColumns.map((column) => column.$TextWidth && column.Width > column.$TextWidth ? column.Width : column.$TextWidth || column.Width);
|
|
611
|
+
const visibleColumns = this._visibleColumnsSource.getValue();
|
|
612
|
+
let columnsCount = visibleColumns.length;
|
|
613
|
+
const colWidthSettings = this.gridSettingSource.getValue()?.ColSettingList?.map((c) => c.Width);
|
|
614
|
+
const columnsWidth = colWidthSettings?.length ? colWidthSettings : allColumnsWidth;
|
|
615
|
+
let sumColWidth = 0;
|
|
616
|
+
if (this.context.ViewSetting?.IsCheckList) {
|
|
617
|
+
sumColWidth += 15;
|
|
618
|
+
}
|
|
619
|
+
if (this.context.Setting?.Extra?.DefaultCommandsAccess?.View) {
|
|
620
|
+
sumColWidth += 32;
|
|
621
|
+
}
|
|
622
|
+
if (this.hasDetailsInRow) {
|
|
623
|
+
sumColWidth += 210;
|
|
624
|
+
}
|
|
625
|
+
const containerWidth = elNativeElement.clientWidth;
|
|
626
|
+
switch (gridSize) {
|
|
627
|
+
case 'l':
|
|
628
|
+
case 'xl':
|
|
629
|
+
deviceName = 'desktop';
|
|
630
|
+
break;
|
|
631
|
+
case 's':
|
|
632
|
+
deviceName = 'mobile';
|
|
633
|
+
columnsCount = 2;
|
|
634
|
+
break;
|
|
635
|
+
case 'm':
|
|
636
|
+
deviceName = 'tablet';
|
|
637
|
+
columnsCount = 4;
|
|
638
|
+
break;
|
|
639
|
+
}
|
|
640
|
+
this._deviceNameSource.next(deviceName);
|
|
641
|
+
if (columnsWidth.length > 0 && containerWidth > 0 && deviceSize !== 's') {
|
|
642
|
+
columnsCount = visibleColumns.length;
|
|
643
|
+
columnsWidth.forEach((width, index) => {
|
|
644
|
+
if (sumColWidth + width > containerWidth && columnsCount === visibleColumns.length) {
|
|
645
|
+
columnsCount = index;
|
|
646
|
+
}
|
|
647
|
+
sumColWidth += width;
|
|
648
|
+
});
|
|
649
|
+
}
|
|
650
|
+
if (visibleColumns.length > 2) {
|
|
651
|
+
if (this.viewSetting?.DisableResponsive || this._deviceNameSource.getValue() === 'desktop') {
|
|
652
|
+
const secColumns = this.secondaryColumnsSource.getValue();
|
|
653
|
+
if (secColumns.length) {
|
|
654
|
+
this.secondaryColumnsSource.next([]);
|
|
655
|
+
}
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
this.secondaryColumnsSource.next(visibleColumns.slice(columnsCount, visibleColumns.length));
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
_openSettings(name, device) {
|
|
662
|
+
let component = null;
|
|
663
|
+
switch (name) {
|
|
664
|
+
case 'columns':
|
|
665
|
+
component = UlvColumnSettingsComponent;
|
|
666
|
+
break;
|
|
667
|
+
case 'sort':
|
|
668
|
+
component = UlvSortSettingsComponent;
|
|
669
|
+
break;
|
|
670
|
+
case 'groupby':
|
|
671
|
+
component = UlvGroupbySettingsComponent;
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
const config = {
|
|
675
|
+
...this.dialogConfig,
|
|
676
|
+
data: { context: this.context },
|
|
677
|
+
mobile: device === 'mobile',
|
|
678
|
+
minWidth: device === 'mobile' ? 'auto' : this.dialogConfig.minWidth,
|
|
679
|
+
minHeight: device === 'mobile' ? 'auto' : this.dialogConfig.minHeight,
|
|
680
|
+
maxHeight: device === 'mobile' ? '100%' : this.dialogConfig.maxHeight,
|
|
681
|
+
maxWidth: device === 'mobile' ? '100%' : this.dialogConfig.maxWidth
|
|
682
|
+
};
|
|
683
|
+
if (component !== null) {
|
|
684
|
+
const dialogRef = this._dialogService.open(component, config);
|
|
685
|
+
dialogRef.afterClosed.pipe(takeUntil(this._onDestroy$)).subscribe((setting) => {
|
|
686
|
+
if (setting) {
|
|
687
|
+
const isSortChanged = name === 'sort' || name === 'groupby';
|
|
688
|
+
this.updateGridSetting(setting, isSortChanged);
|
|
689
|
+
this.context.moDataList = this.gridDataSource.resultItems;
|
|
690
|
+
this._setVisibleColumns();
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
_showFilterSetting(selectedColumn) {
|
|
696
|
+
const typeDefId = this._typeDefId;
|
|
697
|
+
const controlsInfo$ = this._ulvMainService.loadMetaConditionsControlInfos(typeDefId, this.allColumns.map((c) => c.Name));
|
|
698
|
+
const config = {
|
|
699
|
+
...this.dialogConfig,
|
|
700
|
+
data: {
|
|
701
|
+
controlsInfo$,
|
|
702
|
+
typeDefId,
|
|
703
|
+
selectedColumnName: selectedColumn.Name,
|
|
704
|
+
context: this.context
|
|
705
|
+
}
|
|
706
|
+
};
|
|
707
|
+
const dialogRef = this._dialogService.open(UlvFilterSettingsComponent, config);
|
|
708
|
+
dialogRef.afterClosed.pipe(takeUntil(this._onDestroy$)).subscribe((setting) => {
|
|
709
|
+
if (setting) {
|
|
710
|
+
}
|
|
711
|
+
});
|
|
712
|
+
}
|
|
713
|
+
_addSortColumn(name, sortDirection, isGrouped = false) {
|
|
714
|
+
const sortItem = {
|
|
715
|
+
Name: name,
|
|
716
|
+
SortDirection: sortDirection,
|
|
717
|
+
IsGrouped: isGrouped
|
|
718
|
+
};
|
|
719
|
+
const settings = getGridSettings(this.context);
|
|
720
|
+
const existSortItemIndex = settings.SortSettingList.findIndex((c) => c.Name === name);
|
|
721
|
+
if (existSortItemIndex > -1) {
|
|
722
|
+
settings.SortSettingList[existSortItemIndex] = sortItem;
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
settings.SortSettingList.push(sortItem);
|
|
726
|
+
}
|
|
727
|
+
this.updateGridSetting(settings, true);
|
|
728
|
+
}
|
|
729
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: SapUiReportBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.ContentDensityService }, { token: i3.PortalService }, { token: i2.DialogService }, { token: i3.UlvMainService }, { token: i3.LayoutService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: i3.FormPanelService, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
730
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: SapUiReportBaseComponent, selector: "bsu-sap-ui-report-base", inputs: { ShowFormPanelControl: "ShowFormPanelControl", ForceCloseChild: "ForceCloseChild", RefreshFormPanelControl: "RefreshFormPanelControl" }, viewQueries: [{ propertyName: "tableComponent", first: true, predicate: TableComponent, descendants: true }, { propertyName: "toolbarComponent", first: true, predicate: ToolbarComponent, descendants: true }, { propertyName: "tableRowsRef", predicate: ["tableRows"], descendants: true }, { propertyName: "layoutControlsRef", predicate: LayoutControlComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
731
|
+
}
|
|
732
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: SapUiReportBaseComponent, decorators: [{
|
|
733
|
+
type: Component,
|
|
734
|
+
args: [{
|
|
735
|
+
selector: 'bsu-sap-ui-report-base',
|
|
736
|
+
template: '',
|
|
737
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
738
|
+
}]
|
|
739
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i2.ContentDensityService }, { type: i3.PortalService }, { type: i2.DialogService }, { type: i3.UlvMainService }, { type: i3.LayoutService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
740
|
+
type: Inject,
|
|
741
|
+
args: [DOCUMENT]
|
|
742
|
+
}] }, { type: i3.FormPanelService, decorators: [{
|
|
743
|
+
type: Optional
|
|
744
|
+
}, {
|
|
745
|
+
type: Self
|
|
746
|
+
}] }], propDecorators: { tableComponent: [{
|
|
747
|
+
type: ViewChild,
|
|
748
|
+
args: [TableComponent]
|
|
749
|
+
}], toolbarComponent: [{
|
|
750
|
+
type: ViewChild,
|
|
751
|
+
args: [ToolbarComponent]
|
|
752
|
+
}], tableRowsRef: [{
|
|
753
|
+
type: ViewChildren,
|
|
754
|
+
args: ['tableRows']
|
|
755
|
+
}], layoutControlsRef: [{
|
|
756
|
+
type: ViewChildren,
|
|
757
|
+
args: [LayoutControlComponent]
|
|
758
|
+
}], ShowFormPanelControl: [{
|
|
759
|
+
type: Input
|
|
760
|
+
}], ForceCloseChild: [{
|
|
761
|
+
type: Input
|
|
762
|
+
}], RefreshFormPanelControl: [{
|
|
763
|
+
type: Input
|
|
764
|
+
}] } });
|
|
765
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUNILFFBQVEsRUFLUixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFJZixtQkFBbUIsRUFLbkIsZUFBZSxFQUNmLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1B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QUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RGLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzVELENBQUM7YUFBTSxDQUFDO1lBQ0osUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs4R0FqeUJRLHdCQUF3Qix1UkE4RXJCLFFBQVE7a0dBOUVYLHdCQUF3QixnUUFJdEIsY0FBYyxtRkFDZCxnQkFBZ0Isc0pBRWIsc0JBQXNCLHVFQVYxQixFQUFFOzsyRkFHSCx3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEOzswQkErRVEsTUFBTTsyQkFBQyxRQUFROzswQkFDZixRQUFROzswQkFBSSxJQUFJO3lDQTNFTSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0ksZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDQSxZQUFZO3NCQUF0QyxZQUFZO3VCQUFDLFdBQVc7Z0JBRXpCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBb1czQixvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyx1QkFBdUI7c0JBQS9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5LFxuICAgIENvbnRlbnREZW5zaXR5U2VydmljZSxcbiAgICBEaWFsb2dDb25maWcsXG4gICAgRGlhbG9nU2VydmljZSxcbiAgICBUYWJsZUNvbXBvbmVudCxcbiAgICBUb29sYmFyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQmFyc2FBcGksXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxuICAgIERldmljZVNpemUsXG4gICAgRm9ybVBhbmVsU2VydmljZSxcbiAgICBHZXRBbGxDb2x1bW5zU29ydGVkLFxuICAgIGdldENvbnRyb2xTaXplTW9kZSxcbiAgICBnZXRHcmlkU2V0dGluZ3MsXG4gICAgTGF5b3V0U2VydmljZSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFBvcnRhbFNlcnZpY2UsXG4gICAgUmVwb3J0QmFzZUNvbXBvbmVudCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxuICAgIFVsdk1haW5TZXJ2aWNlLFxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcbiAgICBnZXRQYXJlbnRIZWlnaHQsXG4gICAgbWVhc3VyZVRleHQsXG4gICAgZ2V0VW5pcXVlSWQsXG4gICAgU2VsZWN0aW9uTW9kZVxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBMYXlvdXRDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtY29udHJvbC9sYXlvdXQtY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZE1vRGF0YUxpc3QgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWNvbHVtbi1zZXR0aW5ncy91bHYtY29sdW1uLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZTb3J0U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1zb3J0LXNldHRpbmdzL3Vsdi1zb3J0LXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZHcm91cGJ5U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1ncm91cGJ5LXNldHRpbmdzL3Vsdi1ncm91cGJ5LXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZGaWx0ZXJTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWZpbHRlci1zZXR0aW5ncy91bHYtZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXNhcC11aS1yZXBvcnQtYmFzZScsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNhcFVpUmVwb3J0QmFzZUNvbXBvbmVudDxUIGV4dGVuZHMgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmc+XG4gICAgZXh0ZW5kcyBSZXBvcnRCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIEBWaWV3Q2hpbGQoVGFibGVDb21wb25lbnQpIHRhYmxlQ29tcG9uZW50OiBUYWJsZUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKFRvb2xiYXJDb21wb25lbnQpIHRvb2xiYXJDb21wb25lbnQ6IFRvb2xiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZHJlbigndGFibGVSb3dzJykgdGFibGVSb3dzUmVmOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gICAgQFZpZXdDaGlsZHJlbihMYXlvdXRDb250cm9sQ29tcG9uZW50KVxuICAgIGxheW91dENvbnRyb2xzUmVmOiBRdWVyeUxpc3Q8TGF5b3V0Q29udHJvbENvbXBvbmVudD47XG4gICAgdXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gZmFsc2U7XG4gICAgaGFzU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHNob3dPa0NhbmNlbEJ1dHRvbnM6IGFueTtcbiAgICBwYXJlbnRIZWlnaHQgPSAwO1xuICAgIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICByZXNwb25zaXZlUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgdmVydGljYWxQYWRkaW5nOiB0cnVlLFxuICAgICAgICBtaW5XaWR0aDogJzQwcmVtJyxcbiAgICAgICAgbWluSGVpZ2h0OiAnOTB2aCcsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwdncnLFxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZVxuICAgIH07XG4gICAgaWQgPSBgUmVwb3J0XyR7Z2V0VW5pcXVlSWQoMyl9YDtcbiAgICBzZWxlY3RlZFJvd3NOdW1iZXIgPSB7fTtcbiAgICBzZWxlY3RBbGwgPSBmYWxzZTtcbiAgICBzZWxlY3Rpb25BZGFwdGVySGFuZGxlcjoge1xuICAgICAgICBzY29wZTogYW55O1xuICAgICAgICByb3dzZWxlY3Q6IGFueTtcbiAgICAgICAgcm93ZGVzZWxlY3Q6IGFueTtcbiAgICAgICAgYmVmb3Jlcm93c2VsZWN0OiBhbnk7XG4gICAgfTtcbiAgICBuYXZpZ2F0aW9uQXJyb3ckOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgY3VzdG9tUm93SGVpZ2h0OiBhbnk7XG4gICAgcm93Q2xpY2sgPSB0cnVlO1xuICAgIGNlbGxDbGljayA9IGZhbHNlO1xuICAgIGRldmljZU5hbWUkOiBPYnNlcnZhYmxlPERldmljZVNpemU+O1xuICAgIG1vYmlsZU9yVGFibGV0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHNlY29uZGFyeUNvbHVtbnNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlcG9ydFZpZXdDb2x1bW5bXT4oW10pO1xuICAgIHNlY29uZGFyeUNvbHVtbnMkID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHBvcGluJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBjb250ZW50RGVuc2l0eSQ6IE9ic2VydmFibGU8Q29udGVudERlbnNpdHk+O1xuICAgIGhhc0RldGFpbHNJblJvdyA9IGZhbHNlO1xuICAgIHJvd0FjdGl2YWJsZSA9IHRydWU7XG4gICAgb3Blbk92ZXJmbG93Q29tbWFuZHM6IGJvb2xlYW5bXSA9IFtdO1xuICAgIGNvbnRhaW5lcldpZHRoU291cmNlJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgICBjbG9zZVNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneTtcbiAgICByb3dIb3ZlcmFibGU6IGJvb2xlYW47XG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZTtcbiAgICBjb2x1bW5zQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgc2Vjb25kYXJ5Q29sdW1uc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGNvbnRhaW5lcldpZHRoJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGNvbHVtbnMkOiBPYnNlcnZhYmxlPFJlcG9ydFZpZXdDb2x1bW5bXT47XG4gICAgZ3JpZERhdGFTb3VyY2U6IEdyaWRNb0RhdGFMaXN0O1xuICAgIHNpbmdsZVNlbGVjdGlvbiA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xuICAgIG11bHRpcGxlU2VsZWN0aW9uID0gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcbiAgICBhbGxvd0lubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGlubGluZUVkaXRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBvbmx5SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZm9ybVBhbmVsQ3RybHI6IGFueTtcbiAgICBsYXlvdXQkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICByZXBvcnRJZDogc3RyaW5nO1xuICAgIHZpZXdTZXR0aW5nOiBUO1xuICAgIGRpc2FibGVSZXNwb25zaXZlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2RldmljZU5hbWVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERldmljZVNpemU+KCdkZXNrdG9wJyk7XG4gICAgcHJpdmF0ZSBfb2xkQ29udGFpbmVyOiBhbnk7XG4gICAgcHJpdmF0ZSBfb3Blbk9uQ2xpY2s6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByb3RlY3RlZCBfY29udGVudERlbnNpdHlTZXJ2aWNlOiBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3Vsdk1haW5TZXJ2aWNlOiBVbHZNYWluU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9sYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcm90ZWN0ZWQgX2Zvcm1wYW5lbFNlcnZpY2U6IEZvcm1QYW5lbFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX3BvcnRhbFNlcnZpY2UsIF91bHZNYWluU2VydmljZSk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgkID0gdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSRcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLmRldmljZU5hbWUkID0gdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlUmVzcG9uc2l2ZSQgPSB0aGlzLmRldmljZU5hbWUkLnBpcGUobWFwKChjKSA9PiBjID09PSAnZGVza3RvcCcpKTtcbiAgICAgICAgdGhpcy5tb2JpbGVPclRhYmxldCQgPSB0aGlzLmRldmljZU5hbWUkLnBpcGUobWFwKChkZXZpY2UpID0+IGRldmljZSA9PT0gJ21vYmlsZScgfHwgZGV2aWNlID09PSAndGFibGV0JykpO1xuICAgICAgICB0aGlzLl9vbGRDb250YWluZXIgPSBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyO1xuICAgICAgICB0aGlzLmNsb3NlU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jb250ZW50RGVuc2l0eSQgPSB0aGlzLl9jb250ZW50RGVuc2l0eVNlcnZpY2UuY29udGVudERlbnNpdHk7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc0NvdW50JCA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyQucGlwZShtYXAoKGNvbHVtbnMpID0+IGNvbHVtbnMubGVuZ3RoKSk7XG4gICAgICAgIHRoaXMuY29sdW1uc0NvdW50JCA9IHRoaXMudmlzaWJsZUNvbHVtbnMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNvbHVtbnMpID0+IGNvbHVtbnMubGVuZ3RoKSxcbiAgICAgICAgICAgIG1hcCgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjY2VzcyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcz8uVmlldykge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBvblJlc2V0V29ya2Zsb3dTdGF0ZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBtby4kV29ya2Zsb3dTdGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdCgpO1xuICAgIH1cblxuICAgIGdldCBfdHlwZURlZklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYS5SZXBvcnQuVHlwZURlZklkO1xuICAgIH1cbiAgICBnZXQgX2lubGluZUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuZ2V0VmFsdWVJbmxpbmVFZGl0KCk7XG4gICAgfVxuICAgIGdldCBfYWxsb3dJbmxpbmVFZGl0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuZ2V0QWxsb3dJbmxpbmVFZGl0KCk7XG4gICAgfVxuICAgIGdldCBfYWNjZXNzKCk6IERlZmF1bHRDb21tYW5kc0FjY2VzcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuU2V0dGluZz8uRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2VzcztcbiAgICB9XG4gICAgc2V0IF9hY2Nlc3ModmFsOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYS5EZWZhdWx0Q29tbWFuZHNBY2Nlc3MgPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYSA9IHsgRGVmYXVsdENvbW1hbmRzQWNjZXNzOiB2YWwgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXNDaGVja0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuVmlld1NldHRpbmc/LklzQ2hlY2tMaXN0O1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuX3JlYWRWaWV3U2V0dGluZygpO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFjY2VzcygpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuc2hvd09rQ2FuY2VsQnV0dG9ucyA9IHRoaXMuY29udGV4dC5TaG93T2tDYW5jZWxCdXR0b25zO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5sYXlvdXRJbmZvJC5zdWJzY3JpYmUoKGxheW91dEluZm8pID0+IHtcbiAgICAgICAgICAgIGlmIChsYXlvdXRJbmZvICYmIGxheW91dEluZm8uVXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnZpZXdTZXR0aW5nPy5UaXRsZTtcbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVwb3J0SWQkLnN1YnNjcmliZSgocmVwb3J0SWQpID0+ICh0aGlzLnJlcG9ydElkID0gcmVwb3J0SWQpKTtcbiAgICAgICAgdGhpcy5fbGF5b3V0U2VydmljZS5zZXRSZW5kZXJlZCh0cnVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5jb250ZXh0LlZpZXdTZXR0aW5nPy5Jc0NoZWNrTGlzdCA/IHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gOiB0aGlzLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5fb3Blbk9uQ2xpY2sgPSB0aGlzLnZpZXdTZXR0aW5nPy5PcGVuT25DbGljaztcbiAgICAgICAgdGhpcy5jdXN0b21Sb3dIZWlnaHQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLFxuICAgICAgICAgICAgJ0V4dHJhLkV4dHJhSnNvblByb3BSZXBvcnQuR3JpZFJvd0hlaWdodCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ydGwkID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25BcnJvdyQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnJ0bCQucGlwZShcbiAgICAgICAgICAgIG1hcCgoaXNSdGwpID0+IChpc1J0bCA/ICduYXZpZ2F0aW9uLWxlZnQtYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnKSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hbGxvd0lubGluZUVkaXQkID0gdGhpcy5fdWx2TWFpblNlcnZpY2UuYWxsb3dJbmxpbmVFZGl0JDtcbiAgICAgICAgdGhpcy5pbmxpbmVFZGl0TW9kZSQgPSB0aGlzLl91bHZNYWluU2VydmljZS5pbmxpbmVFZGl0TW9kZSQ7XG4gICAgICAgIHRoaXMub25seUlubGluZUVkaXQkID0gdGhpcy5fdWx2TWFpblNlcnZpY2Uub25seUlubGluZUVkaXQkO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRDYW5TYXZlR3JpZFNldHRpbmdzKHRoaXMudmlld1NldHRpbmc/LkNhblNhdmVHcmlkU2V0dGluZyk7XG4gICAgICAgIHRoaXMuaGFzU2VsZWN0ZWQkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgobW9MaXN0KSA9PiBtb0xpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKSkpO1xuICAgICAgICB0aGlzLm1vRGF0YUxpc3QkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgoaXRlbXMpID0+IHRoaXMuX21hcENhcnRhYmxlTW8oaXRlbXMpKSk7XG4gICAgICAgIGNvbnN0IGdyaWREYXRhU291cmNlID0gbmV3IEdyaWRNb0RhdGFMaXN0KFxuICAgICAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCxcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNldHRpbmckLFxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyQsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0kXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ncmlkRGF0YVNvdXJjZSA9IGdyaWREYXRhU291cmNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5ncmlkU2V0dGluZyQsIHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbXywgc2Vjb25kYXJ5Q29sdW1uc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRhcmllcyA9IHNlY29uZGFyeUNvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gR2V0QWxsQ29sdW1uc1NvcnRlZCh0aGlzLmNvbnRleHQpLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IF8/LlNvcnRTZXR0aW5nTGlzdD8uZmlsdGVyKChjKSA9PiBjLklzR3JvdXBlZCkubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gZ3JvdXBlZENvbHVtbnMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoYykgPT4gc2Vjb25kYXJpZXMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoY29sdW1ucykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYzogUmVwb3J0Vmlld0NvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiRDU1NDbGFzc05hbWUgPSAnY29sdW1uX19GaWVsZFR5cGUnICsgYy5GaWVsZFR5cGVJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuRmllbGRUeXBlSWQgPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSA9PT0gJ0ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAnMzhweCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICFCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzVXNlckxvZ2dlZEluIC8vIGlmIHVzZXIgaXMgYW5vbnltb3VzIGFsbCBjb2x1bW4gd2lkdGggZXF1YWxzIHRvIDEwMCVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYy5XaWR0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGMuV2lkdGggKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMTAwJSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmlubGluZUVkaXRNb2RlJC5waXBlKFxuICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oYXNTZWxlY3RlZCQpLFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2FjY2Vzcy5BZGQgIT09IGZhbHNlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJXaWR0aCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRXhlY3V0ZVRvb2xiYXJCdXR0b24oZTogeyBpdGVtSWQ6IHN0cmluZzsgb3B0aW9ucz86IGFueSB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgaXRlbUlkLCBvcHRpb25zIH0gPSBlO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5leGVjdXRlVG9vbGJhckJ1dHRvbihpdGVtSWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBvbkVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KCF0aGlzLl9pbmxpbmVFZGl0TW9kZSk7XG4gICAgfVxuICAgIG9uU2VsZWN0TmV4dElubGluZVJlY29yZChtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTtcbiAgICB9XG5cbiAgICBvbkVkaXRGb3JtUGFuZWxTYXZlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vKTtcbiAgICB9XG5cbiAgICBvbkVkaXRGb3JtUGFuZWxDYW5jZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWQgPSBtb0RhdGFMaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG4gICAgICAgIGlmIChoYXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xuICAgICAgICAgICAgdGhpcy5fc2V0SW5saW5lRWRpdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5saW5lRm9ybVBhbmVsVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBvbkNvbHVtblJlc2l6ZWQoY29sdW1uczogY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQ29sdW1uc1Jlc2l6ZWQoY29sdW1ucyk7XG4gICAgfVxuICAgIG9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFkZFdvcmtmbG93QnV0dG9uc0luVG9vbGJhcihlKTtcbiAgICB9XG4gICAgb25Sb3dDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBpZiAobW8uZ3JvdXAgfHwgdGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICB0aGlzLl9yZW1vdmVDaGVja2VkQWxsKCk7XG4gICAgICAgIGlmICghbW8uJElzQ2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdTZXR0aW5nPy5EaXNhYmxlU2hvd0Zvcm1PbkRvdWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3Blbk1vKG1vLCBtb0luZGV4KTtcbiAgICB9XG5cbiAgICBvblVsdkNvbW1hbmQoJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcbiAgICAgICAgdGhpcy5fdWx2Q29tbWFuZENsaWNrZWQobW8sIG1vSW5kZXgpO1xuICAgIH1cbiAgICBvbkRlc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoZmFsc2UpO1xuICAgICAgICAvLyB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdyb3dzZWxlY3QnLCB0aGlzLmNvbnRleHQpOyAvLyDYqNin2LnYqyDZhduM2LTZiNivINiv2YjYqNin2LEgc2VsZWN0aW9uY2hhbmdlINqv2LLYp9ix2LQg2YHYsdin2K7ZiNin2YbbjCDYtNmI2K9cbiAgICB9XG4gICAgb25Sb3dDaGVjaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICBpZiAodGhpcy5fb3Blbk9uQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dDbGljaygkZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQ2FydGFibGVGb3JtQ2xvc2VkKHsgbW8gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0MiA9IG5ld01vRGF0YUxpc3QuZmlsdGVyKChjKSA9PiBjLklkICE9PSBtby5JZCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0Mik7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QyKTtcbiAgICB9XG4gICAgb25FeHBhbmRDbGljayhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBtby4kRXhwYW5kZWQgPSAhbW8uJEV4cGFuZGVkO1xuICAgICAgICB0aGlzLl9zZXRWaXNpYmlsaXR5KG1vLiRFeHBhbmRlZCwgbW8pO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QoKTtcbiAgICB9XG5cbiAgICBvbkFsbENoZWNrYm94KGNoZWNrZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGNoZWNrZWQpO1xuICAgICAgICAvLyBpZiAoY2hlY2tlZCkge1xuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZvckVhY2goKG1vLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyAgICAgdGhpcy5fZGVzZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIG9uU29ydEFzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU29ydENvbHVtbihjb2x1bW4uTmFtZSwgJ0FTQycpO1xuICAgIH1cblxuICAgIG9uU29ydERlc2NlbmRpbmcoY29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZFNvcnRDb2x1bW4oY29sdW1uLk5hbWUsICdERVNDJyk7XG4gICAgfVxuICAgIG9uRmlsdGVyKHNlbGVjdGVkQ29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Nob3dGaWx0ZXJTZXR0aW5nKHNlbGVjdGVkQ29sdW1uKTtcbiAgICB9XG5cbiAgICBvbkNvbHVtblNldHRpbmdzKGRldmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ2NvbHVtbnMnLCBkZXZpY2UpO1xuICAgIH1cblxuICAgIG9uU29ydFNldHRpbmdzKGRldmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ3NvcnQnLCBkZXZpY2UpO1xuICAgIH1cblxuICAgIG9uR3JvdXBieVNldHRpbmdzKGRldmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ2dyb3VwYnknLCBkZXZpY2UpO1xuICAgIH1cblxuICAgIG9uTGlzdENoZWNrYm94Q2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMub25Sb3dDaGVjayh7IG1vLCBpbmRleCwgY2F1c2U6ICdzaW5nbGVTZWxlY3QnIH0pO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25MaXN0TmF2aWdhdGlvbkNsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vLCBpbmRleCwgZSB9ID0gJGV2ZW50O1xuICAgICAgICB0aGlzLm9uUm93Q2xpY2soeyBtbywgaW5kZXggfSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgb25TYXZlVG9wRm9ybShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4XSA9IG1vO1xuICAgICAgICB9XG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XG4gICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGMuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgb25OZXdUb3BGb3JtQWRkKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG1vKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBTaG93Rm9ybVBhbmVsQ29udHJvbCA9IChmb3JtcGFuZWxDdHJscikgPT4ge307XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBGb3JjZUNsb3NlQ2hpbGQgPSAoKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIFJlZnJlc2hGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcblxuICAgIC8vIHByb3RlY3RlZCBfaW5saW5lRWRpdE1vZGVDaGFuZ2VkKGVkaXRNb2RlKTogdm9pZCB7XG4gICAgLy8gICAgIGlmIChlZGl0TW9kZSkge1xuICAgIC8vICAgICAgICAgY29uc3QgY2FuQWRkOiBib29sZWFuID0gdGhpcy5fYWNjZXNzPy5BZGQgIT09IGZhbHNlO1xuXG4gICAgLy8gICAgICAgICBsZXQgc2VsZWN0ZWRNbyA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG4gICAgLy8gICAgICAgICBsZXQgbmV3TW87XG4gICAgLy8gICAgICAgICBpZiAoY2FuQWRkICE9PSBmYWxzZSAmJiAhc2VsZWN0ZWRNbykge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZCgpO1xuICAgIC8vICAgICAgICAgICAgIHJldHVybjtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIC8vIGlmICghc2VsZWN0ZWRNbyAmJiAhbmV3TW8gJiYgdGhpcy5tb0RhdGFMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICAgIC8vICAgICBzZWxlY3RlZE1vID0gdGhpcy5tb0RhdGFMaXN0WzBdO1xuICAgIC8vICAgICAgICAgLy8gfVxuICAgIC8vICAgICAgICAgLy8gaWYgKHNlbGVjdGVkTW8pIHtcbiAgICAvLyAgICAgICAgIC8vICAgICBjb25zdCBpZE9mU2VsZWN0ZWRNbyA9IHRoaXMuX2luZGV4T2ZNbyhzZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vICAgICBzZWxlY3RlZE1vLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyAgICAgdGhpcy5fcm93Q2hlY2soc2VsZWN0ZWRNbywgaWRPZlNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gfVxuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlciA9IHRoaXMuX29sZENvbnRhaW5lcjtcbiAgICAvLyAgICAgICAgIHRoaXMuX3NldE5ld0lubGluZU1vKG51bGwpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIC8vIHByb3RlY3RlZCBfY3JlYXRlTmV3SW5saW5lUmVjb3JkKHNlbGVjdGVkTW8/OiBNZXRhb2JqZWN0RGF0YU1vZGVsKSB7XG4gICAgLy8gICAgIGNvbnN0IG1vID0gdGhpcy5faW5saW5lRWRpdFByZXBhcmVOZXdNbygpO1xuICAgIC8vICAgICBjb25zdCBmb3JtTW8gPSBCYXJzYUFwaS5Db21tb24uTWVyZ2VyLkZhc3RNZXJnZShtbywgc2VsZWN0ZWRNbywgeyBleHRlbmRlZEZpZWxkczogWydJZCwkQ2FwdGlvbiddIH0pO1xuICAgIC8vICAgICB0aGlzLl9zZXROZXdJbmxpbmVNbyhmb3JtTW8pO1xuICAgIC8vICAgICB0aGlzLl9zZWxlY3QoZm9ybU1vLCAtMSk7XG4gICAgLy8gfVxuICAgIHByb3RlY3RlZCBfcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3Q/OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVTZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldFdpZHRoKGxhYmVsOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBsYWJlbFdpdGhQYWRkaW5nID0gbWVhc3VyZVRleHQobGFiZWwpO1xuICAgICAgICBpZiAobGFiZWxXaXRoUGFkZGluZyA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwobGFiZWxXaXRoUGFkZGluZyk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0UGFyZW50SGVpZ2h0KCkge1xuICAgICAgICB0aGlzLnBhcmVudEhlaWdodCA9IGdldFBhcmVudEhlaWdodCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX21hcENhcnRhYmxlTW8oaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xuICAgICAgICBpZiAoIXRoaXMudmlld1NldHRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IE5hbWVTZXJpYWxpemVNbywgQ2FydGFibGVPYmplY3ROYW1lIH0gPSB0aGlzLnZpZXdTZXR0aW5nO1xuICAgICAgICBpZiAoIU5hbWVTZXJpYWxpemVNbyB8fCAhQ2FydGFibGVPYmplY3ROYW1lIHx8ICFpdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoYykgPT4gKGNbQ2FydGFibGVPYmplY3ROYW1lXSA9IEJhcnNhQXBpLkV4dC5kZWNvZGUoJ3snICsgY1tOYW1lU2VyaWFsaXplTW9dICsgJ30nKSkpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgb25Ub29sYmFyQ3JlYXRlTmV3SW5saW5lTW8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZU1vKCk7XG4gICAgfVxuICAgIG9uQ3JlYXRlTmV3TW8oKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZU1vKHRydWUpO1xuICAgIH1cbiAgICBvbk1hbmRhdG9yeShpc01hbmRhdG9yOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ01hbmRhdG9yeScsIGlzTWFuZGF0b3IpO1xuICAgIH1cbiAgICBvblVwZGF0ZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSBtb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAobW9JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBtb0RhdGFMaXN0W21vSW5kZXhdID0gbW87XG4gICAgICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobW9EYXRhTGlzdCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkhhc0RldGFpbHNJblJvdyh2YWx1ZTogYm9vbGVhbiwgZGV2aWNlU2l6ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0RldGFpbHNJblJvdyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9kZXZpY2VTaXplQ2hhbmdlZChkZXZpY2VTaXplKTtcbiAgICB9XG4gICAgb25Fc2NhcGVLZXkobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQ2FuY2VsSW5saW5lRWRpdChtbyk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hhbmRsZUNhbmNlbElubGluZUVkaXQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChtb0luZGV4IDwgMCB8fCAhbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBtb0RhdGFMaXN0LmZpbHRlcigoYykgPT4gYy5JZCAhPT0gbW8uSWQpO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jcmVhdGVOZXdJbmxpbmVNbyhzZXRDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RJbmxpbmVNbyA9IG1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy4kTmV3SW5saW5lTW8pO1xuICAgICAgICBpZiAoZXhpc3RJbmxpbmVNbykge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwoZXhpc3RJbmxpbmVNbyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKTtcbiAgICAgICAgaWYgKHNldENoYW5nZWQpIHtcbiAgICAgICAgICAgIG1vLiRJbmxpbmVNb0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8sIHRydWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmNyZWF0ZU5ld0lubGluZU1vKGlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbmxpbmVGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdE1vSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RNb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RNb0luZGV4XSA9IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViLkNyZWF0ZU1vKG1vKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2VsZWN0TmV4dElubGluZVJlY29yZChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBpZiAoIW1vLiROZXdJbmxpbmVNbykge1xuICAgICAgICAgICAgLy8gc2VsZWN0IG5leHQgcmVjb3JkXG4gICAgICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSAmJiBleGlzdHNJbmRleCArIDEgPCBuZXdNb0RhdGFMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXggKyAxXS4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLCBleGlzdHNJbmRleCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QodGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleF0gPSBtbztcbiAgICAgICAgfVxuICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXREZWZhdWx0QWNjZXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY2Nlc3MgPSB7XG4gICAgICAgICAgICBBZGQ6IGZhbHNlLFxuICAgICAgICAgICAgQWRkVG9MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIERlbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICBFZGl0OiBmYWxzZSxcbiAgICAgICAgICAgIEV4cG9ydDogZmFsc2UsXG4gICAgICAgICAgICBQcmludDogZmFsc2UsXG4gICAgICAgICAgICBSZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgICAgIFJlbW92ZUZyb21MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIFZpZXc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZXhwYW5kTW8oc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgZXhwYW5kKTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGVkTW8uJEV4cGFuZGVkID0gZXhwYW5kO1xuICAgICAgICBzZWxlY3RlZE1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZE1vKGNoaWxkLCBleHBhbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mSWQoaWQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IGlkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mU2VsZWN0ZWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldEluZGV4KG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldElubGluZUVkaXQodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlYWRWaWV3U2V0dGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3U2V0dGluZyA9IHRoaXMuY29udGV4dC5TZXR0aW5nLkNsYXNzTmFtZXMuQ3VzdG9tVWk/LlBhcmFtZXRlcnM7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgLy8gICAgIHN1cGVyLl9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0KTtcbiAgICAvLyAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjaGVja2VkTW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuXG4gICAgLy8gICAgICAgICBpZiAoY2hlY2tlZE1vSW5kZXggPiAtMSkge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRNbyA9IG1vRGF0YUxpc3RbY2hlY2tlZE1vSW5kZXhdO1xuICAgIC8vICAgICAgICAgICAgIGlmIChjaGVja2VkTW8uSWQgIT09IHRoaXMuZm9ybVBhbmVsQ3RybHIuTW8uSWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRDcmVhdGVGb3JtUGFuZWxDdHJscihjaGVja2VkTW8sIGNoZWNrZWRNb0luZGV4KTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX3NldFZpc2liaWxpdHkoXG4gICAgICAgIGV4cGFuZDogYm9vbGVhbixcbiAgICAgICAgbW86IGFueSAvL01ldGFvYmplY3REYXRhTW9kZWxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgbW8uJENoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQuJFZpc2liaWxpdHkgPSBleHBhbmQ7XG4gICAgICAgICAgICBpZiAoY2hpbGQuJENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShleHBhbmQsIGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkIF9zZXROZXdJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0TmV3SW5saW5lTW8obW8pO1xuICAgIC8vIH1cbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgLy8gY29uc3QgbmV3TW8gPSBnZXROZXdNb0dyaWRFZGl0b3IodGhpcy5mb3JtU2V0dGluZywgdGhpcy5fdHlwZURlZklkKTtcbiAgICAvLyBuZXdNby5JZCA9IGdldFVuaXF1ZUlkKDMpO1xuICAgIC8vIGlmICh0aGlzLl9pc0NvbXBvc2l0ZSgpKSB7XG4gICAgLy8gICAgIGNvbnN0IHJlbGF0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbicpO1xuICAgIC8vICAgICBuZXdNb1tyZWxhdGlvbi5QYXJlbnRGZE5hbWVdID0gcmVsYXRpb24uUGFyZW50TW9JZDtcbiAgICAvLyB9XG4gICAgLy8gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsXTtcbiAgICAvLyAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgLy8gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5maXJlRXZlbnQoXG4gICAgLy8gICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkV2ZW50RW51bS5HbG9iYWxSZXBvcnRNb0FkZCxcbiAgICAvLyAgIHRoaXMuY29udGV4dCxcbiAgICAvLyAgIHJlcG9ydEV2ZW50TW9BZGRcbiAgICAvLyApO1xuICAgIC8vICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1JlZnJlc2hDb250ZXh0TW9EYXRhTGlzdCcsIG5ld01vRGF0YUxpc3QpO1xuICAgIC8vICAgIHJldHVybiBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgIC8vIH1cbiAgICBwcm90ZWN0ZWQgX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG5ld0lubGluZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgeyAuLi5uZXdJbmxpbmVNbywgJElzQ2hlY2tlZDogc2VsZWN0IH1dO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcm93Q2hlY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGluZGV4OiBudW1iZXIsIHNlbGVjdGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSB0aGlzLl9pbmxpbmVFZGl0TW9kZSAmJiB0aGlzLl9hbGxvd0lubGluZUVkaXQ7XG4gICAgICAgIGlmIChtby4kSXNDaGVja2VkICYmICF0aGlzLmlzQ2hlY2tMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICAgIGlmIChlZGl0TW9kZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAhbW8uJElzQ2hlY2tlZCB8fCBzZWxlY3RlZDtcbiAgICAgICAgdGhpcy5yb3dIb3ZlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgJiYgY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldE5ld0lubGluZU1vKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFZhbHVlSW5saW5lTW8obW8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfc2V0VmFsdWVJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgIC8vICAgICAvLyB0aGlzLmZvcm1QYW5lbEN0cmxyLlNldFZhbHVlKHsgLi4ubW8sICRUeXBlRGVmSWQ6IHRoaXMuX3R5cGVEZWZJZCB9KTtcbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZm9ybVBhbmVsQ3RybHIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuX2Zvcm1QYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsci5EZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyID0gbnVsbDtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3dpbmRvd1Jlc2l6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSQubmV4dChlbC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZXZpY2VTaXplQ2hhbmdlZChkZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsTmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncmlkU2l6ZSA9IGdldENvbnRyb2xTaXplTW9kZShlbE5hdGl2ZUVsZW1lbnQsIGRldmljZVNpemUpO1xuICAgICAgICBsZXQgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZSA9ICdkZXNrdG9wJztcbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zXG4gICAgICAgICAgICA/LmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxuICAgICAgICAgICAgLmZvckVhY2goKGMpID0+IChjLiRUZXh0V2lkdGggPSBjLiRUZXh0V2lkdGggPyBjLiRUZXh0V2lkdGggOiB0aGlzLl9nZXRXaWR0aChjLkFsaWFzKSArIDEwKSk7XG5cbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpZHRoID0gdGhpcy5hbGxDb2x1bW5zLm1hcCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uLiRUZXh0V2lkdGggJiYgY29sdW1uLldpZHRoID4gY29sdW1uLiRUZXh0V2lkdGggPyBjb2x1bW4uV2lkdGggOiBjb2x1bW4uJFRleHRXaWR0aCB8fCBjb2x1bW4uV2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSA9IHRoaXMuX3Zpc2libGVDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGxldCBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoU2V0dGluZ3MgPSB0aGlzLmdyaWRTZXR0aW5nU291cmNlLmdldFZhbHVlKCk/LkNvbFNldHRpbmdMaXN0Py5tYXAoKGMpID0+IGMuV2lkdGgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGg6IG51bWJlcltdID0gY29sV2lkdGhTZXR0aW5ncz8ubGVuZ3RoID8gY29sV2lkdGhTZXR0aW5ncyA6IGFsbENvbHVtbnNXaWR0aDtcbiAgICAgICAgbGV0IHN1bUNvbFdpZHRoID0gMDtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5WaWV3U2V0dGluZz8uSXNDaGVja0xpc3QpIHtcbiAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IDE1O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuU2V0dGluZz8uRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2Vzcz8uVmlldykge1xuICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gMzI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzRGV0YWlsc0luUm93KSB7XG4gICAgICAgICAgICBzdW1Db2xXaWR0aCArPSAyMTA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbE5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIHN3aXRjaCAoZ3JpZFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RldmljZU5hbWVTb3VyY2UubmV4dChkZXZpY2VOYW1lKTtcblxuICAgICAgICBpZiAoY29sdW1uc1dpZHRoLmxlbmd0aCA+IDAgJiYgY29udGFpbmVyV2lkdGggPiAwICYmIGRldmljZVNpemUgIT09ICdzJykge1xuICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgICAgY29sdW1uc1dpZHRoLmZvckVhY2goKHdpZHRoOiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1bUNvbFdpZHRoICsgd2lkdGggPiBjb250YWluZXJXaWR0aCAmJiBjb2x1bW5zQ291bnQgPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gd2lkdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3U2V0dGluZz8uRGlzYWJsZVJlc3BvbnNpdmUgfHwgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5nZXRWYWx1ZSgpID09PSAnZGVza3RvcCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNDb2x1bW5zID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlY0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQodmlzaWJsZUNvbHVtbnMuc2xpY2UoY29sdW1uc0NvdW50LCB2aXNpYmxlQ29sdW1ucy5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfb3BlblNldHRpbmdzKG5hbWUsIGRldmljZTogRGV2aWNlU2l6ZSk6IHZvaWQge1xuICAgICAgICBsZXQgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwYnknOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YTogeyBjb250ZXh0OiB0aGlzLmNvbnRleHQgfSxcbiAgICAgICAgICAgIG1vYmlsZTogZGV2aWNlID09PSAnbW9iaWxlJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluV2lkdGgsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnYXV0bycgOiB0aGlzLmRpYWxvZ0NvbmZpZy5taW5IZWlnaHQsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnMTAwJScgOiB0aGlzLmRpYWxvZ0NvbmZpZy5tYXhIZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICcxMDAlJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1heFdpZHRoXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSBuYW1lID09PSAnc29ydCcgfHwgbmFtZSA9PT0gJ2dyb3VwYnknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmcsIGlzU29ydENoYW5nZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubW9EYXRhTGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSB0aGlzLl90eXBlRGVmSWQ7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzSW5mbyQgPSB0aGlzLl91bHZNYWluU2VydmljZS5sb2FkTWV0YUNvbmRpdGlvbnNDb250cm9sSW5mb3MoXG4gICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICB0aGlzLmFsbENvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzSW5mbyQsXG4gICAgICAgICAgICAgICAgdHlwZURlZklkLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uTmFtZTogc2VsZWN0ZWRDb2x1bW4uTmFtZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50LCBjb25maWcpO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfYWRkU29ydENvbHVtbihuYW1lOiBhbnksIHNvcnREaXJlY3Rpb246IHN0cmluZywgaXNHcm91cGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydEl0ZW0gPSB7XG4gICAgICAgICAgICBOYW1lOiBuYW1lLFxuICAgICAgICAgICAgU29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIElzR3JvdXBlZDogaXNHcm91cGVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKHRoaXMuY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4aXN0U29ydEl0ZW1JbmRleCA9IHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChleGlzdFNvcnRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0W2V4aXN0U29ydEl0ZW1JbmRleF0gPSBzb3J0SXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5wdXNoKHNvcnRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmdzLCB0cnVlKTtcbiAgICB9XG59XG4iXX0=
|