@ohioepa/oepa-ui-lib 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/account-search-input/account-search-input.component.mjs +147 -0
- package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +151 -0
- package/esm2022/lib/action-btn/action-btn.component.mjs +70 -0
- package/esm2022/lib/action-btn/oepa-action-event.mjs +2 -0
- package/esm2022/lib/action-btn/oepa-action.mjs +2 -0
- package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +21 -0
- package/esm2022/lib/address/address.component.mjs +174 -0
- package/esm2022/lib/address/oepa-address.service.mjs +64 -0
- package/esm2022/lib/address/oepa-form-address.mjs +2 -0
- package/esm2022/lib/blank/blank.component.mjs +14 -0
- package/esm2022/lib/checkbox/checkbox.component.mjs +33 -0
- package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +41 -0
- package/esm2022/lib/comment-modal/comment-modal.component.mjs +56 -0
- package/esm2022/lib/common-forms.module.mjs +291 -0
- package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +120 -0
- package/esm2022/lib/contact/contact.component.mjs +102 -0
- package/esm2022/lib/contact/oepa-form-contact.mjs +2 -0
- package/esm2022/lib/date-input/date-input.component.mjs +52 -0
- package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +68 -0
- package/esm2022/lib/datepicker/datepicker.component.mjs +131 -0
- package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +70 -0
- package/esm2022/lib/document/document-editor/document-editor.component.mjs +225 -0
- package/esm2022/lib/document/document-event-entity-type.mjs +7 -0
- package/esm2022/lib/document/document-event-type.mjs +7 -0
- package/esm2022/lib/document/document-event.mjs +2 -0
- package/esm2022/lib/document/document-group/document-group.component.mjs +210 -0
- package/esm2022/lib/document/document-part/document-part.component.mjs +19 -0
- package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +296 -0
- package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +49 -0
- package/esm2022/lib/document/document-section/document-section.component.mjs +226 -0
- package/esm2022/lib/document/document.service.mjs +325 -0
- package/esm2022/lib/document/group-modal/group-modal.component.mjs +46 -0
- package/esm2022/lib/document/part-modal/part-modal.component.mjs +48 -0
- package/esm2022/lib/document/portal-document-class.mjs +2 -0
- package/esm2022/lib/document/portal-document-group.mjs +2 -0
- package/esm2022/lib/document/portal-document-part.mjs +2 -0
- package/esm2022/lib/document/portal-document-placeholder.mjs +2 -0
- package/esm2022/lib/document/portal-document-section.mjs +2 -0
- package/esm2022/lib/document/portal-document-text.mjs +2 -0
- package/esm2022/lib/document/portal-document-type.mjs +2 -0
- package/esm2022/lib/document/portal-document.mjs +2 -0
- package/esm2022/lib/document/portal-email-attachment-type.mjs +2 -0
- package/esm2022/lib/document/portal-email-attachment.mjs +2 -0
- package/esm2022/lib/document/portal-email-filter.mjs +2 -0
- package/esm2022/lib/document/portal-email.mjs +2 -0
- package/esm2022/lib/document/section-modal/section-modal.component.mjs +46 -0
- package/esm2022/lib/dual-list-box/array.pipes.mjs +71 -0
- package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +339 -0
- package/esm2022/lib/dual-list-box/items-moved-event.mjs +2 -0
- package/esm2022/lib/dual-list-box/list-box-item.mjs +2 -0
- package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +62 -0
- package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +216 -0
- package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +38 -0
- package/esm2022/lib/edoc-attachment/edocument-attachment-metadata.mjs +2 -0
- package/esm2022/lib/edoc-attachment/edocument-attachment.mjs +2 -0
- package/esm2022/lib/edoc-attachment/edocument-reference.mjs +2 -0
- package/esm2022/lib/entity/entity.service.mjs +104 -0
- package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +307 -0
- package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +127 -0
- package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +304 -0
- package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +316 -0
- package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +129 -0
- package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +311 -0
- package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +14 -0
- package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +126 -0
- package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +216 -0
- package/esm2022/lib/esri-map/esri-map.component.mjs +416 -0
- package/esm2022/lib/file-upload/file-upload.component.mjs +148 -0
- package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +143 -0
- package/esm2022/lib/lynx-image-upload/lynx.service.mjs +47 -0
- package/esm2022/lib/masks/oepa-create-integer-mask.mjs +39 -0
- package/esm2022/lib/masks/oepa-integer-mask-args.mjs +2 -0
- package/esm2022/lib/message/message.component.mjs +19 -0
- package/esm2022/lib/message/oepa-message-type.mjs +7 -0
- package/esm2022/lib/message/oepa-message.mjs +31 -0
- package/esm2022/lib/message-list/message-list.component.mjs +24 -0
- package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +137 -0
- package/esm2022/lib/notes-modal/notes-modal.component.mjs +177 -0
- package/esm2022/lib/notes-modal/oepa-note-result.mjs +2 -0
- package/esm2022/lib/notes-modal/oepa-note.mjs +2 -0
- package/esm2022/lib/numeric-input/numeric-input.component.mjs +50 -0
- package/esm2022/lib/numeric-input.directive.mjs +76 -0
- package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +39 -0
- package/esm2022/lib/oepa-forms.service.mjs +199 -0
- package/esm2022/lib/oepa-images.mjs +59 -0
- package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +29 -0
- package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +176 -0
- package/esm2022/lib/parameter/parameter.mjs +2 -0
- package/esm2022/lib/parameter/parameter.service.mjs +47 -0
- package/esm2022/lib/params-help-button/params-help-button.component.mjs +42 -0
- package/esm2022/lib/phone-number/phone-number.component.mjs +44 -0
- package/esm2022/lib/pin-modal/oepa-attestation.mjs +2 -0
- package/esm2022/lib/pin-modal/oepa-pin.mjs +2 -0
- package/esm2022/lib/pin-modal/oepa-pin.service.mjs +54 -0
- package/esm2022/lib/pin-modal/oepa-security-question.mjs +2 -0
- package/esm2022/lib/pin-modal/pin-modal.component.mjs +186 -0
- package/esm2022/lib/progress-indicator/progress-info.mjs +2 -0
- package/esm2022/lib/select-input/select-input.component.mjs +96 -0
- package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +63 -0
- package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +54 -0
- package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.mjs +2 -0
- package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +190 -0
- package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +89 -0
- package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +126 -0
- package/esm2022/lib/table/oepa-p-column.mjs +2 -0
- package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-click-event.mjs +2 -0
- package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +22 -0
- package/esm2022/lib/table/oepa-table-cell.mjs +2 -0
- package/esm2022/lib/table/oepa-table-column.mjs +2 -0
- package/esm2022/lib/table/oepa-table-config.mjs +2 -0
- package/esm2022/lib/table/oepa-table-filter.mjs +2 -0
- package/esm2022/lib/table/oepa-table-filtering.directive.mjs +57 -0
- package/esm2022/lib/table/oepa-table-header.mjs +2 -0
- package/esm2022/lib/table/oepa-table-page-info.mjs +2 -0
- package/esm2022/lib/table/oepa-table-popover.mjs +2 -0
- package/esm2022/lib/table/oepa-table-row.mjs +2 -0
- package/esm2022/lib/table/oepa-table-sort-criterion.mjs +2 -0
- package/esm2022/lib/table/oepa-table-sorting.directive.mjs +57 -0
- package/esm2022/lib/table/oepa-table.mjs +2 -0
- package/esm2022/lib/table/p-table/p-table.component.mjs +826 -0
- package/esm2022/lib/table/table-data-cell/table-data-cell-click-event.mjs +2 -0
- package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +60 -0
- package/esm2022/lib/table/table-export.service.mjs +57 -0
- package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +61 -0
- package/esm2022/lib/table/table.component.mjs +793 -0
- package/esm2022/lib/table/table.service.mjs +112 -0
- package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +46 -0
- package/esm2022/lib/text-area-input/text-area-input.component.mjs +48 -0
- package/esm2022/lib/text-input/text-input.component.mjs +48 -0
- package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +31 -0
- package/esm2022/lib/timepicker/timepicker.component.mjs +48 -0
- package/esm2022/lib/validation/form-validator.mjs +2 -0
- package/esm2022/lib/validation/validation.service.mjs +134 -0
- package/esm2022/lib/yes-no/yes-no.component.mjs +44 -0
- package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +44 -0
- package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +41 -0
- package/esm2022/lib/zip-code/zip-code.component.mjs +42 -0
- package/esm2022/ohioepa-oepa-ui-lib.mjs +5 -0
- package/esm2022/public-api.mjs +142 -0
- package/fesm2022/ohioepa-oepa-ui-lib.mjs +10720 -0
- package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/account-search-input/account-search-input.component.d.ts +36 -0
- package/lib/account-search-modal/account-search-modal.component.d.ts +40 -0
- package/lib/action-btn/action-btn.component.d.ts +34 -0
- package/lib/action-btn/oepa-action-event.d.ts +19 -0
- package/lib/action-btn/oepa-action.d.ts +13 -0
- package/lib/action-btn-modal/action-btn-modal.component.d.ts +12 -0
- package/lib/address/address.component.d.ts +43 -0
- package/lib/address/oepa-address.service.d.ts +28 -0
- package/lib/address/oepa-form-address.d.ts +19 -0
- package/lib/blank/blank.component.d.ts +8 -0
- package/lib/checkbox/checkbox.component.d.ts +15 -0
- package/lib/checkbox-input/checkbox-input.component.d.ts +17 -0
- package/lib/comment-modal/comment-modal.component.d.ts +22 -0
- package/lib/common-forms.module.d.ts +104 -0
- package/lib/confirmation-modal/confirmation-modal.component.d.ts +49 -0
- package/lib/contact/contact.component.d.ts +33 -0
- package/lib/contact/oepa-form-contact.d.ts +58 -0
- package/lib/date-input/date-input.component.d.ts +18 -0
- package/lib/date-input-modal/date-input-modal.component.d.ts +25 -0
- package/lib/datepicker/datepicker.component.d.ts +28 -0
- package/lib/daterangepicker/daterangepicker.component.d.ts +22 -0
- package/lib/document/document-editor/document-editor.component.d.ts +34 -0
- package/lib/document/document-event-entity-type.d.ts +5 -0
- package/lib/document/document-event-type.d.ts +5 -0
- package/lib/document/document-event.d.ts +9 -0
- package/lib/document/document-group/document-group.component.d.ts +38 -0
- package/lib/document/document-part/document-part.component.d.ts +10 -0
- package/lib/document/document-part-editor/document-part-editor.component.d.ts +46 -0
- package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +19 -0
- package/lib/document/document-section/document-section.component.d.ts +37 -0
- package/lib/document/document.service.d.ts +90 -0
- package/lib/document/group-modal/group-modal.component.d.ts +20 -0
- package/lib/document/part-modal/part-modal.component.d.ts +20 -0
- package/lib/document/portal-document-class.d.ts +10 -0
- package/lib/document/portal-document-group.d.ts +15 -0
- package/lib/document/portal-document-part.d.ts +22 -0
- package/lib/document/portal-document-placeholder.d.ts +12 -0
- package/lib/document/portal-document-section.d.ts +13 -0
- package/lib/document/portal-document-text.d.ts +7 -0
- package/lib/document/portal-document-type.d.ts +15 -0
- package/lib/document/portal-document.d.ts +27 -0
- package/lib/document/portal-email-attachment-type.d.ts +6 -0
- package/lib/document/portal-email-attachment.d.ts +12 -0
- package/lib/document/portal-email-filter.d.ts +12 -0
- package/lib/document/portal-email.d.ts +18 -0
- package/lib/document/section-modal/section-modal.component.d.ts +20 -0
- package/lib/dual-list-box/array.pipes.d.ts +36 -0
- package/lib/dual-list-box/dual-list-box.component.d.ts +91 -0
- package/lib/dual-list-box/items-moved-event.d.ts +11 -0
- package/lib/dual-list-box/list-box-item.d.ts +7 -0
- package/lib/ebiz-address/ebiz-address.component.d.ts +23 -0
- package/lib/edoc-attachment/edoc-attachment.component.d.ts +44 -0
- package/lib/edoc-attachment/edoc-attachment.service.d.ts +16 -0
- package/lib/edoc-attachment/edocument-attachment-metadata.d.ts +16 -0
- package/lib/edoc-attachment/edocument-attachment.d.ts +12 -0
- package/lib/edoc-attachment/edocument-reference.d.ts +5 -0
- package/lib/entity/entity.service.d.ts +31 -0
- package/lib/entity/organization-create-modal/organization-create-modal.component.d.ts +53 -0
- package/lib/entity/organization-search-input/organization-search-input.component.d.ts +34 -0
- package/lib/entity/organization-search-modal/organization-search-modal.component.d.ts +56 -0
- package/lib/entity/person-create-modal/person-create-modal.component.d.ts +53 -0
- package/lib/entity/person-search-input/person-search-input.component.d.ts +34 -0
- package/lib/entity/person-search-modal/person-search-modal.component.d.ts +56 -0
- package/lib/entity/place-create-modal/place-create-modal.component.d.ts +8 -0
- package/lib/entity/place-search-input/place-search-input.component.d.ts +34 -0
- package/lib/entity/place-search-modal/place-search-modal.component.d.ts +41 -0
- package/lib/esri-map/esri-map.component.d.ts +41 -0
- package/lib/file-upload/file-upload.component.d.ts +37 -0
- package/lib/lynx-image-upload/lynx-image-upload.component.d.ts +36 -0
- package/lib/lynx-image-upload/lynx.service.d.ts +16 -0
- package/lib/masks/oepa-create-integer-mask.d.ts +8 -0
- package/lib/masks/oepa-integer-mask-args.d.ts +5 -0
- package/lib/message/message.component.d.ts +10 -0
- package/lib/message/oepa-message-type.d.ts +5 -0
- package/lib/message/oepa-message.d.ts +7 -0
- package/lib/message-list/message-list.component.d.ts +11 -0
- package/lib/multi-file-upload/multi-file-upload.component.d.ts +36 -0
- package/lib/notes-modal/notes-modal.component.d.ts +50 -0
- package/lib/notes-modal/oepa-note-result.d.ts +10 -0
- package/lib/notes-modal/oepa-note.d.ts +13 -0
- package/lib/numeric-input/numeric-input.component.d.ts +20 -0
- package/lib/numeric-input.directive.d.ts +19 -0
- package/lib/oepa-error-message/oepa-error-message.component.d.ts +9 -0
- package/lib/oepa-forms.service.d.ts +28 -0
- package/lib/oepa-images.d.ts +53 -0
- package/lib/oepa-wait-message/oepa-wait-message.component.d.ts +9 -0
- package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +63 -0
- package/lib/parameter/parameter.d.ts +7 -0
- package/lib/parameter/parameter.service.d.ts +18 -0
- package/lib/params-help-button/params-help-button.component.d.ts +15 -0
- package/lib/phone-number/phone-number.component.d.ts +19 -0
- package/lib/pin-modal/oepa-attestation.d.ts +10 -0
- package/lib/pin-modal/oepa-pin.d.ts +26 -0
- package/lib/pin-modal/oepa-pin.service.d.ts +38 -0
- package/lib/pin-modal/oepa-security-question.d.ts +8 -0
- package/lib/pin-modal/pin-modal.component.d.ts +46 -0
- package/lib/progress-indicator/progress-info.d.ts +4 -0
- package/lib/select-input/select-input.component.d.ts +27 -0
- package/lib/server-timeout-modal/server-timeout-modal.component.d.ts +23 -0
- package/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.d.ts +18 -0
- package/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.d.ts +10 -0
- package/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.d.ts +51 -0
- package/lib/shopping-cart/shopping-cart.service.d.ts +44 -0
- package/lib/start-end-timepicker/start-end-timepicker.component.d.ts +29 -0
- package/lib/table/oepa-p-column.d.ts +4 -0
- package/lib/table/oepa-table-cell-classname.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-click-event.d.ts +15 -0
- package/lib/table/oepa-table-cell-colspan.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-hidden.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-icon-classname.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-img-src.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-inner-html.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-input-component.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-not-selectable.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell-value.pipe.d.ts +9 -0
- package/lib/table/oepa-table-cell.d.ts +66 -0
- package/lib/table/oepa-table-column.d.ts +71 -0
- package/lib/table/oepa-table-config.d.ts +72 -0
- package/lib/table/oepa-table-filter.d.ts +10 -0
- package/lib/table/oepa-table-filtering.directive.d.ts +17 -0
- package/lib/table/oepa-table-header.d.ts +9 -0
- package/lib/table/oepa-table-page-info.d.ts +22 -0
- package/lib/table/oepa-table-popover.d.ts +28 -0
- package/lib/table/oepa-table-row.d.ts +84 -0
- package/lib/table/oepa-table-sort-criterion.d.ts +4 -0
- package/lib/table/oepa-table-sorting.directive.d.ts +16 -0
- package/lib/table/oepa-table.d.ts +42 -0
- package/lib/table/p-table/p-table.component.d.ts +155 -0
- package/lib/table/table-data-cell/table-data-cell-click-event.d.ts +5 -0
- package/lib/table/table-data-cell/table-data-cell.component.d.ts +23 -0
- package/lib/table/table-export.service.d.ts +33 -0
- package/lib/table/table-header-cell/table-header-cell.component.d.ts +24 -0
- package/lib/table/table.component.d.ts +144 -0
- package/lib/table/table.service.d.ts +28 -0
- package/lib/template-confirmation-modal/template-confirmation-modal.component.d.ts +19 -0
- package/lib/text-area-input/text-area-input.component.d.ts +19 -0
- package/lib/text-input/text-input.component.d.ts +19 -0
- package/lib/timeout-modal/timeout-modal.component.d.ts +13 -0
- package/lib/timepicker/timepicker.component.d.ts +17 -0
- package/lib/validation/form-validator.d.ts +10 -0
- package/lib/validation/validation.service.d.ts +16 -0
- package/lib/yes-no/yes-no.component.d.ts +19 -0
- package/lib/yes-no-boolean/yes-no.component.d.ts +19 -0
- package/lib/yes-no-other-input/yes-no-other-input.component.d.ts +18 -0
- package/lib/zip-code/zip-code.component.d.ts +19 -0
- package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
- package/package.json +25 -0
- package/public-api.d.ts +138 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/forms";
|
|
5
|
+
import * as i2 from "ngx-bootstrap/modal";
|
|
6
|
+
export class SectionModalComponent {
|
|
7
|
+
fb;
|
|
8
|
+
bsModalRef;
|
|
9
|
+
section;
|
|
10
|
+
label = '';
|
|
11
|
+
onSectionSave = new EventEmitter();
|
|
12
|
+
modalForm;
|
|
13
|
+
constructor(fb, bsModalRef) {
|
|
14
|
+
this.fb = fb;
|
|
15
|
+
this.bsModalRef = bsModalRef;
|
|
16
|
+
}
|
|
17
|
+
ngOnInit() {
|
|
18
|
+
this.createForm();
|
|
19
|
+
}
|
|
20
|
+
createForm() {
|
|
21
|
+
this.modalForm = this.fb.group({
|
|
22
|
+
name: [this.section.name, [Validators.required]]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
save() {
|
|
26
|
+
this.section.name = this.modalForm.get('name')?.value;
|
|
27
|
+
this.onSectionSave.emit(this.section);
|
|
28
|
+
this.bsModalRef.hide();
|
|
29
|
+
}
|
|
30
|
+
cancel() {
|
|
31
|
+
this.bsModalRef.hide();
|
|
32
|
+
}
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SectionModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SectionModalComponent, selector: "oepa-insert-section-modal", inputs: { section: "section", label: "label" }, outputs: { onSectionSave: "onSectionSave" }, ngImport: i0, template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{label}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div [formGroup]=\"modalForm\">\n <div class=\"row\">\n <div class=\"col-sm-12 form-group\">\n <label>Section Name</label>\n <input class=\"form-control\" id=\"partNameInput\" formControlName=\"name\"/>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"submit\" id=\"saveBtn\" [disabled]=\"modalForm.invalid\" class=\"btn btn-primary mr-1\" (click)=\"save()\">Save</button>\n <button type=\"button\" id=\"cancelBtn\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">Cancel</button>\n </div>", styles: [""], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SectionModalComponent, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'oepa-insert-section-modal', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{label}}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div [formGroup]=\"modalForm\">\n <div class=\"row\">\n <div class=\"col-sm-12 form-group\">\n <label>Section Name</label>\n <input class=\"form-control\" id=\"partNameInput\" formControlName=\"name\"/>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"submit\" id=\"saveBtn\" [disabled]=\"modalForm.invalid\" class=\"btn btn-primary mr-1\" (click)=\"save()\">Save</button>\n <button type=\"button\" id=\"cancelBtn\" class=\"btn btn-primary mr-1\" (click)=\"cancel()\">Cancel</button>\n </div>" }]
|
|
39
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BsModalRef }], propDecorators: { section: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], label: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], onSectionSave: [{
|
|
44
|
+
type: Output
|
|
45
|
+
}] } });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L3NlY3Rpb24tbW9kYWwvc2VjdGlvbi1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L3NlY3Rpb24tbW9kYWwvc2VjdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRcEUsTUFBTSxPQUFPLHFCQUFxQjtJQVFaO0lBQXdCO0lBUG5DLE9BQU8sQ0FBeUI7SUFDaEMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVWLGFBQWEsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFbEcsU0FBUyxDQUFhO0lBRTdCLFlBQW9CLEVBQWUsRUFBUyxVQUFzQjtRQUE5QyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7SUFFdkUsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQTVCVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiw4SkNWbEMsMDVCQW9CUTs7NEZEVksscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLDJCQUEyQjt5R0FLNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9ydGFsRG9jdW1lbnRTZWN0aW9uIH0gZnJvbSAnLi4vcG9ydGFsLWRvY3VtZW50LXNlY3Rpb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1pbnNlcnQtc2VjdGlvbi1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWN0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VjdGlvbi1tb2RhbC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2VjdGlvbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc2VjdGlvbiE6IFBvcnRhbERvY3VtZW50U2VjdGlvbjtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcblxuICBAT3V0cHV0KCkgb25TZWN0aW9uU2F2ZTogRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50U2VjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50U2VjdGlvbj4oKTtcblxuICBwdWJsaWMgbW9kYWxGb3JtITogRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5tb2RhbEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsgdGhpcy5zZWN0aW9uLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5zZWN0aW9uLm5hbWUgPSB0aGlzLm1vZGFsRm9ybS5nZXQoJ25hbWUnKT8udmFsdWU7XG4gICAgdGhpcy5vblNlY3Rpb25TYXZlLmVtaXQodGhpcy5zZWN0aW9uKTtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiPnt7bGFiZWx9fTwvaDQ+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZSBwdWxsLXJpZ2h0XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWN0aW9uIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJwYXJ0TmFtZUlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGlkPVwic2F2ZUJ0blwiIFtkaXNhYmxlZF09XCJtb2RhbEZvcm0uaW52YWxpZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTFcIiAoY2xpY2spPVwic2F2ZSgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiY2FuY2VsQnRuXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMVwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICA8L2Rpdj4iXX0=
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import orderBy from 'lodash/orderBy';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Utility class to not hardcode sort directions
|
|
6
|
+
*/
|
|
7
|
+
export class SortOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Static property to defined ASC and DESC values
|
|
10
|
+
* to avoid hardcoding and repeating
|
|
11
|
+
* replaces string enums
|
|
12
|
+
*/
|
|
13
|
+
static direction = {
|
|
14
|
+
ASC: 'ASC',
|
|
15
|
+
DESC: 'DESC'
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Pipe used to sort arrays by using lodash
|
|
20
|
+
* Takes array and array of 2 strings(parameters), key and direction
|
|
21
|
+
* direction must be either ASC or DESC
|
|
22
|
+
*/
|
|
23
|
+
export class ArraySortPipe {
|
|
24
|
+
transform(array, args) {
|
|
25
|
+
array = array || [];
|
|
26
|
+
if (typeof args === 'undefined' || args.length !== 2) {
|
|
27
|
+
return array;
|
|
28
|
+
}
|
|
29
|
+
const [key, direction] = args;
|
|
30
|
+
if (direction !== SortOptions.direction.ASC && direction !== SortOptions.direction.DESC) {
|
|
31
|
+
return array;
|
|
32
|
+
}
|
|
33
|
+
// if there is no key we assume item is of string type
|
|
34
|
+
return orderBy(array, (item) => item.hasOwnProperty(key) ? item[key] : item, (direction === SortOptions.direction.DESC ? 'desc' : 'asc'));
|
|
35
|
+
}
|
|
36
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
37
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, name: "arraySort" });
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArraySortPipe, decorators: [{
|
|
40
|
+
type: Pipe,
|
|
41
|
+
args: [{
|
|
42
|
+
name: 'arraySort'
|
|
43
|
+
}]
|
|
44
|
+
}] });
|
|
45
|
+
/**
|
|
46
|
+
* Pipe used to filter array, takes input array and
|
|
47
|
+
* array of 2 arguments, key of object and search term
|
|
48
|
+
* if key does not exist, pipe assumes the item is string
|
|
49
|
+
*/
|
|
50
|
+
export class ArrayFilterPipe {
|
|
51
|
+
transform(array, args) {
|
|
52
|
+
array = array || [];
|
|
53
|
+
if (typeof args === 'undefined' || args.length !== 2) {
|
|
54
|
+
return array;
|
|
55
|
+
}
|
|
56
|
+
const [key, searchTerm] = args;
|
|
57
|
+
if (!searchTerm || searchTerm.trim() === '') {
|
|
58
|
+
return array;
|
|
59
|
+
}
|
|
60
|
+
return array.filter((item) => item[key].toString().toLowerCase().search(searchTerm.toLowerCase().trim()) >= 0);
|
|
61
|
+
}
|
|
62
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
63
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, name: "arrayFilter" });
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ArrayFilterPipe, decorators: [{
|
|
66
|
+
type: Pipe,
|
|
67
|
+
args: [{
|
|
68
|
+
name: 'arrayFilter'
|
|
69
|
+
}]
|
|
70
|
+
}] });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvYXJyYXkucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXJDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDcEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxTQUFTLEdBR1o7UUFDQSxHQUFHLEVBQUUsS0FBSztRQUNWLElBQUksRUFBRSxNQUFNO0tBQ2YsQ0FBQzs7QUFHTjs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUFFdEIsU0FBUyxDQUFDLEtBQWlCLEVBQUUsSUFBYztRQUV2QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVwQixJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxTQUFTLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUosQ0FBQzt3R0FsQlEsYUFBYTtzR0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUh6QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxXQUFXO2lCQUNwQjs7QUFzQkQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBRXhCLFNBQVMsQ0FBQyxLQUFpQixFQUFFLElBQWM7UUFFdkMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFcEIsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUcsQ0FBQztZQUNwRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFL0IsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO3dHQWpCUSxlQUFlO3NHQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBSDNCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGFBQWE7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgdG8gbm90IGhhcmRjb2RlIHNvcnQgZGlyZWN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgU29ydE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmVkIEFTQyBhbmQgREVTQyB2YWx1ZXNcbiAgICAgKiB0byBhdm9pZCBoYXJkY29kaW5nIGFuZCByZXBlYXRpbmdcbiAgICAgKiByZXBsYWNlcyBzdHJpbmcgZW51bXNcbiAgICAgKi9cbiAgICBzdGF0aWMgZGlyZWN0aW9uOiB7XG4gICAgICAgIEFTQzogc3RyaW5nLFxuICAgICAgICBERVNDOiBzdHJpbmdcbiAgICB9ID0ge1xuICAgICAgICBBU0M6ICdBU0MnLFxuICAgICAgICBERVNDOiAnREVTQydcbiAgICB9O1xufVxuXG4vKipcbiAqIFBpcGUgdXNlZCB0byBzb3J0IGFycmF5cyBieSB1c2luZyBsb2Rhc2hcbiAqIFRha2VzIGFycmF5IGFuZCBhcnJheSBvZiAyIHN0cmluZ3MocGFyYW1ldGVycyksIGtleSBhbmQgZGlyZWN0aW9uXG4gKiBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgQVNDIG9yIERFU0NcbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdhcnJheVNvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5U29ydFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHRyYW5zZm9ybShhcnJheTogQXJyYXk8YW55PiwgYXJnczogc3RyaW5nW10pOiBBcnJheTxzdHJpbmc+IHwgQXJyYXk8YW55PiB7XG5cbiAgICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICd1bmRlZmluZWQnIHx8IGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBba2V5LCBkaXJlY3Rpb25dID0gYXJncztcblxuICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSBTb3J0T3B0aW9ucy5kaXJlY3Rpb24uQVNDICYmIGRpcmVjdGlvbiAhPT0gU29ydE9wdGlvbnMuZGlyZWN0aW9uLkRFU0MpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGtleSB3ZSBhc3N1bWUgaXRlbSBpcyBvZiBzdHJpbmcgdHlwZVxuICAgICAgICByZXR1cm4gb3JkZXJCeShhcnJheSwgKGl0ZW06IGFueSB8IHN0cmluZykgPT4gaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpID8gaXRlbVtrZXldIDogaXRlbSwgKGRpcmVjdGlvbiA9PT0gU29ydE9wdGlvbnMuZGlyZWN0aW9uLkRFU0MgPyAnZGVzYycgOiAnYXNjJykpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQaXBlIHVzZWQgdG8gZmlsdGVyIGFycmF5LCB0YWtlcyBpbnB1dCBhcnJheSBhbmRcbiAqIGFycmF5IG9mIDIgYXJndW1lbnRzLCBrZXkgb2Ygb2JqZWN0IGFuZCBzZWFyY2ggdGVybVxuICogaWYga2V5IGRvZXMgbm90IGV4aXN0LCBwaXBlIGFzc3VtZXMgdGhlIGl0ZW0gaXMgc3RyaW5nXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnYXJyYXlGaWx0ZXInXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5RmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgdHJhbnNmb3JtKGFycmF5OiBBcnJheTxhbnk+LCBhcmdzOiBzdHJpbmdbXSk6IEFycmF5PHN0cmluZz4gfCBBcnJheTxhbnk+IHtcblxuICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcgfHwgYXJncy5sZW5ndGggIT09IDIgKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBba2V5LCBzZWFyY2hUZXJtXSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFzZWFyY2hUZXJtIHx8IHNlYXJjaFRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW2tleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnNlYXJjaChzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkudHJpbSgpKSA+PSAwKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
|
|
2
|
+
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
|
|
4
|
+
import intersectionWith from 'lodash/intersectionWith';
|
|
5
|
+
import differenceWith from 'lodash/differenceWith';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "ngx-toastr";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
10
|
+
import * as i4 from "./array.pipes";
|
|
11
|
+
/**
|
|
12
|
+
* NOTE: This code is a modified version of the project: https://www.npmjs.com/package/ng2-dual-list-box
|
|
13
|
+
* LICENSE: MIT © [Eldar Granulo](mailto:eldar32@gmail.com)
|
|
14
|
+
*/
|
|
15
|
+
export class DualListBoxComponent {
|
|
16
|
+
fb;
|
|
17
|
+
toastr;
|
|
18
|
+
// array of items to display in left box
|
|
19
|
+
set available(items) {
|
|
20
|
+
this.availableItems = [...(items || []).map((item, index) => ({
|
|
21
|
+
value: item[this.valueField].toString(),
|
|
22
|
+
text: item[this.textField]
|
|
23
|
+
}))];
|
|
24
|
+
}
|
|
25
|
+
;
|
|
26
|
+
// array of items to display in right box
|
|
27
|
+
set selected(items) {
|
|
28
|
+
this.selectedItems = [...(items || []).map((item, index) => ({
|
|
29
|
+
value: item[this.valueField].toString(),
|
|
30
|
+
text: item[this.textField]
|
|
31
|
+
}))];
|
|
32
|
+
}
|
|
33
|
+
;
|
|
34
|
+
// input to set search term for available list box from the outside
|
|
35
|
+
set availableSearch(searchTerm) {
|
|
36
|
+
this.searchTermAvailable = searchTerm;
|
|
37
|
+
this.availableSearchInputControl.setValue(searchTerm);
|
|
38
|
+
}
|
|
39
|
+
;
|
|
40
|
+
// input to set search term for selected list box from the outside
|
|
41
|
+
set selectedSearch(searchTerm) {
|
|
42
|
+
this.searchTermSelected = searchTerm;
|
|
43
|
+
this.selectedSearchInputControl.setValue(searchTerm);
|
|
44
|
+
}
|
|
45
|
+
;
|
|
46
|
+
// field to use for value of option
|
|
47
|
+
valueField = 'id';
|
|
48
|
+
// field to use for displaying option text
|
|
49
|
+
textField = 'name';
|
|
50
|
+
// text to display as title above component
|
|
51
|
+
title = '';
|
|
52
|
+
// time to debounce search output in ms
|
|
53
|
+
debounceTime = 500;
|
|
54
|
+
// show/hide button to move all items between boxes
|
|
55
|
+
moveAllButton = true;
|
|
56
|
+
// text displayed over the available items list box
|
|
57
|
+
availableText = 'Available items';
|
|
58
|
+
// text displayed over the selected items list box
|
|
59
|
+
selectedText = 'Selected items';
|
|
60
|
+
// set placeholder text in available items list box
|
|
61
|
+
availableFilterPlaceholder = 'Filter...';
|
|
62
|
+
// set placeholder text in selected items list box
|
|
63
|
+
selectedFilterPlaceholder = 'Filter...';
|
|
64
|
+
// field to use for html id
|
|
65
|
+
idField = 'id';
|
|
66
|
+
// disable component
|
|
67
|
+
set disabled(disabled) {
|
|
68
|
+
if (this.listBoxForm) {
|
|
69
|
+
if (disabled) {
|
|
70
|
+
this.listBoxForm.disable();
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.listBoxForm.enable();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
listSize = 10;
|
|
78
|
+
sortBy = 'text';
|
|
79
|
+
maxSelectableItems = undefined;
|
|
80
|
+
// event called when item or items from available items(left box) is selected
|
|
81
|
+
onAvailableItemSelected = new EventEmitter();
|
|
82
|
+
// event called when item or items from selected items(right box) is selected
|
|
83
|
+
onSelectedItemsSelected = new EventEmitter();
|
|
84
|
+
// event called when items are moved between boxes, returns state of both boxes and item moved
|
|
85
|
+
onItemsMoved = new EventEmitter();
|
|
86
|
+
// private variables to manage class
|
|
87
|
+
searchTermAvailable = '';
|
|
88
|
+
searchTermSelected = '';
|
|
89
|
+
availableItems = [];
|
|
90
|
+
selectedItems = [];
|
|
91
|
+
listBoxForm;
|
|
92
|
+
availableListBoxControl = new FormControl();
|
|
93
|
+
selectedListBoxControl = new FormControl();
|
|
94
|
+
availableSearchInputControl = new FormControl();
|
|
95
|
+
selectedSearchInputControl = new FormControl();
|
|
96
|
+
// control value accessors
|
|
97
|
+
_onChange = (_) => { };
|
|
98
|
+
_onTouched = () => { };
|
|
99
|
+
constructor(fb, toastr) {
|
|
100
|
+
this.fb = fb;
|
|
101
|
+
this.toastr = toastr;
|
|
102
|
+
this.listBoxForm = this.fb.group({
|
|
103
|
+
availableListBox: this.availableListBoxControl,
|
|
104
|
+
selectedListBox: this.selectedListBoxControl,
|
|
105
|
+
availableSearchInput: this.availableSearchInputControl,
|
|
106
|
+
selectedSearchInput: this.selectedSearchInputControl
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
ngOnInit() {
|
|
110
|
+
this.availableListBoxControl
|
|
111
|
+
.valueChanges
|
|
112
|
+
.subscribe((items) => this.onAvailableItemSelected.emit(items));
|
|
113
|
+
this.selectedListBoxControl
|
|
114
|
+
.valueChanges
|
|
115
|
+
.subscribe((items) => this.onSelectedItemsSelected.emit(items));
|
|
116
|
+
this.availableSearchInputControl
|
|
117
|
+
.valueChanges.pipe(debounceTime(this.debounceTime), distinctUntilChanged(), tap((search) => this.searchTermAvailable = search)).subscribe();
|
|
118
|
+
this.selectedSearchInputControl
|
|
119
|
+
.valueChanges.pipe(debounceTime(this.debounceTime), distinctUntilChanged(), tap((search) => this.searchTermSelected = search)).subscribe();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Move all items from available to selected
|
|
123
|
+
*/
|
|
124
|
+
moveAllItemsToSelected() {
|
|
125
|
+
this.toastr.clear();
|
|
126
|
+
if (!this.availableItems.length) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (this.maxSelectableItems && (this.availableItems.length + this.selectedItems.length > this.maxSelectableItems)) {
|
|
130
|
+
this.toastr.info('Only ' + this.maxSelectableItems + ' items may be added to ' + this.selectedText, '', { disableTimeOut: false, timeOut: 5000 });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.selectedItems = [...this.selectedItems, ...this.availableItems];
|
|
134
|
+
this.availableItems = [];
|
|
135
|
+
this.onItemsMoved.emit({
|
|
136
|
+
available: this.availableItems,
|
|
137
|
+
selected: this.selectedItems,
|
|
138
|
+
movedItems: this.availableListBoxControl.value,
|
|
139
|
+
from: 'available',
|
|
140
|
+
to: 'selected'
|
|
141
|
+
});
|
|
142
|
+
this.availableListBoxControl.setValue([]);
|
|
143
|
+
this.writeValue(this.getValues());
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Move all items from selected to available
|
|
147
|
+
*/
|
|
148
|
+
moveAllItemsToAvailable() {
|
|
149
|
+
this.toastr.clear();
|
|
150
|
+
if (!this.selectedItems.length) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
this.availableItems = [...this.availableItems, ...this.selectedItems];
|
|
154
|
+
this.selectedItems = [];
|
|
155
|
+
this.onItemsMoved.emit({
|
|
156
|
+
available: this.availableItems,
|
|
157
|
+
selected: this.selectedItems,
|
|
158
|
+
movedItems: this.selectedListBoxControl.value,
|
|
159
|
+
from: 'selected',
|
|
160
|
+
to: 'available'
|
|
161
|
+
});
|
|
162
|
+
this.selectedListBoxControl.setValue([]);
|
|
163
|
+
this.writeValue([]);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Move marked items from available items to selected items
|
|
167
|
+
*/
|
|
168
|
+
moveMarkedAvailableItemsToSelected() {
|
|
169
|
+
this.toastr.clear();
|
|
170
|
+
let pendingItems = intersectionWith(this.availableItems, this.availableListBoxControl.value, (item, value) => item.value === value);
|
|
171
|
+
if (this.maxSelectableItems && (pendingItems.length + this.selectedItems.length > this.maxSelectableItems)) {
|
|
172
|
+
this.toastr.info('Only ' + this.maxSelectableItems + ' items may be added to ' + this.selectedText, '', { disableTimeOut: false, timeOut: 5000 });
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// first move items to selected
|
|
176
|
+
this.selectedItems = [...this.selectedItems,
|
|
177
|
+
...intersectionWith(this.availableItems, this.availableListBoxControl.value, (item, value) => item.value === value)];
|
|
178
|
+
// now filter available items to not include marked values
|
|
179
|
+
this.availableItems = [...differenceWith(this.availableItems, this.availableListBoxControl.value, (item, value) => item.value === value)];
|
|
180
|
+
// clear marked available items and emit event
|
|
181
|
+
this.onItemsMoved.emit({
|
|
182
|
+
available: this.availableItems,
|
|
183
|
+
selected: this.selectedItems,
|
|
184
|
+
movedItems: this.availableListBoxControl.value,
|
|
185
|
+
from: 'available',
|
|
186
|
+
to: 'selected'
|
|
187
|
+
});
|
|
188
|
+
this.availableListBoxControl.setValue([]);
|
|
189
|
+
this.availableSearchInputControl.setValue('');
|
|
190
|
+
this.writeValue(this.getValues());
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Move marked items from selected items to available items
|
|
194
|
+
*/
|
|
195
|
+
moveMarkedSelectedItemsToAvailable() {
|
|
196
|
+
this.toastr.clear();
|
|
197
|
+
// first move items to available
|
|
198
|
+
this.availableItems = [...this.availableItems,
|
|
199
|
+
...intersectionWith(this.selectedItems, this.selectedListBoxControl.value, (item, value) => item.value === value)];
|
|
200
|
+
// now filter available items to not include marked values
|
|
201
|
+
this.selectedItems = [...differenceWith(this.selectedItems, this.selectedListBoxControl.value, (item, value) => item.value === value)];
|
|
202
|
+
// clear marked available items and emit event
|
|
203
|
+
this.onItemsMoved.emit({
|
|
204
|
+
available: this.availableItems,
|
|
205
|
+
selected: this.selectedItems,
|
|
206
|
+
movedItems: this.selectedListBoxControl.value,
|
|
207
|
+
from: 'selected',
|
|
208
|
+
to: 'available'
|
|
209
|
+
});
|
|
210
|
+
this.selectedListBoxControl.setValue([]);
|
|
211
|
+
this.selectedSearchInputControl.setValue('');
|
|
212
|
+
this.writeValue(this.getValues());
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Move single item from available to selected
|
|
216
|
+
* @param item
|
|
217
|
+
*/
|
|
218
|
+
moveAvailableItemToSelected(item) {
|
|
219
|
+
this.availableItems = this.availableItems.filter((listItem) => listItem.value !== item.value);
|
|
220
|
+
this.selectedItems = [...this.selectedItems, item];
|
|
221
|
+
this.onItemsMoved.emit({
|
|
222
|
+
available: this.availableItems,
|
|
223
|
+
selected: this.selectedItems,
|
|
224
|
+
movedItems: [item.value],
|
|
225
|
+
from: 'available',
|
|
226
|
+
to: 'selected'
|
|
227
|
+
});
|
|
228
|
+
this.availableSearchInputControl.setValue('');
|
|
229
|
+
this.availableListBoxControl.setValue([]);
|
|
230
|
+
this.writeValue(this.getValues());
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Move single item from selected to available
|
|
234
|
+
* @param item
|
|
235
|
+
*/
|
|
236
|
+
moveSelectedItemToAvailable(item) {
|
|
237
|
+
this.selectedItems = this.selectedItems.filter((listItem) => listItem.value !== item.value);
|
|
238
|
+
this.availableItems = [...this.availableItems, item];
|
|
239
|
+
this.onItemsMoved.emit({
|
|
240
|
+
available: this.availableItems,
|
|
241
|
+
selected: this.selectedItems,
|
|
242
|
+
movedItems: [item.value],
|
|
243
|
+
from: 'selected',
|
|
244
|
+
to: 'available'
|
|
245
|
+
});
|
|
246
|
+
this.selectedSearchInputControl.setValue('');
|
|
247
|
+
this.selectedListBoxControl.setValue([]);
|
|
248
|
+
this.writeValue(this.getValues());
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Function to pass to ngFor to improve performance, tracks items
|
|
252
|
+
* by the value field
|
|
253
|
+
* @param index
|
|
254
|
+
* @param item
|
|
255
|
+
*/
|
|
256
|
+
trackByValue(index, item) {
|
|
257
|
+
return item[this.valueField];
|
|
258
|
+
}
|
|
259
|
+
/* Methods from ControlValueAccessor interface, required for ngModel and formControlName - begin */
|
|
260
|
+
writeValue(value) {
|
|
261
|
+
if (this.selectedItems && value && value.length > 0) {
|
|
262
|
+
this.selectedItems = [...this.selectedItems,
|
|
263
|
+
...intersectionWith(this.availableItems, value, (item, val) => item.value === val)];
|
|
264
|
+
this.availableItems = [...differenceWith(this.availableItems, value, (item, val) => item.value === val)];
|
|
265
|
+
}
|
|
266
|
+
this._onChange(value);
|
|
267
|
+
}
|
|
268
|
+
registerOnChange(fn) {
|
|
269
|
+
this._onChange = fn;
|
|
270
|
+
}
|
|
271
|
+
registerOnTouched(fn) {
|
|
272
|
+
this._onTouched = fn;
|
|
273
|
+
}
|
|
274
|
+
/* Methods from ControlValueAccessor interface, required for ngModel and formControlName - end */
|
|
275
|
+
/**
|
|
276
|
+
* Utility method to get values from
|
|
277
|
+
* selected items
|
|
278
|
+
*/
|
|
279
|
+
getValues() {
|
|
280
|
+
return (this.selectedItems || []).map((item) => item.value);
|
|
281
|
+
}
|
|
282
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DualListBoxComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
|
|
283
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DualListBoxComponent, selector: "oepa-dual-list-box", inputs: { available: "available", selected: "selected", availableSearch: "availableSearch", selectedSearch: "selectedSearch", valueField: "valueField", textField: "textField", title: "title", debounceTime: "debounceTime", moveAllButton: "moveAllButton", availableText: "availableText", selectedText: "selectedText", availableFilterPlaceholder: "availableFilterPlaceholder", selectedFilterPlaceholder: "selectedFilterPlaceholder", idField: "idField", disabled: "disabled", listSize: "listSize", sortBy: "sortBy", maxSelectableItems: "maxSelectableItems" }, outputs: { onAvailableItemSelected: "onAvailableItemSelected", onSelectedItemsSelected: "onSelectedItemsSelected", onItemsMoved: "onItemsMoved" }, providers: [{
|
|
284
|
+
provide: NG_VALUE_ACCESSOR,
|
|
285
|
+
useExisting: forwardRef(() => DualListBoxComponent),
|
|
286
|
+
multi: true
|
|
287
|
+
}], ngImport: i0, template: "<div class=\"row\" [formGroup]=\"listBoxForm\">\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{availableText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{availableFilterPlaceholder}}\"\n formControlName=\"availableSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"availableListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of availableItems | arrayFilter:['text', searchTermAvailable] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n [id]=\"item?.value+'Option'\"\n (dblclick)=\"moveAvailableItemToSelected(item)\">{{item?.text}}</option>\n </select>\n </div>\n <div class=\"col-md-2 col-lg-2 col-sm-12 center-block text-center\">\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atr top80 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToSelected()\">\n <span class=\"bi bi-list-task\"></span>\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 str vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !availableListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneBtn'\"\n (click)=\"moveMarkedAvailableItemsToSelected()\">\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 stl vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !selectedListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneLeftBtn'\"\n (click)=\"moveMarkedSelectedItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atl bottom10 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllLeftBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n <span class=\"bi bi-list-task\"></span>\n </button>\n </div>\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{selectedText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{selectedFilterPlaceholder}}\"\n formControlName=\"selectedSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"selectedListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of selectedItems | arrayFilter:['text', searchTermSelected] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n (dblclick)=\"moveSelectedItemToAvailable(item)\">{{item?.text}}</option>\n </select>\n </div>\n</div>\n", styles: [".list-box{min-height:200px;width:100%}.top100{margin-top:100px}.top80{margin-top:80px}.bottom10{margin-bottom:10px}.vertical-spacing-5{margin-top:5px;margin-bottom:5px}.center-block{min-height:50px}@media only screen and (max-width : 768px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (min-width : 768px) and (max-width : 992px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (max-width : 480px){.sm-spacing{margin-top:10px;margin-bottom:10px}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4.ArrayFilterPipe, name: "arrayFilter" }, { kind: "pipe", type: i4.ArraySortPipe, name: "arraySort" }] });
|
|
288
|
+
}
|
|
289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DualListBoxComponent, decorators: [{
|
|
290
|
+
type: Component,
|
|
291
|
+
args: [{ selector: 'oepa-dual-list-box', providers: [{
|
|
292
|
+
provide: NG_VALUE_ACCESSOR,
|
|
293
|
+
useExisting: forwardRef(() => DualListBoxComponent),
|
|
294
|
+
multi: true
|
|
295
|
+
}], template: "<div class=\"row\" [formGroup]=\"listBoxForm\">\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{availableText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{availableFilterPlaceholder}}\"\n formControlName=\"availableSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"availableListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of availableItems | arrayFilter:['text', searchTermAvailable] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n [id]=\"item?.value+'Option'\"\n (dblclick)=\"moveAvailableItemToSelected(item)\">{{item?.text}}</option>\n </select>\n </div>\n <div class=\"col-md-2 col-lg-2 col-sm-12 center-block text-center\">\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atr top80 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToSelected()\">\n <span class=\"bi bi-list-task\"></span>\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 str vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !availableListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneBtn'\"\n (click)=\"moveMarkedAvailableItemsToSelected()\">\n <span class=\"bi bi-chevron-right\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 stl vertical-spacing-5 sm-spacing\"\n [disabled]=\"listBoxForm.disabled || !selectedListBoxControl.value?.length\"\n [id]=\"idField+'MoveOneLeftBtn'\"\n (click)=\"moveMarkedSelectedItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary col-md-8 col-md-offset-2 atl bottom10 sm-spacing\"\n [disabled]=\"listBoxForm.disabled\"\n [id]=\"idField+'MoveAllLeftBtn'\"\n *ngIf=\"moveAllButton\" (click)=\"moveAllItemsToAvailable()\">\n <span class=\"bi bi-chevron-left\"></span>\n <span class=\"bi bi-list-task\"></span>\n </button>\n </div>\n <div class=\"col-md-5 col-lg-5 col-sm-12\">\n <h4 class=\"text-center vertical-spacing-5\">{{selectedText}}</h4>\n <input type=\"text\" class=\"form-control vertical-spacing-5\" placeholder=\"{{selectedFilterPlaceholder}}\"\n formControlName=\"selectedSearchInput\" />\n <select class=\"form-control list-box\" formControlName=\"selectedListBox\" multiple [size]=\"listSize\">\n <option *ngFor=\"let item of selectedItems | arrayFilter:['text', searchTermSelected] | arraySort:[sortBy, 'ASC'];trackBy:trackByValue\"\n [value]=\"item?.value\"\n (dblclick)=\"moveSelectedItemToAvailable(item)\">{{item?.text}}</option>\n </select>\n </div>\n</div>\n", styles: [".list-box{min-height:200px;width:100%}.top100{margin-top:100px}.top80{margin-top:80px}.bottom10{margin-bottom:10px}.vertical-spacing-5{margin-top:5px;margin-bottom:5px}.center-block{min-height:50px}@media only screen and (max-width : 768px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (min-width : 768px) and (max-width : 992px){.sm-spacing{margin-top:10px;margin-bottom:10px}}@media only screen and (max-width : 480px){.sm-spacing{margin-top:10px;margin-bottom:10px}}\n"] }]
|
|
296
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToastrService }], propDecorators: { available: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], selected: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], availableSearch: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], selectedSearch: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], valueField: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], textField: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], title: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], debounceTime: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], moveAllButton: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], availableText: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], selectedText: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], availableFilterPlaceholder: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], selectedFilterPlaceholder: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], idField: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}], disabled: [{
|
|
325
|
+
type: Input
|
|
326
|
+
}], listSize: [{
|
|
327
|
+
type: Input
|
|
328
|
+
}], sortBy: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], maxSelectableItems: [{
|
|
331
|
+
type: Input
|
|
332
|
+
}], onAvailableItemSelected: [{
|
|
333
|
+
type: Output
|
|
334
|
+
}], onSelectedItemsSelected: [{
|
|
335
|
+
type: Output
|
|
336
|
+
}], onItemsMoved: [{
|
|
337
|
+
type: Output
|
|
338
|
+
}] } });
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1saXN0LWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvZHVhbC1saXN0LWJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvZHVhbC1saXN0LWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQTBCLFdBQVcsRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsWUFBWSxFQUFPLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTlFLE9BQU8sZ0JBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUVuRDs7O0dBR0c7QUFZSCxNQUFNLE9BQU8sb0JBQW9CO0lBb0ZaO0lBQXlCO0lBbEY1Qyx3Q0FBd0M7SUFDeEMsSUFBYSxTQUFTLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFBQSxDQUFDO0lBQ0YseUNBQXlDO0lBQ3pDLElBQWEsUUFBUSxDQUFDLEtBQWlCO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDdkMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBQUEsQ0FBQztJQUNGLG1FQUFtRTtJQUNuRSxJQUFhLGVBQWUsQ0FBQyxVQUFrQjtRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUFBLENBQUM7SUFDRixrRUFBa0U7SUFDbEUsSUFBYSxjQUFjLENBQUMsVUFBa0I7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFBQSxDQUFDO0lBQ0YsbUNBQW1DO0lBQzFCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsMENBQTBDO0lBQ2pDLFNBQVMsR0FBRyxNQUFNLENBQUM7SUFDNUIsMkNBQTJDO0lBQ2xDLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDNUIsdUNBQXVDO0lBQzlCLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDNUIsbURBQW1EO0lBQzFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDOUIsbURBQW1EO0lBQzFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztJQUMzQyxrREFBa0Q7SUFDekMsWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3pDLG1EQUFtRDtJQUMxQywwQkFBMEIsR0FBRSxXQUFXLENBQUM7SUFDakQsa0RBQWtEO0lBQ3pDLHlCQUF5QixHQUFHLFdBQVcsQ0FBQztJQUNqRCwyQkFBMkI7SUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixvQkFBb0I7SUFDcEIsSUFBYSxRQUFRLENBQUMsUUFBaUI7UUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNRLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFFZCxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBRWhCLGtCQUFrQixHQUF1QixTQUFTLENBQUM7SUFFNUQsNkVBQTZFO0lBQ25FLHVCQUF1QixHQUFpQyxJQUFJLFlBQVksRUFBa0IsQ0FBQztJQUNyRyw2RUFBNkU7SUFDbkUsdUJBQXVCLEdBQWlDLElBQUksWUFBWSxFQUFrQixDQUFDO0lBQ3JHLDhGQUE4RjtJQUNwRixZQUFZLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRTlGLG9DQUFvQztJQUNwQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7SUFDekIsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsR0FBd0IsRUFBRSxDQUFDO0lBQ3pDLGFBQWEsR0FBd0IsRUFBRSxDQUFDO0lBQ3hDLFdBQVcsQ0FBWTtJQUN2Qix1QkFBdUIsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN6RCxzQkFBc0IsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN4RCwyQkFBMkIsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUM3RCwwQkFBMEIsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUU1RCwwQkFBMEI7SUFDMUIsU0FBUyxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUIsVUFBVSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV2QixZQUFtQixFQUFlLEVBQVUsTUFBcUI7UUFBOUMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM3QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQzlDLGVBQWUsRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQzVDLG9CQUFvQixFQUFFLElBQUksQ0FBQywyQkFBMkI7WUFDdEQsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtTQUN2RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyx1QkFBdUI7YUFDdkIsWUFBWTthQUNaLFNBQVMsQ0FBQyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsc0JBQXNCO2FBQ3RCLFlBQVk7YUFDWixTQUFTLENBQUMsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLDJCQUEyQjthQUMzQixZQUFZLENBQUMsSUFBSSxDQUNkLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQy9CLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUM3RCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQywwQkFBMEI7YUFDMUIsWUFBWSxDQUFDLElBQUksQ0FDZCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUMvQixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FDNUQsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUNsSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHlCQUF5QixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsSixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUs7WUFDOUMsSUFBSSxFQUFFLFdBQVc7WUFDakIsRUFBRSxFQUFFLFVBQVU7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QjtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzVCLFVBQVUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSztZQUM3QyxJQUFJLEVBQUUsVUFBVTtZQUNoQixFQUFFLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0NBQWtDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBa0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDMUosSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDekcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEosT0FBTztRQUNULENBQUM7UUFDRCwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDdkMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQ3ZFLENBQUMsSUFBa0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFDNUYsQ0FBQyxJQUFrQixFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzVCLFVBQVUsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSztZQUM5QyxJQUFJLEVBQUUsV0FBVztZQUNqQixFQUFFLEVBQUUsVUFBVTtTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQ0FBa0M7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVsQixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWM7WUFDekMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQ3JFLENBQUMsSUFBa0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFDekYsQ0FBQyxJQUFrQixFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzVCLFVBQVUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSztZQUM3QyxJQUFJLEVBQUUsVUFBVTtZQUNoQixFQUFFLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsMkJBQTJCLENBQUMsSUFBa0I7UUFFMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQXNCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUM1QixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksRUFBRSxXQUFXO1lBQ2pCLEVBQUUsRUFBRSxVQUFVO1NBQ2pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCwyQkFBMkIsQ0FBQyxJQUFrQjtRQUUxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBc0IsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzVCLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDeEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsRUFBRSxFQUFFLFdBQVc7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLEtBQWEsRUFBRSxJQUFTO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsbUdBQW1HO0lBQ25HLFVBQVUsQ0FBQyxLQUFVO1FBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYTtnQkFDdkMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQWtCLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUMvRCxDQUFDLElBQWtCLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWtCO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFZO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxpR0FBaUc7SUFFakc7OztPQUdHO0lBQ0ssU0FBUztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO3dHQXBTVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiw0dUJBTnBCLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLElBQUk7YUFDZCxDQUFDLDBCQ3ZCSix5ekdBdURBOzs0RkQ5QmEsb0JBQW9CO2tCQVZoQyxTQUFTOytCQUNFLG9CQUFvQixhQUduQixDQUFDOzRCQUNSLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDOzRHQUtXLFNBQVM7c0JBQXJCLEtBQUs7Z0JBT08sUUFBUTtzQkFBcEIsS0FBSztnQkFPTyxlQUFlO3NCQUEzQixLQUFLO2dCQUtPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFFRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUdJLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdmFyIHJlcXVpcmU6IGFueTtcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IElJdGVtc01vdmVkRXZlbnQgfSBmcm9tICcuL2l0ZW1zLW1vdmVkLWV2ZW50JztcbmltcG9ydCB7IElMaXN0Qm94SXRlbSB9IGZyb20gJy4vbGlzdC1ib3gtaXRlbSc7XG5pbXBvcnQgaW50ZXJzZWN0aW9uV2l0aCBmcm9tICdsb2Rhc2gvaW50ZXJzZWN0aW9uV2l0aCc7XG5pbXBvcnQgZGlmZmVyZW5jZVdpdGggZnJvbSAnbG9kYXNoL2RpZmZlcmVuY2VXaXRoJztcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGNvZGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0OiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9uZzItZHVhbC1saXN0LWJveFxuICogTElDRU5TRTogTUlUIMKpIFtFbGRhciBHcmFudWxvXShtYWlsdG86ZWxkYXIzMkBnbWFpbC5jb20pXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1kdWFsLWxpc3QtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R1YWwtbGlzdC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kdWFsLWxpc3QtYm94LmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbe1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEdWFsTGlzdEJveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBEdWFsTGlzdEJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIC8vIGFycmF5IG9mIGl0ZW1zIHRvIGRpc3BsYXkgaW4gbGVmdCBib3hcbiAgQElucHV0KCkgc2V0IGF2YWlsYWJsZShpdGVtczogQXJyYXk8YW55Pikge1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi4oaXRlbXMgfHwgW10pLm1hcCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgIHZhbHVlOiBpdGVtW3RoaXMudmFsdWVGaWVsZF0udG9TdHJpbmcoKSxcbiAgICAgICAgICB0ZXh0OiBpdGVtW3RoaXMudGV4dEZpZWxkXVxuICAgICAgfSkpXTtcbiAgfTtcbiAgLy8gYXJyYXkgb2YgaXRlbXMgdG8gZGlzcGxheSBpbiByaWdodCBib3hcbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4uKGl0ZW1zIHx8IFtdKS5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogaXRlbVt0aGlzLnZhbHVlRmllbGRdLnRvU3RyaW5nKCksXG4gICAgICAgICAgdGV4dDogaXRlbVt0aGlzLnRleHRGaWVsZF1cbiAgICAgIH0pKV07XG4gIH07XG4gIC8vIGlucHV0IHRvIHNldCBzZWFyY2ggdGVybSBmb3IgYXZhaWxhYmxlIGxpc3QgYm94IGZyb20gdGhlIG91dHNpZGVcbiAgQElucHV0KCkgc2V0IGF2YWlsYWJsZVNlYXJjaChzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybUF2YWlsYWJsZSA9IHNlYXJjaFRlcm07XG4gICAgICB0aGlzLmF2YWlsYWJsZVNlYXJjaElucHV0Q29udHJvbC5zZXRWYWx1ZShzZWFyY2hUZXJtKTtcbiAgfTtcbiAgLy8gaW5wdXQgdG8gc2V0IHNlYXJjaCB0ZXJtIGZvciBzZWxlY3RlZCBsaXN0IGJveCBmcm9tIHRoZSBvdXRzaWRlXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZFNlYXJjaChzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybVNlbGVjdGVkID0gc2VhcmNoVGVybTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hJbnB1dENvbnRyb2wuc2V0VmFsdWUoc2VhcmNoVGVybSk7XG4gIH07XG4gIC8vIGZpZWxkIHRvIHVzZSBmb3IgdmFsdWUgb2Ygb3B0aW9uXG4gIEBJbnB1dCgpIHZhbHVlRmllbGQgPSAnaWQnO1xuICAvLyBmaWVsZCB0byB1c2UgZm9yIGRpc3BsYXlpbmcgb3B0aW9uIHRleHRcbiAgQElucHV0KCkgdGV4dEZpZWxkID0gJ25hbWUnO1xuICAvLyB0ZXh0IHRvIGRpc3BsYXkgYXMgdGl0bGUgYWJvdmUgY29tcG9uZW50XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgLy8gdGltZSB0byBkZWJvdW5jZSBzZWFyY2ggb3V0cHV0IGluIG1zXG4gIEBJbnB1dCgpIGRlYm91bmNlVGltZSA9IDUwMDtcbiAgLy8gc2hvdy9oaWRlIGJ1dHRvbiB0byBtb3ZlIGFsbCBpdGVtcyBiZXR3ZWVuIGJveGVzXG4gIEBJbnB1dCgpIG1vdmVBbGxCdXR0b24gPSB0cnVlO1xuICAvLyB0ZXh0IGRpc3BsYXllZCBvdmVyIHRoZSBhdmFpbGFibGUgaXRlbXMgbGlzdCBib3hcbiAgQElucHV0KCkgYXZhaWxhYmxlVGV4dCA9ICdBdmFpbGFibGUgaXRlbXMnO1xuICAvLyB0ZXh0IGRpc3BsYXllZCBvdmVyIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0IGJveFxuICBASW5wdXQoKSBzZWxlY3RlZFRleHQgPSAnU2VsZWN0ZWQgaXRlbXMnO1xuICAvLyBzZXQgcGxhY2Vob2xkZXIgdGV4dCBpbiBhdmFpbGFibGUgaXRlbXMgbGlzdCBib3hcbiAgQElucHV0KCkgYXZhaWxhYmxlRmlsdGVyUGxhY2Vob2xkZXI9ICdGaWx0ZXIuLi4nO1xuICAvLyBzZXQgcGxhY2Vob2xkZXIgdGV4dCBpbiBzZWxlY3RlZCBpdGVtcyBsaXN0IGJveFxuICBASW5wdXQoKSBzZWxlY3RlZEZpbHRlclBsYWNlaG9sZGVyID0gJ0ZpbHRlci4uLic7XG4gIC8vIGZpZWxkIHRvIHVzZSBmb3IgaHRtbCBpZFxuICBASW5wdXQoKSBpZEZpZWxkID0gJ2lkJztcbiAgLy8gZGlzYWJsZSBjb21wb25lbnRcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICBpZiAodGhpcy5saXN0Qm94Rm9ybSkge1xuICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICB0aGlzLmxpc3RCb3hGb3JtLmRpc2FibGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxpc3RCb3hGb3JtLmVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBASW5wdXQoKSBsaXN0U2l6ZSA9IDEwO1xuXG4gIEBJbnB1dCgpIHNvcnRCeSA9ICd0ZXh0JztcblxuICBASW5wdXQoKSBtYXhTZWxlY3RhYmxlSXRlbXM6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvLyBldmVudCBjYWxsZWQgd2hlbiBpdGVtIG9yIGl0ZW1zIGZyb20gYXZhaWxhYmxlIGl0ZW1zKGxlZnQgYm94KSBpcyBzZWxlY3RlZFxuICBAT3V0cHV0KCkgb25BdmFpbGFibGVJdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjx7fSB8IEFycmF5PHt9Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPHt9IHwgQXJyYXk8e30+PigpO1xuICAvLyBldmVudCBjYWxsZWQgd2hlbiBpdGVtIG9yIGl0ZW1zIGZyb20gc2VsZWN0ZWQgaXRlbXMocmlnaHQgYm94KSBpcyBzZWxlY3RlZFxuICBAT3V0cHV0KCkgb25TZWxlY3RlZEl0ZW1zU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjx7fSB8IEFycmF5PHt9Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPHt9IHwgQXJyYXk8e30+PigpO1xuICAvLyBldmVudCBjYWxsZWQgd2hlbiBpdGVtcyBhcmUgbW92ZWQgYmV0d2VlbiBib3hlcywgcmV0dXJucyBzdGF0ZSBvZiBib3RoIGJveGVzIGFuZCBpdGVtIG1vdmVkXG4gIEBPdXRwdXQoKSBvbkl0ZW1zTW92ZWQ6IEV2ZW50RW1pdHRlcjxJSXRlbXNNb3ZlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUl0ZW1zTW92ZWRFdmVudD4oKTtcblxuICAvLyBwcml2YXRlIHZhcmlhYmxlcyB0byBtYW5hZ2UgY2xhc3NcbiAgc2VhcmNoVGVybUF2YWlsYWJsZSA9ICcnO1xuICBzZWFyY2hUZXJtU2VsZWN0ZWQgPSAnJztcbiAgYXZhaWxhYmxlSXRlbXM6IEFycmF5PElMaXN0Qm94SXRlbT4gPSBbXTtcbiAgc2VsZWN0ZWRJdGVtczogQXJyYXk8SUxpc3RCb3hJdGVtPiA9IFtdO1xuICBsaXN0Qm94Rm9ybTogRm9ybUdyb3VwO1xuICBhdmFpbGFibGVMaXN0Qm94Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgc2VsZWN0ZWRMaXN0Qm94Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBzZWxlY3RlZFNlYXJjaElucHV0Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvLyBjb250cm9sIHZhbHVlIGFjY2Vzc29yc1xuICBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gIF9vblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cbiAgY29uc3RydWN0b3IocHVibGljIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UpIHsgXG4gICAgdGhpcy5saXN0Qm94Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBhdmFpbGFibGVMaXN0Qm94OiB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLFxuICAgICAgICBzZWxlY3RlZExpc3RCb3g6IHRoaXMuc2VsZWN0ZWRMaXN0Qm94Q29udHJvbCxcbiAgICAgICAgYXZhaWxhYmxlU2VhcmNoSW5wdXQ6IHRoaXMuYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sLFxuICAgICAgICBzZWxlY3RlZFNlYXJjaElucHV0OiB0aGlzLnNlbGVjdGVkU2VhcmNoSW5wdXRDb250cm9sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sXG4gICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IEFycmF5PHt9PikgPT4gdGhpcy5vbkF2YWlsYWJsZUl0ZW1TZWxlY3RlZC5lbWl0KGl0ZW1zKSk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3RCb3hDb250cm9sXG4gICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IEFycmF5PHt9PikgPT4gdGhpcy5vblNlbGVjdGVkSXRlbXNTZWxlY3RlZC5lbWl0KGl0ZW1zKSk7XG4gICAgdGhpcy5hdmFpbGFibGVTZWFyY2hJbnB1dENvbnRyb2xcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICB0YXAoKHNlYXJjaDogc3RyaW5nKSA9PiB0aGlzLnNlYXJjaFRlcm1BdmFpbGFibGUgPSBzZWFyY2gpXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaElucHV0Q29udHJvbFxuICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHRhcCgoc2VhcmNoOiBzdHJpbmcpID0+IHRoaXMuc2VhcmNoVGVybVNlbGVjdGVkID0gc2VhcmNoKVxuICAgICAgICApLnN1YnNjcmliZSgpO1xuICB9XG4gIC8qKlxuICAgKiBNb3ZlIGFsbCBpdGVtcyBmcm9tIGF2YWlsYWJsZSB0byBzZWxlY3RlZFxuICAgKi9cbiAgbW92ZUFsbEl0ZW1zVG9TZWxlY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0ci5jbGVhcigpO1xuICAgICAgaWYgKCF0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1heFNlbGVjdGFibGVJdGVtcyAmJiAodGhpcy5hdmFpbGFibGVJdGVtcy5sZW5ndGggKyB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdGhpcy5tYXhTZWxlY3RhYmxlSXRlbXMpKSB7XG4gICAgICAgIHRoaXMudG9hc3RyLmluZm8oJ09ubHkgJyArIHRoaXMubWF4U2VsZWN0YWJsZUl0ZW1zICsgJyBpdGVtcyBtYXkgYmUgYWRkZWQgdG8gJyArIHRoaXMuc2VsZWN0ZWRUZXh0LCAnJywgeyBkaXNhYmxlVGltZU91dDogZmFsc2UsIHRpbWVPdXQ6IDUwMDAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkSXRlbXMsIC4uLnRoaXMuYXZhaWxhYmxlSXRlbXNdO1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5vbkl0ZW1zTW92ZWQuZW1pdCh7XG4gICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgbW92ZWRJdGVtczogdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICBmcm9tOiAnYXZhaWxhYmxlJyxcbiAgICAgICAgICB0bzogJ3NlbGVjdGVkJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmdldFZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFsbCBpdGVtcyBmcm9tIHNlbGVjdGVkIHRvIGF2YWlsYWJsZVxuICAgKi9cbiAgbW92ZUFsbEl0ZW1zVG9BdmFpbGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2FzdHIuY2xlYXIoKTtcblxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zLCAuLi50aGlzLnNlbGVjdGVkSXRlbXNdO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLm9uSXRlbXNNb3ZlZC5lbWl0KHtcbiAgICAgICAgICBhdmFpbGFibGU6IHRoaXMuYXZhaWxhYmxlSXRlbXMsXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICBtb3ZlZEl0ZW1zOiB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWUsXG4gICAgICAgICAgZnJvbTogJ3NlbGVjdGVkJyxcbiAgICAgICAgICB0bzogJ2F2YWlsYWJsZSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZExpc3RCb3hDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShbXSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBtYXJrZWQgaXRlbXMgZnJvbSBhdmFpbGFibGUgaXRlbXMgdG8gc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIG1vdmVNYXJrZWRBdmFpbGFibGVJdGVtc1RvU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy50b2FzdHIuY2xlYXIoKTtcbiAgICBsZXQgcGVuZGluZ0l0ZW1zID0gaW50ZXJzZWN0aW9uV2l0aCh0aGlzLmF2YWlsYWJsZUl0ZW1zLCB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnZhbHVlLCAoaXRlbTogSUxpc3RCb3hJdGVtLCB2YWx1ZTogc3RyaW5nKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0YWJsZUl0ZW1zICYmIChwZW5kaW5nSXRlbXMubGVuZ3RoICsgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IHRoaXMubWF4U2VsZWN0YWJsZUl0ZW1zKSkge1xuICAgICAgICB0aGlzLnRvYXN0ci5pbmZvKCdPbmx5ICcgKyB0aGlzLm1heFNlbGVjdGFibGVJdGVtcyArICcgaXRlbXMgbWF5IGJlIGFkZGVkIHRvICcgKyB0aGlzLnNlbGVjdGVkVGV4dCwgJycsIHsgZGlzYWJsZVRpbWVPdXQ6IGZhbHNlLCB0aW1lT3V0OiA1MDAwIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaXJzdCBtb3ZlIGl0ZW1zIHRvIHNlbGVjdGVkXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgIC4uLmludGVyc2VjdGlvbldpdGgodGhpcy5hdmFpbGFibGVJdGVtcywgdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgICAgKGl0ZW06IElMaXN0Qm94SXRlbSwgdmFsdWU6IHN0cmluZykgPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUpXTtcbiAgICAgIC8vIG5vdyBmaWx0ZXIgYXZhaWxhYmxlIGl0ZW1zIHRvIG5vdCBpbmNsdWRlIG1hcmtlZCB2YWx1ZXNcbiAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4uZGlmZmVyZW5jZVdpdGgodGhpcy5hdmFpbGFibGVJdGVtcywgdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICAoaXRlbTogSUxpc3RCb3hJdGVtLCB2YWx1ZTogc3RyaW5nKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSldO1xuICAgICAgLy8gY2xlYXIgbWFya2VkIGF2YWlsYWJsZSBpdGVtcyBhbmQgZW1pdCBldmVudFxuICAgICAgdGhpcy5vbkl0ZW1zTW92ZWQuZW1pdCh7XG4gICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgbW92ZWRJdGVtczogdGhpcy5hdmFpbGFibGVMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICBmcm9tOiAnYXZhaWxhYmxlJyxcbiAgICAgICAgICB0bzogJ3NlbGVjdGVkJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLmF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmdldFZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIG1hcmtlZCBpdGVtcyBmcm9tIHNlbGVjdGVkIGl0ZW1zIHRvIGF2YWlsYWJsZSBpdGVtc1xuICAgKi9cbiAgbW92ZU1hcmtlZFNlbGVjdGVkSXRlbXNUb0F2YWlsYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0ci5jbGVhcigpO1xuXG4gICAgICAvLyBmaXJzdCBtb3ZlIGl0ZW1zIHRvIGF2YWlsYWJsZVxuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIC4uLmludGVyc2VjdGlvbldpdGgodGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICAgIChpdGVtOiBJTGlzdEJveEl0ZW0sIHZhbHVlOiBzdHJpbmcpID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKV07XG4gICAgICAvLyBub3cgZmlsdGVyIGF2YWlsYWJsZSBpdGVtcyB0byBub3QgaW5jbHVkZSBtYXJrZWQgdmFsdWVzXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4uZGlmZmVyZW5jZVdpdGgodGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWUsXG4gICAgICAgICAgKGl0ZW06IElMaXN0Qm94SXRlbSwgdmFsdWU6IHN0cmluZykgPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUpXTtcbiAgICAgIC8vIGNsZWFyIG1hcmtlZCBhdmFpbGFibGUgaXRlbXMgYW5kIGVtaXQgZXZlbnRcbiAgICAgIHRoaXMub25JdGVtc01vdmVkLmVtaXQoe1xuICAgICAgICAgIGF2YWlsYWJsZTogdGhpcy5hdmFpbGFibGVJdGVtcyxcbiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgIG1vdmVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRMaXN0Qm94Q29udHJvbC52YWx1ZSxcbiAgICAgICAgICBmcm9tOiAnc2VsZWN0ZWQnLFxuICAgICAgICAgIHRvOiAnYXZhaWxhYmxlJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdEJveENvbnRyb2wuc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaElucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5nZXRWYWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBzaW5nbGUgaXRlbSBmcm9tIGF2YWlsYWJsZSB0byBzZWxlY3RlZFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgbW92ZUF2YWlsYWJsZUl0ZW1Ub1NlbGVjdGVkKGl0ZW06IElMaXN0Qm94SXRlbSk6IHZvaWQge1xuXG4gICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maWx0ZXIoKGxpc3RJdGVtOiBJTGlzdEJveEl0ZW0pID0+IGxpc3RJdGVtLnZhbHVlICE9PSBpdGVtLnZhbHVlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkSXRlbXMsIGl0ZW1dO1xuICAgICAgdGhpcy5vbkl0ZW1zTW92ZWQuZW1pdCh7XG4gICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgbW92ZWRJdGVtczogW2l0ZW0udmFsdWVdLFxuICAgICAgICAgIGZyb206ICdhdmFpbGFibGUnLFxuICAgICAgICAgIHRvOiAnc2VsZWN0ZWQnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlU2VhcmNoSW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGlzdEJveENvbnRyb2wuc2V0VmFsdWUoW10pO1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuZ2V0VmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgc2luZ2xlIGl0ZW0gZnJvbSBzZWxlY3RlZCB0byBhdmFpbGFibGVcbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIG1vdmVTZWxlY3RlZEl0ZW1Ub0F2YWlsYWJsZShpdGVtOiBJTGlzdEJveEl0ZW0pOiB2b2lkIHtcblxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigobGlzdEl0ZW06IElMaXN0Qm94SXRlbSkgPT4gbGlzdEl0ZW0udmFsdWUgIT09IGl0ZW0udmFsdWUpO1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLmF2YWlsYWJsZUl0ZW1zLCBpdGVtXTtcbiAgICAgIHRoaXMub25JdGVtc01vdmVkLmVtaXQoe1xuICAgICAgICAgIGF2YWlsYWJsZTogdGhpcy5hdmFpbGFibGVJdGVtcyxcbiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgIG1vdmVkSXRlbXM6IFtpdGVtLnZhbHVlXSxcbiAgICAgICAgICBmcm9tOiAnc2VsZWN0ZWQnLFxuICAgICAgICAgIHRvOiAnYXZhaWxhYmxlJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoSW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0Qm94Q29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5nZXRWYWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gcGFzcyB0byBuZ0ZvciB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCB0cmFja3MgaXRlbXNcbiAgICogYnkgdGhlIHZhbHVlIGZpZWxkXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgdHJhY2tCeVZhbHVlKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xuICB9XG5cbiAgLyogTWV0aG9kcyBmcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSwgcmVxdWlyZWQgZm9yIG5nTW9kZWwgYW5kIGZvcm1Db250cm9sTmFtZSAtIGJlZ2luICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICAgLi4uaW50ZXJzZWN0aW9uV2l0aCh0aGlzLmF2YWlsYWJsZUl0ZW1zLCB2YWx1ZSwgKGl0ZW06IElMaXN0Qm94SXRlbSwgdmFsOiBzdHJpbmcpID0+IGl0ZW0udmFsdWUgPT09IHZhbCldO1xuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4uZGlmZmVyZW5jZVdpdGgodGhpcy5hdmFpbGFibGVJdGVtcywgdmFsdWUsXG4gICAgICAgICAgICAgIChpdGVtOiBJTGlzdEJveEl0ZW0sIHZhbDogc3RyaW5nKSA9PiBpdGVtLnZhbHVlID09PSB2YWwpXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHt9KTogdm9pZCB7XG4gICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XG4gICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuICAvKiBNZXRob2RzIGZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLCByZXF1aXJlZCBmb3IgbmdNb2RlbCBhbmQgZm9ybUNvbnRyb2xOYW1lIC0gZW5kICovXG5cbiAgLyoqXG4gICAqIFV0aWxpdHkgbWV0aG9kIHRvIGdldCB2YWx1ZXMgZnJvbVxuICAgKiBzZWxlY3RlZCBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSXRlbXMgfHwgW10pLm1hcCgoaXRlbTogSUxpc3RCb3hJdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIiBbZm9ybUdyb3VwXT1cImxpc3RCb3hGb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGNvbC1sZy01IGNvbC1zbS0xMlwiPlxuICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LWNlbnRlciB2ZXJ0aWNhbC1zcGFjaW5nLTVcIj57e2F2YWlsYWJsZVRleHR9fTwvaDQ+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHZlcnRpY2FsLXNwYWNpbmctNVwiIHBsYWNlaG9sZGVyPVwie3thdmFpbGFibGVGaWx0ZXJQbGFjZWhvbGRlcn19XCJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF2YWlsYWJsZVNlYXJjaElucHV0XCIgLz5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBsaXN0LWJveFwiIGZvcm1Db250cm9sTmFtZT1cImF2YWlsYWJsZUxpc3RCb3hcIiBtdWx0aXBsZSBbc2l6ZV09XCJsaXN0U2l6ZVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhdmFpbGFibGVJdGVtcyB8IGFycmF5RmlsdGVyOlsndGV4dCcsIHNlYXJjaFRlcm1BdmFpbGFibGVdIHwgYXJyYXlTb3J0Oltzb3J0QnksICdBU0MnXTt0cmFja0J5OnRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtPy52YWx1ZSsnT3B0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJtb3ZlQXZhaWxhYmxlSXRlbVRvU2VsZWN0ZWQoaXRlbSlcIj57e2l0ZW0/LnRleHR9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLWxnLTIgY29sLXNtLTEyIGNlbnRlci1ibG9jayB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNvbC1tZC04IGNvbC1tZC1vZmZzZXQtMiBhdHIgdG9wODAgc20tc3BhY2luZ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxpc3RCb3hGb3JtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWRGaWVsZCsnTW92ZUFsbEJ0bidcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW92ZUFsbEJ1dHRvblwiIChjbGljayk9XCJtb3ZlQWxsSXRlbXNUb1NlbGVjdGVkKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmkgYmktbGlzdC10YXNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBjb2wtbWQtOCBjb2wtbWQtb2Zmc2V0LTIgc3RyIHZlcnRpY2FsLXNwYWNpbmctNSBzbS1zcGFjaW5nXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGlzdEJveEZvcm0uZGlzYWJsZWQgfHwgIWF2YWlsYWJsZUxpc3RCb3hDb250cm9sLnZhbHVlPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJpZEZpZWxkKydNb3ZlT25lQnRuJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVNYXJrZWRBdmFpbGFibGVJdGVtc1RvU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBjb2wtbWQtOCBjb2wtbWQtb2Zmc2V0LTIgc3RsIHZlcnRpY2FsLXNwYWNpbmctNSBzbS1zcGFjaW5nXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGlzdEJveEZvcm0uZGlzYWJsZWQgfHwgIXNlbGVjdGVkTGlzdEJveENvbnRyb2wudmFsdWU/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkRmllbGQrJ01vdmVPbmVMZWZ0QnRuJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVNYXJrZWRTZWxlY3RlZEl0ZW1zVG9BdmFpbGFibGUoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNvbC1tZC04IGNvbC1tZC1vZmZzZXQtMiBhdGwgYm90dG9tMTAgc20tc3BhY2luZ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxpc3RCb3hGb3JtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWRGaWVsZCsnTW92ZUFsbExlZnRCdG4nXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vdmVBbGxCdXR0b25cIiAoY2xpY2spPVwibW92ZUFsbEl0ZW1zVG9BdmFpbGFibGUoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaSBiaS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJpIGJpLWxpc3QtdGFza1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IGNvbC1sZy01IGNvbC1zbS0xMlwiPlxuICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LWNlbnRlciB2ZXJ0aWNhbC1zcGFjaW5nLTVcIj57e3NlbGVjdGVkVGV4dH19PC9oND5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdmVydGljYWwtc3BhY2luZy01XCIgcGxhY2Vob2xkZXI9XCJ7e3NlbGVjdGVkRmlsdGVyUGxhY2Vob2xkZXJ9fVwiXG4gICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZFNlYXJjaElucHV0XCIgLz5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBsaXN0LWJveFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkTGlzdEJveFwiIG11bHRpcGxlIFtzaXplXT1cImxpc3RTaXplXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXMgfCBhcnJheUZpbHRlcjpbJ3RleHQnLCBzZWFyY2hUZXJtU2VsZWN0ZWRdIHwgYXJyYXlTb3J0Oltzb3J0QnksICdBU0MnXTt0cmFja0J5OnRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJtb3ZlU2VsZWN0ZWRJdGVtVG9BdmFpbGFibGUoaXRlbSlcIj57e2l0ZW0/LnRleHR9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtbW92ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2R1YWwtbGlzdC1ib3gvaXRlbXMtbW92ZWQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVscGVyIGludGVyZmFjZSB0byBlbWl0IGV2ZW50IHdoZW5cbiAqIGl0ZW1zIGFyZSBtb3ZlZCBiZXR3ZWVuIGJveGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUl0ZW1zTW92ZWRFdmVudCB7XG4gICAgYXZhaWxhYmxlOiBBcnJheTx7fT47XG4gICAgc2VsZWN0ZWQ6IEFycmF5PHt9PjtcbiAgICBtb3ZlZEl0ZW1zOiBBcnJheTx7fT47XG4gICAgZnJvbTogJ3NlbGVjdGVkJyB8ICdhdmFpbGFibGUnO1xuICAgIHRvOiAnc2VsZWN0ZWQnIHwgJ2F2YWlsYWJsZSc7XG59Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1ib3gtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZHVhbC1saXN0LWJveC9saXN0LWJveC1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgZm9yIGxpc3Rib3ggaXRlbXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGlzdEJveEl0ZW0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xufSJdfQ==
|