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,261 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, ViewChild, inject } from '@angular/core';
|
|
2
|
+
import { takeUntil, tap } from 'rxjs/operators';
|
|
3
|
+
import { DialogService } from '@fundamental-ngx/core';
|
|
4
|
+
import { BarsaApi, UploadService, FilesValidationHelper, isImage, getImagePath, getIcon, getValidExtension } from 'barsa-novin-ray-core';
|
|
5
|
+
import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
import * as i3 from "barsa-novin-ray-core";
|
|
10
|
+
import * as i4 from "@fundamental-ngx/core/bar";
|
|
11
|
+
import * as i5 from "@fundamental-ngx/core/busy-indicator";
|
|
12
|
+
import * as i6 from "@fundamental-ngx/core/button";
|
|
13
|
+
import * as i7 from "@fundamental-ngx/core/file-uploader";
|
|
14
|
+
import * as i8 from "@fundamental-ngx/core/dialog";
|
|
15
|
+
import * as i9 from "@fundamental-ngx/cdk/utils";
|
|
16
|
+
import * as i10 from "@fundamental-ngx/core/title";
|
|
17
|
+
import * as i11 from "@fundamental-ngx/core/object-identifier";
|
|
18
|
+
import * as i12 from "@fundamental-ngx/core/toolbar";
|
|
19
|
+
import * as i13 from "ng2-pdfjs-viewer";
|
|
20
|
+
export class UiPdfViewerComponent extends DeviceInfoFieldBaseComponent {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(...arguments);
|
|
23
|
+
this._minheight = '70vh';
|
|
24
|
+
this.canDelete = true;
|
|
25
|
+
this.canSave = true;
|
|
26
|
+
this._dialogService = inject(DialogService);
|
|
27
|
+
}
|
|
28
|
+
ngOnInit() {
|
|
29
|
+
this.uploadingState$ = this._uploadService.uploadingState$;
|
|
30
|
+
super.ngOnInit();
|
|
31
|
+
switch (this.parameters?.ShowMode) {
|
|
32
|
+
case '2':
|
|
33
|
+
this._minheight = null;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
this.value$.subscribe((value) => {
|
|
37
|
+
this.value = value;
|
|
38
|
+
this._refresh();
|
|
39
|
+
});
|
|
40
|
+
this.refresh$.subscribe((fromServer) => {
|
|
41
|
+
this._refresh(fromServer);
|
|
42
|
+
});
|
|
43
|
+
this.filesValidationHelper = new FilesValidationHelper(this.Setting.MaxFileCount, this.Setting.MaxFileSizeKb, this.Setting.MaxTotalFileSizeKb);
|
|
44
|
+
this._refreshButtons();
|
|
45
|
+
this._refresh();
|
|
46
|
+
this.validExtension = this.context.useWordEditor
|
|
47
|
+
? '.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
48
|
+
: getValidExtension(this.Setting.ValidExtensions);
|
|
49
|
+
this.singleControl = this.Setting.ViewType === 'SingleFileControl';
|
|
50
|
+
}
|
|
51
|
+
ngOnChanges(changes) {
|
|
52
|
+
super.ngOnChanges(changes);
|
|
53
|
+
const { formHeight } = changes;
|
|
54
|
+
if (formHeight && !formHeight.firstChange) {
|
|
55
|
+
this._cdr.detectChanges();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
onEdit() {
|
|
59
|
+
this._commandClickHandler('Edit');
|
|
60
|
+
}
|
|
61
|
+
onView(event) {
|
|
62
|
+
const e = { ctrlKey: event.ctrlKey };
|
|
63
|
+
this._commandClickHandler('OOView', e);
|
|
64
|
+
}
|
|
65
|
+
onDownload() {
|
|
66
|
+
this._commandClickHandler('Download');
|
|
67
|
+
}
|
|
68
|
+
onFileSelection(files) {
|
|
69
|
+
this._uploadToServer(files);
|
|
70
|
+
}
|
|
71
|
+
onDelete() {
|
|
72
|
+
this._commandClickHandler('Delete');
|
|
73
|
+
}
|
|
74
|
+
onEditInWord() {
|
|
75
|
+
this._commandClickHandler('ODEdit');
|
|
76
|
+
}
|
|
77
|
+
onOfficeOnline(event) {
|
|
78
|
+
const e = { ctrlKey: event.ctrlKey };
|
|
79
|
+
this._commandClickHandler('OOEdit', e);
|
|
80
|
+
}
|
|
81
|
+
onRefresh() {
|
|
82
|
+
this._commandClickHandler('Refresh');
|
|
83
|
+
}
|
|
84
|
+
DownloadFileId(fileId, viewInBrowser, convertTo, forOcx, isOfficeOnline) {
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
BarsaApi.Ul.LoadingMask.Mask(this._el.nativeElement);
|
|
87
|
+
}, 0);
|
|
88
|
+
BarsaApi.Common.File.DownloadFileContent.bind(this)({
|
|
89
|
+
fileId,
|
|
90
|
+
fileUrl: null,
|
|
91
|
+
viewInBrowser,
|
|
92
|
+
convertTo,
|
|
93
|
+
isOfficeOnline,
|
|
94
|
+
forOcx
|
|
95
|
+
}, (response) => {
|
|
96
|
+
if (response.succeed) {
|
|
97
|
+
this._downloadFileIdCompleted(response);
|
|
98
|
+
this._cdr.detectChanges();
|
|
99
|
+
this._hideMask();
|
|
100
|
+
}
|
|
101
|
+
}, (error) => {
|
|
102
|
+
this._hideMask();
|
|
103
|
+
alert(error);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
onOpenPreviewInDialog() {
|
|
107
|
+
this._dialogService.open(this._dialogTpl, {
|
|
108
|
+
responsivePadding: true,
|
|
109
|
+
mobile: true,
|
|
110
|
+
ariaLabelledBy: 'map',
|
|
111
|
+
ariaDescribedBy: 'choose location',
|
|
112
|
+
focusTrapped: true
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
onDialogClose() {
|
|
116
|
+
this._dialogService.dismissAll();
|
|
117
|
+
}
|
|
118
|
+
_downloadFileIdCompleted(response) {
|
|
119
|
+
const blob = BarsaApi.Common.File.B64toBlob(response.content, response.contentType);
|
|
120
|
+
const url = window.URL || window.webkitURL;
|
|
121
|
+
this.blobUrl = url.createObjectURL(blob);
|
|
122
|
+
if (this.isMobile) {
|
|
123
|
+
this._pdfViewerOnDemand.pdfSrc = this.blobUrl; // pdfSrc can be Blob or Uint8Array
|
|
124
|
+
this._pdfViewerOnDemand.refresh(); // Ask pdf viewer to load/refresh pdf
|
|
125
|
+
}
|
|
126
|
+
this.valueUrl = this._domSanitizer.bypassSecurityTrustResourceUrl(this.blobUrl);
|
|
127
|
+
this.hasPdf = true;
|
|
128
|
+
}
|
|
129
|
+
_uploadToServer(files) {
|
|
130
|
+
this.filesValidationHelper.validateFiles(files);
|
|
131
|
+
this._uploadFile(files).pipe(takeUntil(this._onDestroy$)).subscribe();
|
|
132
|
+
}
|
|
133
|
+
_refreshButtons() {
|
|
134
|
+
this._refreshButtonsHelper(false);
|
|
135
|
+
BarsaApi.Common.Async.Waterfall('Common.File.IsAgentActive', [
|
|
136
|
+
// Common.FileAgent.IsAgentActive.bind(Common.FileAgent),
|
|
137
|
+
BarsaApi.Common.AgentHelper.Init.bind(BarsaApi.Common.AgentHelper)
|
|
138
|
+
], (err, result) => {
|
|
139
|
+
const agentIsActive = result === 'OK';
|
|
140
|
+
this._refreshButtonsHelper(agentIsActive);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
_refreshButtonsHelper(isAgentActive) {
|
|
144
|
+
this.disableOrReadonly$.subscribe((disableOrReadonly) => {
|
|
145
|
+
const canSave = this.canSave;
|
|
146
|
+
this.canDelete = !disableOrReadonly;
|
|
147
|
+
const hasValue = !BarsaApi.Ext.isEmpty(this.value);
|
|
148
|
+
const edit0 = canSave && disableOrReadonly !== true;
|
|
149
|
+
this.canEdit = edit0 && isAgentActive;
|
|
150
|
+
this.canDownload = !this.Setting.IsWordViewer || (!isAgentActive && edit0);
|
|
151
|
+
this.canUpload = this.canDownload && canSave && disableOrReadonly !== true;
|
|
152
|
+
this.hasFileName = !this.context.Setting.IsWordViewer;
|
|
153
|
+
this.canRemove = this.canDownload && canSave && disableOrReadonly !== true;
|
|
154
|
+
this.officeOnline = hasValue && canSave && disableOrReadonly !== true && this.context.OfficeOnline;
|
|
155
|
+
this.useWordEditor = hasValue && canSave && disableOrReadonly !== true && this.context.useWordEditor;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
_commandClickHandler(itemId, keyboardEvent) {
|
|
159
|
+
const commandId = itemId;
|
|
160
|
+
let files = this.value;
|
|
161
|
+
if (BarsaApi.Ext.isArray(files)) {
|
|
162
|
+
files = files[0];
|
|
163
|
+
}
|
|
164
|
+
const fileId = files?.Id;
|
|
165
|
+
this.context.fireEvent('CommandRequest', this, commandId, fileId, keyboardEvent);
|
|
166
|
+
}
|
|
167
|
+
_refresh(fromServer) {
|
|
168
|
+
const officeOnline = fromServer === false;
|
|
169
|
+
this.fileName = '';
|
|
170
|
+
if (BarsaApi.Ext.isEmpty(this.value)) {
|
|
171
|
+
this.hasPdf = false;
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
let files = this.value;
|
|
175
|
+
if (BarsaApi.Ext.isArray(files)) {
|
|
176
|
+
files = files[0];
|
|
177
|
+
}
|
|
178
|
+
const fileId = files.Id;
|
|
179
|
+
if (!fileId || files.IsDeleted) {
|
|
180
|
+
if (files.IsDeleted) {
|
|
181
|
+
this.hasPdf = false;
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
this.fallbackLink = `امکان نمایش فایل در این مرورگر وجود ندارد.
|
|
186
|
+
برای باز کردن فایل از لینک زیر استفاده کنید: </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, true)}'>دانلود فایل بصورت pdf</a> </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, false)}'>دانلود فایل بصورت بصورت اصلی</a>`;
|
|
187
|
+
if (!BarsaApi.Ext.isIE) {
|
|
188
|
+
// const options = {
|
|
189
|
+
// fallbackLink: this.fallbackLink,
|
|
190
|
+
// pdfOpenParams: {
|
|
191
|
+
// view: 'FitH',
|
|
192
|
+
// scrollbar: '0',
|
|
193
|
+
// toolbar: '0',
|
|
194
|
+
// statusbar: '0',
|
|
195
|
+
// messages: '0',
|
|
196
|
+
// navpanes: '0'
|
|
197
|
+
// }
|
|
198
|
+
// };
|
|
199
|
+
let convertTo = isImage(files.Type) ? files.Type : '';
|
|
200
|
+
convertTo = 'pdf,doc,docx,word'.indexOf(files.Type) > -1 ? 'pdf' : convertTo;
|
|
201
|
+
if (!convertTo) {
|
|
202
|
+
this.singleControl = true;
|
|
203
|
+
this.updateSingleControl(files);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this.singleControl = false;
|
|
207
|
+
this.DownloadFileId(fileId, true, convertTo, null, officeOnline);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// const url = Common.File.CreateAttachmentUrl(fileId, false);
|
|
211
|
+
this.canNotRenderPdf = true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
_uploadFile(files) {
|
|
215
|
+
const formData = new FormData();
|
|
216
|
+
files.forEach((file) => {
|
|
217
|
+
formData.append('unicFileName', 'x' + BarsaApi.Common.Util.GetNewMetaGuid() + ';;;' + file.name);
|
|
218
|
+
formData.append('file', file);
|
|
219
|
+
});
|
|
220
|
+
return this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
|
|
221
|
+
if (Array.isArray(res)) {
|
|
222
|
+
this._updateValue(res);
|
|
223
|
+
}
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
_updateValue(res) {
|
|
227
|
+
if (this.Setting.ViewType !== 'LinearListBox') {
|
|
228
|
+
this.updateSingleControl(res[0]);
|
|
229
|
+
}
|
|
230
|
+
this.fireContextEvent('Change', this.context, res);
|
|
231
|
+
}
|
|
232
|
+
updateSingleControl(val) {
|
|
233
|
+
if (isImage(val.Type)) {
|
|
234
|
+
this.singleFileThumbnailUrl = getImagePath('ID', '', val.Id);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
this.singleFileThumbnailUrl = getIcon(val.Type);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
_hideMask() {
|
|
241
|
+
setTimeout(() => {
|
|
242
|
+
BarsaApi.Ul.LoadingMask.Unmask(this._el.nativeElement);
|
|
243
|
+
}, 0);
|
|
244
|
+
}
|
|
245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UiPdfViewerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
246
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UiPdfViewerComponent, selector: "bsu-ui-pdf-viewer", host: { properties: { "style.min-height": "this._minheight" } }, providers: [UploadService], viewQueries: [{ propertyName: "_pdfViewerOnDemand", first: true, predicate: ["pdfViewerOnDemand"], descendants: true }, { propertyName: "_dialogTpl", first: true, predicate: ["dialogTpl"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *untilInView=\"el\">\n @switch (parameters?.ShowMode) { @case ('2') {\n <div>\n <ng-container *ngTemplateOutlet=\"toolbar; context: { dialogMode: true }\"></ng-container>\n </div>\n } @default {\n <div>\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n </div>\n } }\n</ng-container>\n\n<ng-template #toolbar let-dialogMode=\"dialogMode\">\n @if ((disableOrReadonly$ | async) !== true) {\n <fd-toolbar [class.dialogMode]=\"dialogMode\" [transparent]=\"true\" [shouldOverflow]=\"true\">\n <fd-file-uploader\n #uploader\n [style.display]=\"'none'\"\n fd-toolbar-item\n [id]=\"id\"\n [name]=\"'pdf_' + id\"\n [placeholder]=\"'AttachFile' | bbbTranslate\"\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\n [accept]=\"validExtension\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n [contentDensity]=\"(contentDensity$ | async)!!\"\n ></fd-file-uploader>\n @if (!parameters?.HideDelete) {\n <button\n [disabled]=\"!(canDelete && value)\"\n fd-button\n fd-toolbar-item\n class=\"delete\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onDelete()\"\n ></button>\n } @if (!parameters?.HideAttach) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n [disabled]=\"!canUpload\"\n (click)=\"uploader.open()\"\n ></button>\n } @if (canEdit) {\n <button fd-toolbar-item fd-button glyph=\"edit\" [fdType]=\"'transparent'\" (click)=\"onEdit()\"></button>\n } @if (useWordEditor) {\n <button\n fd-toolbar-item\n fd-button\n glyph=\"doc-attachment\"\n [fdType]=\"'transparent'\"\n [label]=\"'Edit' | bbbTranslate\"\n (click)=\"onEditInWord()\"\n ></button>\n } @if (officeOnline) {\n <button\n fd-toolbar-item\n fd-button\n glyph=\"doc-attachment\"\n [fdType]=\"'transparent'\"\n [label]=\"'OfficeOnline' | bbbTranslate\"\n (click)=\"onOfficeOnline($event)\"\n ></button>\n } @if (dialogMode) {\n <button\n fd-toolbar-item\n fd-button\n [glyph]=\"'show'\"\n [attr.fdOverflowPriority]=\"'low'\"\n [fdType]=\"'transparent'\"\n [label]=\"!dialogMode ? '' : ('View' | bbbTranslate)\"\n (click)=\"onOpenPreviewInDialog()\"\n bodyClick\n ></button>\n } @if (canDownload) {\n <button\n fd-toolbar-item\n fd-button\n [attr.fdOverflowPriority]=\"'low'\"\n [glyph]=\"'download'\"\n [label]=\"!dialogMode ? '' : ('Download' | bbbTranslate)\"\n [fdType]=\"'transparent'\"\n (click)=\"onDownload()\"\n bodyClick\n ></button>\n } @if (!parameters?.HideRefresh) {\n <button\n [attr.fdOverflowPriority]=\"'low'\"\n fd-toolbar-item\n fd-button\n [glyph]=\"dialogMode ? null : 'refresh'\"\n [label]=\"!dialogMode ? '' : ('Refresh' | bbbTranslate)\"\n [fdType]=\"'transparent'\"\n bodyClick\n (click)=\"onRefresh()\"\n ></button>\n }\n <fd-busy-indicator\n fd-toolbar-item\n [loading]=\"(uploadingState$ | async)?.uploading === true\"\n ></fd-busy-indicator>\n </fd-toolbar>\n }\n</ng-template>\n<ng-template #preview>\n @if (isMobile) {\n <div\n [style.border]=\"!blobUrl ? '.0625rem solid var(--sapGroup_TitleBorderColor)' : null\"\n style=\"height: calc(70vh - 40px); position: relative\"\n >\n <ng2-pdfjs-viewer\n fillEmptySpace\n [containerDom]=\"formContainer\"\n [dontUseTopBound]=\"true\"\n #pdfViewerOnDemand\n [externalWindow]=\"false\"\n [downloadFileName]=\"blobUrl\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [showSpinner]=\"true\"\n [download]=\"true\"\n ></ng2-pdfjs-viewer>\n </div>\n } @else { @if (hasPdf) {\n <object\n fillEmptySpace\n [containerDom]=\"formContainer\"\n [dontUseTopBound]=\"true\"\n style=\"flex-grow: 1\"\n [attr.data]=\"valueUrl\"\n type=\"application/pdf\"\n width=\"100%\"\n [style.height]=\"formHeight - 30 > 0 ? formHeight - 30 + 'px' : '100vh'\"\n [attr.html]=\"fallbackLink\"\n ></object>\n } @else { @if (singleControl && value && !value.IsDeleted) {\n <div style=\"display: flex\">\n @if (singleFileThumbnailUrl) {\n <img [src]=\"singleFileThumbnailUrl\" />\n }\n <fd-object-identifier>\n {{ value.FileName }}\n </fd-object-identifier>\n </div>\n } @else {\n <div fillEmptySpace [containerDom]=\"formContainer\" [dontUseTopBound]=\"true\" class=\"hatchBackground\"></div>\n } } }\n</ng-template>\n\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTpl>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" class=\"vertical\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h3 fd-title>edit in word</h3>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"onDialogClose()\"></fd-button-bar>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n </fd-dialog-body>\n </fd-dialog>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host fd-toolbar.dialogMode ::ng-deep .fd-toolbar{border-bottom:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}:host ::ng-deep .fd-file-uploader input{display:none}.single-control{height:50px}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "directive", type: i3.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"] }, { kind: "directive", type: i3.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i4.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i4.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i5.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i8.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i8.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i8.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i9.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i10.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i11.ObjectIdentifierComponent, selector: "fd-object-identifier", inputs: ["description", "bold", "medium"] }, { kind: "component", type: i12.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i12.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i13.PdfJsViewerComponent, selector: "ng2-pdfjs-viewer", inputs: ["viewerId", "viewerFolder", "externalWindow", "target", "showSpinner", "downloadFileName", "openFile", "download", "startDownload", "viewBookmark", "print", "startPrint", "fullScreen", "find", "zoom", "nameddest", "pagemode", "lastPage", "rotatecw", "rotateccw", "cursor", "scroll", "spread", "locale", "useOnlyCssZoom", "errorOverride", "errorAppend", "errorMessage", "diagnosticLogs", "externalWindowOptions", "page", "pdfSrc"], outputs: ["onBeforePrint", "onAfterPrint", "onDocumentLoad", "onPageChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
247
|
+
}
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UiPdfViewerComponent, decorators: [{
|
|
249
|
+
type: Component,
|
|
250
|
+
args: [{ selector: 'bsu-ui-pdf-viewer', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *untilInView=\"el\">\n @switch (parameters?.ShowMode) { @case ('2') {\n <div>\n <ng-container *ngTemplateOutlet=\"toolbar; context: { dialogMode: true }\"></ng-container>\n </div>\n } @default {\n <div>\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n </div>\n } }\n</ng-container>\n\n<ng-template #toolbar let-dialogMode=\"dialogMode\">\n @if ((disableOrReadonly$ | async) !== true) {\n <fd-toolbar [class.dialogMode]=\"dialogMode\" [transparent]=\"true\" [shouldOverflow]=\"true\">\n <fd-file-uploader\n #uploader\n [style.display]=\"'none'\"\n fd-toolbar-item\n [id]=\"id\"\n [name]=\"'pdf_' + id\"\n [placeholder]=\"'AttachFile' | bbbTranslate\"\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\n [accept]=\"validExtension\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n [contentDensity]=\"(contentDensity$ | async)!!\"\n ></fd-file-uploader>\n @if (!parameters?.HideDelete) {\n <button\n [disabled]=\"!(canDelete && value)\"\n fd-button\n fd-toolbar-item\n class=\"delete\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onDelete()\"\n ></button>\n } @if (!parameters?.HideAttach) {\n <button\n fd-button\n fd-toolbar-item\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n [disabled]=\"!canUpload\"\n (click)=\"uploader.open()\"\n ></button>\n } @if (canEdit) {\n <button fd-toolbar-item fd-button glyph=\"edit\" [fdType]=\"'transparent'\" (click)=\"onEdit()\"></button>\n } @if (useWordEditor) {\n <button\n fd-toolbar-item\n fd-button\n glyph=\"doc-attachment\"\n [fdType]=\"'transparent'\"\n [label]=\"'Edit' | bbbTranslate\"\n (click)=\"onEditInWord()\"\n ></button>\n } @if (officeOnline) {\n <button\n fd-toolbar-item\n fd-button\n glyph=\"doc-attachment\"\n [fdType]=\"'transparent'\"\n [label]=\"'OfficeOnline' | bbbTranslate\"\n (click)=\"onOfficeOnline($event)\"\n ></button>\n } @if (dialogMode) {\n <button\n fd-toolbar-item\n fd-button\n [glyph]=\"'show'\"\n [attr.fdOverflowPriority]=\"'low'\"\n [fdType]=\"'transparent'\"\n [label]=\"!dialogMode ? '' : ('View' | bbbTranslate)\"\n (click)=\"onOpenPreviewInDialog()\"\n bodyClick\n ></button>\n } @if (canDownload) {\n <button\n fd-toolbar-item\n fd-button\n [attr.fdOverflowPriority]=\"'low'\"\n [glyph]=\"'download'\"\n [label]=\"!dialogMode ? '' : ('Download' | bbbTranslate)\"\n [fdType]=\"'transparent'\"\n (click)=\"onDownload()\"\n bodyClick\n ></button>\n } @if (!parameters?.HideRefresh) {\n <button\n [attr.fdOverflowPriority]=\"'low'\"\n fd-toolbar-item\n fd-button\n [glyph]=\"dialogMode ? null : 'refresh'\"\n [label]=\"!dialogMode ? '' : ('Refresh' | bbbTranslate)\"\n [fdType]=\"'transparent'\"\n bodyClick\n (click)=\"onRefresh()\"\n ></button>\n }\n <fd-busy-indicator\n fd-toolbar-item\n [loading]=\"(uploadingState$ | async)?.uploading === true\"\n ></fd-busy-indicator>\n </fd-toolbar>\n }\n</ng-template>\n<ng-template #preview>\n @if (isMobile) {\n <div\n [style.border]=\"!blobUrl ? '.0625rem solid var(--sapGroup_TitleBorderColor)' : null\"\n style=\"height: calc(70vh - 40px); position: relative\"\n >\n <ng2-pdfjs-viewer\n fillEmptySpace\n [containerDom]=\"formContainer\"\n [dontUseTopBound]=\"true\"\n #pdfViewerOnDemand\n [externalWindow]=\"false\"\n [downloadFileName]=\"blobUrl\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [showSpinner]=\"true\"\n [download]=\"true\"\n ></ng2-pdfjs-viewer>\n </div>\n } @else { @if (hasPdf) {\n <object\n fillEmptySpace\n [containerDom]=\"formContainer\"\n [dontUseTopBound]=\"true\"\n style=\"flex-grow: 1\"\n [attr.data]=\"valueUrl\"\n type=\"application/pdf\"\n width=\"100%\"\n [style.height]=\"formHeight - 30 > 0 ? formHeight - 30 + 'px' : '100vh'\"\n [attr.html]=\"fallbackLink\"\n ></object>\n } @else { @if (singleControl && value && !value.IsDeleted) {\n <div style=\"display: flex\">\n @if (singleFileThumbnailUrl) {\n <img [src]=\"singleFileThumbnailUrl\" />\n }\n <fd-object-identifier>\n {{ value.FileName }}\n </fd-object-identifier>\n </div>\n } @else {\n <div fillEmptySpace [containerDom]=\"formContainer\" [dontUseTopBound]=\"true\" class=\"hatchBackground\"></div>\n } } }\n</ng-template>\n\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTpl>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" class=\"vertical\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h3 fd-title>edit in word</h3>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"onDialogClose()\"></fd-button-bar>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"preview\"></ng-container>\n </fd-dialog-body>\n </fd-dialog>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host fd-toolbar.dialogMode ::ng-deep .fd-toolbar{border-bottom:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}:host ::ng-deep .fd-file-uploader input{display:none}.single-control{height:50px}\n"] }]
|
|
251
|
+
}], propDecorators: { _pdfViewerOnDemand: [{
|
|
252
|
+
type: ViewChild,
|
|
253
|
+
args: ['pdfViewerOnDemand']
|
|
254
|
+
}], _dialogTpl: [{
|
|
255
|
+
type: ViewChild,
|
|
256
|
+
args: ['dialogTpl']
|
|
257
|
+
}], _minheight: [{
|
|
258
|
+
type: HostBinding,
|
|
259
|
+
args: ['style.min-height']
|
|
260
|
+
}] } });
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGRmLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1wZGYtdmlld2VyL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGRmLXZpZXdlci91aS1wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFLWCxTQUFTLEVBQ1QsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0gsUUFBUSxFQUNSLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLFlBQVksRUFDWixPQUFPLEVBQ1AsaUJBQWlCLEVBR3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsNEJBQTRCO0lBUHRFOztRQVVxQyxlQUFVLEdBQWtCLE1BQU0sQ0FBQztRQTJCcEUsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBUWYsbUJBQWMsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBZ1F6RDtJQS9QRyxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztRQUMzRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIs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QyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVE7UUFDaEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBQ08sU0FBUztRQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDOzhHQXRTUSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw2R0FIbEIsQ0FBQyxhQUFhLENBQUMseVJDaEM5Qixvc01BK0tBOzsyRkQ1SWEsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNJLG1CQUFtQixhQUdsQixDQUFDLGFBQWEsQ0FBQyxtQkFDVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUdmLGtCQUFrQjtzQkFBakQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ04sVUFBVTtzQkFBakMsU0FBUzt1QkFBQyxXQUFXO2dCQUNXLFVBQVU7c0JBQTFDLFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHksIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXJzYUFwaSxcbiAgICBVcGxvYWRTZXJ2aWNlLFxuICAgIEZpbGVzVmFsaWRhdGlvbkhlbHBlcixcbiAgICBpc0ltYWdlLFxuICAgIGdldEltYWdlUGF0aCxcbiAgICBnZXRJY29uLFxuICAgIGdldFZhbGlkRXh0ZW5zaW9uLFxuICAgIElVcGxvYWRpbmdTdGF0ZSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGRmLXZpZXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaVBkZlZpZXdlckNvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZCgncGRmVmlld2VyT25EZW1hbmQnKSBfcGRmVmlld2VyT25EZW1hbmQ6IGFueTtcbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUcGwnKSBfZGlhbG9nVHBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWluLWhlaWdodCcpIF9taW5oZWlnaHQ6IHN0cmluZyB8IG51bGwgPSAnNzB2aCc7XG4gICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICBmYWxsYmFja0xpbms6IGFueTtcbiAgICBjYW5Ob3RSZW5kZXJQZGY6IGJvb2xlYW47XG4gICAgdmFsdWVVcmw6IFNhZmVSZXNvdXJjZVVybCB8IG51bGw7XG4gICAgaGFzUGRmOiBib29sZWFuO1xuICAgIHBkZk9iamVjdDoge1xuICAgICAgICBhdXRvRWw6IHtcbiAgICAgICAgICAgIHRhZzogc3RyaW5nO1xuICAgICAgICAgICAgZGF0YTogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgd2lkdGg6IHN0cmluZztcbiAgICAgICAgICAgIGhlaWdodDogc3RyaW5nO1xuICAgICAgICAgICAgaHRtbDogYW55O1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB1cGxvYWRpbmdTdGF0ZSQ6IE9ic2VydmFibGU8SVVwbG9hZGluZ1N0YXRlPjtcbiAgICBmaWxlczogRmlsZVtdO1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG4gICAgb2ZmaWNlT25saW5lOiBhbnk7XG4gICAgdXNlV29yZEVkaXRvcjogYW55O1xuICAgIGhhc0ZpbGVOYW1lOiBib29sZWFuO1xuICAgIGNhblJlbW92ZTogYm9vbGVhbjtcbiAgICBjYW5VcGxvYWQ6IGJvb2xlYW47XG4gICAgY2FuRWRpdDogYm9vbGVhbjtcbiAgICBjYW5Eb3dubG9hZDogYm9vbGVhbjtcbiAgICBjYW5EZWxldGUgPSB0cnVlO1xuICAgIGNhblNhdmUgPSB0cnVlO1xuICAgIHZhbGlkRXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XG4gICAgc2luZ2xlQ29udHJvbDogYm9vbGVhbjtcbiAgICBzaW5nbGVGaWxlVGh1bWJuYWlsVXJsOiBzdHJpbmc7XG4gICAgcGFyZW50SGVpZ2h0OiBudW1iZXI7XG4gICAgYmxvYlVybDogc3RyaW5nO1xuICAgIHBhcmFtZXRlcmVzOiBVaVBkZlZpZXdlclNldHRpbmc7XG4gICAgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBsb2FkaW5nU3RhdGUkID0gdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWRpbmdTdGF0ZSQ7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wYXJhbWV0ZXJzPy5TaG93TW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluaGVpZ2h0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWUkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCQuc3Vic2NyaWJlKChmcm9tU2VydmVyOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoKGZyb21TZXJ2ZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWxlc1ZhbGlkYXRpb25IZWxwZXIgPSBuZXcgRmlsZXNWYWxpZGF0aW9uSGVscGVyKFxuICAgICAgICAgICAgdGhpcy5TZXR0aW5nLk1heEZpbGVDb3VudCxcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhGaWxlU2l6ZUtiLFxuICAgICAgICAgICAgdGhpcy5TZXR0aW5nLk1heFRvdGFsRmlsZVNpemVLYlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9yZWZyZXNoQnV0dG9ucygpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMudmFsaWRFeHRlbnNpb24gPSB0aGlzLmNvbnRleHQudXNlV29yZEVkaXRvclxuICAgICAgICAgICAgPyAnLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXG4gICAgICAgICAgICA6IGdldFZhbGlkRXh0ZW5zaW9uKHRoaXMuU2V0dGluZy5WYWxpZEV4dGVuc2lvbnMpO1xuICAgICAgICB0aGlzLnNpbmdsZUNvbnRyb2wgPSB0aGlzLlNldHRpbmcuVmlld1R5cGUgPT09ICdTaW5nbGVGaWxlQ29udHJvbCc7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIGNvbnN0IHsgZm9ybUhlaWdodCB9ID0gY2hhbmdlcztcbiAgICAgICAgaWYgKGZvcm1IZWlnaHQgJiYgIWZvcm1IZWlnaHQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FZGl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdFZGl0Jyk7XG4gICAgfVxuICAgIG9uVmlldyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlID0geyBjdHJsS2V5OiBldmVudC5jdHJsS2V5IH07XG4gICAgICAgIHRoaXMuX2NvbW1hbmRDbGlja0hhbmRsZXIoJ09PVmlldycsIGUpO1xuICAgIH1cbiAgICBvbkRvd25sb2FkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdEb3dubG9hZCcpO1xuICAgIH1cbiAgICBvbkZpbGVTZWxlY3Rpb24oZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGxvYWRUb1NlcnZlcihmaWxlcyk7XG4gICAgfVxuICAgIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdEZWxldGUnKTtcbiAgICB9XG4gICAgb25FZGl0SW5Xb3JkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdPREVkaXQnKTtcbiAgICB9XG4gICAgb25PZmZpY2VPbmxpbmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZSA9IHsgY3RybEtleTogZXZlbnQuY3RybEtleSB9O1xuXG4gICAgICAgIHRoaXMuX2NvbW1hbmRDbGlja0hhbmRsZXIoJ09PRWRpdCcsIGUpO1xuICAgIH1cbiAgICBvblJlZnJlc2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbW1hbmRDbGlja0hhbmRsZXIoJ1JlZnJlc2gnKTtcbiAgICB9XG4gICAgRG93bmxvYWRGaWxlSWQoZmlsZUlkLCB2aWV3SW5Ccm93c2VyLCBjb252ZXJ0VG8sIGZvck9jeCwgaXNPZmZpY2VPbmxpbmUpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5NYXNrKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICBCYXJzYUFwaS5Db21tb24uRmlsZS5Eb3dubG9hZEZpbGVDb250ZW50LmJpbmQodGhpcykoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgICAgICAgIGZpbGVVcmw6IG51bGwsXG4gICAgICAgICAgICAgICAgdmlld0luQnJvd3NlcixcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG8sXG4gICAgICAgICAgICAgICAgaXNPZmZpY2VPbmxpbmUsXG4gICAgICAgICAgICAgICAgZm9yT2N4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2NlZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRGaWxlSWRDb21wbGV0ZWQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRlTWFzaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlTWFzaygpO1xuICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgb25PcGVuUHJldmlld0luRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5fZGlhbG9nVHBsLCB7XG4gICAgICAgICAgICByZXNwb25zaXZlUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbWFwJyxcbiAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeTogJ2Nob29zZSBsb2NhdGlvbicsXG4gICAgICAgICAgICBmb2N1c1RyYXBwZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uRGlhbG9nQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2Rvd25sb2FkRmlsZUlkQ29tcGxldGVkKHJlc3BvbnNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBCYXJzYUFwaS5Db21tb24uRmlsZS5CNjR0b0Jsb2IocmVzcG9uc2UuY29udGVudCwgcmVzcG9uc2UuY29udGVudFR5cGUpO1xuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgICAgIHRoaXMuYmxvYlVybCA9IHVybC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9wZGZWaWV3ZXJPbkRlbWFuZC5wZGZTcmMgPSB0aGlzLmJsb2JVcmw7IC8vIHBkZlNyYyBjYW4gYmUgQmxvYiBvciBVaW50OEFycmF5XG4gICAgICAgICAgICB0aGlzLl9wZGZWaWV3ZXJPbkRlbWFuZC5yZWZyZXNoKCk7IC8vIEFzayBwZGYgdmlld2VyIHRvIGxvYWQvcmVmcmVzaCBwZGZcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlVXJsID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0aGlzLmJsb2JVcmwpO1xuICAgICAgICB0aGlzLmhhc1BkZiA9IHRydWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfdXBsb2FkVG9TZXJ2ZXIoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlci52YWxpZGF0ZUZpbGVzKGZpbGVzKTtcbiAgICAgICAgdGhpcy5fdXBsb2FkRmlsZShmaWxlcykucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmVmcmVzaEJ1dHRvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hCdXR0b25zSGVscGVyKGZhbHNlKTtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFzeW5jLldhdGVyZmFsbChcbiAgICAgICAgICAgICdDb21tb24uRmlsZS5Jc0FnZW50QWN0aXZlJyxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvLyBDb21tb24uRmlsZUFnZW50LklzQWdlbnRBY3RpdmUuYmluZChDb21tb24uRmlsZUFnZW50KSxcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQWdlbnRIZWxwZXIuSW5pdC5iaW5kKEJhcnNhQXBpLkNvbW1vbi5BZ2VudEhlbHBlcilcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElzQWN0aXZlID0gcmVzdWx0ID09PSAnT0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hCdXR0b25zSGVscGVyKGFnZW50SXNBY3RpdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlZnJlc2hCdXR0b25zSGVscGVyKGlzQWdlbnRBY3RpdmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlT3JSZWFkb25seSQuc3Vic2NyaWJlKChkaXNhYmxlT3JSZWFkb25seSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FuU2F2ZSA9IHRoaXMuY2FuU2F2ZTtcbiAgICAgICAgICAgIHRoaXMuY2FuRGVsZXRlID0gIWRpc2FibGVPclJlYWRvbmx5O1xuICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSAhQmFyc2FBcGkuRXh0LmlzRW1wdHkodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBlZGl0MCA9IGNhblNhdmUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhbkVkaXQgPSBlZGl0MCAmJiBpc0FnZW50QWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5jYW5Eb3dubG9hZCA9ICF0aGlzLlNldHRpbmcuSXNXb3JkVmlld2VyIHx8ICghaXNBZ2VudEFjdGl2ZSAmJiBlZGl0MCk7XG4gICAgICAgICAgICB0aGlzLmNhblVwbG9hZCA9IHRoaXMuY2FuRG93bmxvYWQgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZU5hbWUgPSAhdGhpcy5jb250ZXh0LlNldHRpbmcuSXNXb3JkVmlld2VyO1xuICAgICAgICAgICAgdGhpcy5jYW5SZW1vdmUgPSB0aGlzLmNhbkRvd25sb2FkICYmIGNhblNhdmUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMub2ZmaWNlT25saW5lID0gaGFzVmFsdWUgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiB0aGlzLmNvbnRleHQuT2ZmaWNlT25saW5lO1xuICAgICAgICAgICAgdGhpcy51c2VXb3JkRWRpdG9yID0gaGFzVmFsdWUgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiB0aGlzLmNvbnRleHQudXNlV29yZEVkaXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY29tbWFuZENsaWNrSGFuZGxlcihpdGVtSWQsIGtleWJvYXJkRXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRJZCA9IGl0ZW1JZDtcblxuICAgICAgICBsZXQgZmlsZXMgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUlkID0gZmlsZXM/LklkO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdDb21tYW5kUmVxdWVzdCcsIHRoaXMsIGNvbW1hbmRJZCwgZmlsZUlkLCBrZXlib2FyZEV2ZW50KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9yZWZyZXNoKGZyb21TZXJ2ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9mZmljZU9ubGluZSA9IGZyb21TZXJ2ZXIgPT09IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcblxuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzRW1wdHkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlsZXMgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUlkID0gZmlsZXMuSWQ7XG4gICAgICAgIGlmICghZmlsZUlkIHx8IGZpbGVzLklzRGVsZXRlZCkge1xuICAgICAgICAgICAgaWYgKGZpbGVzLklzRGVsZXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mYWxsYmFja0xpbmsgPSBg2KfZhdqp2KfZhiDZhtmF2KfbjNi0INmB2KfbjNmEINiv2LEg2KfbjNmGINmF2LHZiNix2q/YsSDZiNis2YjYryDZhtiv2KfYsdivLlxuICAgICAgICAg2KjYsdin24wg2KjYp9iyINqp2LHYr9mGINmB2KfbjNmEINin2LIg2YTbjNmG2qkg2LLbjNixINin2LPYqtmB2KfYr9mHINqp2YbbjNivOiAgPC9icj4gPGEgaHJlZj0nJHtCYXJzYUFwaS5Db21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKFxuICAgICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICB0cnVlXG4gICAgICAgICApfSc+2K/Yp9mG2YTZiNivINmB2KfbjNmEINio2LXZiNix2KogcGRmPC9hPiAgPC9icj4gIDxhIGhyZWY9JyR7QmFyc2FBcGkuQ29tbW9uLkZpbGUuQ3JlYXRlQXR0YWNobWVudFVybChcbiAgICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgKX0nPtiv2KfZhtmE2YjYryDZgdin24zZhCDYqNi12YjYsdiqINio2LXZiNix2Kog2KfYtdmE24w8L2E+YDtcblxuICAgICAgICBpZiAoIUJhcnNhQXBpLkV4dC5pc0lFKSB7XG4gICAgICAgICAgICAvLyBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgLy8gICAgIGZhbGxiYWNrTGluazogdGhpcy5mYWxsYmFja0xpbmssXG4gICAgICAgICAgICAvLyAgICAgcGRmT3BlblBhcmFtczoge1xuICAgICAgICAgICAgLy8gICAgICAgICB2aWV3OiAnRml0SCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHNjcm9sbGJhcjogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICB0b29sYmFyOiAnMCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHN0YXR1c2JhcjogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlczogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICBuYXZwYW5lczogJzAnXG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIGxldCBjb252ZXJ0VG8gPSBpc0ltYWdlKGZpbGVzLlR5cGUpID8gZmlsZXMuVHlwZSA6ICcnO1xuICAgICAgICAgICAgY29udmVydFRvID0gJ3BkZixkb2MsZG9jeCx3b3JkJy5pbmRleE9mKGZpbGVzLlR5cGUpID4gLTEgPyAncGRmJyA6IGNvbnZlcnRUbztcblxuICAgICAgICAgICAgaWYgKCFjb252ZXJ0VG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpbmdsZUNvbnRyb2wgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2luZ2xlQ29udHJvbChmaWxlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaW5nbGVDb250cm9sID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMuRG93bmxvYWRGaWxlSWQoZmlsZUlkLCB0cnVlLCBjb252ZXJ0VG8sIG51bGwsIG9mZmljZU9ubGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zdCB1cmwgPSBDb21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKGZpbGVJZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jYW5Ob3RSZW5kZXJQZGYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF91cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VuaWNGaWxlTmFtZScsICd4JyArIEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldE5ld01ldGFHdWlkKCkgKyAnOzs7JyArIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkKGZvcm1EYXRhLCB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsdWUocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdXBkYXRlVmFsdWUocmVzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5TZXR0aW5nLlZpZXdUeXBlICE9PSAnTGluZWFyTGlzdEJveCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2luZ2xlQ29udHJvbChyZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCByZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2luZ2xlQ29udHJvbCh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoaXNJbWFnZSh2YWwuVHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRmlsZVRodW1ibmFpbFVybCA9IGdldEltYWdlUGF0aCgnSUQnLCAnJywgdmFsLklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRmlsZVRodW1ibmFpbFVybCA9IGdldEljb24odmFsLlR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2hpZGVNYXNrKCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLlVubWFzayh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgVWlQZGZWaWV3ZXJTZXR0aW5nIGV4dGVuZHMgTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgU2hvd01vZGU6IHN0cmluZzsgLy8gMj0gYnV0dG9ubW9kZSAxPWRlZmF1bHRcbiAgICBIaWRlRGVsZXRlOiBib29sZWFuO1xuICAgIEhpZGVBdHRhY2g6IGJvb2xlYW47XG4gICAgSGlkZVJlZnJlc2g6IGJvb2xlYW47XG59XG4iLCI8bmctY29udGFpbmVyICp1bnRpbEluVmlldz1cImVsXCI+XG4gICAgQHN3aXRjaCAocGFyYW1ldGVycz8uU2hvd01vZGUpIHsgQGNhc2UgKCcyJykge1xuICAgIDxkaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyOyBjb250ZXh0OiB7IGRpYWxvZ01vZGU6IHRydWUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIH0gQGRlZmF1bHQge1xuICAgIDxkaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgfSB9XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN0b29sYmFyIGxldC1kaWFsb2dNb2RlPVwiZGlhbG9nTW9kZVwiPlxuICAgIEBpZiAoKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSAhPT0gdHJ1ZSkge1xuICAgIDxmZC10b29sYmFyIFtjbGFzcy5kaWFsb2dNb2RlXT1cImRpYWxvZ01vZGVcIiBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiIFtzaG91bGRPdmVyZmxvd109XCJ0cnVlXCI+XG4gICAgICAgIDxmZC1maWxlLXVwbG9hZGVyXG4gICAgICAgICAgICAjdXBsb2FkZXJcbiAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbbmFtZV09XCIncGRmXycgKyBpZFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0F0dGFjaEZpbGUnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtidXR0b25MYWJlbF09XCInQXR0YWNoRmlsZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2J1dHRvbkFyaWFMYWJlbF09XCInQXR0YWNoRmlsZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJ2YWxpZEV4dGVuc2lvblwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbGVzXCJcbiAgICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cIihjb250ZW50RGVuc2l0eSQgfCBhc3luYykhIVwiXG4gICAgICAgID48L2ZkLWZpbGUtdXBsb2FkZXI+XG4gICAgICAgIEBpZiAoIXBhcmFtZXRlcnM/LkhpZGVEZWxldGUpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoY2FuRGVsZXRlICYmIHZhbHVlKVwiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgY2xhc3M9XCJkZWxldGVcIlxuICAgICAgICAgICAgZ2x5cGg9XCJkZWxldGVcIlxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB9IEBpZiAoIXBhcmFtZXRlcnM/LkhpZGVBdHRhY2gpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIGdseXBoPVwiYXR0YWNobWVudFwiXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5VcGxvYWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVwbG9hZGVyLm9wZW4oKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfSBAaWYgKGNhbkVkaXQpIHtcbiAgICAgICAgPGJ1dHRvbiBmZC10b29sYmFyLWl0ZW0gZmQtYnV0dG9uIGdseXBoPVwiZWRpdFwiIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiIChjbGljayk9XCJvbkVkaXQoKVwiPjwvYnV0dG9uPlxuICAgICAgICB9IEBpZiAodXNlV29yZEVkaXRvcikge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZ2x5cGg9XCJkb2MtYXR0YWNobWVudFwiXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidFZGl0JyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FZGl0SW5Xb3JkKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIH0gQGlmIChvZmZpY2VPbmxpbmUpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGdseXBoPVwiZG9jLWF0dGFjaG1lbnRcIlxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInT2ZmaWNlT25saW5lJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25PZmZpY2VPbmxpbmUoJGV2ZW50KVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfSBAaWYgKGRpYWxvZ01vZGUpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIFtnbHlwaF09XCInc2hvdydcIlxuICAgICAgICAgICAgW2F0dHIuZmRPdmVyZmxvd1ByaW9yaXR5XT1cIidsb3cnXCJcbiAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiIWRpYWxvZ01vZGUgPyAnJyA6ICgnVmlldycgfCBiYmJUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk9wZW5QcmV2aWV3SW5EaWFsb2coKVwiXG4gICAgICAgICAgICBib2R5Q2xpY2tcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB9IEBpZiAoY2FuRG93bmxvYWQpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIFthdHRyLmZkT3ZlcmZsb3dQcmlvcml0eV09XCInbG93J1wiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiJ2Rvd25sb2FkJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiIWRpYWxvZ01vZGUgPyAnJyA6ICgnRG93bmxvYWQnIHwgYmJiVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWQoKVwiXG4gICAgICAgICAgICBib2R5Q2xpY2tcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB9IEBpZiAoIXBhcmFtZXRlcnM/LkhpZGVSZWZyZXNoKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFthdHRyLmZkT3ZlcmZsb3dQcmlvcml0eV09XCInbG93J1wiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgW2dseXBoXT1cImRpYWxvZ01vZGUgPyBudWxsIDogJ3JlZnJlc2gnXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIhZGlhbG9nTW9kZSA/ICcnIDogKCdSZWZyZXNoJyB8IGJiYlRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIGJvZHlDbGlja1xuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVmcmVzaCgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbbG9hZGluZ109XCIodXBsb2FkaW5nU3RhdGUkIHwgYXN5bmMpPy51cGxvYWRpbmcgPT09IHRydWVcIlxuICAgICAgICA+PC9mZC1idXN5LWluZGljYXRvcj5cbiAgICA8L2ZkLXRvb2xiYXI+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJldmlldz5cbiAgICBAaWYgKGlzTW9iaWxlKSB7XG4gICAgPGRpdlxuICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIiFibG9iVXJsID8gJy4wNjI1cmVtIHNvbGlkIHZhcigtLXNhcEdyb3VwX1RpdGxlQm9yZGVyQ29sb3IpJyA6IG51bGxcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogY2FsYyg3MHZoIC0gNDBweCk7IHBvc2l0aW9uOiByZWxhdGl2ZVwiXG4gICAgPlxuICAgICAgICA8bmcyLXBkZmpzLXZpZXdlclxuICAgICAgICAgICAgZmlsbEVtcHR5U3BhY2VcbiAgICAgICAgICAgIFtjb250YWluZXJEb21dPVwiZm9ybUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbZG9udFVzZVRvcEJvdW5kXT1cInRydWVcIlxuICAgICAgICAgICAgI3BkZlZpZXdlck9uRGVtYW5kXG4gICAgICAgICAgICBbZXh0ZXJuYWxXaW5kb3ddPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rvd25sb2FkRmlsZU5hbWVdPVwiYmxvYlVybFwiXG4gICAgICAgICAgICBbb3BlbkZpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3ZpZXdCb29rbWFya109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2hvd1NwaW5uZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZG93bmxvYWRdPVwidHJ1ZVwiXG4gICAgICAgID48L25nMi1wZGZqcy12aWV3ZXI+XG4gICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7IEBpZiAoaGFzUGRmKSB7XG4gICAgPG9iamVjdFxuICAgICAgICBmaWxsRW1wdHlTcGFjZVxuICAgICAgICBbY29udGFpbmVyRG9tXT1cImZvcm1Db250YWluZXJcIlxuICAgICAgICBbZG9udFVzZVRvcEJvdW5kXT1cInRydWVcIlxuICAgICAgICBzdHlsZT1cImZsZXgtZ3JvdzogMVwiXG4gICAgICAgIFthdHRyLmRhdGFdPVwidmFsdWVVcmxcIlxuICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vcGRmXCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJmb3JtSGVpZ2h0IC0gMzAgPiAwID8gZm9ybUhlaWdodCAtIDMwICsgJ3B4JyA6ICcxMDB2aCdcIlxuICAgICAgICBbYXR0ci5odG1sXT1cImZhbGxiYWNrTGlua1wiXG4gICAgPjwvb2JqZWN0PlxuICAgIH0gQGVsc2UgeyBAaWYgKHNpbmdsZUNvbnRyb2wgJiYgdmFsdWUgJiYgIXZhbHVlLklzRGVsZXRlZCkge1xuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4XCI+XG4gICAgICAgIEBpZiAoc2luZ2xlRmlsZVRodW1ibmFpbFVybCkge1xuICAgICAgICA8aW1nIFtzcmNdPVwic2luZ2xlRmlsZVRodW1ibmFpbFVybFwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPGZkLW9iamVjdC1pZGVudGlmaWVyPlxuICAgICAgICAgICAge3sgdmFsdWUuRmlsZU5hbWUgfX1cbiAgICAgICAgPC9mZC1vYmplY3QtaWRlbnRpZmllcj5cbiAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICA8ZGl2IGZpbGxFbXB0eVNwYWNlIFtjb250YWluZXJEb21dPVwiZm9ybUNvbnRhaW5lclwiIFtkb250VXNlVG9wQm91bmRdPVwidHJ1ZVwiIGNsYXNzPVwiaGF0Y2hCYWNrZ3JvdW5kXCI+PC9kaXY+XG4gICAgfSB9IH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjZGlhbG9nVHBsPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiIGNsYXNzPVwidmVydGljYWxcIj5cbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgZmQtdGl0bGU+ZWRpdCBpbiB3b3JkPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgYXJpYUxhYmVsPVwiY2xvc2VcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgpXCI+PC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldmlld1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import { FieldBaseComponent, BarsaApi, UploadService, getValidExtension, FilesValidationHelper, ImageMimeType } from 'barsa-novin-ray-core';
|
|
3
|
+
import { of } from 'rxjs';
|
|
4
|
+
import { concatMap, exhaustMap, takeUntil, tap } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "barsa-novin-ray-core";
|
|
9
|
+
import * as i4 from "@fundamental-ngx/core/avatar";
|
|
10
|
+
import * as i5 from "@fundamental-ngx/core/button";
|
|
11
|
+
import * as i6 from "@fundamental-ngx/core/file-uploader";
|
|
12
|
+
import * as i7 from "@fundamental-ngx/core/toolbar";
|
|
13
|
+
import * as i8 from "@fundamental-ngx/core/slider";
|
|
14
|
+
import * as i9 from "../mask/mask.component";
|
|
15
|
+
export class UiPictureFileComponent extends FieldBaseComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this._editable = true;
|
|
19
|
+
this.files = [];
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
super.ngOnInit();
|
|
23
|
+
if (this.Setting?.IsReadOnly === true) {
|
|
24
|
+
this._editable = false;
|
|
25
|
+
}
|
|
26
|
+
this.uploadingState$ = this._uploadService.uploadingState$;
|
|
27
|
+
this.context.on({
|
|
28
|
+
DispalyImage: this._displayImage.bind(this)
|
|
29
|
+
});
|
|
30
|
+
this.imageUrl = this.context.imageUrl;
|
|
31
|
+
this.value = this.context._value;
|
|
32
|
+
this.validExtensions = getValidExtension(this.Setting.ValidExtensions) || ImageMimeType;
|
|
33
|
+
this.filesValidationHelper = new FilesValidationHelper(1, this.Setting.MaxFileSizeKb, this.Setting.MaxFileSizeKb);
|
|
34
|
+
}
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
super.ngOnDestroy();
|
|
37
|
+
this.context.un('DisplayImage', this._displayImage);
|
|
38
|
+
}
|
|
39
|
+
onFileSelection(files) {
|
|
40
|
+
this.filesValidationHelper.validateFiles(files);
|
|
41
|
+
this.uploadFile(files).pipe(takeUntil(this._onDestroy$)).subscribe();
|
|
42
|
+
}
|
|
43
|
+
onFileDeleted(uploaderComponent) {
|
|
44
|
+
uploaderComponent.inputRef.nativeElement.value = '';
|
|
45
|
+
this.value = null;
|
|
46
|
+
this.fireContextEvent('Change', this.context, null);
|
|
47
|
+
}
|
|
48
|
+
onDownloadFile() {
|
|
49
|
+
BarsaApi.Common.File.OpenFile(this.value.FileId, false, this, true, false);
|
|
50
|
+
}
|
|
51
|
+
onRetry() {
|
|
52
|
+
this._upload(this.files);
|
|
53
|
+
}
|
|
54
|
+
onTerminate() {
|
|
55
|
+
this._uploadService.cancelation$.next();
|
|
56
|
+
this._cdr.detectChanges();
|
|
57
|
+
}
|
|
58
|
+
_displayImage(imageUrl, sizeMode, value) {
|
|
59
|
+
this.imageUrl = imageUrl;
|
|
60
|
+
this.value = value;
|
|
61
|
+
this.sizeMode = sizeMode;
|
|
62
|
+
}
|
|
63
|
+
_upload(files) {
|
|
64
|
+
of(true)
|
|
65
|
+
.pipe(takeUntil(this._onDestroy$), exhaustMap(() => this.uploadFile(files)))
|
|
66
|
+
.subscribe();
|
|
67
|
+
}
|
|
68
|
+
uploadFile(files) {
|
|
69
|
+
return this._uploadService.compressFiles$(files).pipe(concatMap((formData) => this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
|
|
70
|
+
if (Array.isArray(res)) {
|
|
71
|
+
const picture = res[0];
|
|
72
|
+
if (picture.ErrorMsg) {
|
|
73
|
+
BarsaApi.Bw.Msg.Error(picture.ErrorMsg);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const value = {
|
|
77
|
+
...picture,
|
|
78
|
+
FileId: picture.FileId
|
|
79
|
+
};
|
|
80
|
+
this.fireContextEvent('Change', this.context, value);
|
|
81
|
+
}
|
|
82
|
+
}))));
|
|
83
|
+
}
|
|
84
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UiPictureFileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
85
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UiPictureFileComponent, selector: "bsu-ui-picture-file", inputs: { imageUrl: "imageUrl", sizeMode: "sizeMode" }, host: { properties: { "class.editable": "this._editable" } }, providers: [UploadService], usesInheritance: true, ngImport: i0, template: "<div\n [style.max-height.px]=\"Setting.SizeMode === '2' ? null : layoutInfo.ControlBounds.height\"\n [class.no-inlineEdit]=\"!inlineEdit\"\n [style.min-height.px]=\"!value && !inlineEdit ? null : 140\"\n [class.inlineEdit]=\"inlineEdit\"\n>\n @if (!((disableOrReadonly$ | async) === true || Setting.IsReadOnly === true)) {\n <div>\n <fd-toolbar [fdType]=\"'transparent'\" [clearBorder]=\"value && imageUrl ? false : true\">\n <fd-file-uploader\n #uploader\n fd-toolbar-item\n [style.display]=\"'none'\"\n [id]=\"id\"\n [name]=\"'uploader_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n [accept]=\"validExtensions\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <button\n fd-toolbar-item\n fd-button\n [disabled]=\"this.value && value?.IsDeleted !== true\"\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n (click)=\"uploader.open()\"\n ></button>\n <button\n class=\"delete\"\n fd-button\n fd-toolbar-item\n [disabled]=\"!this.value || value?.IsDeleted\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onFileDeleted(uploader)\"\n ></button>\n <ng-container\n *ngTemplateOutlet=\"\n loadingTpl;\n context: {\n uploadingState: uploadingState$ | async\n }\n \"\n >\n </ng-container>\n </fd-toolbar>\n </div>\n } @if (!inlineEdit) {\n <div\n [style.max-height.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.height : null\"\n [style.max-width.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.width : null\"\n [class.centerImage]=\"Setting.SizeMode === '3'\"\n >\n @if (value && imageUrl) {\n <bsu-mask [top]=\"'0px'\"></bsu-mask>\n } @if ((value && imageUrl) || Setting.HasDefaultPicture) {\n <img\n imgLazy\n [imgLazy]=\"imageUrl\"\n [src]=\"imageUrl\"\n [ngClass]=\"Setting.SizeMode === '1' ? 'cover' : 'contain'\"\n [style.height.px]=\"Setting.SizeMode !== '2' ? layoutInfo.ControlBounds.height : null\"\n />\n }\n </div>\n } @else {\n <fd-avatar [size]=\"'m'\" [image]=\"imageUrl\"></fd-avatar>\n }\n</div>\n<ng-template #loadingTpl let-uploadingState=\"uploadingState\">\n @if (uploadingState && uploadingState.state !== 'Complete' && uploadingState.uploading) {\n <fd-slider\n [(ngModel)]=\"uploadingState.progress\"\n [name]=\"'slider_' + id\"\n fd-toolbar-item\n [id]=\"id + '1'\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n >\n </fd-slider>\n @if (uploadingState.state === 'Uploading') {\n <button fd-toolbar-item fd-button glyph=\"stop\" fdType=\"transparent\" (click)=\"onTerminate()\"></button>\n } @if (uploadingState.state === 'Error') {\n <button fd-toolbar-item fd-button glyph=\"refresh\" [fdType]=\"'transparent'\" (click)=\"onRetry()\"></button>\n } }\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;margin-bottom:.25rem;margin-top:.1875rem}:host.editable{border:.0625rem solid var(--sapGroup_TitleBorderColor)}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}img{width:100%}.pic-wrapper{background-repeat:no-repeat;background-position:center}.cover{max-width:100%;max-height:100%;min-height:100%;width:100%;height:100%;background-size:cover}.contain{max-width:100%;max-height:100%;min-height:100%;width:auto;height:100%;background-size:contain}.no-inlineEdit{width:100%;position:relative;display:flex;flex-direction:column}.inlineEdit{width:100%;position:relative;display:flex;flex-direction:row-reverse;align-items:flex-end;justify-content:flex-start}.centerImage{display:flex;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.ImageLazyDirective, selector: "[imgLazy]", inputs: ["auto", "threshold", "imgLazy"], outputs: ["imageLoaded"] }, { kind: "component", type: i4.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i7.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i7.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i8.SliderComponent, selector: "fd-slider", inputs: ["id", "class", "ariaLabelledBy", "ariaLabel", "min", "max", "step", "jump", "tickmarksBetweenLabels", "mode", "showTicks", "showTicksLabels", "customValues", "tooltipMode", "hideProgressBar", "disabled", "vertical", "value"] }, { kind: "component", type: i9.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UiPictureFileComponent, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{ selector: 'bsu-ui-picture-file', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UploadService], template: "<div\n [style.max-height.px]=\"Setting.SizeMode === '2' ? null : layoutInfo.ControlBounds.height\"\n [class.no-inlineEdit]=\"!inlineEdit\"\n [style.min-height.px]=\"!value && !inlineEdit ? null : 140\"\n [class.inlineEdit]=\"inlineEdit\"\n>\n @if (!((disableOrReadonly$ | async) === true || Setting.IsReadOnly === true)) {\n <div>\n <fd-toolbar [fdType]=\"'transparent'\" [clearBorder]=\"value && imageUrl ? false : true\">\n <fd-file-uploader\n #uploader\n fd-toolbar-item\n [style.display]=\"'none'\"\n [id]=\"id\"\n [name]=\"'uploader_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n [accept]=\"validExtensions\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <button\n fd-toolbar-item\n fd-button\n [disabled]=\"this.value && value?.IsDeleted !== true\"\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n (click)=\"uploader.open()\"\n ></button>\n <button\n class=\"delete\"\n fd-button\n fd-toolbar-item\n [disabled]=\"!this.value || value?.IsDeleted\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onFileDeleted(uploader)\"\n ></button>\n <ng-container\n *ngTemplateOutlet=\"\n loadingTpl;\n context: {\n uploadingState: uploadingState$ | async\n }\n \"\n >\n </ng-container>\n </fd-toolbar>\n </div>\n } @if (!inlineEdit) {\n <div\n [style.max-height.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.height : null\"\n [style.max-width.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.width : null\"\n [class.centerImage]=\"Setting.SizeMode === '3'\"\n >\n @if (value && imageUrl) {\n <bsu-mask [top]=\"'0px'\"></bsu-mask>\n } @if ((value && imageUrl) || Setting.HasDefaultPicture) {\n <img\n imgLazy\n [imgLazy]=\"imageUrl\"\n [src]=\"imageUrl\"\n [ngClass]=\"Setting.SizeMode === '1' ? 'cover' : 'contain'\"\n [style.height.px]=\"Setting.SizeMode !== '2' ? layoutInfo.ControlBounds.height : null\"\n />\n }\n </div>\n } @else {\n <fd-avatar [size]=\"'m'\" [image]=\"imageUrl\"></fd-avatar>\n }\n</div>\n<ng-template #loadingTpl let-uploadingState=\"uploadingState\">\n @if (uploadingState && uploadingState.state !== 'Complete' && uploadingState.uploading) {\n <fd-slider\n [(ngModel)]=\"uploadingState.progress\"\n [name]=\"'slider_' + id\"\n fd-toolbar-item\n [id]=\"id + '1'\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n >\n </fd-slider>\n @if (uploadingState.state === 'Uploading') {\n <button fd-toolbar-item fd-button glyph=\"stop\" fdType=\"transparent\" (click)=\"onTerminate()\"></button>\n } @if (uploadingState.state === 'Error') {\n <button fd-toolbar-item fd-button glyph=\"refresh\" [fdType]=\"'transparent'\" (click)=\"onRetry()\"></button>\n } }\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;margin-bottom:.25rem;margin-top:.1875rem}:host.editable{border:.0625rem solid var(--sapGroup_TitleBorderColor)}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}img{width:100%}.pic-wrapper{background-repeat:no-repeat;background-position:center}.cover{max-width:100%;max-height:100%;min-height:100%;width:100%;height:100%;background-size:cover}.contain{max-width:100%;max-height:100%;min-height:100%;width:auto;height:100%;background-size:contain}.no-inlineEdit{width:100%;position:relative;display:flex;flex-direction:column}.inlineEdit{width:100%;position:relative;display:flex;flex-direction:row-reverse;align-items:flex-end;justify-content:flex-start}.centerImage{display:flex;justify-content:center}\n"] }]
|
|
90
|
+
}], propDecorators: { _editable: [{
|
|
91
|
+
type: HostBinding,
|
|
92
|
+
args: ['class.editable']
|
|
93
|
+
}], imageUrl: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], sizeMode: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}] } });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZS1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLXBpY3R1cmUtZmlsZS91aS1waWN0dXJlLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZS1maWxlL3VpLXBpY3R1cmUtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzFHLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGFBQWEsRUFDYixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGFBQWEsRUFFaEIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTdkUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVA5RDs7UUFRbUMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUdoRCxVQUFLLEdBQVcsRUFBRSxDQUFDO0tBcUZ0QjtJQWpGRyxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7UUFDM0QsSUFBSSxD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QixDQUFDLENBQUMsSUFBSSxDQUNyRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNSLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNuQixRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4QyxPQUFPO2dCQUNYLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLEdBQUc7b0JBQ1YsR0FBRyxPQUFPO29CQUNWLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDekIsQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQzs4R0F4RlEsc0JBQXNCO2tHQUF0QixzQkFBc0Isb0tBRnBCLENBQUMsYUFBYSxDQUFDLGlEQ3JCOUIsMGtIQTJGQTs7MkZEcEVhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsQ0FBQzs4QkFHSyxTQUFTO3NCQUF2QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDcEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBGaWVsZEJhc2VDb21wb25lbnQsXG4gICAgQmFyc2FBcGksXG4gICAgVXBsb2FkU2VydmljZSxcbiAgICBnZXRWYWxpZEV4dGVuc2lvbixcbiAgICBGaWxlc1ZhbGlkYXRpb25IZWxwZXIsXG4gICAgSW1hZ2VNaW1lVHlwZSxcbiAgICBJVXBsb2FkaW5nU3RhdGVcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBleGhhdXN0TWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGljdHVyZS1maWxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcGljdHVyZS1maWxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91aS1waWN0dXJlLWZpbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBVaVBpY3R1cmVGaWxlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZWRpdGFibGUnKSBfZWRpdGFibGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGltYWdlVXJsOiBhbnk7XG4gICAgQElucHV0KCkgc2l6ZU1vZGU6IGFueTtcbiAgICBmaWxlczogRmlsZVtdID0gW107XG4gICAgdXBsb2FkaW5nU3RhdGUkOiBPYnNlcnZhYmxlPElVcGxvYWRpbmdTdGF0ZT47XG4gICAgdmFsaWRFeHRlbnNpb25zOiBhbnk7XG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLlNldHRpbmc/LklzUmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGxvYWRpbmdTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZGluZ1N0YXRlJDtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9uKHtcbiAgICAgICAgICAgIERpc3BhbHlJbWFnZTogdGhpcy5fZGlzcGxheUltYWdlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLmNvbnRleHQuaW1hZ2VVcmw7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRleHQuX3ZhbHVlO1xuICAgICAgICB0aGlzLnZhbGlkRXh0ZW5zaW9ucyA9IGdldFZhbGlkRXh0ZW5zaW9uKHRoaXMuU2V0dGluZy5WYWxpZEV4dGVuc2lvbnMpIHx8IEltYWdlTWltZVR5cGU7XG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyID0gbmV3IEZpbGVzVmFsaWRhdGlvbkhlbHBlcihcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhGaWxlU2l6ZUtiXG4gICAgICAgICk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0Rpc3BsYXlJbWFnZScsIHRoaXMuX2Rpc3BsYXlJbWFnZSk7XG4gICAgfVxuICAgIG9uRmlsZVNlbGVjdGlvbihmaWxlczogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyLnZhbGlkYXRlRmlsZXMoZmlsZXMpO1xuICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZXMpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgb25GaWxlRGVsZXRlZCh1cGxvYWRlckNvbXBvbmVudDogRmlsZVVwbG9hZGVyQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIHVwbG9hZGVyQ29tcG9uZW50LmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBudWxsKTtcbiAgICB9XG5cbiAgICBvbkRvd25sb2FkRmlsZSgpOiB2b2lkIHtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkZpbGUuT3BlbkZpbGUodGhpcy52YWx1ZS5GaWxlSWQsIGZhbHNlLCB0aGlzLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgb25SZXRyeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBsb2FkKHRoaXMuZmlsZXMpO1xuICAgIH1cblxuICAgIG9uVGVybWluYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGxvYWRTZXJ2aWNlLmNhbmNlbGF0aW9uJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc3BsYXlJbWFnZShpbWFnZVVybCwgc2l6ZU1vZGUsIHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBpbWFnZVVybDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNpemVNb2RlID0gc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBsb2FkKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgb2YodHJ1ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMudXBsb2FkRmlsZShmaWxlcykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBsb2FkU2VydmljZS5jb21wcmVzc0ZpbGVzJChmaWxlcykucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoZm9ybURhdGE6IEZvcm1EYXRhKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkKGZvcm1EYXRhLCB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGljdHVyZSA9IHJlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGljdHVyZS5FcnJvck1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuRXJyb3IocGljdHVyZS5FcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJZDogcGljdHVyZS5GaWxlSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMicgPyBudWxsIDogbGF5b3V0SW5mby5Db250cm9sQm91bmRzLmhlaWdodFwiXG4gICAgW2NsYXNzLm5vLWlubGluZUVkaXRdPVwiIWlubGluZUVkaXRcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIiF2YWx1ZSAmJiAhaW5saW5lRWRpdCA/IG51bGwgOiAxNDBcIlxuICAgIFtjbGFzcy5pbmxpbmVFZGl0XT1cImlubGluZUVkaXRcIlxuPlxuICAgIEBpZiAoISgoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlIHx8IFNldHRpbmcuSXNSZWFkT25seSA9PT0gdHJ1ZSkpIHtcbiAgICA8ZGl2PlxuICAgICAgICA8ZmQtdG9vbGJhciBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbY2xlYXJCb3JkZXJdPVwidmFsdWUgJiYgaW1hZ2VVcmwgPyBmYWxzZSA6IHRydWVcIj5cbiAgICAgICAgICAgIDxmZC1maWxlLXVwbG9hZGVyXG4gICAgICAgICAgICAgICAgI3VwbG9hZGVyXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIid1cGxvYWRlcl8nICsgaWRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtidXR0b25MYWJlbF09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtidXR0b25BcmlhTGFiZWxdPVwiJ0F0dGFjaFBpY3R1cmUnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYWNjZXB0XT1cInZhbGlkRXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWxlc1wiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgPjwvZmQtZmlsZS11cGxvYWRlcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy52YWx1ZSAmJiB2YWx1ZT8uSXNEZWxldGVkICE9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImF0dGFjaG1lbnRcIlxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwbG9hZGVyLm9wZW4oKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGVcIlxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy52YWx1ZSB8fCB2YWx1ZT8uSXNEZWxldGVkXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaWxlRGVsZXRlZCh1cGxvYWRlcilcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUcGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGluZ1N0YXRlOiB1cGxvYWRpbmdTdGF0ZSQgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgPC9kaXY+XG4gICAgfSBAaWYgKCFpbmxpbmVFZGl0KSB7XG4gICAgPGRpdlxuICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMCcgPyBsYXlvdXRJbmZvLkNvbnRyb2xCb3VuZHMuaGVpZ2h0IDogbnVsbFwiXG4gICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiU2V0dGluZy5TaXplTW9kZSA9PT0gJzAnID8gbGF5b3V0SW5mby5Db250cm9sQm91bmRzLndpZHRoIDogbnVsbFwiXG4gICAgICAgIFtjbGFzcy5jZW50ZXJJbWFnZV09XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMydcIlxuICAgID5cbiAgICAgICAgQGlmICh2YWx1ZSAmJiBpbWFnZVVybCkge1xuICAgICAgICA8YnN1LW1hc2sgW3RvcF09XCInMHB4J1wiPjwvYnN1LW1hc2s+XG4gICAgICAgIH0gQGlmICgodmFsdWUgJiYgaW1hZ2VVcmwpIHx8IFNldHRpbmcuSGFzRGVmYXVsdFBpY3R1cmUpIHtcbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgaW1nTGF6eVxuICAgICAgICAgICAgW2ltZ0xhenldPVwiaW1hZ2VVcmxcIlxuICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMScgPyAnY292ZXInIDogJ2NvbnRhaW4nXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiU2V0dGluZy5TaXplTW9kZSAhPT0gJzInID8gbGF5b3V0SW5mby5Db250cm9sQm91bmRzLmhlaWdodCA6IG51bGxcIlxuICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgPGZkLWF2YXRhciBbc2l6ZV09XCInbSdcIiBbaW1hZ2VdPVwiaW1hZ2VVcmxcIj48L2ZkLWF2YXRhcj5cbiAgICB9XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RwbCBsZXQtdXBsb2FkaW5nU3RhdGU9XCJ1cGxvYWRpbmdTdGF0ZVwiPlxuICAgIEBpZiAodXBsb2FkaW5nU3RhdGUgJiYgdXBsb2FkaW5nU3RhdGUuc3RhdGUgIT09ICdDb21wbGV0ZScgJiYgdXBsb2FkaW5nU3RhdGUudXBsb2FkaW5nKSB7XG4gICAgPGZkLXNsaWRlclxuICAgICAgICBbKG5nTW9kZWwpXT1cInVwbG9hZGluZ1N0YXRlLnByb2dyZXNzXCJcbiAgICAgICAgW25hbWVdPVwiJ3NsaWRlcl8nICsgaWRcIlxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgW2lkXT1cImlkICsgJzEnXCJcbiAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgW21heF09XCIxMDBcIlxuICAgICAgICBbc3RlcF09XCIxXCJcbiAgICA+XG4gICAgPC9mZC1zbGlkZXI+XG4gICAgQGlmICh1cGxvYWRpbmdTdGF0ZS5zdGF0ZSA9PT0gJ1VwbG9hZGluZycpIHtcbiAgICA8YnV0dG9uIGZkLXRvb2xiYXItaXRlbSBmZC1idXR0b24gZ2x5cGg9XCJzdG9wXCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiAoY2xpY2spPVwib25UZXJtaW5hdGUoKVwiPjwvYnV0dG9uPlxuICAgIH0gQGlmICh1cGxvYWRpbmdTdGF0ZS5zdGF0ZSA9PT0gJ0Vycm9yJykge1xuICAgIDxidXR0b24gZmQtdG9vbGJhci1pdGVtIGZkLWJ1dHRvbiBnbHlwaD1cInJlZnJlc2hcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiAoY2xpY2spPVwib25SZXRyeSgpXCI+PC9idXR0b24+XG4gICAgfSB9XG48L25nLXRlbXBsYXRlPlxuIl19
|