@po-ui/ng-components 5.21.0 → 5.22.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -36
- package/bundles/po-ui-ng-components.umd.js +38669 -38615
- package/bundles/po-ui-ng-components.umd.js.map +1 -1
- package/esm2015/lib/components/components.module.js +122 -122
- package/esm2015/lib/components/index.js +38 -38
- package/esm2015/lib/components/po-accordion/index.js +4 -4
- package/esm2015/lib/components/po-accordion/po-accordion-base.component.js +29 -29
- package/esm2015/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.js +66 -66
- package/esm2015/lib/components/po-accordion/po-accordion-item-body/po-accordion-item-body.component.js +23 -23
- package/esm2015/lib/components/po-accordion/po-accordion-item-header/po-accordion-item-header.component.js +24 -24
- package/esm2015/lib/components/po-accordion/po-accordion.component.js +70 -70
- package/esm2015/lib/components/po-accordion/po-accordion.module.js +52 -52
- package/esm2015/lib/components/po-accordion/services/po-accordion.service.js +27 -27
- package/esm2015/lib/components/po-avatar/index.js +3 -3
- package/esm2015/lib/components/po-avatar/po-avatar-base.component.js +68 -68
- package/esm2015/lib/components/po-avatar/po-avatar.component.js +42 -42
- package/esm2015/lib/components/po-avatar/po-avatar.module.js +18 -18
- package/esm2015/lib/components/po-badge/po-badge-base.component.js +89 -89
- package/esm2015/lib/components/po-badge/po-badge.component.js +16 -16
- package/esm2015/lib/components/po-badge/po-badge.module.js +18 -18
- package/esm2015/lib/components/po-breadcrumb/index.js +5 -5
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-base.component.js +48 -48
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.js +20 -20
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.component.js +77 -77
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.service.js +49 -49
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-item/po-breadcrumb-item.component.js +27 -27
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb-item.interface.js +2 -2
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb.component.js +159 -159
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb.interface.js +2 -2
- package/esm2015/lib/components/po-breadcrumb/po-breadcrumb.module.js +28 -28
- package/esm2015/lib/components/po-button/index.js +3 -3
- package/esm2015/lib/components/po-button/po-button-base.component.js +127 -127
- package/esm2015/lib/components/po-button/po-button.component.js +69 -69
- package/esm2015/lib/components/po-button/po-button.module.js +20 -20
- package/esm2015/lib/components/po-button-group/index.js +5 -5
- package/esm2015/lib/components/po-button-group/po-button-group-base.component.js +95 -95
- package/esm2015/lib/components/po-button-group/po-button-group-item.interface.js +2 -2
- package/esm2015/lib/components/po-button-group/po-button-group-toggle.enum.js +17 -17
- package/esm2015/lib/components/po-button-group/po-button-group.component.js +43 -43
- package/esm2015/lib/components/po-button-group/po-button-group.module.js +20 -20
- package/esm2015/lib/components/po-calendar/index.js +4 -4
- package/esm2015/lib/components/po-calendar/po-calendar-base.component.js +176 -176
- package/esm2015/lib/components/po-calendar/po-calendar-header/po-calendar-header.component.js +24 -24
- package/esm2015/lib/components/po-calendar/po-calendar-mode.enum.js +13 -13
- package/esm2015/lib/components/po-calendar/po-calendar-wrapper/po-calendar-wrapper.component.js +251 -251
- package/esm2015/lib/components/po-calendar/po-calendar.component.js +199 -199
- package/esm2015/lib/components/po-calendar/po-calendar.module.js +19 -19
- package/esm2015/lib/components/po-calendar/services/po-calendar.lang.service.js +187 -187
- package/esm2015/lib/components/po-calendar/services/po-calendar.service.js +44 -44
- package/esm2015/lib/components/po-chart/directives/po-resize-observer.directive.js +44 -44
- package/esm2015/lib/components/po-chart/enums/po-chart-type.enum.js +51 -51
- package/esm2015/lib/components/po-chart/helpers/po-chart-default-values.constant.js +18 -18
- package/esm2015/lib/components/po-chart/index.js +8 -8
- package/esm2015/lib/components/po-chart/interfaces/po-chart-axis-options.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-bar-coordinates.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-container-size.interface.js +11 -11
- package/esm2015/lib/components/po-chart/interfaces/po-chart-label-coordinates.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-min-max-values.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-options.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-path-coordinates.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-points-coordinates.interface.js +2 -2
- package/esm2015/lib/components/po-chart/interfaces/po-chart-serie.interface.js +2 -2
- package/esm2015/lib/components/po-chart/po-chart-base.component.js +244 -244
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-label/po-chart-axis-label.component.js +23 -23
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-path/po-chart-axis-path.component.js +19 -19
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis.component.js +287 -287
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-base.component.js +94 -94
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-path/po-chart-bar-path.component.js +33 -33
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar.component.js +58 -58
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-column/po-chart-column.component.js +59 -59
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-label/po-chart-circular-label.component.js +29 -29
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-circular-path.component.js +35 -35
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-tooltip.directive.js +76 -76
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular.component.js +142 -142
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-donut/po-chart-donut.component.js +115 -115
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-pie/po-chart-pie.component.js +57 -57
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-container.component.js +119 -119
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-area/po-chart-area.component.js +77 -77
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line-base.component.js +151 -151
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line.component.js +41 -41
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-path/po-chart-path.component.js +65 -65
- package/esm2015/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-series-point/po-chart-series-point.component.js +95 -95
- package/esm2015/lib/components/po-chart/po-chart-legend/po-chart-legend.component.js +21 -21
- package/esm2015/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.constant.js +11 -11
- package/esm2015/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.js +374 -374
- package/esm2015/lib/components/po-chart/po-chart-types/po-chart-dynamic-type.component.js +45 -45
- package/esm2015/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-series.interface.js +2 -2
- package/esm2015/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-text-content/po-chart-gauge-text-content.component.js +75 -75
- package/esm2015/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge.component.js +85 -85
- package/esm2015/lib/components/po-chart/po-chart.component.js +203 -203
- package/esm2015/lib/components/po-chart/po-chart.module.js +61 -61
- package/esm2015/lib/components/po-chart/services/po-chart-maths.service.js +135 -135
- package/esm2015/lib/components/po-chart/services/po-chart-svg-container.service.js +57 -57
- package/esm2015/lib/components/po-container/index.js +3 -3
- package/esm2015/lib/components/po-container/po-container-base.component.js +88 -88
- package/esm2015/lib/components/po-container/po-container.component.js +32 -32
- package/esm2015/lib/components/po-container/po-container.module.js +18 -18
- package/esm2015/lib/components/po-disclaimer/index.js +4 -4
- package/esm2015/lib/components/po-disclaimer/po-disclaimer-base.component.js +77 -77
- package/esm2015/lib/components/po-disclaimer/po-disclaimer.component.js +29 -29
- package/esm2015/lib/components/po-disclaimer/po-disclaimer.interface.js +2 -2
- package/esm2015/lib/components/po-disclaimer/po-disclaimer.module.js +17 -17
- package/esm2015/lib/components/po-disclaimer-group/index.js +5 -5
- package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group-base.component.js +194 -194
- package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group-remove-action.interface.js +2 -2
- package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group.component.js +41 -41
- package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group.interface.js +2 -2
- package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-group.module.js +20 -20
- package/esm2015/lib/components/po-disclaimer-group/po-disclaimer-remove/po-disclaimer-remove.component.js +30 -30
- package/esm2015/lib/components/po-divider/index.js +3 -3
- package/esm2015/lib/components/po-divider/po-divider-base.component.js +16 -16
- package/esm2015/lib/components/po-divider/po-divider.component.js +32 -32
- package/esm2015/lib/components/po-divider/po-divider.module.js +18 -18
- package/esm2015/lib/components/po-dropdown/index.js +4 -4
- package/esm2015/lib/components/po-dropdown/po-dropdown-action.interface.js +2 -2
- package/esm2015/lib/components/po-dropdown/po-dropdown-base.component.js +71 -71
- package/esm2015/lib/components/po-dropdown/po-dropdown.component.js +97 -97
- package/esm2015/lib/components/po-dropdown/po-dropdown.module.js +18 -18
- package/esm2015/lib/components/po-dynamic/index.js +11 -11
- package/esm2015/lib/components/po-dynamic/po-dynamic-field-type.enum.js +25 -25
- package/esm2015/lib/components/po-dynamic/po-dynamic-field.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.js +104 -104
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-field-internal.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.js +200 -200
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.js +129 -129
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.service.js +32 -32
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-operation/po-dynamic-form-operation.js +20 -20
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-response.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-changed.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-validation.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.service.js +39 -39
- package/esm2015/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form.component.js +167 -167
- package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-base.component.js +163 -163
- package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-field.interface.js +2 -2
- package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.component.js +101 -101
- package/esm2015/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.service.js +17 -17
- package/esm2015/lib/components/po-dynamic/po-dynamic.module.js +35 -35
- package/esm2015/lib/components/po-dynamic/po-dynamic.util.js +18 -18
- package/esm2015/lib/components/po-field/index.js +51 -51
- package/esm2015/lib/components/po-field/po-checkbox/po-checkbox-base.component.js +98 -98
- package/esm2015/lib/components/po-field/po-checkbox/po-checkbox.component.js +94 -94
- package/esm2015/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option-view.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.js +297 -289
- package/esm2015/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.js +98 -98
- package/esm2015/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.js +20 -20
- package/esm2015/lib/components/po-field/po-clean/po-clean-base.component.js +42 -42
- package/esm2015/lib/components/po-field/po-clean/po-clean.component.js +33 -33
- package/esm2015/lib/components/po-field/po-clean/po-clean.module.js +18 -18
- package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-filter.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-group.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-literals.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-option-group.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-combo/interfaces/po-combo-option.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-combo/interfaces/po-response.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-combo/po-combo-base.component.js +749 -741
- package/esm2015/lib/components/po-field/po-combo/po-combo-filter-mode.enum.js +17 -17
- package/esm2015/lib/components/po-field/po-combo/po-combo-filter.service.js +78 -78
- package/esm2015/lib/components/po-field/po-combo/po-combo-option-template/po-combo-option-template.directive.js +81 -81
- package/esm2015/lib/components/po-field/po-combo/po-combo.component.js +525 -525
- package/esm2015/lib/components/po-field/po-datepicker/enums/po-datepicker-iso-format.enum.js +17 -17
- package/esm2015/lib/components/po-field/po-datepicker/po-datepicker-base.component.js +396 -396
- package/esm2015/lib/components/po-field/po-datepicker/po-datepicker.component.js +345 -344
- package/esm2015/lib/components/po-field/po-datepicker/po-datepicker.module.js +22 -22
- package/esm2015/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range-literals.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.js +475 -475
- package/esm2015/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.js +443 -436
- package/esm2015/lib/components/po-field/po-datepicker-range/po-datepicker-range.literals.js +27 -27
- package/esm2015/lib/components/po-field/po-decimal/po-decimal.component.js +598 -598
- package/esm2015/lib/components/po-field/po-email/po-email.component.js +106 -106
- package/esm2015/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.js +29 -29
- package/esm2015/lib/components/po-field/po-field-container/po-field-container-literals.js +15 -15
- package/esm2015/lib/components/po-field/po-field-container/po-field-container.component.js +39 -39
- package/esm2015/lib/components/po-field/po-field-container/po-field-container.module.js +19 -19
- package/esm2015/lib/components/po-field/po-field-validate.model.js +69 -69
- package/esm2015/lib/components/po-field/po-field.model.js +78 -78
- package/esm2015/lib/components/po-field/po-field.module.js +156 -156
- package/esm2015/lib/components/po-field/po-input/po-input-base.component.js +357 -357
- package/esm2015/lib/components/po-field/po-input/po-input.component.js +56 -56
- package/esm2015/lib/components/po-field/po-input/po-mask.js +460 -460
- package/esm2015/lib/components/po-field/po-input-generic/po-input-generic.js +187 -187
- package/esm2015/lib/components/po-field/po-login/po-login.component.js +65 -65
- package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-advanced-filter.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-column.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-filter.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-filtered-items-params.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-literals.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-lookup/interfaces/po-lookup-response-api.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-lookup/po-lookup-base.component.js +451 -451
- package/esm2015/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.js +357 -347
- package/esm2015/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.js +130 -130
- package/esm2015/lib/components/po-field/po-lookup/po-lookup.component.js +337 -337
- package/esm2015/lib/components/po-field/po-lookup/services/po-lookup-filter.service.js +59 -59
- package/esm2015/lib/components/po-field/po-lookup/services/po-lookup-modal.service.js +62 -62
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-base.component.js +576 -571
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.js +139 -139
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-filter-mode.enum.js +17 -17
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-filter.service.js +50 -50
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-item/po-multiselect-item.component.js +33 -33
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-literals.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-option.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.js +57 -57
- package/esm2015/lib/components/po-field/po-multiselect/po-multiselect.component.js +359 -359
- package/esm2015/lib/components/po-field/po-number/po-number-base.component.js +114 -114
- package/esm2015/lib/components/po-field/po-number/po-number.component.js +119 -119
- package/esm2015/lib/components/po-field/po-password/po-password.component.js +92 -92
- package/esm2015/lib/components/po-field/po-radio-group/po-radio-group-base.component.js +184 -184
- package/esm2015/lib/components/po-field/po-radio-group/po-radio-group-option.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-radio-group/po-radio-group.component.js +119 -119
- package/esm2015/lib/components/po-field/po-rich-text/interfaces/po-rich-text-toolbar-button-group-item.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-base.component.js +181 -181
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-body/po-rich-text-body.component.js +312 -312
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-image-modal/po-rich-text-image-modal.component.js +96 -96
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-link-modal/po-rich-text-link-modal.component.js +140 -140
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-literals.js +83 -83
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.js +166 -166
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text.component.js +147 -147
- package/esm2015/lib/components/po-field/po-rich-text/po-rich-text.service.js +17 -17
- package/esm2015/lib/components/po-field/po-select/po-select-option-template/po-select-option-template.directive.js +59 -59
- package/esm2015/lib/components/po-field/po-select/po-select-option.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-select/po-select.component.js +366 -359
- package/esm2015/lib/components/po-field/po-switch/po-switch-label-position.enum.js +15 -15
- package/esm2015/lib/components/po-field/po-switch/po-switch.component.js +190 -190
- package/esm2015/lib/components/po-field/po-textarea/po-textarea-base.component.js +269 -269
- package/esm2015/lib/components/po-field/po-textarea/po-textarea.component.js +130 -130
- package/esm2015/lib/components/po-field/po-upload/interfaces/po-upload-file-restriction.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-upload/interfaces/po-upload-literals.interface.js +2 -2
- package/esm2015/lib/components/po-field/po-upload/po-upload-base.component.js +581 -573
- package/esm2015/lib/components/po-field/po-upload/po-upload-base.service.js +88 -88
- package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area/po-upload-drag-drop-area.component.js +30 -30
- package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area-overlay/po-upload-drag-drop-area-overlay.component.js +40 -40
- package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.component.js +60 -60
- package/esm2015/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.directive.js +165 -165
- package/esm2015/lib/components/po-field/po-upload/po-upload-file-restrictions/po-upload-file-restrictions.component.js +63 -63
- package/esm2015/lib/components/po-field/po-upload/po-upload-file.js +39 -39
- package/esm2015/lib/components/po-field/po-upload/po-upload-status.enum.js +13 -13
- package/esm2015/lib/components/po-field/po-upload/po-upload.component.js +326 -326
- package/esm2015/lib/components/po-field/po-upload/po-upload.service.js +8 -8
- package/esm2015/lib/components/po-field/po-url/po-url.component.js +86 -86
- package/esm2015/lib/components/po-field/validators.js +41 -41
- package/esm2015/lib/components/po-gauge/index.js +4 -4
- package/esm2015/lib/components/po-gauge/interfaces/po-gauge-coordinates.interface.js +2 -2
- package/esm2015/lib/components/po-gauge/interfaces/po-gauge-ranges.interface.js +2 -2
- package/esm2015/lib/components/po-gauge/interfaces/po-gauge-svg-container.interface.js +2 -2
- package/esm2015/lib/components/po-gauge/po-gauge-base.component.js +146 -146
- package/esm2015/lib/components/po-gauge/po-gauge-default-values.constant.js +11 -11
- package/esm2015/lib/components/po-gauge/po-gauge-description/po-gauge-description.component.js +27 -27
- package/esm2015/lib/components/po-gauge/po-gauge-legend/po-gauge-legend.component.js +27 -27
- package/esm2015/lib/components/po-gauge/po-gauge-svg/po-gauge-path/po-gauge-path.component.js +20 -20
- package/esm2015/lib/components/po-gauge/po-gauge-svg/po-gauge-pointer/po-gauge-pointer.component.js +50 -50
- package/esm2015/lib/components/po-gauge/po-gauge-svg/po-gauge-svg.component.js +204 -204
- package/esm2015/lib/components/po-gauge/po-gauge-title/po-gauge-title.component.js +13 -13
- package/esm2015/lib/components/po-gauge/po-gauge.component.js +72 -72
- package/esm2015/lib/components/po-gauge/po-gauge.module.js +32 -32
- package/esm2015/lib/components/po-grid/index.js +4 -4
- package/esm2015/lib/components/po-grid/po-grid-cell/po-grid-cell.component.js +111 -111
- package/esm2015/lib/components/po-grid/po-grid-cell-action/po-grid-cell-action.component.js +24 -24
- package/esm2015/lib/components/po-grid/po-grid-head/po-grid-head.component.js +30 -30
- package/esm2015/lib/components/po-grid/po-grid-row-actions.interface.js +2 -2
- package/esm2015/lib/components/po-grid/po-grid.component.js +314 -314
- package/esm2015/lib/components/po-grid/po-grid.module.js +23 -23
- package/esm2015/lib/components/po-icon/index.js +3 -3
- package/esm2015/lib/components/po-icon/po-icon.component.js +62 -62
- package/esm2015/lib/components/po-icon/po-icon.module.js +18 -18
- package/esm2015/lib/components/po-info/index.js +4 -4
- package/esm2015/lib/components/po-info/po-info-base.component.js +62 -62
- package/esm2015/lib/components/po-info/po-info-orietation.enum.js +15 -15
- package/esm2015/lib/components/po-info/po-info.component.js +36 -36
- package/esm2015/lib/components/po-info/po-info.module.js +21 -21
- package/esm2015/lib/components/po-list-view/index.js +7 -7
- package/esm2015/lib/components/po-list-view/interfaces/po-list-view-action.interface.js +2 -2
- package/esm2015/lib/components/po-list-view/interfaces/po-list-view-literals.interface.js +2 -2
- package/esm2015/lib/components/po-list-view/po-list-view-base.component.js +274 -274
- package/esm2015/lib/components/po-list-view/po-list-view-content-template/po-list-view-content-template.directive.js +101 -101
- package/esm2015/lib/components/po-list-view/po-list-view-detail-template/po-list-view-detail-template.directive.js +64 -64
- package/esm2015/lib/components/po-list-view/po-list-view.component.js +128 -128
- package/esm2015/lib/components/po-list-view/po-list-view.module.js +51 -51
- package/esm2015/lib/components/po-loading/index.js +5 -5
- package/esm2015/lib/components/po-loading/po-loading-base.component.js +24 -24
- package/esm2015/lib/components/po-loading/po-loading-icon/po-loading-icon.component.js +37 -37
- package/esm2015/lib/components/po-loading/po-loading-overlay/interfaces/po-loading-overlay-literals.interface.js +2 -2
- package/esm2015/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.js +91 -91
- package/esm2015/lib/components/po-loading/po-loading-overlay/po-loading-overlay.component.js +41 -41
- package/esm2015/lib/components/po-loading/po-loading.component.js +16 -16
- package/esm2015/lib/components/po-loading/po-loading.module.js +22 -22
- package/esm2015/lib/components/po-menu/index.js +9 -9
- package/esm2015/lib/components/po-menu/po-menu-base.component.js +299 -299
- package/esm2015/lib/components/po-menu/po-menu-filter/po-menu-filter-literals.interface.js +2 -2
- package/esm2015/lib/components/po-menu/po-menu-filter/po-menu-filter.component.js +40 -40
- package/esm2015/lib/components/po-menu/po-menu-filter/po-menu-filter.interface.js +2 -2
- package/esm2015/lib/components/po-menu/po-menu-header-template/po-menu-header-template.directive.js +51 -51
- package/esm2015/lib/components/po-menu/po-menu-item/po-menu-item-badge.interface.js +2 -2
- package/esm2015/lib/components/po-menu/po-menu-item/po-menu-item-filtered.interface.js +2 -2
- package/esm2015/lib/components/po-menu/po-menu-item/po-menu-item.component.js +173 -173
- package/esm2015/lib/components/po-menu/po-menu-item.interface.js +2 -2
- package/esm2015/lib/components/po-menu/po-menu.component.js +497 -497
- package/esm2015/lib/components/po-menu/po-menu.module.js +26 -26
- package/esm2015/lib/components/po-menu/services/po-menu-global.service.js +32 -32
- package/esm2015/lib/components/po-menu/services/po-menu-items.service.js +35 -35
- package/esm2015/lib/components/po-menu/services/po-menu.service.js +35 -35
- package/esm2015/lib/components/po-menu-panel/index.js +4 -4
- package/esm2015/lib/components/po-menu-panel/po-menu-panel-base.component.js +76 -76
- package/esm2015/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item-internal.interface.js +2 -2
- package/esm2015/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.component.js +54 -54
- package/esm2015/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.interface.js +2 -2
- package/esm2015/lib/components/po-menu-panel/po-menu-panel.component.js +145 -145
- package/esm2015/lib/components/po-menu-panel/po-menu-panel.module.js +24 -24
- package/esm2015/lib/components/po-menu-panel/services/po-menu-panel-items.service.js +35 -35
- package/esm2015/lib/components/po-modal/index.js +5 -5
- package/esm2015/lib/components/po-modal/po-modal-action.interface.js +2 -2
- package/esm2015/lib/components/po-modal/po-modal-base.component.js +121 -121
- package/esm2015/lib/components/po-modal/po-modal-footer/po-modal-footer.component.js +43 -43
- package/esm2015/lib/components/po-modal/po-modal.component.js +114 -114
- package/esm2015/lib/components/po-modal/po-modal.literals.js +15 -15
- package/esm2015/lib/components/po-modal/po-modal.module.js +19 -19
- package/esm2015/lib/components/po-navbar/index.js +5 -5
- package/esm2015/lib/components/po-navbar/interfaces/po-navbar-icon-action.interface.js +2 -2
- package/esm2015/lib/components/po-navbar/interfaces/po-navbar-item.interface.js +2 -2
- package/esm2015/lib/components/po-navbar/interfaces/po-navbar-literals.interface.js +2 -2
- package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-action/po-navbar-action.component.js +43 -43
- package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-action-popup/po-navbar-action-popup.component.js +18 -18
- package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.component.js +19 -19
- package/esm2015/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.module.js +18 -18
- package/esm2015/lib/components/po-navbar/po-navbar-base.component.js +147 -147
- package/esm2015/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation-icon/po-navbar-item-navigation-icon.component.js +18 -18
- package/esm2015/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.component.js +18 -18
- package/esm2015/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.module.js +15 -15
- package/esm2015/lib/components/po-navbar/po-navbar-items/po-navbar-item/po-navbar-item.component.js +30 -30
- package/esm2015/lib/components/po-navbar/po-navbar-items/po-navbar-items.component.js +53 -53
- package/esm2015/lib/components/po-navbar/po-navbar-items/po-navbar-items.module.js +15 -15
- package/esm2015/lib/components/po-navbar/po-navbar-logo/po-navbar-logo.component.js +13 -13
- package/esm2015/lib/components/po-navbar/po-navbar.component.js +213 -213
- package/esm2015/lib/components/po-navbar/po-navbar.module.js +57 -57
- package/esm2015/lib/components/po-page/index.js +15 -15
- package/esm2015/lib/components/po-page/po-page-action.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-base.component.js +23 -23
- package/esm2015/lib/components/po-page/po-page-content/po-page-content-base.component.js +10 -10
- package/esm2015/lib/components/po-page/po-page-content/po-page-content.component.js +54 -54
- package/esm2015/lib/components/po-page/po-page-default/po-page-default-base.component.js +111 -111
- package/esm2015/lib/components/po-page/po-page-default/po-page-default-literals.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-default/po-page-default.component.js +98 -98
- package/esm2015/lib/components/po-page/po-page-default/po-page-default.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-detail/po-page-detail-base.component.js +141 -141
- package/esm2015/lib/components/po-page/po-page-detail/po-page-detail-literals.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-detail/po-page-detail.component.js +62 -62
- package/esm2015/lib/components/po-page/po-page-edit/po-page-edit-base.component.js +146 -146
- package/esm2015/lib/components/po-page/po-page-edit/po-page-edit-literals.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-edit/po-page-edit.component.js +65 -65
- package/esm2015/lib/components/po-page/po-page-filter.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-header/po-page-header-base.component.js +26 -26
- package/esm2015/lib/components/po-page/po-page-header/po-page-header.component.js +15 -15
- package/esm2015/lib/components/po-page/po-page-list/po-page-list-base.component.js +137 -137
- package/esm2015/lib/components/po-page/po-page-list/po-page-list-literals.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page-list/po-page-list.component.js +188 -188
- package/esm2015/lib/components/po-page/po-page-slide/po-page-slide-base.component.js +135 -135
- package/esm2015/lib/components/po-page/po-page-slide/po-page-slide.component.js +121 -121
- package/esm2015/lib/components/po-page/po-page.component.js +16 -16
- package/esm2015/lib/components/po-page/po-page.interface.js +2 -2
- package/esm2015/lib/components/po-page/po-page.module.js +60 -60
- package/esm2015/lib/components/po-popover/index.js +3 -3
- package/esm2015/lib/components/po-popover/po-popover-base.component.js +113 -113
- package/esm2015/lib/components/po-popover/po-popover.component.js +138 -138
- package/esm2015/lib/components/po-popover/po-popover.module.js +17 -17
- package/esm2015/lib/components/po-popup/index.js +4 -4
- package/esm2015/lib/components/po-popup/po-popup-action.interface.js +2 -2
- package/esm2015/lib/components/po-popup/po-popup-base.component.js +186 -186
- package/esm2015/lib/components/po-popup/po-popup.component.js +169 -169
- package/esm2015/lib/components/po-popup/po-popup.module.js +21 -21
- package/esm2015/lib/components/po-progress/enums/po-progress-status.enum.js +17 -17
- package/esm2015/lib/components/po-progress/index.js +4 -4
- package/esm2015/lib/components/po-progress/po-progress-bar/po-progress-bar.component.js +18 -18
- package/esm2015/lib/components/po-progress/po-progress-base.component.js +107 -107
- package/esm2015/lib/components/po-progress/po-progress.component.js +56 -56
- package/esm2015/lib/components/po-progress/po-progress.module.js +19 -19
- package/esm2015/lib/components/po-slide/directives/po-slide-content-template.directive.js +59 -59
- package/esm2015/lib/components/po-slide/index.js +5 -5
- package/esm2015/lib/components/po-slide/interfaces/po-slide-item.interface.js +2 -2
- package/esm2015/lib/components/po-slide/po-slide-base.component.js +104 -104
- package/esm2015/lib/components/po-slide/po-slide-circles/po-slide-circles.component.js +26 -26
- package/esm2015/lib/components/po-slide/po-slide-control/po-slide-control.component.js +25 -25
- package/esm2015/lib/components/po-slide/po-slide-item/po-slide-item.component.js +37 -37
- package/esm2015/lib/components/po-slide/po-slide.component.js +256 -256
- package/esm2015/lib/components/po-slide/po-slide.module.js +58 -58
- package/esm2015/lib/components/po-stepper/enums/po-stepper-orientation.enum.js +18 -18
- package/esm2015/lib/components/po-stepper/enums/po-stepper-status.enum.js +23 -23
- package/esm2015/lib/components/po-stepper/index.js +7 -7
- package/esm2015/lib/components/po-stepper/po-step/po-step.component.js +78 -78
- package/esm2015/lib/components/po-stepper/po-stepper-base.component.js +144 -144
- package/esm2015/lib/components/po-stepper/po-stepper-circle/po-stepper-circle.component.js +47 -47
- package/esm2015/lib/components/po-stepper/po-stepper-item.interface.js +2 -2
- package/esm2015/lib/components/po-stepper/po-stepper-label/po-stepper-label.component.js +20 -20
- package/esm2015/lib/components/po-stepper/po-stepper-step/po-stepper-step.component.js +116 -116
- package/esm2015/lib/components/po-stepper/po-stepper.component.js +219 -219
- package/esm2015/lib/components/po-stepper/po-stepper.module.js +27 -27
- package/esm2015/lib/components/po-table/enums/po-table-column-sort-type.enum.js +14 -14
- package/esm2015/lib/components/po-table/enums/po-table-row-template-arrow-direction.enum.js +14 -14
- package/esm2015/lib/components/po-table/index.js +18 -18
- package/esm2015/lib/components/po-table/interfaces/po-table-action.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-boolean.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-column-sort.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-column.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-filter.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-filtered-items-params.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-literals.interface.js +2 -2
- package/esm2015/lib/components/po-table/interfaces/po-table-response-api.interface.js +2 -2
- package/esm2015/lib/components/po-table/po-table-base.component.js +860 -860
- package/esm2015/lib/components/po-table/po-table-cell-template/po-table-cell-template.directive.js +82 -82
- package/esm2015/lib/components/po-table/po-table-column-icon/po-table-column-icon.component.js +72 -72
- package/esm2015/lib/components/po-table/po-table-column-icon/po-table-column-icon.interface.js +2 -2
- package/esm2015/lib/components/po-table/po-table-column-label/po-table-column-label.component.js +38 -38
- package/esm2015/lib/components/po-table/po-table-column-label/po-table-column-label.interface.js +2 -2
- package/esm2015/lib/components/po-table/po-table-column-link/po-table-column-link.component.js +38 -38
- package/esm2015/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.js +250 -250
- package/esm2015/lib/components/po-table/po-table-column-template/po-table-column-template.directive.js +90 -90
- package/esm2015/lib/components/po-table/po-table-detail/po-table-detail-column.interface.js +2 -2
- package/esm2015/lib/components/po-table/po-table-detail/po-table-detail.component.js +88 -88
- package/esm2015/lib/components/po-table/po-table-detail/po-table-detail.interface.js +2 -2
- package/esm2015/lib/components/po-table/po-table-icon/po-table-icon.component.js +46 -46
- package/esm2015/lib/components/po-table/po-table-row-template/po-table-row-template.directive.js +128 -128
- package/esm2015/lib/components/po-table/po-table-show-subtitle/po-table-show-subtitle.component.js +21 -21
- package/esm2015/lib/components/po-table/po-table-subtitle-circle/po-table-subtitle-circle.component.js +41 -41
- package/esm2015/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-column.interface.js +2 -2
- package/esm2015/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-footer.component.js +70 -70
- package/esm2015/lib/components/po-table/po-table.component.js +542 -542
- package/esm2015/lib/components/po-table/po-table.module.js +75 -75
- package/esm2015/lib/components/po-table/services/po-table.service.js +38 -38
- package/esm2015/lib/components/po-tabs/index.js +5 -5
- package/esm2015/lib/components/po-tabs/po-tab/po-tab-base.component.js +82 -82
- package/esm2015/lib/components/po-tabs/po-tab/po-tab.component.js +27 -27
- package/esm2015/lib/components/po-tabs/po-tab/po-tab.interface.js +2 -2
- package/esm2015/lib/components/po-tabs/po-tab-button/po-tab-button.component.js +75 -75
- package/esm2015/lib/components/po-tabs/po-tab-dropdown/po-tab-dropdown.component.js +44 -44
- package/esm2015/lib/components/po-tabs/po-tabs-base.component.js +49 -49
- package/esm2015/lib/components/po-tabs/po-tabs.component.js +126 -126
- package/esm2015/lib/components/po-tabs/po-tabs.module.js +21 -21
- package/esm2015/lib/components/po-tag/enums/po-tag-icon.enum.js +19 -19
- package/esm2015/lib/components/po-tag/enums/po-tag-orientation.enum.js +15 -15
- package/esm2015/lib/components/po-tag/enums/po-tag-type.enum.js +19 -19
- package/esm2015/lib/components/po-tag/index.js +5 -5
- package/esm2015/lib/components/po-tag/interfaces/po-tag-item.interface.js +2 -2
- package/esm2015/lib/components/po-tag/po-tag-base.component.js +175 -175
- package/esm2015/lib/components/po-tag/po-tag.component.js +71 -71
- package/esm2015/lib/components/po-tag/po-tag.module.js +21 -21
- package/esm2015/lib/components/po-toolbar/index.js +5 -5
- package/esm2015/lib/components/po-toolbar/po-toolbar-action.interface.js +2 -2
- package/esm2015/lib/components/po-toolbar/po-toolbar-actions/po-toolbar-actions.component.js +35 -35
- package/esm2015/lib/components/po-toolbar/po-toolbar-base.component.js +43 -43
- package/esm2015/lib/components/po-toolbar/po-toolbar-notification/po-toolbar-notification.component.js +39 -39
- package/esm2015/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.component.js +28 -28
- package/esm2015/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.interface.js +2 -2
- package/esm2015/lib/components/po-toolbar/po-toolbar.component.js +46 -46
- package/esm2015/lib/components/po-toolbar/po-toolbar.module.js +32 -32
- package/esm2015/lib/components/po-tree-view/index.js +4 -4
- package/esm2015/lib/components/po-tree-view/po-tree-view-base.component.js +197 -197
- package/esm2015/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.component.js +58 -58
- package/esm2015/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.interface.js +2 -2
- package/esm2015/lib/components/po-tree-view/po-tree-view-item-header/po-tree-view-item-header.component.js +26 -26
- package/esm2015/lib/components/po-tree-view/po-tree-view.component.js +60 -60
- package/esm2015/lib/components/po-tree-view/po-tree-view.module.js +49 -49
- package/esm2015/lib/components/po-tree-view/services/po-tree-view.service.js +24 -24
- package/esm2015/lib/components/po-widget/index.js +3 -3
- package/esm2015/lib/components/po-widget/po-widget-base.component.js +216 -216
- package/esm2015/lib/components/po-widget/po-widget.component.js +114 -114
- package/esm2015/lib/components/po-widget/po-widget.module.js +19 -19
- package/esm2015/lib/decorators/index.js +3 -3
- package/esm2015/lib/decorators/input-boolean/input-boolean.decorator.js +18 -18
- package/esm2015/lib/decorators/input-required/input-required.decorator.js +34 -34
- package/esm2015/lib/decorators/property-decorator.interface.js +2 -2
- package/esm2015/lib/decorators/utils-decorators.js +64 -64
- package/esm2015/lib/directives/directives.module.js +14 -14
- package/esm2015/lib/directives/index.js +3 -3
- package/esm2015/lib/directives/po-tooltip/index.js +3 -3
- package/esm2015/lib/directives/po-tooltip/po-tooltip-base.directive.js +106 -106
- package/esm2015/lib/directives/po-tooltip/po-tooltip-control-position.service.js +8 -8
- package/esm2015/lib/directives/po-tooltip/po-tooltip.directive.js +147 -147
- package/esm2015/lib/directives/po-tooltip/po-tooltip.module.js +18 -18
- package/esm2015/lib/enums/po-color-palette.enum.js +35 -35
- package/esm2015/lib/enums/po-key-code.enum.js +31 -31
- package/esm2015/lib/guards/guards.module.js +13 -13
- package/esm2015/lib/guards/index.js +2 -2
- package/esm2015/lib/index.js +10 -10
- package/esm2015/lib/interceptors/index.js +4 -4
- package/esm2015/lib/interceptors/interceptors.module.js +15 -15
- package/esm2015/lib/interceptors/po-http-interceptor/index.js +3 -3
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-base.service.js +249 -249
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail-literals.interface.js +39 -39
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.component.js +83 -83
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.interface.js +2 -2
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor-literals.js +23 -23
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor.module.js +28 -28
- package/esm2015/lib/interceptors/po-http-interceptor/po-http-interceptor.service.js +28 -28
- package/esm2015/lib/interceptors/po-http-request/index.js +3 -3
- package/esm2015/lib/interceptors/po-http-request/po-http-request-control-service.js +23 -23
- package/esm2015/lib/interceptors/po-http-request/po-http-request-interceptor.service.js +169 -169
- package/esm2015/lib/interceptors/po-http-request/po-http-request.module.js +24 -24
- package/esm2015/lib/interfaces/index.js +2 -2
- package/esm2015/lib/interfaces/po-http/po-response-api.interface.js +2 -2
- package/esm2015/lib/pipes/index.js +3 -3
- package/esm2015/lib/pipes/pipes.module.js +14 -14
- package/esm2015/lib/pipes/po-time/index.js +3 -3
- package/esm2015/lib/pipes/po-time/po-time.module.js +19 -19
- package/esm2015/lib/pipes/po-time/po-time.pipe.js +55 -55
- package/esm2015/lib/po.module.js +34 -34
- package/esm2015/lib/services/index.js +11 -11
- package/esm2015/lib/services/po-active-overlay/index.js +3 -3
- package/esm2015/lib/services/po-active-overlay/po-active-overlay.module.js +16 -16
- package/esm2015/lib/services/po-active-overlay/po-active-overlay.service.js +14 -14
- package/esm2015/lib/services/po-color/po-color.service.js +60 -60
- package/esm2015/lib/services/po-color/po-colors.constant.js +43 -43
- package/esm2015/lib/services/po-color-palette/index.js +3 -3
- package/esm2015/lib/services/po-color-palette/po-color-palette.module.js +16 -16
- package/esm2015/lib/services/po-color-palette/po-color-palette.service.js +25 -25
- package/esm2015/lib/services/po-component-injector/index.js +3 -3
- package/esm2015/lib/services/po-component-injector/po-component-injector.module.js +14 -14
- package/esm2015/lib/services/po-component-injector/po-component-injector.service.js +34 -34
- package/esm2015/lib/services/po-control-position/index.js +3 -3
- package/esm2015/lib/services/po-control-position/po-control-position.constants.js +16 -16
- package/esm2015/lib/services/po-control-position/po-control-position.module.js +15 -15
- package/esm2015/lib/services/po-control-position/po-control-position.service.js +361 -361
- package/esm2015/lib/services/po-date/index.js +3 -3
- package/esm2015/lib/services/po-date/po-date.module.js +16 -16
- package/esm2015/lib/services/po-date/po-date.service.js +201 -201
- package/esm2015/lib/services/po-dialog/index.js +8 -8
- package/esm2015/lib/services/po-dialog/interfaces/po-dialog-alert-literals.interface.js +2 -2
- package/esm2015/lib/services/po-dialog/interfaces/po-dialog-confirm-literals.interface.js +2 -2
- package/esm2015/lib/services/po-dialog/interfaces/po-dialog.interface.js +2 -2
- package/esm2015/lib/services/po-dialog/po-dialog-base.service.js +18 -18
- package/esm2015/lib/services/po-dialog/po-dialog.component.js +115 -115
- package/esm2015/lib/services/po-dialog/po-dialog.enum.js +16 -16
- package/esm2015/lib/services/po-dialog/po-dialog.module.js +15 -15
- package/esm2015/lib/services/po-dialog/po-dialog.service.js +42 -42
- package/esm2015/lib/services/po-i18n/index.js +8 -8
- package/esm2015/lib/services/po-i18n/interfaces/po-i18n-config-default.interface.js +2 -2
- package/esm2015/lib/services/po-i18n/interfaces/po-i18n-config.interface.js +2 -2
- package/esm2015/lib/services/po-i18n/interfaces/po-i18n-literals.interface.js +2 -2
- package/esm2015/lib/services/po-i18n/po-i18n-base.pipe.js +40 -40
- package/esm2015/lib/services/po-i18n/po-i18n-base.service.js +439 -439
- package/esm2015/lib/services/po-i18n/po-i18n-config-injection-token.js +3 -3
- package/esm2015/lib/services/po-i18n/po-i18n.module.js +188 -188
- package/esm2015/lib/services/po-i18n/po-i18n.pipe.js +21 -21
- package/esm2015/lib/services/po-i18n/po-i18n.service.js +20 -20
- package/esm2015/lib/services/po-language/index.js +5 -5
- package/esm2015/lib/services/po-language/po-language.constant.js +75 -75
- package/esm2015/lib/services/po-language/po-language.interface.js +2 -2
- package/esm2015/lib/services/po-language/po-language.module.js +15 -15
- package/esm2015/lib/services/po-language/po-language.service.js +136 -136
- package/esm2015/lib/services/po-notification/index.js +6 -6
- package/esm2015/lib/services/po-notification/po-notification-base.service.js +111 -111
- package/esm2015/lib/services/po-notification/po-notification.interface.js +2 -2
- package/esm2015/lib/services/po-notification/po-notification.module.js +15 -15
- package/esm2015/lib/services/po-notification/po-notification.service.js +92 -92
- package/esm2015/lib/services/po-notification/po-toaster/po-toaster-base.component.js +15 -15
- package/esm2015/lib/services/po-notification/po-toaster/po-toaster-orientation.enum.js +13 -13
- package/esm2015/lib/services/po-notification/po-toaster/po-toaster-type.enum.js +17 -17
- package/esm2015/lib/services/po-notification/po-toaster/po-toaster.component.js +132 -132
- package/esm2015/lib/services/po-notification/po-toaster/po-toaster.interface.js +2 -2
- package/esm2015/lib/services/services.module.js +40 -40
- package/esm2015/lib/utils/util.js +508 -508
- package/esm2015/po-ui-ng-components.js +205 -205
- package/esm2015/public-api.js +2 -2
- package/fesm2015/po-ui-ng-components.js +35214 -35160
- package/fesm2015/po-ui-ng-components.js.map +1 -1
- package/lib/components/components.module.d.ts +2 -2
- package/lib/components/index.d.ts +37 -37
- package/lib/components/po-accordion/index.d.ts +3 -3
- package/lib/components/po-accordion/po-accordion-base.component.d.ts +28 -28
- package/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.d.ts +49 -49
- package/lib/components/po-accordion/po-accordion-item-body/po-accordion-item-body.component.d.ts +3 -3
- package/lib/components/po-accordion/po-accordion-item-header/po-accordion-item-header.component.d.ts +7 -7
- package/lib/components/po-accordion/po-accordion.component.d.ts +37 -37
- package/lib/components/po-accordion/po-accordion.module.d.ts +33 -33
- package/lib/components/po-accordion/services/po-accordion.service.d.ts +13 -13
- package/lib/components/po-avatar/index.d.ts +2 -2
- package/lib/components/po-avatar/po-avatar-base.component.d.ts +53 -53
- package/lib/components/po-avatar/po-avatar.component.d.ts +28 -28
- package/lib/components/po-avatar/po-avatar.module.d.ts +7 -7
- package/lib/components/po-badge/po-badge-base.component.d.ts +55 -55
- package/lib/components/po-badge/po-badge.component.d.ts +8 -8
- package/lib/components/po-badge/po-badge.module.d.ts +7 -7
- package/lib/components/po-breadcrumb/index.d.ts +4 -4
- package/lib/components/po-breadcrumb/po-breadcrumb-base.component.d.ts +104 -104
- package/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.d.ts +11 -11
- package/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.component.d.ts +29 -29
- package/lib/components/po-breadcrumb/po-breadcrumb-favorite/po-breadcrumb-favorite.service.d.ts +27 -27
- package/lib/components/po-breadcrumb/po-breadcrumb-item/po-breadcrumb-item.component.d.ts +13 -13
- package/lib/components/po-breadcrumb/po-breadcrumb-item.interface.d.ts +31 -31
- package/lib/components/po-breadcrumb/po-breadcrumb.component.d.ts +53 -53
- package/lib/components/po-breadcrumb/po-breadcrumb.interface.d.ts +42 -42
- package/lib/components/po-breadcrumb/po-breadcrumb.module.d.ts +8 -8
- package/lib/components/po-button/index.d.ts +2 -2
- package/lib/components/po-button/po-button-base.component.d.ts +120 -120
- package/lib/components/po-button/po-button.component.d.ts +49 -49
- package/lib/components/po-button/po-button.module.d.ts +7 -7
- package/lib/components/po-button-group/index.d.ts +4 -4
- package/lib/components/po-button-group/po-button-group-base.component.d.ts +53 -53
- package/lib/components/po-button-group/po-button-group-item.interface.d.ts +64 -64
- package/lib/components/po-button-group/po-button-group-toggle.enum.d.ts +15 -15
- package/lib/components/po-button-group/po-button-group.component.d.ts +31 -31
- package/lib/components/po-button-group/po-button-group.module.d.ts +7 -7
- package/lib/components/po-calendar/index.d.ts +3 -3
- package/lib/components/po-calendar/po-calendar-base.component.d.ts +129 -129
- package/lib/components/po-calendar/po-calendar-header/po-calendar-header.component.d.ts +8 -8
- package/lib/components/po-calendar/po-calendar-mode.enum.d.ts +11 -11
- package/lib/components/po-calendar/po-calendar-wrapper/po-calendar-wrapper.component.d.ts +77 -77
- package/lib/components/po-calendar/po-calendar.component.d.ts +53 -53
- package/lib/components/po-calendar/po-calendar.module.d.ts +6 -6
- package/lib/components/po-calendar/services/po-calendar.lang.service.d.ts +16 -16
- package/lib/components/po-calendar/services/po-calendar.service.d.ts +5 -5
- package/lib/components/po-chart/directives/po-resize-observer.directive.d.ts +12 -12
- package/lib/components/po-chart/enums/po-chart-type.enum.d.ts +49 -49
- package/lib/components/po-chart/helpers/po-chart-default-values.constant.d.ts +8 -8
- package/lib/components/po-chart/index.d.ts +7 -7
- package/lib/components/po-chart/interfaces/po-chart-axis-options.interface.d.ts +37 -37
- package/lib/components/po-chart/interfaces/po-chart-bar-coordinates.interface.d.ts +23 -23
- package/lib/components/po-chart/interfaces/po-chart-container-size.interface.d.ts +23 -23
- package/lib/components/po-chart/interfaces/po-chart-label-coordinates.interface.d.ts +19 -19
- package/lib/components/po-chart/interfaces/po-chart-min-max-values.interface.d.ts +19 -19
- package/lib/components/po-chart/interfaces/po-chart-options.interface.d.ts +20 -20
- package/lib/components/po-chart/interfaces/po-chart-path-coordinates.interface.d.ts +23 -23
- package/lib/components/po-chart/interfaces/po-chart-points-coordinates.interface.d.ts +26 -26
- package/lib/components/po-chart/interfaces/po-chart-serie.interface.d.ts +101 -101
- package/lib/components/po-chart/po-chart-base.component.d.ts +152 -152
- package/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-label/po-chart-axis-label.component.d.ts +10 -10
- package/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis-path/po-chart-axis-path.component.d.ts +7 -7
- package/lib/components/po-chart/po-chart-container/po-chart-axis/po-chart-axis.component.d.ts +60 -60
- package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-base.component.d.ts +31 -31
- package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar-path/po-chart-bar-path.component.d.ts +13 -13
- package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-bar.component.d.ts +13 -13
- package/lib/components/po-chart/po-chart-container/po-chart-bar/po-chart-column/po-chart-column.component.d.ts +13 -13
- package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-label/po-chart-circular-label.component.d.ts +11 -11
- package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-circular-path.component.d.ts +13 -13
- package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular-path/po-chart-tooltip.directive.d.ts +20 -20
- package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-circular.component.d.ts +42 -42
- package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-donut/po-chart-donut.component.d.ts +16 -16
- package/lib/components/po-chart/po-chart-container/po-chart-circular/po-chart-pie/po-chart-pie.component.d.ts +8 -8
- package/lib/components/po-chart/po-chart-container/po-chart-container.component.d.ts +43 -43
- package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-area/po-chart-area.component.d.ts +20 -20
- package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line-base.component.d.ts +46 -46
- package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-line.component.d.ts +13 -13
- package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-path/po-chart-path.component.d.ts +19 -19
- package/lib/components/po-chart/po-chart-container/po-chart-line/po-chart-series-point/po-chart-series-point.component.d.ts +30 -30
- package/lib/components/po-chart/po-chart-legend/po-chart-legend.component.d.ts +7 -7
- package/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.constant.d.ts +7 -7
- package/lib/components/po-chart/po-chart-types/po-chart-circular/po-chart-circular.d.ts +55 -55
- package/lib/components/po-chart/po-chart-types/po-chart-dynamic-type.component.d.ts +36 -36
- package/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-series.interface.d.ts +39 -39
- package/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge-text-content/po-chart-gauge-text-content.component.d.ts +24 -24
- package/lib/components/po-chart/po-chart-types/po-chart-gauge/po-chart-gauge.component.d.ts +20 -20
- package/lib/components/po-chart/po-chart.component.d.ts +67 -67
- package/lib/components/po-chart/po-chart.module.d.ts +7 -7
- package/lib/components/po-chart/services/po-chart-maths.service.d.ts +63 -63
- package/lib/components/po-chart/services/po-chart-svg-container.service.d.ts +21 -21
- package/lib/components/po-container/index.d.ts +2 -2
- package/lib/components/po-container/po-container-base.component.d.ts +59 -59
- package/lib/components/po-container/po-container.component.d.ts +24 -24
- package/lib/components/po-container/po-container.module.d.ts +7 -7
- package/lib/components/po-disclaimer/index.d.ts +3 -3
- package/lib/components/po-disclaimer/po-disclaimer-base.component.d.ts +56 -56
- package/lib/components/po-disclaimer/po-disclaimer.component.d.ts +16 -16
- package/lib/components/po-disclaimer/po-disclaimer.interface.d.ts +17 -17
- package/lib/components/po-disclaimer/po-disclaimer.module.d.ts +6 -6
- package/lib/components/po-disclaimer-group/index.d.ts +4 -4
- package/lib/components/po-disclaimer-group/po-disclaimer-group-base.component.d.ts +114 -114
- package/lib/components/po-disclaimer-group/po-disclaimer-group-remove-action.interface.d.ts +18 -18
- package/lib/components/po-disclaimer-group/po-disclaimer-group.component.d.ts +28 -28
- package/lib/components/po-disclaimer-group/po-disclaimer-group.interface.d.ts +78 -78
- package/lib/components/po-disclaimer-group/po-disclaimer-group.module.d.ts +7 -7
- package/lib/components/po-disclaimer-group/po-disclaimer-remove/po-disclaimer-remove.component.d.ts +16 -16
- package/lib/components/po-divider/index.d.ts +2 -2
- package/lib/components/po-divider/po-divider-base.component.d.ts +10 -10
- package/lib/components/po-divider/po-divider.component.d.ts +23 -23
- package/lib/components/po-divider/po-divider.module.d.ts +7 -7
- package/lib/components/po-dropdown/index.d.ts +3 -3
- package/lib/components/po-dropdown/po-dropdown-action.interface.d.ts +11 -11
- package/lib/components/po-dropdown/po-dropdown-base.component.d.ts +54 -54
- package/lib/components/po-dropdown/po-dropdown.component.d.ts +41 -41
- package/lib/components/po-dropdown/po-dropdown.module.d.ts +6 -6
- package/lib/components/po-dynamic/index.d.ts +10 -10
- package/lib/components/po-dynamic/po-dynamic-field-type.enum.d.ts +23 -23
- package/lib/components/po-dynamic/po-dynamic-field.interface.d.ts +130 -130
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.d.ts +215 -215
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +249 -251
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-field-internal.interface.d.ts +14 -14
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.d.ts +44 -44
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.d.ts +36 -36
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.interface.d.ts +20 -20
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-load/po-dynamic-form-load.service.d.ts +8 -8
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-operation/po-dynamic-form-operation.d.ts +10 -10
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-response.interface.d.ts +29 -29
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-changed.interface.d.ts +13 -13
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-field-validation.interface.d.ts +21 -21
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.interface.d.ts +20 -20
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-validation/po-dynamic-form-validation.service.d.ts +12 -12
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form.component.d.ts +83 -83
- package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-base.component.d.ts +134 -134
- package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-field.interface.d.ts +104 -104
- package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.component.d.ts +36 -36
- package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.service.d.ts +10 -10
- package/lib/components/po-dynamic/po-dynamic.module.d.ts +2 -2
- package/lib/components/po-dynamic/po-dynamic.util.d.ts +4 -4
- package/lib/components/po-field/index.d.ts +50 -50
- package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +62 -62
- package/lib/components/po-field/po-checkbox/po-checkbox.component.d.ts +51 -51
- package/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option-view.interface.d.ts +14 -14
- package/lib/components/po-field/po-checkbox-group/interfaces/po-checkbox-group-option.interface.d.ts +24 -24
- package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +184 -176
- package/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.d.ts +50 -50
- package/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.d.ts +7 -7
- package/lib/components/po-field/po-clean/po-clean-base.component.d.ts +30 -30
- package/lib/components/po-field/po-clean/po-clean.component.d.ts +17 -17
- package/lib/components/po-field/po-clean/po-clean.module.d.ts +7 -7
- package/lib/components/po-field/po-combo/interfaces/po-combo-filter.interface.d.ts +27 -27
- package/lib/components/po-field/po-combo/interfaces/po-combo-group.interface.d.ts +11 -11
- package/lib/components/po-field/po-combo/interfaces/po-combo-literals.interface.d.ts +11 -11
- package/lib/components/po-field/po-combo/interfaces/po-combo-option-group.interface.d.ts +14 -14
- package/lib/components/po-field/po-combo/interfaces/po-combo-option.interface.d.ts +21 -21
- package/lib/components/po-field/po-combo/interfaces/po-response.interface.d.ts +11 -11
- package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +409 -401
- package/lib/components/po-field/po-combo/po-combo-filter-mode.enum.d.ts +15 -15
- package/lib/components/po-field/po-combo/po-combo-filter.service.d.ts +28 -28
- package/lib/components/po-field/po-combo/po-combo-option-template/po-combo-option-template.directive.d.ts +70 -70
- package/lib/components/po-field/po-combo/po-combo.component.d.ts +139 -139
- package/lib/components/po-field/po-datepicker/enums/po-datepicker-iso-format.enum.d.ts +15 -15
- package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +223 -223
- package/lib/components/po-field/po-datepicker/po-datepicker.component.d.ts +101 -101
- package/lib/components/po-field/po-datepicker/po-datepicker.module.d.ts +7 -7
- package/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range-literals.interface.d.ts +17 -17
- package/lib/components/po-field/po-datepicker-range/interfaces/po-datepicker-range.interface.d.ts +16 -16
- package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +269 -269
- package/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.d.ts +125 -124
- package/lib/components/po-field/po-datepicker-range/po-datepicker-range.literals.d.ts +7 -7
- package/lib/components/po-field/po-decimal/po-decimal.component.d.ts +180 -180
- package/lib/components/po-field/po-email/po-email.component.d.ts +42 -42
- package/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.d.ts +15 -15
- package/lib/components/po-field/po-field-container/po-field-container-literals.d.ts +14 -14
- package/lib/components/po-field/po-field-container/po-field-container.component.d.ts +18 -18
- package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +7 -7
- package/lib/components/po-field/po-field-validate.model.d.ts +38 -38
- package/lib/components/po-field/po-field.model.d.ts +51 -51
- package/lib/components/po-field/po-field.module.d.ts +12 -12
- package/lib/components/po-field/po-input/po-input-base.component.d.ts +265 -265
- package/lib/components/po-field/po-input/po-input.component.d.ts +29 -29
- package/lib/components/po-field/po-input/po-mask.d.ts +49 -49
- package/lib/components/po-field/po-input-generic/po-input-generic.d.ts +35 -35
- package/lib/components/po-field/po-login/po-login.component.d.ts +34 -34
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-advanced-filter.interface.d.ts +8 -8
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-column.interface.d.ts +44 -44
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-filter.interface.d.ts +29 -29
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-filtered-items-params.interface.d.ts +40 -40
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-literals.interface.d.ts +40 -40
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-response-api.interface.d.ts +8 -8
- package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +387 -387
- package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.d.ts +119 -119
- package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.d.ts +41 -41
- package/lib/components/po-field/po-lookup/po-lookup.component.d.ts +113 -113
- package/lib/components/po-field/po-lookup/services/po-lookup-filter.service.d.ts +25 -25
- package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +44 -44
- package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +345 -345
- package/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.d.ts +57 -57
- package/lib/components/po-field/po-multiselect/po-multiselect-filter-mode.enum.d.ts +15 -15
- package/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.d.ts +28 -28
- package/lib/components/po-field/po-multiselect/po-multiselect-filter.service.d.ts +18 -18
- package/lib/components/po-field/po-multiselect/po-multiselect-item/po-multiselect-item.component.d.ts +17 -17
- package/lib/components/po-field/po-multiselect/po-multiselect-literals.interface.d.ts +15 -15
- package/lib/components/po-field/po-multiselect/po-multiselect-option.interface.d.ts +13 -13
- package/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.d.ts +34 -34
- package/lib/components/po-field/po-multiselect/po-multiselect.component.d.ts +107 -107
- package/lib/components/po-field/po-number/po-number-base.component.d.ts +18 -18
- package/lib/components/po-field/po-number/po-number.component.d.ts +59 -59
- package/lib/components/po-field/po-password/po-password.component.d.ts +48 -48
- package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +119 -119
- package/lib/components/po-field/po-radio-group/po-radio-group-option.interface.d.ts +15 -15
- package/lib/components/po-field/po-radio-group/po-radio-group.component.d.ts +64 -64
- package/lib/components/po-field/po-rich-text/interfaces/po-rich-text-toolbar-button-group-item.interface.d.ts +4 -4
- package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +144 -144
- package/lib/components/po-field/po-rich-text/po-rich-text-body/po-rich-text-body.component.d.ts +52 -52
- package/lib/components/po-field/po-rich-text/po-rich-text-image-modal/po-rich-text-image-modal.component.d.ts +34 -34
- package/lib/components/po-field/po-rich-text/po-rich-text-link-modal/po-rich-text-link-modal.component.d.ts +45 -45
- package/lib/components/po-field/po-rich-text/po-rich-text-literals.d.ts +82 -82
- package/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.d.ts +45 -45
- package/lib/components/po-field/po-rich-text/po-rich-text.component.d.ts +60 -60
- package/lib/components/po-field/po-rich-text/po-rich-text.service.d.ts +5 -5
- package/lib/components/po-field/po-select/po-select-option-template/po-select-option-template.directive.d.ts +48 -48
- package/lib/components/po-field/po-select/po-select-option.interface.d.ts +13 -13
- package/lib/components/po-field/po-select/po-select.component.d.ts +158 -151
- package/lib/components/po-field/po-switch/po-switch-label-position.enum.d.ts +13 -13
- package/lib/components/po-field/po-switch/po-switch.component.d.ts +102 -102
- package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +178 -178
- package/lib/components/po-field/po-textarea/po-textarea.component.d.ts +59 -59
- package/lib/components/po-field/po-upload/interfaces/po-upload-file-restriction.interface.d.ts +37 -37
- package/lib/components/po-field/po-upload/interfaces/po-upload-literals.interface.d.ts +45 -45
- package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +333 -325
- package/lib/components/po-field/po-upload/po-upload-base.service.d.ts +32 -32
- package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area/po-upload-drag-drop-area.component.d.ts +14 -14
- package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop-area-overlay/po-upload-drag-drop-area-overlay.component.d.ts +14 -14
- package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.component.d.ts +24 -24
- package/lib/components/po-field/po-upload/po-upload-drag-drop/po-upload-drag-drop.directive.d.ts +32 -32
- package/lib/components/po-field/po-upload/po-upload-file-restrictions/po-upload-file-restrictions.component.d.ts +21 -21
- package/lib/components/po-field/po-upload/po-upload-file.d.ts +15 -15
- package/lib/components/po-field/po-upload/po-upload-status.enum.d.ts +6 -6
- package/lib/components/po-field/po-upload/po-upload.component.d.ts +106 -106
- package/lib/components/po-field/po-upload/po-upload.service.d.ts +3 -3
- package/lib/components/po-field/po-url/po-url.component.d.ts +41 -41
- package/lib/components/po-field/validators.d.ts +7 -7
- package/lib/components/po-gauge/index.d.ts +3 -3
- package/lib/components/po-gauge/interfaces/po-gauge-coordinates.interface.d.ts +19 -19
- package/lib/components/po-gauge/interfaces/po-gauge-ranges.interface.d.ts +44 -44
- package/lib/components/po-gauge/interfaces/po-gauge-svg-container.interface.d.ts +15 -15
- package/lib/components/po-gauge/po-gauge-base.component.d.ts +98 -98
- package/lib/components/po-gauge/po-gauge-default-values.constant.d.ts +5 -5
- package/lib/components/po-gauge/po-gauge-description/po-gauge-description.component.d.ts +11 -11
- package/lib/components/po-gauge/po-gauge-legend/po-gauge-legend.component.d.ts +9 -9
- package/lib/components/po-gauge/po-gauge-svg/po-gauge-path/po-gauge-path.component.d.ts +9 -9
- package/lib/components/po-gauge/po-gauge-svg/po-gauge-pointer/po-gauge-pointer.component.d.ts +15 -15
- package/lib/components/po-gauge/po-gauge-svg/po-gauge-svg.component.d.ts +32 -32
- package/lib/components/po-gauge/po-gauge-title/po-gauge-title.component.d.ts +3 -3
- package/lib/components/po-gauge/po-gauge.component.d.ts +37 -37
- package/lib/components/po-gauge/po-gauge.module.d.ts +6 -6
- package/lib/components/po-grid/index.d.ts +3 -3
- package/lib/components/po-grid/po-grid-cell/po-grid-cell.component.d.ts +27 -27
- package/lib/components/po-grid/po-grid-cell-action/po-grid-cell-action.component.d.ts +6 -6
- package/lib/components/po-grid/po-grid-head/po-grid-head.component.d.ts +10 -10
- package/lib/components/po-grid/po-grid-row-actions.interface.d.ts +86 -86
- package/lib/components/po-grid/po-grid.component.d.ts +80 -80
- package/lib/components/po-grid/po-grid.module.d.ts +7 -7
- package/lib/components/po-icon/index.d.ts +2 -2
- package/lib/components/po-icon/po-icon.component.d.ts +39 -39
- package/lib/components/po-icon/po-icon.module.d.ts +7 -7
- package/lib/components/po-info/index.d.ts +3 -3
- package/lib/components/po-info/po-info-base.component.d.ts +46 -46
- package/lib/components/po-info/po-info-orietation.enum.d.ts +13 -13
- package/lib/components/po-info/po-info.component.d.ts +24 -24
- package/lib/components/po-info/po-info.module.d.ts +7 -7
- package/lib/components/po-list-view/index.d.ts +6 -6
- package/lib/components/po-list-view/interfaces/po-list-view-action.interface.d.ts +15 -15
- package/lib/components/po-list-view/interfaces/po-list-view-literals.interface.d.ts +19 -19
- package/lib/components/po-list-view/po-list-view-base.component.d.ts +165 -165
- package/lib/components/po-list-view/po-list-view-content-template/po-list-view-content-template.directive.d.ts +97 -97
- package/lib/components/po-list-view/po-list-view-detail-template/po-list-view-detail-template.directive.d.ts +60 -60
- package/lib/components/po-list-view/po-list-view.component.d.ts +53 -53
- package/lib/components/po-list-view/po-list-view.module.d.ts +33 -33
- package/lib/components/po-loading/index.d.ts +4 -4
- package/lib/components/po-loading/po-loading-base.component.d.ts +14 -14
- package/lib/components/po-loading/po-loading-icon/po-loading-icon.component.d.ts +22 -22
- package/lib/components/po-loading/po-loading-overlay/interfaces/po-loading-overlay-literals.interface.d.ts +13 -13
- package/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.d.ts +59 -59
- package/lib/components/po-loading/po-loading-overlay/po-loading-overlay.component.d.ts +28 -28
- package/lib/components/po-loading/po-loading.component.d.ts +8 -8
- package/lib/components/po-loading/po-loading.module.d.ts +8 -8
- package/lib/components/po-menu/index.d.ts +8 -8
- package/lib/components/po-menu/po-menu-base.component.d.ts +182 -182
- package/lib/components/po-menu/po-menu-filter/po-menu-filter-literals.interface.d.ts +14 -14
- package/lib/components/po-menu/po-menu-filter/po-menu-filter.component.d.ts +25 -25
- package/lib/components/po-menu/po-menu-filter/po-menu-filter.interface.d.ts +19 -19
- package/lib/components/po-menu/po-menu-header-template/po-menu-header-template.directive.d.ts +40 -40
- package/lib/components/po-menu/po-menu-item/po-menu-item-badge.interface.d.ts +49 -49
- package/lib/components/po-menu/po-menu-item/po-menu-item-filtered.interface.d.ts +13 -13
- package/lib/components/po-menu/po-menu-item/po-menu-item.component.d.ts +54 -54
- package/lib/components/po-menu/po-menu-item.interface.d.ts +78 -78
- package/lib/components/po-menu/po-menu.component.d.ts +178 -178
- package/lib/components/po-menu/po-menu.module.d.ts +7 -7
- package/lib/components/po-menu/services/po-menu-global.service.d.ts +14 -14
- package/lib/components/po-menu/services/po-menu-items.service.d.ts +16 -16
- package/lib/components/po-menu/services/po-menu.service.d.ts +20 -20
- package/lib/components/po-menu-panel/index.d.ts +3 -3
- package/lib/components/po-menu-panel/po-menu-panel-base.component.d.ts +33 -33
- package/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item-internal.interface.d.ts +16 -16
- package/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.component.d.ts +23 -23
- package/lib/components/po-menu-panel/po-menu-panel-item/po-menu-panel-item.interface.d.ts +18 -18
- package/lib/components/po-menu-panel/po-menu-panel.component.d.ts +91 -91
- package/lib/components/po-menu-panel/po-menu-panel.module.d.ts +7 -7
- package/lib/components/po-menu-panel/services/po-menu-panel-items.service.d.ts +16 -16
- package/lib/components/po-modal/index.d.ts +4 -4
- package/lib/components/po-modal/po-modal-action.interface.d.ts +23 -23
- package/lib/components/po-modal/po-modal-base.component.d.ts +79 -79
- package/lib/components/po-modal/po-modal-footer/po-modal-footer.component.d.ts +30 -30
- package/lib/components/po-modal/po-modal.component.d.ts +46 -46
- package/lib/components/po-modal/po-modal.literals.d.ts +14 -14
- package/lib/components/po-modal/po-modal.module.d.ts +6 -6
- package/lib/components/po-navbar/index.d.ts +4 -4
- package/lib/components/po-navbar/interfaces/po-navbar-icon-action.interface.d.ts +55 -55
- package/lib/components/po-navbar/interfaces/po-navbar-item.interface.d.ts +21 -21
- package/lib/components/po-navbar/interfaces/po-navbar-literals.interface.d.ts +11 -11
- package/lib/components/po-navbar/po-navbar-actions/po-navbar-action/po-navbar-action.component.d.ts +13 -13
- package/lib/components/po-navbar/po-navbar-actions/po-navbar-action-popup/po-navbar-action-popup.component.d.ts +5 -5
- package/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.component.d.ts +6 -6
- package/lib/components/po-navbar/po-navbar-actions/po-navbar-actions.module.d.ts +2 -2
- package/lib/components/po-navbar/po-navbar-base.component.d.ts +129 -129
- package/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation-icon/po-navbar-item-navigation-icon.component.d.ts +6 -6
- package/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.component.d.ts +6 -6
- package/lib/components/po-navbar/po-navbar-item-navigation/po-navbar-item-navigation.module.d.ts +2 -2
- package/lib/components/po-navbar/po-navbar-items/po-navbar-item/po-navbar-item.component.d.ts +11 -11
- package/lib/components/po-navbar/po-navbar-items/po-navbar-items.component.d.ts +17 -17
- package/lib/components/po-navbar/po-navbar-items/po-navbar-items.module.d.ts +2 -2
- package/lib/components/po-navbar/po-navbar-logo/po-navbar-logo.component.d.ts +3 -3
- package/lib/components/po-navbar/po-navbar.component.d.ts +57 -57
- package/lib/components/po-navbar/po-navbar.module.d.ts +33 -33
- package/lib/components/po-page/index.d.ts +14 -14
- package/lib/components/po-page/po-page-action.interface.d.ts +16 -16
- package/lib/components/po-page/po-page-base.component.d.ts +22 -22
- package/lib/components/po-page/po-page-content/po-page-content-base.component.d.ts +10 -10
- package/lib/components/po-page/po-page-content/po-page-content.component.d.ts +20 -20
- package/lib/components/po-page/po-page-default/po-page-default-base.component.d.ts +75 -75
- package/lib/components/po-page/po-page-default/po-page-default-literals.interface.d.ts +11 -11
- package/lib/components/po-page/po-page-default/po-page-default.component.d.ts +45 -45
- package/lib/components/po-page/po-page-default/po-page-default.interface.d.ts +13 -13
- package/lib/components/po-page/po-page-detail/po-page-detail-base.component.d.ts +100 -100
- package/lib/components/po-page/po-page-detail/po-page-detail-literals.interface.d.ts +15 -15
- package/lib/components/po-page/po-page-detail/po-page-detail.component.d.ts +28 -28
- package/lib/components/po-page/po-page-edit/po-page-edit-base.component.d.ts +106 -106
- package/lib/components/po-page/po-page-edit/po-page-edit-literals.interface.d.ts +15 -15
- package/lib/components/po-page/po-page-edit/po-page-edit.component.d.ts +29 -29
- package/lib/components/po-page/po-page-filter.interface.d.ts +26 -26
- package/lib/components/po-page/po-page-header/po-page-header-base.component.d.ts +17 -17
- package/lib/components/po-page/po-page-header/po-page-header.component.d.ts +7 -7
- package/lib/components/po-page/po-page-list/po-page-list-base.component.d.ts +108 -108
- package/lib/components/po-page/po-page-list/po-page-list-literals.interface.d.ts +11 -11
- package/lib/components/po-page/po-page-list/po-page-list.component.d.ts +71 -71
- package/lib/components/po-page/po-page-slide/po-page-slide-base.component.d.ts +111 -111
- package/lib/components/po-page/po-page-slide/po-page-slide.component.d.ts +42 -42
- package/lib/components/po-page/po-page.component.d.ts +8 -8
- package/lib/components/po-page/po-page.interface.d.ts +14 -14
- package/lib/components/po-page/po-page.module.d.ts +7 -7
- package/lib/components/po-popover/index.d.ts +2 -2
- package/lib/components/po-popover/po-popover-base.component.d.ts +131 -131
- package/lib/components/po-popover/po-popover.component.d.ts +47 -47
- package/lib/components/po-popover/po-popover.module.d.ts +6 -6
- package/lib/components/po-popup/index.d.ts +3 -3
- package/lib/components/po-popup/po-popup-action.interface.d.ts +91 -91
- package/lib/components/po-popup/po-popup-base.component.d.ts +151 -151
- package/lib/components/po-popup/po-popup.component.d.ts +69 -69
- package/lib/components/po-popup/po-popup.module.d.ts +7 -7
- package/lib/components/po-progress/enums/po-progress-status.enum.d.ts +15 -15
- package/lib/components/po-progress/index.d.ts +3 -3
- package/lib/components/po-progress/po-progress-bar/po-progress-bar.component.d.ts +5 -5
- package/lib/components/po-progress/po-progress-base.component.d.ts +103 -103
- package/lib/components/po-progress/po-progress.component.d.ts +28 -28
- package/lib/components/po-progress/po-progress.module.d.ts +7 -7
- package/lib/components/po-slide/directives/po-slide-content-template.directive.d.ts +48 -48
- package/lib/components/po-slide/index.d.ts +4 -4
- package/lib/components/po-slide/interfaces/po-slide-item.interface.d.ts +17 -17
- package/lib/components/po-slide/po-slide-base.component.d.ts +75 -75
- package/lib/components/po-slide/po-slide-circles/po-slide-circles.component.d.ts +16 -16
- package/lib/components/po-slide/po-slide-control/po-slide-control.component.d.ts +14 -14
- package/lib/components/po-slide/po-slide-item/po-slide-item.component.d.ts +28 -28
- package/lib/components/po-slide/po-slide.component.d.ts +110 -110
- package/lib/components/po-slide/po-slide.module.d.ts +33 -33
- package/lib/components/po-stepper/enums/po-stepper-orientation.enum.d.ts +16 -16
- package/lib/components/po-stepper/enums/po-stepper-status.enum.d.ts +21 -21
- package/lib/components/po-stepper/index.d.ts +6 -6
- package/lib/components/po-stepper/po-step/po-step.component.d.ts +76 -76
- package/lib/components/po-stepper/po-stepper-base.component.d.ts +132 -132
- package/lib/components/po-stepper/po-stepper-circle/po-stepper-circle.component.d.ts +20 -20
- package/lib/components/po-stepper/po-stepper-item.interface.d.ts +14 -14
- package/lib/components/po-stepper/po-stepper-label/po-stepper-label.component.d.ts +10 -10
- package/lib/components/po-stepper/po-stepper-step/po-stepper-step.component.d.ts +37 -37
- package/lib/components/po-stepper/po-stepper.component.d.ts +80 -80
- package/lib/components/po-stepper/po-stepper.module.d.ts +6 -6
- package/lib/components/po-table/enums/po-table-column-sort-type.enum.d.ts +12 -12
- package/lib/components/po-table/enums/po-table-row-template-arrow-direction.enum.d.ts +12 -12
- package/lib/components/po-table/index.d.ts +17 -17
- package/lib/components/po-table/interfaces/po-table-action.interface.d.ts +8 -8
- package/lib/components/po-table/interfaces/po-table-boolean.interface.d.ts +13 -13
- package/lib/components/po-table/interfaces/po-table-column-sort.interface.d.ts +15 -15
- package/lib/components/po-table/interfaces/po-table-column.interface.d.ts +242 -242
- package/lib/components/po-table/interfaces/po-table-filter.interface.d.ts +16 -16
- package/lib/components/po-table/interfaces/po-table-filtered-items-params.interface.d.ts +33 -33
- package/lib/components/po-table/interfaces/po-table-literals.interface.d.ts +25 -25
- package/lib/components/po-table/interfaces/po-table-response-api.interface.d.ts +7 -7
- package/lib/components/po-table/po-table-base.component.d.ts +501 -501
- package/lib/components/po-table/po-table-cell-template/po-table-cell-template.directive.d.ts +71 -71
- package/lib/components/po-table/po-table-column-icon/po-table-column-icon.component.d.ts +26 -26
- package/lib/components/po-table/po-table-column-icon/po-table-column-icon.interface.d.ts +80 -80
- package/lib/components/po-table/po-table-column-label/po-table-column-label.component.d.ts +17 -17
- package/lib/components/po-table/po-table-column-label/po-table-column-label.interface.d.ts +42 -42
- package/lib/components/po-table/po-table-column-link/po-table-column-link.component.d.ts +15 -15
- package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +74 -74
- package/lib/components/po-table/po-table-column-template/po-table-column-template.directive.d.ts +86 -86
- package/lib/components/po-table/po-table-detail/po-table-detail-column.interface.d.ts +61 -61
- package/lib/components/po-table/po-table-detail/po-table-detail.component.d.ts +44 -44
- package/lib/components/po-table/po-table-detail/po-table-detail.interface.d.ts +36 -36
- package/lib/components/po-table/po-table-icon/po-table-icon.component.d.ts +27 -27
- package/lib/components/po-table/po-table-row-template/po-table-row-template.directive.d.ts +120 -120
- package/lib/components/po-table/po-table-show-subtitle/po-table-show-subtitle.component.d.ts +14 -14
- package/lib/components/po-table/po-table-subtitle-circle/po-table-subtitle-circle.component.d.ts +19 -19
- package/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-column.interface.d.ts +39 -39
- package/lib/components/po-table/po-table-subtitle-footer/po-table-subtitle-footer.component.d.ts +31 -31
- package/lib/components/po-table/po-table.component.d.ts +229 -229
- package/lib/components/po-table/po-table.module.d.ts +6 -6
- package/lib/components/po-table/services/po-table.service.d.ts +14 -14
- package/lib/components/po-tabs/index.d.ts +4 -4
- package/lib/components/po-tabs/po-tab/po-tab-base.component.d.ts +57 -57
- package/lib/components/po-tabs/po-tab/po-tab.component.d.ts +11 -11
- package/lib/components/po-tabs/po-tab/po-tab.interface.d.ts +45 -45
- package/lib/components/po-tabs/po-tab-button/po-tab-button.component.d.ts +29 -29
- package/lib/components/po-tabs/po-tab-dropdown/po-tab-dropdown.component.d.ts +23 -23
- package/lib/components/po-tabs/po-tabs-base.component.d.ts +34 -34
- package/lib/components/po-tabs/po-tabs.component.d.ts +50 -50
- package/lib/components/po-tabs/po-tabs.module.d.ts +6 -6
- package/lib/components/po-tag/enums/po-tag-icon.enum.d.ts +17 -17
- package/lib/components/po-tag/enums/po-tag-orientation.enum.d.ts +13 -13
- package/lib/components/po-tag/enums/po-tag-type.enum.d.ts +17 -17
- package/lib/components/po-tag/index.d.ts +4 -4
- package/lib/components/po-tag/interfaces/po-tag-item.interface.d.ts +13 -13
- package/lib/components/po-tag/po-tag-base.component.d.ts +144 -144
- package/lib/components/po-tag/po-tag.component.d.ts +32 -32
- package/lib/components/po-tag/po-tag.module.d.ts +7 -7
- package/lib/components/po-toolbar/index.d.ts +4 -4
- package/lib/components/po-toolbar/po-toolbar-action.interface.d.ts +8 -8
- package/lib/components/po-toolbar/po-toolbar-actions/po-toolbar-actions.component.d.ts +19 -19
- package/lib/components/po-toolbar/po-toolbar-base.component.d.ts +75 -75
- package/lib/components/po-toolbar/po-toolbar-notification/po-toolbar-notification.component.d.ts +22 -22
- package/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.component.d.ts +18 -18
- package/lib/components/po-toolbar/po-toolbar-profile/po-toolbar-profile.interface.d.ts +15 -15
- package/lib/components/po-toolbar/po-toolbar.component.d.ts +29 -29
- package/lib/components/po-toolbar/po-toolbar.module.d.ts +8 -8
- package/lib/components/po-tree-view/index.d.ts +3 -3
- package/lib/components/po-tree-view/po-tree-view-base.component.d.ts +86 -86
- package/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.component.d.ts +12 -12
- package/lib/components/po-tree-view/po-tree-view-item/po-tree-view-item.interface.d.ts +24 -24
- package/lib/components/po-tree-view/po-tree-view-item-header/po-tree-view-item-header.component.d.ts +10 -10
- package/lib/components/po-tree-view/po-tree-view.component.d.ts +35 -35
- package/lib/components/po-tree-view/po-tree-view.module.d.ts +33 -33
- package/lib/components/po-tree-view/services/po-tree-view.service.d.ts +9 -9
- package/lib/components/po-widget/index.d.ts +2 -2
- package/lib/components/po-widget/po-widget-base.component.d.ts +162 -162
- package/lib/components/po-widget/po-widget.component.d.ts +41 -41
- package/lib/components/po-widget/po-widget.module.d.ts +7 -7
- package/lib/decorators/index.d.ts +2 -2
- package/lib/decorators/input-boolean/input-boolean.decorator.d.ts +10 -10
- package/lib/decorators/input-required/input-required.decorator.d.ts +22 -22
- package/lib/decorators/property-decorator.interface.d.ts +13 -13
- package/lib/decorators/utils-decorators.d.ts +27 -27
- package/lib/directives/directives.module.d.ts +2 -2
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/po-tooltip/index.d.ts +2 -2
- package/lib/directives/po-tooltip/po-tooltip-base.directive.d.ts +67 -67
- package/lib/directives/po-tooltip/po-tooltip-control-position.service.d.ts +3 -3
- package/lib/directives/po-tooltip/po-tooltip.directive.d.ts +52 -52
- package/lib/directives/po-tooltip/po-tooltip.module.d.ts +7 -7
- package/lib/enums/po-color-palette.enum.d.ts +33 -33
- package/lib/enums/po-key-code.enum.d.ts +29 -29
- package/lib/guards/guards.module.d.ts +2 -2
- package/lib/guards/index.d.ts +1 -1
- package/lib/index.d.ts +9 -9
- package/lib/interceptors/index.d.ts +3 -3
- package/lib/interceptors/interceptors.module.d.ts +2 -2
- package/lib/interceptors/po-http-interceptor/index.d.ts +2 -2
- package/lib/interceptors/po-http-interceptor/po-http-interceptor-base.service.d.ts +154 -154
- package/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail-literals.interface.d.ts +6 -6
- package/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.component.d.ts +39 -39
- package/lib/interceptors/po-http-interceptor/po-http-interceptor-detail/po-http-interceptor-detail.interface.d.ts +23 -23
- package/lib/interceptors/po-http-interceptor/po-http-interceptor-literals.d.ts +6 -6
- package/lib/interceptors/po-http-interceptor/po-http-interceptor.module.d.ts +2 -2
- package/lib/interceptors/po-http-interceptor/po-http-interceptor.service.d.ts +16 -16
- package/lib/interceptors/po-http-request/index.d.ts +2 -2
- package/lib/interceptors/po-http-request/po-http-request-control-service.d.ts +12 -12
- package/lib/interceptors/po-http-request/po-http-request-interceptor.service.d.ts +102 -102
- package/lib/interceptors/po-http-request/po-http-request.module.d.ts +2 -2
- package/lib/interfaces/index.d.ts +1 -1
- package/lib/interfaces/po-http/po-response-api.interface.d.ts +13 -13
- package/lib/pipes/index.d.ts +2 -2
- package/lib/pipes/pipes.module.d.ts +2 -2
- package/lib/pipes/po-time/index.d.ts +2 -2
- package/lib/pipes/po-time/po-time.module.d.ts +7 -7
- package/lib/pipes/po-time/po-time.pipe.d.ts +14 -14
- package/lib/po.module.d.ts +2 -2
- package/lib/services/index.d.ts +10 -10
- package/lib/services/po-active-overlay/index.d.ts +2 -2
- package/lib/services/po-active-overlay/po-active-overlay.module.d.ts +7 -7
- package/lib/services/po-active-overlay/po-active-overlay.service.d.ts +3 -3
- package/lib/services/po-color/po-color.service.d.ts +16 -16
- package/lib/services/po-color/po-colors.constant.d.ts +2 -2
- package/lib/services/po-color-palette/index.d.ts +2 -2
- package/lib/services/po-color-palette/po-color-palette.module.d.ts +7 -7
- package/lib/services/po-color-palette/po-color-palette.service.d.ts +7 -7
- package/lib/services/po-component-injector/index.d.ts +2 -2
- package/lib/services/po-component-injector/po-component-injector.module.d.ts +2 -2
- package/lib/services/po-component-injector/po-component-injector.service.d.ts +9 -9
- package/lib/services/po-control-position/index.d.ts +2 -2
- package/lib/services/po-control-position/po-control-position.constants.d.ts +1 -1
- package/lib/services/po-control-position/po-control-position.module.d.ts +7 -7
- package/lib/services/po-control-position/po-control-position.service.d.ts +56 -56
- package/lib/services/po-date/index.d.ts +2 -2
- package/lib/services/po-date/po-date.module.d.ts +7 -7
- package/lib/services/po-date/po-date.service.d.ts +94 -94
- package/lib/services/po-dialog/index.d.ts +7 -7
- package/lib/services/po-dialog/interfaces/po-dialog-alert-literals.interface.d.ts +11 -11
- package/lib/services/po-dialog/interfaces/po-dialog-confirm-literals.interface.d.ts +13 -13
- package/lib/services/po-dialog/interfaces/po-dialog.interface.d.ts +82 -82
- package/lib/services/po-dialog/po-dialog-base.service.d.ts +15 -15
- package/lib/services/po-dialog/po-dialog.component.d.ts +48 -48
- package/lib/services/po-dialog/po-dialog.enum.d.ts +12 -12
- package/lib/services/po-dialog/po-dialog.module.d.ts +2 -2
- package/lib/services/po-dialog/po-dialog.service.d.ts +29 -29
- package/lib/services/po-i18n/index.d.ts +7 -7
- package/lib/services/po-i18n/interfaces/po-i18n-config-default.interface.d.ts +35 -35
- package/lib/services/po-i18n/interfaces/po-i18n-config.interface.d.ts +78 -78
- package/lib/services/po-i18n/interfaces/po-i18n-literals.interface.d.ts +15 -15
- package/lib/services/po-i18n/po-i18n-base.pipe.d.ts +29 -29
- package/lib/services/po-i18n/po-i18n-base.service.d.ts +212 -212
- package/lib/services/po-i18n/po-i18n-config-injection-token.d.ts +3 -3
- package/lib/services/po-i18n/po-i18n.module.d.ts +150 -150
- package/lib/services/po-i18n/po-i18n.pipe.d.ts +15 -15
- package/lib/services/po-i18n/po-i18n.service.d.ts +10 -10
- package/lib/services/po-language/index.d.ts +4 -4
- package/lib/services/po-language/po-language.constant.d.ts +58 -58
- package/lib/services/po-language/po-language.interface.d.ts +43 -43
- package/lib/services/po-language/po-language.module.d.ts +7 -7
- package/lib/services/po-language/po-language.service.d.ts +95 -95
- package/lib/services/po-notification/index.d.ts +5 -5
- package/lib/services/po-notification/po-notification-base.service.d.ts +84 -84
- package/lib/services/po-notification/po-notification.interface.d.ts +33 -33
- package/lib/services/po-notification/po-notification.module.d.ts +2 -2
- package/lib/services/po-notification/po-notification.service.d.ts +31 -31
- package/lib/services/po-notification/po-toaster/po-toaster-base.component.d.ts +41 -41
- package/lib/services/po-notification/po-toaster/po-toaster-orientation.enum.d.ts +11 -11
- package/lib/services/po-notification/po-toaster/po-toaster-type.enum.d.ts +15 -15
- package/lib/services/po-notification/po-toaster/po-toaster.component.d.ts +33 -33
- package/lib/services/po-notification/po-toaster/po-toaster.interface.d.ts +15 -15
- package/lib/services/services.module.d.ts +2 -2
- package/lib/utils/util.d.ts +217 -217
- package/package.json +5 -5
- package/po-ui-ng-components-5.22.3.tgz +0 -0
- package/po-ui-ng-components.d.ts +205 -205
- package/po-ui-ng-components.metadata.json +1 -1
- package/public-api.d.ts +1 -1
- package/schematics/README.md +74 -74
- package/schematics/collection.json +40 -40
- package/schematics/migrations.json +25 -25
- package/schematics/ng-add/index.d.ts +8 -8
- package/schematics/ng-add/index.js +25 -25
- package/schematics/ng-add/index.spec.d.ts +1 -1
- package/schematics/ng-add/index.spec.js +91 -91
- package/schematics/ng-add/schema.json +16 -16
- package/schematics/ng-add/setup-project.d.ts +8 -8
- package/schematics/ng-add/setup-project.js +55 -55
- package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
- package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +3 -3
- package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +32 -32
- package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +18 -18
- package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
- package/schematics/ng-generate/po-page-default/index.d.ts +4 -4
- package/schematics/ng-generate/po-page-default/index.js +12 -12
- package/schematics/ng-generate/po-page-default/index.spec.d.ts +1 -1
- package/schematics/ng-generate/po-page-default/index.spec.js +120 -120
- package/schematics/ng-generate/po-page-default/schema.d.ts +3 -3
- package/schematics/ng-generate/po-page-default/schema.js +2 -2
- package/schematics/ng-generate/po-page-default/schema.json +67 -67
- package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
- package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +8 -8
- package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +32 -32
- package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +26 -26
- package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
- package/schematics/ng-generate/po-page-detail/index.d.ts +4 -4
- package/schematics/ng-generate/po-page-detail/index.js +12 -12
- package/schematics/ng-generate/po-page-detail/index.spec.d.ts +1 -1
- package/schematics/ng-generate/po-page-detail/index.spec.js +120 -120
- package/schematics/ng-generate/po-page-detail/schema.d.ts +3 -3
- package/schematics/ng-generate/po-page-detail/schema.js +2 -2
- package/schematics/ng-generate/po-page-detail/schema.json +67 -67
- package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
- package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +8 -8
- package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +32 -32
- package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +26 -26
- package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
- package/schematics/ng-generate/po-page-edit/index.d.ts +4 -4
- package/schematics/ng-generate/po-page-edit/index.js +12 -12
- package/schematics/ng-generate/po-page-edit/index.spec.d.ts +1 -1
- package/schematics/ng-generate/po-page-edit/index.spec.js +120 -120
- package/schematics/ng-generate/po-page-edit/schema.d.ts +3 -3
- package/schematics/ng-generate/po-page-edit/schema.js +2 -2
- package/schematics/ng-generate/po-page-edit/schema.json +67 -67
- package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +14 -14
- package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +28 -28
- package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +35 -35
- package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +33 -33
- package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +19 -19
- package/schematics/ng-generate/po-page-list/index.d.ts +7 -7
- package/schematics/ng-generate/po-page-list/index.js +15 -15
- package/schematics/ng-generate/po-page-list/index.spec.d.ts +1 -1
- package/schematics/ng-generate/po-page-list/index.spec.js +120 -120
- package/schematics/ng-generate/po-page-list/schema.d.ts +5 -5
- package/schematics/ng-generate/po-page-list/schema.js +2 -2
- package/schematics/ng-generate/po-page-list/schema.json +78 -78
- package/schematics/ng-generate/sidemenu/files/app.component.html.template +9 -9
- package/schematics/ng-generate/sidemenu/files/app.component.spec.ts.template +30 -30
- package/schematics/ng-generate/sidemenu/files/app.component.ts.template +20 -20
- package/schematics/ng-generate/sidemenu/index.d.ts +8 -8
- package/schematics/ng-generate/sidemenu/index.js +51 -51
- package/schematics/ng-generate/sidemenu/index.spec.d.ts +1 -1
- package/schematics/ng-generate/sidemenu/index.spec.js +62 -62
- package/schematics/ng-generate/sidemenu/schema.d.ts +13 -13
- package/schematics/ng-generate/sidemenu/schema.js +2 -2
- package/schematics/ng-generate/sidemenu/schema.json +32 -32
- package/schematics/ng-update/v2/changes.d.ts +19 -19
- package/schematics/ng-update/v2/changes.js +58 -58
- package/schematics/ng-update/v2/index.d.ts +1 -1
- package/schematics/ng-update/v2/index.js +145 -145
- package/schematics/ng-update/v3/changes.d.ts +4 -4
- package/schematics/ng-update/v3/changes.js +20 -20
- package/schematics/ng-update/v3/index.d.ts +1 -1
- package/schematics/ng-update/v3/index.js +66 -66
- package/schematics/ng-update/v4/changes.d.ts +4 -4
- package/schematics/ng-update/v4/changes.js +20 -20
- package/schematics/ng-update/v4/index.d.ts +1 -1
- package/schematics/ng-update/v4/index.js +65 -65
- package/schematics/ng-update/v5/changes.d.ts +4 -4
- package/schematics/ng-update/v5/changes.js +25 -25
- package/schematics/ng-update/v5/index.d.ts +1 -1
- package/schematics/ng-update/v5/index.js +65 -65
- package/po-ui-ng-components-5.21.0.tgz +0 -0
|
@@ -1,598 +1,598 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
3
|
-
import { PoLanguageService } from '../../../services/po-language/po-language.service';
|
|
4
|
-
import { minFailed, maxFailed } from '../validators';
|
|
5
|
-
import { convertToInt } from '../../../utils/util';
|
|
6
|
-
import { PoInputBaseComponent } from '../po-input/po-input-base.component';
|
|
7
|
-
const poDecimalDefaultDecimalsLength = 2;
|
|
8
|
-
const poDecimalDefaultThousandMaxlength = 13;
|
|
9
|
-
const poDecimalMaxDecimalsLength = 15;
|
|
10
|
-
const poDecimalTotalLengthLimit = 16;
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* @docsExtends PoInputBaseComponent
|
|
14
|
-
*
|
|
15
|
-
* @description
|
|
16
|
-
*
|
|
17
|
-
* <br>
|
|
18
|
-
* - O `po-decimal` é um *input* específico para receber apenas números decimais, por isso recebe as seguintes características:
|
|
19
|
-
* + Aceita apenas números;
|
|
20
|
-
* + Utiliza ',' como separador de decimal;
|
|
21
|
-
* + Utiliza '.' para separação de milhar;
|
|
22
|
-
* + É possível configurar a quantidade de casas decimais e a quantidade de digitos do campo.
|
|
23
|
-
*
|
|
24
|
-
* > **Importante:**
|
|
25
|
-
* Atualmente o JavaScript limita-se a um conjunto de dados de `32 bits`, e para que os valores comportem-se devidamente,
|
|
26
|
-
* o `po-decimal` contém um tratamento que limita em 16 o número total de casas antes e após a vírgula.
|
|
27
|
-
* Veja abaixo as demais regras nas documentações de `p-decimals-length` e `p-thousand-maxlength`.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
*
|
|
31
|
-
* <example name="po-decimal-basic" title="PO Decimal Basic">
|
|
32
|
-
* <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.html"> </file>
|
|
33
|
-
* <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.ts"> </file>
|
|
34
|
-
* </example>
|
|
35
|
-
*
|
|
36
|
-
* <example name="po-decimal-labs" title="PO Decimal Labs">
|
|
37
|
-
* <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.html"> </file>
|
|
38
|
-
* <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.ts"> </file>
|
|
39
|
-
* </example>
|
|
40
|
-
*
|
|
41
|
-
* <example name="po-decimal-hourly-wage" title="PO Decimal - Hourly Wage">
|
|
42
|
-
* <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.html"> </file>
|
|
43
|
-
* <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.ts"> </file>
|
|
44
|
-
* </example>
|
|
45
|
-
*
|
|
46
|
-
* <example name="po-decimal-hourly-wage-reactive-form" title="PO Decimal - Hourly Wage Reactive Form">
|
|
47
|
-
* <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.html"> </file>
|
|
48
|
-
* <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.ts"> </file>
|
|
49
|
-
* </example>
|
|
50
|
-
*/
|
|
51
|
-
export class PoDecimalComponent extends PoInputBaseComponent {
|
|
52
|
-
constructor(el, poLanguageService, cd) {
|
|
53
|
-
super(cd);
|
|
54
|
-
this.el = el;
|
|
55
|
-
this.poLanguageService = poLanguageService;
|
|
56
|
-
this._decimalsLength = poDecimalDefaultDecimalsLength;
|
|
57
|
-
this._thousandMaxlength = poDecimalDefaultThousandMaxlength;
|
|
58
|
-
this.fireChange = false;
|
|
59
|
-
this.isKeyboardAndroid = false;
|
|
60
|
-
this.minusSign = '-';
|
|
61
|
-
this.oldDotsLength = null;
|
|
62
|
-
this.regex = {
|
|
63
|
-
thousand: new RegExp('\\' + ',', 'g'),
|
|
64
|
-
decimal: new RegExp('\\' + '.', 'g')
|
|
65
|
-
};
|
|
66
|
-
this.isKeyboardAndroid = !!navigator.userAgent.match(/Android/i);
|
|
67
|
-
}
|
|
68
|
-
get autocomplete() {
|
|
69
|
-
return this.noAutocomplete ? 'off' : 'on';
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* @optional
|
|
73
|
-
*
|
|
74
|
-
* @description
|
|
75
|
-
*
|
|
76
|
-
* Quantidade máxima de casas decimais.
|
|
77
|
-
*
|
|
78
|
-
* > **Importante:**
|
|
79
|
-
* - O valor máximo permitido é 15;
|
|
80
|
-
* - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
|
|
81
|
-
* - Esta propriedade sobrepõe apenas o valor **padrão** de `p-thousand-maxlength`;
|
|
82
|
-
* - Caso `p-thousand-maxlength` tenha um valor definido, esta propriedade poderá receber apenas o valor restante do limite total (16).
|
|
83
|
-
*
|
|
84
|
-
* @default `2`
|
|
85
|
-
*/
|
|
86
|
-
set decimalsLength(value) {
|
|
87
|
-
let decimalsLength = convertToInt(value);
|
|
88
|
-
decimalsLength = this.isValueBetweenAllowed(decimalsLength, poDecimalMaxDecimalsLength)
|
|
89
|
-
? decimalsLength
|
|
90
|
-
: poDecimalDefaultDecimalsLength;
|
|
91
|
-
if (this.isGreaterThanTotalLengthLimit(decimalsLength, this.thousandMaxlength)) {
|
|
92
|
-
this.thousandMaxlength = poDecimalTotalLengthLimit - decimalsLength;
|
|
93
|
-
}
|
|
94
|
-
this._decimalsLength = decimalsLength;
|
|
95
|
-
}
|
|
96
|
-
get decimalsLength() {
|
|
97
|
-
return this._decimalsLength;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* @optional
|
|
101
|
-
*
|
|
102
|
-
* @description
|
|
103
|
-
*
|
|
104
|
-
* Quantidade máxima de dígitos antes do separador decimal.
|
|
105
|
-
*
|
|
106
|
-
* > **Importante:**
|
|
107
|
-
* - O valor máximo permitido é 13;
|
|
108
|
-
* - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
|
|
109
|
-
* - Esta propriedade sobrepõe o valor definido em `p-decimals-length`.
|
|
110
|
-
*
|
|
111
|
-
* @default `13`
|
|
112
|
-
*/
|
|
113
|
-
set thousandMaxlength(value) {
|
|
114
|
-
let thousandMaxlength = convertToInt(value);
|
|
115
|
-
if (this.decimalsLength > poDecimalDefaultDecimalsLength && !thousandMaxlength) {
|
|
116
|
-
thousandMaxlength = poDecimalTotalLengthLimit - this.decimalsLength;
|
|
117
|
-
}
|
|
118
|
-
thousandMaxlength = this.isValueBetweenAllowed(thousandMaxlength, poDecimalDefaultThousandMaxlength)
|
|
119
|
-
? thousandMaxlength
|
|
120
|
-
: poDecimalDefaultThousandMaxlength;
|
|
121
|
-
if (this.isGreaterThanTotalLengthLimit(this.decimalsLength, thousandMaxlength)) {
|
|
122
|
-
this.decimalsLength = poDecimalTotalLengthLimit - thousandMaxlength;
|
|
123
|
-
}
|
|
124
|
-
this._thousandMaxlength = thousandMaxlength;
|
|
125
|
-
}
|
|
126
|
-
get thousandMaxlength() {
|
|
127
|
-
return this._thousandMaxlength;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* @optional
|
|
131
|
-
*
|
|
132
|
-
* @description
|
|
133
|
-
*
|
|
134
|
-
* Informa o locale(país) para a formatação do valor.
|
|
135
|
-
* Por padrão o valor será configurado segundo a o módulo [`I18n`](documentation/po-i18n)
|
|
136
|
-
*
|
|
137
|
-
* > Para ver quais linguagens suportadas acesse [`I18n`](documentation/po-i18n)
|
|
138
|
-
*
|
|
139
|
-
*/
|
|
140
|
-
set locale(locale) {
|
|
141
|
-
this._locale = locale;
|
|
142
|
-
this.setNumbersSeparators();
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* @optional
|
|
146
|
-
*
|
|
147
|
-
* @description
|
|
148
|
-
*
|
|
149
|
-
* Valor mínimo.
|
|
150
|
-
*/
|
|
151
|
-
set min(value) {
|
|
152
|
-
if (!isNaN(value)) {
|
|
153
|
-
this._min = value;
|
|
154
|
-
this.validateModel();
|
|
155
|
-
}
|
|
156
|
-
else if (!value) {
|
|
157
|
-
this._min = undefined;
|
|
158
|
-
this.validateModel();
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
get min() {
|
|
162
|
-
return this._min;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* @optional
|
|
166
|
-
*
|
|
167
|
-
* @description
|
|
168
|
-
*
|
|
169
|
-
* Valor máximo.
|
|
170
|
-
*/
|
|
171
|
-
set max(value) {
|
|
172
|
-
if (!isNaN(value)) {
|
|
173
|
-
this._max = value;
|
|
174
|
-
this.validateModel();
|
|
175
|
-
}
|
|
176
|
-
else if (!value) {
|
|
177
|
-
this._max = undefined;
|
|
178
|
-
this.validateModel();
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
get max() {
|
|
182
|
-
return this._max;
|
|
183
|
-
}
|
|
184
|
-
ngOnInit() {
|
|
185
|
-
this.setNumbersSeparators();
|
|
186
|
-
}
|
|
187
|
-
setNumbersSeparators() {
|
|
188
|
-
const { decimalSeparator, thousandSeparator } = this.poLanguageService.getNumberSeparators(this._locale);
|
|
189
|
-
this.decimalSeparator = decimalSeparator;
|
|
190
|
-
this.thousandSeparator = thousandSeparator;
|
|
191
|
-
this.regex = {
|
|
192
|
-
thousand: new RegExp('\\' + thousandSeparator, 'g'),
|
|
193
|
-
decimal: new RegExp('\\' + decimalSeparator, 'g')
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
ngAfterViewInit() {
|
|
197
|
-
this.verifyAutoFocus();
|
|
198
|
-
this.setPaddingInput();
|
|
199
|
-
}
|
|
200
|
-
clear(value) {
|
|
201
|
-
this.callOnChange(value);
|
|
202
|
-
this.controlChangeEmitter();
|
|
203
|
-
}
|
|
204
|
-
extraValidation(abstractControl) {
|
|
205
|
-
// Verifica se já possui algum error pattern padrão.
|
|
206
|
-
this.errorPattern = this.errorPattern !== 'Valor Inválido' ? this.errorPattern : '';
|
|
207
|
-
if (minFailed(this.min, abstractControl.value)) {
|
|
208
|
-
return {
|
|
209
|
-
min: {
|
|
210
|
-
valid: false
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
if (maxFailed(this.max, abstractControl.value)) {
|
|
215
|
-
return {
|
|
216
|
-
max: {
|
|
217
|
-
valid: false
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
focus() {
|
|
224
|
-
if (!this.disabled) {
|
|
225
|
-
this.inputEl.nativeElement.focus();
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
getScreenValue() {
|
|
229
|
-
return this.inputEl ? this.inputEl.nativeElement.value : '';
|
|
230
|
-
}
|
|
231
|
-
hasInvalidClass() {
|
|
232
|
-
return (this.el.nativeElement.classList.contains('ng-invalid') &&
|
|
233
|
-
this.el.nativeElement.classList.contains('ng-dirty') &&
|
|
234
|
-
this.getScreenValue() !== '');
|
|
235
|
-
}
|
|
236
|
-
hasLetters(value = '') {
|
|
237
|
-
return value.match(/[a-zA-Z:;+=_´`^~"'?!@#$%¨&*()><{}çÇ\[\]/\\|]+/);
|
|
238
|
-
}
|
|
239
|
-
isValidNumber(event) {
|
|
240
|
-
// - event.key não existia em alguns browsers, como Samsung browser e Firefox.
|
|
241
|
-
const keyValue = String.fromCharCode(event.which);
|
|
242
|
-
const validKey = event.which !== 8 && event.which !== 0;
|
|
243
|
-
return !this.hasLetters(keyValue) && validKey;
|
|
244
|
-
}
|
|
245
|
-
// função responsável por adicionar os zeroes com as casa decimais ao sair do campo.
|
|
246
|
-
onBlur(event) {
|
|
247
|
-
var _a;
|
|
248
|
-
(_a = this.onTouched) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
249
|
-
const value = event.target.value;
|
|
250
|
-
if (value) {
|
|
251
|
-
if (this.hasLetters(value) || this.containsMoreThanOneDecimalSeparator(value)) {
|
|
252
|
-
this.setViewValue('');
|
|
253
|
-
this.callOnChange(undefined);
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
const valueWithoutThousandSeparator = this.formatValueWithoutThousandSeparator(value);
|
|
257
|
-
this.setViewValue(this.formatToViewValue(valueWithoutThousandSeparator));
|
|
258
|
-
}
|
|
259
|
-
this.blur.emit();
|
|
260
|
-
this.controlChangeEmitter();
|
|
261
|
-
}
|
|
262
|
-
onFocus(event) {
|
|
263
|
-
// Atualiza valor da variável que será usada para verificar se o campo teve alteração
|
|
264
|
-
this.valueBeforeChange = this.getScreenValue();
|
|
265
|
-
// Dispara evento quando o usuário entrar no campo
|
|
266
|
-
// Este evento também é disparado quando o campo inicia com foco.
|
|
267
|
-
this.enter.emit();
|
|
268
|
-
}
|
|
269
|
-
onInput(event) {
|
|
270
|
-
const selectionStart = event.target.selectionStart;
|
|
271
|
-
const selectionEnd = event.target.selectionEnd;
|
|
272
|
-
let modelValue;
|
|
273
|
-
// - Browsers nativos do Android ex: Samsung Browser.
|
|
274
|
-
if (this.isKeyboardAndroid) {
|
|
275
|
-
this.onInputKeyboardAndroid(event);
|
|
276
|
-
}
|
|
277
|
-
modelValue = this.formatValueWithoutThousandSeparator(event.target.value);
|
|
278
|
-
modelValue = this.addZeroBefore(modelValue);
|
|
279
|
-
const viewValue = this.formatMask(modelValue);
|
|
280
|
-
// validação para não quebrar IE com placeholder definido e Input vazio
|
|
281
|
-
if (viewValue) {
|
|
282
|
-
this.setViewValue(viewValue);
|
|
283
|
-
this.setCursorInput(event, selectionStart, selectionEnd);
|
|
284
|
-
}
|
|
285
|
-
this.callOnChange(this.formatToModelValue(modelValue));
|
|
286
|
-
}
|
|
287
|
-
onInputKeyboardAndroid(event) {
|
|
288
|
-
const inputValue = event.target.value;
|
|
289
|
-
const selectionStart = event.target.selectionStart;
|
|
290
|
-
const hasLetters = this.hasLetters(inputValue);
|
|
291
|
-
if (hasLetters) {
|
|
292
|
-
this.setViewValue(inputValue.replace(hasLetters[0], ''));
|
|
293
|
-
return event.preventDefault();
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
const position = selectionStart - 1;
|
|
297
|
-
const key = inputValue.charAt(position);
|
|
298
|
-
this.setPositionValue(event);
|
|
299
|
-
if (this.isValidKey(event, key)) {
|
|
300
|
-
this.setViewValue(inputValue);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
onKeyPress(event) {
|
|
305
|
-
this.isValidKey(event);
|
|
306
|
-
}
|
|
307
|
-
setPaddingInput() {
|
|
308
|
-
setTimeout(() => {
|
|
309
|
-
const selectorIcons = '.po-field-icon-container:not(.po-field-icon-container-left) > .po-icon';
|
|
310
|
-
let icons = this.el.nativeElement.querySelectorAll(selectorIcons).length;
|
|
311
|
-
if (this.clean) {
|
|
312
|
-
icons++;
|
|
313
|
-
}
|
|
314
|
-
if (icons) {
|
|
315
|
-
this.inputEl.nativeElement.style.paddingRight = `${icons * 36}px`;
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
writeValueModel(value) {
|
|
320
|
-
if (this.inputEl) {
|
|
321
|
-
if (value || value === 0) {
|
|
322
|
-
const formatedViewValue = this.formatToViewValue(value);
|
|
323
|
-
this.setViewValue(formatedViewValue);
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
this.setViewValue('');
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
if (value) {
|
|
330
|
-
this.change.emit(value);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
getErrorPatternMessage() {
|
|
334
|
-
return this.errorPattern !== '' && this.hasInvalidClass() ? this.errorPattern : '';
|
|
335
|
-
}
|
|
336
|
-
// responsável por adicionar 0 antes da virgula (decimalSeparator).
|
|
337
|
-
addZeroBefore(value) {
|
|
338
|
-
const isDecimalSeparator = value === this.decimalSeparator;
|
|
339
|
-
return isDecimalSeparator ? `0${value}` : value;
|
|
340
|
-
}
|
|
341
|
-
containsComma(value) {
|
|
342
|
-
return value.includes(this.decimalSeparator);
|
|
343
|
-
}
|
|
344
|
-
containsMoreThanOneDecimalSeparator(value = '') {
|
|
345
|
-
const foundComma = value.match(this.regex.decimal);
|
|
346
|
-
return !!(foundComma && foundComma.length > 1);
|
|
347
|
-
}
|
|
348
|
-
controlChangeEmitter() {
|
|
349
|
-
const elementValue = this.getScreenValue();
|
|
350
|
-
// Emite o evento change manualmente quando o campo é alterado
|
|
351
|
-
// Este evento é controlado manualmente devido ao preventDefault existente na máscara
|
|
352
|
-
// e devido ao controle do p-clean, que também precisa emitir change
|
|
353
|
-
if (elementValue !== this.valueBeforeChange) {
|
|
354
|
-
this.fireChange = true;
|
|
355
|
-
setTimeout(() => {
|
|
356
|
-
this.change.emit(elementValue);
|
|
357
|
-
}, 200);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
formatMask(value) {
|
|
361
|
-
// necessário para não adicionar . nas casa decimais.
|
|
362
|
-
// por exemplo: 12.345,123.45 (errado)
|
|
363
|
-
// 12.345,12345 (correto)
|
|
364
|
-
if (value.match(this.regex.decimal)) {
|
|
365
|
-
const regex = new RegExp(`(\\d)(?=(\\d{3})+(?!\\d)${this.decimalSeparator})`, 'g');
|
|
366
|
-
return value.toString().replace(regex, `$1${this.thousandSeparator}`);
|
|
367
|
-
}
|
|
368
|
-
return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${this.thousandSeparator}`);
|
|
369
|
-
}
|
|
370
|
-
formatToModelValue(value) {
|
|
371
|
-
const formattedValue = this.replaceCommaToDot(value);
|
|
372
|
-
const parsedValue = formattedValue ? parseFloat(Number(formattedValue).toFixed(this.decimalsLength)) : undefined;
|
|
373
|
-
return parsedValue === 0 || parsedValue ? parsedValue : undefined;
|
|
374
|
-
}
|
|
375
|
-
formatToViewValue(value) {
|
|
376
|
-
// - Necessário para tratar valores que contenham decimalSeparator
|
|
377
|
-
value = this.replaceCommaToDot(value);
|
|
378
|
-
const numberValue = Number(value).toFixed(this.decimalsLength);
|
|
379
|
-
const valueBeforeDot = this.getValueBeforeSeparator(numberValue, '.');
|
|
380
|
-
const valueAfterDot = this.getValueAfterSeparator(numberValue, '.');
|
|
381
|
-
const formatedNumber = this.formatMask(valueBeforeDot);
|
|
382
|
-
if (this.decimalsLength === 0) {
|
|
383
|
-
return formatedNumber;
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
return `${formatedNumber}${this.decimalSeparator}${valueAfterDot}`;
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
formatValueWithoutThousandSeparator(value = '') {
|
|
390
|
-
return value.toString().replace(this.regex.thousand, '');
|
|
391
|
-
}
|
|
392
|
-
getValueAfterSeparator(value = '', separator) {
|
|
393
|
-
return value.split(separator)[1] || '';
|
|
394
|
-
}
|
|
395
|
-
getValueBeforeSeparator(value = '', separator) {
|
|
396
|
-
return value.split(separator)[0] || '';
|
|
397
|
-
}
|
|
398
|
-
hasLessDot(value) {
|
|
399
|
-
if (value) {
|
|
400
|
-
const dots = value.match(this.regex.thousand);
|
|
401
|
-
const dotsLength = dots && dots.length;
|
|
402
|
-
if (dotsLength < this.oldDotsLength) {
|
|
403
|
-
this.oldDotsLength = dotsLength;
|
|
404
|
-
return true;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
if (!value) {
|
|
408
|
-
this.oldDotsLength = null;
|
|
409
|
-
}
|
|
410
|
-
return false;
|
|
411
|
-
}
|
|
412
|
-
hasMoreDot(value) {
|
|
413
|
-
if (value) {
|
|
414
|
-
const dots = value.match(this.regex.thousand);
|
|
415
|
-
const dotsLength = dots && dots.length;
|
|
416
|
-
if (dotsLength > this.oldDotsLength) {
|
|
417
|
-
this.oldDotsLength = dotsLength;
|
|
418
|
-
return true;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
if (!value) {
|
|
422
|
-
this.oldDotsLength = null;
|
|
423
|
-
}
|
|
424
|
-
return false;
|
|
425
|
-
}
|
|
426
|
-
hasMinusSignInvalidPosition(event) {
|
|
427
|
-
const keyIsMinusSign = event.key === this.minusSign;
|
|
428
|
-
const selectionStart = event.target.selectionStart;
|
|
429
|
-
return keyIsMinusSign && selectionStart !== 0;
|
|
430
|
-
}
|
|
431
|
-
isInvalidKey(event, charCode) {
|
|
432
|
-
const isInvalidNumber = !this.isValidNumber(event);
|
|
433
|
-
return (this.verifyInsertComma(event) ||
|
|
434
|
-
this.verifyThousandLength(event) ||
|
|
435
|
-
this.verifyValueAfterComma(event) ||
|
|
436
|
-
this.verifyInsertMinusSign(event) ||
|
|
437
|
-
this.hasMinusSignInvalidPosition(event) ||
|
|
438
|
-
isInvalidNumber ||
|
|
439
|
-
this.validateCursorPositionBeforeSeparator(event) ||
|
|
440
|
-
this.verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode));
|
|
441
|
-
}
|
|
442
|
-
isGreaterThanTotalLengthLimit(decimalsMaxLength, thousandMaxlength) {
|
|
443
|
-
return decimalsMaxLength + thousandMaxlength > poDecimalTotalLengthLimit;
|
|
444
|
-
}
|
|
445
|
-
isKeyDecimalSeparator(event) {
|
|
446
|
-
return event.key === this.decimalSeparator || event.char === this.decimalSeparator;
|
|
447
|
-
}
|
|
448
|
-
isPositionAfterDecimalSeparator(positionCursor, value) {
|
|
449
|
-
const indexComma = value && value.indexOf(this.decimalSeparator);
|
|
450
|
-
if (indexComma && this.decimalsLength > 0) {
|
|
451
|
-
return positionCursor > indexComma;
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
isSelectionStartDifferentSelectionEnd(target) {
|
|
455
|
-
return target.selectionStart !== target.selectionEnd;
|
|
456
|
-
}
|
|
457
|
-
isValidKey(event, key) {
|
|
458
|
-
const charCode = event.which || event.keyCode;
|
|
459
|
-
const validKey = event.which === 8 || event.which === 0;
|
|
460
|
-
if (validKey && !this.isKeyboardAndroid) {
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
|
-
if (key) {
|
|
464
|
-
event.key = key;
|
|
465
|
-
}
|
|
466
|
-
if (this.isInvalidKey(event, charCode)) {
|
|
467
|
-
event.preventDefault();
|
|
468
|
-
return false;
|
|
469
|
-
}
|
|
470
|
-
return true;
|
|
471
|
-
}
|
|
472
|
-
isValueBetweenAllowed(value, maxAllowed) {
|
|
473
|
-
return value >= 0 && value <= maxAllowed;
|
|
474
|
-
}
|
|
475
|
-
// Quando decimalsLength for 0 não deve permitir informar vírgula (decimalSeparator)
|
|
476
|
-
verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode) {
|
|
477
|
-
return charCode === 44 && this.decimalsLength === 0;
|
|
478
|
-
}
|
|
479
|
-
verifyAutoFocus() {
|
|
480
|
-
if (this.autoFocus) {
|
|
481
|
-
this.focus();
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
setInitialSelectionRange(target, selectionStart, selectionEnd) {
|
|
485
|
-
if (selectionStart === 1 && selectionEnd === 1) {
|
|
486
|
-
return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
|
|
487
|
-
}
|
|
488
|
-
return target.setSelectionRange(selectionStart - 1, selectionEnd - 1);
|
|
489
|
-
}
|
|
490
|
-
replaceAt(value, index, replace) {
|
|
491
|
-
return value.substring(0, index) + replace + value.substring(index + 1);
|
|
492
|
-
}
|
|
493
|
-
replaceCommaToDot(value = '') {
|
|
494
|
-
if (this.decimalSeparator === ',') {
|
|
495
|
-
value = value.toString().replace(this.regex.decimal, '.');
|
|
496
|
-
}
|
|
497
|
-
return value;
|
|
498
|
-
}
|
|
499
|
-
setCursorInput(event, selectionStart, selectionEnd) {
|
|
500
|
-
const target = event.target;
|
|
501
|
-
const viewValue = target.value;
|
|
502
|
-
// Caso houver mais . do que anteriormente soma o valor com 1.
|
|
503
|
-
if (this.hasMoreDot(viewValue) || viewValue === '0' + this.decimalSeparator) {
|
|
504
|
-
return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
|
|
505
|
-
}
|
|
506
|
-
// Caso houver menos . do que anteriormente subtrai o valor por 1.
|
|
507
|
-
if (this.hasLessDot(viewValue)) {
|
|
508
|
-
this.setInitialSelectionRange(target, selectionStart, selectionEnd);
|
|
509
|
-
}
|
|
510
|
-
return target.setSelectionRange(selectionStart, selectionEnd);
|
|
511
|
-
}
|
|
512
|
-
setPositionValue(event) {
|
|
513
|
-
const value = event.target.value;
|
|
514
|
-
const position = event.target.selectionStart - 1;
|
|
515
|
-
if (position > 0 && event.key === this.minusSign) {
|
|
516
|
-
event.target.value = value.substring(0, position) + value.substr(position + 1);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
setViewValue(value) {
|
|
520
|
-
this.inputEl.nativeElement.value = value;
|
|
521
|
-
}
|
|
522
|
-
validateCursorPositionBeforeSeparator(event) {
|
|
523
|
-
const target = event.target;
|
|
524
|
-
const originalValue = this.formatValueWithoutThousandSeparator(target.value);
|
|
525
|
-
const valueBeforeSeparator = this.getValueBeforeSeparator(target.value, this.decimalSeparator);
|
|
526
|
-
const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
|
|
527
|
-
if (this.isSelectionStartDifferentSelectionEnd(target)) {
|
|
528
|
-
return false;
|
|
529
|
-
}
|
|
530
|
-
return (target.selectionStart <= valueBeforeSeparator.length &&
|
|
531
|
-
valueBeforeSeparatorOriginal.length === this.thousandMaxlength &&
|
|
532
|
-
!this.isKeyDecimalSeparator(event));
|
|
533
|
-
}
|
|
534
|
-
verifyThousandLength(event) {
|
|
535
|
-
const target = event.target;
|
|
536
|
-
const originalValue = this.formatValueWithoutThousandSeparator(target.value);
|
|
537
|
-
const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
|
|
538
|
-
if (this.isSelectionStartDifferentSelectionEnd(target)) {
|
|
539
|
-
return false;
|
|
540
|
-
}
|
|
541
|
-
return (valueBeforeSeparatorOriginal.length >= this.thousandMaxlength &&
|
|
542
|
-
!this.isKeyDecimalSeparator(event) &&
|
|
543
|
-
this.isPositionAfterDecimalSeparator(target.selectionStart - this.decimalsLength, target.value));
|
|
544
|
-
}
|
|
545
|
-
verifyInsertComma(e) {
|
|
546
|
-
const hasComma = this.containsComma(e.target.value);
|
|
547
|
-
return hasComma && e.key === this.decimalSeparator;
|
|
548
|
-
}
|
|
549
|
-
verifyInsertMinusSign(event) {
|
|
550
|
-
const value = event.target.value;
|
|
551
|
-
const indexMinusSign = value.lastIndexOf(this.minusSign) !== -1;
|
|
552
|
-
const positionMinusSign = value.lastIndexOf('-');
|
|
553
|
-
const occurancesMinusSign = value.match(new RegExp('-', 'g'));
|
|
554
|
-
if (this.isKeyboardAndroid && indexMinusSign && occurancesMinusSign.length > 1) {
|
|
555
|
-
event.target.value = this.replaceAt(value, positionMinusSign, '');
|
|
556
|
-
}
|
|
557
|
-
return indexMinusSign && event.key === this.minusSign;
|
|
558
|
-
}
|
|
559
|
-
verifyValueAfterComma(event) {
|
|
560
|
-
const value = event.target.value;
|
|
561
|
-
const selectionStart = event.target.selectionStart;
|
|
562
|
-
const valueAfterSeparator = this.getValueAfterSeparator(value, this.decimalSeparator);
|
|
563
|
-
return (this.isPositionAfterDecimalSeparator(selectionStart, value) && valueAfterSeparator.length >= this.decimalsLength);
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
PoDecimalComponent.decorators = [
|
|
567
|
-
{ type: Component, args: [{
|
|
568
|
-
selector: 'po-decimal',
|
|
569
|
-
template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <div class=\"po-field-container-content\">\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\n <po-icon class=\"po-field-icon\" [class.po-field-icon-disabled]=\"disabled\" [p-icon]=\"icon\"></po-icon>\n </div>\n\n <input\n #inp\n class=\"po-input\"\n [attr.max]=\"max\"\n [attr.min]=\"min\"\n [attr.name]=\"name\"\n [autocomplete]=\"autocomplete\"\n [class.po-input-icon-left]=\"icon\"\n [class.po-input-icon-right]=\"clean\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n inputmode=\"decimal\"\n type=\"text\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event)\"\n (keypress)=\"onKeyPress($event)\"\n />\n\n <div class=\"po-field-icon-container-right\">\n <po-clean *ngIf=\"clean && !disabled && !readonly\" [p-element-ref]=\"inputEl\" (p-change-event)=\"clear($event)\">\n </po-clean>\n </div>\n </div>\n\n <po-field-container-bottom [p-error-pattern]=\"getErrorPatternMessage()\"> </po-field-container-bottom>\n</po-field-container>\n",
|
|
570
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
571
|
-
providers: [
|
|
572
|
-
{
|
|
573
|
-
provide: NG_VALUE_ACCESSOR,
|
|
574
|
-
useExisting: forwardRef(() => PoDecimalComponent),
|
|
575
|
-
multi: true
|
|
576
|
-
},
|
|
577
|
-
{
|
|
578
|
-
provide: NG_VALIDATORS,
|
|
579
|
-
useExisting: forwardRef(() => PoDecimalComponent),
|
|
580
|
-
multi: true
|
|
581
|
-
}
|
|
582
|
-
]
|
|
583
|
-
},] }
|
|
584
|
-
];
|
|
585
|
-
PoDecimalComponent.ctorParameters = () => [
|
|
586
|
-
{ type: ElementRef },
|
|
587
|
-
{ type: PoLanguageService },
|
|
588
|
-
{ type: ChangeDetectorRef }
|
|
589
|
-
];
|
|
590
|
-
PoDecimalComponent.propDecorators = {
|
|
591
|
-
inputEl: [{ type: ViewChild, args: ['inp', { read: ElementRef, static: true },] }],
|
|
592
|
-
decimalsLength: [{ type: Input, args: ['p-decimals-length',] }],
|
|
593
|
-
thousandMaxlength: [{ type: Input, args: ['p-thousand-maxlength',] }],
|
|
594
|
-
locale: [{ type: Input, args: ['p-locale',] }],
|
|
595
|
-
min: [{ type: Input, args: ['p-min',] }],
|
|
596
|
-
max: [{ type: Input, args: ['p-max',] }]
|
|
597
|
-
};
|
|
598
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGVjaW1hbC9wby1kZWNpbWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTNFLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0saUNBQWlDLEdBQUcsRUFBRSxDQUFDO0FBQzdDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7QUFrQkgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQTZKMUQsWUFBb0IsRUFBYyxFQUFVLGlCQUFvQyxFQUFFLEVBQXFCO1FBQ3JHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQURRLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUp4RSxvQkFBZSxH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QUMsY0FBYyxDQUFDO1FBQ25ELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RixPQUFPLENBQ0wsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FDakgsQ0FBQztJQUNKLENBQUM7OztZQXhwQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0Qix1d0NBQTBDO2dCQUMxQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7d0JBQ2pELEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7WUEzRUMsVUFBVTtZQU9ILGlCQUFpQjtZQVR4QixpQkFBaUI7OztzQkErRWhCLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7NkJBd0NuRCxLQUFLLFNBQUMsbUJBQW1CO2dDQWdDekIsS0FBSyxTQUFDLHNCQUFzQjtxQkFpQzVCLEtBQUssU0FBQyxVQUFVO2tCQVloQixLQUFLLFNBQUMsT0FBTztrQkF1QmIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IG1pbkZhaWxlZCwgbWF4RmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbmltcG9ydCB7IGNvbnZlcnRUb0ludCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9JbnB1dEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9wby1pbnB1dC9wby1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XG5cbmNvbnN0IHBvRGVjaW1hbERlZmF1bHREZWNpbWFsc0xlbmd0aCA9IDI7XG5jb25zdCBwb0RlY2ltYWxEZWZhdWx0VGhvdXNhbmRNYXhsZW5ndGggPSAxMztcbmNvbnN0IHBvRGVjaW1hbE1heERlY2ltYWxzTGVuZ3RoID0gMTU7XG5jb25zdCBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0ID0gMTY7XG5cbi8qKlxuICpcbiAqIEBkb2NzRXh0ZW5kcyBQb0lucHV0QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIDxicj5cbiAqIC0gTyBgcG8tZGVjaW1hbGAgw6kgdW0gKmlucHV0KiBlc3BlY8OtZmljbyBwYXJhIHJlY2ViZXIgYXBlbmFzIG7Dum1lcm9zIGRlY2ltYWlzLCBwb3IgaXNzbyByZWNlYmUgYXMgc2VndWludGVzIGNhcmFjdGVyw61zdGljYXM6XG4gKiAgKyBBY2VpdGEgYXBlbmFzIG7Dum1lcm9zO1xuICogICsgVXRpbGl6YSAnLCcgY29tbyBzZXBhcmFkb3IgZGUgZGVjaW1hbDtcbiAqICArIFV0aWxpemEgJy4nIHBhcmEgc2VwYXJhw6fDo28gZGUgbWlsaGFyO1xuICogICsgw4kgcG9zc8OtdmVsIGNvbmZpZ3VyYXIgYSBxdWFudGlkYWRlIGRlIGNhc2FzIGRlY2ltYWlzIGUgYSBxdWFudGlkYWRlIGRlIGRpZ2l0b3MgZG8gY2FtcG8uXG4gKlxuICogPiAqKkltcG9ydGFudGU6KipcbiAqIEF0dWFsbWVudGUgbyBKYXZhU2NyaXB0IGxpbWl0YS1zZSBhIHVtIGNvbmp1bnRvIGRlIGRhZG9zIGRlIGAzMiBiaXRzYCwgZSBwYXJhIHF1ZSBvcyB2YWxvcmVzIGNvbXBvcnRlbS1zZSBkZXZpZGFtZW50ZSxcbiAqIG8gYHBvLWRlY2ltYWxgIGNvbnTDqW0gdW0gdHJhdGFtZW50byBxdWUgbGltaXRhIGVtIDE2IG8gbsO6bWVybyB0b3RhbCBkZSBjYXNhcyBhbnRlcyBlIGFww7NzIGEgdsOtcmd1bGEuXG4gKiBWZWphIGFiYWl4byBhcyBkZW1haXMgcmVncmFzIG5hcyBkb2N1bWVudGHDp8O1ZXMgZGUgYHAtZGVjaW1hbHMtbGVuZ3RoYCBlIGBwLXRob3VzYW5kLW1heGxlbmd0aGAuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1iYXNpY1wiIHRpdGxlPVwiUE8gRGVjaW1hbCBCYXNpY1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy9zYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWJhc2ljL3NhbXBsZS1wby1kZWNpbWFsLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtbGFic1wiIHRpdGxlPVwiUE8gRGVjaW1hbCBMYWJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWxhYnMvc2FtcGxlLXBvLWRlY2ltYWwtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWxhYnMvc2FtcGxlLXBvLWRlY2ltYWwtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWhvdXJseS13YWdlXCIgdGl0bGU9XCJQTyBEZWNpbWFsIC0gSG91cmx5IFdhZ2VcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2Uvc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIERlY2ltYWwgLSBIb3VybHkgV2FnZSBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1kZWNpbWFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWRlY2ltYWwuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RlY2ltYWxDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RlY2ltYWxDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUG9EZWNpbWFsQ29tcG9uZW50IGV4dGVuZHMgUG9JbnB1dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBAVmlld0NoaWxkKCdpbnAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgX2RlY2ltYWxzTGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xuICBwcml2YXRlIF90aG91c2FuZE1heGxlbmd0aD86IG51bWJlciA9IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aDtcbiAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuICBwcml2YXRlIF9taW4/OiBudW1iZXI7XG4gIHByaXZhdGUgX21heD86IG51bWJlcjtcblxuICBwcml2YXRlIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcbiAgcHJpdmF0ZSBmaXJlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNLZXlib2FyZEFuZHJvaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtaW51c1NpZ246IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBvbGREb3RzTGVuZ3RoID0gbnVsbDtcbiAgcHJpdmF0ZSB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nO1xuICBwcml2YXRlIHZhbHVlQmVmb3JlQ2hhbmdlOiBhbnk7XG5cbiAgcHJpdmF0ZSByZWdleCA9IHtcbiAgICB0aG91c2FuZDogbmV3IFJlZ0V4cCgnXFxcXCcgKyAnLCcsICdnJyksXG4gICAgZGVjaW1hbDogbmV3IFJlZ0V4cCgnXFxcXCcgKyAnLicsICdnJylcbiAgfTtcblxuICBnZXQgYXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLm5vQXV0b2NvbXBsZXRlID8gJ29mZicgOiAnb24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUXVhbnRpZGFkZSBtw6F4aW1hIGRlIGNhc2FzIGRlY2ltYWlzLlxuICAgKlxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxuICAgKiAtIE8gdmFsb3IgbcOheGltbyBwZXJtaXRpZG8gw6kgMTU7XG4gICAqIC0gQSBzb21hIHRvdGFsIGRlIGBwLWRlY2ltYWxzLWxlbmd0aGAgY29tIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgbGltaXRhLXNlIMOgIDE2O1xuICAgKiAtIEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIGFwZW5hcyBvIHZhbG9yICoqcGFkcsOjbyoqIGRlIGBwLXRob3VzYW5kLW1heGxlbmd0aGA7XG4gICAqIC0gQ2FzbyBgcC10aG91c2FuZC1tYXhsZW5ndGhgIHRlbmhhIHVtIHZhbG9yIGRlZmluaWRvLCBlc3RhIHByb3ByaWVkYWRlIHBvZGVyw6EgcmVjZWJlciBhcGVuYXMgbyB2YWxvciByZXN0YW50ZSBkbyBsaW1pdGUgdG90YWwgKDE2KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDJgXG4gICAqL1xuICBASW5wdXQoJ3AtZGVjaW1hbHMtbGVuZ3RoJykgc2V0IGRlY2ltYWxzTGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgZGVjaW1hbHNMZW5ndGggPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xuXG4gICAgZGVjaW1hbHNMZW5ndGggPSB0aGlzLmlzVmFsdWVCZXR3ZWVuQWxsb3dlZChkZWNpbWFsc0xlbmd0aCwgcG9EZWNpbWFsTWF4RGVjaW1hbHNMZW5ndGgpXG4gICAgICA/IGRlY2ltYWxzTGVuZ3RoXG4gICAgICA6IHBvRGVjaW1hbERlZmF1bHREZWNpbWFsc0xlbmd0aDtcblxuICAgIGlmICh0aGlzLmlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KGRlY2ltYWxzTGVuZ3RoLCB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoKSkge1xuICAgICAgdGhpcy50aG91c2FuZE1heGxlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSBkZWNpbWFsc0xlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWNpbWFsc0xlbmd0aCA9IGRlY2ltYWxzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGRlY2ltYWxzTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWNpbWFsc0xlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFF1YW50aWRhZGUgbcOheGltYSBkZSBkw61naXRvcyBhbnRlcyBkbyBzZXBhcmFkb3IgZGVjaW1hbC5cbiAgICpcbiAgICogPiAqKkltcG9ydGFudGU6KipcbiAgICogLSBPIHZhbG9yIG3DoXhpbW8gcGVybWl0aWRvIMOpIDEzO1xuICAgKiAtIEEgc29tYSB0b3RhbCBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGNvbSBgcC10aG91c2FuZC1tYXhsZW5ndGhgIGxpbWl0YS1zZSDDoCAxNjtcbiAgICogLSBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRlZmluaWRvIGVtIGBwLWRlY2ltYWxzLWxlbmd0aGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxM2BcbiAgICovXG4gIEBJbnB1dCgncC10aG91c2FuZC1tYXhsZW5ndGgnKSBzZXQgdGhvdXNhbmRNYXhsZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGxldCB0aG91c2FuZE1heGxlbmd0aCA9IGNvbnZlcnRUb0ludCh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5kZWNpbWFsc0xlbmd0aCA+IHBvRGVjaW1hbERlZmF1bHREZWNpbWFsc0xlbmd0aCAmJiAhdGhvdXNhbmRNYXhsZW5ndGgpIHtcbiAgICAgIHRob3VzYW5kTWF4bGVuZ3RoID0gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdCAtIHRoaXMuZGVjaW1hbHNMZW5ndGg7XG4gICAgfVxuXG4gICAgdGhvdXNhbmRNYXhsZW5ndGggPSB0aGlzLmlzVmFsdWVCZXR3ZWVuQWxsb3dlZCh0aG91c2FuZE1heGxlbmd0aCwgcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoKVxuICAgICAgPyB0aG91c2FuZE1heGxlbmd0aFxuICAgICAgOiBwb0RlY2ltYWxEZWZhdWx0VGhvdXNhbmRNYXhsZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pc0dyZWF0ZXJUaGFuVG90YWxMZW5ndGhMaW1pdCh0aGlzLmRlY2ltYWxzTGVuZ3RoLCB0aG91c2FuZE1heGxlbmd0aCkpIHtcbiAgICAgIHRoaXMuZGVjaW1hbHNMZW5ndGggPSBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0IC0gdGhvdXNhbmRNYXhsZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5fdGhvdXNhbmRNYXhsZW5ndGggPSB0aG91c2FuZE1heGxlbmd0aDtcbiAgfVxuXG4gIGdldCB0aG91c2FuZE1heGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhvdXNhbmRNYXhsZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmZvcm1hIG8gbG9jYWxlKHBhw61zKSBwYXJhIGEgZm9ybWF0YcOnw6NvIGRvIHZhbG9yLlxuICAgKiBQb3IgcGFkcsOjbyBvIHZhbG9yIHNlcsOhIGNvbmZpZ3VyYWRvIHNlZ3VuZG8gYSBvIG3Ds2R1bG8gW2BJMThuYF0oZG9jdW1lbnRhdGlvbi9wby1pMThuKVxuICAgKlxuICAgKiA+IFBhcmEgdmVyIHF1YWlzIGxpbmd1YWdlbnMgc3Vwb3J0YWRhcyBhY2Vzc2UgW2BJMThuYF0oZG9jdW1lbnRhdGlvbi9wby1pMThuKVxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWxvY2FsZScpIHNldCBsb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgdGhpcy5zZXROdW1iZXJzU2VwYXJhdG9ycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgbcOtbmltby5cbiAgICovXG4gIEBJbnB1dCgncC1taW4nKSBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl9taW4gPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgbcOheGltby5cbiAgICovXG4gIEBJbnB1dCgncC1tYXgnKSBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLl9tYXggPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGNkKTtcbiAgICB0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXROdW1iZXJzU2VwYXJhdG9ycygpO1xuICB9XG5cbiAgc2V0TnVtYmVyc1NlcGFyYXRvcnMoKSB7XG4gICAgY29uc3QgeyBkZWNpbWFsU2VwYXJhdG9yLCB0aG91c2FuZFNlcGFyYXRvciB9ID0gdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXROdW1iZXJTZXBhcmF0b3JzKHRoaXMuX2xvY2FsZSk7XG4gICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvcjtcbiAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yID0gdGhvdXNhbmRTZXBhcmF0b3I7XG4gICAgdGhpcy5yZWdleCA9IHtcbiAgICAgIHRob3VzYW5kOiBuZXcgUmVnRXhwKCdcXFxcJyArIHRob3VzYW5kU2VwYXJhdG9yLCAnZycpLFxuICAgICAgZGVjaW1hbDogbmV3IFJlZ0V4cCgnXFxcXCcgKyBkZWNpbWFsU2VwYXJhdG9yLCAnZycpXG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnZlcmlmeUF1dG9Gb2N1cygpO1xuICAgIHRoaXMuc2V0UGFkZGluZ0lucHV0KCk7XG4gIH1cblxuICBjbGVhcih2YWx1ZSkge1xuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLmNvbnRyb2xDaGFuZ2VFbWl0dGVyKCk7XG4gIH1cblxuICBleHRyYVZhbGlkYXRpb24oYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAvLyBWZXJpZmljYSBzZSBqw6EgcG9zc3VpIGFsZ3VtIGVycm9yIHBhdHRlcm4gcGFkcsOjby5cbiAgICB0aGlzLmVycm9yUGF0dGVybiA9IHRoaXMuZXJyb3JQYXR0ZXJuICE9PSAnVmFsb3IgSW52w6FsaWRvJyA/IHRoaXMuZXJyb3JQYXR0ZXJuIDogJyc7XG5cbiAgICBpZiAobWluRmFpbGVkKHRoaXMubWluLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWF4RmFpbGVkKHRoaXMubWF4LCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXg6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTY3JlZW5WYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsID8gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgOiAnJztcbiAgfVxuXG4gIGhhc0ludmFsaWRDbGFzcygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpICYmXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpICYmXG4gICAgICB0aGlzLmdldFNjcmVlblZhbHVlKCkgIT09ICcnXG4gICAgKTtcbiAgfVxuXG4gIGhhc0xldHRlcnModmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9bYS16QS1aOjsrPV/CtGBeflwiJz8hQCMkJcKoJiooKT48e33Dp8OHXFxbXFxdL1xcXFx8XSsvKTtcbiAgfVxuXG4gIGlzVmFsaWROdW1iZXIoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIC0gZXZlbnQua2V5IG7Do28gZXhpc3RpYSBlbSBhbGd1bnMgYnJvd3NlcnMsIGNvbW8gU2Ftc3VuZyBicm93c2VyIGUgRmlyZWZveC5cbiAgICBjb25zdCBrZXlWYWx1ZSA9IDxhbnk+U3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCk7XG4gICAgY29uc3QgdmFsaWRLZXkgPSBldmVudC53aGljaCAhPT0gOCAmJiBldmVudC53aGljaCAhPT0gMDtcblxuICAgIHJldHVybiAhdGhpcy5oYXNMZXR0ZXJzKGtleVZhbHVlKSAmJiB2YWxpZEtleTtcbiAgfVxuXG4gIC8vIGZ1bsOnw6NvIHJlc3BvbnPDoXZlbCBwb3IgYWRpY2lvbmFyIG9zIHplcm9lcyBjb20gYXMgY2FzYSBkZWNpbWFpcyBhbyBzYWlyIGRvIGNhbXBvLlxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaGFzTGV0dGVycyh2YWx1ZSkgfHwgdGhpcy5jb250YWluc01vcmVUaGFuT25lRGVjaW1hbFNlcGFyYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmNhbGxPbkNoYW5nZSh1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcih2YWx1ZSk7XG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdFRvVmlld1ZhbHVlKHZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKSk7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgICB0aGlzLmNvbnRyb2xDaGFuZ2VFbWl0dGVyKCk7XG4gIH1cblxuICBvbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgLy8gQXR1YWxpemEgdmFsb3IgZGEgdmFyacOhdmVsIHF1ZSBzZXLDoSB1c2FkYSBwYXJhIHZlcmlmaWNhciBzZSBvIGNhbXBvIHRldmUgYWx0ZXJhw6fDo29cbiAgICB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlID0gdGhpcy5nZXRTY3JlZW5WYWx1ZSgpO1xuXG4gICAgLy8gRGlzcGFyYSBldmVudG8gcXVhbmRvIG8gdXN1w6FyaW8gZW50cmFyIG5vIGNhbXBvXG4gICAgLy8gRXN0ZSBldmVudG8gdGFtYsOpbSDDqSBkaXNwYXJhZG8gcXVhbmRvIG8gY2FtcG8gaW5pY2lhIGNvbSBmb2NvLlxuICAgIHRoaXMuZW50ZXIuZW1pdCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcblxuICAgIGxldCBtb2RlbFZhbHVlO1xuXG4gICAgLy8gLSBCcm93c2VycyBuYXRpdm9zIGRvIEFuZHJvaWQgZXg6IFNhbXN1bmcgQnJvd3Nlci5cbiAgICBpZiAodGhpcy5pc0tleWJvYXJkQW5kcm9pZCkge1xuICAgICAgdGhpcy5vbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50KTtcbiAgICB9XG5cbiAgICBtb2RlbFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgIG1vZGVsVmFsdWUgPSB0aGlzLmFkZFplcm9CZWZvcmUobW9kZWxWYWx1ZSk7XG4gICAgY29uc3Qgdmlld1ZhbHVlID0gdGhpcy5mb3JtYXRNYXNrKG1vZGVsVmFsdWUpO1xuXG4gICAgLy8gdmFsaWRhw6fDo28gcGFyYSBuw6NvIHF1ZWJyYXIgSUUgY29tIHBsYWNlaG9sZGVyIGRlZmluaWRvIGUgSW5wdXQgdmF6aW9cbiAgICBpZiAodmlld1ZhbHVlKSB7XG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh2aWV3VmFsdWUpO1xuICAgICAgdGhpcy5zZXRDdXJzb3JJbnB1dChldmVudCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsT25DaGFuZ2UodGhpcy5mb3JtYXRUb01vZGVsVmFsdWUobW9kZWxWYWx1ZSkpO1xuICB9XG5cbiAgb25JbnB1dEtleWJvYXJkQW5kcm9pZChldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICBjb25zdCBoYXNMZXR0ZXJzID0gdGhpcy5oYXNMZXR0ZXJzKGlucHV0VmFsdWUpO1xuXG4gICAgaWYgKGhhc0xldHRlcnMpIHtcbiAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGlucHV0VmFsdWUucmVwbGFjZShoYXNMZXR0ZXJzWzBdLCAnJykpO1xuXG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydCAtIDE7XG4gICAgICBjb25zdCBrZXkgPSBpbnB1dFZhbHVlLmNoYXJBdChwb3NpdGlvbik7XG5cbiAgICAgIHRoaXMuc2V0UG9zaXRpb25WYWx1ZShldmVudCk7XG5cbiAgICAgIGlmICh0aGlzLmlzVmFsaWRLZXkoZXZlbnQsIGtleSkpIHtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoaW5wdXRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuaXNWYWxpZEtleShldmVudCk7XG4gIH1cblxuICBzZXRQYWRkaW5nSW5wdXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rvckljb25zID0gJy5wby1maWVsZC1pY29uLWNvbnRhaW5lcjpub3QoLnBvLWZpZWxkLWljb24tY29udGFpbmVyLWxlZnQpID4gLnBvLWljb24nO1xuICAgICAgbGV0IGljb25zID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JJY29ucykubGVuZ3RoO1xuICAgICAgaWYgKHRoaXMuY2xlYW4pIHtcbiAgICAgICAgaWNvbnMrKztcbiAgICAgIH1cbiAgICAgIGlmIChpY29ucykge1xuICAgICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtpY29ucyAqIDM2fXB4YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWVNb2RlbCh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmlucHV0RWwpIHtcbiAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICBjb25zdCBmb3JtYXRlZFZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VG9WaWV3VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZShmb3JtYXRlZFZpZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSgnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFcnJvclBhdHRlcm5NZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmVycm9yUGF0dGVybiAhPT0gJycgJiYgdGhpcy5oYXNJbnZhbGlkQ2xhc3MoKSA/IHRoaXMuZXJyb3JQYXR0ZXJuIDogJyc7XG4gIH1cblxuICAvLyByZXNwb25zw6F2ZWwgcG9yIGFkaWNpb25hciAwIGFudGVzIGRhIHZpcmd1bGEgKGRlY2ltYWxTZXBhcmF0b3IpLlxuICBwcml2YXRlIGFkZFplcm9CZWZvcmUodmFsdWUpIHtcbiAgICBjb25zdCBpc0RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuXG4gICAgcmV0dXJuIGlzRGVjaW1hbFNlcGFyYXRvciA/IGAwJHt2YWx1ZX1gIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnRhaW5zQ29tbWEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXModGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgY29uc3QgZm91bmRDb21tYSA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXguZGVjaW1hbCk7XG5cbiAgICByZXR1cm4gISEoZm91bmRDb21tYSAmJiBmb3VuZENvbW1hLmxlbmd0aCA+IDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250cm9sQ2hhbmdlRW1pdHRlcigpIHtcbiAgICBjb25zdCBlbGVtZW50VmFsdWUgPSB0aGlzLmdldFNjcmVlblZhbHVlKCk7XG5cbiAgICAvLyBFbWl0ZSBvIGV2ZW50byBjaGFuZ2UgbWFudWFsbWVudGUgcXVhbmRvIG8gY2FtcG8gw6kgYWx0ZXJhZG9cbiAgICAvLyBFc3RlIGV2ZW50byDDqSBjb250cm9sYWRvIG1hbnVhbG1lbnRlIGRldmlkbyBhbyBwcmV2ZW50RGVmYXVsdCBleGlzdGVudGUgbmEgbcOhc2NhcmFcbiAgICAvLyBlIGRldmlkbyBhbyBjb250cm9sZSBkbyBwLWNsZWFuLCBxdWUgdGFtYsOpbSBwcmVjaXNhIGVtaXRpciBjaGFuZ2VcbiAgICBpZiAoZWxlbWVudFZhbHVlICE9PSB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmZpcmVDaGFuZ2UgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoZWxlbWVudFZhbHVlKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNYXNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyBuZWNlc3PDoXJpbyBwYXJhIG7Do28gYWRpY2lvbmFyIC4gbmFzIGNhc2EgZGVjaW1haXMuXG4gICAgLy8gcG9yIGV4ZW1wbG86IDEyLjM0NSwxMjMuNDUgKGVycmFkbylcbiAgICAvLyAxMi4zNDUsMTIzNDUgKGNvcnJldG8pXG5cbiAgICBpZiAodmFsdWUubWF0Y2godGhpcy5yZWdleC5kZWNpbWFsKSkge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoXFxcXGQpKD89KFxcXFxkezN9KSsoPyFcXFxcZCkke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn0pYCwgJ2cnKTtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UocmVnZXgsIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyg/IVxcZCkpL2csIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VG9Nb2RlbFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMucmVwbGFjZUNvbW1hVG9Eb3QodmFsdWUpO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWUgPyBwYXJzZUZsb2F0KE51bWJlcihmb3JtYXR0ZWRWYWx1ZSkudG9GaXhlZCh0aGlzLmRlY2ltYWxzTGVuZ3RoKSkgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gcGFyc2VkVmFsdWUgPT09IDAgfHwgcGFyc2VkVmFsdWUgPyBwYXJzZWRWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VG9WaWV3VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIC8vIC0gTmVjZXNzw6FyaW8gcGFyYSB0cmF0YXIgdmFsb3JlcyBxdWUgY29udGVuaGFtIGRlY2ltYWxTZXBhcmF0b3JcbiAgICB2YWx1ZSA9IHRoaXMucmVwbGFjZUNvbW1hVG9Eb3QodmFsdWUpO1xuXG4gICAgY29uc3QgbnVtYmVyVmFsdWUgPSBOdW1iZXIodmFsdWUpLnRvRml4ZWQodGhpcy5kZWNpbWFsc0xlbmd0aCk7XG5cbiAgICBjb25zdCB2YWx1ZUJlZm9yZURvdCA9IHRoaXMuZ2V0VmFsdWVCZWZvcmVTZXBhcmF0b3IobnVtYmVyVmFsdWUsICcuJyk7XG4gICAgY29uc3QgdmFsdWVBZnRlckRvdCA9IHRoaXMuZ2V0VmFsdWVBZnRlclNlcGFyYXRvcihudW1iZXJWYWx1ZSwgJy4nKTtcblxuICAgIGNvbnN0IGZvcm1hdGVkTnVtYmVyID0gdGhpcy5mb3JtYXRNYXNrKHZhbHVlQmVmb3JlRG90KTtcblxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm9ybWF0ZWROdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtmb3JtYXRlZE51bWJlcn0ke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn0ke3ZhbHVlQWZ0ZXJEb3R9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UodGhpcy5yZWdleC50aG91c2FuZCwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUFmdGVyU2VwYXJhdG9yKHZhbHVlID0gJycsIHNlcGFyYXRvcikge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzFdIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoc2VwYXJhdG9yKVswXSB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgaGFzTGVzc0RvdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgZG90cyA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXgudGhvdXNhbmQpO1xuICAgICAgY29uc3QgZG90c0xlbmd0aCA9IGRvdHMgJiYgZG90cy5sZW5ndGg7XG5cbiAgICAgIGlmIChkb3RzTGVuZ3RoIDwgdGhpcy5vbGREb3RzTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub2xkRG90c0xlbmd0aCA9IGRvdHNMZW5ndGg7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMub2xkRG90c0xlbmd0aCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNNb3JlRG90KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkb3RzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC50aG91c2FuZCk7XG4gICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cyAmJiBkb3RzLmxlbmd0aDtcblxuICAgICAgaWYgKGRvdHNMZW5ndGggPiB0aGlzLm9sZERvdHNMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gZG90c0xlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhc01pbnVzU2lnbkludmFsaWRQb3NpdGlvbihldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5SXNNaW51c1NpZ24gPSBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgcmV0dXJuIGtleUlzTWludXNTaWduICYmIHNlbGVjdGlvblN0YXJ0ICE9PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludmFsaWRLZXkoZXZlbnQ6IGFueSwgY2hhckNvZGU6IGFueSkge1xuICAgIGNvbnN0IGlzSW52YWxpZE51bWJlciA9ICF0aGlzLmlzVmFsaWROdW1iZXIoZXZlbnQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudmVyaWZ5SW5zZXJ0Q29tbWEoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeVRob3VzYW5kTGVuZ3RoKGV2ZW50KSB8fFxuICAgICAgdGhpcy52ZXJpZnlWYWx1ZUFmdGVyQ29tbWEoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeUluc2VydE1pbnVzU2lnbihldmVudCkgfHxcbiAgICAgIHRoaXMuaGFzTWludXNTaWduSW52YWxpZFBvc2l0aW9uKGV2ZW50KSB8fFxuICAgICAgaXNJbnZhbGlkTnVtYmVyIHx8XG4gICAgICB0aGlzLnZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQpIHx8XG4gICAgICB0aGlzLnZlcmlmeURlY2ltYWxMZW5ndGhJc1plcm9BbmRLZXlQcmVzc2VkSXNDb21tYShjaGFyQ29kZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0dyZWF0ZXJUaGFuVG90YWxMZW5ndGhMaW1pdChkZWNpbWFsc01heExlbmd0aDogbnVtYmVyLCB0aG91c2FuZE1heGxlbmd0aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGRlY2ltYWxzTWF4TGVuZ3RoICsgdGhvdXNhbmRNYXhsZW5ndGggPiBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5ID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgfHwgZXZlbnQuY2hhciA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHBvc2l0aW9uQ3Vyc29yLCB2YWx1ZSkge1xuICAgIGNvbnN0IGluZGV4Q29tbWEgPSB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICBpZiAoaW5kZXhDb21tYSAmJiB0aGlzLmRlY2ltYWxzTGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uQ3Vyc29yID4gaW5kZXhDb21tYTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0OiBhbnkpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnNlbGVjdGlvblN0YXJ0ICE9PSB0YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkS2V5KGV2ZW50OiBhbnksIGtleT86IHN0cmluZykge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCB2YWxpZEtleSA9IGV2ZW50LndoaWNoID09PSA4IHx8IGV2ZW50LndoaWNoID09PSAwO1xuXG4gICAgaWYgKHZhbGlkS2V5ICYmICF0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSkge1xuICAgICAgZXZlbnQua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzSW52YWxpZEtleShldmVudCwgY2hhckNvZGUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWx1ZUJldHdlZW5BbGxvd2VkKHZhbHVlOiBudW1iZXIsIG1heEFsbG93ZWQ6IG51bWJlcikge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IG1heEFsbG93ZWQ7XG4gIH1cblxuICAvLyBRdWFuZG8gZGVjaW1hbHNMZW5ndGggZm9yIDAgbsOjbyBkZXZlIHBlcm1pdGlyIGluZm9ybWFyIHbDrXJndWxhIChkZWNpbWFsU2VwYXJhdG9yKVxuICBwcml2YXRlIHZlcmlmeURlY2ltYWxMZW5ndGhJc1plcm9BbmRLZXlQcmVzc2VkSXNDb21tYShjaGFyQ29kZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSA0NCAmJiB0aGlzLmRlY2ltYWxzTGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlBdXRvRm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsU2VsZWN0aW9uUmFuZ2UodGFyZ2V0OiBhbnksIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpIHtcbiAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT09IDEgJiYgc2VsZWN0aW9uRW5kID09PSAxKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uRW5kICsgMSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgLSAxLCBzZWxlY3Rpb25FbmQgLSAxKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUF0KHZhbHVlLCBpbmRleCwgcmVwbGFjZSkge1xuICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZSArIHZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29tbWFUb0RvdCh2YWx1ZTogc3RyaW5nID0gJycpIHtcbiAgICBpZiAodGhpcy5kZWNpbWFsU2VwYXJhdG9yID09PSAnLCcpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXguZGVjaW1hbCwgJy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IHZpZXdWYWx1ZSA9IHRhcmdldC52YWx1ZTtcblxuICAgIC8vIENhc28gaG91dmVyIG1haXMgLiBkbyBxdWUgYW50ZXJpb3JtZW50ZSBzb21hIG8gdmFsb3IgY29tIDEuXG4gICAgaWYgKHRoaXMuaGFzTW9yZURvdCh2aWV3VmFsdWUpIHx8IHZpZXdWYWx1ZSA9PT0gJzAnICsgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uRW5kICsgMSk7XG4gICAgfVxuXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWVub3MgLiBkbyBxdWUgYW50ZXJpb3JtZW50ZSBzdWJ0cmFpIG8gdmFsb3IgcG9yIDEuXG4gICAgaWYgKHRoaXMuaGFzTGVzc0RvdCh2aWV3VmFsdWUpKSB7XG4gICAgICB0aGlzLnNldEluaXRpYWxTZWxlY3Rpb25SYW5nZSh0YXJnZXQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvblZhbHVlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDE7XG5cbiAgICBpZiAocG9zaXRpb24gPiAwICYmIGV2ZW50LmtleSA9PT0gdGhpcy5taW51c1NpZ24pIHtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbikgKyB2YWx1ZS5zdWJzdHIocG9zaXRpb24gKyAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpZXdWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDdXJzb3JQb3NpdGlvbkJlZm9yZVNlcGFyYXRvcihldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHRhcmdldC52YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVCZWZvcmVTZXBhcmF0b3IgPSB0aGlzLmdldFZhbHVlQmVmb3JlU2VwYXJhdG9yKHRhcmdldC52YWx1ZSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25TdGFydERpZmZlcmVudFNlbGVjdGlvbkVuZCh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPD0gdmFsdWVCZWZvcmVTZXBhcmF0b3IubGVuZ3RoICYmXG4gICAgICB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsLmxlbmd0aCA9PT0gdGhpcy50aG91c2FuZE1heGxlbmd0aCAmJlxuICAgICAgIXRoaXMuaXNLZXlEZWNpbWFsU2VwYXJhdG9yKGV2ZW50KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVRob3VzYW5kTGVuZ3RoKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodGFyZ2V0LnZhbHVlKTtcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25TdGFydERpZmZlcmVudFNlbGVjdGlvbkVuZCh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsLmxlbmd0aCA+PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXG4gICAgICAhdGhpcy5pc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpICYmXG4gICAgICB0aGlzLmlzUG9zaXRpb25BZnRlckRlY2ltYWxTZXBhcmF0b3IodGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gdGhpcy5kZWNpbWFsc0xlbmd0aCwgdGFyZ2V0LnZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUluc2VydENvbW1hKGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0NvbW1hID0gdGhpcy5jb250YWluc0NvbW1hKGUudGFyZ2V0LnZhbHVlKTtcblxuICAgIHJldHVybiBoYXNDb21tYSAmJiBlLmtleSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlJbnNlcnRNaW51c1NpZ24oZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IGluZGV4TWludXNTaWduID0gdmFsdWUubGFzdEluZGV4T2YodGhpcy5taW51c1NpZ24pICE9PSAtMTtcbiAgICBjb25zdCBwb3NpdGlvbk1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKCctJyk7XG4gICAgY29uc3Qgb2NjdXJhbmNlc01pbnVzU2lnbiA9IHZhbHVlLm1hdGNoKG5ldyBSZWdFeHAoJy0nLCAnZycpKTtcblxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkICYmIGluZGV4TWludXNTaWduICYmIG9jY3VyYW5jZXNNaW51c1NpZ24ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5yZXBsYWNlQXQodmFsdWUsIHBvc2l0aW9uTWludXNTaWduLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBpbmRleE1pbnVzU2lnbiAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlWYWx1ZUFmdGVyQ29tbWEoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IHZhbHVlQWZ0ZXJTZXBhcmF0b3IgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IodmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHNlbGVjdGlvblN0YXJ0LCB2YWx1ZSkgJiYgdmFsdWVBZnRlclNlcGFyYXRvci5sZW5ndGggPj0gdGhpcy5kZWNpbWFsc0xlbmd0aFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
3
|
+
import { PoLanguageService } from '../../../services/po-language/po-language.service';
|
|
4
|
+
import { minFailed, maxFailed } from '../validators';
|
|
5
|
+
import { convertToInt } from '../../../utils/util';
|
|
6
|
+
import { PoInputBaseComponent } from '../po-input/po-input-base.component';
|
|
7
|
+
const poDecimalDefaultDecimalsLength = 2;
|
|
8
|
+
const poDecimalDefaultThousandMaxlength = 13;
|
|
9
|
+
const poDecimalMaxDecimalsLength = 15;
|
|
10
|
+
const poDecimalTotalLengthLimit = 16;
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @docsExtends PoInputBaseComponent
|
|
14
|
+
*
|
|
15
|
+
* @description
|
|
16
|
+
*
|
|
17
|
+
* <br>
|
|
18
|
+
* - O `po-decimal` é um *input* específico para receber apenas números decimais, por isso recebe as seguintes características:
|
|
19
|
+
* + Aceita apenas números;
|
|
20
|
+
* + Utiliza ',' como separador de decimal;
|
|
21
|
+
* + Utiliza '.' para separação de milhar;
|
|
22
|
+
* + É possível configurar a quantidade de casas decimais e a quantidade de digitos do campo.
|
|
23
|
+
*
|
|
24
|
+
* > **Importante:**
|
|
25
|
+
* Atualmente o JavaScript limita-se a um conjunto de dados de `32 bits`, e para que os valores comportem-se devidamente,
|
|
26
|
+
* o `po-decimal` contém um tratamento que limita em 16 o número total de casas antes e após a vírgula.
|
|
27
|
+
* Veja abaixo as demais regras nas documentações de `p-decimals-length` e `p-thousand-maxlength`.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
*
|
|
31
|
+
* <example name="po-decimal-basic" title="PO Decimal Basic">
|
|
32
|
+
* <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.html"> </file>
|
|
33
|
+
* <file name="sample-po-decimal-basic/sample-po-decimal-basic.component.ts"> </file>
|
|
34
|
+
* </example>
|
|
35
|
+
*
|
|
36
|
+
* <example name="po-decimal-labs" title="PO Decimal Labs">
|
|
37
|
+
* <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.html"> </file>
|
|
38
|
+
* <file name="sample-po-decimal-labs/sample-po-decimal-labs.component.ts"> </file>
|
|
39
|
+
* </example>
|
|
40
|
+
*
|
|
41
|
+
* <example name="po-decimal-hourly-wage" title="PO Decimal - Hourly Wage">
|
|
42
|
+
* <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.html"> </file>
|
|
43
|
+
* <file name="sample-po-decimal-hourly-wage/sample-po-decimal-hourly-wage.component.ts"> </file>
|
|
44
|
+
* </example>
|
|
45
|
+
*
|
|
46
|
+
* <example name="po-decimal-hourly-wage-reactive-form" title="PO Decimal - Hourly Wage Reactive Form">
|
|
47
|
+
* <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.html"> </file>
|
|
48
|
+
* <file name="sample-po-decimal-hourly-wage-reactive-form/sample-po-decimal-hourly-wage-reactive-form.component.ts"> </file>
|
|
49
|
+
* </example>
|
|
50
|
+
*/
|
|
51
|
+
export class PoDecimalComponent extends PoInputBaseComponent {
|
|
52
|
+
constructor(el, poLanguageService, cd) {
|
|
53
|
+
super(cd);
|
|
54
|
+
this.el = el;
|
|
55
|
+
this.poLanguageService = poLanguageService;
|
|
56
|
+
this._decimalsLength = poDecimalDefaultDecimalsLength;
|
|
57
|
+
this._thousandMaxlength = poDecimalDefaultThousandMaxlength;
|
|
58
|
+
this.fireChange = false;
|
|
59
|
+
this.isKeyboardAndroid = false;
|
|
60
|
+
this.minusSign = '-';
|
|
61
|
+
this.oldDotsLength = null;
|
|
62
|
+
this.regex = {
|
|
63
|
+
thousand: new RegExp('\\' + ',', 'g'),
|
|
64
|
+
decimal: new RegExp('\\' + '.', 'g')
|
|
65
|
+
};
|
|
66
|
+
this.isKeyboardAndroid = !!navigator.userAgent.match(/Android/i);
|
|
67
|
+
}
|
|
68
|
+
get autocomplete() {
|
|
69
|
+
return this.noAutocomplete ? 'off' : 'on';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @optional
|
|
73
|
+
*
|
|
74
|
+
* @description
|
|
75
|
+
*
|
|
76
|
+
* Quantidade máxima de casas decimais.
|
|
77
|
+
*
|
|
78
|
+
* > **Importante:**
|
|
79
|
+
* - O valor máximo permitido é 15;
|
|
80
|
+
* - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
|
|
81
|
+
* - Esta propriedade sobrepõe apenas o valor **padrão** de `p-thousand-maxlength`;
|
|
82
|
+
* - Caso `p-thousand-maxlength` tenha um valor definido, esta propriedade poderá receber apenas o valor restante do limite total (16).
|
|
83
|
+
*
|
|
84
|
+
* @default `2`
|
|
85
|
+
*/
|
|
86
|
+
set decimalsLength(value) {
|
|
87
|
+
let decimalsLength = convertToInt(value);
|
|
88
|
+
decimalsLength = this.isValueBetweenAllowed(decimalsLength, poDecimalMaxDecimalsLength)
|
|
89
|
+
? decimalsLength
|
|
90
|
+
: poDecimalDefaultDecimalsLength;
|
|
91
|
+
if (this.isGreaterThanTotalLengthLimit(decimalsLength, this.thousandMaxlength)) {
|
|
92
|
+
this.thousandMaxlength = poDecimalTotalLengthLimit - decimalsLength;
|
|
93
|
+
}
|
|
94
|
+
this._decimalsLength = decimalsLength;
|
|
95
|
+
}
|
|
96
|
+
get decimalsLength() {
|
|
97
|
+
return this._decimalsLength;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @optional
|
|
101
|
+
*
|
|
102
|
+
* @description
|
|
103
|
+
*
|
|
104
|
+
* Quantidade máxima de dígitos antes do separador decimal.
|
|
105
|
+
*
|
|
106
|
+
* > **Importante:**
|
|
107
|
+
* - O valor máximo permitido é 13;
|
|
108
|
+
* - A soma total de `p-decimals-length` com `p-thousand-maxlength` limita-se à 16;
|
|
109
|
+
* - Esta propriedade sobrepõe o valor definido em `p-decimals-length`.
|
|
110
|
+
*
|
|
111
|
+
* @default `13`
|
|
112
|
+
*/
|
|
113
|
+
set thousandMaxlength(value) {
|
|
114
|
+
let thousandMaxlength = convertToInt(value);
|
|
115
|
+
if (this.decimalsLength > poDecimalDefaultDecimalsLength && !thousandMaxlength) {
|
|
116
|
+
thousandMaxlength = poDecimalTotalLengthLimit - this.decimalsLength;
|
|
117
|
+
}
|
|
118
|
+
thousandMaxlength = this.isValueBetweenAllowed(thousandMaxlength, poDecimalDefaultThousandMaxlength)
|
|
119
|
+
? thousandMaxlength
|
|
120
|
+
: poDecimalDefaultThousandMaxlength;
|
|
121
|
+
if (this.isGreaterThanTotalLengthLimit(this.decimalsLength, thousandMaxlength)) {
|
|
122
|
+
this.decimalsLength = poDecimalTotalLengthLimit - thousandMaxlength;
|
|
123
|
+
}
|
|
124
|
+
this._thousandMaxlength = thousandMaxlength;
|
|
125
|
+
}
|
|
126
|
+
get thousandMaxlength() {
|
|
127
|
+
return this._thousandMaxlength;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @optional
|
|
131
|
+
*
|
|
132
|
+
* @description
|
|
133
|
+
*
|
|
134
|
+
* Informa o locale(país) para a formatação do valor.
|
|
135
|
+
* Por padrão o valor será configurado segundo a o módulo [`I18n`](documentation/po-i18n)
|
|
136
|
+
*
|
|
137
|
+
* > Para ver quais linguagens suportadas acesse [`I18n`](documentation/po-i18n)
|
|
138
|
+
*
|
|
139
|
+
*/
|
|
140
|
+
set locale(locale) {
|
|
141
|
+
this._locale = locale;
|
|
142
|
+
this.setNumbersSeparators();
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* @optional
|
|
146
|
+
*
|
|
147
|
+
* @description
|
|
148
|
+
*
|
|
149
|
+
* Valor mínimo.
|
|
150
|
+
*/
|
|
151
|
+
set min(value) {
|
|
152
|
+
if (!isNaN(value)) {
|
|
153
|
+
this._min = value;
|
|
154
|
+
this.validateModel();
|
|
155
|
+
}
|
|
156
|
+
else if (!value) {
|
|
157
|
+
this._min = undefined;
|
|
158
|
+
this.validateModel();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
get min() {
|
|
162
|
+
return this._min;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* @optional
|
|
166
|
+
*
|
|
167
|
+
* @description
|
|
168
|
+
*
|
|
169
|
+
* Valor máximo.
|
|
170
|
+
*/
|
|
171
|
+
set max(value) {
|
|
172
|
+
if (!isNaN(value)) {
|
|
173
|
+
this._max = value;
|
|
174
|
+
this.validateModel();
|
|
175
|
+
}
|
|
176
|
+
else if (!value) {
|
|
177
|
+
this._max = undefined;
|
|
178
|
+
this.validateModel();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
get max() {
|
|
182
|
+
return this._max;
|
|
183
|
+
}
|
|
184
|
+
ngOnInit() {
|
|
185
|
+
this.setNumbersSeparators();
|
|
186
|
+
}
|
|
187
|
+
setNumbersSeparators() {
|
|
188
|
+
const { decimalSeparator, thousandSeparator } = this.poLanguageService.getNumberSeparators(this._locale);
|
|
189
|
+
this.decimalSeparator = decimalSeparator;
|
|
190
|
+
this.thousandSeparator = thousandSeparator;
|
|
191
|
+
this.regex = {
|
|
192
|
+
thousand: new RegExp('\\' + thousandSeparator, 'g'),
|
|
193
|
+
decimal: new RegExp('\\' + decimalSeparator, 'g')
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
ngAfterViewInit() {
|
|
197
|
+
this.verifyAutoFocus();
|
|
198
|
+
this.setPaddingInput();
|
|
199
|
+
}
|
|
200
|
+
clear(value) {
|
|
201
|
+
this.callOnChange(value);
|
|
202
|
+
this.controlChangeEmitter();
|
|
203
|
+
}
|
|
204
|
+
extraValidation(abstractControl) {
|
|
205
|
+
// Verifica se já possui algum error pattern padrão.
|
|
206
|
+
this.errorPattern = this.errorPattern !== 'Valor Inválido' ? this.errorPattern : '';
|
|
207
|
+
if (minFailed(this.min, abstractControl.value)) {
|
|
208
|
+
return {
|
|
209
|
+
min: {
|
|
210
|
+
valid: false
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
if (maxFailed(this.max, abstractControl.value)) {
|
|
215
|
+
return {
|
|
216
|
+
max: {
|
|
217
|
+
valid: false
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
focus() {
|
|
224
|
+
if (!this.disabled) {
|
|
225
|
+
this.inputEl.nativeElement.focus();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
getScreenValue() {
|
|
229
|
+
return this.inputEl ? this.inputEl.nativeElement.value : '';
|
|
230
|
+
}
|
|
231
|
+
hasInvalidClass() {
|
|
232
|
+
return (this.el.nativeElement.classList.contains('ng-invalid') &&
|
|
233
|
+
this.el.nativeElement.classList.contains('ng-dirty') &&
|
|
234
|
+
this.getScreenValue() !== '');
|
|
235
|
+
}
|
|
236
|
+
hasLetters(value = '') {
|
|
237
|
+
return value.match(/[a-zA-Z:;+=_´`^~"'?!@#$%¨&*()><{}çÇ\[\]/\\|]+/);
|
|
238
|
+
}
|
|
239
|
+
isValidNumber(event) {
|
|
240
|
+
// - event.key não existia em alguns browsers, como Samsung browser e Firefox.
|
|
241
|
+
const keyValue = String.fromCharCode(event.which);
|
|
242
|
+
const validKey = event.which !== 8 && event.which !== 0;
|
|
243
|
+
return !this.hasLetters(keyValue) && validKey;
|
|
244
|
+
}
|
|
245
|
+
// função responsável por adicionar os zeroes com as casa decimais ao sair do campo.
|
|
246
|
+
onBlur(event) {
|
|
247
|
+
var _a;
|
|
248
|
+
(_a = this.onTouched) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
249
|
+
const value = event.target.value;
|
|
250
|
+
if (value) {
|
|
251
|
+
if (this.hasLetters(value) || this.containsMoreThanOneDecimalSeparator(value)) {
|
|
252
|
+
this.setViewValue('');
|
|
253
|
+
this.callOnChange(undefined);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const valueWithoutThousandSeparator = this.formatValueWithoutThousandSeparator(value);
|
|
257
|
+
this.setViewValue(this.formatToViewValue(valueWithoutThousandSeparator));
|
|
258
|
+
}
|
|
259
|
+
this.blur.emit();
|
|
260
|
+
this.controlChangeEmitter();
|
|
261
|
+
}
|
|
262
|
+
onFocus(event) {
|
|
263
|
+
// Atualiza valor da variável que será usada para verificar se o campo teve alteração
|
|
264
|
+
this.valueBeforeChange = this.getScreenValue();
|
|
265
|
+
// Dispara evento quando o usuário entrar no campo
|
|
266
|
+
// Este evento também é disparado quando o campo inicia com foco.
|
|
267
|
+
this.enter.emit();
|
|
268
|
+
}
|
|
269
|
+
onInput(event) {
|
|
270
|
+
const selectionStart = event.target.selectionStart;
|
|
271
|
+
const selectionEnd = event.target.selectionEnd;
|
|
272
|
+
let modelValue;
|
|
273
|
+
// - Browsers nativos do Android ex: Samsung Browser.
|
|
274
|
+
if (this.isKeyboardAndroid) {
|
|
275
|
+
this.onInputKeyboardAndroid(event);
|
|
276
|
+
}
|
|
277
|
+
modelValue = this.formatValueWithoutThousandSeparator(event.target.value);
|
|
278
|
+
modelValue = this.addZeroBefore(modelValue);
|
|
279
|
+
const viewValue = this.formatMask(modelValue);
|
|
280
|
+
// validação para não quebrar IE com placeholder definido e Input vazio
|
|
281
|
+
if (viewValue) {
|
|
282
|
+
this.setViewValue(viewValue);
|
|
283
|
+
this.setCursorInput(event, selectionStart, selectionEnd);
|
|
284
|
+
}
|
|
285
|
+
this.callOnChange(this.formatToModelValue(modelValue));
|
|
286
|
+
}
|
|
287
|
+
onInputKeyboardAndroid(event) {
|
|
288
|
+
const inputValue = event.target.value;
|
|
289
|
+
const selectionStart = event.target.selectionStart;
|
|
290
|
+
const hasLetters = this.hasLetters(inputValue);
|
|
291
|
+
if (hasLetters) {
|
|
292
|
+
this.setViewValue(inputValue.replace(hasLetters[0], ''));
|
|
293
|
+
return event.preventDefault();
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
const position = selectionStart - 1;
|
|
297
|
+
const key = inputValue.charAt(position);
|
|
298
|
+
this.setPositionValue(event);
|
|
299
|
+
if (this.isValidKey(event, key)) {
|
|
300
|
+
this.setViewValue(inputValue);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
onKeyPress(event) {
|
|
305
|
+
this.isValidKey(event);
|
|
306
|
+
}
|
|
307
|
+
setPaddingInput() {
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
const selectorIcons = '.po-field-icon-container:not(.po-field-icon-container-left) > .po-icon';
|
|
310
|
+
let icons = this.el.nativeElement.querySelectorAll(selectorIcons).length;
|
|
311
|
+
if (this.clean) {
|
|
312
|
+
icons++;
|
|
313
|
+
}
|
|
314
|
+
if (icons) {
|
|
315
|
+
this.inputEl.nativeElement.style.paddingRight = `${icons * 36}px`;
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
writeValueModel(value) {
|
|
320
|
+
if (this.inputEl) {
|
|
321
|
+
if (value || value === 0) {
|
|
322
|
+
const formatedViewValue = this.formatToViewValue(value);
|
|
323
|
+
this.setViewValue(formatedViewValue);
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
this.setViewValue('');
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (value) {
|
|
330
|
+
this.change.emit(value);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
getErrorPatternMessage() {
|
|
334
|
+
return this.errorPattern !== '' && this.hasInvalidClass() ? this.errorPattern : '';
|
|
335
|
+
}
|
|
336
|
+
// responsável por adicionar 0 antes da virgula (decimalSeparator).
|
|
337
|
+
addZeroBefore(value) {
|
|
338
|
+
const isDecimalSeparator = value === this.decimalSeparator;
|
|
339
|
+
return isDecimalSeparator ? `0${value}` : value;
|
|
340
|
+
}
|
|
341
|
+
containsComma(value) {
|
|
342
|
+
return value.includes(this.decimalSeparator);
|
|
343
|
+
}
|
|
344
|
+
containsMoreThanOneDecimalSeparator(value = '') {
|
|
345
|
+
const foundComma = value.match(this.regex.decimal);
|
|
346
|
+
return !!(foundComma && foundComma.length > 1);
|
|
347
|
+
}
|
|
348
|
+
controlChangeEmitter() {
|
|
349
|
+
const elementValue = this.getScreenValue();
|
|
350
|
+
// Emite o evento change manualmente quando o campo é alterado
|
|
351
|
+
// Este evento é controlado manualmente devido ao preventDefault existente na máscara
|
|
352
|
+
// e devido ao controle do p-clean, que também precisa emitir change
|
|
353
|
+
if (elementValue !== this.valueBeforeChange) {
|
|
354
|
+
this.fireChange = true;
|
|
355
|
+
setTimeout(() => {
|
|
356
|
+
this.change.emit(elementValue);
|
|
357
|
+
}, 200);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
formatMask(value) {
|
|
361
|
+
// necessário para não adicionar . nas casa decimais.
|
|
362
|
+
// por exemplo: 12.345,123.45 (errado)
|
|
363
|
+
// 12.345,12345 (correto)
|
|
364
|
+
if (value.match(this.regex.decimal)) {
|
|
365
|
+
const regex = new RegExp(`(\\d)(?=(\\d{3})+(?!\\d)${this.decimalSeparator})`, 'g');
|
|
366
|
+
return value.toString().replace(regex, `$1${this.thousandSeparator}`);
|
|
367
|
+
}
|
|
368
|
+
return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${this.thousandSeparator}`);
|
|
369
|
+
}
|
|
370
|
+
formatToModelValue(value) {
|
|
371
|
+
const formattedValue = this.replaceCommaToDot(value);
|
|
372
|
+
const parsedValue = formattedValue ? parseFloat(Number(formattedValue).toFixed(this.decimalsLength)) : undefined;
|
|
373
|
+
return parsedValue === 0 || parsedValue ? parsedValue : undefined;
|
|
374
|
+
}
|
|
375
|
+
formatToViewValue(value) {
|
|
376
|
+
// - Necessário para tratar valores que contenham decimalSeparator
|
|
377
|
+
value = this.replaceCommaToDot(value);
|
|
378
|
+
const numberValue = Number(value).toFixed(this.decimalsLength);
|
|
379
|
+
const valueBeforeDot = this.getValueBeforeSeparator(numberValue, '.');
|
|
380
|
+
const valueAfterDot = this.getValueAfterSeparator(numberValue, '.');
|
|
381
|
+
const formatedNumber = this.formatMask(valueBeforeDot);
|
|
382
|
+
if (this.decimalsLength === 0) {
|
|
383
|
+
return formatedNumber;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
return `${formatedNumber}${this.decimalSeparator}${valueAfterDot}`;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
formatValueWithoutThousandSeparator(value = '') {
|
|
390
|
+
return value.toString().replace(this.regex.thousand, '');
|
|
391
|
+
}
|
|
392
|
+
getValueAfterSeparator(value = '', separator) {
|
|
393
|
+
return value.split(separator)[1] || '';
|
|
394
|
+
}
|
|
395
|
+
getValueBeforeSeparator(value = '', separator) {
|
|
396
|
+
return value.split(separator)[0] || '';
|
|
397
|
+
}
|
|
398
|
+
hasLessDot(value) {
|
|
399
|
+
if (value) {
|
|
400
|
+
const dots = value.match(this.regex.thousand);
|
|
401
|
+
const dotsLength = dots && dots.length;
|
|
402
|
+
if (dotsLength < this.oldDotsLength) {
|
|
403
|
+
this.oldDotsLength = dotsLength;
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
if (!value) {
|
|
408
|
+
this.oldDotsLength = null;
|
|
409
|
+
}
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
hasMoreDot(value) {
|
|
413
|
+
if (value) {
|
|
414
|
+
const dots = value.match(this.regex.thousand);
|
|
415
|
+
const dotsLength = dots && dots.length;
|
|
416
|
+
if (dotsLength > this.oldDotsLength) {
|
|
417
|
+
this.oldDotsLength = dotsLength;
|
|
418
|
+
return true;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
if (!value) {
|
|
422
|
+
this.oldDotsLength = null;
|
|
423
|
+
}
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
hasMinusSignInvalidPosition(event) {
|
|
427
|
+
const keyIsMinusSign = event.key === this.minusSign;
|
|
428
|
+
const selectionStart = event.target.selectionStart;
|
|
429
|
+
return keyIsMinusSign && selectionStart !== 0;
|
|
430
|
+
}
|
|
431
|
+
isInvalidKey(event, charCode) {
|
|
432
|
+
const isInvalidNumber = !this.isValidNumber(event);
|
|
433
|
+
return (this.verifyInsertComma(event) ||
|
|
434
|
+
this.verifyThousandLength(event) ||
|
|
435
|
+
this.verifyValueAfterComma(event) ||
|
|
436
|
+
this.verifyInsertMinusSign(event) ||
|
|
437
|
+
this.hasMinusSignInvalidPosition(event) ||
|
|
438
|
+
isInvalidNumber ||
|
|
439
|
+
this.validateCursorPositionBeforeSeparator(event) ||
|
|
440
|
+
this.verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode));
|
|
441
|
+
}
|
|
442
|
+
isGreaterThanTotalLengthLimit(decimalsMaxLength, thousandMaxlength) {
|
|
443
|
+
return decimalsMaxLength + thousandMaxlength > poDecimalTotalLengthLimit;
|
|
444
|
+
}
|
|
445
|
+
isKeyDecimalSeparator(event) {
|
|
446
|
+
return event.key === this.decimalSeparator || event.char === this.decimalSeparator;
|
|
447
|
+
}
|
|
448
|
+
isPositionAfterDecimalSeparator(positionCursor, value) {
|
|
449
|
+
const indexComma = value && value.indexOf(this.decimalSeparator);
|
|
450
|
+
if (indexComma && this.decimalsLength > 0) {
|
|
451
|
+
return positionCursor > indexComma;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
isSelectionStartDifferentSelectionEnd(target) {
|
|
455
|
+
return target.selectionStart !== target.selectionEnd;
|
|
456
|
+
}
|
|
457
|
+
isValidKey(event, key) {
|
|
458
|
+
const charCode = event.which || event.keyCode;
|
|
459
|
+
const validKey = event.which === 8 || event.which === 0;
|
|
460
|
+
if (validKey && !this.isKeyboardAndroid) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
if (key) {
|
|
464
|
+
event.key = key;
|
|
465
|
+
}
|
|
466
|
+
if (this.isInvalidKey(event, charCode)) {
|
|
467
|
+
event.preventDefault();
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
return true;
|
|
471
|
+
}
|
|
472
|
+
isValueBetweenAllowed(value, maxAllowed) {
|
|
473
|
+
return value >= 0 && value <= maxAllowed;
|
|
474
|
+
}
|
|
475
|
+
// Quando decimalsLength for 0 não deve permitir informar vírgula (decimalSeparator)
|
|
476
|
+
verifyDecimalLengthIsZeroAndKeyPressedIsComma(charCode) {
|
|
477
|
+
return charCode === 44 && this.decimalsLength === 0;
|
|
478
|
+
}
|
|
479
|
+
verifyAutoFocus() {
|
|
480
|
+
if (this.autoFocus) {
|
|
481
|
+
this.focus();
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
setInitialSelectionRange(target, selectionStart, selectionEnd) {
|
|
485
|
+
if (selectionStart === 1 && selectionEnd === 1) {
|
|
486
|
+
return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
|
|
487
|
+
}
|
|
488
|
+
return target.setSelectionRange(selectionStart - 1, selectionEnd - 1);
|
|
489
|
+
}
|
|
490
|
+
replaceAt(value, index, replace) {
|
|
491
|
+
return value.substring(0, index) + replace + value.substring(index + 1);
|
|
492
|
+
}
|
|
493
|
+
replaceCommaToDot(value = '') {
|
|
494
|
+
if (this.decimalSeparator === ',') {
|
|
495
|
+
value = value.toString().replace(this.regex.decimal, '.');
|
|
496
|
+
}
|
|
497
|
+
return value;
|
|
498
|
+
}
|
|
499
|
+
setCursorInput(event, selectionStart, selectionEnd) {
|
|
500
|
+
const target = event.target;
|
|
501
|
+
const viewValue = target.value;
|
|
502
|
+
// Caso houver mais . do que anteriormente soma o valor com 1.
|
|
503
|
+
if (this.hasMoreDot(viewValue) || viewValue === '0' + this.decimalSeparator) {
|
|
504
|
+
return target.setSelectionRange(selectionStart + 1, selectionEnd + 1);
|
|
505
|
+
}
|
|
506
|
+
// Caso houver menos . do que anteriormente subtrai o valor por 1.
|
|
507
|
+
if (this.hasLessDot(viewValue)) {
|
|
508
|
+
this.setInitialSelectionRange(target, selectionStart, selectionEnd);
|
|
509
|
+
}
|
|
510
|
+
return target.setSelectionRange(selectionStart, selectionEnd);
|
|
511
|
+
}
|
|
512
|
+
setPositionValue(event) {
|
|
513
|
+
const value = event.target.value;
|
|
514
|
+
const position = event.target.selectionStart - 1;
|
|
515
|
+
if (position > 0 && event.key === this.minusSign) {
|
|
516
|
+
event.target.value = value.substring(0, position) + value.substr(position + 1);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
setViewValue(value) {
|
|
520
|
+
this.inputEl.nativeElement.value = value;
|
|
521
|
+
}
|
|
522
|
+
validateCursorPositionBeforeSeparator(event) {
|
|
523
|
+
const target = event.target;
|
|
524
|
+
const originalValue = this.formatValueWithoutThousandSeparator(target.value);
|
|
525
|
+
const valueBeforeSeparator = this.getValueBeforeSeparator(target.value, this.decimalSeparator);
|
|
526
|
+
const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
|
|
527
|
+
if (this.isSelectionStartDifferentSelectionEnd(target)) {
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
return (target.selectionStart <= valueBeforeSeparator.length &&
|
|
531
|
+
valueBeforeSeparatorOriginal.length === this.thousandMaxlength &&
|
|
532
|
+
!this.isKeyDecimalSeparator(event));
|
|
533
|
+
}
|
|
534
|
+
verifyThousandLength(event) {
|
|
535
|
+
const target = event.target;
|
|
536
|
+
const originalValue = this.formatValueWithoutThousandSeparator(target.value);
|
|
537
|
+
const valueBeforeSeparatorOriginal = this.getValueBeforeSeparator(originalValue, this.decimalSeparator);
|
|
538
|
+
if (this.isSelectionStartDifferentSelectionEnd(target)) {
|
|
539
|
+
return false;
|
|
540
|
+
}
|
|
541
|
+
return (valueBeforeSeparatorOriginal.length >= this.thousandMaxlength &&
|
|
542
|
+
!this.isKeyDecimalSeparator(event) &&
|
|
543
|
+
this.isPositionAfterDecimalSeparator(target.selectionStart - this.decimalsLength, target.value));
|
|
544
|
+
}
|
|
545
|
+
verifyInsertComma(e) {
|
|
546
|
+
const hasComma = this.containsComma(e.target.value);
|
|
547
|
+
return hasComma && e.key === this.decimalSeparator;
|
|
548
|
+
}
|
|
549
|
+
verifyInsertMinusSign(event) {
|
|
550
|
+
const value = event.target.value;
|
|
551
|
+
const indexMinusSign = value.lastIndexOf(this.minusSign) !== -1;
|
|
552
|
+
const positionMinusSign = value.lastIndexOf('-');
|
|
553
|
+
const occurancesMinusSign = value.match(new RegExp('-', 'g'));
|
|
554
|
+
if (this.isKeyboardAndroid && indexMinusSign && occurancesMinusSign.length > 1) {
|
|
555
|
+
event.target.value = this.replaceAt(value, positionMinusSign, '');
|
|
556
|
+
}
|
|
557
|
+
return indexMinusSign && event.key === this.minusSign;
|
|
558
|
+
}
|
|
559
|
+
verifyValueAfterComma(event) {
|
|
560
|
+
const value = event.target.value;
|
|
561
|
+
const selectionStart = event.target.selectionStart;
|
|
562
|
+
const valueAfterSeparator = this.getValueAfterSeparator(value, this.decimalSeparator);
|
|
563
|
+
return (this.isPositionAfterDecimalSeparator(selectionStart, value) && valueAfterSeparator.length >= this.decimalsLength);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
PoDecimalComponent.decorators = [
|
|
567
|
+
{ type: Component, args: [{
|
|
568
|
+
selector: 'po-decimal',
|
|
569
|
+
template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\r\n <div class=\"po-field-container-content\">\r\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\r\n <po-icon class=\"po-field-icon\" [class.po-field-icon-disabled]=\"disabled\" [p-icon]=\"icon\"></po-icon>\r\n </div>\r\n\r\n <input\r\n #inp\r\n class=\"po-input\"\r\n [attr.max]=\"max\"\r\n [attr.min]=\"min\"\r\n [attr.name]=\"name\"\r\n [autocomplete]=\"autocomplete\"\r\n [class.po-input-icon-left]=\"icon\"\r\n [class.po-input-icon-right]=\"clean\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n inputmode=\"decimal\"\r\n type=\"text\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (input)=\"onInput($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n />\r\n\r\n <div class=\"po-field-icon-container-right\">\r\n <po-clean *ngIf=\"clean && !disabled && !readonly\" [p-element-ref]=\"inputEl\" (p-change-event)=\"clear($event)\">\r\n </po-clean>\r\n </div>\r\n </div>\r\n\r\n <po-field-container-bottom [p-error-pattern]=\"getErrorPatternMessage()\"> </po-field-container-bottom>\r\n</po-field-container>\r\n",
|
|
570
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
571
|
+
providers: [
|
|
572
|
+
{
|
|
573
|
+
provide: NG_VALUE_ACCESSOR,
|
|
574
|
+
useExisting: forwardRef(() => PoDecimalComponent),
|
|
575
|
+
multi: true
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
provide: NG_VALIDATORS,
|
|
579
|
+
useExisting: forwardRef(() => PoDecimalComponent),
|
|
580
|
+
multi: true
|
|
581
|
+
}
|
|
582
|
+
]
|
|
583
|
+
},] }
|
|
584
|
+
];
|
|
585
|
+
PoDecimalComponent.ctorParameters = () => [
|
|
586
|
+
{ type: ElementRef },
|
|
587
|
+
{ type: PoLanguageService },
|
|
588
|
+
{ type: ChangeDetectorRef }
|
|
589
|
+
];
|
|
590
|
+
PoDecimalComponent.propDecorators = {
|
|
591
|
+
inputEl: [{ type: ViewChild, args: ['inp', { read: ElementRef, static: true },] }],
|
|
592
|
+
decimalsLength: [{ type: Input, args: ['p-decimals-length',] }],
|
|
593
|
+
thousandMaxlength: [{ type: Input, args: ['p-thousand-maxlength',] }],
|
|
594
|
+
locale: [{ type: Input, args: ['p-locale',] }],
|
|
595
|
+
min: [{ type: Input, args: ['p-min',] }],
|
|
596
|
+
max: [{ type: Input, args: ['p-max',] }]
|
|
597
|
+
};
|
|
598
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGVjaW1hbC9wby1kZWNpbWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTNFLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0saUNBQWlDLEdBQUcsRUFBRSxDQUFDO0FBQzdDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7QUFrQkgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQTZKMUQsWUFBb0IsRUFBYyxFQUFVLGlCQUFvQyxFQUFFLEVBQXFCO1FBQ3JHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQURRLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUp4RSxvQkFBZSxH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QUMsY0FBYyxDQUFDO1FBQ25ELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0RixPQUFPLENBQ0wsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FDakgsQ0FBQztJQUNKLENBQUM7OztZQXhwQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0Qiw2MENBQTBDO2dCQUMxQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7d0JBQ2pELEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUNqRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7WUEzRUMsVUFBVTtZQU9ILGlCQUFpQjtZQVR4QixpQkFBaUI7OztzQkErRWhCLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7NkJBd0NuRCxLQUFLLFNBQUMsbUJBQW1CO2dDQWdDekIsS0FBSyxTQUFDLHNCQUFzQjtxQkFpQzVCLEtBQUssU0FBQyxVQUFVO2tCQVloQixLQUFLLFNBQUMsT0FBTztrQkF1QmIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBtaW5GYWlsZWQsIG1heEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XHJcbmltcG9ydCB7IFBvSW5wdXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8taW5wdXQvcG8taW5wdXQtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuY29uc3QgcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoID0gMjtcclxuY29uc3QgcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoID0gMTM7XHJcbmNvbnN0IHBvRGVjaW1hbE1heERlY2ltYWxzTGVuZ3RoID0gMTU7XHJcbmNvbnN0IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgPSAxNjtcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAZG9jc0V4dGVuZHMgUG9JbnB1dEJhc2VDb21wb25lbnRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIDxicj5cclxuICogLSBPIGBwby1kZWNpbWFsYCDDqSB1bSAqaW5wdXQqIGVzcGVjw61maWNvIHBhcmEgcmVjZWJlciBhcGVuYXMgbsO6bWVyb3MgZGVjaW1haXMsIHBvciBpc3NvIHJlY2ViZSBhcyBzZWd1aW50ZXMgY2FyYWN0ZXLDrXN0aWNhczpcclxuICogICsgQWNlaXRhIGFwZW5hcyBuw7ptZXJvcztcclxuICogICsgVXRpbGl6YSAnLCcgY29tbyBzZXBhcmFkb3IgZGUgZGVjaW1hbDtcclxuICogICsgVXRpbGl6YSAnLicgcGFyYSBzZXBhcmHDp8OjbyBkZSBtaWxoYXI7XHJcbiAqICArIMOJIHBvc3PDrXZlbCBjb25maWd1cmFyIGEgcXVhbnRpZGFkZSBkZSBjYXNhcyBkZWNpbWFpcyBlIGEgcXVhbnRpZGFkZSBkZSBkaWdpdG9zIGRvIGNhbXBvLlxyXG4gKlxyXG4gKiA+ICoqSW1wb3J0YW50ZToqKlxyXG4gKiBBdHVhbG1lbnRlIG8gSmF2YVNjcmlwdCBsaW1pdGEtc2UgYSB1bSBjb25qdW50byBkZSBkYWRvcyBkZSBgMzIgYml0c2AsIGUgcGFyYSBxdWUgb3MgdmFsb3JlcyBjb21wb3J0ZW0tc2UgZGV2aWRhbWVudGUsXHJcbiAqIG8gYHBvLWRlY2ltYWxgIGNvbnTDqW0gdW0gdHJhdGFtZW50byBxdWUgbGltaXRhIGVtIDE2IG8gbsO6bWVybyB0b3RhbCBkZSBjYXNhcyBhbnRlcyBlIGFww7NzIGEgdsOtcmd1bGEuXHJcbiAqIFZlamEgYWJhaXhvIGFzIGRlbWFpcyByZWdyYXMgbmFzIGRvY3VtZW50YcOnw7VlcyBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGUgYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRlY2ltYWwtYmFzaWNcIiB0aXRsZT1cIlBPIERlY2ltYWwgQmFzaWNcIj5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy9zYW1wbGUtcG8tZGVjaW1hbC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMvc2FtcGxlLXBvLWRlY2ltYWwtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1sYWJzXCIgdGl0bGU9XCJQTyBEZWNpbWFsIExhYnNcIj5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1sYWJzL3NhbXBsZS1wby1kZWNpbWFsLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWxhYnMvc2FtcGxlLXBvLWRlY2ltYWwtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kZWNpbWFsLWhvdXJseS13YWdlXCIgdGl0bGU9XCJQTyBEZWNpbWFsIC0gSG91cmx5IFdhZ2VcIj5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2Uvc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBEZWNpbWFsIC0gSG91cmx5IFdhZ2UgUmVhY3RpdmUgRm9ybVwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kZWNpbWFsLWhvdXJseS13YWdlLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRlY2ltYWwtaG91cmx5LXdhZ2UtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGVjaW1hbC1ob3VybHktd2FnZS1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncG8tZGVjaW1hbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWRlY2ltYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EZWNpbWFsQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGVjaW1hbENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9EZWNpbWFsQ29tcG9uZW50IGV4dGVuZHMgUG9JbnB1dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgX2RlY2ltYWxzTGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xyXG4gIHByaXZhdGUgX3Rob3VzYW5kTWF4bGVuZ3RoPzogbnVtYmVyID0gcG9EZWNpbWFsRGVmYXVsdFRob3VzYW5kTWF4bGVuZ3RoO1xyXG4gIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcclxuICBwcml2YXRlIF9taW4/OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfbWF4PzogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcclxuICBwcml2YXRlIGZpcmVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzS2V5Ym9hcmRBbmRyb2lkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBtaW51c1NpZ246IHN0cmluZyA9ICctJztcclxuICBwcml2YXRlIG9sZERvdHNMZW5ndGggPSBudWxsO1xyXG4gIHByaXZhdGUgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZztcclxuICBwcml2YXRlIHZhbHVlQmVmb3JlQ2hhbmdlOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgcmVnZXggPSB7XHJcbiAgICB0aG91c2FuZDogbmV3IFJlZ0V4cCgnXFxcXCcgKyAnLCcsICdnJyksXHJcbiAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArICcuJywgJ2cnKVxyXG4gIH07XHJcblxyXG4gIGdldCBhdXRvY29tcGxldGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBRdWFudGlkYWRlIG3DoXhpbWEgZGUgY2FzYXMgZGVjaW1haXMuXHJcbiAgICpcclxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxyXG4gICAqIC0gTyB2YWxvciBtw6F4aW1vIHBlcm1pdGlkbyDDqSAxNTtcclxuICAgKiAtIEEgc29tYSB0b3RhbCBkZSBgcC1kZWNpbWFscy1sZW5ndGhgIGNvbSBgcC10aG91c2FuZC1tYXhsZW5ndGhgIGxpbWl0YS1zZSDDoCAxNjtcclxuICAgKiAtIEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIGFwZW5hcyBvIHZhbG9yICoqcGFkcsOjbyoqIGRlIGBwLXRob3VzYW5kLW1heGxlbmd0aGA7XHJcbiAgICogLSBDYXNvIGBwLXRob3VzYW5kLW1heGxlbmd0aGAgdGVuaGEgdW0gdmFsb3IgZGVmaW5pZG8sIGVzdGEgcHJvcHJpZWRhZGUgcG9kZXLDoSByZWNlYmVyIGFwZW5hcyBvIHZhbG9yIHJlc3RhbnRlIGRvIGxpbWl0ZSB0b3RhbCAoMTYpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYDJgXHJcbiAgICovXHJcbiAgQElucHV0KCdwLWRlY2ltYWxzLWxlbmd0aCcpIHNldCBkZWNpbWFsc0xlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgZGVjaW1hbHNMZW5ndGggPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xyXG5cclxuICAgIGRlY2ltYWxzTGVuZ3RoID0gdGhpcy5pc1ZhbHVlQmV0d2VlbkFsbG93ZWQoZGVjaW1hbHNMZW5ndGgsIHBvRGVjaW1hbE1heERlY2ltYWxzTGVuZ3RoKVxyXG4gICAgICA/IGRlY2ltYWxzTGVuZ3RoXHJcbiAgICAgIDogcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoO1xyXG5cclxuICAgIGlmICh0aGlzLmlzR3JlYXRlclRoYW5Ub3RhbExlbmd0aExpbWl0KGRlY2ltYWxzTGVuZ3RoLCB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoKSkge1xyXG4gICAgICB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoID0gcG9EZWNpbWFsVG90YWxMZW5ndGhMaW1pdCAtIGRlY2ltYWxzTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RlY2ltYWxzTGVuZ3RoID0gZGVjaW1hbHNMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVjaW1hbHNMZW5ndGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjaW1hbHNMZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogUXVhbnRpZGFkZSBtw6F4aW1hIGRlIGTDrWdpdG9zIGFudGVzIGRvIHNlcGFyYWRvciBkZWNpbWFsLlxyXG4gICAqXHJcbiAgICogPiAqKkltcG9ydGFudGU6KipcclxuICAgKiAtIE8gdmFsb3IgbcOheGltbyBwZXJtaXRpZG8gw6kgMTM7XHJcbiAgICogLSBBIHNvbWEgdG90YWwgZGUgYHAtZGVjaW1hbHMtbGVuZ3RoYCBjb20gYHAtdGhvdXNhbmQtbWF4bGVuZ3RoYCBsaW1pdGEtc2Ugw6AgMTY7XHJcbiAgICogLSBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRlZmluaWRvIGVtIGBwLWRlY2ltYWxzLWxlbmd0aGAuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgMTNgXHJcbiAgICovXHJcbiAgQElucHV0KCdwLXRob3VzYW5kLW1heGxlbmd0aCcpIHNldCB0aG91c2FuZE1heGxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgdGhvdXNhbmRNYXhsZW5ndGggPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID4gcG9EZWNpbWFsRGVmYXVsdERlY2ltYWxzTGVuZ3RoICYmICF0aG91c2FuZE1heGxlbmd0aCkge1xyXG4gICAgICB0aG91c2FuZE1heGxlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSB0aGlzLmRlY2ltYWxzTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHRob3VzYW5kTWF4bGVuZ3RoID0gdGhpcy5pc1ZhbHVlQmV0d2VlbkFsbG93ZWQodGhvdXNhbmRNYXhsZW5ndGgsIHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aClcclxuICAgICAgPyB0aG91c2FuZE1heGxlbmd0aFxyXG4gICAgICA6IHBvRGVjaW1hbERlZmF1bHRUaG91c2FuZE1heGxlbmd0aDtcclxuXHJcbiAgICBpZiAodGhpcy5pc0dyZWF0ZXJUaGFuVG90YWxMZW5ndGhMaW1pdCh0aGlzLmRlY2ltYWxzTGVuZ3RoLCB0aG91c2FuZE1heGxlbmd0aCkpIHtcclxuICAgICAgdGhpcy5kZWNpbWFsc0xlbmd0aCA9IHBvRGVjaW1hbFRvdGFsTGVuZ3RoTGltaXQgLSB0aG91c2FuZE1heGxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90aG91c2FuZE1heGxlbmd0aCA9IHRob3VzYW5kTWF4bGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRob3VzYW5kTWF4bGVuZ3RoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rob3VzYW5kTWF4bGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIEluZm9ybWEgbyBsb2NhbGUocGHDrXMpIHBhcmEgYSBmb3JtYXRhw6fDo28gZG8gdmFsb3IuXHJcbiAgICogUG9yIHBhZHLDo28gbyB2YWxvciBzZXLDoSBjb25maWd1cmFkbyBzZWd1bmRvIGEgbyBtw7NkdWxvIFtgSTE4bmBdKGRvY3VtZW50YXRpb24vcG8taTE4bilcclxuICAgKlxyXG4gICAqID4gUGFyYSB2ZXIgcXVhaXMgbGluZ3VhZ2VucyBzdXBvcnRhZGFzIGFjZXNzZSBbYEkxOG5gXShkb2N1bWVudGF0aW9uL3BvLWkxOG4pXHJcbiAgICpcclxuICAgKi9cclxuICBASW5wdXQoJ3AtbG9jYWxlJykgc2V0IGxvY2FsZShsb2NhbGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlO1xyXG4gICAgdGhpcy5zZXROdW1iZXJzU2VwYXJhdG9ycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIFZhbG9yIG3DrW5pbW8uXHJcbiAgICovXHJcbiAgQElucHV0KCdwLW1pbicpIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwoKTtcclxuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX21pbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBWYWxvciBtw6F4aW1vLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1tYXgnKSBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xyXG5cclxuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKCk7XHJcbiAgICB9IGVsc2UgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9tYXggPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXg7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSwgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihjZCk7XHJcbiAgICB0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldE51bWJlcnNTZXBhcmF0b3JzKCk7XHJcbiAgfVxyXG5cclxuICBzZXROdW1iZXJzU2VwYXJhdG9ycygpIHtcclxuICAgIGNvbnN0IHsgZGVjaW1hbFNlcGFyYXRvciwgdGhvdXNhbmRTZXBhcmF0b3IgfSA9IHRoaXMucG9MYW5ndWFnZVNlcnZpY2UuZ2V0TnVtYmVyU2VwYXJhdG9ycyh0aGlzLl9sb2NhbGUpO1xyXG4gICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvcjtcclxuICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPSB0aG91c2FuZFNlcGFyYXRvcjtcclxuICAgIHRoaXMucmVnZXggPSB7XHJcbiAgICAgIHRob3VzYW5kOiBuZXcgUmVnRXhwKCdcXFxcJyArIHRob3VzYW5kU2VwYXJhdG9yLCAnZycpLFxyXG4gICAgICBkZWNpbWFsOiBuZXcgUmVnRXhwKCdcXFxcJyArIGRlY2ltYWxTZXBhcmF0b3IsICdnJylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnZlcmlmeUF1dG9Gb2N1cygpO1xyXG4gICAgdGhpcy5zZXRQYWRkaW5nSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKHZhbHVlKSB7XHJcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB0aGlzLmNvbnRyb2xDaGFuZ2VFbWl0dGVyKCk7XHJcbiAgfVxyXG5cclxuICBleHRyYVZhbGlkYXRpb24oYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIC8vIFZlcmlmaWNhIHNlIGrDoSBwb3NzdWkgYWxndW0gZXJyb3IgcGF0dGVybiBwYWRyw6NvLlxyXG4gICAgdGhpcy5lcnJvclBhdHRlcm4gPSB0aGlzLmVycm9yUGF0dGVybiAhPT0gJ1ZhbG9yIEludsOhbGlkbycgPyB0aGlzLmVycm9yUGF0dGVybiA6ICcnO1xyXG5cclxuICAgIGlmIChtaW5GYWlsZWQodGhpcy5taW4sIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtaW46IHtcclxuICAgICAgICAgIHZhbGlkOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF4RmFpbGVkKHRoaXMubWF4LCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbWF4OiB7XHJcbiAgICAgICAgICB2YWxpZDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsID8gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgOiAnJztcclxuICB9XHJcblxyXG4gIGhhc0ludmFsaWRDbGFzcygpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxyXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpICYmXHJcbiAgICAgIHRoaXMuZ2V0U2NyZWVuVmFsdWUoKSAhPT0gJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYXNMZXR0ZXJzKHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9bYS16QS1aOjsrPV/CtGBeflwiJz8hQCMkJcKoJiooKT48e33Dp8OHXFxbXFxdL1xcXFx8XSsvKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWROdW1iZXIoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgLy8gLSBldmVudC5rZXkgbsOjbyBleGlzdGlhIGVtIGFsZ3VucyBicm93c2VycywgY29tbyBTYW1zdW5nIGJyb3dzZXIgZSBGaXJlZm94LlxyXG4gICAgY29uc3Qga2V5VmFsdWUgPSA8YW55PlN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQud2hpY2gpO1xyXG4gICAgY29uc3QgdmFsaWRLZXkgPSBldmVudC53aGljaCAhPT0gOCAmJiBldmVudC53aGljaCAhPT0gMDtcclxuXHJcbiAgICByZXR1cm4gIXRoaXMuaGFzTGV0dGVycyhrZXlWYWx1ZSkgJiYgdmFsaWRLZXk7XHJcbiAgfVxyXG5cclxuICAvLyBmdW7Dp8OjbyByZXNwb25zw6F2ZWwgcG9yIGFkaWNpb25hciBvcyB6ZXJvZXMgY29tIGFzIGNhc2EgZGVjaW1haXMgYW8gc2FpciBkbyBjYW1wby5cclxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQ/LigpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0xldHRlcnModmFsdWUpIHx8IHRoaXMuY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoJycpO1xyXG4gICAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvciA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodmFsdWUpO1xyXG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdFRvVmlld1ZhbHVlKHZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcclxuICAgIHRoaXMuY29udHJvbENoYW5nZUVtaXR0ZXIoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIC8vIEF0dWFsaXphIHZhbG9yIGRhIHZhcmnDoXZlbCBxdWUgc2Vyw6EgdXNhZGEgcGFyYSB2ZXJpZmljYXIgc2UgbyBjYW1wbyB0ZXZlIGFsdGVyYcOnw6NvXHJcbiAgICB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlID0gdGhpcy5nZXRTY3JlZW5WYWx1ZSgpO1xyXG5cclxuICAgIC8vIERpc3BhcmEgZXZlbnRvIHF1YW5kbyBvIHVzdcOhcmlvIGVudHJhciBubyBjYW1wb1xyXG4gICAgLy8gRXN0ZSBldmVudG8gdGFtYsOpbSDDqSBkaXNwYXJhZG8gcXVhbmRvIG8gY2FtcG8gaW5pY2lhIGNvbSBmb2NvLlxyXG4gICAgdGhpcy5lbnRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbklucHV0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcclxuXHJcbiAgICBsZXQgbW9kZWxWYWx1ZTtcclxuXHJcbiAgICAvLyAtIEJyb3dzZXJzIG5hdGl2b3MgZG8gQW5kcm9pZCBleDogU2Ftc3VuZyBCcm93c2VyLlxyXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZEFuZHJvaWQpIHtcclxuICAgICAgdGhpcy5vbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RlbFZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhvdXRUaG91c2FuZFNlcGFyYXRvcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgbW9kZWxWYWx1ZSA9IHRoaXMuYWRkWmVyb0JlZm9yZShtb2RlbFZhbHVlKTtcclxuICAgIGNvbnN0IHZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0TWFzayhtb2RlbFZhbHVlKTtcclxuXHJcbiAgICAvLyB2YWxpZGHDp8OjbyBwYXJhIG7Do28gcXVlYnJhciBJRSBjb20gcGxhY2Vob2xkZXIgZGVmaW5pZG8gZSBJbnB1dCB2YXppb1xyXG4gICAgaWYgKHZpZXdWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNldFZpZXdWYWx1ZSh2aWV3VmFsdWUpO1xyXG4gICAgICB0aGlzLnNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmZvcm1hdFRvTW9kZWxWYWx1ZShtb2RlbFZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICBvbklucHV0S2V5Ym9hcmRBbmRyb2lkKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IGhhc0xldHRlcnMgPSB0aGlzLmhhc0xldHRlcnMoaW5wdXRWYWx1ZSk7XHJcblxyXG4gICAgaWYgKGhhc0xldHRlcnMpIHtcclxuICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoaW5wdXRWYWx1ZS5yZXBsYWNlKGhhc0xldHRlcnNbMF0sICcnKSk7XHJcblxyXG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnQgLSAxO1xyXG4gICAgICBjb25zdCBrZXkgPSBpbnB1dFZhbHVlLmNoYXJBdChwb3NpdGlvbik7XHJcblxyXG4gICAgICB0aGlzLnNldFBvc2l0aW9uVmFsdWUoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNWYWxpZEtleShldmVudCwga2V5KSkge1xyXG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGlucHV0VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICB0aGlzLmlzVmFsaWRLZXkoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFkZGluZ0lucHV0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdG9ySWNvbnMgPSAnLnBvLWZpZWxkLWljb24tY29udGFpbmVyOm5vdCgucG8tZmllbGQtaWNvbi1jb250YWluZXItbGVmdCkgPiAucG8taWNvbic7XHJcbiAgICAgIGxldCBpY29ucyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ySWNvbnMpLmxlbmd0aDtcclxuICAgICAgaWYgKHRoaXMuY2xlYW4pIHtcclxuICAgICAgICBpY29ucysrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpY29ucykge1xyXG4gICAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2ljb25zICogMzZ9cHhgO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWVNb2RlbCh2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRFbCkge1xyXG4gICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcclxuICAgICAgICBjb25zdCBmb3JtYXRlZFZpZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VG9WaWV3VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGZvcm1hdGVkVmlld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSgnJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclBhdHRlcm5NZXNzYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JQYXR0ZXJuICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvclBhdHRlcm4gOiAnJztcclxuICB9XHJcblxyXG4gIC8vIHJlc3BvbnPDoXZlbCBwb3IgYWRpY2lvbmFyIDAgYW50ZXMgZGEgdmlyZ3VsYSAoZGVjaW1hbFNlcGFyYXRvcikuXHJcbiAgcHJpdmF0ZSBhZGRaZXJvQmVmb3JlKHZhbHVlKSB7XHJcbiAgICBjb25zdCBpc0RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xyXG5cclxuICAgIHJldHVybiBpc0RlY2ltYWxTZXBhcmF0b3IgPyBgMCR7dmFsdWV9YCA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWluc0NvbW1hKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXModGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnNNb3JlVGhhbk9uZURlY2ltYWxTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBjb25zdCBmb3VuZENvbW1hID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC5kZWNpbWFsKTtcclxuXHJcbiAgICByZXR1cm4gISEoZm91bmRDb21tYSAmJiBmb3VuZENvbW1hLmxlbmd0aCA+IDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250cm9sQ2hhbmdlRW1pdHRlcigpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9IHRoaXMuZ2V0U2NyZWVuVmFsdWUoKTtcclxuXHJcbiAgICAvLyBFbWl0ZSBvIGV2ZW50byBjaGFuZ2UgbWFudWFsbWVudGUgcXVhbmRvIG8gY2FtcG8gw6kgYWx0ZXJhZG9cclxuICAgIC8vIEVzdGUgZXZlbnRvIMOpIGNvbnRyb2xhZG8gbWFudWFsbWVudGUgZGV2aWRvIGFvIHByZXZlbnREZWZhdWx0IGV4aXN0ZW50ZSBuYSBtw6FzY2FyYVxyXG4gICAgLy8gZSBkZXZpZG8gYW8gY29udHJvbGUgZG8gcC1jbGVhbiwgcXVlIHRhbWLDqW0gcHJlY2lzYSBlbWl0aXIgY2hhbmdlXHJcbiAgICBpZiAoZWxlbWVudFZhbHVlICE9PSB0aGlzLnZhbHVlQmVmb3JlQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoZWxlbWVudFZhbHVlKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0TWFzayh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAvLyBuZWNlc3PDoXJpbyBwYXJhIG7Do28gYWRpY2lvbmFyIC4gbmFzIGNhc2EgZGVjaW1haXMuXHJcbiAgICAvLyBwb3IgZXhlbXBsbzogMTIuMzQ1LDEyMy40NSAoZXJyYWRvKVxyXG4gICAgLy8gMTIuMzQ1LDEyMzQ1IChjb3JyZXRvKVxyXG5cclxuICAgIGlmICh2YWx1ZS5tYXRjaCh0aGlzLnJlZ2V4LmRlY2ltYWwpKSB7XHJcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgKFxcXFxkKSg/PShcXFxcZHszfSkrKD8hXFxcXGQpJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9KWAsICdnJyk7XHJcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UocmVnZXgsIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pKyg/IVxcZCkpL2csIGAkMSR7dGhpcy50aG91c2FuZFNlcGFyYXRvcn1gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VG9Nb2RlbFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ29tbWFUb0RvdCh2YWx1ZSk7XHJcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlID8gcGFyc2VGbG9hdChOdW1iZXIoZm9ybWF0dGVkVmFsdWUpLnRvRml4ZWQodGhpcy5kZWNpbWFsc0xlbmd0aCkpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiBwYXJzZWRWYWx1ZSA9PT0gMCB8fCBwYXJzZWRWYWx1ZSA/IHBhcnNlZFZhbHVlIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRUb1ZpZXdWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAvLyAtIE5lY2Vzc8OhcmlvIHBhcmEgdHJhdGFyIHZhbG9yZXMgcXVlIGNvbnRlbmhhbSBkZWNpbWFsU2VwYXJhdG9yXHJcbiAgICB2YWx1ZSA9IHRoaXMucmVwbGFjZUNvbW1hVG9Eb3QodmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IG51bWJlclZhbHVlID0gTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHRoaXMuZGVjaW1hbHNMZW5ndGgpO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlQmVmb3JlRG90ID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihudW1iZXJWYWx1ZSwgJy4nKTtcclxuICAgIGNvbnN0IHZhbHVlQWZ0ZXJEb3QgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IobnVtYmVyVmFsdWUsICcuJyk7XHJcblxyXG4gICAgY29uc3QgZm9ybWF0ZWROdW1iZXIgPSB0aGlzLmZvcm1hdE1hc2sodmFsdWVCZWZvcmVEb3QpO1xyXG5cclxuICAgIGlmICh0aGlzLmRlY2ltYWxzTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmb3JtYXRlZE51bWJlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHtmb3JtYXRlZE51bWJlcn0ke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn0ke3ZhbHVlQWZ0ZXJEb3R9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodmFsdWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXgudGhvdXNhbmQsICcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVBZnRlclNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzFdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih2YWx1ZSA9ICcnLCBzZXBhcmF0b3IpIHtcclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpWzBdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNMZXNzRG90KHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgZG90cyA9IHZhbHVlLm1hdGNoKHRoaXMucmVnZXgudGhvdXNhbmQpO1xyXG4gICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cyAmJiBkb3RzLmxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChkb3RzTGVuZ3RoIDwgdGhpcy5vbGREb3RzTGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gZG90c0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgdGhpcy5vbGREb3RzTGVuZ3RoID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc01vcmVEb3QodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBkb3RzID0gdmFsdWUubWF0Y2godGhpcy5yZWdleC50aG91c2FuZCk7XHJcbiAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzICYmIGRvdHMubGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKGRvdHNMZW5ndGggPiB0aGlzLm9sZERvdHNMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBkb3RzTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLm9sZERvdHNMZW5ndGggPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzTWludXNTaWduSW52YWxpZFBvc2l0aW9uKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGtleUlzTWludXNTaWduID0gZXZlbnQua2V5ID09PSB0aGlzLm1pbnVzU2lnbjtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG5cclxuICAgIHJldHVybiBrZXlJc01pbnVzU2lnbiAmJiBzZWxlY3Rpb25TdGFydCAhPT0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbnZhbGlkS2V5KGV2ZW50OiBhbnksIGNoYXJDb2RlOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzSW52YWxpZE51bWJlciA9ICF0aGlzLmlzVmFsaWROdW1iZXIoZXZlbnQpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudmVyaWZ5SW5zZXJ0Q29tbWEoZXZlbnQpIHx8XHJcbiAgICAgIHRoaXMudmVyaWZ5VGhvdXNhbmRMZW5ndGgoZXZlbnQpIHx8XHJcbiAgICAgIHRoaXMudmVyaWZ5VmFsdWVBZnRlckNvbW1hKGV2ZW50KSB8fFxyXG4gICAgICB0aGlzLnZlcmlmeUluc2VydE1pbnVzU2lnbihldmVudCkgfHxcclxuICAgICAgdGhpcy5oYXNNaW51c1NpZ25JbnZhbGlkUG9zaXRpb24oZXZlbnQpIHx8XHJcbiAgICAgIGlzSW52YWxpZE51bWJlciB8fFxyXG4gICAgICB0aGlzLnZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQpIHx8XHJcbiAgICAgIHRoaXMudmVyaWZ5RGVjaW1hbExlbmd0aElzWmVyb0FuZEtleVByZXNzZWRJc0NvbW1hKGNoYXJDb2RlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNHcmVhdGVyVGhhblRvdGFsTGVuZ3RoTGltaXQoZGVjaW1hbHNNYXhMZW5ndGg6IG51bWJlciwgdGhvdXNhbmRNYXhsZW5ndGg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIGRlY2ltYWxzTWF4TGVuZ3RoICsgdGhvdXNhbmRNYXhsZW5ndGggPiBwb0RlY2ltYWxUb3RhbExlbmd0aExpbWl0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0tleURlY2ltYWxTZXBhcmF0b3IoZXZlbnQpIHtcclxuICAgIHJldHVybiBldmVudC5rZXkgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvciB8fCBldmVudC5jaGFyID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUG9zaXRpb25BZnRlckRlY2ltYWxTZXBhcmF0b3IocG9zaXRpb25DdXJzb3IsIHZhbHVlKSB7XHJcbiAgICBjb25zdCBpbmRleENvbW1hID0gdmFsdWUgJiYgdmFsdWUuaW5kZXhPZih0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xyXG5cclxuICAgIGlmIChpbmRleENvbW1hICYmIHRoaXMuZGVjaW1hbHNMZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBwb3NpdGlvbkN1cnNvciA+IGluZGV4Q29tbWE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0OiBhbnkpIHtcclxuICAgIHJldHVybiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgIT09IHRhcmdldC5zZWxlY3Rpb25FbmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmFsaWRLZXkoZXZlbnQ6IGFueSwga2V5Pzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XHJcbiAgICBjb25zdCB2YWxpZEtleSA9IGV2ZW50LndoaWNoID09PSA4IHx8IGV2ZW50LndoaWNoID09PSAwO1xyXG5cclxuICAgIGlmICh2YWxpZEtleSAmJiAhdGhpcy5pc0tleWJvYXJkQW5kcm9pZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBldmVudC5rZXkgPSBrZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNJbnZhbGlkS2V5KGV2ZW50LCBjaGFyQ29kZSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmFsdWVCZXR3ZWVuQWxsb3dlZCh2YWx1ZTogbnVtYmVyLCBtYXhBbGxvd2VkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IG1heEFsbG93ZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBRdWFuZG8gZGVjaW1hbHNMZW5ndGggZm9yIDAgbsOjbyBkZXZlIHBlcm1pdGlyIGluZm9ybWFyIHbDrXJndWxhIChkZWNpbWFsU2VwYXJhdG9yKVxyXG4gIHByaXZhdGUgdmVyaWZ5RGVjaW1hbExlbmd0aElzWmVyb0FuZEtleVByZXNzZWRJc0NvbW1hKGNoYXJDb2RlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gNDQgJiYgdGhpcy5kZWNpbWFsc0xlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmVyaWZ5QXV0b0ZvY3VzKCkge1xyXG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdGlhbFNlbGVjdGlvblJhbmdlKHRhcmdldDogYW55LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XHJcbiAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT09IDEgJiYgc2VsZWN0aW9uRW5kID09PSAxKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgKyAxLCBzZWxlY3Rpb25FbmQgKyAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQgLSAxLCBzZWxlY3Rpb25FbmQgLSAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVwbGFjZUF0KHZhbHVlLCBpbmRleCwgcmVwbGFjZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcGxhY2VDb21tYVRvRG90KHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgaWYgKHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PT0gJywnKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKHRoaXMucmVnZXguZGVjaW1hbCwgJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEN1cnNvcklucHV0KGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCB2aWV3VmFsdWUgPSB0YXJnZXQudmFsdWU7XHJcblxyXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWFpcyAuIGRvIHF1ZSBhbnRlcmlvcm1lbnRlIHNvbWEgbyB2YWxvciBjb20gMS5cclxuICAgIGlmICh0aGlzLmhhc01vcmVEb3Qodmlld1ZhbHVlKSB8fCB2aWV3VmFsdWUgPT09ICcwJyArIHRoaXMuZGVjaW1hbFNlcGFyYXRvcikge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0ICsgMSwgc2VsZWN0aW9uRW5kICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FzbyBob3V2ZXIgbWVub3MgLiBkbyBxdWUgYW50ZXJpb3JtZW50ZSBzdWJ0cmFpIG8gdmFsb3IgcG9yIDEuXHJcbiAgICBpZiAodGhpcy5oYXNMZXNzRG90KHZpZXdWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5zZXRJbml0aWFsU2VsZWN0aW9uUmFuZ2UodGFyZ2V0LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBvc2l0aW9uVmFsdWUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDE7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID4gMCAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduKSB7XHJcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbikgKyB2YWx1ZS5zdWJzdHIocG9zaXRpb24gKyAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Vmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlQ3Vyc29yUG9zaXRpb25CZWZvcmVTZXBhcmF0b3IoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRob3V0VGhvdXNhbmRTZXBhcmF0b3IodGFyZ2V0LnZhbHVlKTtcclxuICAgIGNvbnN0IHZhbHVlQmVmb3JlU2VwYXJhdG9yID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcih0YXJnZXQudmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XHJcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0YXJnZXQuc2VsZWN0aW9uU3RhcnQgPD0gdmFsdWVCZWZvcmVTZXBhcmF0b3IubGVuZ3RoICYmXHJcbiAgICAgIHZhbHVlQmVmb3JlU2VwYXJhdG9yT3JpZ2luYWwubGVuZ3RoID09PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZlcmlmeVRob3VzYW5kTGVuZ3RoKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aG91dFRob3VzYW5kU2VwYXJhdG9yKHRhcmdldC52YWx1ZSk7XHJcbiAgICBjb25zdCB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsID0gdGhpcy5nZXRWYWx1ZUJlZm9yZVNlcGFyYXRvcihvcmlnaW5hbFZhbHVlLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU3RhcnREaWZmZXJlbnRTZWxlY3Rpb25FbmQodGFyZ2V0KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB2YWx1ZUJlZm9yZVNlcGFyYXRvck9yaWdpbmFsLmxlbmd0aCA+PSB0aGlzLnRob3VzYW5kTWF4bGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmlzS2V5RGVjaW1hbFNlcGFyYXRvcihldmVudCkgJiZcclxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHRhcmdldC5zZWxlY3Rpb25TdGFydCAtIHRoaXMuZGVjaW1hbHNMZW5ndGgsIHRhcmdldC52YWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZlcmlmeUluc2VydENvbW1hKGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGFzQ29tbWEgPSB0aGlzLmNvbnRhaW5zQ29tbWEoZS50YXJnZXQudmFsdWUpO1xyXG5cclxuICAgIHJldHVybiBoYXNDb21tYSAmJiBlLmtleSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2ZXJpZnlJbnNlcnRNaW51c1NpZ24oZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBpbmRleE1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKHRoaXMubWludXNTaWduKSAhPT0gLTE7XHJcbiAgICBjb25zdCBwb3NpdGlvbk1pbnVzU2lnbiA9IHZhbHVlLmxhc3RJbmRleE9mKCctJyk7XHJcbiAgICBjb25zdCBvY2N1cmFuY2VzTWludXNTaWduID0gdmFsdWUubWF0Y2gobmV3IFJlZ0V4cCgnLScsICdnJykpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRBbmRyb2lkICYmIGluZGV4TWludXNTaWduICYmIG9jY3VyYW5jZXNNaW51c1NpZ24ubGVuZ3RoID4gMSkge1xyXG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLnJlcGxhY2VBdCh2YWx1ZSwgcG9zaXRpb25NaW51c1NpZ24sICcnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleE1pbnVzU2lnbiAmJiBldmVudC5rZXkgPT09IHRoaXMubWludXNTaWduO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2ZXJpZnlWYWx1ZUFmdGVyQ29tbWEoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IHZhbHVlQWZ0ZXJTZXBhcmF0b3IgPSB0aGlzLmdldFZhbHVlQWZ0ZXJTZXBhcmF0b3IodmFsdWUsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5pc1Bvc2l0aW9uQWZ0ZXJEZWNpbWFsU2VwYXJhdG9yKHNlbGVjdGlvblN0YXJ0LCB2YWx1ZSkgJiYgdmFsdWVBZnRlclNlcGFyYXRvci5sZW5ndGggPj0gdGhpcy5kZWNpbWFsc0xlbmd0aFxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|