@bizdoc/core 1.10.3 → 1.11.0-next.10
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/assets/bizdoc-schema.json +8 -8
- package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
- package/esm2020/lib/admin/admin-menu.component.mjs +3 -3
- package/esm2020/lib/admin/core/ace.input.mjs +3 -3
- package/esm2020/lib/admin/core/color-picker.input.mjs +3 -3
- package/esm2020/lib/admin/core/search.input.mjs +3 -3
- package/esm2020/lib/admin/diff/configuration-diff.component.mjs +3 -3
- package/esm2020/lib/admin/document-trace/document-trace.component.mjs +3 -3
- package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +3 -3
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +3 -3
- package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
- package/esm2020/lib/admin/form/form.service.mjs +3 -3
- package/esm2020/lib/admin/form/workflow/node.component.mjs +3 -3
- package/esm2020/lib/admin/form/workflow/role-node.component.mjs +3 -3
- package/esm2020/lib/admin/form/workflow/workflow.component.mjs +3 -3
- package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +3 -3
- package/esm2020/lib/admin/patterns/patterns.component.mjs +3 -3
- package/esm2020/lib/admin/permissions/permissions.component.mjs +3 -3
- package/esm2020/lib/admin/positions/positions-popup.component.mjs +3 -3
- package/esm2020/lib/admin/positions/positions.component.mjs +7 -7
- package/esm2020/lib/admin/profiler/profiler.component.mjs +3 -3
- package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
- package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
- package/esm2020/lib/app.component.mjs +16 -9
- package/esm2020/lib/bizdoc.module.mjs +4 -4
- package/esm2020/lib/browse/browse-items.component.mjs +6 -6
- package/esm2020/lib/browse/browse.mobile.component.mjs +4 -4
- package/esm2020/lib/browse/browse.pane.component.mjs +4 -4
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
- package/esm2020/lib/browse/filter/filter.component.mjs +3 -3
- package/esm2020/lib/browse/folders-menu.component.mjs +3 -3
- package/esm2020/lib/chat/chat-info.mjs +3 -3
- package/esm2020/lib/chat/chat.mobile.component.mjs +3 -3
- package/esm2020/lib/chat/chat.service.mjs +3 -3
- package/esm2020/lib/chat/contacts.component.mjs +6 -6
- package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
- package/esm2020/lib/chat/conversation.component.mjs +3 -3
- package/esm2020/lib/chat/conversation.pane.component.mjs +3 -3
- package/esm2020/lib/compose/action/action-picker.component.mjs +3 -3
- package/esm2020/lib/compose/action/action.dialog.mjs +3 -3
- package/esm2020/lib/compose/action/action.pane.dialog.mjs +3 -3
- package/esm2020/lib/compose/action/assign-action.component.mjs +3 -3
- package/esm2020/lib/compose/action/return-action.component.mjs +3 -3
- package/esm2020/lib/compose/attachments/attachments.component.mjs +32 -24
- package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +10 -16
- package/esm2020/lib/compose/attachments/progress-button.directive.mjs +6 -6
- package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
- package/esm2020/lib/compose/comments/Comments.pane.component.mjs +3 -3
- package/esm2020/lib/compose/comments/comment.component.mjs +3 -3
- package/esm2020/lib/compose/comments/comments.component.mjs +3 -3
- package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
- package/esm2020/lib/compose/comments/edits.component.mjs +3 -3
- package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
- package/esm2020/lib/compose/comments/votes.component.mjs +3 -3
- package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
- package/esm2020/lib/compose/compose.mobile.component.mjs +5 -5
- package/esm2020/lib/compose/compose.pane.component.mjs +6 -6
- package/esm2020/lib/compose/copy/copy.dialog.mjs +3 -3
- package/esm2020/lib/compose/dismiss.service.mjs +3 -3
- package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
- package/esm2020/lib/compose/document.component.mjs +3 -3
- package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
- package/esm2020/lib/compose/document.pane.component.mjs +3 -3
- package/esm2020/lib/compose/events/events.component.mjs +3 -3
- package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +5 -5
- package/esm2020/lib/compose/form.component.mjs +50 -26
- package/esm2020/lib/compose/new-menu.component.mjs +5 -5
- package/esm2020/lib/compose/privilage.directive.mjs +6 -6
- package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
- package/esm2020/lib/compose/save-changes.dialog.mjs +3 -3
- package/esm2020/lib/compose/state.component.mjs +3 -3
- package/esm2020/lib/compose/tag/tags.component.mjs +3 -3
- package/esm2020/lib/compose/trace/flow.component.mjs +34 -46
- package/esm2020/lib/compose/trace/people.component.mjs +3 -3
- package/esm2020/lib/compose/trace/trace.base.mjs +3 -3
- package/esm2020/lib/compose/trace/trace.component.mjs +44 -18
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
- package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
- package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
- package/esm2020/lib/compose/version-compare/version.pane.component.mjs +3 -3
- package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
- package/esm2020/lib/core/account.service.mjs +3 -3
- package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
- package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
- package/esm2020/lib/core/base.mjs +1 -1
- package/esm2020/lib/core/component-factory-resolver.mjs +12 -5
- package/esm2020/lib/core/configuration.mjs +2 -1
- package/esm2020/lib/core/controls/address.input.mjs +13 -9
- package/esm2020/lib/core/controls/auto-complete.input.mjs +3 -3
- package/esm2020/lib/core/controls/combination-picker-body.mjs +4 -4
- package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
- package/esm2020/lib/core/controls/combination-pool.mjs +3 -3
- package/esm2020/lib/core/controls/file.input.mjs +390 -0
- package/esm2020/lib/core/controls/select.input.mjs +15 -13
- package/esm2020/lib/core/controls/time-picker.mjs +3 -3
- package/esm2020/lib/core/controls/timespan.input.mjs +3 -3
- package/esm2020/lib/core/datasource.service.mjs +24 -12
- package/esm2020/lib/core/functions.mjs +8 -1
- package/esm2020/lib/core/guide/guide.component.mjs +3 -3
- package/esm2020/lib/core/guide/guide.service.mjs +3 -3
- package/esm2020/lib/core/http.interceptor.mjs +3 -3
- package/esm2020/lib/core/hub.service.mjs +4 -4
- package/esm2020/lib/core/identity/identity.component.mjs +3 -3
- package/esm2020/lib/core/info/attachment-info.service.mjs +10 -12
- package/esm2020/lib/core/info/document-info.service.mjs +3 -3
- package/esm2020/lib/core/info/location-info.component.mjs +3 -3
- package/esm2020/lib/core/info/map-info.mjs +3 -3
- package/esm2020/lib/core/layout/autocomplete.field.mjs +4 -4
- package/esm2020/lib/core/layout/checkbox.field.mjs +3 -3
- package/esm2020/lib/core/layout/checkbox.mjs +3 -3
- package/esm2020/lib/core/layout/date-range.field.mjs +3 -3
- package/esm2020/lib/core/layout/date.field.mjs +3 -3
- package/esm2020/lib/core/layout/expression.field.mjs +3 -3
- package/esm2020/lib/core/layout/html.field.mjs +3 -3
- package/esm2020/lib/core/layout/input.base.mjs +3 -3
- package/esm2020/lib/core/layout/input.field.mjs +3 -3
- package/esm2020/lib/core/layout/layout.component.mjs +3 -3
- package/esm2020/lib/core/layout/numeric.field.mjs +3 -3
- package/esm2020/lib/core/layout/select.field.mjs +5 -5
- package/esm2020/lib/core/layout/switch.field.mjs +3 -3
- package/esm2020/lib/core/layout/textarea.field.mjs +3 -3
- package/esm2020/lib/core/layout/timespan.field.mjs +3 -3
- package/esm2020/lib/core/lottie-animation.mjs +3 -3
- package/esm2020/lib/core/mailbox.service.mjs +144 -40
- package/esm2020/lib/core/models.mjs +8 -1
- package/esm2020/lib/core/none.component.mjs +3 -3
- package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/calendar.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/daterange.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/difference.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/duration-format.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/duration.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/time-ago.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/translate.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
- package/esm2020/lib/core/popup/popup.component.mjs +3 -3
- package/esm2020/lib/core/popup/popup.service.mjs +3 -3
- package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
- package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +3 -3
- package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
- package/esm2020/lib/core/prompt.service.mjs +3 -3
- package/esm2020/lib/core/router.mjs +6 -6
- package/esm2020/lib/core/session.service.mjs +10 -5
- package/esm2020/lib/core/slots/pane-ref.mjs +3 -1
- package/esm2020/lib/core/slots/router.directive.mjs +3 -3
- package/esm2020/lib/core/slots/router.service.mjs +3 -3
- package/esm2020/lib/core/slots/slots.component.mjs +22 -8
- package/esm2020/lib/core/tagging/documents.component.mjs +3 -3
- package/esm2020/lib/core/tagging/edit-input.component.mjs +5 -5
- package/esm2020/lib/core/tagging/emoji.component.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
- package/esm2020/lib/core/tagging/users.component.mjs +3 -3
- package/esm2020/lib/core/translate.service.mjs +7 -4
- package/esm2020/lib/core/translations.mjs +12 -4
- package/esm2020/lib/core/window-title.service.mjs +3 -3
- package/esm2020/lib/cube/accum/accum.component.mjs +17 -13
- package/esm2020/lib/cube/chart/chart.component.mjs +17 -14
- package/esm2020/lib/cube/cube-info.service.mjs +7 -7
- package/esm2020/lib/cube/cube-menu.component.mjs +3 -3
- package/esm2020/lib/cube/cube-view.component.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +28 -8
- package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
- package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
- package/esm2020/lib/cube/explore/explore-items.component.mjs +19 -15
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +14 -9
- package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
- package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
- package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
- package/esm2020/lib/cube/filter/filter.component.mjs +50 -31
- package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
- package/esm2020/lib/cube/grid/spreadsheet.component.mjs +22 -24
- package/esm2020/lib/cube/matrix/matrix.base.mjs +4 -4
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +6 -5
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +7 -6
- package/esm2020/lib/cube/matrix/popup.component.mjs +68 -0
- package/esm2020/lib/cube/matrix/table.component.mjs +65 -12
- package/esm2020/lib/cube/parallel/parallel.component.mjs +16 -8
- package/esm2020/lib/cube/pivot/pivot.component.mjs +36 -17
- package/esm2020/lib/cube/sum/sum.component.mjs +4 -4
- package/esm2020/lib/cube/view-base.mjs +3 -3
- package/esm2020/lib/cube/view.mobile.component.mjs +13 -7
- package/esm2020/lib/cube/view.pane.component.mjs +5 -6
- package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +4 -4
- package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/documents.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +4 -4
- package/esm2020/lib/dashboard/dashboard.component.mjs +3 -3
- package/esm2020/lib/dashboard/dashboard.pane.component.mjs +3 -3
- package/esm2020/lib/dashboard/recents/recents.widget.mjs +17 -16
- package/esm2020/lib/dashboard/score/activity.widget.mjs +4 -7
- package/esm2020/lib/dashboard/score/compare-departments.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/pending-results.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/personal-score.widget.mjs +3 -3
- package/esm2020/lib/dashboard/widget-item.component.mjs +3 -3
- package/esm2020/lib/desktop.module.mjs +4 -4
- package/esm2020/lib/home/about/about.dialog.mjs +3 -3
- package/esm2020/lib/home/home-base.component.mjs +5 -5
- package/esm2020/lib/home/home.desktop.component.mjs +3 -3
- package/esm2020/lib/home/home.mobile.component.mjs +3 -3
- package/esm2020/lib/home/notifications/notifications.component.mjs +3 -3
- package/esm2020/lib/home/options/options.component.mjs +3 -3
- package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +3 -3
- package/esm2020/lib/home/search.service.mjs +3 -3
- package/esm2020/lib/home/sign/sign.component.mjs +3 -3
- package/esm2020/lib/home/tools.component.mjs +3 -3
- package/esm2020/lib/impersonate/impersonate.component.mjs +3 -3
- package/esm2020/lib/mobile.module.mjs +4 -4
- package/esm2020/lib/modules/chart.module.mjs +4 -4
- package/esm2020/lib/modules/circular-gauge.module.mjs +4 -4
- package/esm2020/lib/modules/date.adapter.mjs +3 -3
- package/esm2020/lib/modules/datepicker.intl.mjs +3 -3
- package/esm2020/lib/modules/diagram.module.mjs +4 -4
- package/esm2020/lib/modules/gantt.module.mjs +4 -4
- package/esm2020/lib/modules/grid.module.mjs +4 -4
- package/esm2020/lib/modules/material.module.mjs +4 -4
- package/esm2020/lib/modules/paginator.intl.mjs +3 -3
- package/esm2020/lib/modules/pivot.module.mjs +4 -4
- package/esm2020/lib/modules/schedule.module.mjs +4 -4
- package/esm2020/lib/modules/spreadsheet.module.mjs +4 -4
- package/esm2020/lib/modules/stepper.intl.mjs +3 -3
- package/esm2020/lib/modules/texteditor.module.mjs +4 -4
- package/esm2020/lib/notifications/filter.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications-table.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.mobile.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.pane.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.service.mjs +3 -3
- package/esm2020/lib/notifications/types/commented.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/escalated.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/liked.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/long-running-task.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/notification-base.mjs +3 -3
- package/esm2020/lib/notifications/types/nudge.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/state-changed.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/tagged.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/text.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +3 -3
- package/esm2020/lib/options/options.component.mjs +3 -3
- package/esm2020/lib/options/options.service.mjs +3 -3
- package/esm2020/lib/reports/arguments-component.mjs +3 -3
- package/esm2020/lib/reports/cube/grid-documents.component.mjs +3 -3
- package/esm2020/lib/reports/cube/table-documents.component.mjs +3 -3
- package/esm2020/lib/reports/cube/usage-args.component.mjs +6 -8
- package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
- package/esm2020/lib/reports/cube/usage-chart.component.mjs +12 -12
- package/esm2020/lib/reports/cube/usage-pivot.component.mjs +3 -3
- package/esm2020/lib/reports/report-viewer.component.mjs +6 -6
- package/esm2020/lib/reports/report.mobile.component.mjs +3 -3
- package/esm2020/lib/reports/report.pane.component.mjs +3 -3
- package/esm2020/lib/reports/reports-menu.component.mjs +3 -3
- package/esm2020/lib/reports/substitution/substitution.component.mjs +3 -3
- package/esm2020/lib/reports/table/table-view.component.mjs +3 -3
- package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
- package/esm2020/lib/routes.desktop.mjs +1 -1
- package/esm2020/lib/scheduler/schedule.component.mjs +4 -4
- package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +3 -3
- package/esm2020/lib/scheduler/scheduler.pane.component.mjs +3 -3
- package/esm2020/lib/shared.module.mjs +14 -12
- package/esm2020/lib/system.module.mjs +4 -4
- package/esm2020/lib/views/cube/chart.component.mjs +4 -4
- package/esm2020/lib/views/cube/cube-base.mjs +10 -12
- package/esm2020/lib/views/cube/explore.component.mjs +4 -4
- package/esm2020/lib/views/cube/matrix.component.mjs +21 -22
- package/esm2020/lib/views/cube/parallel.component.mjs +5 -6
- package/esm2020/lib/views/cube/pivot.component.mjs +5 -5
- package/esm2020/lib/views/cube/sum.component.mjs +5 -5
- package/esm2020/lib/views/cube/view.component.mjs +3 -3
- package/esm2020/lib/views/timeline/timeline.component.exp.mjs +3 -3
- package/esm2020/lib/views/view-item.component.mjs +3 -3
- package/esm2020/lib/views/views.component.mjs +3 -3
- package/esm2020/lib/views/views.mobile.component.mjs +3 -3
- package/esm2020/lib/views/views.pane.component.mjs +3 -3
- package/esm2020/public-api.mjs +4 -3
- package/fesm2015/bizdoc-core.mjs +4189 -3479
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +4081 -3369
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/app.component.d.ts +3 -1
- package/lib/browse/browse.mobile.component.d.ts +1 -0
- package/lib/browse/browse.pane.component.d.ts +1 -0
- package/lib/compose/attachments/attachments.component.d.ts +2 -2
- package/lib/compose/attachments/preview/attachment-preview.component.d.ts +3 -4
- package/lib/compose/attachments/progress-button.directive.d.ts +3 -3
- package/lib/compose/form.component.d.ts +1 -0
- package/lib/compose/trace/trace.component.d.ts +6 -0
- package/lib/core/base.d.ts +3 -1
- package/lib/core/configuration.d.ts +3 -1
- package/lib/core/controls/address.input.d.ts +2 -1
- package/lib/core/controls/combination-picker-body.d.ts +2 -0
- package/lib/core/controls/file.input.d.ts +88 -0
- package/lib/core/controls/select.input.d.ts +7 -5
- package/lib/core/datasource.service.d.ts +7 -4
- package/lib/core/functions.d.ts +7 -0
- package/lib/core/hub.service.d.ts +1 -2
- package/lib/core/info/attachment-info.service.d.ts +1 -2
- package/lib/core/mailbox.service.d.ts +28 -7
- package/lib/core/models.d.ts +10 -7
- package/lib/core/session.service.d.ts +1 -0
- package/lib/core/slots/pane-ref.d.ts +2 -0
- package/lib/core/translations.d.ts +8 -0
- package/lib/cube/accum/accum.component.d.ts +6 -3
- package/lib/cube/chart/chart.component.d.ts +6 -3
- package/lib/cube/cube-info.service.d.ts +9 -3
- package/lib/cube/cube.service.d.ts +11 -5
- package/lib/cube/explore/explore-items.component.d.ts +6 -3
- package/lib/cube/explore/explore.pane.component.d.ts +5 -4
- package/lib/cube/filter/filter.component.d.ts +10 -9
- package/lib/cube/grid/spreadsheet.component.d.ts +0 -1
- package/lib/cube/matrix/matrix.base.d.ts +2 -0
- package/lib/cube/matrix/matrix.pane.component.d.ts +0 -1
- package/lib/cube/matrix/{matrix.component.d.ts → popup.component.d.ts} +0 -0
- package/lib/cube/matrix/table.component.d.ts +9 -4
- package/lib/cube/parallel/parallel.component.d.ts +6 -3
- package/lib/cube/pivot/pivot.component.d.ts +7 -1
- package/lib/cube/sum/sum.component.d.ts +2 -1
- package/lib/cube/view.mobile.component.d.ts +3 -2
- package/lib/dashboard/cube/cube-analysis.base.d.ts +2 -1
- package/lib/dashboard/recents/recents.widget.d.ts +2 -1
- package/lib/reports/cube/usage-args.component.d.ts +0 -1
- package/lib/shared.module.d.ts +176 -175
- package/lib/views/cube/chart.component.d.ts +2 -1
- package/lib/views/cube/cube-base.d.ts +2 -1
- package/lib/views/cube/explore.component.d.ts +2 -1
- package/lib/views/cube/matrix.component.d.ts +4 -5
- package/lib/views/cube/parallel.component.d.ts +1 -2
- package/lib/views/cube/pivot.component.d.ts +2 -1
- package/lib/views/cube/sum.component.d.ts +2 -1
- package/package.json +15 -15
- package/public-api.d.ts +4 -3
- package/assets/dayjs/locale/af.js +0 -1
- package/assets/dayjs/locale/am.js +0 -1
- package/assets/dayjs/locale/ar-dz.js +0 -1
- package/assets/dayjs/locale/ar-iq.js +0 -1
- package/assets/dayjs/locale/ar-kw.js +0 -1
- package/assets/dayjs/locale/ar-ly.js +0 -1
- package/assets/dayjs/locale/ar-ma.js +0 -1
- package/assets/dayjs/locale/ar-sa.js +0 -1
- package/assets/dayjs/locale/ar-tn.js +0 -1
- package/assets/dayjs/locale/ar.js +0 -1
- package/assets/dayjs/locale/az.js +0 -1
- package/assets/dayjs/locale/be.js +0 -1
- package/assets/dayjs/locale/bg.js +0 -1
- package/assets/dayjs/locale/bi.js +0 -1
- package/assets/dayjs/locale/bm.js +0 -1
- package/assets/dayjs/locale/bn.js +0 -1
- package/assets/dayjs/locale/bo.js +0 -1
- package/assets/dayjs/locale/br.js +0 -1
- package/assets/dayjs/locale/bs.js +0 -1
- package/assets/dayjs/locale/ca.js +0 -1
- package/assets/dayjs/locale/cs.js +0 -1
- package/assets/dayjs/locale/cv.js +0 -1
- package/assets/dayjs/locale/cy.js +0 -1
- package/assets/dayjs/locale/da.js +0 -1
- package/assets/dayjs/locale/de-at.js +0 -1
- package/assets/dayjs/locale/de-ch.js +0 -1
- package/assets/dayjs/locale/de.js +0 -1
- package/assets/dayjs/locale/dv.js +0 -1
- package/assets/dayjs/locale/el.js +0 -1
- package/assets/dayjs/locale/en-au.js +0 -1
- package/assets/dayjs/locale/en-ca.js +0 -1
- package/assets/dayjs/locale/en-gb.js +0 -1
- package/assets/dayjs/locale/en-ie.js +0 -1
- package/assets/dayjs/locale/en-il.js +0 -1
- package/assets/dayjs/locale/en-in.js +0 -1
- package/assets/dayjs/locale/en-nz.js +0 -1
- package/assets/dayjs/locale/en-sg.js +0 -1
- package/assets/dayjs/locale/en-tt.js +0 -1
- package/assets/dayjs/locale/en.js +0 -1
- package/assets/dayjs/locale/eo.js +0 -1
- package/assets/dayjs/locale/es-do.js +0 -1
- package/assets/dayjs/locale/es-mx.js +0 -1
- package/assets/dayjs/locale/es-pr.js +0 -1
- package/assets/dayjs/locale/es-us.js +0 -1
- package/assets/dayjs/locale/es.js +0 -1
- package/assets/dayjs/locale/et.js +0 -1
- package/assets/dayjs/locale/eu.js +0 -1
- package/assets/dayjs/locale/fa.js +0 -1
- package/assets/dayjs/locale/fi.js +0 -1
- package/assets/dayjs/locale/fo.js +0 -1
- package/assets/dayjs/locale/fr-ca.js +0 -1
- package/assets/dayjs/locale/fr-ch.js +0 -1
- package/assets/dayjs/locale/fr.js +0 -1
- package/assets/dayjs/locale/fy.js +0 -1
- package/assets/dayjs/locale/ga.js +0 -1
- package/assets/dayjs/locale/gd.js +0 -1
- package/assets/dayjs/locale/gl.js +0 -1
- package/assets/dayjs/locale/gom-latn.js +0 -1
- package/assets/dayjs/locale/gu.js +0 -1
- package/assets/dayjs/locale/he.js +0 -1
- package/assets/dayjs/locale/hi.js +0 -1
- package/assets/dayjs/locale/hr.js +0 -1
- package/assets/dayjs/locale/ht.js +0 -1
- package/assets/dayjs/locale/hu.js +0 -1
- package/assets/dayjs/locale/hy-am.js +0 -1
- package/assets/dayjs/locale/id.js +0 -1
- package/assets/dayjs/locale/index.d.ts +0 -11
- package/assets/dayjs/locale/is.js +0 -1
- package/assets/dayjs/locale/it-ch.js +0 -1
- package/assets/dayjs/locale/it.js +0 -1
- package/assets/dayjs/locale/ja.js +0 -1
- package/assets/dayjs/locale/jv.js +0 -1
- package/assets/dayjs/locale/ka.js +0 -1
- package/assets/dayjs/locale/kk.js +0 -1
- package/assets/dayjs/locale/km.js +0 -1
- package/assets/dayjs/locale/kn.js +0 -1
- package/assets/dayjs/locale/ko.js +0 -1
- package/assets/dayjs/locale/ku.js +0 -1
- package/assets/dayjs/locale/ky.js +0 -1
- package/assets/dayjs/locale/lb.js +0 -1
- package/assets/dayjs/locale/lo.js +0 -1
- package/assets/dayjs/locale/lt.js +0 -1
- package/assets/dayjs/locale/lv.js +0 -1
- package/assets/dayjs/locale/me.js +0 -1
- package/assets/dayjs/locale/mi.js +0 -1
- package/assets/dayjs/locale/mk.js +0 -1
- package/assets/dayjs/locale/ml.js +0 -1
- package/assets/dayjs/locale/mn.js +0 -1
- package/assets/dayjs/locale/mr.js +0 -1
- package/assets/dayjs/locale/ms-my.js +0 -1
- package/assets/dayjs/locale/ms.js +0 -1
- package/assets/dayjs/locale/mt.js +0 -1
- package/assets/dayjs/locale/my.js +0 -1
- package/assets/dayjs/locale/nb.js +0 -1
- package/assets/dayjs/locale/ne.js +0 -1
- package/assets/dayjs/locale/nl-be.js +0 -1
- package/assets/dayjs/locale/nl.js +0 -1
- package/assets/dayjs/locale/nn.js +0 -1
- package/assets/dayjs/locale/oc-lnc.js +0 -1
- package/assets/dayjs/locale/pa-in.js +0 -1
- package/assets/dayjs/locale/pl.js +0 -1
- package/assets/dayjs/locale/pt-br.js +0 -1
- package/assets/dayjs/locale/pt.js +0 -1
- package/assets/dayjs/locale/ro.js +0 -1
- package/assets/dayjs/locale/ru.js +0 -1
- package/assets/dayjs/locale/rw.js +0 -1
- package/assets/dayjs/locale/sd.js +0 -1
- package/assets/dayjs/locale/se.js +0 -1
- package/assets/dayjs/locale/si.js +0 -1
- package/assets/dayjs/locale/sk.js +0 -1
- package/assets/dayjs/locale/sl.js +0 -1
- package/assets/dayjs/locale/sq.js +0 -1
- package/assets/dayjs/locale/sr-cyrl.js +0 -1
- package/assets/dayjs/locale/sr.js +0 -1
- package/assets/dayjs/locale/ss.js +0 -1
- package/assets/dayjs/locale/sv-fi.js +0 -1
- package/assets/dayjs/locale/sv.js +0 -1
- package/assets/dayjs/locale/sw.js +0 -1
- package/assets/dayjs/locale/ta.js +0 -1
- package/assets/dayjs/locale/te.js +0 -1
- package/assets/dayjs/locale/tet.js +0 -1
- package/assets/dayjs/locale/tg.js +0 -1
- package/assets/dayjs/locale/th.js +0 -1
- package/assets/dayjs/locale/tk.js +0 -1
- package/assets/dayjs/locale/tl-ph.js +0 -1
- package/assets/dayjs/locale/tlh.js +0 -1
- package/assets/dayjs/locale/tr.js +0 -1
- package/assets/dayjs/locale/types.d.ts +0 -33
- package/assets/dayjs/locale/tzl.js +0 -1
- package/assets/dayjs/locale/tzm-latn.js +0 -1
- package/assets/dayjs/locale/tzm.js +0 -1
- package/assets/dayjs/locale/ug-cn.js +0 -1
- package/assets/dayjs/locale/uk.js +0 -1
- package/assets/dayjs/locale/ur.js +0 -1
- package/assets/dayjs/locale/uz-latn.js +0 -1
- package/assets/dayjs/locale/uz.js +0 -1
- package/assets/dayjs/locale/vi.js +0 -1
- package/assets/dayjs/locale/x-pseudo.js +0 -1
- package/assets/dayjs/locale/yo.js +0 -1
- package/assets/dayjs/locale/zh-cn.js +0 -1
- package/assets/dayjs/locale/zh-hk.js +0 -1
- package/assets/dayjs/locale/zh-tw.js +0 -1
- package/assets/dayjs/locale/zh.js +0 -1
- package/esm2020/lib/cube/matrix/matrix.component.mjs +0 -66
@@ -0,0 +1,390 @@
|
|
1
|
+
import { Component, HostBinding, HostListener, Inject, Input, Optional, Self, ViewChild } from '@angular/core';
|
2
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
3
|
+
import { forkJoin, of } from 'rxjs';
|
4
|
+
import { Subject, tap } from 'rxjs';
|
5
|
+
import { isArray } from '../functions';
|
6
|
+
import { AttachmentInfo } from '../info/attachment-info.service';
|
7
|
+
import { DOCUMENT_MODEL } from '../mailbox.service';
|
8
|
+
import { AttachmentMode } from '../models';
|
9
|
+
import { catchError } from 'rxjs';
|
10
|
+
import * as i0 from "@angular/core";
|
11
|
+
import * as i1 from "../mailbox.service";
|
12
|
+
import * as i2 from "@angular/platform-browser";
|
13
|
+
import * as i3 from "../info/attachment-info.service";
|
14
|
+
import * as i4 from "../translate.service";
|
15
|
+
import * as i5 from "../session.service";
|
16
|
+
import * as i6 from "../prompt.service";
|
17
|
+
import * as i7 from "@angular/forms";
|
18
|
+
import * as i8 from "@angular/material/button";
|
19
|
+
import * as i9 from "@angular/material/icon";
|
20
|
+
import * as i10 from "@angular/material/menu";
|
21
|
+
import * as i11 from "@angular/material/divider";
|
22
|
+
import * as i12 from "@angular/common";
|
23
|
+
import * as i13 from "../../compose/attachments/progress-button.directive";
|
24
|
+
import * as i14 from "@angular/flex-layout/flex";
|
25
|
+
import * as i15 from "../popup/tooltip.directive";
|
26
|
+
import * as i16 from "../pipes/translate.pipe";
|
27
|
+
import * as i17 from "../pipes/calendar.pipe";
|
28
|
+
const EXTENDED_ICONS = { 'xlsx': 'excel', 'docx': 'word', 'pptx': 'powerpoint', 'pdf': 'pdf' };
|
29
|
+
export class FileInput {
|
30
|
+
constructor(_dropableElement, _mailbox, _sanitizer, _attachmentInfo, _translate, _session, _sb, ngControl, _model) {
|
31
|
+
this._dropableElement = _dropableElement;
|
32
|
+
this._mailbox = _mailbox;
|
33
|
+
this._sanitizer = _sanitizer;
|
34
|
+
this._attachmentInfo = _attachmentInfo;
|
35
|
+
this._translate = _translate;
|
36
|
+
this._session = _session;
|
37
|
+
this._sb = _sb;
|
38
|
+
this.ngControl = ngControl;
|
39
|
+
this._model = _model;
|
40
|
+
this.id = `type-file-upload-${FileInput.nextId++}`;
|
41
|
+
this.stateChanges = new Subject();
|
42
|
+
this._multiple = false;
|
43
|
+
this.accept = null;
|
44
|
+
this.icon = 'publish';
|
45
|
+
this._dragDrop = new Subject();
|
46
|
+
this._pending = new Subject();
|
47
|
+
this.errorState = false;
|
48
|
+
this.controlType = 'bizdoc-file-upload';
|
49
|
+
this.describedBy = '';
|
50
|
+
if (this.ngControl != null) {
|
51
|
+
this.ngControl.valueAccessor = this;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
get multiple() {
|
55
|
+
return this._multiple;
|
56
|
+
}
|
57
|
+
set multiple(value) {
|
58
|
+
this._multiple = coerceBooleanProperty(value);
|
59
|
+
}
|
60
|
+
hasVersion(item) {
|
61
|
+
return this._model.attachments.find(a => a.fileName === item.fileName && a.id !== item.id) != null;
|
62
|
+
}
|
63
|
+
getVersions(item) {
|
64
|
+
return this._model.attachments.filter(a => a.fileName === item.fileName && a.id !== item.id);
|
65
|
+
}
|
66
|
+
download(item) {
|
67
|
+
location.href = this._mailbox.formatDownloadUrl(this._model.documentId, item.id);
|
68
|
+
item.viewed = new Date();
|
69
|
+
}
|
70
|
+
previewOrDownload(item) {
|
71
|
+
if (this.canPreview(item))
|
72
|
+
this.openPreview(item);
|
73
|
+
else
|
74
|
+
this.download(item);
|
75
|
+
}
|
76
|
+
canPreview(item) {
|
77
|
+
return AttachmentInfo.exists(item.contentType);
|
78
|
+
}
|
79
|
+
canEdit(item) {
|
80
|
+
return !this._model.completed && item.userId === this._session.profile.userId && !item.deleted;
|
81
|
+
}
|
82
|
+
openPreview(item) {
|
83
|
+
this._attachmentInfo.preview(this._model, item.id);
|
84
|
+
}
|
85
|
+
cancel(item) {
|
86
|
+
this._model.attachments.remove(item);
|
87
|
+
}
|
88
|
+
checkIn(item) {
|
89
|
+
const accept = item.isImage ? 'image/*' :
|
90
|
+
'.' + AttachmentInfo.fileExt(item.fileName) + ',' + item.contentType;
|
91
|
+
this._prompt({ multiple: false, accept }).then(files => {
|
92
|
+
//if (!files[0].name.startsWith(item.fileName)) {
|
93
|
+
// this._sb.error(this._translate.get('CheckInMatchErr', item.fileName));
|
94
|
+
// return;
|
95
|
+
//}
|
96
|
+
this._mailbox.checkIn(this._model.id, this._model.version, item.id, files[0]).subscribe(a => {
|
97
|
+
//if (a instanceof UploadEvent) {
|
98
|
+
// Object.assign(item, {
|
99
|
+
// progress: a.loaded / a.total
|
100
|
+
// });
|
101
|
+
// return;
|
102
|
+
//}
|
103
|
+
Object.assign(item, a, { progress: null, checkedOut: null });
|
104
|
+
this._sb.toast(this._translate.get('CheckedIn', item.fileName));
|
105
|
+
}, e => this._handleError(e));
|
106
|
+
});
|
107
|
+
}
|
108
|
+
checkOut(item) {
|
109
|
+
this._mailbox.checkOut(this._model.id, this._model.version, item.id).
|
110
|
+
subscribe(() => {
|
111
|
+
item.checkedOut = new Date();
|
112
|
+
this.download(item);
|
113
|
+
});
|
114
|
+
}
|
115
|
+
discard(item) {
|
116
|
+
const task = () => this._mailbox.removeattachment(this._model.id, item.id).subscribe(() => {
|
117
|
+
item.deleted = true;
|
118
|
+
if (this.multiple) {
|
119
|
+
this.items.remove(item);
|
120
|
+
if (this.items.length)
|
121
|
+
this._value = this.items.map(i => i.id);
|
122
|
+
else
|
123
|
+
this.items = null;
|
124
|
+
}
|
125
|
+
else
|
126
|
+
this._value = this.items = null;
|
127
|
+
this._onChange(this._value);
|
128
|
+
this._model.attachments.remove(item);
|
129
|
+
}, e => this._handleError(e));
|
130
|
+
if (this._model.draft)
|
131
|
+
task();
|
132
|
+
else
|
133
|
+
this._sb.ask('DeleteFileAsk', 'DeleteFile', { color: 'warn' }).subscribe(ok => ok && task());
|
134
|
+
}
|
135
|
+
_handleError(response) {
|
136
|
+
switch (response.status) {
|
137
|
+
case 401:
|
138
|
+
break;
|
139
|
+
case 409: // version change
|
140
|
+
{
|
141
|
+
this._sb.error('VersionErr', this._model.number);
|
142
|
+
break;
|
143
|
+
}
|
144
|
+
case 406: // validation exception
|
145
|
+
this._sb.errorString(response.error);
|
146
|
+
break;
|
147
|
+
default:
|
148
|
+
this._sb.error();
|
149
|
+
}
|
150
|
+
}
|
151
|
+
ngOnInit() {
|
152
|
+
const container = this._dropableElement.nativeElement;
|
153
|
+
this._dragDrop.subscribe(ok => {
|
154
|
+
if (ok)
|
155
|
+
container.classList.add('drag');
|
156
|
+
else
|
157
|
+
container.classList.remove('drag');
|
158
|
+
});
|
159
|
+
if (!this._placeholder)
|
160
|
+
this._placeholder = this._translate.get('DragFile');
|
161
|
+
}
|
162
|
+
handleDocumentDrop(event) {
|
163
|
+
event.stopPropagation();
|
164
|
+
event.preventDefault();
|
165
|
+
}
|
166
|
+
handleDrop(event) {
|
167
|
+
event.preventDefault();
|
168
|
+
this._dragDrop.next(false);
|
169
|
+
this._onTouched && this._onTouched();
|
170
|
+
const { items } = event.dataTransfer;
|
171
|
+
const files = [];
|
172
|
+
for (let i = 0; i < items.length; i++) {
|
173
|
+
const file = items[i].getAsFile();
|
174
|
+
files.push(file);
|
175
|
+
}
|
176
|
+
const checkedOut = this.items.filter(i => i.checkedOut);
|
177
|
+
if (this.items && checkedOut.length) {
|
178
|
+
const observables = [];
|
179
|
+
for (let item of checkedOut) {
|
180
|
+
let file = files.find(f => f.name.startsWith(item.fileName));
|
181
|
+
if (file) {
|
182
|
+
let observable = this._mailbox.checkIn(this._model.id, this._model.version, item.id, file).
|
183
|
+
pipe(tap(e => {
|
184
|
+
//Object.assign(item, a, { progress: null });
|
185
|
+
}), catchError(e => {
|
186
|
+
this._handleError(e);
|
187
|
+
return of(false);
|
188
|
+
}));
|
189
|
+
observables.push(observable);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
forkJoin(observables).subscribe(e => {
|
193
|
+
const attachments = e.filter(e => e);
|
194
|
+
attachments.length && this._sb.toast(attachments.length > 1 ? this._translate.get('CheckedInN', attachments.length) :
|
195
|
+
this._translate.get('CheckedIn', attachments[0].fileName));
|
196
|
+
});
|
197
|
+
}
|
198
|
+
else
|
199
|
+
this._upload(files);
|
200
|
+
}
|
201
|
+
handleEnter(event) {
|
202
|
+
event.preventDefault();
|
203
|
+
!this.disabled && this._dragDrop.next(true);
|
204
|
+
}
|
205
|
+
handleLeave(event) {
|
206
|
+
event.preventDefault();
|
207
|
+
!this.disabled && this._dragDrop.next(false);
|
208
|
+
}
|
209
|
+
handleOver(event) {
|
210
|
+
event.preventDefault();
|
211
|
+
!this.disabled && this._dragDrop.next(true);
|
212
|
+
}
|
213
|
+
writeValue(val) {
|
214
|
+
if (!val) {
|
215
|
+
this.items = null;
|
216
|
+
return;
|
217
|
+
}
|
218
|
+
else if (isArray(val))
|
219
|
+
this.items =
|
220
|
+
val.map(i => this._createItem(i));
|
221
|
+
else
|
222
|
+
this.items[this._createItem(val)];
|
223
|
+
}
|
224
|
+
registerOnChange(fn) {
|
225
|
+
this._onChange = fn;
|
226
|
+
}
|
227
|
+
registerOnTouched(fn) {
|
228
|
+
this._onTouched = fn;
|
229
|
+
}
|
230
|
+
setDisabledState(isDisabled) {
|
231
|
+
this.disabled = isDisabled;
|
232
|
+
}
|
233
|
+
get value() {
|
234
|
+
return this._value;
|
235
|
+
}
|
236
|
+
set value(val) {
|
237
|
+
this.writeValue(val);
|
238
|
+
this.stateChanges.next();
|
239
|
+
}
|
240
|
+
get placeholder() {
|
241
|
+
return this._placeholder;
|
242
|
+
}
|
243
|
+
set placeholder(plh) {
|
244
|
+
this._placeholder = plh;
|
245
|
+
this.stateChanges.next();
|
246
|
+
}
|
247
|
+
get empty() { return !this.items; }
|
248
|
+
get required() {
|
249
|
+
return this._required;
|
250
|
+
}
|
251
|
+
set required(req) {
|
252
|
+
this._required = coerceBooleanProperty(req);
|
253
|
+
this.stateChanges.next();
|
254
|
+
}
|
255
|
+
get disabled() { return this._disabled; }
|
256
|
+
set disabled(value) {
|
257
|
+
this._disabled = coerceBooleanProperty(value);
|
258
|
+
this.stateChanges.next();
|
259
|
+
}
|
260
|
+
setDescribedByIds(ids) {
|
261
|
+
this.describedBy = ids.join(' ');
|
262
|
+
}
|
263
|
+
onContainerClick() {
|
264
|
+
}
|
265
|
+
prompt() {
|
266
|
+
this._prompt().then(this._upload.bind(this));
|
267
|
+
}
|
268
|
+
_prompt(options) {
|
269
|
+
if (options) {
|
270
|
+
if (options.accept)
|
271
|
+
this.accept = options.accept;
|
272
|
+
if (options.multiple !== undefined)
|
273
|
+
this.multiple = options.multiple;
|
274
|
+
}
|
275
|
+
return new Promise((resolve) => {
|
276
|
+
this._input.nativeElement.click();
|
277
|
+
this._pending.subscribe(resolve);
|
278
|
+
});
|
279
|
+
}
|
280
|
+
_change(evt) {
|
281
|
+
this._onTouched && this._onTouched();
|
282
|
+
const { files } = evt.srcElement;
|
283
|
+
const arr = [];
|
284
|
+
for (var i = 0; i < files.length; i++) {
|
285
|
+
let file = files.item(i);
|
286
|
+
arr.push(file);
|
287
|
+
}
|
288
|
+
this._pending.next(arr);
|
289
|
+
}
|
290
|
+
_createItem(id) {
|
291
|
+
const attachment = this._model.attachments.find(a => a.id === id), log = this._model.log.filter(l => l.fileId == attachment.id && l.userId == this._session.userId), fileExt = AttachmentInfo.fileExt(attachment.fileName), icon = EXTENDED_ICONS[fileExt];
|
292
|
+
return {
|
293
|
+
...attachment,
|
294
|
+
hasPreview: AttachmentInfo.exists(attachment.contentType),
|
295
|
+
isImage: AttachmentInfo.isImage(attachment.contentType),
|
296
|
+
fileExt,
|
297
|
+
icon,
|
298
|
+
url: this._sanitizer.bypassSecurityTrustUrl(this._mailbox.formatDownloadUrl(this._model.documentId, attachment.id)),
|
299
|
+
checkedOut: (attachment.mode & AttachmentMode.CheckedOut) == AttachmentMode.CheckedOut &&
|
300
|
+
attachment.holdingId === this._session.userId ?
|
301
|
+
log.reverse().find(l => l.type === 'CheckOut').time : null
|
302
|
+
};
|
303
|
+
}
|
304
|
+
_upload(files) {
|
305
|
+
const observables = [];
|
306
|
+
for (let file of files) {
|
307
|
+
let observable = this._mailbox.upload(this._model.id, this._model.formId, this._model.version, file, { isPrivate: true }).
|
308
|
+
pipe(tap(e => {
|
309
|
+
// if (e.progress) {
|
310
|
+
// }
|
311
|
+
}), catchError(e => {
|
312
|
+
this._handleError(e);
|
313
|
+
return of(false);
|
314
|
+
}));
|
315
|
+
observables.push(observable);
|
316
|
+
}
|
317
|
+
this._input.nativeElement.value = null;
|
318
|
+
forkJoin(observables).subscribe(e => {
|
319
|
+
const ids = [];
|
320
|
+
if (!this.items)
|
321
|
+
this.items = [];
|
322
|
+
e.forEach(a => {
|
323
|
+
if (!a)
|
324
|
+
return;
|
325
|
+
ids.push(a.id);
|
326
|
+
this._model.attachments.push(a);
|
327
|
+
this.items.push(this._createItem(a.id));
|
328
|
+
});
|
329
|
+
this._value = this.multiple ? ids : ids[0];
|
330
|
+
this._onChange(this._value);
|
331
|
+
});
|
332
|
+
}
|
333
|
+
ngOnDestroy() {
|
334
|
+
this._dragDrop.complete();
|
335
|
+
this._pending.complete();
|
336
|
+
this.stateChanges.complete();
|
337
|
+
}
|
338
|
+
}
|
339
|
+
FileInput.nextId = 0;
|
340
|
+
FileInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FileInput, deps: [{ token: i0.ElementRef }, { token: i1.MailboxService }, { token: i2.DomSanitizer }, { token: i3.AttachmentInfo }, { token: i4.TranslateService }, { token: i5.SessionService }, { token: i6.PromptService }, { token: i7.NgControl, optional: true, self: true }, { token: DOCUMENT_MODEL }], target: i0.ɵɵFactoryTarget.Component });
|
341
|
+
FileInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: FileInput, selector: "bizdoc-file-upload", inputs: { multiple: "multiple", accept: "accept", icon: "icon", value: "value", placeholder: "placeholder", required: "required", disabled: "disabled" }, host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)" }, properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy" }, classAttribute: "file-dropable" }, viewQueries: [{ propertyName: "_input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<button mat-button *ngIf=\"!items; else preview\" (click)=\"prompt()\">\r\n <mat-icon class=\"filled\">{{icon}}</mat-icon>\r\n <span class=\"mat-h3\">{{placeholder}}</span>\r\n</button>\r\n<input type=\"file\" #input\r\n [accept]=accept [multiple]=multiple (change)='_change($event)' style=\"display: none\" />\r\n<ng-template #preview>\r\n <div *ngFor='let a of items' class=\"attachment-item\"\r\n [class.deleted]=\"a.deleted\" [class.failed]=\"a.failed\"\r\n [progressIndicator]=\"a.progress\">\r\n <img *ngIf=\"a.isImage\" [src]=\"a.url\" (click)=\"openPreview(a)\" height=\"80\" class=\"file-preview\">\r\n <div *ngIf=\"a.hasPreview && !a.isImage\" fxLayout=\"column\" class=\"file-preview\">\r\n <button mat-icon-button (click)=\"openPreview(a)\" [bizdocTooltip]=\"'Preview'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">find_in_page</mat-icon></button>\r\n <span>.{{a.fileExt}}</span>\r\n </div>\r\n <mat-icon *ngIf=\"a.icon\" [svgIcon]=\"a.icon\"></mat-icon>\r\n <div class=\"file-overlay row\">\r\n <span class=\"filename\">{{a.fileName}}</span>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button class=\"options\" [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'Options' | translate\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n <mat-menu #menu>\r\n <ng-container *ngIf=\"!a.failed\">\r\n <ng-container *ngIf=\"canEdit(a) && !a.failed\">\r\n <ng-container *ngIf=\"!a.checkedOut\">\r\n <button mat-menu-item (click)=\"checkOut(a)\">{{\"CheckOut\" | translate}}</button>\r\n <button mat-menu-item (click)=\"prompt()\">{{\"Add\" | translate}}</button>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"checkIn(a)\" *ngIf=\"a.checkedOut\">{{\"CheckIn\" | translate}}</button>\r\n </ng-container>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"download(a)\">{{\"Download\" | translate}}</button>\r\n <button mat-menu-item *ngIf=\"canPreview(a)\" (click)=\"openPreview(a)\"><mat-icon>landscape</mat-icon> {{\"Preview\" | translate}}</button>\r\n <ng-container *ngIf=\"hasVersion(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item *ngFor=\"let v of getVersions(a)\" (click)=\"previewOrDownload(v)\">{{v.time | amCalendar}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"canEdit(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"discard(a)\">{{\"Discard\" | translate}}</button>\r\n </ng-container>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"cancel(a)\" *ngIf=\"a.failed\">{{\"Cancel\" | translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:flex}.attachment-item{height:80px;position:relative}.attachment-item img{cursor:zoom-in}.attachment-item .file-preview{position:absolute}.attachment-item .file-overlay{position:relative;height:inherit}.attachment-item .file-overlay .filename{font-size:x-small;background:rgba(255,255,255,.4);align-self:flex-end}.attachment-item .file-overlay:hover .filename{background:white;opacity:.5}\n"], components: [{ type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.ProgressDirective, selector: "[progressIndicator]", inputs: ["progressIndicator"] }, { type: i14.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i15.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }], pipes: { "translate": i16.TranslatePipe, "amCalendar": i17.CalendarPipe } });
|
342
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: FileInput, decorators: [{
|
343
|
+
type: Component,
|
344
|
+
args: [{ host: { class: 'file-dropable' }, selector: 'bizdoc-file-upload', template: "<button mat-button *ngIf=\"!items; else preview\" (click)=\"prompt()\">\r\n <mat-icon class=\"filled\">{{icon}}</mat-icon>\r\n <span class=\"mat-h3\">{{placeholder}}</span>\r\n</button>\r\n<input type=\"file\" #input\r\n [accept]=accept [multiple]=multiple (change)='_change($event)' style=\"display: none\" />\r\n<ng-template #preview>\r\n <div *ngFor='let a of items' class=\"attachment-item\"\r\n [class.deleted]=\"a.deleted\" [class.failed]=\"a.failed\"\r\n [progressIndicator]=\"a.progress\">\r\n <img *ngIf=\"a.isImage\" [src]=\"a.url\" (click)=\"openPreview(a)\" height=\"80\" class=\"file-preview\">\r\n <div *ngIf=\"a.hasPreview && !a.isImage\" fxLayout=\"column\" class=\"file-preview\">\r\n <button mat-icon-button (click)=\"openPreview(a)\" [bizdocTooltip]=\"'Preview'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">find_in_page</mat-icon></button>\r\n <span>.{{a.fileExt}}</span>\r\n </div>\r\n <mat-icon *ngIf=\"a.icon\" [svgIcon]=\"a.icon\"></mat-icon>\r\n <div class=\"file-overlay row\">\r\n <span class=\"filename\">{{a.fileName}}</span>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button class=\"options\" [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'Options' | translate\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n <mat-menu #menu>\r\n <ng-container *ngIf=\"!a.failed\">\r\n <ng-container *ngIf=\"canEdit(a) && !a.failed\">\r\n <ng-container *ngIf=\"!a.checkedOut\">\r\n <button mat-menu-item (click)=\"checkOut(a)\">{{\"CheckOut\" | translate}}</button>\r\n <button mat-menu-item (click)=\"prompt()\">{{\"Add\" | translate}}</button>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"checkIn(a)\" *ngIf=\"a.checkedOut\">{{\"CheckIn\" | translate}}</button>\r\n </ng-container>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"download(a)\">{{\"Download\" | translate}}</button>\r\n <button mat-menu-item *ngIf=\"canPreview(a)\" (click)=\"openPreview(a)\"><mat-icon>landscape</mat-icon> {{\"Preview\" | translate}}</button>\r\n <ng-container *ngIf=\"hasVersion(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item *ngFor=\"let v of getVersions(a)\" (click)=\"previewOrDownload(v)\">{{v.time | amCalendar}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"canEdit(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"discard(a)\">{{\"Discard\" | translate}}</button>\r\n </ng-container>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"cancel(a)\" *ngIf=\"a.failed\">{{\"Cancel\" | translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:flex}.attachment-item{height:80px;position:relative}.attachment-item img{cursor:zoom-in}.attachment-item .file-preview{position:absolute}.attachment-item .file-overlay{position:relative;height:inherit}.attachment-item .file-overlay .filename{font-size:x-small;background:rgba(255,255,255,.4);align-self:flex-end}.attachment-item .file-overlay:hover .filename{background:white;opacity:.5}\n"] }]
|
345
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.MailboxService }, { type: i2.DomSanitizer }, { type: i3.AttachmentInfo }, { type: i4.TranslateService }, { type: i5.SessionService }, { type: i6.PromptService }, { type: i7.NgControl, decorators: [{
|
346
|
+
type: Optional
|
347
|
+
}, {
|
348
|
+
type: Self
|
349
|
+
}] }, { type: undefined, decorators: [{
|
350
|
+
type: Inject,
|
351
|
+
args: [DOCUMENT_MODEL]
|
352
|
+
}] }]; }, propDecorators: { id: [{
|
353
|
+
type: HostBinding
|
354
|
+
}], multiple: [{
|
355
|
+
type: Input
|
356
|
+
}], accept: [{
|
357
|
+
type: Input
|
358
|
+
}], icon: [{
|
359
|
+
type: Input
|
360
|
+
}], _input: [{
|
361
|
+
type: ViewChild,
|
362
|
+
args: ['input']
|
363
|
+
}], handleDocumentDrop: [{
|
364
|
+
type: HostListener,
|
365
|
+
args: ['document:drop', ['$event']]
|
366
|
+
}], handleDrop: [{
|
367
|
+
type: HostListener,
|
368
|
+
args: ['drop', ['$event']]
|
369
|
+
}], handleEnter: [{
|
370
|
+
type: HostListener,
|
371
|
+
args: ['dragenter', ['$event']]
|
372
|
+
}], handleLeave: [{
|
373
|
+
type: HostListener,
|
374
|
+
args: ['dragleave', ['$event']]
|
375
|
+
}], handleOver: [{
|
376
|
+
type: HostListener,
|
377
|
+
args: ['dragover', ['$event']]
|
378
|
+
}], value: [{
|
379
|
+
type: Input
|
380
|
+
}], placeholder: [{
|
381
|
+
type: Input
|
382
|
+
}], required: [{
|
383
|
+
type: Input
|
384
|
+
}], disabled: [{
|
385
|
+
type: Input
|
386
|
+
}], describedBy: [{
|
387
|
+
type: HostBinding,
|
388
|
+
args: ['attr.aria-describedby']
|
389
|
+
}] } });
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9jb250cm9scy9maWxlLmlucHV0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL2NvbnRyb2xzL2ZpbGUuaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUksT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFFBQVEsRUFBTyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFtQixjQUFjLEVBQStCLE1BQU0sb0JBQW9CLENBQUM7QUFDbEcsT0FBTyxFQUFjLGNBQWMsRUFBa0IsTUFBTSxXQUFXLENBQUM7QUFLdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsQyxNQUFNLGNBQWMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQVEvRixNQUFNLE9BQ0UsU0FBUztJQXdCZixZQUNVLGdCQUE0QixFQUM1QixRQUF3QixFQUN4QixVQUF3QixFQUN4Qixl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O0lBQy9CLENBQUM7O0FBNVVjLGdCQUFNLEdBQUcsQ0FBRSxDQUFBO3NHQURwQixTQUFTLG9SQWlDTCxjQUFjOzBGQWpDbEIsU0FBUyxvbkJDMUJqQixpeEZBZ0RBOzJGRHRCUSxTQUFTO2tCQVBoQixTQUFTOzJCQUdGLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxZQUN0QixvQkFBb0I7OzBCQW1DM0IsUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLE1BQU07MkJBQUMsY0FBYzs0Q0EvQkEsRUFBRTtzQkFBekIsV0FBVztnQkFPRCxRQUFRO3NCQURsQixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2MsTUFBTTtzQkFBekIsU0FBUzt1QkFBQyxPQUFPO2dCQWlJbEIsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNekMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1Q2hDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXJDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXJDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd0J2QixLQUFLO3NCQUFqQixLQUFLO2dCQU9PLFdBQVc7c0JBQXZCLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFRZ0MsV0FBVztzQkFBaEQsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgU2VsZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nQ29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEluZm8gfSBmcm9tICcuLi9pbmZvL2F0dGFjaG1lbnQtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEV4dHJhLCBET0NVTUVOVF9NT0RFTCwgTWFpbGJveFNlcnZpY2UsIFVwbG9hZEV2ZW50IH0gZnJvbSAnLi4vbWFpbGJveC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudCwgQXR0YWNobWVudE1vZGUsIFJlY2lwaWVudE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgRVhURU5ERURfSUNPTlMgPSB7ICd4bHN4JzogJ2V4Y2VsJywgJ2RvY3gnOiAnd29yZCcsICdwcHR4JzogJ3Bvd2VycG9pbnQnLCAncGRmJzogJ3BkZicgfTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnZmlsZS5pbnB1dC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnZmlsZS5pbnB1dC5zY3NzJ10sXHJcbiAgaG9zdDogeyBjbGFzczogJ2ZpbGUtZHJvcGFibGUnIH0sXHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZmlsZS11cGxvYWQnXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIEZpbGVJbnB1dCBpbXBsZW1lbnRzIE1hdEZvcm1GaWVsZENvbnRyb2w8bnVtYmVyIHwgbnVtYmVyW10+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgQEhvc3RCaW5kaW5nKCkgcmVhZG9ubHkgaWQgPSBgdHlwZS1maWxlLXVwbG9hZC0ke0ZpbGVJbnB1dC5uZXh0SWQrK31gO1xyXG4gIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IG11bHRpcGxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgbXVsdGlwbGUodmFsdWUpIHtcclxuICAgIHRoaXMuX211bHRpcGxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgQElucHV0KCkgYWNjZXB0ID0gbnVsbDtcclxuICBASW5wdXQoKSBpY29uID0gJ3B1Ymxpc2gnO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgX2lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIGl0ZW1zOiBBdHRhY2htZW50RXh0cmFbXTtcclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3JlcXVpcmVkOiBhbnk7XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfb25DaGFuZ2U6IGFueTtcclxuICBwcml2YXRlIF9vblRvdWNoZWQ6IGFueTtcclxuICBwcml2YXRlIF92YWx1ZTogbnVtYmVyIHwgbnVtYmVyW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZHJhZ0Ryb3AgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmcgPSBuZXcgU3ViamVjdDxGaWxlW10+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9kcm9wYWJsZUVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9tYWlsYm94OiBNYWlsYm94U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBfYXR0YWNobWVudEluZm86IEF0dGFjaG1lbnRJbmZvLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgQEluamVjdChET0NVTUVOVF9NT0RFTCkgcHJpdmF0ZSBfbW9kZWw6IFJlY2lwaWVudE1vZGVsPGFueT4sXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcbiAgaGFzVmVyc2lvbihpdGVtOiBBdHRhY2htZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmluZChhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCkgIT0gbnVsbDtcclxuICB9XHJcbiAgZ2V0VmVyc2lvbnMoaXRlbTogQXR0YWNobWVudCk6IEF0dGFjaG1lbnRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5maWxlTmFtZSA9PT0gaXRlbS5maWxlTmFtZSAmJiBhLmlkICE9PSBpdGVtLmlkKTtcclxuICB9XHJcbiAgZG93bmxvYWQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5fbWFpbGJveC5mb3JtYXREb3dubG9hZFVybCh0aGlzLl9tb2RlbC5kb2N1bWVudElkLCBpdGVtLmlkKTtcclxuICAgIChpdGVtIGFzIEF0dGFjaG1lbnRFeHRyYSkudmlld2VkID0gbmV3IERhdGUoKTtcclxuICB9XHJcbiAgcHJldmlld09yRG93bmxvYWQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICBpZiAodGhpcy5jYW5QcmV2aWV3KGl0ZW0pKVxyXG4gICAgICB0aGlzLm9wZW5QcmV2aWV3KGl0ZW0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gIH1cclxuICBjYW5QcmV2aWV3KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEF0dGFjaG1lbnRJbmZvLmV4aXN0cyhpdGVtLmNvbnRlbnRUeXBlKTtcclxuICB9XHJcbiAgY2FuRWRpdChpdGVtOiBBdHRhY2htZW50RXh0cmEpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fbW9kZWwuY29tcGxldGVkICYmIGl0ZW0udXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkICYmICFpdGVtLmRlbGV0ZWQ7XHJcbiAgfVxyXG4gIG9wZW5QcmV2aWV3KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fYXR0YWNobWVudEluZm8ucHJldmlldyh0aGlzLl9tb2RlbCwgaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGNhbmNlbChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLnJlbW92ZShpdGVtKTtcclxuICB9XHJcbiAgY2hlY2tJbihpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIGNvbnN0IGFjY2VwdCA9IGl0ZW0uaXNJbWFnZSA/ICdpbWFnZS8qJyA6XHJcbiAgICAgICcuJyArIEF0dGFjaG1lbnRJbmZvLmZpbGVFeHQoaXRlbS5maWxlTmFtZSkgKyAnLCcgKyBpdGVtLmNvbnRlbnRUeXBlO1xyXG4gICAgdGhpcy5fcHJvbXB0KHsgbXVsdGlwbGU6IGZhbHNlLCBhY2NlcHQgfSkudGhlbihmaWxlcyA9PiB7XHJcbiAgICAgIC8vaWYgKCFmaWxlc1swXS5uYW1lLnN0YXJ0c1dpdGgoaXRlbS5maWxlTmFtZSkpIHtcclxuICAgICAgLy8gIHRoaXMuX3NiLmVycm9yKHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrSW5NYXRjaEVycicsIGl0ZW0uZmlsZU5hbWUpKTtcclxuICAgICAgLy8gIHJldHVybjtcclxuICAgICAgLy99XHJcbiAgICAgIHRoaXMuX21haWxib3guY2hlY2tJbih0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwudmVyc2lvbiwgaXRlbS5pZCwgZmlsZXNbMF0pLnN1YnNjcmliZShhID0+IHtcclxuICAgICAgICAvL2lmIChhIGluc3RhbmNlb2YgVXBsb2FkRXZlbnQpIHtcclxuICAgICAgICAvLyAgT2JqZWN0LmFzc2lnbihpdGVtLCB7XHJcbiAgICAgICAgLy8gICAgcHJvZ3Jlc3M6IGEubG9hZGVkIC8gYS50b3RhbFxyXG4gICAgICAgIC8vICB9KTtcclxuICAgICAgICAvLyAgcmV0dXJuO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgYSwgeyBwcm9ncmVzczogbnVsbCwgY2hlY2tlZE91dDogbnVsbCB9KTtcclxuICAgICAgICB0aGlzLl9zYi50b2FzdCh0aGlzLl90cmFuc2xhdGUuZ2V0KCdDaGVja2VkSW4nLCBpdGVtLmZpbGVOYW1lKSk7XHJcbiAgICAgIH0sIGUgPT4gdGhpcy5faGFuZGxlRXJyb3IoZSkpO1xyXG4gICAgfVxyXG4gICAgKVxyXG4gIH1cclxuICBjaGVja091dChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIHRoaXMuX21haWxib3guY2hlY2tPdXQodGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLnZlcnNpb24sIGl0ZW0uaWQpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZE91dCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIGRpc2NhcmQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICBjb25zdCB0YXNrID0gKCkgPT5cclxuICAgICAgdGhpcy5fbWFpbGJveC5yZW1vdmVhdHRhY2htZW50KHRoaXMuX21vZGVsLmlkLCBpdGVtLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uZGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMucmVtb3ZlKGl0ZW0pO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuaXRlbXMubWFwKGkgPT4gaS5pZCk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuaXRlbXMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuaXRlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgIH0sIGUgPT5cclxuICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlKSk7XHJcbiAgICBpZiAodGhpcy5fbW9kZWwuZHJhZnQpXHJcbiAgICAgIHRhc2soKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fc2IuYXNrKCdEZWxldGVGaWxlQXNrJywgJ0RlbGV0ZUZpbGUnLCB7IGNvbG9yOiAnd2FybicgfSkuc3Vic2NyaWJlKG9rID0+XHJcbiAgICAgICAgb2sgJiYgdGFzaygpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICBjYXNlIDQwMTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0MDk6IC8vIHZlcnNpb24gY2hhbmdlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5fc2IuZXJyb3IoJ1ZlcnNpb25FcnInLCB0aGlzLl9tb2RlbC5udW1iZXIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlIDQwNjogLy8gdmFsaWRhdGlvbiBleGNlcHRpb25cclxuICAgICAgICB0aGlzLl9zYi5lcnJvclN0cmluZyhyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZHJvcGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5zdWJzY3JpYmUob2sgPT4ge1xyXG4gICAgICBpZiAob2spIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdkcmFnJyk7XHJcbiAgICAgIGVsc2UgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWcnKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlcikgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEcmFnRmlsZScpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpkcm9wJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVEb2N1bWVudERyb3AoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fZHJhZ0Ryb3AubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICBjb25zdCB7IGl0ZW1zIH0gPSBldmVudC5kYXRhVHJhbnNmZXI7XHJcbiAgICBjb25zdCBmaWxlcyA9IFtdIGFzIEZpbGVbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGl0ZW1zW2ldLmdldEFzRmlsZSgpO1xyXG4gICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2hlY2tlZE91dCA9IHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gaS5jaGVja2VkT3V0KTtcclxuICAgIGlmICh0aGlzLml0ZW1zICYmIGNoZWNrZWRPdXQubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gW107XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgY2hlY2tlZE91dCkge1xyXG4gICAgICAgIGxldCBmaWxlID0gZmlsZXMuZmluZChmID0+IGYubmFtZS5zdGFydHNXaXRoKGl0ZW0uZmlsZU5hbWUpKTtcclxuICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgbGV0IG9ic2VydmFibGUgPSB0aGlzLl9tYWlsYm94LmNoZWNrSW4odGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLnZlcnNpb24sIGl0ZW0uaWQsIGZpbGUpLlxyXG4gICAgICAgICAgICBwaXBlKHRhcChlID0+IHtcclxuICAgICAgICAgICAgLy9PYmplY3QuYXNzaWduKGl0ZW0sIGEsIHsgcHJvZ3Jlc3M6IG51bGwgfSk7XHJcbiAgICAgICAgICAgIH0pLCBjYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBlLmZpbHRlcihlID0+IGUpIGFzIEF0dGFjaG1lbnRbXTtcclxuICAgICAgICBhdHRhY2htZW50cy5sZW5ndGggJiYgdGhpcy5fc2IudG9hc3QoXHJcbiAgICAgICAgICBhdHRhY2htZW50cy5sZW5ndGggPiAxID8gdGhpcy5fdHJhbnNsYXRlLmdldCgnQ2hlY2tlZEluTicsIGF0dGFjaG1lbnRzLmxlbmd0aCkgOlxyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdDaGVja2VkSW4nLCBhdHRhY2htZW50c1swXS5maWxlTmFtZSlcclxuICAgICAgICApXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl91cGxvYWQoZmlsZXMpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkcmFnZW50ZXInLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUVudGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9kcmFnRHJvcC5uZXh0KHRydWUpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUxlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9kcmFnRHJvcC5uZXh0KGZhbHNlKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZU92ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIHdyaXRlVmFsdWUodmFsOiBudW1iZXIgfCBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSlcclxuICAgICAgdGhpcy5pdGVtcyA9XHJcbiAgICAgICAgdmFsLm1hcChpID0+IHRoaXMuX2NyZWF0ZUl0ZW0oaSkpO1xyXG4gICAgZWxzZSB0aGlzLml0ZW1zW3RoaXMuX2NyZWF0ZUl0ZW0odmFsKV07XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuICBASW5wdXQoKSBnZXQgdmFsdWUoKTogbnVtYmVyIHwgbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuICBzZXQgdmFsdWUodmFsOiBudW1iZXIgfCBudW1iZXJbXSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xyXG4gIH1cclxuICBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxoO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBmb2N1c2VkOiBib29sZWFuO1xyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLml0ZW1zOyB9XHJcbiAgc2hvdWxkTGFiZWxGbG9hdDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHJlcTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlZDsgfVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBlcnJvclN0YXRlID0gZmFsc2U7XHJcbiAgY29udHJvbFR5cGU/OiBzdHJpbmcgPSAnYml6ZG9jLWZpbGUtdXBsb2FkJztcclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpIGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XHJcbiAgfVxyXG4gIG9uQ29udGFpbmVyQ2xpY2soKTogdm9pZCB7XHJcbiAgfVxyXG4gIHByb21wdCgpIHtcclxuICAgIHRoaXMuX3Byb21wdCgpLnRoZW4odGhpcy5fdXBsb2FkLmJpbmQodGhpcykpXHJcbiAgfVxyXG4gIHByaXZhdGUgX3Byb21wdChvcHRpb25zPzogeyBtdWx0aXBsZTogYm9vbGVhbiwgYWNjZXB0Pzogc3RyaW5nIH0pOiBQcm9taXNlPEZpbGUgfCBGaWxlW10+IHtcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmFjY2VwdCkgdGhpcy5hY2NlcHQgPSBvcHRpb25zLmFjY2VwdDtcclxuICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkgdGhpcy5tdWx0aXBsZSA9IG9wdGlvbnMubXVsdGlwbGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICB0aGlzLl9wZW5kaW5nLnN1YnNjcmliZShyZXNvbHZlKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIF9jaGFuZ2UoZXZ0OiBJbnB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBldnQuc3JjRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgYXJyID0gW10gYXMgRmlsZVtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZmlsZSA9IGZpbGVzLml0ZW0oaSk7XHJcbiAgICAgIGFyci5wdXNoKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5uZXh0KGFycik7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NyZWF0ZUl0ZW0oaWQ6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBhdHRhY2htZW50ID0gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmluZChhID0+IGEuaWQgPT09IGlkKSxcclxuICAgICAgbG9nID0gdGhpcy5fbW9kZWwubG9nLmZpbHRlcihsID0+IGwuZmlsZUlkID09IGF0dGFjaG1lbnQuaWQgJiYgbC51c2VySWQgPT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpLFxyXG4gICAgICBmaWxlRXh0ID0gQXR0YWNobWVudEluZm8uZmlsZUV4dChhdHRhY2htZW50LmZpbGVOYW1lKSxcclxuICAgICAgaWNvbiA9IEVYVEVOREVEX0lDT05TW2ZpbGVFeHRdO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uYXR0YWNobWVudCxcclxuICAgICAgaGFzUHJldmlldzogQXR0YWNobWVudEluZm8uZXhpc3RzKGF0dGFjaG1lbnQuY29udGVudFR5cGUpLFxyXG4gICAgICBpc0ltYWdlOiBBdHRhY2htZW50SW5mby5pc0ltYWdlKGF0dGFjaG1lbnQuY29udGVudFR5cGUpLFxyXG4gICAgICBmaWxlRXh0LFxyXG4gICAgICBpY29uLFxyXG4gICAgICB1cmw6IHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICAgIHRoaXMuX21haWxib3guZm9ybWF0RG93bmxvYWRVcmwodGhpcy5fbW9kZWwuZG9jdW1lbnRJZCwgYXR0YWNobWVudC5pZCkpLFxyXG4gICAgICBjaGVja2VkT3V0OlxyXG4gICAgICAgIChhdHRhY2htZW50Lm1vZGUgJiBBdHRhY2htZW50TW9kZS5DaGVja2VkT3V0KSA9PSBBdHRhY2htZW50TW9kZS5DaGVja2VkT3V0ICYmXHJcbiAgICAgICAgICBhdHRhY2htZW50LmhvbGRpbmdJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQgP1xyXG4gICAgICAgICAgbG9nLnJldmVyc2UoKS5maW5kKGwgPT4gbC50eXBlID09PSAnQ2hlY2tPdXQnKS50aW1lIDogbnVsbFxyXG4gICAgfSBhcyBBdHRhY2htZW50RXh0cmE7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VwbG9hZChmaWxlczogRmlsZVtdKSB7XHJcbiAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICBsZXQgb2JzZXJ2YWJsZSA9IHRoaXMuX21haWxib3gudXBsb2FkKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC5mb3JtSWQsIHRoaXMuX21vZGVsLnZlcnNpb24sXHJcbiAgICAgICAgZmlsZSwgeyBpc1ByaXZhdGU6IHRydWUgfSkuXHJcbiAgICAgICAgcGlwZSh0YXAoZSA9PiB7XHJcbiAgICAgICAgICAvLyAgaWYgKGUucHJvZ3Jlc3MpIHtcclxuXHJcbiAgICAgICAgICAvLyAgfVxyXG4gICAgICAgIH0pLCBjYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSk7XHJcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgb2JzZXJ2YWJsZXMucHVzaChvYnNlcnZhYmxlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgY29uc3QgaWRzID0gW107XHJcbiAgICAgIGlmICghdGhpcy5pdGVtcykgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICBlLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgaWYgKCFhKSByZXR1cm47XHJcbiAgICAgICAgaWRzLnB1c2goYS5pZCk7XHJcbiAgICAgICAgdGhpcy5fbW9kZWwuYXR0YWNobWVudHMucHVzaChhKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5fY3JlYXRlSXRlbShhLmlkKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IGlkcyA6IGlkc1swXTtcclxuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZHJhZ0Ryb3AuY29tcGxldGUoKTtcclxuICAgIHRoaXMuX3BlbmRpbmcuY29tcGxldGUoKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cIiFpdGVtczsgZWxzZSBwcmV2aWV3XCIgKGNsaWNrKT1cInByb21wdCgpXCI+XHJcbiAgPG1hdC1pY29uIGNsYXNzPVwiZmlsbGVkXCI+e3tpY29ufX08L21hdC1pY29uPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWgzXCI+e3twbGFjZWhvbGRlcn19PC9zcGFuPlxyXG48L2J1dHRvbj5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgI2lucHV0XHJcbiAgICAgICBbYWNjZXB0XT1hY2NlcHQgW211bHRpcGxlXT1tdWx0aXBsZSAoY2hhbmdlKT0nX2NoYW5nZSgkZXZlbnQpJyBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiAvPlxyXG48bmctdGVtcGxhdGUgI3ByZXZpZXc+XHJcbiAgPGRpdiAqbmdGb3I9J2xldCBhIG9mIGl0ZW1zJyBjbGFzcz1cImF0dGFjaG1lbnQtaXRlbVwiXHJcbiAgICAgICBbY2xhc3MuZGVsZXRlZF09XCJhLmRlbGV0ZWRcIiBbY2xhc3MuZmFpbGVkXT1cImEuZmFpbGVkXCJcclxuICAgICAgIFtwcm9ncmVzc0luZGljYXRvcl09XCJhLnByb2dyZXNzXCI+XHJcbiAgICA8aW1nICpuZ0lmPVwiYS5pc0ltYWdlXCIgW3NyY109XCJhLnVybFwiIChjbGljayk9XCJvcGVuUHJldmlldyhhKVwiIGhlaWdodD1cIjgwXCIgY2xhc3M9XCJmaWxlLXByZXZpZXdcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJhLmhhc1ByZXZpZXcgJiYgIWEuaXNJbWFnZVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJmaWxlLXByZXZpZXdcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5QcmV2aWV3KGEpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1ByZXZpZXcnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5maW5kX2luX3BhZ2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8c3Bhbj4ue3thLmZpbGVFeHR9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiYS5pY29uXCIgW3N2Z0ljb25dPVwiYS5pY29uXCI+PC9tYXQtaWNvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlLW92ZXJsYXkgcm93XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZW5hbWVcIj57e2EuZmlsZU5hbWV9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm9wdGlvbnNcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidPcHRpb25zJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1tZW51ICNtZW51PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWEuZmFpbGVkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkVkaXQoYSkgJiYgIWEuZmFpbGVkXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWEuY2hlY2tlZE91dFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrT3V0KGEpXCI+e3tcIkNoZWNrT3V0XCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInByb21wdCgpXCI+e3tcIkFkZFwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGVja0luKGEpXCIgKm5nSWY9XCJhLmNoZWNrZWRPdXRcIj57e1wiQ2hlY2tJblwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImRvd25sb2FkKGEpXCI+e3tcIkRvd25sb2FkXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cImNhblByZXZpZXcoYSlcIiAoY2xpY2spPVwib3BlblByZXZpZXcoYSlcIj48bWF0LWljb24+bGFuZHNjYXBlPC9tYXQtaWNvbj4ge3tcIlByZXZpZXdcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1ZlcnNpb24oYSlcIj5cclxuICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCB2IG9mIGdldFZlcnNpb25zKGEpXCIgKGNsaWNrKT1cInByZXZpZXdPckRvd25sb2FkKHYpXCI+e3t2LnRpbWUgfCAgYW1DYWxlbmRhcn19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkVkaXQoYSlcIj5cclxuICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkaXNjYXJkKGEpXCI+e3tcIkRpc2NhcmRcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNhbmNlbChhKVwiICpuZ0lmPVwiYS5mYWlsZWRcIj57e1wiQ2FuY2VsXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgPC9tYXQtbWVudT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|