@pepperi-addons/ngx-lib 0.4.0-angular14.36 → 0.4.0-angular14.39
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 +30 -30
- package/address/address.module.d.ts +15 -15
- package/address/index.d.ts +5 -5
- package/address/public-api.d.ts +2 -2
- package/attachment/attachment.component.d.ts +85 -85
- package/attachment/attachment.module.d.ts +14 -14
- package/attachment/index.d.ts +5 -5
- package/attachment/public-api.d.ts +2 -2
- package/bread-crumbs/bread-crumbs.component.d.ts +27 -27
- package/bread-crumbs/bread-crumbs.model.d.ts +11 -11
- package/bread-crumbs/bread-crumbs.module.d.ts +15 -15
- package/bread-crumbs/index.d.ts +5 -5
- package/bread-crumbs/public-api.d.ts +3 -3
- package/button/button.component.d.ts +102 -102
- package/button/button.model.d.ts +14 -14
- package/button/button.module.d.ts +13 -13
- package/button/index.d.ts +5 -5
- package/button/public-api.d.ts +3 -3
- package/carousel/carousel-item.directive.d.ts +12 -12
- package/carousel/carousel.component.d.ts +148 -148
- package/carousel/carousel.module.d.ts +8 -8
- package/carousel/index.d.ts +5 -5
- package/carousel/public-api.d.ts +3 -3
- package/checkbox/checkbox.component.d.ts +50 -50
- package/checkbox/checkbox.module.d.ts +19 -19
- package/checkbox/index.d.ts +5 -5
- package/checkbox/public-api.d.ts +2 -2
- package/chip/chip.component.d.ts +18 -0
- package/chip/chip.module.d.ts +19 -0
- package/chip/index.d.ts +5 -0
- package/chip/public-api.d.ts +2 -0
- package/color/color-picker.component.d.ts +57 -57
- package/color/color.component.d.ts +30 -30
- package/color/color.model.d.ts +1 -1
- package/color/color.module.d.ts +26 -26
- package/color/index.d.ts +5 -5
- package/color/public-api.d.ts +3 -3
- package/core/clipboard/clipboard.directive.d.ts +5 -5
- package/core/clipboard/clipboard.service.d.ts +5 -5
- package/core/clipboard/index.d.ts +1 -1
- package/core/clipboard/public-api.d.ts +2 -2
- package/core/common/directives/auto-width.directive.d.ts +19 -19
- package/core/common/directives/button-blur.directive.d.ts +9 -9
- package/core/common/directives/button-loader.directive.d.ts +26 -26
- package/core/common/directives/data-qa.directive.d.ts +11 -11
- package/core/common/directives/index.d.ts +1 -1
- package/core/common/directives/menu-blur.directive.d.ts +10 -10
- package/core/common/directives/prevent-multi-click.directive.d.ts +7 -7
- package/core/common/directives/print.directive.d.ts +75 -75
- package/core/common/directives/public-api.d.ts +7 -7
- package/core/common/index.d.ts +1 -1
- package/core/common/model/index.d.ts +1 -1
- package/core/common/model/papi.model.d.ts +2 -2
- package/core/common/model/public-api.d.ts +3 -3
- package/core/common/model/utilities.model.d.ts +5 -5
- package/core/common/model/wapi.model.d.ts +200 -200
- package/core/common/pipes/common-pipes.d.ts +57 -57
- package/core/common/pipes/date-ago.pipe.d.ts +11 -11
- package/core/common/pipes/index.d.ts +1 -1
- package/core/common/pipes/public-api.d.ts +2 -2
- package/core/common/public-api.d.ts +4 -4
- package/core/common/services/addon.service.d.ts +38 -38
- package/core/common/services/color.service.d.ts +51 -51
- package/core/common/services/cookie.service.d.ts +53 -53
- package/core/common/services/data-convertor.service.d.ts +44 -44
- package/core/common/services/file.service.d.ts +27 -27
- package/core/common/services/index.d.ts +1 -1
- package/core/common/services/jwt-helper.service.d.ts +13 -13
- package/core/common/services/public-api.d.ts +11 -11
- package/core/common/services/session.service.d.ts +18 -18
- package/core/common/services/translate.service.d.ts +12 -12
- package/core/common/services/utilities.service.d.ts +37 -37
- package/core/common/services/validator.service.d.ts +31 -31
- package/core/common/services/window-scrolling.service.d.ts +10 -10
- package/core/customization/customization.model.d.ts +266 -266
- package/core/customization/customization.service.d.ts +159 -159
- package/core/customization/index.d.ts +1 -1
- package/core/customization/public-api.d.ts +2 -2
- package/core/http/index.d.ts +1 -1
- package/core/http/interceptors/error.interceptor.d.ts +8 -8
- package/core/http/interceptors/index.d.ts +11 -11
- package/core/http/interceptors/loader.interceptor.d.ts +11 -11
- package/core/http/interceptors/profiler.interceptor.d.ts +8 -8
- package/core/http/public-api.d.ts +2 -2
- package/core/http/services/http.service.d.ts +28 -28
- package/core/http/services/loader.service.d.ts +13 -13
- package/core/index.d.ts +1 -1
- package/core/layout/index.d.ts +1 -1
- package/core/layout/layout.service.d.ts +36 -36
- package/core/layout/public-api.d.ts +2 -2
- package/core/layout/rtl.directive.d.ts +21 -21
- package/core/portal/attach.directive.d.ts +13 -13
- package/core/portal/index.d.ts +1 -1
- package/core/portal/portal.service.d.ts +12 -12
- package/core/portal/public-api.d.ts +3 -3
- package/core/portal/target.directive.d.ts +12 -12
- package/core/public-api.d.ts +7 -7
- package/core/scroll-to/index.d.ts +1 -1
- package/core/scroll-to/public-api.d.ts +1 -1
- package/core/scroll-to/scroll-to.service.d.ts +11 -11
- package/date/date.component.d.ts +69 -69
- package/date/date.model.d.ts +31 -31
- package/date/date.module.d.ts +23 -23
- package/date/index.d.ts +5 -5
- package/date/public-api.d.ts +2 -2
- package/dialog/default-dialog.component.d.ts +12 -12
- package/dialog/dialog.component.d.ts +13 -13
- package/dialog/dialog.model.d.ts +31 -31
- package/dialog/dialog.module.d.ts +18 -18
- package/dialog/dialog.service.d.ts +27 -27
- package/dialog/index.d.ts +5 -5
- package/dialog/public-api.d.ts +4 -4
- package/draggable-items/draggable-item/draggable-item.component.d.ts +11 -11
- package/draggable-items/draggable-items.component.d.ts +36 -36
- package/draggable-items/draggable-items.model.d.ts +11 -11
- package/draggable-items/draggable-items.module.d.ts +18 -18
- package/draggable-items/index.d.ts +5 -5
- package/draggable-items/public-api.d.ts +4 -4
- package/esm2020/address/address.component.mjs +108 -108
- package/esm2020/address/address.module.mjs +53 -53
- package/esm2020/address/pepperi-addons-ngx-lib-address.mjs +4 -4
- package/esm2020/address/public-api.mjs +5 -5
- package/esm2020/attachment/attachment.component.mjs +219 -219
- package/esm2020/attachment/attachment.module.mjs +49 -49
- package/esm2020/attachment/pepperi-addons-ngx-lib-attachment.mjs +4 -4
- package/esm2020/attachment/public-api.mjs +5 -5
- package/esm2020/bread-crumbs/bread-crumbs.component.mjs +84 -84
- package/esm2020/bread-crumbs/bread-crumbs.model.mjs +6 -6
- package/esm2020/bread-crumbs/bread-crumbs.module.mjs +49 -49
- package/esm2020/bread-crumbs/pepperi-addons-ngx-lib-bread-crumbs.mjs +4 -4
- package/esm2020/bread-crumbs/public-api.mjs +6 -6
- package/esm2020/button/button.component.mjs +137 -137
- package/esm2020/button/button.model.mjs +5 -5
- package/esm2020/button/button.module.mjs +45 -45
- package/esm2020/button/pepperi-addons-ngx-lib-button.mjs +4 -4
- package/esm2020/button/public-api.mjs +6 -6
- package/esm2020/carousel/carousel-item.directive.mjs +32 -32
- package/esm2020/carousel/carousel.component.mjs +736 -736
- package/esm2020/carousel/carousel.module.mjs +16 -16
- package/esm2020/carousel/pepperi-addons-ngx-lib-carousel.mjs +4 -4
- package/esm2020/carousel/public-api.mjs +7 -7
- package/esm2020/checkbox/checkbox.component.mjs +167 -167
- package/esm2020/checkbox/checkbox.module.mjs +62 -62
- package/esm2020/checkbox/pepperi-addons-ngx-lib-checkbox.mjs +4 -4
- package/esm2020/checkbox/public-api.mjs +5 -5
- package/esm2020/chip/chip.component.mjs +36 -0
- package/esm2020/chip/chip.module.mjs +60 -0
- package/esm2020/chip/pepperi-addons-ngx-lib-chip.mjs +5 -0
- package/esm2020/chip/public-api.mjs +6 -0
- package/esm2020/color/color-picker.component.mjs +198 -198
- package/esm2020/color/color.component.mjs +89 -89
- package/esm2020/color/color.model.mjs +1 -1
- package/esm2020/color/color.module.mjs +92 -92
- package/esm2020/color/pepperi-addons-ngx-lib-color.mjs +4 -4
- package/esm2020/color/public-api.mjs +6 -6
- package/esm2020/core/clipboard/clipboard.directive.mjs +23 -23
- package/esm2020/core/clipboard/clipboard.service.mjs +13 -13
- package/esm2020/core/clipboard/index.mjs +4 -4
- package/esm2020/core/clipboard/public-api.mjs +5 -5
- package/esm2020/core/common/directives/auto-width.directive.mjs +76 -76
- package/esm2020/core/common/directives/button-blur.directive.mjs +23 -23
- package/esm2020/core/common/directives/button-loader.directive.mjs +111 -111
- package/esm2020/core/common/directives/data-qa.directive.mjs +22 -22
- package/esm2020/core/common/directives/index.mjs +4 -4
- package/esm2020/core/common/directives/menu-blur.directive.mjs +31 -31
- package/esm2020/core/common/directives/prevent-multi-click.directive.mjs +26 -26
- package/esm2020/core/common/directives/print.directive.mjs +144 -144
- package/esm2020/core/common/directives/public-api.mjs +11 -11
- package/esm2020/core/common/index.mjs +4 -4
- package/esm2020/core/common/model/index.mjs +4 -4
- package/esm2020/core/common/model/papi.model.mjs +2 -2
- package/esm2020/core/common/model/public-api.mjs +6 -6
- package/esm2020/core/common/model/utilities.model.mjs +56 -56
- package/esm2020/core/common/model/wapi.model.mjs +155 -155
- package/esm2020/core/common/pipes/common-pipes.mjs +166 -166
- package/esm2020/core/common/pipes/date-ago.pipe.mjs +45 -45
- package/esm2020/core/common/pipes/index.mjs +4 -4
- package/esm2020/core/common/pipes/public-api.mjs +5 -5
- package/esm2020/core/common/public-api.mjs +7 -7
- package/esm2020/core/common/services/addon.service.mjs +153 -151
- package/esm2020/core/common/services/color.service.mjs +358 -358
- package/esm2020/core/common/services/cookie.service.mjs +152 -152
- package/esm2020/core/common/services/data-convertor.service.mjs +118 -118
- package/esm2020/core/common/services/file.service.mjs +212 -212
- package/esm2020/core/common/services/index.mjs +4 -4
- package/esm2020/core/common/services/jwt-helper.service.mjs +105 -105
- package/esm2020/core/common/services/public-api.mjs +14 -14
- package/esm2020/core/common/services/session.service.mjs +70 -70
- package/esm2020/core/common/services/translate.service.mjs +45 -45
- package/esm2020/core/common/services/utilities.service.mjs +253 -253
- package/esm2020/core/common/services/validator.service.mjs +271 -271
- package/esm2020/core/common/services/window-scrolling.service.mjs +31 -31
- package/esm2020/core/customization/customization.model.mjs +289 -289
- package/esm2020/core/customization/customization.service.mjs +770 -770
- package/esm2020/core/customization/index.mjs +4 -4
- package/esm2020/core/customization/public-api.mjs +5 -5
- package/esm2020/core/http/index.mjs +4 -4
- package/esm2020/core/http/interceptors/error.interceptor.mjs +26 -26
- package/esm2020/core/http/interceptors/index.mjs +23 -23
- package/esm2020/core/http/interceptors/loader.interceptor.mjs +31 -31
- package/esm2020/core/http/interceptors/profiler.interceptor.mjs +31 -31
- package/esm2020/core/http/public-api.mjs +5 -5
- package/esm2020/core/http/services/http.service.mjs +154 -154
- package/esm2020/core/http/services/loader.service.mjs +49 -49
- package/esm2020/core/index.mjs +4 -4
- package/esm2020/core/layout/index.mjs +4 -4
- package/esm2020/core/layout/layout.service.mjs +167 -167
- package/esm2020/core/layout/public-api.mjs +5 -5
- package/esm2020/core/layout/rtl.directive.mjs +43 -43
- package/esm2020/core/portal/attach.directive.mjs +26 -26
- package/esm2020/core/portal/index.mjs +4 -4
- package/esm2020/core/portal/portal.service.mjs +35 -35
- package/esm2020/core/portal/public-api.mjs +6 -6
- package/esm2020/core/portal/target.directive.mjs +23 -23
- package/esm2020/core/public-api.mjs +10 -10
- package/esm2020/core/scroll-to/index.mjs +4 -4
- package/esm2020/core/scroll-to/public-api.mjs +5 -5
- package/esm2020/core/scroll-to/scroll-to.service.mjs +83 -83
- package/esm2020/date/date.component.mjs +294 -294
- package/esm2020/date/date.model.mjs +53 -53
- package/esm2020/date/date.module.mjs +87 -87
- package/esm2020/date/pepperi-addons-ngx-lib-date.mjs +4 -4
- package/esm2020/date/public-api.mjs +5 -5
- package/esm2020/dialog/default-dialog.component.mjs +36 -36
- package/esm2020/dialog/dialog.component.mjs +35 -35
- package/esm2020/dialog/dialog.model.mjs +32 -32
- package/esm2020/dialog/dialog.module.mjs +58 -58
- package/esm2020/dialog/dialog.service.mjs +81 -81
- package/esm2020/dialog/pepperi-addons-ngx-lib-dialog.mjs +4 -4
- package/esm2020/dialog/public-api.mjs +7 -7
- package/esm2020/draggable-items/draggable-item/draggable-item.component.mjs +26 -26
- package/esm2020/draggable-items/draggable-items.component.mjs +101 -101
- package/esm2020/draggable-items/draggable-items.model.mjs +1 -1
- package/esm2020/draggable-items/draggable-items.module.mjs +59 -59
- package/esm2020/draggable-items/pepperi-addons-ngx-lib-draggable-items.mjs +4 -4
- package/esm2020/draggable-items/public-api.mjs +7 -7
- package/esm2020/field-title/field-title.component.mjs +41 -41
- package/esm2020/field-title/field-title.module.mjs +46 -46
- package/esm2020/field-title/pepperi-addons-ngx-lib-field-title.mjs +4 -4
- package/esm2020/field-title/public-api.mjs +5 -5
- package/esm2020/files-uploader/files-uploader.component.mjs +240 -240
- package/esm2020/files-uploader/files-uploader.module.mjs +78 -78
- package/esm2020/files-uploader/pepperi-addons-ngx-lib-files-uploader.mjs +4 -4
- package/esm2020/files-uploader/public-api.mjs +5 -5
- package/esm2020/form/field-generator.component.mjs +152 -152
- package/esm2020/form/form.component.mjs +1224 -1224
- package/esm2020/form/form.model.mjs +1 -1
- package/esm2020/form/form.module.mjs +175 -175
- package/esm2020/form/indicators.component.mjs +22 -22
- package/esm2020/form/internal-button.component.mjs +183 -183
- package/esm2020/form/internal-carusel.component.mjs +116 -116
- package/esm2020/form/internal-carusel.service.mjs +31 -31
- package/esm2020/form/internal-field-generator.component.mjs +146 -146
- package/esm2020/form/internal-form.component.mjs +1213 -1213
- package/esm2020/form/internal-list.component.mjs +509 -509
- package/esm2020/form/internal-menu.component.mjs +65 -65
- package/esm2020/form/internal-page.component.mjs +361 -361
- package/esm2020/form/internal-page.service.mjs +119 -119
- package/esm2020/form/pepperi-addons-ngx-lib-form.mjs +4 -4
- package/esm2020/form/public-api.mjs +6 -6
- package/esm2020/group-buttons/group-buttons.component.mjs +71 -71
- package/esm2020/group-buttons/group-buttons.module.mjs +58 -58
- package/esm2020/group-buttons/pepperi-addons-ngx-lib-group-buttons.mjs +4 -4
- package/esm2020/group-buttons/public-api.mjs +5 -5
- package/esm2020/icon/icon-generated-all.model.mjs +107 -105
- package/esm2020/icon/icon-generated.model.mjs +414 -406
- package/esm2020/icon/icon-registry.service.mjs +24 -24
- package/esm2020/icon/icon.component.mjs +90 -90
- package/esm2020/icon/icon.module.mjs +19 -19
- package/esm2020/icon/icon.service.mjs +30 -30
- package/esm2020/icon/pepperi-addons-ngx-lib-icon.mjs +4 -4
- package/esm2020/icon/public-api.mjs +10 -10
- package/esm2020/image/image.component.mjs +246 -246
- package/esm2020/image/image.module.mjs +73 -73
- package/esm2020/image/image.service.mjs +51 -51
- package/esm2020/image/pepperi-addons-ngx-lib-image.mjs +4 -4
- package/esm2020/image/public-api.mjs +6 -6
- package/esm2020/images-filmstrip/images-filmstrip.component.mjs +336 -336
- package/esm2020/images-filmstrip/images-filmstrip.module.mjs +82 -82
- package/esm2020/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.mjs +4 -4
- package/esm2020/images-filmstrip/public-api.mjs +5 -5
- package/esm2020/link/link.component.mjs +338 -338
- package/esm2020/link/link.module.mjs +79 -79
- package/esm2020/link/link.pipes.mjs +17 -17
- package/esm2020/link/pepperi-addons-ngx-lib-link.mjs +4 -4
- package/esm2020/link/public-api.mjs +5 -5
- package/esm2020/list/list-actions.component.mjs +43 -43
- package/esm2020/list/list-carousel.component.mjs +106 -106
- package/esm2020/list/list-chooser.component.mjs +63 -63
- package/esm2020/list/list-pager.component.mjs +119 -119
- package/esm2020/list/list-sorting.component.mjs +60 -60
- package/esm2020/list/list-total.component.mjs +29 -29
- package/esm2020/list/list-views.component.mjs +84 -84
- package/esm2020/list/list.component.mjs +1159 -1159
- package/esm2020/list/list.model.mjs +3 -3
- package/esm2020/list/list.module.mjs +143 -143
- package/esm2020/list/list.pipes.mjs +46 -46
- package/esm2020/list/pepperi-addons-ngx-lib-list.mjs +4 -4
- package/esm2020/list/public-api.mjs +14 -14
- package/esm2020/list/virtual-scroller.mjs +1060 -1060
- package/esm2020/menu/menu-item.component.mjs +114 -114
- package/esm2020/menu/menu.component.mjs +204 -204
- package/esm2020/menu/menu.model.mjs +18 -18
- package/esm2020/menu/menu.module.mjs +58 -58
- package/esm2020/menu/pepperi-addons-ngx-lib-menu.mjs +4 -4
- package/esm2020/menu/public-api.mjs +6 -6
- package/esm2020/ngx-lib.module.mjs +157 -157
- package/esm2020/page-layout/page-layout.component.mjs +34 -34
- package/esm2020/page-layout/page-layout.module.mjs +33 -33
- package/esm2020/page-layout/pepperi-addons-ngx-lib-page-layout.mjs +4 -4
- package/esm2020/page-layout/public-api.mjs +5 -5
- package/esm2020/pepperi-addons-ngx-lib.mjs +4 -4
- package/esm2020/plugin/pepperi-addons-ngx-lib-plugin.mjs +4 -4
- package/esm2020/plugin/plugin-proxy.component.mjs +93 -93
- package/esm2020/plugin/plugin.model.mjs +1 -1
- package/esm2020/plugin/public-api.mjs +5 -5
- package/esm2020/profile-data-views-list/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
- package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +44 -44
- package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +64 -64
- package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +94 -94
- package/esm2020/profile-data-views-list/profile-data-views-list.model.mjs +1 -1
- package/esm2020/profile-data-views-list/profile-data-views-list.module.mjs +87 -87
- package/esm2020/profile-data-views-list/public-api.mjs +8 -8
- package/esm2020/public-api.mjs +5 -5
- package/esm2020/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.mjs +4 -4
- package/esm2020/quantity-selector/public-api.mjs +5 -5
- package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +46 -46
- package/esm2020/quantity-selector/quantity-selector.component.mjs +510 -510
- package/esm2020/quantity-selector/quantity-selector.module.mjs +81 -81
- package/esm2020/quantity-selector/quantity-selector.pipes.mjs +22 -22
- package/esm2020/query-builder/common/model/field.mjs +1 -1
- package/esm2020/query-builder/common/model/filter.mjs +1 -1
- package/esm2020/query-builder/common/model/legacy.mjs +1 -1
- package/esm2020/query-builder/common/model/operator-unit.mjs +41 -41
- package/esm2020/query-builder/common/model/operator.mjs +265 -265
- package/esm2020/query-builder/common/model/structure.mjs +1 -1
- package/esm2020/query-builder/common/model/type-map.mjs +26 -26
- package/esm2020/query-builder/common/model/type.mjs +5 -5
- package/esm2020/query-builder/common/services/output-query.service.mjs +113 -113
- package/esm2020/query-builder/common/services/query-structure.service.mjs +225 -225
- package/esm2020/query-builder/common/services/type-convertor.service.mjs +41 -41
- package/esm2020/query-builder/pepperi-addons-ngx-lib-query-builder.mjs +4 -4
- package/esm2020/query-builder/public-api.mjs +8 -8
- package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +124 -124
- package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +70 -70
- package/esm2020/query-builder/query-builder.component.mjs +109 -109
- package/esm2020/query-builder/query-builder.module.mjs +58 -58
- package/esm2020/query-builder/query-builder.service.mjs +101 -101
- package/esm2020/remote-loader/addon-block-loader.component.mjs +83 -83
- package/esm2020/remote-loader/addon-block-loader.service.mjs +59 -59
- package/esm2020/remote-loader/pepperi-addons-ngx-lib-remote-loader.mjs +4 -4
- package/esm2020/remote-loader/public-api.mjs +9 -9
- package/esm2020/remote-loader/remote-loader.component.mjs +105 -105
- package/esm2020/remote-loader/remote-loader.model.mjs +1 -1
- package/esm2020/remote-loader/remote-loader.module.mjs +59 -59
- package/esm2020/remote-loader/remote-loader.service.mjs +57 -57
- package/esm2020/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.mjs +4 -4
- package/esm2020/rich-html-textarea/public-api.mjs +5 -5
- package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +244 -244
- package/esm2020/rich-html-textarea/rich-html-textarea.module.mjs +94 -94
- package/esm2020/search/pepperi-addons-ngx-lib-search.mjs +4 -4
- package/esm2020/search/public-api.mjs +6 -6
- package/esm2020/search/search.component.mjs +316 -316
- package/esm2020/search/search.model.mjs +1 -1
- package/esm2020/search/search.module.mjs +69 -69
- package/esm2020/select/pepperi-addons-ngx-lib-select.mjs +4 -4
- package/esm2020/select/public-api.mjs +5 -5
- package/esm2020/select/select.component.mjs +263 -263
- package/esm2020/select/select.module.mjs +69 -69
- package/esm2020/separator/pepperi-addons-ngx-lib-separator.mjs +4 -4
- package/esm2020/separator/public-api.mjs +5 -5
- package/esm2020/separator/separator.component.mjs +62 -62
- package/esm2020/separator/separator.module.mjs +17 -17
- package/esm2020/side-bar/pepperi-addons-ngx-lib-side-bar.mjs +4 -4
- package/esm2020/side-bar/public-api.mjs +6 -6
- package/esm2020/side-bar/side-bar.component.mjs +121 -121
- package/esm2020/side-bar/side-bar.model.mjs +1 -1
- package/esm2020/side-bar/side-bar.module.mjs +54 -54
- package/esm2020/signature/pepperi-addons-ngx-lib-signature.mjs +4 -4
- package/esm2020/signature/public-api.mjs +5 -5
- package/esm2020/signature/signature.component.mjs +253 -253
- package/esm2020/signature/signature.module.mjs +89 -89
- package/esm2020/size-detector/pepperi-addons-ngx-lib-size-detector.mjs +4 -4
- package/esm2020/size-detector/public-api.mjs +5 -5
- package/esm2020/size-detector/size-detector.component.mjs +91 -91
- package/esm2020/size-detector/size-detector.module.mjs +34 -34
- package/esm2020/slider/pepperi-addons-ngx-lib-slider.mjs +4 -4
- package/esm2020/slider/public-api.mjs +5 -5
- package/esm2020/slider/slider.component.mjs +100 -100
- package/esm2020/slider/slider.module.mjs +41 -41
- package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +74 -74
- package/esm2020/smart-filters/common/filter-actions.component.mjs +28 -28
- package/esm2020/smart-filters/common/model/base-filter-component.mjs +294 -294
- package/esm2020/smart-filters/common/model/creator.mjs +75 -75
- package/esm2020/smart-filters/common/model/field.mjs +116 -116
- package/esm2020/smart-filters/common/model/filter.mjs +1 -1
- package/esm2020/smart-filters/common/model/operator.mjs +270 -270
- package/esm2020/smart-filters/common/model/type.mjs +1 -1
- package/esm2020/smart-filters/date-filter/date-filter.component.mjs +171 -171
- package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +199 -199
- package/esm2020/smart-filters/number-filter/number-filter.component.mjs +115 -115
- package/esm2020/smart-filters/pepperi-addons-ngx-lib-smart-filters.mjs +4 -4
- package/esm2020/smart-filters/public-api.mjs +18 -18
- package/esm2020/smart-filters/smart-filters.component.mjs +140 -140
- package/esm2020/smart-filters/smart-filters.module.mjs +157 -157
- package/esm2020/smart-filters/text-filter/text-filter.component.mjs +91 -91
- package/esm2020/snack-bar/default-snack-bar.component.mjs +28 -28
- package/esm2020/snack-bar/pepperi-addons-ngx-lib-snack-bar.mjs +4 -4
- package/esm2020/snack-bar/public-api.mjs +7 -7
- package/esm2020/snack-bar/snack-bar.component.mjs +25 -25
- package/esm2020/snack-bar/snack-bar.model.mjs +6 -6
- package/esm2020/snack-bar/snack-bar.module.mjs +62 -62
- package/esm2020/snack-bar/snack-bar.service.mjs +59 -59
- package/esm2020/textarea/pepperi-addons-ngx-lib-textarea.mjs +4 -4
- package/esm2020/textarea/public-api.mjs +5 -5
- package/esm2020/textarea/textarea.component.mjs +181 -181
- package/esm2020/textarea/textarea.module.mjs +81 -81
- package/esm2020/textbox/pepperi-addons-ngx-lib-textbox.mjs +4 -4
- package/esm2020/textbox/public-api.mjs +5 -5
- package/esm2020/textbox/textbox-validation.directive.mjs +88 -88
- package/esm2020/textbox/textbox.component.mjs +448 -442
- package/esm2020/textbox/textbox.module.mjs +71 -71
- package/esm2020/textbox-icon/pepperi-addons-ngx-lib-textbox-icon.mjs +4 -4
- package/esm2020/textbox-icon/public-api.mjs +5 -5
- package/esm2020/textbox-icon/textbox-icon.component.mjs +47 -47
- package/esm2020/textbox-icon/textbox-icon.module.mjs +63 -63
- package/esm2020/top-bar/pepperi-addons-ngx-lib-top-bar.mjs +4 -4
- package/esm2020/top-bar/public-api.mjs +6 -6
- package/esm2020/top-bar/top-bar.component.mjs +111 -111
- package/esm2020/top-bar/top-bar.model.mjs +1 -1
- package/esm2020/top-bar/top-bar.module.mjs +61 -61
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs +143 -143
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +253 -253
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +122 -122
- package/fesm2015/pepperi-addons-ngx-lib-button.mjs +171 -171
- package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs +780 -780
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +206 -206
- package/fesm2015/pepperi-addons-ngx-lib-chip.mjs +104 -0
- package/fesm2015/pepperi-addons-ngx-lib-chip.mjs.map +1 -0
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs +336 -336
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs +397 -397
- package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +207 -207
- package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +163 -163
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +73 -73
- package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +291 -291
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs +4112 -4112
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +109 -109
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +668 -658
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-image.mjs +340 -340
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +390 -390
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs +401 -401
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +2822 -2822
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +360 -360
- package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs +59 -59
- package/fesm2015/pepperi-addons-ngx-lib-plugin.mjs +97 -97
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +254 -254
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +620 -620
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +1119 -1119
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +342 -342
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +300 -300
- package/fesm2015/pepperi-addons-ngx-lib-search.mjs +356 -356
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs +305 -305
- package/fesm2015/pepperi-addons-ngx-lib-separator.mjs +73 -73
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +158 -158
- package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +311 -311
- package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +114 -114
- package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +130 -130
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +1602 -1602
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs +152 -152
- package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +232 -232
- package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +95 -95
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +573 -567
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +155 -155
- package/fesm2015/pepperi-addons-ngx-lib.mjs +4452 -4448
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs +143 -143
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +253 -253
- package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs +122 -122
- package/fesm2020/pepperi-addons-ngx-lib-button.mjs +171 -171
- package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs +776 -776
- package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +206 -206
- package/fesm2020/pepperi-addons-ngx-lib-chip.mjs +104 -0
- package/fesm2020/pepperi-addons-ngx-lib-chip.mjs.map +1 -0
- package/fesm2020/pepperi-addons-ngx-lib-color.mjs +333 -333
- package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-date.mjs +393 -393
- package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +203 -203
- package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +162 -162
- package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +73 -73
- package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +288 -288
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs +4111 -4111
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs +109 -109
- package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +666 -656
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-image.mjs +338 -338
- package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +387 -387
- package/fesm2020/pepperi-addons-ngx-lib-link.mjs +401 -401
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs +2808 -2808
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +360 -360
- package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +59 -59
- package/fesm2020/pepperi-addons-ngx-lib-plugin.mjs +92 -92
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +253 -253
- package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +619 -619
- package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +1108 -1108
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +332 -332
- package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +300 -300
- package/fesm2020/pepperi-addons-ngx-lib-search.mjs +355 -355
- package/fesm2020/pepperi-addons-ngx-lib-select.mjs +305 -305
- package/fesm2020/pepperi-addons-ngx-lib-separator.mjs +73 -73
- package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs +158 -158
- package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +311 -311
- package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +114 -114
- package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +129 -129
- package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +1595 -1595
- package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs +149 -149
- package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +231 -231
- package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs +95 -95
- package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +573 -567
- package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +154 -154
- package/fesm2020/pepperi-addons-ngx-lib.mjs +4432 -4430
- package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/field-title/field-title.component.d.ts +14 -14
- package/field-title/field-title.module.d.ts +15 -15
- package/field-title/index.d.ts +5 -5
- package/field-title/public-api.d.ts +2 -2
- package/files-uploader/files-uploader.component.d.ts +57 -57
- package/files-uploader/files-uploader.module.d.ts +21 -21
- package/files-uploader/index.d.ts +5 -5
- package/files-uploader/public-api.d.ts +2 -2
- package/form/field-generator.component.d.ts +39 -39
- package/form/form.component.d.ts +93 -93
- package/form/form.model.d.ts +20 -20
- package/form/form.module.d.ts +49 -49
- package/form/index.d.ts +5 -5
- package/form/indicators.component.d.ts +10 -10
- package/form/internal-button.component.d.ts +42 -42
- package/form/internal-carusel.component.d.ts +39 -39
- package/form/internal-carusel.service.d.ts +10 -10
- package/form/internal-field-generator.component.d.ts +35 -35
- package/form/internal-form.component.d.ts +89 -89
- package/form/internal-list.component.d.ts +95 -95
- package/form/internal-menu.component.d.ts +19 -19
- package/form/internal-page.component.d.ts +73 -73
- package/form/internal-page.service.d.ts +22 -22
- package/form/public-api.d.ts +3 -3
- package/group-buttons/group-buttons.component.d.ts +24 -24
- package/group-buttons/group-buttons.module.d.ts +18 -18
- package/group-buttons/index.d.ts +5 -5
- package/group-buttons/public-api.d.ts +2 -2
- package/icon/icon-generated-all.model.d.ts +105 -103
- package/icon/icon-generated.model.d.ts +418 -410
- package/icon/icon-registry.service.d.ts +9 -9
- package/icon/icon.component.d.ts +49 -49
- package/icon/icon.module.d.ts +7 -7
- package/icon/icon.service.d.ts +13 -13
- package/icon/index.d.ts +5 -5
- package/icon/public-api.d.ts +6 -6
- package/image/image.component.d.ts +66 -66
- package/image/image.module.d.ts +20 -20
- package/image/image.service.d.ts +14 -14
- package/image/index.d.ts +5 -5
- package/image/public-api.d.ts +3 -3
- package/images-filmstrip/images-filmstrip.component.d.ts +87 -87
- package/images-filmstrip/images-filmstrip.module.d.ts +22 -22
- package/images-filmstrip/index.d.ts +5 -5
- package/images-filmstrip/public-api.d.ts +2 -2
- package/index.d.ts +5 -5
- package/link/index.d.ts +5 -5
- package/link/link.component.d.ts +133 -133
- package/link/link.module.d.ts +22 -22
- package/link/link.pipes.d.ts +7 -7
- package/link/public-api.d.ts +2 -2
- package/list/index.d.ts +5 -5
- package/list/list-actions.component.d.ts +18 -18
- package/list/list-carousel.component.d.ts +40 -40
- package/list/list-chooser.component.d.ts +29 -29
- package/list/list-pager.component.d.ts +39 -39
- package/list/list-sorting.component.d.ts +30 -30
- package/list/list-total.component.d.ts +11 -11
- package/list/list-views.component.d.ts +35 -35
- package/list/list.component.d.ts +164 -164
- package/list/list.model.d.ts +31 -31
- package/list/list.module.d.ts +34 -34
- package/list/list.pipes.d.ts +16 -16
- package/list/public-api.d.ts +10 -10
- package/list/virtual-scroller.d.ts +183 -183
- package/menu/index.d.ts +5 -5
- package/menu/menu-item.component.d.ts +28 -28
- package/menu/menu.component.d.ts +46 -46
- package/menu/menu.model.d.ts +25 -25
- package/menu/menu.module.d.ts +18 -18
- package/menu/public-api.d.ts +3 -3
- package/ngx-lib.module.d.ts +23 -23
- package/package.json +9 -1
- package/page-layout/index.d.ts +5 -5
- package/page-layout/page-layout.component.d.ts +19 -19
- package/page-layout/page-layout.module.d.ts +10 -10
- package/page-layout/public-api.d.ts +2 -2
- package/plugin/index.d.ts +5 -5
- package/plugin/plugin-proxy.component.d.ts +25 -25
- package/plugin/plugin.model.d.ts +6 -6
- package/plugin/public-api.d.ts +2 -2
- package/profile-data-views-list/index.d.ts +5 -5
- package/profile-data-views-list/profile-data-view/profile-data-view.component.d.ts +18 -18
- package/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.d.ts +24 -24
- package/profile-data-views-list/profile-data-views-list.component.d.ts +35 -35
- package/profile-data-views-list/profile-data-views-list.model.d.ts +18 -18
- package/profile-data-views-list/profile-data-views-list.module.d.ts +23 -23
- package/profile-data-views-list/public-api.d.ts +5 -5
- package/public-api.d.ts +2 -2
- package/quantity-selector/index.d.ts +5 -5
- package/quantity-selector/public-api.d.ts +2 -2
- package/quantity-selector/quantity-selector-validation.directive.d.ts +16 -16
- package/quantity-selector/quantity-selector.component.d.ts +101 -101
- package/quantity-selector/quantity-selector.module.d.ts +23 -23
- package/quantity-selector/quantity-selector.pipes.d.ts +7 -7
- package/query-builder/common/model/field.d.ts +8 -8
- package/query-builder/common/model/filter.d.ts +6 -6
- package/query-builder/common/model/legacy.d.ts +29 -29
- package/query-builder/common/model/operator-unit.d.ts +13 -13
- package/query-builder/common/model/operator.d.ts +21 -21
- package/query-builder/common/model/structure.d.ts +4 -4
- package/query-builder/common/model/type-map.d.ts +12 -12
- package/query-builder/common/model/type.d.ts +4 -4
- package/query-builder/common/services/output-query.service.d.ts +47 -47
- package/query-builder/common/services/query-structure.service.d.ts +82 -82
- package/query-builder/common/services/type-convertor.service.d.ts +13 -13
- package/query-builder/index.d.ts +5 -5
- package/query-builder/public-api.d.ts +5 -5
- package/query-builder/query-builder-item/query-builder-item.component.d.ts +41 -41
- package/query-builder/query-builder-section/query-builder-section.component.d.ts +30 -30
- package/query-builder/query-builder.component.d.ts +39 -39
- package/query-builder/query-builder.module.d.ts +16 -16
- package/query-builder/query-builder.service.d.ts +30 -30
- package/remote-loader/addon-block-loader.component.d.ts +32 -32
- package/remote-loader/addon-block-loader.service.d.ts +15 -15
- package/remote-loader/index.d.ts +5 -5
- package/remote-loader/public-api.d.ts +6 -6
- package/remote-loader/remote-loader.component.d.ts +25 -25
- package/remote-loader/remote-loader.model.d.ts +37 -37
- package/remote-loader/remote-loader.module.d.ts +13 -13
- package/remote-loader/remote-loader.service.d.ts +17 -17
- package/rich-html-textarea/index.d.ts +5 -5
- package/rich-html-textarea/public-api.d.ts +2 -2
- package/rich-html-textarea/rich-html-textarea.component.d.ts +78 -78
- package/rich-html-textarea/rich-html-textarea.module.d.ts +25 -25
- package/search/index.d.ts +5 -5
- package/search/public-api.d.ts +3 -3
- package/search/search.component.d.ts +65 -65
- package/search/search.model.d.ts +14 -14
- package/search/search.module.d.ts +20 -20
- package/select/index.d.ts +5 -5
- package/select/public-api.d.ts +2 -2
- package/select/select.component.d.ts +59 -59
- package/select/select.module.d.ts +20 -20
- package/separator/index.d.ts +5 -5
- package/separator/public-api.d.ts +2 -2
- package/separator/separator.component.d.ts +22 -22
- package/separator/separator.module.d.ts +8 -8
- package/side-bar/index.d.ts +5 -5
- package/side-bar/public-api.d.ts +3 -3
- package/side-bar/side-bar.component.d.ts +42 -42
- package/side-bar/side-bar.model.d.ts +4 -4
- package/side-bar/side-bar.module.d.ts +16 -16
- package/signature/index.d.ts +5 -5
- package/signature/public-api.d.ts +2 -2
- package/signature/signature.component.d.ts +68 -68
- package/signature/signature.module.d.ts +24 -24
- package/size-detector/index.d.ts +5 -5
- package/size-detector/public-api.d.ts +2 -2
- package/size-detector/size-detector.component.d.ts +29 -29
- package/size-detector/size-detector.module.d.ts +11 -11
- package/slider/index.d.ts +5 -5
- package/slider/public-api.d.ts +2 -2
- package/slider/slider.component.d.ts +39 -39
- package/slider/slider.module.d.ts +12 -12
- package/smart-filters/boolean-filter/boolean-filter.component.d.ts +28 -28
- package/smart-filters/common/filter-actions.component.d.ts +12 -12
- package/smart-filters/common/model/base-filter-component.d.ts +73 -73
- package/smart-filters/common/model/creator.d.ts +6 -6
- package/smart-filters/common/model/field.d.ts +69 -69
- package/smart-filters/common/model/filter.d.ts +11 -11
- package/smart-filters/common/model/operator.d.ts +51 -51
- package/smart-filters/common/model/type.d.ts +4 -4
- package/smart-filters/date-filter/date-filter.component.d.ts +59 -59
- package/smart-filters/index.d.ts +5 -5
- package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +56 -56
- package/smart-filters/number-filter/number-filter.component.d.ts +51 -51
- package/smart-filters/public-api.d.ts +14 -14
- package/smart-filters/smart-filters.component.d.ts +35 -35
- package/smart-filters/smart-filters.module.d.ts +37 -37
- package/smart-filters/text-filter/text-filter.component.d.ts +28 -28
- package/snack-bar/default-snack-bar.component.d.ts +13 -13
- package/snack-bar/index.d.ts +5 -5
- package/snack-bar/public-api.d.ts +4 -4
- package/snack-bar/snack-bar.component.d.ts +12 -12
- package/snack-bar/snack-bar.model.d.ts +8 -8
- package/snack-bar/snack-bar.module.d.ts +19 -19
- package/snack-bar/snack-bar.service.d.ts +24 -24
- package/src/core/style/components/checkbox.scss +1 -1
- package/textarea/index.d.ts +5 -5
- package/textarea/public-api.d.ts +2 -2
- package/textarea/textarea.component.d.ts +54 -54
- package/textarea/textarea.module.d.ts +23 -23
- package/textbox/index.d.ts +5 -5
- package/textbox/public-api.d.ts +2 -2
- package/textbox/textbox-validation.directive.d.ts +21 -21
- package/textbox/textbox.component.d.ts +145 -143
- package/textbox/textbox.module.d.ts +22 -22
- package/textbox-icon/index.d.ts +5 -5
- package/textbox-icon/public-api.d.ts +2 -2
- package/textbox-icon/textbox-icon.component.d.ts +13 -13
- package/textbox-icon/textbox-icon.module.d.ts +16 -16
- package/top-bar/index.d.ts +5 -5
- package/top-bar/public-api.d.ts +3 -3
- package/top-bar/top-bar.component.d.ts +39 -39
- package/top-bar/top-bar.model.d.ts +4 -4
- package/top-bar/top-bar.module.d.ts +18 -18
|
@@ -1,317 +1,317 @@
|
|
|
1
|
-
import { Component, Injectable, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { trigger, state, style, transition, animate, } from '@angular/animations';
|
|
4
|
-
import { FormControl } from '@angular/forms';
|
|
5
|
-
import { PepScreenSizeType, } from '@pepperi-addons/ngx-lib';
|
|
6
|
-
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@pepperi-addons/ngx-lib";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "@angular/forms";
|
|
11
|
-
import * as i4 from "@angular/material/autocomplete";
|
|
12
|
-
import * as i5 from "@angular/material/core";
|
|
13
|
-
import * as i6 from "@angular/material/button";
|
|
14
|
-
import * as i7 from "@angular/material/form-field";
|
|
15
|
-
import * as i8 from "@angular/material/icon";
|
|
16
|
-
import * as i9 from "@pepperi-addons/ngx-lib/icon";
|
|
17
|
-
import * as i10 from "@angular/material/input";
|
|
18
|
-
import * as i11 from "@ngx-translate/core";
|
|
19
|
-
export class PepSearchComponent {
|
|
20
|
-
constructor(hostElement, layoutService) {
|
|
21
|
-
this.hostElement = hostElement;
|
|
22
|
-
this.layoutService = layoutService;
|
|
23
|
-
this.triggerOn = 'click';
|
|
24
|
-
this.autoCompleteTop = 20;
|
|
25
|
-
this._autoCompleteValues = [];
|
|
26
|
-
// @Input() shrinkInSmallScreen = true;
|
|
27
|
-
this._shrink = 'small-screen';
|
|
28
|
-
this._searchControl = null;
|
|
29
|
-
this._useAsWebComponent = false;
|
|
30
|
-
/**
|
|
31
|
-
* The size of the button.
|
|
32
|
-
*
|
|
33
|
-
* @type {PepSizeType}
|
|
34
|
-
* @memberof PepButtonComponent
|
|
35
|
-
*/
|
|
36
|
-
this.sizeType = 'md';
|
|
37
|
-
this.search = new EventEmitter();
|
|
38
|
-
this.autocompleteChange = new EventEmitter();
|
|
39
|
-
this.stateChange = new EventEmitter();
|
|
40
|
-
this._destroyed = new Subject();
|
|
41
|
-
this.type = 'regular';
|
|
42
|
-
this.state = 'open';
|
|
43
|
-
this.lastValue = null;
|
|
44
|
-
this.showFloatSrcBtn = true;
|
|
45
|
-
this.isRtl = false;
|
|
46
|
-
this.isFloating = false;
|
|
47
|
-
//
|
|
48
|
-
}
|
|
49
|
-
set autoCompleteValues(val) {
|
|
50
|
-
this.type = 'auto-complete';
|
|
51
|
-
this._autoCompleteValues = val;
|
|
52
|
-
}
|
|
53
|
-
get autoCompleteValues() {
|
|
54
|
-
return this._autoCompleteValues;
|
|
55
|
-
}
|
|
56
|
-
set shrink(value) {
|
|
57
|
-
this._shrink = value;
|
|
58
|
-
this.setIsFloating();
|
|
59
|
-
}
|
|
60
|
-
get shrink() {
|
|
61
|
-
return this._shrink;
|
|
62
|
-
}
|
|
63
|
-
set value(val) {
|
|
64
|
-
this.createSearchControlIfNotExist();
|
|
65
|
-
this.searchControl.setValue(val);
|
|
66
|
-
}
|
|
67
|
-
get value() {
|
|
68
|
-
return this.searchControl.value || '';
|
|
69
|
-
}
|
|
70
|
-
set searchControl(ctrl) {
|
|
71
|
-
this._searchControl = ctrl;
|
|
72
|
-
}
|
|
73
|
-
get searchControl() {
|
|
74
|
-
return this._searchControl;
|
|
75
|
-
}
|
|
76
|
-
set useAsWebComponent(value) {
|
|
77
|
-
if (value) {
|
|
78
|
-
this.exportFunctionsOnHostElement();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
get useAsWebComponent() {
|
|
82
|
-
return this._useAsWebComponent;
|
|
83
|
-
}
|
|
84
|
-
setIsFloating() {
|
|
85
|
-
if (this.shrink === 'small-screen') {
|
|
86
|
-
this.isFloating = this.screenSize > PepScreenSizeType.SM;
|
|
87
|
-
}
|
|
88
|
-
else if (this.shrink === 'always') {
|
|
89
|
-
this.isFloating = true;
|
|
90
|
-
}
|
|
91
|
-
else { // never
|
|
92
|
-
this.isFloating = false;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
ngOnInit() {
|
|
96
|
-
this.layoutService.onResize$.pipe().subscribe((size) => {
|
|
97
|
-
this.screenSize = size;
|
|
98
|
-
this.setIsFloating();
|
|
99
|
-
// Just for the smoote animation
|
|
100
|
-
if (this.isFloating) {
|
|
101
|
-
this.showFloatSrcBtn = false;
|
|
102
|
-
this.showFloatingButton();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.fadeState = 'fadeIn';
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
this.isRtl = this.layoutService.isRtl();
|
|
109
|
-
this.createSearchControlIfNotExist();
|
|
110
|
-
this.searchControl.valueChanges
|
|
111
|
-
.pipe(debounceTime(1000), takeUntil(this._destroyed))
|
|
112
|
-
.subscribe((newValue) => {
|
|
113
|
-
if (this.type === 'auto-complete') {
|
|
114
|
-
this.autoCompleteValues = [];
|
|
115
|
-
if (newValue &&
|
|
116
|
-
newValue.length > 2 &&
|
|
117
|
-
newValue !== this.lastValue) {
|
|
118
|
-
this.autocompleteChange.emit({
|
|
119
|
-
value: newValue,
|
|
120
|
-
top: this.autoCompleteTop,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else if (this.type === 'regular') {
|
|
125
|
-
if (this.triggerOn === 'keydown') {
|
|
126
|
-
this.emitSearchClick();
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
ngOnDestroy() {
|
|
132
|
-
this._destroyed.next();
|
|
133
|
-
this._destroyed.complete();
|
|
134
|
-
}
|
|
135
|
-
exportFunctionsOnHostElement() {
|
|
136
|
-
// This is for web component usage for use those functions.
|
|
137
|
-
this.hostElement.nativeElement.initSearch = this.initSearch.bind(this);
|
|
138
|
-
}
|
|
139
|
-
createSearchControlIfNotExist() {
|
|
140
|
-
if (!this.searchControl) {
|
|
141
|
-
this.searchControl = new FormControl();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
blur() {
|
|
145
|
-
setTimeout(() => {
|
|
146
|
-
this.searchInput.nativeElement.blur();
|
|
147
|
-
}, 0);
|
|
148
|
-
}
|
|
149
|
-
showFloatingButton() {
|
|
150
|
-
this.fadeState = 'fadeOut';
|
|
151
|
-
setTimeout(() => {
|
|
152
|
-
this.stateChange.emit({ state: 'close' });
|
|
153
|
-
this.showFloatSrcBtn = true;
|
|
154
|
-
}, 500);
|
|
155
|
-
// close the phone keyboard
|
|
156
|
-
this.blur();
|
|
157
|
-
}
|
|
158
|
-
initSearch() {
|
|
159
|
-
this.lastValue = null;
|
|
160
|
-
this.searchControl.setValue('');
|
|
161
|
-
}
|
|
162
|
-
onClearClicked(event) {
|
|
163
|
-
if (this.type === 'auto-complete') {
|
|
164
|
-
this.autoCompleteValues = [];
|
|
165
|
-
}
|
|
166
|
-
this.initSearch();
|
|
167
|
-
this.search.emit({ value: '' });
|
|
168
|
-
event.preventDefault();
|
|
169
|
-
/*
|
|
170
|
-
if (this.isFloating) {
|
|
171
|
-
this.showFloatingButton();
|
|
172
|
-
} */
|
|
173
|
-
}
|
|
174
|
-
onSearchClicked() {
|
|
175
|
-
if (this.isFloating) {
|
|
176
|
-
this.triggerSearch();
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
if (this.state === 'open') {
|
|
180
|
-
this.triggerSearch();
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
this.state = 'open';
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
onFocusout() {
|
|
188
|
-
if (this.isFloating && this.searchControl.value?.length === 0) {
|
|
189
|
-
this.showFloatingButton();
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
onSearch(event) {
|
|
193
|
-
// Stop the event propagation - cause we don't want fire two events.
|
|
194
|
-
event.stopPropagation();
|
|
195
|
-
this.triggerSearch();
|
|
196
|
-
}
|
|
197
|
-
triggerSearch() {
|
|
198
|
-
if (this.type === 'auto-complete') {
|
|
199
|
-
this.autoCompleteValues = [];
|
|
200
|
-
}
|
|
201
|
-
this.blur();
|
|
202
|
-
this.emitSearchClick();
|
|
203
|
-
}
|
|
204
|
-
animateSearch() {
|
|
205
|
-
if (this.state === 'open') {
|
|
206
|
-
this.fadeState =
|
|
207
|
-
this.fadeState === 'fadeOut' ? 'fadeIn' : 'fadeOut';
|
|
208
|
-
if (this.fadeState === 'fadeIn') {
|
|
209
|
-
this.stateChange.emit({ state: 'open' });
|
|
210
|
-
this.showFloatSrcBtn = false;
|
|
211
|
-
this.searchInput.nativeElement.focus();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
this.fadeState = 'fadeIn';
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
// do the emit just when done because of the line break when closing the search
|
|
219
|
-
// component and showen all other components before
|
|
220
|
-
animateSearchDone() {
|
|
221
|
-
if (this.state !== 'open') {
|
|
222
|
-
this.stateChange.emit({ state: 'close' });
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
emitSearchClick() {
|
|
226
|
-
const value = this.searchControl.value;
|
|
227
|
-
if (value !== this.lastValue) {
|
|
228
|
-
this.lastValue = value;
|
|
229
|
-
this.search.emit({ value });
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
PepSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSearchComponent, deps: [{ token: i0.ElementRef }, { token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
234
|
-
PepSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepSearchComponent, selector: "pep-search", inputs: { triggerOn: "triggerOn", autoCompleteTop: "autoCompleteTop", autoCompleteValues: "autoCompleteValues", shrink: "shrink", value: "value", searchControl: "searchControl", useAsWebComponent: "useAsWebComponent", sizeType: "sizeType" }, outputs: { search: "search", autocompleteChange: "autocompleteChange", stateChange: "stateChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<!-- <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n</ng-container> -->\n<ng-container *ngIf=\"shrink !== 'never'; then shrinkBlock; else staticBlock\"></ng-container>\n<ng-template #shrinkBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\" [ngClass]=\"{ 'pep-floating-search': isFloating}\"\n [@fadeInOut]=\"fadeState\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n <button *ngIf=\"isFloating && fadeState !='fadeIn' && showFloatSrcBtn\"\n class=\"pep-button icon-button {{ sizeType }} weak\" mat-button (click)=\"animateSearch()\">\n <mat-icon>\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n<ng-template #staticBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #autoCompleteBlock>\n <mat-form-field appearance=\"outline\">\n <!-- (@slideInOut.done)=\"animateSearchDone()\" [@slideInOut]=\"state\" -->\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\" results=\"5\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" [matAutocomplete]=\"auto\" />\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"pep-select\">\n <mat-option *ngFor=\"let value of autoCompleteValues\" [value]=\"value\" (click)=\"triggerSearch()\">\n {{value}}\n </mat-option>\n <mat-option *ngIf=\"autoCompleteValues?.length > autoCompleteTop - 1\" [value]=\"value\"\n (click)=\"triggerSearch()\">{{ 'SEARCH.MORE_RESULTS' | translate }}</mat-option>\n </mat-autocomplete>\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n\n<ng-template #regularBlock>\n <mat-form-field appearance=\"outline\">\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" (focusout)=\"onFocusout()\" />\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n<ng-template #triggerOnClickBlock>\n <mat-icon class=\"pep-text-icon pep-pointer\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\"\n (click)=\"onClearClicked($event)\">\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n <span class=\"pep-text-icon pep-spacing-element pep-v-separator\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\">|</span>\n <mat-icon class=\"pep-text-icon pep-pointer\" (click)=\"onSearchClicked()\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n</ng-template>\n\n<ng-template #triggerOnKeydownBlock>\n <ng-container *ngIf=\"searchControl.value?.length > 0; then clearBlock; else searchBlock\"></ng-container>\n <ng-template #clearBlock>\n <button class=\"pep-button regular {{ sizeType }}\" mat-button (click)=\"onClearClicked($event)\">\n <mat-icon>\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n </button>\n </ng-template>\n <ng-template #searchBlock>\n <mat-icon class=\"pep-text-icon\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </ng-template>\n</ng-template>", styles: [".pep-search-container .pep-search-input .mat-form-field{display:inherit}.pep-search-container .pep-search-input .pep-v-separator{padding:var(--pep-spacing-xs, .25rem) 0;height:100%}.pep-search-container .pep-search-input .pep-text-icon.pep-pointer{cursor:pointer}.pep-search-container .pep-search-input .hide-clear-icon{visibility:hidden}.pep-search-container.pep-floating-search{display:inline-block}.pep-search-container.pep-floating-search.pep-is-action-button-visable{width:calc(100% - (var(--pep-spacing-sm, .5rem) * 2 + var(--pep-spacing-xl, 1.5rem)))}@media (max-width: 599px){.pep-search-container ::ng-deep .mat-button-wrapper{max-width:3.125rem}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.PepRtlClassDirective, selector: "[pepRtlClass]" }, { kind: "component", type: i9.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], animations: [
|
|
235
|
-
trigger('slideInOut', [
|
|
236
|
-
state('close', style({
|
|
237
|
-
width: '0',
|
|
238
|
-
padding: '0',
|
|
239
|
-
border: 'none',
|
|
240
|
-
})),
|
|
241
|
-
state('open', style({
|
|
242
|
-
width: 'inherit',
|
|
243
|
-
})),
|
|
244
|
-
transition('close => open', animate('500ms ease-in-out')),
|
|
245
|
-
transition('open => close', animate('500ms ease-in-out')),
|
|
246
|
-
]),
|
|
247
|
-
trigger('fadeInOut', [
|
|
248
|
-
state('fadeOut', style({
|
|
249
|
-
opacity: 0,
|
|
250
|
-
width: '1px',
|
|
251
|
-
})),
|
|
252
|
-
state('fadeIn', style({
|
|
253
|
-
opacity: 1,
|
|
254
|
-
width: '100%',
|
|
255
|
-
})),
|
|
256
|
-
transition('fadeOut => fadeIn', animate(300, style({ opacity: 1, width: '100%' }))),
|
|
257
|
-
transition('fadeIn => fadeOut', animate(350, style({ opacity: 0, width: '1px' }))),
|
|
258
|
-
]),
|
|
259
|
-
] });
|
|
260
|
-
PepSearchComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSearchComponent });
|
|
261
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSearchComponent, decorators: [{
|
|
262
|
-
type: Component,
|
|
263
|
-
args: [{ selector: 'pep-search', animations: [
|
|
264
|
-
trigger('slideInOut', [
|
|
265
|
-
state('close', style({
|
|
266
|
-
width: '0',
|
|
267
|
-
padding: '0',
|
|
268
|
-
border: 'none',
|
|
269
|
-
})),
|
|
270
|
-
state('open', style({
|
|
271
|
-
width: 'inherit',
|
|
272
|
-
})),
|
|
273
|
-
transition('close => open', animate('500ms ease-in-out')),
|
|
274
|
-
transition('open => close', animate('500ms ease-in-out')),
|
|
275
|
-
]),
|
|
276
|
-
trigger('fadeInOut', [
|
|
277
|
-
state('fadeOut', style({
|
|
278
|
-
opacity: 0,
|
|
279
|
-
width: '1px',
|
|
280
|
-
})),
|
|
281
|
-
state('fadeIn', style({
|
|
282
|
-
opacity: 1,
|
|
283
|
-
width: '100%',
|
|
284
|
-
})),
|
|
285
|
-
transition('fadeOut => fadeIn', animate(300, style({ opacity: 1, width: '100%' }))),
|
|
286
|
-
transition('fadeIn => fadeOut', animate(350, style({ opacity: 0, width: '1px' }))),
|
|
287
|
-
]),
|
|
288
|
-
], template: "<!-- <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n</ng-container> -->\n<ng-container *ngIf=\"shrink !== 'never'; then shrinkBlock; else staticBlock\"></ng-container>\n<ng-template #shrinkBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\" [ngClass]=\"{ 'pep-floating-search': isFloating}\"\n [@fadeInOut]=\"fadeState\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n <button *ngIf=\"isFloating && fadeState !='fadeIn' && showFloatSrcBtn\"\n class=\"pep-button icon-button {{ sizeType }} weak\" mat-button (click)=\"animateSearch()\">\n <mat-icon>\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n<ng-template #staticBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #autoCompleteBlock>\n <mat-form-field appearance=\"outline\">\n <!-- (@slideInOut.done)=\"animateSearchDone()\" [@slideInOut]=\"state\" -->\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\" results=\"5\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" [matAutocomplete]=\"auto\" />\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"pep-select\">\n <mat-option *ngFor=\"let value of autoCompleteValues\" [value]=\"value\" (click)=\"triggerSearch()\">\n {{value}}\n </mat-option>\n <mat-option *ngIf=\"autoCompleteValues?.length > autoCompleteTop - 1\" [value]=\"value\"\n (click)=\"triggerSearch()\">{{ 'SEARCH.MORE_RESULTS' | translate }}</mat-option>\n </mat-autocomplete>\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n\n<ng-template #regularBlock>\n <mat-form-field appearance=\"outline\">\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" (focusout)=\"onFocusout()\" />\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n<ng-template #triggerOnClickBlock>\n <mat-icon class=\"pep-text-icon pep-pointer\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\"\n (click)=\"onClearClicked($event)\">\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n <span class=\"pep-text-icon pep-spacing-element pep-v-separator\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\">|</span>\n <mat-icon class=\"pep-text-icon pep-pointer\" (click)=\"onSearchClicked()\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n</ng-template>\n\n<ng-template #triggerOnKeydownBlock>\n <ng-container *ngIf=\"searchControl.value?.length > 0; then clearBlock; else searchBlock\"></ng-container>\n <ng-template #clearBlock>\n <button class=\"pep-button regular {{ sizeType }}\" mat-button (click)=\"onClearClicked($event)\">\n <mat-icon>\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n </button>\n </ng-template>\n <ng-template #searchBlock>\n <mat-icon class=\"pep-text-icon\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </ng-template>\n</ng-template>", styles: [".pep-search-container .pep-search-input .mat-form-field{display:inherit}.pep-search-container .pep-search-input .pep-v-separator{padding:var(--pep-spacing-xs, .25rem) 0;height:100%}.pep-search-container .pep-search-input .pep-text-icon.pep-pointer{cursor:pointer}.pep-search-container .pep-search-input .hide-clear-icon{visibility:hidden}.pep-search-container.pep-floating-search{display:inline-block}.pep-search-container.pep-floating-search.pep-is-action-button-visable{width:calc(100% - (var(--pep-spacing-sm, .5rem) * 2 + var(--pep-spacing-xl, 1.5rem)))}@media (max-width: 599px){.pep-search-container ::ng-deep .mat-button-wrapper{max-width:3.125rem}}\n"] }]
|
|
289
|
-
}, {
|
|
290
|
-
type: Injectable
|
|
291
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PepLayoutService }]; }, propDecorators: { triggerOn: [{
|
|
292
|
-
type: Input
|
|
293
|
-
}], autoCompleteTop: [{
|
|
294
|
-
type: Input
|
|
295
|
-
}], autoCompleteValues: [{
|
|
296
|
-
type: Input
|
|
297
|
-
}], shrink: [{
|
|
298
|
-
type: Input
|
|
299
|
-
}], value: [{
|
|
300
|
-
type: Input
|
|
301
|
-
}], searchControl: [{
|
|
302
|
-
type: Input
|
|
303
|
-
}], useAsWebComponent: [{
|
|
304
|
-
type: Input
|
|
305
|
-
}], sizeType: [{
|
|
306
|
-
type: Input
|
|
307
|
-
}], search: [{
|
|
308
|
-
type: Output
|
|
309
|
-
}], autocompleteChange: [{
|
|
310
|
-
type: Output
|
|
311
|
-
}], stateChange: [{
|
|
312
|
-
type: Output
|
|
313
|
-
}], searchInput: [{
|
|
314
|
-
type: ViewChild,
|
|
315
|
-
args: ['searchInput']
|
|
316
|
-
}] } });
|
|
1
|
+
import { Component, Injectable, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { trigger, state, style, transition, animate, } from '@angular/animations';
|
|
4
|
+
import { FormControl } from '@angular/forms';
|
|
5
|
+
import { PepScreenSizeType, } from '@pepperi-addons/ngx-lib';
|
|
6
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@pepperi-addons/ngx-lib";
|
|
9
|
+
import * as i2 from "@angular/common";
|
|
10
|
+
import * as i3 from "@angular/forms";
|
|
11
|
+
import * as i4 from "@angular/material/autocomplete";
|
|
12
|
+
import * as i5 from "@angular/material/core";
|
|
13
|
+
import * as i6 from "@angular/material/button";
|
|
14
|
+
import * as i7 from "@angular/material/form-field";
|
|
15
|
+
import * as i8 from "@angular/material/icon";
|
|
16
|
+
import * as i9 from "@pepperi-addons/ngx-lib/icon";
|
|
17
|
+
import * as i10 from "@angular/material/input";
|
|
18
|
+
import * as i11 from "@ngx-translate/core";
|
|
19
|
+
export class PepSearchComponent {
|
|
20
|
+
constructor(hostElement, layoutService) {
|
|
21
|
+
this.hostElement = hostElement;
|
|
22
|
+
this.layoutService = layoutService;
|
|
23
|
+
this.triggerOn = 'click';
|
|
24
|
+
this.autoCompleteTop = 20;
|
|
25
|
+
this._autoCompleteValues = [];
|
|
26
|
+
// @Input() shrinkInSmallScreen = true;
|
|
27
|
+
this._shrink = 'small-screen';
|
|
28
|
+
this._searchControl = null;
|
|
29
|
+
this._useAsWebComponent = false;
|
|
30
|
+
/**
|
|
31
|
+
* The size of the button.
|
|
32
|
+
*
|
|
33
|
+
* @type {PepSizeType}
|
|
34
|
+
* @memberof PepButtonComponent
|
|
35
|
+
*/
|
|
36
|
+
this.sizeType = 'md';
|
|
37
|
+
this.search = new EventEmitter();
|
|
38
|
+
this.autocompleteChange = new EventEmitter();
|
|
39
|
+
this.stateChange = new EventEmitter();
|
|
40
|
+
this._destroyed = new Subject();
|
|
41
|
+
this.type = 'regular';
|
|
42
|
+
this.state = 'open';
|
|
43
|
+
this.lastValue = null;
|
|
44
|
+
this.showFloatSrcBtn = true;
|
|
45
|
+
this.isRtl = false;
|
|
46
|
+
this.isFloating = false;
|
|
47
|
+
//
|
|
48
|
+
}
|
|
49
|
+
set autoCompleteValues(val) {
|
|
50
|
+
this.type = 'auto-complete';
|
|
51
|
+
this._autoCompleteValues = val;
|
|
52
|
+
}
|
|
53
|
+
get autoCompleteValues() {
|
|
54
|
+
return this._autoCompleteValues;
|
|
55
|
+
}
|
|
56
|
+
set shrink(value) {
|
|
57
|
+
this._shrink = value;
|
|
58
|
+
this.setIsFloating();
|
|
59
|
+
}
|
|
60
|
+
get shrink() {
|
|
61
|
+
return this._shrink;
|
|
62
|
+
}
|
|
63
|
+
set value(val) {
|
|
64
|
+
this.createSearchControlIfNotExist();
|
|
65
|
+
this.searchControl.setValue(val);
|
|
66
|
+
}
|
|
67
|
+
get value() {
|
|
68
|
+
return this.searchControl.value || '';
|
|
69
|
+
}
|
|
70
|
+
set searchControl(ctrl) {
|
|
71
|
+
this._searchControl = ctrl;
|
|
72
|
+
}
|
|
73
|
+
get searchControl() {
|
|
74
|
+
return this._searchControl;
|
|
75
|
+
}
|
|
76
|
+
set useAsWebComponent(value) {
|
|
77
|
+
if (value) {
|
|
78
|
+
this.exportFunctionsOnHostElement();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
get useAsWebComponent() {
|
|
82
|
+
return this._useAsWebComponent;
|
|
83
|
+
}
|
|
84
|
+
setIsFloating() {
|
|
85
|
+
if (this.shrink === 'small-screen') {
|
|
86
|
+
this.isFloating = this.screenSize > PepScreenSizeType.SM;
|
|
87
|
+
}
|
|
88
|
+
else if (this.shrink === 'always') {
|
|
89
|
+
this.isFloating = true;
|
|
90
|
+
}
|
|
91
|
+
else { // never
|
|
92
|
+
this.isFloating = false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
ngOnInit() {
|
|
96
|
+
this.layoutService.onResize$.pipe().subscribe((size) => {
|
|
97
|
+
this.screenSize = size;
|
|
98
|
+
this.setIsFloating();
|
|
99
|
+
// Just for the smoote animation
|
|
100
|
+
if (this.isFloating) {
|
|
101
|
+
this.showFloatSrcBtn = false;
|
|
102
|
+
this.showFloatingButton();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.fadeState = 'fadeIn';
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
this.isRtl = this.layoutService.isRtl();
|
|
109
|
+
this.createSearchControlIfNotExist();
|
|
110
|
+
this.searchControl.valueChanges
|
|
111
|
+
.pipe(debounceTime(1000), takeUntil(this._destroyed))
|
|
112
|
+
.subscribe((newValue) => {
|
|
113
|
+
if (this.type === 'auto-complete') {
|
|
114
|
+
this.autoCompleteValues = [];
|
|
115
|
+
if (newValue &&
|
|
116
|
+
newValue.length > 2 &&
|
|
117
|
+
newValue !== this.lastValue) {
|
|
118
|
+
this.autocompleteChange.emit({
|
|
119
|
+
value: newValue,
|
|
120
|
+
top: this.autoCompleteTop,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else if (this.type === 'regular') {
|
|
125
|
+
if (this.triggerOn === 'keydown') {
|
|
126
|
+
this.emitSearchClick();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
ngOnDestroy() {
|
|
132
|
+
this._destroyed.next();
|
|
133
|
+
this._destroyed.complete();
|
|
134
|
+
}
|
|
135
|
+
exportFunctionsOnHostElement() {
|
|
136
|
+
// This is for web component usage for use those functions.
|
|
137
|
+
this.hostElement.nativeElement.initSearch = this.initSearch.bind(this);
|
|
138
|
+
}
|
|
139
|
+
createSearchControlIfNotExist() {
|
|
140
|
+
if (!this.searchControl) {
|
|
141
|
+
this.searchControl = new FormControl();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
blur() {
|
|
145
|
+
setTimeout(() => {
|
|
146
|
+
this.searchInput.nativeElement.blur();
|
|
147
|
+
}, 0);
|
|
148
|
+
}
|
|
149
|
+
showFloatingButton() {
|
|
150
|
+
this.fadeState = 'fadeOut';
|
|
151
|
+
setTimeout(() => {
|
|
152
|
+
this.stateChange.emit({ state: 'close' });
|
|
153
|
+
this.showFloatSrcBtn = true;
|
|
154
|
+
}, 500);
|
|
155
|
+
// close the phone keyboard
|
|
156
|
+
this.blur();
|
|
157
|
+
}
|
|
158
|
+
initSearch() {
|
|
159
|
+
this.lastValue = null;
|
|
160
|
+
this.searchControl.setValue('');
|
|
161
|
+
}
|
|
162
|
+
onClearClicked(event) {
|
|
163
|
+
if (this.type === 'auto-complete') {
|
|
164
|
+
this.autoCompleteValues = [];
|
|
165
|
+
}
|
|
166
|
+
this.initSearch();
|
|
167
|
+
this.search.emit({ value: '' });
|
|
168
|
+
event.preventDefault();
|
|
169
|
+
/*
|
|
170
|
+
if (this.isFloating) {
|
|
171
|
+
this.showFloatingButton();
|
|
172
|
+
} */
|
|
173
|
+
}
|
|
174
|
+
onSearchClicked() {
|
|
175
|
+
if (this.isFloating) {
|
|
176
|
+
this.triggerSearch();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
if (this.state === 'open') {
|
|
180
|
+
this.triggerSearch();
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
this.state = 'open';
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
onFocusout() {
|
|
188
|
+
if (this.isFloating && this.searchControl.value?.length === 0) {
|
|
189
|
+
this.showFloatingButton();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
onSearch(event) {
|
|
193
|
+
// Stop the event propagation - cause we don't want fire two events.
|
|
194
|
+
event.stopPropagation();
|
|
195
|
+
this.triggerSearch();
|
|
196
|
+
}
|
|
197
|
+
triggerSearch() {
|
|
198
|
+
if (this.type === 'auto-complete') {
|
|
199
|
+
this.autoCompleteValues = [];
|
|
200
|
+
}
|
|
201
|
+
this.blur();
|
|
202
|
+
this.emitSearchClick();
|
|
203
|
+
}
|
|
204
|
+
animateSearch() {
|
|
205
|
+
if (this.state === 'open') {
|
|
206
|
+
this.fadeState =
|
|
207
|
+
this.fadeState === 'fadeOut' ? 'fadeIn' : 'fadeOut';
|
|
208
|
+
if (this.fadeState === 'fadeIn') {
|
|
209
|
+
this.stateChange.emit({ state: 'open' });
|
|
210
|
+
this.showFloatSrcBtn = false;
|
|
211
|
+
this.searchInput.nativeElement.focus();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.fadeState = 'fadeIn';
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// do the emit just when done because of the line break when closing the search
|
|
219
|
+
// component and showen all other components before
|
|
220
|
+
animateSearchDone() {
|
|
221
|
+
if (this.state !== 'open') {
|
|
222
|
+
this.stateChange.emit({ state: 'close' });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
emitSearchClick() {
|
|
226
|
+
const value = this.searchControl.value;
|
|
227
|
+
if (value !== this.lastValue) {
|
|
228
|
+
this.lastValue = value;
|
|
229
|
+
this.search.emit({ value });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
PepSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSearchComponent, deps: [{ token: i0.ElementRef }, { token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
234
|
+
PepSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepSearchComponent, selector: "pep-search", inputs: { triggerOn: "triggerOn", autoCompleteTop: "autoCompleteTop", autoCompleteValues: "autoCompleteValues", shrink: "shrink", value: "value", searchControl: "searchControl", useAsWebComponent: "useAsWebComponent", sizeType: "sizeType" }, outputs: { search: "search", autocompleteChange: "autocompleteChange", stateChange: "stateChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<!-- <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n</ng-container> -->\n<ng-container *ngIf=\"shrink !== 'never'; then shrinkBlock; else staticBlock\"></ng-container>\n<ng-template #shrinkBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\" [ngClass]=\"{ 'pep-floating-search': isFloating}\"\n [@fadeInOut]=\"fadeState\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n <button *ngIf=\"isFloating && fadeState !='fadeIn' && showFloatSrcBtn\"\n class=\"pep-button icon-button {{ sizeType }} weak\" mat-button (click)=\"animateSearch()\">\n <mat-icon>\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n<ng-template #staticBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #autoCompleteBlock>\n <mat-form-field appearance=\"outline\">\n <!-- (@slideInOut.done)=\"animateSearchDone()\" [@slideInOut]=\"state\" -->\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\" results=\"5\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" [matAutocomplete]=\"auto\" />\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"pep-select\">\n <mat-option *ngFor=\"let value of autoCompleteValues\" [value]=\"value\" (click)=\"triggerSearch()\">\n {{value}}\n </mat-option>\n <mat-option *ngIf=\"autoCompleteValues?.length > autoCompleteTop - 1\" [value]=\"value\"\n (click)=\"triggerSearch()\">{{ 'SEARCH.MORE_RESULTS' | translate }}</mat-option>\n </mat-autocomplete>\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n\n<ng-template #regularBlock>\n <mat-form-field appearance=\"outline\">\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" (focusout)=\"onFocusout()\" />\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n<ng-template #triggerOnClickBlock>\n <mat-icon class=\"pep-text-icon pep-pointer\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\"\n (click)=\"onClearClicked($event)\">\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n <span class=\"pep-text-icon pep-spacing-element pep-v-separator\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\">|</span>\n <mat-icon class=\"pep-text-icon pep-pointer\" (click)=\"onSearchClicked()\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n</ng-template>\n\n<ng-template #triggerOnKeydownBlock>\n <ng-container *ngIf=\"searchControl.value?.length > 0; then clearBlock; else searchBlock\"></ng-container>\n <ng-template #clearBlock>\n <button class=\"pep-button regular {{ sizeType }}\" mat-button (click)=\"onClearClicked($event)\">\n <mat-icon>\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n </button>\n </ng-template>\n <ng-template #searchBlock>\n <mat-icon class=\"pep-text-icon\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </ng-template>\n</ng-template>", styles: [".pep-search-container .pep-search-input .mat-form-field{display:inherit}.pep-search-container .pep-search-input .pep-v-separator{padding:var(--pep-spacing-xs, .25rem) 0;height:100%}.pep-search-container .pep-search-input .pep-text-icon.pep-pointer{cursor:pointer}.pep-search-container .pep-search-input .hide-clear-icon{visibility:hidden}.pep-search-container.pep-floating-search{display:inline-block}.pep-search-container.pep-floating-search.pep-is-action-button-visable{width:calc(100% - (var(--pep-spacing-sm, .5rem) * 2 + var(--pep-spacing-xl, 1.5rem)))}@media (max-width: 599px){.pep-search-container ::ng-deep .mat-button-wrapper{max-width:3.125rem}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.PepRtlClassDirective, selector: "[pepRtlClass]" }, { kind: "component", type: i9.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], animations: [
|
|
235
|
+
trigger('slideInOut', [
|
|
236
|
+
state('close', style({
|
|
237
|
+
width: '0',
|
|
238
|
+
padding: '0',
|
|
239
|
+
border: 'none',
|
|
240
|
+
})),
|
|
241
|
+
state('open', style({
|
|
242
|
+
width: 'inherit',
|
|
243
|
+
})),
|
|
244
|
+
transition('close => open', animate('500ms ease-in-out')),
|
|
245
|
+
transition('open => close', animate('500ms ease-in-out')),
|
|
246
|
+
]),
|
|
247
|
+
trigger('fadeInOut', [
|
|
248
|
+
state('fadeOut', style({
|
|
249
|
+
opacity: 0,
|
|
250
|
+
width: '1px',
|
|
251
|
+
})),
|
|
252
|
+
state('fadeIn', style({
|
|
253
|
+
opacity: 1,
|
|
254
|
+
width: '100%',
|
|
255
|
+
})),
|
|
256
|
+
transition('fadeOut => fadeIn', animate(300, style({ opacity: 1, width: '100%' }))),
|
|
257
|
+
transition('fadeIn => fadeOut', animate(350, style({ opacity: 0, width: '1px' }))),
|
|
258
|
+
]),
|
|
259
|
+
] });
|
|
260
|
+
PepSearchComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSearchComponent });
|
|
261
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepSearchComponent, decorators: [{
|
|
262
|
+
type: Component,
|
|
263
|
+
args: [{ selector: 'pep-search', animations: [
|
|
264
|
+
trigger('slideInOut', [
|
|
265
|
+
state('close', style({
|
|
266
|
+
width: '0',
|
|
267
|
+
padding: '0',
|
|
268
|
+
border: 'none',
|
|
269
|
+
})),
|
|
270
|
+
state('open', style({
|
|
271
|
+
width: 'inherit',
|
|
272
|
+
})),
|
|
273
|
+
transition('close => open', animate('500ms ease-in-out')),
|
|
274
|
+
transition('open => close', animate('500ms ease-in-out')),
|
|
275
|
+
]),
|
|
276
|
+
trigger('fadeInOut', [
|
|
277
|
+
state('fadeOut', style({
|
|
278
|
+
opacity: 0,
|
|
279
|
+
width: '1px',
|
|
280
|
+
})),
|
|
281
|
+
state('fadeIn', style({
|
|
282
|
+
opacity: 1,
|
|
283
|
+
width: '100%',
|
|
284
|
+
})),
|
|
285
|
+
transition('fadeOut => fadeIn', animate(300, style({ opacity: 1, width: '100%' }))),
|
|
286
|
+
transition('fadeIn => fadeOut', animate(350, style({ opacity: 0, width: '1px' }))),
|
|
287
|
+
]),
|
|
288
|
+
], template: "<!-- <ng-container *ngTemplateOutlet=\"pepTemplate; context: { isFormView: false, hasParent: false }\">\n</ng-container> -->\n<ng-container *ngIf=\"shrink !== 'never'; then shrinkBlock; else staticBlock\"></ng-container>\n<ng-template #shrinkBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\" [ngClass]=\"{ 'pep-floating-search': isFloating}\"\n [@fadeInOut]=\"fadeState\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n <button *ngIf=\"isFloating && fadeState !='fadeIn' && showFloatSrcBtn\"\n class=\"pep-button icon-button {{ sizeType }} weak\" mat-button (click)=\"animateSearch()\">\n <mat-icon>\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n<ng-template #staticBlock>\n <div pepRtlClass class=\"pep-search-container {{ sizeType }}\">\n <div class=\"pep-search-input\">\n <ng-container *ngIf=\"type === 'auto-complete'\">\n <ng-container *ngTemplateOutlet=\"autoCompleteBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'regular'\">\n <ng-container *ngTemplateOutlet=\"regularBlock\"></ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #autoCompleteBlock>\n <mat-form-field appearance=\"outline\">\n <!-- (@slideInOut.done)=\"animateSearchDone()\" [@slideInOut]=\"state\" -->\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\" results=\"5\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" [matAutocomplete]=\"auto\" />\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"pep-select\">\n <mat-option *ngFor=\"let value of autoCompleteValues\" [value]=\"value\" (click)=\"triggerSearch()\">\n {{value}}\n </mat-option>\n <mat-option *ngIf=\"autoCompleteValues?.length > autoCompleteTop - 1\" [value]=\"value\"\n (click)=\"triggerSearch()\">{{ 'SEARCH.MORE_RESULTS' | translate }}</mat-option>\n </mat-autocomplete>\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n\n<ng-template #regularBlock>\n <mat-form-field appearance=\"outline\">\n <input #searchInput class=\"body-sm pep-search-input\" matInput autocomplete=\"off\"\n [ngStyle]=\"{ textAlign: isRtl ? 'right' : 'left' }\" type=\"text\" (keyup.enter)=\"onSearch($event)\"\n [formControl]=\"searchControl\" placeholder=\"{{ 'SEARCH.HINT' | translate }}...\" (focusout)=\"onFocusout()\" />\n <div matSuffix class=\"flex align-center\">\n <ng-container *ngIf=\"triggerOn === 'click'\">\n <ng-container *ngTemplateOutlet=\"triggerOnClickBlock\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"triggerOn === 'keydown'\">\n <ng-container *ngTemplateOutlet=\"triggerOnKeydownBlock\"></ng-container>\n </ng-container>\n </div>\n </mat-form-field>\n</ng-template>\n<ng-template #triggerOnClickBlock>\n <mat-icon class=\"pep-text-icon pep-pointer\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\"\n (click)=\"onClearClicked($event)\">\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n <span class=\"pep-text-icon pep-spacing-element pep-v-separator\"\n [ngClass]=\"{'hide-clear-icon' : state == 'close' || searchControl.value?.length === 0}\">|</span>\n <mat-icon class=\"pep-text-icon pep-pointer\" (click)=\"onSearchClicked()\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n</ng-template>\n\n<ng-template #triggerOnKeydownBlock>\n <ng-container *ngIf=\"searchControl.value?.length > 0; then clearBlock; else searchBlock\"></ng-container>\n <ng-template #clearBlock>\n <button class=\"pep-button regular {{ sizeType }}\" mat-button (click)=\"onClearClicked($event)\">\n <mat-icon>\n <pep-icon name=\"system_close\"></pep-icon>\n </mat-icon>\n </button>\n </ng-template>\n <ng-template #searchBlock>\n <mat-icon class=\"pep-text-icon\">\n <pep-icon name=\"system_search\"></pep-icon>\n </mat-icon>\n </ng-template>\n</ng-template>", styles: [".pep-search-container .pep-search-input .mat-form-field{display:inherit}.pep-search-container .pep-search-input .pep-v-separator{padding:var(--pep-spacing-xs, .25rem) 0;height:100%}.pep-search-container .pep-search-input .pep-text-icon.pep-pointer{cursor:pointer}.pep-search-container .pep-search-input .hide-clear-icon{visibility:hidden}.pep-search-container.pep-floating-search{display:inline-block}.pep-search-container.pep-floating-search.pep-is-action-button-visable{width:calc(100% - (var(--pep-spacing-sm, .5rem) * 2 + var(--pep-spacing-xl, 1.5rem)))}@media (max-width: 599px){.pep-search-container ::ng-deep .mat-button-wrapper{max-width:3.125rem}}\n"] }]
|
|
289
|
+
}, {
|
|
290
|
+
type: Injectable
|
|
291
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PepLayoutService }]; }, propDecorators: { triggerOn: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], autoCompleteTop: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], autoCompleteValues: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], shrink: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], value: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], searchControl: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], useAsWebComponent: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], sizeType: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], search: [{
|
|
308
|
+
type: Output
|
|
309
|
+
}], autocompleteChange: [{
|
|
310
|
+
type: Output
|
|
311
|
+
}], stateChange: [{
|
|
312
|
+
type: Output
|
|
313
|
+
}], searchInput: [{
|
|
314
|
+
type: ViewChild,
|
|
315
|
+
args: ['searchInput']
|
|
316
|
+
}] } });
|
|
317
317
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NlYXJjaC9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUVILGlCQUFpQixHQUVwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUE0RHpELE1BQU0sT0FBTyxrQkFBa0I7SUFpRjNCLFlBQ1ksV0FBdUIsRUFDdkIsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBbEZsQyxjQUFTLEdBQXlCLE9BQU8sQ0FBQztRQUMxQyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUN0Qix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFVakMsdUNBQXVDO1FBRS9CLFlBQU8sR0FBd0IsY0FBYyxDQUFDO1FBbUI5QyxtQkFBYyxHQUFnQixJQUFJLENBQUM7UUFTbkMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBV25DOzs7OztXQUtHO1FBQ00sYUFBUSxHQUFnQixJ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Z0NBQ1YsS0FBSyxFQUFFLEtBQUs7NkJBQ2YsQ0FBQyxDQUNMOzRCQUNELEtBQUssQ0FDRCxRQUFRLEVBQ1IsS0FBSyxDQUFDO2dDQUNGLE9BQU8sRUFBRSxDQUFDO2dDQUNWLEtBQUssRUFBRSxNQUFNOzZCQUNoQixDQUFDLENBQ0w7NEJBQ0QsVUFBVSxDQUNOLG1CQUFtQixFQUNuQixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FDckQ7NEJBQ0QsVUFBVSxDQUNOLG1CQUFtQixFQUNuQixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDcEQ7eUJBQ0osQ0FBQztxQkFDTDs7a0JBRUosVUFBVTtnSUFFRSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQWFGLE1BQU07c0JBRFQsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBV0YsYUFBYTtzQkFEaEIsS0FBSztnQkFVRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBZ0JHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxNQUFNO2dCQUdQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFHUCxXQUFXO3NCQURWLE1BQU07Z0JBR21CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIGFuaW1hdGUsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIFBlcExheW91dFNlcnZpY2UsXG4gICAgUGVwU2NyZWVuU2l6ZVR5cGUsXG4gICAgUGVwU2l6ZVR5cGUsXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBJUGVwU2VhcmNoQ2xpY2tFdmVudCxcbiAgICBJUGVwU2VhcmNoQXV0b2NvbXBsZXRlQ2hhbmdlRXZlbnQsXG4gICAgSVBlcFNlYXJjaFN0YXRlQ2hhbmdlRXZlbnQsXG4gICAgUGVwU2VhcmNoVHlwZSxcbiAgICBQZXBTZWFyY2hUcmlnZ2VyVHlwZSxcbiAgICBQZXBTZWFyY2hTaHJpbmtUeXBlLFxufSBmcm9tICcuL3NlYXJjaC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLXNlYXJjaCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzbGlkZUluT3V0JywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnb3BlbicsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignY2xvc2UgPT4gb3BlbicsIGFuaW1hdGUoJzUwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignb3BlbiA9PiBjbG9zZScsIGFuaW1hdGUoJzUwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgICAgICBdKSxcbiAgICAgICAgdHJpZ2dlcignZmFkZUluT3V0JywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2ZhZGVPdXQnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxcHgnLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2ZhZGVJbicsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAnZmFkZU91dCA9PiBmYWRlSW4nLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoMzAwLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHdpZHRoOiAnMTAwJScgfSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAnZmFkZUluID0+IGZhZGVPdXQnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoMzUwLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHdpZHRoOiAnMXB4JyB9KSlcbiAgICAgICAgICAgICksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBlcFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB0cmlnZ2VyT246IFBlcFNlYXJjaFRyaWdnZXJUeXBlID0gJ2NsaWNrJztcbiAgICBASW5wdXQoKSBhdXRvQ29tcGxldGVUb3AgPSAyMDtcbiAgICBwcml2YXRlIF9hdXRvQ29tcGxldGVWYWx1ZXMgPSBbXTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBhdXRvQ29tcGxldGVWYWx1ZXModmFsOiBhbnlbXSkge1xuICAgICAgICB0aGlzLnR5cGUgPSAnYXV0by1jb21wbGV0ZSc7XG4gICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZVZhbHVlcyA9IHZhbDtcbiAgICB9XG4gICAgZ2V0IGF1dG9Db21wbGV0ZVZhbHVlcygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvQ29tcGxldGVWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gQElucHV0KCkgc2hyaW5rSW5TbWFsbFNjcmVlbiA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9zaHJpbms6IFBlcFNlYXJjaFNocmlua1R5cGUgPSAnc21hbGwtc2NyZWVuJztcbiAgICBASW5wdXQoKVxuICAgIHNldCBzaHJpbmsodmFsdWU6IFBlcFNlYXJjaFNocmlua1R5cGUpIHtcbiAgICAgICAgdGhpcy5fc2hyaW5rID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0SXNGbG9hdGluZygpXG4gICAgfVxuICAgIGdldCBzaHJpbmsoKTogUGVwU2VhcmNoU2hyaW5rVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaHJpbms7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hDb250cm9sSWZOb3RFeGlzdCgpO1xuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUodmFsKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VhcmNoQ29udHJvbDogRm9ybUNvbnRyb2wgPSBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlYXJjaENvbnRyb2woY3RybDogRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoQ29udHJvbCA9IGN0cmw7XG4gICAgfVxuICAgIGdldCBzZWFyY2hDb250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaENvbnRyb2w7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXNlQXNXZWJDb21wb25lbnQgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB1c2VBc1dlYkNvbXBvbmVudCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RnVuY3Rpb25zT25Ib3N0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB1c2VBc1dlYkNvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZUFzV2ViQ29tcG9uZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7UGVwU2l6ZVR5cGV9XG4gICAgICogQG1lbWJlcm9mIFBlcEJ1dHRvbkNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNpemVUeXBlOiBQZXBTaXplVHlwZSA9ICdtZCc7XG5cbiAgICBAT3V0cHV0KClcbiAgICBzZWFyY2g6IEV2ZW50RW1pdHRlcjxJUGVwU2VhcmNoQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBTZWFyY2hDbGlja0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKVxuICAgIGF1dG9jb21wbGV0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBTZWFyY2hBdXRvY29tcGxldGVDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBTZWFyY2hBdXRvY29tcGxldGVDaGFuZ2VFdmVudD4oKTtcbiAgICBAT3V0cHV0KClcbiAgICBzdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBTZWFyY2hTdGF0ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcFNlYXJjaFN0YXRlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0eXBlOiBQZXBTZWFyY2hUeXBlID0gJ3JlZ3VsYXInO1xuICAgIGZhZGVTdGF0ZTogJ2ZhZGVPdXQnIHwgJ2ZhZGVJbic7XG4gICAgc3RhdGU6ICdvcGVuJyB8ICdjbG9zZScgPSAnb3Blbic7XG4gICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICBzaG93RmxvYXRTcmNCdG4gPSB0cnVlO1xuICAgIGlzUnRsID0gZmFsc2U7XG4gICAgaXNGbG9hdGluZyA9IGZhbHNlO1xuICAgIHNjcmVlblNpemU6IFBlcFNjcmVlblNpemVUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZVxuICAgICkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXNGbG9hdGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hyaW5rID09PSAnc21hbGwtc2NyZWVuJykge1xuICAgICAgICAgICAgdGhpcy5pc0Zsb2F0aW5nID0gdGhpcy5zY3JlZW5TaXplID4gUGVwU2NyZWVuU2l6ZVR5cGUuU007XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaHJpbmsgPT09ICdhbHdheXMnKSB7XG4gICAgICAgICAgICB0aGlzLmlzRmxvYXRpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgeyAvLyBuZXZlclxuICAgICAgICAgICAgdGhpcy5pc0Zsb2F0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLm9uUmVzaXplJC5waXBlKCkuc3Vic2NyaWJlKChzaXplKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcmVlblNpemUgPSBzaXplO1xuICAgICAgICAgICAgdGhpcy5zZXRJc0Zsb2F0aW5nKCk7XG5cbiAgICAgICAgICAgIC8vIEp1c3QgZm9yIHRoZSBzbW9vdGUgYW5pbWF0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Zsb2F0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RmxvYXRTcmNCdG4gPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Zsb2F0aW5nQnV0dG9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFkZVN0YXRlID0gJ2ZhZGVJbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaXNSdGwgPSB0aGlzLmxheW91dFNlcnZpY2UuaXNSdGwoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hDb250cm9sSWZOb3RFeGlzdCgpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDAwKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvLWNvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUubGVuZ3RoID4gMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgIT09IHRoaXMubGFzdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogdGhpcy5hdXRvQ29tcGxldGVUb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAncmVndWxhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJpZ2dlck9uID09PSAna2V5ZG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaENsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBvcnRGdW5jdGlvbnNPbkhvc3RFbGVtZW50KCkge1xuICAgICAgICAvLyBUaGlzIGlzIGZvciB3ZWIgY29tcG9uZW50IHVzYWdlIGZvciB1c2UgdGhvc2UgZnVuY3Rpb25zLlxuICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5pdFNlYXJjaCA9IHRoaXMuaW5pdFNlYXJjaC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU2VhcmNoQ29udHJvbElmTm90RXhpc3QoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmx1cigpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dGbG9hdGluZ0J1dHRvbigpIHtcbiAgICAgICAgdGhpcy5mYWRlU3RhdGUgPSAnZmFkZU91dCc7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoeyBzdGF0ZTogJ2Nsb3NlJyB9KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zsb2F0U3JjQnRuID0gdHJ1ZTtcbiAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICAvLyBjbG9zZSB0aGUgcGhvbmUga2V5Ym9hcmRcbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgfVxuXG4gICAgaW5pdFNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIH1cblxuICAgIG9uQ2xlYXJDbGlja2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG8tY29tcGxldGUnKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVZhbHVlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0U2VhcmNoKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoeyB2YWx1ZTogJycgfSk7XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAvKlxuICAgICAgICBpZiAodGhpcy5pc0Zsb2F0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dGbG9hdGluZ0J1dHRvbigpO1xuICAgICAgICB9ICovXG4gICAgfVxuXG4gICAgb25TZWFyY2hDbGlja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Zsb2F0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdvcGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9jdXNvdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRmxvYXRpbmcgJiYgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zsb2F0aW5nQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICAgICAgLy8gU3RvcCB0aGUgZXZlbnQgcHJvcGFnYXRpb24gLSBjYXVzZSB3ZSBkb24ndCB3YW50IGZpcmUgdHdvIGV2ZW50cy5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgIH1cblxuICAgIHRyaWdnZXJTZWFyY2goKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvLWNvbXBsZXRlJykge1xuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVWYWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICB0aGlzLmVtaXRTZWFyY2hDbGljaygpO1xuICAgIH1cblxuICAgIGFuaW1hdGVTZWFyY2goKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbicpIHtcbiAgICAgICAgICAgIHRoaXMuZmFkZVN0YXRlID1cbiAgICAgICAgICAgICAgICB0aGlzLmZhZGVTdGF0ZSA9PT0gJ2ZhZGVPdXQnID8gJ2ZhZGVJbicgOiAnZmFkZU91dCc7XG4gICAgICAgICAgICBpZiAodGhpcy5mYWRlU3RhdGUgPT09ICdmYWRlSW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHsgc3RhdGU6ICdvcGVuJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGbG9hdFNyY0J0biA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mYWRlU3RhdGUgPSAnZmFkZUluJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRvIHRoZSBlbWl0IGp1c3Qgd2hlbiBkb25lIGJlY2F1c2Ugb2YgdGhlIGxpbmUgYnJlYWsgd2hlbiBjbG9zaW5nIHRoZSBzZWFyY2hcbiAgICAvLyBjb21wb25lbnQgYW5kIHNob3dlbiBhbGwgb3RoZXIgY29tcG9uZW50cyBiZWZvcmVcbiAgICBhbmltYXRlU2VhcmNoRG9uZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHsgc3RhdGU6ICdjbG9zZScgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbWl0U2VhcmNoQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5sYXN0VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5lbWl0KHsgdmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZTsgY29udGV4dDogeyBpc0Zvcm1WaWV3OiBmYWxzZSwgaGFzUGFyZW50OiBmYWxzZSB9XCI+XG48L25nLWNvbnRhaW5lcj4gLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2hyaW5rICE9PSAnbmV2ZXInOyB0aGVuIHNocmlua0Jsb2NrOyBlbHNlIHN0YXRpY0Jsb2NrXCI+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI3Nocmlua0Jsb2NrPlxuICAgIDxkaXYgcGVwUnRsQ2xhc3MgY2xhc3M9XCJwZXAtc2VhcmNoLWNvbnRhaW5lciB7eyBzaXplVHlwZSB9fVwiIFtuZ0NsYXNzXT1cInsgJ3BlcC1mbG9hdGluZy1zZWFyY2gnOiBpc0Zsb2F0aW5nfVwiXG4gICAgICAgIFtAZmFkZUluT3V0XT1cImZhZGVTdGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVwLXNlYXJjaC1pbnB1dFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICdhdXRvLWNvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdXRvQ29tcGxldGVCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3JlZ3VsYXInXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlZ3VsYXJCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Zsb2F0aW5nICYmIGZhZGVTdGF0ZSAhPSdmYWRlSW4nICYmIHNob3dGbG9hdFNyY0J0blwiXG4gICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiB7eyBzaXplVHlwZSB9fSB3ZWFrXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwiYW5pbWF0ZVNlYXJjaCgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwic3lzdGVtX3NlYXJjaFwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzdGF0aWNCbG9jaz5cbiAgICA8ZGl2IHBlcFJ0bENsYXNzIGNsYXNzPVwicGVwLXNlYXJjaC1jb250YWluZXIge3sgc2l6ZVR5cGUgfX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcC1zZWFyY2gtaW5wdXRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAnYXV0by1jb21wbGV0ZSdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXV0b0NvbXBsZXRlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICdyZWd1bGFyJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWd1bGFyQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYXV0b0NvbXBsZXRlQmxvY2s+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgIDwhLS0gKEBzbGlkZUluT3V0LmRvbmUpPVwiYW5pbWF0ZVNlYXJjaERvbmUoKVwiIFtAc2xpZGVJbk91dF09XCJzdGF0ZVwiIC0tPlxuICAgICAgICA8aW5wdXQgI3NlYXJjaElucHV0IGNsYXNzPVwiYm9keS1zbSBwZXAtc2VhcmNoLWlucHV0XCIgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgdGV4dEFsaWduOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCcgfVwiIHR5cGU9XCJ0ZXh0XCIgKGtleXVwLmVudGVyKT1cIm9uU2VhcmNoKCRldmVudClcIiByZXN1bHRzPVwiNVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwie3sgJ1NFQVJDSC5ISU5UJyB8IHRyYW5zbGF0ZSB9fS4uLlwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIC8+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJwZXAtc2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgYXV0b0NvbXBsZXRlVmFsdWVzXCIgW3ZhbHVlXT1cInZhbHVlXCIgKGNsaWNrKT1cInRyaWdnZXJTZWFyY2goKVwiPlxuICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJhdXRvQ29tcGxldGVWYWx1ZXM/Lmxlbmd0aCA+IGF1dG9Db21wbGV0ZVRvcCAtIDFcIiBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyU2VhcmNoKClcIj57eyAnU0VBUkNILk1PUkVfUkVTVUxUUycgfCB0cmFuc2xhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJmbGV4IGFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJPbiA9PT0gJ2NsaWNrJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyT25DbGlja0Jsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmlnZ2VyT24gPT09ICdrZXlkb3duJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyT25LZXlkb3duQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZWd1bGFyQmxvY2s+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgY2xhc3M9XCJib2R5LXNtIHBlcC1zZWFyY2gtaW5wdXRcIiBtYXRJbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyB0ZXh0QWxpZ246IGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JyB9XCIgdHlwZT1cInRleHRcIiAoa2V5dXAuZW50ZXIpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwie3sgJ1NFQVJDSC5ISU5UJyB8IHRyYW5zbGF0ZSB9fS4uLlwiIChmb2N1c291dCk9XCJvbkZvY3Vzb3V0KClcIiAvPlxuICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImZsZXggYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJpZ2dlck9uID09PSAnY2xpY2snXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJPbkNsaWNrQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJPbiA9PT0gJ2tleWRvd24nXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJPbktleWRvd25CbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyT25DbGlja0Jsb2NrPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cInBlcC10ZXh0LWljb24gcGVwLXBvaW50ZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2hpZGUtY2xlYXItaWNvbicgOiBzdGF0ZSA9PSAnY2xvc2UnIHx8IHNlYXJjaENvbnRyb2wudmFsdWU/Lmxlbmd0aCA9PT0gMH1cIlxuICAgICAgICAoY2xpY2spPVwib25DbGVhckNsaWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICA8cGVwLWljb24gbmFtZT1cInN5c3RlbV9jbG9zZVwiPjwvcGVwLWljb24+XG4gICAgPC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cInBlcC10ZXh0LWljb24gcGVwLXNwYWNpbmctZWxlbWVudCBwZXAtdi1zZXBhcmF0b3JcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2hpZGUtY2xlYXItaWNvbicgOiBzdGF0ZSA9PSAnY2xvc2UnIHx8IHNlYXJjaENvbnRyb2wudmFsdWU/Lmxlbmd0aCA9PT0gMH1cIj58PC9zcGFuPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cInBlcC10ZXh0LWljb24gcGVwLXBvaW50ZXJcIiAoY2xpY2spPVwib25TZWFyY2hDbGlja2VkKClcIj5cbiAgICAgICAgPHBlcC1pY29uIG5hbWU9XCJzeXN0ZW1fc2VhcmNoXCI+PC9wZXAtaWNvbj5cbiAgICA8L21hdC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyT25LZXlkb3duQmxvY2s+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaENvbnRyb2wudmFsdWU/Lmxlbmd0aCA+IDA7IHRoZW4gY2xlYXJCbG9jazsgZWxzZSBzZWFyY2hCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJCbG9jaz5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBlcC1idXR0b24gcmVndWxhciB7eyBzaXplVHlwZSB9fVwiIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2xlYXJDbGlja2VkKCRldmVudClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInN5c3RlbV9jbG9zZVwiPjwvcGVwLWljb24+XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoQmxvY2s+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInBlcC10ZXh0LWljb25cIj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwic3lzdGVtX3NlYXJjaFwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+Il19
|