@pepperi-addons/ngx-lib 0.5.0-ng15.3 → 0.5.0-ng16.2
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/address/address.component.d.ts +1 -1
- package/attachment/attachment.component.d.ts +1 -1
- package/bread-crumbs/bread-crumbs.component.d.ts +1 -1
- package/button/button.component.d.ts +1 -1
- package/carousel/carousel-item.directive.d.ts +1 -1
- package/carousel/carousel.component.d.ts +1 -1
- package/checkbox/checkbox.component.d.ts +1 -1
- package/chips/chips.component.d.ts +1 -1
- package/color/color.component.d.ts +1 -1
- package/core/clipboard/clipboard.directive.d.ts +1 -1
- package/core/common/directives/auto-width.directive.d.ts +1 -1
- package/core/common/directives/button-loader.directive.d.ts +1 -1
- package/core/common/directives/data-qa.directive.d.ts +1 -1
- package/core/common/directives/div-loader.directive.d.ts +1 -1
- package/core/common/directives/prevent-multi-click.directive.d.ts +1 -1
- package/core/common/directives/print.directive.d.ts +1 -1
- package/core/portal/attach.directive.d.ts +1 -1
- package/core/portal/target.directive.d.ts +1 -1
- package/date/date.component.d.ts +1 -1
- package/dialog/dialog.component.d.ts +1 -1
- package/draggable-items/draggable-item/draggable-item.component.d.ts +1 -1
- package/draggable-items/draggable-items.component.d.ts +1 -1
- package/esm2022/address/address.component.mjs +112 -0
- package/{esm2020 → esm2022}/address/address.module.mjs +23 -23
- package/{esm2020 → esm2022}/attachment/attachment.component.mjs +65 -61
- package/{esm2020 → esm2022}/attachment/attachment.module.mjs +21 -21
- package/esm2022/bread-crumbs/bread-crumbs.component.mjs +87 -0
- package/esm2022/bread-crumbs/bread-crumbs.model.mjs +10 -0
- package/esm2022/bread-crumbs/bread-crumbs.module.mjs +51 -0
- package/{esm2020 → esm2022}/button/button.component.mjs +76 -53
- package/esm2022/button/button.model.mjs +13 -0
- package/{esm2020 → esm2022}/button/button.module.mjs +19 -19
- package/esm2022/carousel/carousel-item.directive.mjs +34 -0
- package/esm2022/carousel/carousel.component.mjs +765 -0
- package/{esm2020 → esm2022}/carousel/carousel.module.mjs +5 -5
- package/esm2022/checkbox/checkbox.component.mjs +182 -0
- package/esm2022/checkbox/checkbox.module.mjs +64 -0
- package/esm2022/chips/chips.component.mjs +187 -0
- package/esm2022/chips/chips.module.mjs +82 -0
- package/{esm2020 → esm2022}/chips/chips.service.mjs +5 -5
- package/esm2022/color/color-picker.component.mjs +229 -0
- package/esm2022/color/color.component.mjs +93 -0
- package/esm2022/color/color.module.mjs +93 -0
- package/{esm2020 → esm2022}/core/clipboard/clipboard.directive.mjs +4 -4
- package/{esm2020 → esm2022}/core/clipboard/clipboard.service.mjs +4 -4
- package/esm2022/core/common/directives/auto-width.directive.mjs +79 -0
- package/esm2022/core/common/directives/base-destroyer.directive.mjs +23 -0
- package/esm2022/core/common/directives/button-blur.directive.mjs +25 -0
- package/esm2022/core/common/directives/button-loader.directive.mjs +117 -0
- package/esm2022/core/common/directives/data-qa.directive.mjs +26 -0
- package/esm2022/core/common/directives/div-loader.directive.mjs +67 -0
- package/esm2022/core/common/directives/menu-blur.directive.mjs +33 -0
- package/esm2022/core/common/directives/prevent-multi-click.directive.mjs +25 -0
- package/esm2022/core/common/directives/print.directive.mjs +176 -0
- package/esm2022/core/common/model/wapi.model.mjs +247 -0
- package/esm2022/core/common/pipes/common-pipes.mjs +180 -0
- package/esm2022/core/common/pipes/date-ago.pipe.mjs +47 -0
- package/esm2022/core/common/services/addon.service.mjs +234 -0
- package/esm2022/core/common/services/color.service.mjs +383 -0
- package/esm2022/core/common/services/cookie.service.mjs +156 -0
- package/esm2022/core/common/services/data-convertor.service.mjs +139 -0
- package/esm2022/core/common/services/file.service.mjs +252 -0
- package/{esm2020 → esm2022}/core/common/services/jwt-helper.service.mjs +4 -4
- package/esm2022/core/common/services/session.service.mjs +73 -0
- package/esm2022/core/common/services/translate.service.mjs +47 -0
- package/esm2022/core/common/services/utilities.service.mjs +302 -0
- package/esm2022/core/common/services/validator.service.mjs +273 -0
- package/esm2022/core/common/services/window-scrolling.service.mjs +38 -0
- package/esm2022/core/customization/customization.model.mjs +377 -0
- package/esm2022/core/customization/customization.service.mjs +802 -0
- package/{esm2020 → esm2022}/core/http/interceptors/error.interceptor.mjs +4 -4
- package/esm2022/core/http/interceptors/loader.interceptor.mjs +33 -0
- package/{esm2020 → esm2022}/core/http/interceptors/profiler.interceptor.mjs +4 -4
- package/esm2022/core/http/services/http.service.mjs +158 -0
- package/{esm2020 → esm2022}/core/http/services/loader.service.mjs +6 -6
- package/esm2022/core/layout/layout.service.mjs +171 -0
- package/esm2022/core/layout/rtl.directive.mjs +50 -0
- package/esm2022/core/portal/attach.directive.mjs +30 -0
- package/esm2022/core/portal/portal.service.mjs +37 -0
- package/esm2022/core/portal/target.directive.mjs +27 -0
- package/{esm2020 → esm2022}/core/scroll-to/scroll-to.service.mjs +4 -4
- package/esm2022/date/date.component.mjs +345 -0
- package/{esm2020 → esm2022}/date/date.model.mjs +7 -7
- package/esm2022/date/date.module.mjs +89 -0
- package/esm2022/dialog/default-dialog.component.mjs +39 -0
- package/esm2022/dialog/dialog.component.mjs +37 -0
- package/esm2022/dialog/dialog.model.mjs +41 -0
- package/esm2022/dialog/dialog.module.mjs +59 -0
- package/esm2022/dialog/dialog.service.mjs +106 -0
- package/esm2022/draggable-items/draggable-item/draggable-item.component.mjs +68 -0
- package/esm2022/draggable-items/draggable-items.component.mjs +95 -0
- package/esm2022/draggable-items/draggable-items.module.mjs +65 -0
- package/esm2022/field-title/field-title.component.mjs +46 -0
- package/esm2022/field-title/field-title.module.mjs +48 -0
- package/{esm2020 → esm2022}/files-uploader/files-uploader.component.mjs +36 -27
- package/esm2022/files-uploader/files-uploader.module.mjs +80 -0
- package/esm2022/form/field-generator.component.mjs +152 -0
- package/esm2022/form/form.component.mjs +1258 -0
- package/esm2022/form/form.module.mjs +180 -0
- package/esm2022/form/indicators.component.mjs +23 -0
- package/esm2022/form/internal-button.component.mjs +188 -0
- package/esm2022/form/internal-carusel.component.mjs +126 -0
- package/esm2022/form/internal-carusel.service.mjs +34 -0
- package/esm2022/form/internal-field-generator.component.mjs +146 -0
- package/esm2022/form/internal-form.component.mjs +1236 -0
- package/esm2022/form/internal-list.component.mjs +524 -0
- package/esm2022/form/internal-menu.component.mjs +62 -0
- package/esm2022/form/internal-page.component.mjs +380 -0
- package/esm2022/form/internal-page.service.mjs +125 -0
- package/esm2022/group-buttons/group-buttons.component.mjs +73 -0
- package/esm2022/group-buttons/group-buttons.module.mjs +60 -0
- package/esm2022/icon/icon-registry.service.mjs +24 -0
- package/esm2022/icon/icon.component.mjs +95 -0
- package/{esm2020 → esm2022}/icon/icon.module.mjs +5 -5
- package/esm2022/icon/icon.service.mjs +34 -0
- package/{esm2020 → esm2022}/image/image.component.mjs +45 -39
- package/esm2022/image/image.module.mjs +74 -0
- package/esm2022/image/image.service.mjs +53 -0
- package/esm2022/images-filmstrip/images-filmstrip.component.mjs +360 -0
- package/esm2022/images-filmstrip/images-filmstrip.module.mjs +84 -0
- package/esm2022/link/link.component.mjs +324 -0
- package/esm2022/link/link.module.mjs +81 -0
- package/{esm2020 → esm2022}/link/link.pipes.mjs +4 -4
- package/esm2022/list/list-actions.component.mjs +42 -0
- package/esm2022/list/list-carousel.component.mjs +110 -0
- package/esm2022/list/list-chooser.component.mjs +64 -0
- package/esm2022/list/list-pager.component.mjs +126 -0
- package/{esm2020 → esm2022}/list/list-sorting.component.mjs +15 -13
- package/esm2022/list/list-total.component.mjs +31 -0
- package/esm2022/list/list-views.component.mjs +86 -0
- package/esm2022/list/list.component.mjs +1394 -0
- package/{esm2020 → esm2022}/list/list.model.mjs +4 -1
- package/esm2022/list/list.module.mjs +145 -0
- package/esm2022/list/list.pipes.mjs +45 -0
- package/esm2022/list/virtual-scroller.mjs +1124 -0
- package/esm2022/menu/menu-item.component.mjs +111 -0
- package/esm2022/menu/menu.component.mjs +218 -0
- package/esm2022/menu/menu.model.mjs +23 -0
- package/esm2022/menu/menu.module.mjs +60 -0
- package/{esm2020 → esm2022}/ngx-lib.module.mjs +65 -65
- package/esm2022/page-layout/page-layout.component.mjs +41 -0
- package/{esm2020 → esm2022}/page-layout/page-layout.module.mjs +13 -13
- package/esm2022/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +48 -0
- package/esm2022/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +82 -0
- package/esm2022/profile-data-views-list/profile-data-views-list.component.mjs +131 -0
- package/esm2022/profile-data-views-list/profile-data-views-list.module.mjs +89 -0
- package/esm2022/quantity-selector/quantity-selector-validation.directive.mjs +53 -0
- package/{esm2020 → esm2022}/quantity-selector/quantity-selector.component.mjs +83 -73
- package/esm2022/quantity-selector/quantity-selector.module.mjs +83 -0
- package/{esm2020 → esm2022}/quantity-selector/quantity-selector.pipes.mjs +4 -4
- package/esm2022/query-builder/common/model/type-map.mjs +28 -0
- package/esm2022/query-builder/common/services/output-query.service.mjs +118 -0
- package/esm2022/query-builder/common/services/query-structure.service.mjs +263 -0
- package/esm2022/query-builder/common/services/type-convertor.service.mjs +42 -0
- package/esm2022/query-builder/query-builder-item/query-builder-item.component.mjs +134 -0
- package/esm2022/query-builder/query-builder-section/query-builder-section.component.mjs +76 -0
- package/esm2022/query-builder/query-builder.component.mjs +116 -0
- package/esm2022/query-builder/query-builder.module.mjs +71 -0
- package/{esm2020 → esm2022}/query-builder/query-builder.service.mjs +4 -4
- package/esm2022/remote-loader/addon-block-loader.component.mjs +115 -0
- package/esm2022/remote-loader/addon-block-loader.service.mjs +66 -0
- package/esm2022/remote-loader/remote-loader-element.component.mjs +179 -0
- package/esm2022/remote-loader/remote-loader.component.mjs +120 -0
- package/{esm2020 → esm2022}/remote-loader/remote-loader.module.mjs +26 -26
- package/esm2022/remote-loader/remote-loader.service.mjs +107 -0
- package/{esm2020 → esm2022}/rich-html-textarea/rich-html-textarea.component.mjs +38 -30
- package/esm2022/rich-html-textarea/rich-html-textarea.module.mjs +96 -0
- package/esm2022/search/search.component.mjs +322 -0
- package/esm2022/search/search.module.mjs +71 -0
- package/esm2022/select/select.component.mjs +341 -0
- package/esm2022/select/select.module.mjs +71 -0
- package/esm2022/select-panel/select-panel.component.mjs +161 -0
- package/{esm2020 → esm2022}/select-panel/select-panel.module.mjs +31 -31
- package/esm2022/separator/separator.component.mjs +65 -0
- package/{esm2020 → esm2022}/separator/separator.module.mjs +5 -5
- package/esm2022/side-bar/side-bar.component.mjs +141 -0
- package/esm2022/side-bar/side-bar.module.mjs +56 -0
- package/esm2022/signature/signature-dialog.component.mjs +82 -0
- package/{esm2020 → esm2022}/signature/signature.component.mjs +41 -31
- package/esm2022/signature/signature.module.mjs +92 -0
- package/esm2022/size-detector/size-detector.component.mjs +97 -0
- package/{esm2020 → esm2022}/size-detector/size-detector.module.mjs +13 -13
- package/esm2022/skeleton-loader/skeleton-loader.component.mjs +46 -0
- package/{esm2020 → esm2022}/skeleton-loader/skeleton-loader.module.mjs +7 -7
- package/esm2022/slider/slider.component.mjs +105 -0
- package/{esm2020 → esm2022}/slider/slider.module.mjs +17 -17
- package/esm2022/smart-filters/boolean-filter/boolean-filter.component.mjs +74 -0
- package/esm2022/smart-filters/common/filter-actions.component.mjs +28 -0
- package/esm2022/smart-filters/common/model/base-filter-component.mjs +307 -0
- package/esm2022/smart-filters/common/model/field.mjs +125 -0
- package/esm2022/smart-filters/common/model/operator.mjs +287 -0
- package/esm2022/smart-filters/date-filter/date-filter.component.mjs +181 -0
- package/esm2022/smart-filters/multi-select-filter/multi-select-filter.component.mjs +202 -0
- package/esm2022/smart-filters/number-filter/number-filter.component.mjs +133 -0
- package/esm2022/smart-filters/smart-filters.component.mjs +143 -0
- package/esm2022/smart-filters/smart-filters.module.mjs +159 -0
- package/esm2022/smart-filters/text-filter/text-filter.component.mjs +110 -0
- package/esm2022/snack-bar/default-snack-bar.component.mjs +31 -0
- package/esm2022/snack-bar/snack-bar.component.mjs +28 -0
- package/esm2022/snack-bar/snack-bar.model.mjs +9 -0
- package/esm2022/snack-bar/snack-bar.module.mjs +63 -0
- package/esm2022/snack-bar/snack-bar.service.mjs +62 -0
- package/{esm2020 → esm2022}/textarea/textarea.component.mjs +35 -27
- package/esm2022/textarea/textarea.module.mjs +83 -0
- package/esm2022/textbox/textbox-validation.directive.mjs +96 -0
- package/esm2022/textbox/textbox.component.mjs +646 -0
- package/esm2022/textbox/textbox.module.mjs +73 -0
- package/esm2022/textbox-icon/textbox-icon.component.mjs +50 -0
- package/esm2022/textbox-icon/textbox-icon.module.mjs +65 -0
- package/esm2022/top-bar/top-bar.component.mjs +127 -0
- package/esm2022/top-bar/top-bar.module.mjs +63 -0
- package/fesm2022/pepperi-addons-ngx-lib-address.mjs +173 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-attachment.mjs +84 -80
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-bread-crumbs.mjs +34 -28
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
- package/fesm2022/pepperi-addons-ngx-lib-button.mjs +227 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-button.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-carousel.mjs +76 -55
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-carousel.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-checkbox.mjs +54 -48
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
- package/fesm2022/pepperi-addons-ngx-lib-chips.mjs +308 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-color.mjs +92 -84
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-date.mjs +116 -104
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-date.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-dialog.mjs +50 -36
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
- package/fesm2022/pepperi-addons-ngx-lib-draggable-items.mjs +229 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
- package/fesm2022/pepperi-addons-ngx-lib-field-title.mjs +101 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-files-uploader.mjs +66 -56
- package/fesm2022/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-form.mjs +391 -310
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-group-buttons.mjs +38 -35
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-icon.mjs +23 -18
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-image.mjs +77 -68
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-image.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-images-filmstrip.mjs +83 -60
- package/fesm2022/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-link.mjs +113 -103
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-link.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-list.mjs +339 -273
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-menu.mjs +89 -87
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-page-layout.mjs +23 -17
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-profile-data-views-list.mjs +72 -63
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-quantity-selector.mjs +125 -110
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-query-builder.mjs +93 -66
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-remote-loader.mjs +84 -64
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-rich-html-textarea.mjs +76 -67
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-search.mjs +85 -79
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-search.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-select-panel.mjs +53 -49
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-select.mjs +74 -66
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-select.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-separator.mjs +18 -16
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-separator.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-side-bar.mjs +44 -38
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-signature.mjs +95 -81
- package/fesm2022/pepperi-addons-ngx-lib-signature.mjs.map +1 -0
- package/fesm2022/pepperi-addons-ngx-lib-size-detector.mjs +139 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
- package/fesm2022/pepperi-addons-ngx-lib-skeleton-loader.mjs +78 -0
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -1
- package/fesm2022/pepperi-addons-ngx-lib-slider.mjs +154 -0
- package/fesm2022/pepperi-addons-ngx-lib-slider.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-smart-filters.mjs +186 -158
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-snack-bar.mjs +42 -34
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-snack-bar.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-textarea.mjs +67 -58
- package/{fesm2015 → fesm2022}/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-textbox-icon.mjs +28 -25
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-textbox.mjs +156 -144
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-top-bar.mjs +48 -32
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib.mjs +661 -449
- package/{fesm2020 → fesm2022}/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/field-title/field-title.component.d.ts +1 -1
- package/files-uploader/files-uploader.component.d.ts +1 -1
- package/form/field-generator.component.d.ts +1 -1
- package/form/form.component.d.ts +1 -1
- package/form/form.module.d.ts +2 -2
- package/form/indicators.component.d.ts +1 -1
- package/form/internal-button.component.d.ts +1 -1
- package/form/internal-carusel.component.d.ts +1 -1
- package/form/internal-field-generator.component.d.ts +1 -1
- package/form/internal-form.component.d.ts +1 -1
- package/form/internal-list.component.d.ts +1 -1
- package/form/internal-menu.component.d.ts +1 -1
- package/form/internal-page.component.d.ts +1 -1
- package/group-buttons/group-buttons.component.d.ts +1 -1
- package/icon/icon.component.d.ts +1 -1
- package/image/image.component.d.ts +1 -1
- package/images-filmstrip/images-filmstrip.component.d.ts +1 -1
- package/link/link.component.d.ts +1 -1
- package/list/list-actions.component.d.ts +1 -1
- package/list/list-carousel.component.d.ts +1 -1
- package/list/list-chooser.component.d.ts +1 -1
- package/list/list-pager.component.d.ts +1 -1
- package/list/list-sorting.component.d.ts +1 -1
- package/list/list-total.component.d.ts +1 -1
- package/list/list-views.component.d.ts +1 -1
- package/list/list.component.d.ts +1 -1
- package/list/virtual-scroller.d.ts +1 -1
- package/menu/menu-item.component.d.ts +1 -1
- package/menu/menu.component.d.ts +1 -1
- package/package.json +159 -249
- package/page-layout/page-layout.component.d.ts +1 -1
- package/profile-data-views-list/profile-data-view/profile-data-view.component.d.ts +1 -1
- package/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.d.ts +1 -1
- package/profile-data-views-list/profile-data-views-list.component.d.ts +1 -1
- package/quantity-selector/quantity-selector-validation.directive.d.ts +1 -1
- package/quantity-selector/quantity-selector.component.d.ts +1 -1
- package/query-builder/query-builder-item/query-builder-item.component.d.ts +1 -1
- package/query-builder/query-builder-section/query-builder-section.component.d.ts +1 -1
- package/query-builder/query-builder.component.d.ts +1 -1
- package/remote-loader/addon-block-loader.component.d.ts +1 -1
- package/remote-loader/remote-loader-element.component.d.ts +1 -1
- package/remote-loader/remote-loader.component.d.ts +1 -1
- package/rich-html-textarea/rich-html-textarea.component.d.ts +1 -1
- package/search/search.component.d.ts +1 -1
- package/select/select.component.d.ts +1 -1
- package/select-panel/select-panel.component.d.ts +1 -1
- package/separator/separator.component.d.ts +1 -1
- package/side-bar/side-bar.component.d.ts +1 -1
- package/signature/signature-dialog.component.d.ts +2 -2
- package/signature/signature.component.d.ts +1 -1
- package/signature/signature.module.d.ts +2 -2
- package/size-detector/size-detector.component.d.ts +1 -1
- package/skeleton-loader/skeleton-loader.component.d.ts +1 -1
- package/slider/slider.component.d.ts +1 -1
- package/slider/slider.component.theme.scss +13 -6
- package/smart-filters/boolean-filter/boolean-filter.component.d.ts +1 -1
- package/smart-filters/common/filter-actions.component.d.ts +1 -1
- package/smart-filters/common/model/base-filter-component.d.ts +1 -1
- package/smart-filters/smart-filters.component.d.ts +1 -1
- package/snack-bar/snack-bar.component.d.ts +1 -1
- package/textarea/textarea.component.d.ts +1 -1
- package/textbox/textbox-validation.directive.d.ts +1 -1
- package/textbox/textbox.component.d.ts +1 -1
- package/textbox-icon/textbox-icon.component.d.ts +1 -1
- package/top-bar/top-bar.component.d.ts +1 -1
- package/esm2020/address/address.component.mjs +0 -109
- package/esm2020/bread-crumbs/bread-crumbs.component.mjs +0 -85
- package/esm2020/bread-crumbs/bread-crumbs.model.mjs +0 -7
- package/esm2020/bread-crumbs/bread-crumbs.module.mjs +0 -50
- package/esm2020/button/button.model.mjs +0 -6
- package/esm2020/carousel/carousel-item.directive.mjs +0 -33
- package/esm2020/carousel/carousel.component.mjs +0 -745
- package/esm2020/checkbox/checkbox.component.mjs +0 -177
- package/esm2020/checkbox/checkbox.module.mjs +0 -63
- package/esm2020/chips/chips.component.mjs +0 -185
- package/esm2020/chips/chips.module.mjs +0 -81
- package/esm2020/color/color-picker.component.mjs +0 -224
- package/esm2020/color/color.component.mjs +0 -90
- package/esm2020/color/color.module.mjs +0 -93
- package/esm2020/core/common/directives/auto-width.directive.mjs +0 -77
- package/esm2020/core/common/directives/base-destroyer.directive.mjs +0 -22
- package/esm2020/core/common/directives/button-blur.directive.mjs +0 -24
- package/esm2020/core/common/directives/button-loader.directive.mjs +0 -112
- package/esm2020/core/common/directives/data-qa.directive.mjs +0 -23
- package/esm2020/core/common/directives/div-loader.directive.mjs +0 -61
- package/esm2020/core/common/directives/menu-blur.directive.mjs +0 -32
- package/esm2020/core/common/directives/prevent-multi-click.directive.mjs +0 -27
- package/esm2020/core/common/directives/print.directive.mjs +0 -170
- package/esm2020/core/common/model/wapi.model.mjs +0 -157
- package/esm2020/core/common/pipes/common-pipes.mjs +0 -177
- package/esm2020/core/common/pipes/date-ago.pipe.mjs +0 -46
- package/esm2020/core/common/services/addon.service.mjs +0 -227
- package/esm2020/core/common/services/color.service.mjs +0 -385
- package/esm2020/core/common/services/cookie.service.mjs +0 -153
- package/esm2020/core/common/services/data-convertor.service.mjs +0 -122
- package/esm2020/core/common/services/file.service.mjs +0 -250
- package/esm2020/core/common/services/session.service.mjs +0 -72
- package/esm2020/core/common/services/translate.service.mjs +0 -46
- package/esm2020/core/common/services/utilities.service.mjs +0 -301
- package/esm2020/core/common/services/validator.service.mjs +0 -272
- package/esm2020/core/common/services/window-scrolling.service.mjs +0 -36
- package/esm2020/core/customization/customization.model.mjs +0 -338
- package/esm2020/core/customization/customization.service.mjs +0 -799
- package/esm2020/core/http/interceptors/loader.interceptor.mjs +0 -32
- package/esm2020/core/http/services/http.service.mjs +0 -155
- package/esm2020/core/layout/layout.service.mjs +0 -168
- package/esm2020/core/layout/rtl.directive.mjs +0 -44
- package/esm2020/core/portal/attach.directive.mjs +0 -27
- package/esm2020/core/portal/portal.service.mjs +0 -36
- package/esm2020/core/portal/target.directive.mjs +0 -24
- package/esm2020/date/date.component.mjs +0 -334
- package/esm2020/date/date.module.mjs +0 -88
- package/esm2020/dialog/default-dialog.component.mjs +0 -37
- package/esm2020/dialog/dialog.component.mjs +0 -36
- package/esm2020/dialog/dialog.model.mjs +0 -33
- package/esm2020/dialog/dialog.module.mjs +0 -59
- package/esm2020/dialog/dialog.service.mjs +0 -103
- package/esm2020/draggable-items/draggable-item/draggable-item.component.mjs +0 -67
- package/esm2020/draggable-items/draggable-items.component.mjs +0 -94
- package/esm2020/draggable-items/draggable-items.module.mjs +0 -64
- package/esm2020/field-title/field-title.component.mjs +0 -48
- package/esm2020/field-title/field-title.module.mjs +0 -47
- package/esm2020/files-uploader/files-uploader.module.mjs +0 -79
- package/esm2020/form/field-generator.component.mjs +0 -152
- package/esm2020/form/form.component.mjs +0 -1240
- package/esm2020/form/form.module.mjs +0 -179
- package/esm2020/form/indicators.component.mjs +0 -23
- package/esm2020/form/internal-button.component.mjs +0 -184
- package/esm2020/form/internal-carusel.component.mjs +0 -121
- package/esm2020/form/internal-carusel.service.mjs +0 -32
- package/esm2020/form/internal-field-generator.component.mjs +0 -146
- package/esm2020/form/internal-form.component.mjs +0 -1218
- package/esm2020/form/internal-list.component.mjs +0 -513
- package/esm2020/form/internal-menu.component.mjs +0 -64
- package/esm2020/form/internal-page.component.mjs +0 -361
- package/esm2020/form/internal-page.service.mjs +0 -120
- package/esm2020/group-buttons/group-buttons.component.mjs +0 -71
- package/esm2020/group-buttons/group-buttons.module.mjs +0 -59
- package/esm2020/icon/icon-registry.service.mjs +0 -26
- package/esm2020/icon/icon.component.mjs +0 -91
- package/esm2020/icon/icon.service.mjs +0 -31
- package/esm2020/image/image.module.mjs +0 -74
- package/esm2020/image/image.service.mjs +0 -50
- package/esm2020/images-filmstrip/images-filmstrip.component.mjs +0 -338
- package/esm2020/images-filmstrip/images-filmstrip.module.mjs +0 -83
- package/esm2020/link/link.component.mjs +0 -315
- package/esm2020/link/link.module.mjs +0 -80
- package/esm2020/list/list-actions.component.mjs +0 -44
- package/esm2020/list/list-carousel.component.mjs +0 -107
- package/esm2020/list/list-chooser.component.mjs +0 -64
- package/esm2020/list/list-pager.component.mjs +0 -120
- package/esm2020/list/list-total.component.mjs +0 -33
- package/esm2020/list/list-views.component.mjs +0 -85
- package/esm2020/list/list.component.mjs +0 -1382
- package/esm2020/list/list.module.mjs +0 -144
- package/esm2020/list/list.pipes.mjs +0 -47
- package/esm2020/list/virtual-scroller.mjs +0 -1080
- package/esm2020/menu/menu-item.component.mjs +0 -115
- package/esm2020/menu/menu.component.mjs +0 -216
- package/esm2020/menu/menu.model.mjs +0 -20
- package/esm2020/menu/menu.module.mjs +0 -59
- package/esm2020/page-layout/page-layout.component.mjs +0 -35
- package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +0 -45
- package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +0 -81
- package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +0 -127
- package/esm2020/profile-data-views-list/profile-data-views-list.module.mjs +0 -88
- package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +0 -49
- package/esm2020/quantity-selector/quantity-selector.module.mjs +0 -82
- package/esm2020/query-builder/common/model/type-map.mjs +0 -27
- package/esm2020/query-builder/common/services/output-query.service.mjs +0 -116
- package/esm2020/query-builder/common/services/query-structure.service.mjs +0 -258
- package/esm2020/query-builder/common/services/type-convertor.service.mjs +0 -42
- package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +0 -127
- package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +0 -71
- package/esm2020/query-builder/query-builder.component.mjs +0 -110
- package/esm2020/query-builder/query-builder.module.mjs +0 -70
- package/esm2020/remote-loader/addon-block-loader.component.mjs +0 -112
- package/esm2020/remote-loader/addon-block-loader.service.mjs +0 -65
- package/esm2020/remote-loader/remote-loader-element.component.mjs +0 -171
- package/esm2020/remote-loader/remote-loader.component.mjs +0 -115
- package/esm2020/remote-loader/remote-loader.service.mjs +0 -104
- package/esm2020/rich-html-textarea/rich-html-textarea.module.mjs +0 -95
- package/esm2020/search/search.component.mjs +0 -317
- package/esm2020/search/search.module.mjs +0 -70
- package/esm2020/select/select.component.mjs +0 -334
- package/esm2020/select/select.module.mjs +0 -70
- package/esm2020/select-panel/select-panel.component.mjs +0 -157
- package/esm2020/separator/separator.component.mjs +0 -63
- package/esm2020/side-bar/side-bar.component.mjs +0 -136
- package/esm2020/side-bar/side-bar.module.mjs +0 -55
- package/esm2020/signature/signature-dialog.component.mjs +0 -79
- package/esm2020/signature/signature.module.mjs +0 -91
- package/esm2020/size-detector/size-detector.component.mjs +0 -94
- package/esm2020/skeleton-loader/skeleton-loader.component.mjs +0 -44
- package/esm2020/slider/slider.component.mjs +0 -101
- package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +0 -75
- package/esm2020/smart-filters/common/filter-actions.component.mjs +0 -29
- package/esm2020/smart-filters/common/model/base-filter-component.mjs +0 -290
- package/esm2020/smart-filters/common/model/field.mjs +0 -117
- package/esm2020/smart-filters/common/model/operator.mjs +0 -280
- package/esm2020/smart-filters/date-filter/date-filter.component.mjs +0 -182
- package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +0 -200
- package/esm2020/smart-filters/number-filter/number-filter.component.mjs +0 -136
- package/esm2020/smart-filters/smart-filters.component.mjs +0 -141
- package/esm2020/smart-filters/smart-filters.module.mjs +0 -158
- package/esm2020/smart-filters/text-filter/text-filter.component.mjs +0 -113
- package/esm2020/snack-bar/default-snack-bar.component.mjs +0 -29
- package/esm2020/snack-bar/snack-bar.component.mjs +0 -26
- package/esm2020/snack-bar/snack-bar.model.mjs +0 -7
- package/esm2020/snack-bar/snack-bar.module.mjs +0 -63
- package/esm2020/snack-bar/snack-bar.service.mjs +0 -60
- package/esm2020/textarea/textarea.module.mjs +0 -82
- package/esm2020/textbox/textbox-validation.directive.mjs +0 -93
- package/esm2020/textbox/textbox.component.mjs +0 -638
- package/esm2020/textbox/textbox.module.mjs +0 -72
- package/esm2020/textbox-icon/textbox-icon.component.mjs +0 -48
- package/esm2020/textbox-icon/textbox-icon.module.mjs +0 -64
- package/esm2020/top-bar/top-bar.component.mjs +0 -112
- package/esm2020/top-bar/top-bar.module.mjs +0 -62
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs +0 -170
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +0 -306
- package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +0 -147
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-button.mjs +0 -197
- package/fesm2015/pepperi-addons-ngx-lib-button.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs +0 -804
- package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +0 -246
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +0 -306
- package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs +0 -404
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs +0 -481
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +0 -263
- package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +0 -227
- package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +0 -102
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +0 -331
- package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs +0 -4232
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +0 -136
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +0 -741
- package/fesm2015/pepperi-addons-ngx-lib-image.mjs +0 -397
- package/fesm2015/pepperi-addons-ngx-lib-image.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +0 -426
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs +0 -414
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +0 -3131
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +0 -403
- package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +0 -337
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +0 -741
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +0 -1226
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +0 -644
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +0 -363
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-search.mjs +0 -393
- package/fesm2015/pepperi-addons-ngx-lib-search.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +0 -235
- package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs +0 -410
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-separator.mjs +0 -89
- package/fesm2015/pepperi-addons-ngx-lib-separator.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +0 -196
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +0 -464
- package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +0 -136
- package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs +0 -78
- package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +0 -151
- package/fesm2015/pepperi-addons-ngx-lib-slider.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +0 -1731
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs +0 -183
- package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +0 -286
- package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +0 -118
- package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +0 -806
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +0 -180
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +0 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs +0 -4995
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs +0 -170
- package/fesm2020/pepperi-addons-ngx-lib-button.mjs +0 -197
- package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +0 -305
- package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +0 -226
- package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +0 -102
- package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +0 -77
- package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +0 -136
- package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs +0 -76
- package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +0 -150
- package/fesm2020/pepperi-addons-ngx-lib-slider.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +0 -1
- /package/{esm2020 → esm2022}/address/pepperi-addons-ngx-lib-address.mjs +0 -0
- /package/{esm2020 → esm2022}/address/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/attachment/pepperi-addons-ngx-lib-attachment.mjs +0 -0
- /package/{esm2020 → esm2022}/attachment/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/bread-crumbs/pepperi-addons-ngx-lib-bread-crumbs.mjs +0 -0
- /package/{esm2020 → esm2022}/bread-crumbs/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/button/pepperi-addons-ngx-lib-button.mjs +0 -0
- /package/{esm2020 → esm2022}/button/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/carousel/pepperi-addons-ngx-lib-carousel.mjs +0 -0
- /package/{esm2020 → esm2022}/carousel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox/pepperi-addons-ngx-lib-checkbox.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/chips/chips.model.mjs +0 -0
- /package/{esm2020 → esm2022}/chips/pepperi-addons-ngx-lib-chips.mjs +0 -0
- /package/{esm2020 → esm2022}/chips/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/color/color.model.mjs +0 -0
- /package/{esm2020 → esm2022}/color/pepperi-addons-ngx-lib-color.mjs +0 -0
- /package/{esm2020 → esm2022}/color/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/clipboard/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/clipboard/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/directives/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/model/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/model/papi.model.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/model/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/model/utilities.model.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/pipes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/pipes/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common/services/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/customization/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/customization/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/http/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/http/interceptors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/http/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/layout/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/layout/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/portal/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/portal/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/scroll-to/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/scroll-to/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/date/pepperi-addons-ngx-lib-date.mjs +0 -0
- /package/{esm2020 → esm2022}/date/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/pepperi-addons-ngx-lib-dialog.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/draggable-items/draggable-items.model.mjs +0 -0
- /package/{esm2020 → esm2022}/draggable-items/pepperi-addons-ngx-lib-draggable-items.mjs +0 -0
- /package/{esm2020 → esm2022}/draggable-items/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/field-title/pepperi-addons-ngx-lib-field-title.mjs +0 -0
- /package/{esm2020 → esm2022}/field-title/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/files-uploader/pepperi-addons-ngx-lib-files-uploader.mjs +0 -0
- /package/{esm2020 → esm2022}/files-uploader/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/form/form.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form/pepperi-addons-ngx-lib-form.mjs +0 -0
- /package/{esm2020 → esm2022}/form/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/group-buttons/pepperi-addons-ngx-lib-group-buttons.mjs +0 -0
- /package/{esm2020 → esm2022}/group-buttons/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/icon-generated-all.model.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/icon-generated.model.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/pepperi-addons-ngx-lib-icon.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/image/pepperi-addons-ngx-lib-image.mjs +0 -0
- /package/{esm2020 → esm2022}/image/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.mjs +0 -0
- /package/{esm2020 → esm2022}/images-filmstrip/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/link/pepperi-addons-ngx-lib-link.mjs +0 -0
- /package/{esm2020 → esm2022}/link/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/list/pepperi-addons-ngx-lib-list.mjs +0 -0
- /package/{esm2020 → esm2022}/list/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/pepperi-addons-ngx-lib-menu.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/page-layout/pepperi-addons-ngx-lib-page-layout.mjs +0 -0
- /package/{esm2020 → esm2022}/page-layout/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/pepperi-addons-ngx-lib.mjs +0 -0
- /package/{esm2020 → esm2022}/profile-data-views-list/pepperi-addons-ngx-lib-profile-data-views-list.mjs +0 -0
- /package/{esm2020 → esm2022}/profile-data-views-list/profile-data-views-list.model.mjs +0 -0
- /package/{esm2020 → esm2022}/profile-data-views-list/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.mjs +0 -0
- /package/{esm2020 → esm2022}/quantity-selector/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/field.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/filter.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/legacy.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/operator-unit.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/operator.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/structure.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/common/model/type.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/pepperi-addons-ngx-lib-query-builder.mjs +0 -0
- /package/{esm2020 → esm2022}/query-builder/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/remote-loader/pepperi-addons-ngx-lib-remote-loader.mjs +0 -0
- /package/{esm2020 → esm2022}/remote-loader/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/remote-loader/remote-loader.model.mjs +0 -0
- /package/{esm2020 → esm2022}/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.mjs +0 -0
- /package/{esm2020 → esm2022}/rich-html-textarea/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/search/pepperi-addons-ngx-lib-search.mjs +0 -0
- /package/{esm2020 → esm2022}/search/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/search/search.model.mjs +0 -0
- /package/{esm2020 → esm2022}/select/pepperi-addons-ngx-lib-select.mjs +0 -0
- /package/{esm2020 → esm2022}/select/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/select-panel/pepperi-addons-ngx-lib-select-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/select-panel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/select-panel/select-panel.model.mjs +0 -0
- /package/{esm2020 → esm2022}/separator/pepperi-addons-ngx-lib-separator.mjs +0 -0
- /package/{esm2020 → esm2022}/separator/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/side-bar/pepperi-addons-ngx-lib-side-bar.mjs +0 -0
- /package/{esm2020 → esm2022}/side-bar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/side-bar/side-bar.model.mjs +0 -0
- /package/{esm2020 → esm2022}/signature/pepperi-addons-ngx-lib-signature.mjs +0 -0
- /package/{esm2020 → esm2022}/signature/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/size-detector/pepperi-addons-ngx-lib-size-detector.mjs +0 -0
- /package/{esm2020 → esm2022}/size-detector/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/skeleton-loader/pepperi-addons-ngx-lib-skeleton-loader.mjs +0 -0
- /package/{esm2020 → esm2022}/skeleton-loader/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/slider/pepperi-addons-ngx-lib-slider.mjs +0 -0
- /package/{esm2020 → esm2022}/slider/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/smart-filters/common/model/creator.mjs +0 -0
- /package/{esm2020 → esm2022}/smart-filters/common/model/filter.mjs +0 -0
- /package/{esm2020 → esm2022}/smart-filters/common/model/type.mjs +0 -0
- /package/{esm2020 → esm2022}/smart-filters/pepperi-addons-ngx-lib-smart-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/smart-filters/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/snack-bar/pepperi-addons-ngx-lib-snack-bar.mjs +0 -0
- /package/{esm2020 → esm2022}/snack-bar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/textarea/pepperi-addons-ngx-lib-textarea.mjs +0 -0
- /package/{esm2020 → esm2022}/textarea/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/textbox/pepperi-addons-ngx-lib-textbox.mjs +0 -0
- /package/{esm2020 → esm2022}/textbox/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/textbox-icon/pepperi-addons-ngx-lib-textbox-icon.mjs +0 -0
- /package/{esm2020 → esm2022}/textbox-icon/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/top-bar/pepperi-addons-ngx-lib-top-bar.mjs +0 -0
- /package/{esm2020 → esm2022}/top-bar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/top-bar/top-bar.model.mjs +0 -0
|
@@ -1,745 +0,0 @@
|
|
|
1
|
-
import { ElementRef, Component, Renderer2, Input, Output, EventEmitter, ViewChild, ContentChildren, Inject, HostBinding, HostListener, } from '@angular/core';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import { PepCarouselItemDirective } from './carousel-item.directive';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class PepCarouselComponent {
|
|
6
|
-
/**
|
|
7
|
-
* Is the user currently dragging the element
|
|
8
|
-
*/
|
|
9
|
-
get isDragging() {
|
|
10
|
-
return this._isDragging;
|
|
11
|
-
}
|
|
12
|
-
get currIndex() {
|
|
13
|
-
return this._index;
|
|
14
|
-
}
|
|
15
|
-
set currIndex(value) {
|
|
16
|
-
if (value !== this._index) {
|
|
17
|
-
this._index = value;
|
|
18
|
-
this.indexChanged.emit(value);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Whether the scrollbar is hidden
|
|
23
|
-
*/
|
|
24
|
-
get scrollbarHidden() {
|
|
25
|
-
return this._scrollbarHidden;
|
|
26
|
-
}
|
|
27
|
-
set scrollbarHidden(value) {
|
|
28
|
-
this._scrollbarHidden = value;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Whether horizontally and vertically draging and scrolling is be disabled
|
|
32
|
-
*/
|
|
33
|
-
get disabled() {
|
|
34
|
-
return this._disabled;
|
|
35
|
-
}
|
|
36
|
-
set disabled(value) {
|
|
37
|
-
this._disabled = value;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Whether horizontally dragging and scrolling is be disabled
|
|
41
|
-
*/
|
|
42
|
-
get xDisabled() {
|
|
43
|
-
return this._xDisabled;
|
|
44
|
-
}
|
|
45
|
-
set xDisabled(value) {
|
|
46
|
-
this._xDisabled = value;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Whether vertically dragging and scrolling events is disabled
|
|
50
|
-
*/
|
|
51
|
-
get yDisabled() {
|
|
52
|
-
return this._yDisabled;
|
|
53
|
-
}
|
|
54
|
-
set yDisabled(value) {
|
|
55
|
-
this._yDisabled = value;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Whether scrolling horizontally with mouse wheel is enabled
|
|
59
|
-
*/
|
|
60
|
-
get xWheelEnabled() {
|
|
61
|
-
return this._xWheelEnabled;
|
|
62
|
-
}
|
|
63
|
-
set xWheelEnabled(value) {
|
|
64
|
-
this._xWheelEnabled = value;
|
|
65
|
-
}
|
|
66
|
-
get dragDisabled() {
|
|
67
|
-
return this._dragDisabled;
|
|
68
|
-
}
|
|
69
|
-
set dragDisabled(value) {
|
|
70
|
-
this._dragDisabled = value;
|
|
71
|
-
}
|
|
72
|
-
get snapDisabled() {
|
|
73
|
-
return this._snapDisabled;
|
|
74
|
-
}
|
|
75
|
-
set snapDisabled(value) {
|
|
76
|
-
this._snapDisabled = value;
|
|
77
|
-
}
|
|
78
|
-
get snapOffset() {
|
|
79
|
-
return this._snapOffset;
|
|
80
|
-
}
|
|
81
|
-
set snapOffset(value) {
|
|
82
|
-
this._snapOffset = value;
|
|
83
|
-
}
|
|
84
|
-
get snapDuration() {
|
|
85
|
-
return this._snapDuration;
|
|
86
|
-
}
|
|
87
|
-
set snapDuration(value) {
|
|
88
|
-
this._snapDuration = value;
|
|
89
|
-
}
|
|
90
|
-
constructor(_elementRef, _renderer, _document) {
|
|
91
|
-
this._elementRef = _elementRef;
|
|
92
|
-
this._renderer = _renderer;
|
|
93
|
-
this._document = _document;
|
|
94
|
-
this._index = 0;
|
|
95
|
-
this._scrollbarHidden = false;
|
|
96
|
-
this._disabled = false;
|
|
97
|
-
this._xDisabled = false;
|
|
98
|
-
this._xWheelEnabled = false;
|
|
99
|
-
this._yDisabled = false;
|
|
100
|
-
this._dragDisabled = false;
|
|
101
|
-
this._snapDisabled = false;
|
|
102
|
-
this._snapOffset = 0;
|
|
103
|
-
this._snapDuration = 500;
|
|
104
|
-
this._isDragging = false;
|
|
105
|
-
/**
|
|
106
|
-
* Is the user currently pressing the element
|
|
107
|
-
*/
|
|
108
|
-
this.isPressed = false;
|
|
109
|
-
/**
|
|
110
|
-
* Is the user currently scrolling the element
|
|
111
|
-
*/
|
|
112
|
-
this.isScrolling = false;
|
|
113
|
-
/**
|
|
114
|
-
* The x coordinates on the element
|
|
115
|
-
*/
|
|
116
|
-
this.downX = 0;
|
|
117
|
-
/**
|
|
118
|
-
* The y coordinates on the element
|
|
119
|
-
*/
|
|
120
|
-
this.downY = 0;
|
|
121
|
-
this.displayType = 'block';
|
|
122
|
-
this.elWidth = null;
|
|
123
|
-
this.elHeight = null;
|
|
124
|
-
this._pointerEvents = 'auto';
|
|
125
|
-
this.scrollbarWidth = null;
|
|
126
|
-
this.isAnimating = false;
|
|
127
|
-
this.prevChildrenLength = 0;
|
|
128
|
-
this.indexBound = 0;
|
|
129
|
-
this.dsInitialized = new EventEmitter();
|
|
130
|
-
this.indexChanged = new EventEmitter();
|
|
131
|
-
this.reachesLeftBound = new EventEmitter();
|
|
132
|
-
this.reachesRightBound = new EventEmitter();
|
|
133
|
-
this.snapAnimationFinished = new EventEmitter();
|
|
134
|
-
this.dragStart = new EventEmitter();
|
|
135
|
-
this.dragEnd = new EventEmitter();
|
|
136
|
-
this.scrollbarWidth = `${this.getScrollbarWidth()}px`;
|
|
137
|
-
}
|
|
138
|
-
ngOnChanges() {
|
|
139
|
-
this.setScrollBar();
|
|
140
|
-
if (this.xDisabled || this.disabled || this._scrollbarHidden) {
|
|
141
|
-
this.disableScroll('x');
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
this.enableScroll('x');
|
|
145
|
-
}
|
|
146
|
-
if (this.yDisabled || this.disabled) {
|
|
147
|
-
this.disableScroll('y');
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
this.enableScroll('y');
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
ngAfterViewInit() {
|
|
154
|
-
// auto assign computed css
|
|
155
|
-
this._renderer.setAttribute(this._contentRef.nativeElement, 'drag-scroll', 'true');
|
|
156
|
-
this.displayType =
|
|
157
|
-
typeof window !== 'undefined'
|
|
158
|
-
? window.getComputedStyle(this._elementRef.nativeElement)
|
|
159
|
-
.display
|
|
160
|
-
: 'block';
|
|
161
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'display', this.displayType);
|
|
162
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'whiteSpace', 'noWrap');
|
|
163
|
-
// store ele width height for later user
|
|
164
|
-
this.markElDimension();
|
|
165
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'width', this.elWidth);
|
|
166
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'height', this.elHeight);
|
|
167
|
-
if (this.wrapper) {
|
|
168
|
-
this.checkScrollbar();
|
|
169
|
-
}
|
|
170
|
-
this._onMouseDownListener = this._renderer.listen(this._contentRef.nativeElement, 'mousedown', this.onMouseDownHandler.bind(this));
|
|
171
|
-
this._onScrollListener = this._renderer.listen(this._contentRef.nativeElement, 'scroll', this.onScrollHandler.bind(this));
|
|
172
|
-
// prevent Firefox from dragging images
|
|
173
|
-
this._onDragStartListener = this._renderer.listen('document', 'dragstart', (e) => {
|
|
174
|
-
e.preventDefault();
|
|
175
|
-
});
|
|
176
|
-
this.checkNavStatus();
|
|
177
|
-
this.dsInitialized.emit();
|
|
178
|
-
this.adjustMarginToLastChild();
|
|
179
|
-
}
|
|
180
|
-
ngAfterViewChecked() {
|
|
181
|
-
// avoid extra checks
|
|
182
|
-
if (this._children.length !== this.prevChildrenLength) {
|
|
183
|
-
this.markElDimension();
|
|
184
|
-
this.checkScrollbar();
|
|
185
|
-
this.prevChildrenLength = this._children.length;
|
|
186
|
-
this.checkNavStatus();
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
ngOnDestroy() {
|
|
190
|
-
this._renderer.setAttribute(this._contentRef.nativeElement, 'drag-scroll', 'false');
|
|
191
|
-
if (this._onMouseDownListener) {
|
|
192
|
-
this._onMouseDownListener = this._onMouseDownListener();
|
|
193
|
-
}
|
|
194
|
-
if (this._onScrollListener) {
|
|
195
|
-
this._onScrollListener = this._onScrollListener();
|
|
196
|
-
}
|
|
197
|
-
if (this._onDragStartListener) {
|
|
198
|
-
this._onDragStartListener = this._onDragStartListener();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
onMouseMoveHandler(event) {
|
|
202
|
-
this.onMouseMove(event);
|
|
203
|
-
}
|
|
204
|
-
onMouseMove(event) {
|
|
205
|
-
if (this.isPressed && !this.disabled) {
|
|
206
|
-
// Workaround for prevent scroll stuck if browser lost focus
|
|
207
|
-
// MouseEvent.buttons not support by Safari
|
|
208
|
-
if (!event.buttons && !event.which) {
|
|
209
|
-
return this.onMouseUpHandler(event);
|
|
210
|
-
}
|
|
211
|
-
this._pointerEvents = 'none';
|
|
212
|
-
this._setIsDragging(true);
|
|
213
|
-
// Drag X
|
|
214
|
-
if (!this.xDisabled && !this.dragDisabled) {
|
|
215
|
-
const clientX = event.clientX;
|
|
216
|
-
this._contentRef.nativeElement.scrollLeft =
|
|
217
|
-
this._contentRef.nativeElement.scrollLeft -
|
|
218
|
-
clientX +
|
|
219
|
-
this.downX;
|
|
220
|
-
this.downX = clientX;
|
|
221
|
-
}
|
|
222
|
-
// Drag Y
|
|
223
|
-
if (!this.yDisabled && !this.dragDisabled) {
|
|
224
|
-
const clientY = event.clientY;
|
|
225
|
-
this._contentRef.nativeElement.scrollTop =
|
|
226
|
-
this._contentRef.nativeElement.scrollTop -
|
|
227
|
-
clientY +
|
|
228
|
-
this.downY;
|
|
229
|
-
this.downY = clientY;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
onMouseDownHandler(event) {
|
|
234
|
-
const carouselItem = this.locateCarouselItem(event.target);
|
|
235
|
-
if (carouselItem && carouselItem.dragDisabled) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
const isTouchEvent = event.type === 'touchstart';
|
|
239
|
-
this._startGlobalListening(isTouchEvent);
|
|
240
|
-
this.isPressed = true;
|
|
241
|
-
const mouseEvent = event;
|
|
242
|
-
this.downX = mouseEvent.clientX;
|
|
243
|
-
this.downY = mouseEvent.clientY;
|
|
244
|
-
clearTimeout(this.scrollToTimer);
|
|
245
|
-
}
|
|
246
|
-
onScrollHandler() {
|
|
247
|
-
this.checkNavStatus();
|
|
248
|
-
if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {
|
|
249
|
-
this.isScrolling = true;
|
|
250
|
-
clearTimeout(this.scrollTimer);
|
|
251
|
-
this.scrollTimer = setTimeout(() => {
|
|
252
|
-
this.isScrolling = false;
|
|
253
|
-
this.locateCurrentIndex(true);
|
|
254
|
-
}, 500);
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
this.locateCurrentIndex();
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
onMouseUpHandler(event) {
|
|
261
|
-
if (this.isPressed) {
|
|
262
|
-
this.isPressed = false;
|
|
263
|
-
this._pointerEvents = 'auto';
|
|
264
|
-
this._setIsDragging(false);
|
|
265
|
-
if (!this.snapDisabled) {
|
|
266
|
-
this.locateCurrentIndex(true);
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
this.locateCurrentIndex();
|
|
270
|
-
}
|
|
271
|
-
this._stopGlobalListening();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
/*
|
|
275
|
-
* Nav button
|
|
276
|
-
*/
|
|
277
|
-
moveLeft() {
|
|
278
|
-
if (this.currIndex !== 0 || this.snapDisabled) {
|
|
279
|
-
this.currIndex--;
|
|
280
|
-
clearTimeout(this.scrollToTimer);
|
|
281
|
-
this.scrollTo(this._contentRef.nativeElement, this.toChildrenLocation(), this.snapDuration);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
moveRight() {
|
|
285
|
-
const container = this.wrapper || this.parentNode;
|
|
286
|
-
const containerWidth = container ? container.clientWidth : 0;
|
|
287
|
-
if (!this.isScrollReachesRightEnd() &&
|
|
288
|
-
this.currIndex <
|
|
289
|
-
this.maximumIndex(containerWidth, this._children.toArray())) {
|
|
290
|
-
this.currIndex++;
|
|
291
|
-
clearTimeout(this.scrollToTimer);
|
|
292
|
-
this.scrollTo(this._contentRef.nativeElement, this.toChildrenLocation(), this.snapDuration);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
moveTo(index) {
|
|
296
|
-
const container = this.wrapper || this.parentNode;
|
|
297
|
-
const containerWidth = container ? container.clientWidth : 0;
|
|
298
|
-
if (index >= 0 &&
|
|
299
|
-
index !== this.currIndex &&
|
|
300
|
-
this.currIndex <=
|
|
301
|
-
this.maximumIndex(containerWidth, this._children.toArray())) {
|
|
302
|
-
this.currIndex = Math.min(index, this.maximumIndex(containerWidth, this._children.toArray()));
|
|
303
|
-
clearTimeout(this.scrollToTimer);
|
|
304
|
-
this.scrollTo(this._contentRef.nativeElement, this.toChildrenLocation(), this.snapDuration);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
checkNavStatus() {
|
|
308
|
-
setTimeout(() => {
|
|
309
|
-
const onlyOneItem = Boolean(this._children.length <= 1);
|
|
310
|
-
const containerIsLargerThanContent = Boolean(this._contentRef.nativeElement.scrollWidth <=
|
|
311
|
-
this._contentRef.nativeElement.clientWidth);
|
|
312
|
-
if (onlyOneItem || containerIsLargerThanContent) {
|
|
313
|
-
// only one element
|
|
314
|
-
this.reachesLeftBound.emit(true);
|
|
315
|
-
this.reachesRightBound.emit(true);
|
|
316
|
-
}
|
|
317
|
-
else if (this.isScrollReachesRightEnd()) {
|
|
318
|
-
// reached right end
|
|
319
|
-
this.reachesLeftBound.emit(false);
|
|
320
|
-
this.reachesRightBound.emit(true);
|
|
321
|
-
}
|
|
322
|
-
else if (this._contentRef.nativeElement.scrollLeft === 0 &&
|
|
323
|
-
this._contentRef.nativeElement.scrollWidth >
|
|
324
|
-
this._contentRef.nativeElement.clientWidth) {
|
|
325
|
-
// reached left end
|
|
326
|
-
this.reachesLeftBound.emit(true);
|
|
327
|
-
this.reachesRightBound.emit(false);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
// in the middle
|
|
331
|
-
this.reachesLeftBound.emit(false);
|
|
332
|
-
this.reachesRightBound.emit(false);
|
|
333
|
-
}
|
|
334
|
-
}, 0);
|
|
335
|
-
}
|
|
336
|
-
onWheel(event) {
|
|
337
|
-
if (this._xWheelEnabled) {
|
|
338
|
-
event.preventDefault();
|
|
339
|
-
if (this._snapDisabled) {
|
|
340
|
-
this._contentRef.nativeElement.scrollBy(event.deltaY, 0);
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
if (event.deltaY < 0) {
|
|
344
|
-
this.moveLeft();
|
|
345
|
-
}
|
|
346
|
-
else if (event.deltaY > 0) {
|
|
347
|
-
this.moveRight();
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
onWindowResize() {
|
|
353
|
-
this.refreshWrapperDimensions();
|
|
354
|
-
this.checkNavStatus();
|
|
355
|
-
}
|
|
356
|
-
_setIsDragging(value) {
|
|
357
|
-
if (this._isDragging === value) {
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
this._isDragging = value;
|
|
361
|
-
value ? this.dragStart.emit() : this.dragEnd.emit();
|
|
362
|
-
}
|
|
363
|
-
_startGlobalListening(isTouchEvent) {
|
|
364
|
-
if (!this._onMouseMoveListener) {
|
|
365
|
-
const eventName = isTouchEvent ? 'touchmove' : 'mousemove';
|
|
366
|
-
this._onMouseMoveListener = this._renderer.listen('document', eventName, this.onMouseMoveHandler.bind(this));
|
|
367
|
-
}
|
|
368
|
-
if (!this._onMouseUpListener) {
|
|
369
|
-
const eventName = isTouchEvent ? 'touchend' : 'mouseup';
|
|
370
|
-
this._onMouseUpListener = this._renderer.listen('document', eventName, this.onMouseUpHandler.bind(this));
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
_stopGlobalListening() {
|
|
374
|
-
if (this._onMouseMoveListener) {
|
|
375
|
-
this._onMouseMoveListener = this._onMouseMoveListener();
|
|
376
|
-
}
|
|
377
|
-
if (this._onMouseUpListener) {
|
|
378
|
-
this._onMouseUpListener = this._onMouseUpListener();
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
disableScroll(axis) {
|
|
382
|
-
this._renderer.setStyle(this._contentRef.nativeElement, `overflow-${axis}`, 'hidden');
|
|
383
|
-
}
|
|
384
|
-
enableScroll(axis) {
|
|
385
|
-
this._renderer.setStyle(this._contentRef.nativeElement, `overflow-${axis}`, 'auto');
|
|
386
|
-
}
|
|
387
|
-
hideScrollbar() {
|
|
388
|
-
if (this._contentRef.nativeElement.style.display !== 'none' &&
|
|
389
|
-
!this.wrapper) {
|
|
390
|
-
this.parentNode = this._contentRef.nativeElement.parentNode;
|
|
391
|
-
// create container element
|
|
392
|
-
this.wrapper = this._renderer.createElement('div');
|
|
393
|
-
this._renderer.addClass(this.wrapper, 'carousel-wrapper');
|
|
394
|
-
// this._renderer.setAttribute(this.wrapper, 'class', 'carousel-wrapper');
|
|
395
|
-
// this._renderer.addClass(this.wrapper, 'carousel-container');
|
|
396
|
-
this.refreshWrapperDimensions();
|
|
397
|
-
this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');
|
|
398
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'width', `calc(100% + ${this.scrollbarWidth})`);
|
|
399
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'height', `calc(100% + ${this.scrollbarWidth})`);
|
|
400
|
-
// Append container element to component element.
|
|
401
|
-
this._renderer.appendChild(this._elementRef.nativeElement, this.wrapper);
|
|
402
|
-
// Append content element to container element.
|
|
403
|
-
this._renderer.appendChild(this.wrapper, this._contentRef.nativeElement);
|
|
404
|
-
this.adjustMarginToLastChild();
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
showScrollbar() {
|
|
408
|
-
if (this.wrapper) {
|
|
409
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'width', '100%');
|
|
410
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'height', this.wrapper.style.height);
|
|
411
|
-
if (this.parentNode !== null) {
|
|
412
|
-
this.parentNode.removeChild(this.wrapper);
|
|
413
|
-
this.parentNode.appendChild(this._contentRef.nativeElement);
|
|
414
|
-
}
|
|
415
|
-
this.wrapper = null;
|
|
416
|
-
this.adjustMarginToLastChild();
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
checkScrollbar() {
|
|
420
|
-
if (this._contentRef.nativeElement.scrollWidth <=
|
|
421
|
-
this._contentRef.nativeElement.clientWidth) {
|
|
422
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'height', '100%');
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'height', `calc(100% + ${this.scrollbarWidth})`);
|
|
426
|
-
}
|
|
427
|
-
if (this._contentRef.nativeElement.scrollHeight <=
|
|
428
|
-
this._contentRef.nativeElement.clientHeight) {
|
|
429
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'width', '100%');
|
|
430
|
-
}
|
|
431
|
-
else {
|
|
432
|
-
this._renderer.setStyle(this._contentRef.nativeElement, 'width', `calc(100% + ${this.scrollbarWidth})`);
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
setScrollBar() {
|
|
436
|
-
if (this.scrollbarHidden) {
|
|
437
|
-
this.hideScrollbar();
|
|
438
|
-
}
|
|
439
|
-
else {
|
|
440
|
-
this.showScrollbar();
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
getScrollbarWidth() {
|
|
444
|
-
/**
|
|
445
|
-
* Browser Scrollbar Widths (2016)
|
|
446
|
-
* OSX (Chrome, Safari, Firefox) - 15px
|
|
447
|
-
* Windows XP (IE7, Chrome, Firefox) - 17px
|
|
448
|
-
* Windows 7 (IE10, IE11, Chrome, Firefox) - 17px
|
|
449
|
-
* Windows 8.1 (IE11, Chrome, Firefox) - 17px
|
|
450
|
-
* Windows 10 (IE11, Chrome, Firefox) - 17px
|
|
451
|
-
* Windows 10 (Edge 12/13) - 12px
|
|
452
|
-
*/
|
|
453
|
-
const outer = this._renderer.createElement('div');
|
|
454
|
-
this._renderer.setStyle(outer, 'visibility', 'hidden');
|
|
455
|
-
this._renderer.setStyle(outer, 'width', '100px');
|
|
456
|
-
this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar'); // needed for WinJS apps
|
|
457
|
-
// document.body.appendChild(outer);
|
|
458
|
-
this._renderer.appendChild(this._document.body, outer);
|
|
459
|
-
// this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);
|
|
460
|
-
const widthNoScroll = outer.offsetWidth;
|
|
461
|
-
// force scrollbars
|
|
462
|
-
this._renderer.setStyle(outer, 'overflow', 'scroll');
|
|
463
|
-
// add innerdiv
|
|
464
|
-
const inner = this._renderer.createElement('div');
|
|
465
|
-
this._renderer.setStyle(inner, 'width', '100%');
|
|
466
|
-
this._renderer.appendChild(outer, inner);
|
|
467
|
-
const widthWithScroll = inner.offsetWidth;
|
|
468
|
-
// remove divs
|
|
469
|
-
this._renderer.removeChild(this._document.body, outer);
|
|
470
|
-
/**
|
|
471
|
-
* Scrollbar width will be 0 on Mac OS with the
|
|
472
|
-
* default "Only show scrollbars when scrolling" setting (Yosemite and up).
|
|
473
|
-
* setting default width to 20;
|
|
474
|
-
*/
|
|
475
|
-
return widthNoScroll - widthWithScroll || 20;
|
|
476
|
-
}
|
|
477
|
-
refreshWrapperDimensions() {
|
|
478
|
-
if (this.wrapper) {
|
|
479
|
-
const height = this._elementRef.nativeElement.style.height ||
|
|
480
|
-
this._elementRef.nativeElement.offsetHeight;
|
|
481
|
-
this._renderer.setStyle(this.wrapper, 'width', '100%');
|
|
482
|
-
this._renderer.setStyle(this.wrapper, 'height', height === 0 ? 'auto' : height + 'px');
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
/*
|
|
486
|
-
* The below solution is heavily inspired from
|
|
487
|
-
* https://gist.github.com/andjosh/6764939
|
|
488
|
-
*/
|
|
489
|
-
scrollTo(element, to, duration) {
|
|
490
|
-
this.isAnimating = true;
|
|
491
|
-
const start = element.scrollLeft, change = to - start - this.snapOffset, increment = 20;
|
|
492
|
-
let currentTime = 0;
|
|
493
|
-
// t = current time
|
|
494
|
-
// b = start value
|
|
495
|
-
// c = change in value
|
|
496
|
-
// d = duration
|
|
497
|
-
const easeInOutQuad = (t, b, c, d) => {
|
|
498
|
-
t /= d / 2;
|
|
499
|
-
if (t < 1) {
|
|
500
|
-
return (c / 2) * t * t + b;
|
|
501
|
-
}
|
|
502
|
-
t--;
|
|
503
|
-
return (-c / 2) * (t * (t - 2) - 1) + b;
|
|
504
|
-
};
|
|
505
|
-
const animateScroll = () => {
|
|
506
|
-
currentTime += increment;
|
|
507
|
-
element.scrollLeft = easeInOutQuad(currentTime, start, change, duration);
|
|
508
|
-
if (currentTime < duration) {
|
|
509
|
-
this.scrollToTimer = setTimeout(animateScroll, increment);
|
|
510
|
-
}
|
|
511
|
-
else {
|
|
512
|
-
// run one more frame to make sure the animation is fully finished
|
|
513
|
-
setTimeout(() => {
|
|
514
|
-
this.isAnimating = false;
|
|
515
|
-
this.snapAnimationFinished.emit(this.currIndex);
|
|
516
|
-
}, increment);
|
|
517
|
-
}
|
|
518
|
-
};
|
|
519
|
-
animateScroll();
|
|
520
|
-
}
|
|
521
|
-
locateCurrentIndex(snap) {
|
|
522
|
-
this.currentChildWidth((currentChildWidth, nextChildrenWidth, childrenWidth, idx, stop) => {
|
|
523
|
-
if (this._contentRef.nativeElement.scrollLeft >=
|
|
524
|
-
childrenWidth &&
|
|
525
|
-
this._contentRef.nativeElement.scrollLeft <=
|
|
526
|
-
nextChildrenWidth) {
|
|
527
|
-
if (nextChildrenWidth -
|
|
528
|
-
this._contentRef.nativeElement.scrollLeft >
|
|
529
|
-
currentChildWidth / 2 &&
|
|
530
|
-
!this.isScrollReachesRightEnd()) {
|
|
531
|
-
// roll back scrolling
|
|
532
|
-
if (!this.isAnimating) {
|
|
533
|
-
this.currIndex = idx;
|
|
534
|
-
}
|
|
535
|
-
if (snap) {
|
|
536
|
-
this.scrollTo(this._contentRef.nativeElement, childrenWidth, this.snapDuration);
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
else if (this._contentRef.nativeElement.scrollLeft !== 0) {
|
|
540
|
-
// forward scrolling
|
|
541
|
-
if (!this.isAnimating) {
|
|
542
|
-
this.currIndex = idx + 1;
|
|
543
|
-
}
|
|
544
|
-
if (snap) {
|
|
545
|
-
this.scrollTo(this._contentRef.nativeElement, childrenWidth + currentChildWidth, this.snapDuration);
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
stop();
|
|
549
|
-
}
|
|
550
|
-
else if (idx + 1 === this._children.length - 1) {
|
|
551
|
-
// reaches last index
|
|
552
|
-
if (!this.isAnimating) {
|
|
553
|
-
this.currIndex = idx + 1;
|
|
554
|
-
}
|
|
555
|
-
stop();
|
|
556
|
-
}
|
|
557
|
-
});
|
|
558
|
-
}
|
|
559
|
-
currentChildWidth(cb) {
|
|
560
|
-
let childrenWidth = 0;
|
|
561
|
-
let shouldBreak = false;
|
|
562
|
-
const breakFunc = function () {
|
|
563
|
-
shouldBreak = true;
|
|
564
|
-
};
|
|
565
|
-
const childrenArr = this._children.toArray();
|
|
566
|
-
for (let i = 0; i < childrenArr.length; i++) {
|
|
567
|
-
if (i === childrenArr.length - 1) {
|
|
568
|
-
break;
|
|
569
|
-
}
|
|
570
|
-
if (shouldBreak) {
|
|
571
|
-
break;
|
|
572
|
-
}
|
|
573
|
-
const nextChildrenWidth = childrenWidth +
|
|
574
|
-
childrenArr[i + 1]._elementRef.nativeElement.clientWidth;
|
|
575
|
-
const currentClildWidth = childrenArr[i]._elementRef.nativeElement.clientWidth;
|
|
576
|
-
cb(currentClildWidth, nextChildrenWidth, childrenWidth, i, breakFunc);
|
|
577
|
-
childrenWidth += currentClildWidth;
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
toChildrenLocation() {
|
|
581
|
-
let to = 0;
|
|
582
|
-
const childrenArr = this._children.toArray();
|
|
583
|
-
for (let i = 0; i < this.currIndex; i++) {
|
|
584
|
-
to += childrenArr[i]._elementRef.nativeElement.clientWidth;
|
|
585
|
-
}
|
|
586
|
-
return to;
|
|
587
|
-
}
|
|
588
|
-
locateCarouselItem(element) {
|
|
589
|
-
let item = null;
|
|
590
|
-
const childrenArr = this._children.toArray();
|
|
591
|
-
for (let i = 0; i < childrenArr.length; i++) {
|
|
592
|
-
if (element === childrenArr[i]._elementRef.nativeElement) {
|
|
593
|
-
item = childrenArr[i];
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
return item;
|
|
597
|
-
}
|
|
598
|
-
markElDimension() {
|
|
599
|
-
if (this.wrapper) {
|
|
600
|
-
this.elWidth = this.wrapper.style.width;
|
|
601
|
-
this.elHeight = this.wrapper.style.height;
|
|
602
|
-
}
|
|
603
|
-
else {
|
|
604
|
-
this.elWidth =
|
|
605
|
-
this._elementRef.nativeElement.style.width ||
|
|
606
|
-
this._elementRef.nativeElement.offsetWidth + 'px';
|
|
607
|
-
this.elHeight =
|
|
608
|
-
this._elementRef.nativeElement.style.height ||
|
|
609
|
-
this._elementRef.nativeElement.offsetHeight + 'px';
|
|
610
|
-
}
|
|
611
|
-
const container = this.wrapper || this.parentNode;
|
|
612
|
-
const containerWidth = container ? container.clientWidth : 0;
|
|
613
|
-
if (this._children.length > 1) {
|
|
614
|
-
this.indexBound = this.maximumIndex(containerWidth, this._children.toArray());
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
maximumIndex(containerWidth, childrenElements) {
|
|
618
|
-
let count = 0;
|
|
619
|
-
let childrenWidth = 0;
|
|
620
|
-
for (let i = 0; i <= childrenElements.length; i++) {
|
|
621
|
-
// last N element
|
|
622
|
-
const carouselItemDirective = childrenElements[childrenElements.length - 1 - i];
|
|
623
|
-
if (!carouselItemDirective) {
|
|
624
|
-
break;
|
|
625
|
-
}
|
|
626
|
-
else {
|
|
627
|
-
const nativeElement = carouselItemDirective._elementRef.nativeElement;
|
|
628
|
-
let itemWidth = nativeElement.clientWidth;
|
|
629
|
-
if (itemWidth === 0 && nativeElement.firstElementChild) {
|
|
630
|
-
itemWidth =
|
|
631
|
-
carouselItemDirective._elementRef.nativeElement
|
|
632
|
-
.firstElementChild.clientWidth;
|
|
633
|
-
}
|
|
634
|
-
childrenWidth += itemWidth;
|
|
635
|
-
if (childrenWidth < containerWidth) {
|
|
636
|
-
count++;
|
|
637
|
-
}
|
|
638
|
-
else {
|
|
639
|
-
break;
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
return childrenElements.length - count;
|
|
644
|
-
}
|
|
645
|
-
isScrollReachesRightEnd() {
|
|
646
|
-
const scrollLeftPos = this._contentRef.nativeElement.scrollLeft +
|
|
647
|
-
this._contentRef.nativeElement.offsetWidth;
|
|
648
|
-
return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;
|
|
649
|
-
}
|
|
650
|
-
/**
|
|
651
|
-
* adds a margin right style to the last child element which will resolve the issue
|
|
652
|
-
* of last item gets cutoff.
|
|
653
|
-
*/
|
|
654
|
-
adjustMarginToLastChild() {
|
|
655
|
-
// if (this._children && this._children.length > 0 && this.hideScrollbar) {
|
|
656
|
-
// const childrenArr = this._children.toArray();
|
|
657
|
-
// const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;
|
|
658
|
-
// if (this.wrapper && childrenArr.length > 1) {
|
|
659
|
-
// this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);
|
|
660
|
-
// } else {
|
|
661
|
-
// this._renderer.setStyle(lastItem, 'margin-right', 0);
|
|
662
|
-
// }
|
|
663
|
-
// }
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
PepCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PepCarouselComponent, deps: [{ token: ElementRef }, { token: Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
667
|
-
PepCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PepCarouselComponent, selector: "pep-carousel", inputs: { scrollbarHidden: "scrollbarHidden", disabled: "disabled", xDisabled: "xDisabled", yDisabled: "yDisabled", xWheelEnabled: "xWheelEnabled", dragDisabled: "dragDisabled", snapDisabled: "snapDisabled", snapOffset: "snapOffset", snapDuration: "snapDuration" }, outputs: { dsInitialized: "dsInitialized", indexChanged: "indexChanged", reachesLeftBound: "reachesLeftBound", reachesRightBound: "reachesRightBound", snapAnimationFinished: "snapAnimationFinished", dragStart: "dragStart", dragEnd: "dragEnd" }, host: { listeners: { "wheel": "onWheel($event)", "window:resize": "onWindowResize()" }, properties: { "style.pointer-events": "this._pointerEvents" } }, queries: [{ propertyName: "_children", predicate: PepCarouselItemDirective, descendants: true }], viewQueries: [{ propertyName: "_contentRef", first: true, predicate: ["contentRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
668
|
-
<div class="carousel-content" #contentRef>
|
|
669
|
-
<ng-content></ng-content>
|
|
670
|
-
</div>
|
|
671
|
-
`, isInline: true, styles: [":host{overflow:hidden;display:block}.carousel-content{height:100%;overflow:auto;white-space:nowrap}\n"] });
|
|
672
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PepCarouselComponent, decorators: [{
|
|
673
|
-
type: Component,
|
|
674
|
-
args: [{ selector: 'pep-carousel', template: `
|
|
675
|
-
<div class="carousel-content" #contentRef>
|
|
676
|
-
<ng-content></ng-content>
|
|
677
|
-
</div>
|
|
678
|
-
`, styles: [":host{overflow:hidden;display:block}.carousel-content{height:100%;overflow:auto;white-space:nowrap}\n"] }]
|
|
679
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
|
|
680
|
-
type: Inject,
|
|
681
|
-
args: [ElementRef]
|
|
682
|
-
}] }, { type: i0.Renderer2, decorators: [{
|
|
683
|
-
type: Inject,
|
|
684
|
-
args: [Renderer2]
|
|
685
|
-
}] }, { type: undefined, decorators: [{
|
|
686
|
-
type: Inject,
|
|
687
|
-
args: [DOCUMENT]
|
|
688
|
-
}] }]; }, propDecorators: { _contentRef: [{
|
|
689
|
-
type: ViewChild,
|
|
690
|
-
args: ['contentRef', { static: true }]
|
|
691
|
-
}], _children: [{
|
|
692
|
-
type: ContentChildren,
|
|
693
|
-
args: [PepCarouselItemDirective, { descendants: true }]
|
|
694
|
-
}], _pointerEvents: [{
|
|
695
|
-
type: HostBinding,
|
|
696
|
-
args: ['style.pointer-events']
|
|
697
|
-
}], dsInitialized: [{
|
|
698
|
-
type: Output
|
|
699
|
-
}], indexChanged: [{
|
|
700
|
-
type: Output
|
|
701
|
-
}], reachesLeftBound: [{
|
|
702
|
-
type: Output
|
|
703
|
-
}], reachesRightBound: [{
|
|
704
|
-
type: Output
|
|
705
|
-
}], snapAnimationFinished: [{
|
|
706
|
-
type: Output
|
|
707
|
-
}], dragStart: [{
|
|
708
|
-
type: Output
|
|
709
|
-
}], dragEnd: [{
|
|
710
|
-
type: Output
|
|
711
|
-
}], scrollbarHidden: [{
|
|
712
|
-
type: Input,
|
|
713
|
-
args: ['scrollbarHidden']
|
|
714
|
-
}], disabled: [{
|
|
715
|
-
type: Input,
|
|
716
|
-
args: ['disabled']
|
|
717
|
-
}], xDisabled: [{
|
|
718
|
-
type: Input,
|
|
719
|
-
args: ['xDisabled']
|
|
720
|
-
}], yDisabled: [{
|
|
721
|
-
type: Input,
|
|
722
|
-
args: ['yDisabled']
|
|
723
|
-
}], xWheelEnabled: [{
|
|
724
|
-
type: Input,
|
|
725
|
-
args: ['xWheelEnabled']
|
|
726
|
-
}], dragDisabled: [{
|
|
727
|
-
type: Input,
|
|
728
|
-
args: ['dragDisabled']
|
|
729
|
-
}], snapDisabled: [{
|
|
730
|
-
type: Input,
|
|
731
|
-
args: ['snapDisabled']
|
|
732
|
-
}], snapOffset: [{
|
|
733
|
-
type: Input,
|
|
734
|
-
args: ['snapOffset']
|
|
735
|
-
}], snapDuration: [{
|
|
736
|
-
type: Input,
|
|
737
|
-
args: ['snapDuration']
|
|
738
|
-
}], onWheel: [{
|
|
739
|
-
type: HostListener,
|
|
740
|
-
args: ['wheel', ['$event']]
|
|
741
|
-
}], onWindowResize: [{
|
|
742
|
-
type: HostListener,
|
|
743
|
-
args: ['window:resize']
|
|
744
|
-
}] } });
|
|
745
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBR04sWUFBWSxFQUNaLFNBQVMsRUFDVCxlQUFlLEVBR2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQXVCckUsTUFBTSxPQUFPLG9CQUFvQjtJQWdEN0I7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQXNDRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQUs7UUFDZixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQXNCRDs7T0FFRztJQUNILElBQ0ksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxD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dCB7XG4gICAgRWxlbWVudFJlZixcbiAgICBDb21wb25lbnQsXG4gICAgUmVuZGVyZXIyLFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5qZWN0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFBlcENhcm91c2VsSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vY2Fyb3VzZWwtaXRlbS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWNvbnRlbnRcIiAjY29udGVudFJlZj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLmNhcm91c2VsLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBDYXJvdXNlbENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQge1xuICAgIHByaXZhdGUgX2luZGV4ID0gMDtcblxuICAgIHByaXZhdGUgX3Njcm9sbGJhckhpZGRlbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3hEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfeFdoZWVsRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfeURpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kcmFnRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3NuYXBEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfc25hcE9mZnNldCA9IDA7XG5cbiAgICBwcml2YXRlIF9zbmFwRHVyYXRpb24gPSA1MDA7XG5cbiAgICBwcml2YXRlIF9pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9vbk1vdXNlTW92ZUxpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vbk1vdXNlVXBMaXN0ZW5lcjogKCkgPT4gYW55O1xuXG4gICAgcHJpdmF0ZSBfb25Nb3VzZURvd25MaXN0ZW5lcjogKCkgPT4gYW55O1xuXG4gICAgcHJpdmF0ZSBfb25TY3JvbGxMaXN0ZW5lcjogKCkgPT4gYW55O1xuXG4gICAgcHJpdmF0ZSBfb25EcmFnU3RhcnRMaXN0ZW5lcjogKCkgPT4gYW55O1xuXG4gICAgLyoqXG4gICAgICogSXMgdGhlIHVzZXIgY3VycmVudGx5IHByZXNzaW5nIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgaXNQcmVzc2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgdXNlciBjdXJyZW50bHkgc2Nyb2xsaW5nIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgaXNTY3JvbGxpbmcgPSBmYWxzZTtcblxuICAgIHNjcm9sbFRpbWVyOiBhbnk7IC8vIHwgTm9kZUpTLlRpbWVyID0gLTE7XG5cbiAgICBzY3JvbGxUb1RpbWVyOiBhbnk7IC8vIHwgTm9kZUpTLlRpbWVyID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgdXNlciBjdXJyZW50bHkgZHJhZ2dpbmcgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNEcmFnZ2luZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHggY29vcmRpbmF0ZXMgb24gdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBkb3duWCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgeSBjb29yZGluYXRlcyBvbiB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIGRvd25ZID0gMDtcblxuICAgIGRpc3BsYXlUeXBlOiBzdHJpbmcgfCBudWxsID0gJ2Jsb2NrJztcblxuICAgIGVsV2lkdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgZWxIZWlnaHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBhcmVudE5vZGUgb2YgY2Fyb3VzZWwgRWxlbWVudFxuICAgICAqL1xuICAgIHBhcmVudE5vZGU6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhcm91c2VsIEVsZW1lbnRcbiAgICAgKi9cblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnRSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KSBfY29udGVudFJlZjogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgX2NoaWxkcmVuOiBRdWVyeUxpc3Q8UGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlPjtcblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUucG9pbnRlci1ldmVudHMnKSBfcG9pbnRlckV2ZW50cyA9ICdhdXRvJztcblxuICAgIHdyYXBwZXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbDtcblxuICAgIHNjcm9sbGJhcldpZHRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGdldCBjdXJySW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgICB9XG4gICAgc2V0IGN1cnJJbmRleCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuX2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9pbmRleCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbmRleENoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0FuaW1hdGluZyA9IGZhbHNlO1xuXG4gICAgcHJldkNoaWxkcmVuTGVuZ3RoID0gMDtcblxuICAgIGluZGV4Qm91bmQgPSAwO1xuXG4gICAgQE91dHB1dCgpIGRzSW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgaW5kZXhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KCkgcmVhY2hlc0xlZnRCb3VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKSByZWFjaGVzUmlnaHRCb3VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKSBzbmFwQW5pbWF0aW9uRmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKSBkcmFnU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHNjcm9sbGJhciBpcyBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoJ3Njcm9sbGJhckhpZGRlbicpXG4gICAgZ2V0IHNjcm9sbGJhckhpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbGJhckhpZGRlbjtcbiAgICB9XG4gICAgc2V0IHNjcm9sbGJhckhpZGRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJIaWRkZW4gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseSBkcmFnaW5nIGFuZCBzY3JvbGxpbmcgaXMgYmUgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBob3Jpem9udGFsbHkgZHJhZ2dpbmcgYW5kIHNjcm9sbGluZyBpcyBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgneERpc2FibGVkJylcbiAgICBnZXQgeERpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5feERpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgeERpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3hEaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdmVydGljYWxseSBkcmFnZ2luZyBhbmQgc2Nyb2xsaW5nIGV2ZW50cyBpcyBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgneURpc2FibGVkJylcbiAgICBnZXQgeURpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5feURpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgeURpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3lEaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc2Nyb2xsaW5nIGhvcml6b250YWxseSB3aXRoIG1vdXNlIHdoZWVsIGlzIGVuYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoJ3hXaGVlbEVuYWJsZWQnKVxuICAgIGdldCB4V2hlZWxFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5feFdoZWVsRW5hYmxlZDtcbiAgICB9XG4gICAgc2V0IHhXaGVlbEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5feFdoZWVsRW5hYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgnZHJhZ0Rpc2FibGVkJylcbiAgICBnZXQgZHJhZ0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ0Rpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgZHJhZ0Rpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RyYWdEaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgnc25hcERpc2FibGVkJylcbiAgICBnZXQgc25hcERpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc25hcERpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgc25hcERpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3NuYXBEaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgnc25hcE9mZnNldCcpXG4gICAgZ2V0IHNuYXBPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbmFwT2Zmc2V0O1xuICAgIH1cbiAgICBzZXQgc25hcE9mZnNldCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3NuYXBPZmZzZXQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ3NuYXBEdXJhdGlvbicpXG4gICAgZ2V0IHNuYXBEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBEdXJhdGlvbjtcbiAgICB9XG4gICAgc2V0IHNuYXBEdXJhdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3NuYXBEdXJhdGlvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEVsZW1lbnRSZWYpIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBJbmplY3QoUmVuZGVyZXIyKSBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55XG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSBgJHt0aGlzLmdldFNjcm9sbGJhcldpZHRoKCl9cHhgO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnNldFNjcm9sbEJhcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnhEaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkIHx8IHRoaXMuX3Njcm9sbGJhckhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2Nyb2xsKCd4Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNjcm9sbCgneCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueURpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNjcm9sbCgneScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVTY3JvbGwoJ3knKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gYXV0byBhc3NpZ24gY29tcHV0ZWQgY3NzXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdkcmFnLXNjcm9sbCcsXG4gICAgICAgICAgICAndHJ1ZSdcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlID1cbiAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIC5kaXNwbGF5XG4gICAgICAgICAgICAgICAgOiAnYmxvY2snO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2Rpc3BsYXknLFxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VHlwZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICd3aGl0ZVNwYWNlJyxcbiAgICAgICAgICAgICdub1dyYXAnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gc3RvcmUgZWxlIHdpZHRoIGhlaWdodCBmb3IgbGF0ZXIgdXNlclxuICAgICAgICB0aGlzLm1hcmtFbERpbWVuc2lvbigpO1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgIHRoaXMuZWxXaWR0aFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgdGhpcy5lbEhlaWdodFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uTW91c2VEb3duTGlzdGVuZXIgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnbW91c2Vkb3duJyxcbiAgICAgICAgICAgIHRoaXMub25Nb3VzZURvd25IYW5kbGVyLmJpbmQodGhpcylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fb25TY3JvbGxMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdzY3JvbGwnLFxuICAgICAgICAgICAgdGhpcy5vblNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgICAvLyBwcmV2ZW50IEZpcmVmb3ggZnJvbSBkcmFnZ2luZyBpbWFnZXNcbiAgICAgICAgdGhpcy5fb25EcmFnU3RhcnRMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICAgICAnZHJhZ3N0YXJ0JyxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNoZWNrTmF2U3RhdHVzKCk7XG4gICAgICAgIHRoaXMuZHNJbml0aWFsaXplZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuYWRqdXN0TWFyZ2luVG9MYXN0Q2hpbGQoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIC8vIGF2b2lkIGV4dHJhIGNoZWNrc1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoICE9PSB0aGlzLnByZXZDaGlsZHJlbkxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tYXJrRWxEaW1lbnNpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTY3JvbGxiYXIoKTtcbiAgICAgICAgICAgIHRoaXMucHJldkNoaWxkcmVuTGVuZ3RoID0gdGhpcy5fY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5jaGVja05hdlN0YXR1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdkcmFnLXNjcm9sbCcsXG4gICAgICAgICAgICAnZmFsc2UnXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLl9vbk1vdXNlRG93bkxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9vbk1vdXNlRG93bkxpc3RlbmVyID0gdGhpcy5fb25Nb3VzZURvd25MaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vblNjcm9sbExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9vblNjcm9sbExpc3RlbmVyID0gdGhpcy5fb25TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vbkRyYWdTdGFydExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkRyYWdTdGFydExpc3RlbmVyID0gdGhpcy5fb25EcmFnU3RhcnRMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZU1vdmVIYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMub25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzUHJlc3NlZCAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgcHJldmVudCBzY3JvbGwgc3R1Y2sgaWYgYnJvd3NlciBsb3N0IGZvY3VzXG4gICAgICAgICAgICAvLyBNb3VzZUV2ZW50LmJ1dHRvbnMgbm90IHN1cHBvcnQgYnkgU2FmYXJpXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmJ1dHRvbnMgJiYgIWV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub25Nb3VzZVVwSGFuZGxlcihldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3BvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLl9zZXRJc0RyYWdnaW5nKHRydWUpO1xuXG4gICAgICAgICAgICAvLyBEcmFnIFhcbiAgICAgICAgICAgIGlmICghdGhpcy54RGlzYWJsZWQgJiYgIXRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50WCA9IChldmVudCBhcyBNb3VzZUV2ZW50KS5jbGllbnRYO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgLVxuICAgICAgICAgICAgICAgICAgICBjbGllbnRYICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWDtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25YID0gY2xpZW50WDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRHJhZyBZXG4gICAgICAgICAgICBpZiAoIXRoaXMueURpc2FibGVkICYmICF0aGlzLmRyYWdEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudFkgPSAoZXZlbnQgYXMgTW91c2VFdmVudCkuY2xpZW50WTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCAtXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudFkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25ZO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBjbGllbnRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd25IYW5kbGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhcm91c2VsSXRlbTogUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgbnVsbCA9IHRoaXMubG9jYXRlQ2Fyb3VzZWxJdGVtKFxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNhcm91c2VsSXRlbSAmJiBjYXJvdXNlbEl0ZW0uZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1RvdWNoRXZlbnQgPSBldmVudC50eXBlID09PSAndG91Y2hzdGFydCc7XG5cbiAgICAgICAgdGhpcy5fc3RhcnRHbG9iYWxMaXN0ZW5pbmcoaXNUb3VjaEV2ZW50KTtcbiAgICAgICAgdGhpcy5pc1ByZXNzZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBldmVudCBhcyBNb3VzZUV2ZW50O1xuICAgICAgICB0aGlzLmRvd25YID0gbW91c2VFdmVudC5jbGllbnRYO1xuICAgICAgICB0aGlzLmRvd25ZID0gbW91c2VFdmVudC5jbGllbnRZO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRvVGltZXIgYXMgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBvblNjcm9sbEhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuY2hlY2tOYXZTdGF0dXMoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUHJlc3NlZCAmJiAhdGhpcy5pc0FuaW1hdGluZyAmJiAhdGhpcy5zbmFwRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVGltZXIgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGVDdXJyZW50SW5kZXgodHJ1ZSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGVDdXJyZW50SW5kZXgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW91c2VVcEhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fcG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICAgICAgICAgIHRoaXMuX3NldElzRHJhZ2dpbmcoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNuYXBEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRlQ3VycmVudEluZGV4KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0ZUN1cnJlbnRJbmRleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc3RvcEdsb2JhbExpc3RlbmluZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOYXYgYnV0dG9uXG4gICAgICovXG4gICAgbW92ZUxlZnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJJbmRleCAhPT0gMCB8fCB0aGlzLnNuYXBEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXgtLTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRvVGltZXIgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudG9DaGlsZHJlbkxvY2F0aW9uKCksXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlUmlnaHQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMud3JhcHBlciB8fCB0aGlzLnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyID8gY29udGFpbmVyLmNsaWVudFdpZHRoIDogMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5pc1Njcm9sbFJlYWNoZXNSaWdodEVuZCgpICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJJbmRleCA8XG4gICAgICAgICAgICB0aGlzLm1heGltdW1JbmRleChjb250YWluZXJXaWR0aCwgdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY3VyckluZGV4Kys7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUb1RpbWVyIGFzIG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLnRvQ2hpbGRyZW5Mb2NhdGlvbigpLFxuICAgICAgICAgICAgICAgIHRoaXMuc25hcER1cmF0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZVRvKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy53cmFwcGVyIHx8IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIgPyBjb250YWluZXIuY2xpZW50V2lkdGggOiAwO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbmRleCA+PSAwICYmXG4gICAgICAgICAgICBpbmRleCAhPT0gdGhpcy5jdXJySW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuY3VyckluZGV4IDw9XG4gICAgICAgICAgICB0aGlzLm1heGltdW1JbmRleChjb250YWluZXJXaWR0aCwgdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY3VyckluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhpbXVtSW5kZXgoY29udGFpbmVyV2lkdGgsIHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUb1RpbWVyIGFzIG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0aGlzLnRvQ2hpbGRyZW5Mb2NhdGlvbigpLFxuICAgICAgICAgICAgICAgIHRoaXMuc25hcER1cmF0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tOYXZTdGF0dXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb25seU9uZUl0ZW0gPSBCb29sZWFuKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA8PSAxKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklzTGFyZ2VyVGhhbkNvbnRlbnQgPSBCb29sZWFuKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA8PVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChvbmx5T25lSXRlbSB8fCBjb250YWluZXJJc0xhcmdlclRoYW5Db250ZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gb25seSBvbmUgZWxlbWVudFxuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc0xlZnRCb3VuZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc1JpZ2h0Qm91bmQuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1Njcm9sbFJlYWNoZXNSaWdodEVuZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVhY2hlZCByaWdodCBlbmRcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNMZWZ0Qm91bmQuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzUmlnaHRCb3VuZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyByZWFjaGVkIGxlZnQgZW5kXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzTGVmdEJvdW5kLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzUmlnaHRCb3VuZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1pZGRsZVxuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc0xlZnRCb3VuZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNSaWdodEJvdW5kLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aGVlbCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uV2hlZWwoZXZlbnQ6IFdoZWVsRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3hXaGVlbEVuYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zbmFwRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoZXZlbnQuZGVsdGFZLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlTGVmdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVSaWdodCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoV3JhcHBlckRpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5jaGVja05hdlN0YXR1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldElzRHJhZ2dpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRHJhZ2dpbmcgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0RyYWdnaW5nID0gdmFsdWU7XG4gICAgICAgIHZhbHVlID8gdGhpcy5kcmFnU3RhcnQuZW1pdCgpIDogdGhpcy5kcmFnRW5kLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGFydEdsb2JhbExpc3RlbmluZyhpc1RvdWNoRXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vbk1vdXNlTW92ZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBpc1RvdWNoRXZlbnQgPyAndG91Y2htb3ZlJyA6ICdtb3VzZW1vdmUnO1xuICAgICAgICAgICAgdGhpcy5fb25Nb3VzZU1vdmVMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9vbk1vdXNlVXBMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gaXNUb3VjaEV2ZW50ID8gJ3RvdWNoZW5kJyA6ICdtb3VzZXVwJztcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VVcExpc3RlbmVyID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIHRoaXMub25Nb3VzZVVwSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RvcEdsb2JhbExpc3RlbmluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuX29uTW91c2VNb3ZlTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VNb3ZlTGlzdGVuZXIgPSB0aGlzLl9vbk1vdXNlTW92ZUxpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fb25Nb3VzZVVwTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VVcExpc3RlbmVyID0gdGhpcy5fb25Nb3VzZVVwTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZVNjcm9sbChheGlzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBgb3ZlcmZsb3ctJHtheGlzfWAsXG4gICAgICAgICAgICAnaGlkZGVuJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlU2Nyb2xsKGF4aXM6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGBvdmVyZmxvdy0ke2F4aXN9YCxcbiAgICAgICAgICAgICdhdXRvJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVNjcm9sbGJhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgIXRoaXMud3JhcHBlclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZSA9IHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMud3JhcHBlciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy53cmFwcGVyLCAnY2Fyb3VzZWwtd3JhcHBlcicpO1xuICAgICAgICAgICAgLy8gdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMud3JhcHBlciwgJ2NsYXNzJywgJ2Nhcm91c2VsLXdyYXBwZXInKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2Nhcm91c2VsLWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hXcmFwcGVyRGltZW5zaW9ucygpO1xuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLndyYXBwZXIsICdvdmVyZmxvdycsICdoaWRkZW4nKTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgYGNhbGMoMTAwJSArICR7dGhpcy5zY3JvbGxiYXJXaWR0aH0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICBgY2FsYygxMDAlICsgJHt0aGlzLnNjcm9sbGJhcldpZHRofSlgXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgY29udGFpbmVyIGVsZW1lbnQgdG8gY29tcG9uZW50IGVsZW1lbnQuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgY29udGVudCBlbGVtZW50IHRvIGNvbnRhaW5lciBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5hZGp1c3RNYXJnaW5Ub0xhc3RDaGlsZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93U2Nyb2xsYmFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnMTAwJSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmhlaWdodFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud3JhcHBlciA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0TWFyZ2luVG9MYXN0Q2hpbGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA8PVxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgICAgICcxMDAlJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICBgY2FsYygxMDAlICsgJHt0aGlzLnNjcm9sbGJhcldpZHRofSlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPD1cbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnMTAwJSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICBgY2FsYygxMDAlICsgJHt0aGlzLnNjcm9sbGJhcldpZHRofSlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTY3JvbGxCYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbGJhckhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5oaWRlU2Nyb2xsYmFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsYmFyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyb3dzZXIgU2Nyb2xsYmFyIFdpZHRocyAoMjAxNilcbiAgICAgICAgICogT1NYIChDaHJvbWUsIFNhZmFyaSwgRmlyZWZveCkgLSAxNXB4XG4gICAgICAgICAqIFdpbmRvd3MgWFAgKElFNywgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyA3IChJRTEwLCBJRTExLCBDaHJvbWUsIEZpcmVmb3gpIC0gMTdweFxuICAgICAgICAgKiBXaW5kb3dzIDguMSAoSUUxMSwgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyAxMCAoSUUxMSwgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyAxMCAoRWRnZSAxMi8xMykgLSAxMnB4XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBvdXRlciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShvdXRlciwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKG91dGVyLCAnd2lkdGgnLCAnMTAwcHgnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUob3V0ZXIsICdtc092ZXJmbG93U3R5bGUnLCAnc2Nyb2xsYmFyJyk7IC8vIG5lZWRlZCBmb3IgV2luSlMgYXBwc1xuICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuYm9keSwgb3V0ZXIpO1xuICAgICAgICAvLyB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnYm9keScpLCBvdXRlcik7XG4gICAgICAgIGNvbnN0IHdpZHRoTm9TY3JvbGwgPSBvdXRlci5vZmZzZXRXaWR0aDtcbiAgICAgICAgLy8gZm9yY2Ugc2Nyb2xsYmFyc1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShvdXRlciwgJ292ZXJmbG93JywgJ3Njcm9sbCcpO1xuXG4gICAgICAgIC8vIGFkZCBpbm5lcmRpdlxuICAgICAgICBjb25zdCBpbm5lciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShpbm5lciwgJ3dpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQob3V0ZXIsIGlubmVyKTtcblxuICAgICAgICBjb25zdCB3aWR0aFdpdGhTY3JvbGwgPSBpbm5lci5vZmZzZXRXaWR0aDtcblxuICAgICAgICAvLyByZW1vdmUgZGl2c1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCBvdXRlcik7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNjcm9sbGJhciB3aWR0aCB3aWxsIGJlIDAgb24gTWFjIE9TIHdpdGggdGhlXG4gICAgICAgICAqIGRlZmF1bHQgXCJPbmx5IHNob3cgc2Nyb2xsYmFycyB3aGVuIHNjcm9sbGluZ1wiIHNldHRpbmcgKFlvc2VtaXRlIGFuZCB1cCkuXG4gICAgICAgICAqIHNldHRpbmcgZGVmYXVsdCB3aWR0aCB0byAyMDtcbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiB3aWR0aE5vU2Nyb2xsIC0gd2lkdGhXaXRoU2Nyb2xsIHx8IDIwO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaFdyYXBwZXJEaW1lbnNpb25zKCkge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLndyYXBwZXIsICd3aWR0aCcsICcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXIsXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID09PSAwID8gJ2F1dG8nIDogaGVpZ2h0ICsgJ3B4J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogVGhlIGJlbG93IHNvbHV0aW9uIGlzIGhlYXZpbHkgaW5zcGlyZWQgZnJvbVxuICAgICAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FuZGpvc2gvNjc2NDkzOVxuICAgICAqL1xuICAgIHByaXZhdGUgc2Nyb2xsVG8oZWxlbWVudDogRWxlbWVudCwgdG86IG51bWJlciwgZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLmlzQW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBjaGFuZ2UgPSB0byAtIHN0YXJ0IC0gdGhpcy5zbmFwT2Zmc2V0LFxuICAgICAgICAgICAgaW5jcmVtZW50ID0gMjA7XG4gICAgICAgIGxldCBjdXJyZW50VGltZSA9IDA7XG5cbiAgICAgICAgLy8gdCA9IGN1cnJlbnQgdGltZVxuICAgICAgICAvLyBiID0gc3RhcnQgdmFsdWVcbiAgICAgICAgLy8gYyA9IGNoYW5nZSBpbiB2YWx1ZVxuICAgICAgICAvLyBkID0gZHVyYXRpb25cbiAgICAgICAgY29uc3QgZWFzZUluT3V0UXVhZCA9ICh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHQgLz0gZCAvIDI7XG4gICAgICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGMgLyAyKSAqIHQgKiB0ICsgYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQtLTtcbiAgICAgICAgICAgIHJldHVybiAoLWMgLyAyKSAqICh0ICogKHQgLSAyKSAtIDEpICsgYjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhbmltYXRlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudFRpbWUgKz0gaW5jcmVtZW50O1xuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ID0gZWFzZUluT3V0UXVhZChcbiAgICAgICAgICAgICAgICBjdXJyZW50VGltZSxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgZHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9UaW1lciA9IHNldFRpbWVvdXQoYW5pbWF0ZVNjcm9sbCwgaW5jcmVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcnVuIG9uZSBtb3JlIGZyYW1lIHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIGZ1bGx5IGZpbmlzaGVkXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwQW5pbWF0aW9uRmluaXNoZWQuZW1pdCh0aGlzLmN1cnJJbmRleCk7XG4gICAgICAgICAgICAgICAgfSwgaW5jcmVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYW5pbWF0ZVNjcm9sbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9jYXRlQ3VycmVudEluZGV4KHNuYXA/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENoaWxkV2lkdGgoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgY3VycmVudENoaWxkV2lkdGgsXG4gICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCxcbiAgICAgICAgICAgICAgICBpZHg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzdG9wXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID49XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGggJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPD1cbiAgICAgICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGggLVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoaWxkV2lkdGggLyAyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc1Njcm9sbFJlYWNoZXNSaWdodEVuZCgpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm9sbCBiYWNrIHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc25hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3J3YXJkIHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBpZHggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGggKyBjdXJyZW50Q2hpbGRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlkeCArIDEgPT09IHRoaXMuX2NoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhY2hlcyBsYXN0IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FuaW1hdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBpZHggKyAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJyZW50Q2hpbGRXaWR0aChcbiAgICAgICAgY2I6IChcbiAgICAgICAgICAgIGN1cnJlbnRDbGlsZFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICBuZXh0Q2hpbGRyZW5XaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgY2hpbGRyZW5XaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgIGJyZWFrRnVuYzogKCkgPT4gdm9pZFxuICAgICAgICApID0+IHZvaWRcbiAgICApIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuV2lkdGggPSAwO1xuICAgICAgICBsZXQgc2hvdWxkQnJlYWsgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYnJlYWtGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkQnJlYWsgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjaGlsZHJlbkFyciA9IHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gY2hpbGRyZW5BcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEJyZWFrKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRDaGlsZHJlbldpZHRoID1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbldpZHRoICtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbkFycltpICsgMV0uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDbGlsZFdpZHRoID1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbkFycltpXS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgY2IoXG4gICAgICAgICAgICAgICAgY3VycmVudENsaWxkV2lkdGgsXG4gICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGJyZWFrRnVuY1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCArPSBjdXJyZW50Q2xpbGRXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9DaGlsZHJlbkxvY2F0aW9uKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0byA9IDA7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuQXJyID0gdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VyckluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIHRvICs9IGNoaWxkcmVuQXJyW2ldLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9jYXRlQ2Fyb3VzZWxJdGVtKFxuICAgICAgICBlbGVtZW50OiBFbGVtZW50XG4gICAgKTogUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgbnVsbCB7XG4gICAgICAgIGxldCBpdGVtOiBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BcnIgPSB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5BcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjaGlsZHJlbkFycltpXS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IGNoaWxkcmVuQXJyW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFya0VsRGltZW5zaW9uKCkge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLmVsV2lkdGggPSB0aGlzLndyYXBwZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmVsSGVpZ2h0ID0gdGhpcy53cmFwcGVyLnN0eWxlLmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWxXaWR0aCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuZWxIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLndyYXBwZXIgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCA6IDA7XG4gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4Qm91bmQgPSB0aGlzLm1heGltdW1JbmRleChcbiAgICAgICAgICAgICAgICBjb250YWluZXJXaWR0aCxcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi50b0FycmF5KClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1heGltdW1JbmRleChcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IG51bWJlcixcbiAgICAgICAgY2hpbGRyZW5FbGVtZW50czogUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlW11cbiAgICApOiBudW1iZXIge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBsZXQgY2hpbGRyZW5XaWR0aCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGNoaWxkcmVuRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIGxhc3QgTiBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBjYXJvdXNlbEl0ZW1EaXJlY3RpdmU6IFBlcENhcm91c2VsSXRlbURpcmVjdGl2ZSA9XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5FbGVtZW50c1tjaGlsZHJlbkVsZW1lbnRzLmxlbmd0aCAtIDEgLSBpXTtcbiAgICAgICAgICAgIGlmICghY2Fyb3VzZWxJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICBjYXJvdXNlbEl0ZW1EaXJlY3RpdmUuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbVdpZHRoID0gbmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVdpZHRoID09PSAwICYmIG5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVdpZHRoID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcm91c2VsSXRlbURpcmVjdGl2ZS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbldpZHRoICs9IGl0ZW1XaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5XaWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbkVsZW1lbnRzLmxlbmd0aCAtIGNvdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTY3JvbGxSZWFjaGVzUmlnaHRFbmQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnRQb3MgPVxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgK1xuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdFBvcyA+PSB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkcyBhIG1hcmdpbiByaWdodCBzdHlsZSB0byB0aGUgbGFzdCBjaGlsZCBlbGVtZW50IHdoaWNoIHdpbGwgcmVzb2x2ZSB0aGUgaXNzdWVcbiAgICAgKiBvZiBsYXN0IGl0ZW0gZ2V0cyBjdXRvZmYuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGp1c3RNYXJnaW5Ub0xhc3RDaGlsZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuX2NoaWxkcmVuICYmIHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5oaWRlU2Nyb2xsYmFyKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjaGlsZHJlbkFyciA9IHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gICAgIGNvbnN0IGxhc3RJdGVtID0gY2hpbGRyZW5BcnJbY2hpbGRyZW5BcnIubGVuZ3RoIC0gMV0uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLndyYXBwZXIgJiYgY2hpbGRyZW5BcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGxhc3RJdGVtLCAnbWFyZ2luLXJpZ2h0JywgdGhpcy5zY3JvbGxiYXJXaWR0aCk7XG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGxhc3RJdGVtLCAnbWFyZ2luLXJpZ2h0JywgMCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICB9XG59XG4iXX0=
|