@gipisistemas/ng-core 1.0.67 → 1.0.68
Sign up to get free protection for your applications and to get access to all the features.
- package/assets/styles/colors.scss +261 -0
- package/assets/styles/layout-grid.scss +146 -0
- package/assets/styles/styles.scss +149 -0
- package/assets/styles/theme.scss +22 -0
- package/assets/styles/typography.scss +54 -0
- package/assets/styles/variable.scss +41 -0
- package/bundles/gipisistemas-ng-core.umd.js +28311 -0
- package/bundles/gipisistemas-ng-core.umd.js.map +1 -0
- package/bundles/gipisistemas-ng-core.umd.min.js +66 -0
- package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -0
- package/core/app-messages.d.ts +9 -0
- package/core/app.messages.d.ts +4 -0
- package/core/components/abstract-crud.component.d.ts +27 -0
- package/core/components/abstract-find.component.d.ts +43 -0
- package/core/components/abstract.component.d.ts +23 -0
- package/core/components/alert/alert.component.d.ts +7 -0
- package/core/core.module.d.ts +17 -0
- package/core/custom-breakpoints.d.ts +7 -0
- package/core/enums/local-time.enum.d.ts +5 -0
- package/core/extensions/string.extension.d.ts +3 -0
- package/core/gipi-components/components/abstract-crud.component.d.ts +25 -0
- package/core/gipi-components/components/abstract-find.component.d.ts +73 -0
- package/core/gipi-components/components/abstract.component.d.ts +38 -0
- package/core/gipi-components/decorators/autowired.decorator.d.ts +7 -0
- package/core/gipi-components/enums/sort-direction.enum.d.ts +5 -0
- package/core/gipi-components/interface/abstract-crud.interface.d.ts +5 -0
- package/core/gipi-components/interface/abstract-find.interface.d.ts +12 -0
- package/core/gipi-components/interface/abstract.interface.d.ts +11 -0
- package/core/gipi-components/interface/base-permission.interface.d.ts +9 -0
- package/core/gipi-components/models/abstract-filter.model.d.ts +9 -0
- package/core/gipi-components/models/abstract.model.d.ts +7 -0
- package/core/gipi-components/models/applied-filter.model.d.ts +9 -0
- package/core/gipi-components/models/dto/abstract.dto.d.ts +7 -0
- package/core/gipi-components/models/page-event.model.d.ts +18 -0
- package/core/gipi-components/models/page.model.d.ts +7 -0
- package/core/gipi-components/models/sort.model.d.ts +6 -0
- package/core/gipi-components/services/abstract-crud.service.d.ts +83 -0
- package/core/gipi-components/services/abstract.service.d.ts +19 -0
- package/core/gipi-components/services/base.service.d.ts +35 -0
- package/core/gipi-components/services/file.service.d.ts +6 -0
- package/core/gipi-components/services/session-storage.service.d.ts +8 -0
- package/core/gipi-components/types/generic.type.d.ts +1 -0
- package/core/gipi-components/types/uuid.type.d.ts +1 -0
- package/core/guards/auth.guard.d.ts +11 -0
- package/core/guards/permission.guard.d.ts +14 -0
- package/core/guards/public.guard.d.ts +11 -0
- package/core/interceptors/auth.interceptor.d.ts +9 -0
- package/core/interceptors/error.interceptor.d.ts +11 -0
- package/core/models/abstract.model.d.ts +3 -0
- package/core/models/archive.model.d.ts +4 -0
- package/core/models/authority.model.d.ts +3 -0
- package/core/models/base-user.model.d.ts +12 -0
- package/core/models/dto/abstract.dto.d.ts +2 -0
- package/core/models/dto/api-error.dto.d.ts +9 -0
- package/core/models/dto/api-sub-error.dto.d.ts +7 -0
- package/core/models/dto/chart.dto.d.ts +5 -0
- package/core/models/dto/confirmation.dto.d.ts +10 -0
- package/core/models/dto/dialog.dto.d.ts +36 -0
- package/core/models/dto/filter.dto.d.ts +8 -0
- package/core/models/dto/input-listbox.dto.d.ts +6 -0
- package/core/models/dto/menu.dto.d.ts +15 -0
- package/core/models/dto/message.dto.d.ts +7 -0
- package/core/models/dto/page.dto.d.ts +8 -0
- package/core/models/dto/sort.dto.d.ts +7 -0
- package/core/models/dto/tab.dto.d.ts +12 -0
- package/core/models/dto/table-column.dto.d.ts +21 -0
- package/core/models/dto/table-group-header.dto.d.ts +7 -0
- package/core/models/dto/table-page-event.dto.d.ts +6 -0
- package/core/models/dto/token.dto.d.ts +8 -0
- package/core/models/enums/criteria-operation.enum.d.ts +13 -0
- package/core/models/enums/criteria-sort-direction.enum.d.ts +4 -0
- package/core/models/enums/menu-type.enum.d.ts +6 -0
- package/core/models/enums/radio-button.enum.d.ts +6 -0
- package/core/models/enums/sort-direction.enum.d.ts +4 -0
- package/core/models/multitenant.model.d.ts +4 -0
- package/core/models/permission.model.d.ts +8 -0
- package/core/models/role.model.d.ts +7 -0
- package/core/pipes/local-time.pipe.d.ts +6 -0
- package/core/services/abstract-crud.service.d.ts +15 -0
- package/core/services/abstract-find.service.d.ts +30 -0
- package/core/services/abstract.service.d.ts +13 -0
- package/core/services/authentication.service.d.ts +23 -0
- package/core/services/breakpoint-observer.service.d.ts +9 -0
- package/core/services/confirmation.service.d.ts +8 -0
- package/core/services/dialog.service.d.ts +8 -0
- package/core/services/message.service.d.ts +8 -0
- package/core/services/nav.service.d.ts +16 -0
- package/core/services/svg-register.service.d.ts +22 -0
- package/core/types/local-time.type.d.ts +5 -0
- package/core/types/ng-class.type.d.ts +10 -0
- package/core/utils/array.util.d.ts +14 -0
- package/core/utils/browser.util.d.ts +4 -0
- package/core/utils/currency.util.d.ts +6 -0
- package/core/utils/date.util.d.ts +39 -0
- package/core/utils/document.util.d.ts +11 -0
- package/core/utils/email.util.d.ts +4 -0
- package/core/utils/number.util.d.ts +8 -0
- package/core/utils/object.util.d.ts +20 -0
- package/core/utils/password.util.d.ts +11 -0
- package/core/utils/phone.util.d.ts +13 -0
- package/core/utils/string.util.d.ts +9 -0
- package/core/utils/table-column-builder.d.ts +40 -0
- package/core/utils/time.util.d.ts +9 -0
- package/core/utils/url-params.util.d.ts +7 -0
- package/core/utils/uuid.util.d.ts +5 -0
- package/core/utils/zindex.util.d.ts +7 -0
- package/core.d.ts +88 -0
- package/esm2015/core/app-messages.js +1 -0
- package/esm2015/core/app.messages.js +12 -0
- package/esm2015/core/components/abstract-crud.component.js +97 -0
- package/esm2015/core/components/abstract-find.component.js +189 -0
- package/esm2015/core/components/abstract.component.js +110 -0
- package/esm2015/core/components/alert/alert.component.js +24 -0
- package/esm2015/core/core.module.js +103 -0
- package/esm2015/core/custom-breakpoints.js +87 -0
- package/esm2015/core/enums/local-time.enum.js +6 -0
- package/esm2015/core/extensions/string.extension.js +37 -0
- package/esm2015/core/gipi-components/components/abstract-crud.component.js +110 -0
- package/esm2015/core/gipi-components/components/abstract-find.component.js +471 -0
- package/esm2015/core/gipi-components/components/abstract.component.js +140 -0
- package/esm2015/core/gipi-components/decorators/autowired.decorator.js +47 -0
- package/esm2015/core/gipi-components/enums/sort-direction.enum.js +6 -0
- package/esm2015/core/gipi-components/interface/abstract-crud.interface.js +1 -0
- package/esm2015/core/gipi-components/interface/abstract-find.interface.js +1 -0
- package/esm2015/core/gipi-components/interface/abstract.interface.js +1 -0
- package/esm2015/core/gipi-components/interface/base-permission.interface.js +1 -0
- package/esm2015/core/gipi-components/models/abstract-filter.model.js +3 -0
- package/esm2015/core/gipi-components/models/abstract.model.js +3 -0
- package/esm2015/core/gipi-components/models/applied-filter.model.js +19 -0
- package/esm2015/core/gipi-components/models/dto/abstract.dto.js +3 -0
- package/esm2015/core/gipi-components/models/page-event.model.js +35 -0
- package/esm2015/core/gipi-components/models/page.model.js +7 -0
- package/esm2015/core/gipi-components/models/sort.model.js +7 -0
- package/esm2015/core/gipi-components/services/abstract-crud.service.js +109 -0
- package/esm2015/core/gipi-components/services/abstract.service.js +47 -0
- package/esm2015/core/gipi-components/services/base.service.js +102 -0
- package/esm2015/core/gipi-components/services/file.service.js +51 -0
- package/esm2015/core/gipi-components/services/session-storage.service.js +44 -0
- package/esm2015/core/gipi-components/types/generic.type.js +1 -0
- package/esm2015/core/gipi-components/types/uuid.type.js +1 -0
- package/esm2015/core/guards/auth.guard.js +48 -0
- package/esm2015/core/guards/permission.guard.js +61 -0
- package/esm2015/core/guards/public.guard.js +45 -0
- package/esm2015/core/interceptors/auth.interceptor.js +28 -0
- package/esm2015/core/interceptors/error.interceptor.js +110 -0
- package/esm2015/core/models/abstract.model.js +3 -0
- package/esm2015/core/models/archive.model.js +3 -0
- package/esm2015/core/models/authority.model.js +3 -0
- package/esm2015/core/models/base-user.model.js +8 -0
- package/esm2015/core/models/dto/abstract.dto.js +3 -0
- package/esm2015/core/models/dto/api-error.dto.js +8 -0
- package/esm2015/core/models/dto/api-sub-error.dto.js +4 -0
- package/esm2015/core/models/dto/chart.dto.js +4 -0
- package/esm2015/core/models/dto/confirmation.dto.js +8 -0
- package/esm2015/core/models/dto/dialog.dto.js +4 -0
- package/esm2015/core/models/dto/filter.dto.js +4 -0
- package/esm2015/core/models/dto/input-listbox.dto.js +7 -0
- package/esm2015/core/models/dto/menu.dto.js +9 -0
- package/esm2015/core/models/dto/message.dto.js +4 -0
- package/esm2015/core/models/dto/page.dto.js +9 -0
- package/esm2015/core/models/dto/sort.dto.js +9 -0
- package/esm2015/core/models/dto/tab.dto.js +10 -0
- package/esm2015/core/models/dto/table-column.dto.js +24 -0
- package/esm2015/core/models/dto/table-group-header.dto.js +10 -0
- package/esm2015/core/models/dto/table-page-event.dto.js +7 -0
- package/esm2015/core/models/dto/token.dto.js +4 -0
- package/esm2015/core/models/enums/criteria-operation.enum.js +15 -0
- package/esm2015/core/models/enums/criteria-sort-direction.enum.js +6 -0
- package/esm2015/core/models/enums/menu-type.enum.js +7 -0
- package/esm2015/core/models/enums/radio-button.enum.js +8 -0
- package/esm2015/core/models/enums/sort-direction.enum.js +6 -0
- package/esm2015/core/models/multitenant.model.js +4 -0
- package/esm2015/core/models/permission.model.js +11 -0
- package/esm2015/core/models/role.model.js +8 -0
- package/esm2015/core/pipes/local-time.pipe.js +21 -0
- package/esm2015/core/services/abstract-crud.service.js +24 -0
- package/esm2015/core/services/abstract-find.service.js +65 -0
- package/esm2015/core/services/abstract.service.js +30 -0
- package/esm2015/core/services/authentication.service.js +100 -0
- package/esm2015/core/services/breakpoint-observer.service.js +42 -0
- package/esm2015/core/services/confirmation.service.js +55 -0
- package/esm2015/core/services/dialog.service.js +41 -0
- package/esm2015/core/services/message.service.js +33 -0
- package/esm2015/core/services/nav.service.js +48 -0
- package/esm2015/core/services/svg-register.service.js +55 -0
- package/esm2015/core/types/local-time.type.js +1 -0
- package/esm2015/core/types/ng-class.type.js +1 -0
- package/esm2015/core/utils/array.util.js +110 -0
- package/esm2015/core/utils/browser.util.js +13 -0
- package/esm2015/core/utils/currency.util.js +21 -0
- package/esm2015/core/utils/date.util.js +257 -0
- package/esm2015/core/utils/document.util.js +153 -0
- package/esm2015/core/utils/email.util.js +25 -0
- package/esm2015/core/utils/number.util.js +28 -0
- package/esm2015/core/utils/object.util.js +199 -0
- package/esm2015/core/utils/password.util.js +38 -0
- package/esm2015/core/utils/phone.util.js +125 -0
- package/esm2015/core/utils/string.util.js +40 -0
- package/esm2015/core/utils/table-column-builder.js +85 -0
- package/esm2015/core/utils/time.util.js +59 -0
- package/esm2015/core/utils/url-params.util.js +12 -0
- package/esm2015/core/utils/uuid.util.js +17 -0
- package/esm2015/core/utils/zindex.util.js +35 -0
- package/esm2015/core.js +89 -0
- package/esm2015/gipi-components.js +105 -0
- package/esm2015/gipisistemas-ng-core.js +21 -0
- package/esm2015/public_api.js +4 -0
- package/esm2015/shared/api/generate-id-component.js +12 -0
- package/esm2015/shared/api/gipi-ng-config.js +76 -0
- package/esm2015/shared/api/overlay-message.js +1 -0
- package/esm2015/shared/api/throttle.js +60 -0
- package/esm2015/shared/api/translation.js +1 -0
- package/esm2015/shared/components/button/button.component.js +110 -0
- package/esm2015/shared/components/card/card.component.js +44 -0
- package/esm2015/shared/components/checkbox/checkbox.component.js +79 -0
- package/esm2015/shared/components/dom/connected-overlay-scroll-handler.js +27 -0
- package/esm2015/shared/components/dom/dom-handler.js +538 -0
- package/esm2015/shared/components/icon/icon.component.js +35 -0
- package/esm2015/shared/components/input/input.component.js +235 -0
- package/esm2015/shared/components/input-currency/input-currency.component.js +115 -0
- package/esm2015/shared/components/input-file/input-file.component.js +161 -0
- package/esm2015/shared/components/loading/loading.component.js +15 -0
- package/esm2015/shared/components/loading-overlay/loading-overlay.component.js +21 -0
- package/esm2015/shared/components/overlay-panel/overlay-panel.component.js +361 -0
- package/esm2015/shared/components/popover/popover-ref.js +25 -0
- package/esm2015/shared/components/popover/popover.component.js +34 -0
- package/esm2015/shared/components/popover/popover.service.js +85 -0
- package/esm2015/shared/components/radio-group-entity/radio-group-entity.component.js +74 -0
- package/esm2015/shared/components/radio-group-enum/radio-group-enum.component.js +126 -0
- package/esm2015/shared/components/select-button/select-button.component.js +181 -0
- package/esm2015/shared/components/select-entity/select-entity.component.js +262 -0
- package/esm2015/shared/components/select-entity-paged/select-entity-paged.component.js +419 -0
- package/esm2015/shared/components/select-entity-paged/shared/default-options.js +35 -0
- package/esm2015/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.js +69 -0
- package/esm2015/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.js +59 -0
- package/esm2015/shared/components/select-entity-paged/shared/select-no-entries-found.directive.js +20 -0
- package/esm2015/shared/components/select-entity-paged/shared/select-search/select-search.component.js +547 -0
- package/esm2015/shared/components/select-entity-paged/shared/select-search-clear.directive.js +18 -0
- package/esm2015/shared/components/select-enum/select-enum.component.js +117 -0
- package/esm2015/shared/components/select-month-period/select-month-period.component.js +87 -0
- package/esm2015/shared/components/slide-toggle/slide-toggle.component.js +75 -0
- package/esm2015/shared/components/stepper/stepper.component.js +32 -0
- package/esm2015/shared/components/tab/tab.component.js +57 -0
- package/esm2015/shared/components/tab-group/tab-group.component.js +117 -0
- package/esm2015/shared/components/table/table.component.js +523 -0
- package/esm2015/shared/components/table-scrolled/table-scrolled.component.js +105 -0
- package/esm2015/shared/components/textarea/textarea.component.js +156 -0
- package/esm2015/shared/directives/dynamic-tab.directive.js +18 -0
- package/esm2015/shared/directives/generic-template.directive.js +30 -0
- package/esm2015/shared/directives/input-select-infinite-scroll.directive.js +109 -0
- package/esm2015/shared/directives/lower-case.directive.js +47 -0
- package/esm2015/shared/directives/phone-mask.directive.js +60 -0
- package/esm2015/shared/directives/space-drop.directive.js +47 -0
- package/esm2015/shared/directives/upper-case.directive.js +47 -0
- package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +119 -0
- package/esm2015/shared/gipi-components/action-row/action-row.component.js +30 -0
- package/esm2015/shared/gipi-components/badge/badge.component.js +44 -0
- package/esm2015/shared/gipi-components/button/button.component.js +251 -0
- package/esm2015/shared/gipi-components/chips/chips.component.js +149 -0
- package/esm2015/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +44 -0
- package/esm2015/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +324 -0
- package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.js +41 -0
- package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.js +35 -0
- package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.js +259 -0
- package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +218 -0
- package/esm2015/shared/gipi-components/datepicker/datepicker.module.js +130 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +341 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar.js +397 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.js +325 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +329 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.js +41 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.js +61 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.js +159 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.js +35 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.js +555 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.js +14 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.js +303 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.js +179 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.js +51 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.js +124 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker.js +29 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/month-view.js +365 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.js +305 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.js +116 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.js +10 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.js +294 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.js +19 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.js +81 -0
- package/esm2015/shared/gipi-components/datepicker/mat-datepicker/year-view.js +294 -0
- package/esm2015/shared/gipi-components/dom/connected-overlay-scroll-handler.js +27 -0
- package/esm2015/shared/gipi-components/dom/dom-handler.js +645 -0
- package/esm2015/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +185 -0
- package/esm2015/shared/gipi-components/expansion-panel/expansion-panel.component.js +81 -0
- package/esm2015/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.js +240 -0
- package/esm2015/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.js +92 -0
- package/esm2015/shared/gipi-components/footer/footer.component.js +29 -0
- package/esm2015/shared/gipi-components/form-field/form-field.component.js +262 -0
- package/esm2015/shared/gipi-components/helpful-tip/helpful-tip.component.js +62 -0
- package/esm2015/shared/gipi-components/infinite-scroll/infinite-scroll.directive.js +103 -0
- package/esm2015/shared/gipi-components/input-checkbox/input-checkbox.component.js +112 -0
- package/esm2015/shared/gipi-components/input-currency/input-currency.component.js +197 -0
- package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +408 -0
- package/esm2015/shared/gipi-components/input-select/input-select.component.js +655 -0
- package/esm2015/shared/gipi-components/input-select-enum/input-select-enum.component.js +311 -0
- package/esm2015/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +422 -0
- package/esm2015/shared/gipi-components/input-select-paged/input-search/input-search.component.js +374 -0
- package/esm2015/shared/gipi-components/input-select-paged/input-select-paged.component.js +350 -0
- package/esm2015/shared/gipi-components/input-select-radio/input-select-radio.component.js +269 -0
- package/esm2015/shared/gipi-components/layout-grid/col.directive.js +161 -0
- package/esm2015/shared/gipi-components/layout-grid/row.directive.js +124 -0
- package/esm2015/shared/gipi-components/layout-grid/services/breakpoint.service.js +87 -0
- package/esm2015/shared/gipi-components/layout-grid/services/resize.service.js +64 -0
- package/esm2015/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.js +193 -0
- package/esm2015/shared/gipi-components/month-year-picker/mont-year-picker.module.js +47 -0
- package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +460 -0
- package/esm2015/shared/gipi-components/notification/notification.component.js +104 -0
- package/esm2015/shared/gipi-components/novelties/novelties.component.js +109 -0
- package/esm2015/shared/gipi-components/overlay/overlay.component.js +565 -0
- package/esm2015/shared/gipi-components/overlay/shared/overlay-service.js +21 -0
- package/esm2015/shared/gipi-components/overlay/shared/overlay_options.js +1 -0
- package/esm2015/shared/gipi-components/password-requeriments/password-requeriments.component.js +127 -0
- package/esm2015/shared/gipi-components/popover/popover.component.js +397 -0
- package/esm2015/shared/gipi-components/popover/shared/popover-animations.js +29 -0
- package/esm2015/shared/gipi-components/popover/shared/popover-errors.js +27 -0
- package/esm2015/shared/gipi-components/popover/shared/popover-interfaces.js +1 -0
- package/esm2015/shared/gipi-components/popover/shared/popover-target.js +19 -0
- package/esm2015/shared/gipi-components/popover/shared/popover-trigger.js +514 -0
- package/esm2015/shared/gipi-components/popover/shared/popover-types.js +1 -0
- package/esm2015/shared/gipi-components/radio-group/radio-group.component.js +143 -0
- package/esm2015/shared/gipi-components/range-page/range-page.component.js +254 -0
- package/esm2015/shared/gipi-components/range-slider/range-slider.component.js +345 -0
- package/esm2015/shared/gipi-components/select/select.component.js +211 -0
- package/esm2015/shared/gipi-components/select-button/select-button.component.js +187 -0
- package/esm2015/shared/gipi-components/sidebar/container/container.component.js +83 -0
- package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +240 -0
- package/esm2015/shared/gipi-components/stepper/stepper.component.js +37 -0
- package/esm2015/shared/gipi-components/table/components/table-body/table-body.component.js +203 -0
- package/esm2015/shared/gipi-components/table/components/table-footer/table-footer.component.js +30 -0
- package/esm2015/shared/gipi-components/table/components/table-header/table-header.component.js +152 -0
- package/esm2015/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.js +122 -0
- package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.js +225 -0
- package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.js +1 -0
- package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination.service.js +105 -0
- package/esm2015/shared/gipi-components/table/components/table-pagination/table-pagination.component.js +102 -0
- package/esm2015/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.js +30 -0
- package/esm2015/shared/gipi-components/table/models/pipe-transform.model.js +1 -0
- package/esm2015/shared/gipi-components/table/models/sort.model.js +19 -0
- package/esm2015/shared/gipi-components/table/models/sorted-column.model.js +2 -0
- package/esm2015/shared/gipi-components/table/models/table-column-builder.model.js +104 -0
- package/esm2015/shared/gipi-components/table/models/table-column.model.js +162 -0
- package/esm2015/shared/gipi-components/table/table.component.js +159 -0
- package/esm2015/shared/gipi-components/table/types/sort-direction.type.js +1 -0
- package/esm2015/shared/gipi-components/table/types/sort.type.js +1 -0
- package/esm2015/shared/gipi-components/template/template.directive.js +33 -0
- package/esm2015/shared/gipi-components/toolbar/toolbar.component.js +53 -0
- package/esm2015/shared/gipi-components/top-nav/top-nav.component.js +38 -0
- package/esm2015/shared/gipi-components/user-profile/user-profile.component.js +109 -0
- package/esm2015/shared/material.module.js +102 -0
- package/esm2015/shared/shared.module.js +339 -0
- package/esm2015/shared.js +36 -0
- package/esm5/core/app-messages.js +1 -0
- package/esm5/core/app.messages.js +12 -0
- package/esm5/core/components/abstract-crud.component.js +108 -0
- package/esm5/core/components/abstract-find.component.js +201 -0
- package/esm5/core/components/abstract.component.js +112 -0
- package/esm5/core/components/alert/alert.component.js +25 -0
- package/esm5/core/core.module.js +107 -0
- package/esm5/core/custom-breakpoints.js +87 -0
- package/esm5/core/enums/local-time.enum.js +6 -0
- package/esm5/core/extensions/string.extension.js +37 -0
- package/esm5/core/gipi-components/components/abstract-crud.component.js +122 -0
- package/esm5/core/gipi-components/components/abstract-find.component.js +507 -0
- package/esm5/core/gipi-components/components/abstract.component.js +152 -0
- package/esm5/core/gipi-components/decorators/autowired.decorator.js +52 -0
- package/esm5/core/gipi-components/enums/sort-direction.enum.js +6 -0
- package/esm5/core/gipi-components/interface/abstract-crud.interface.js +1 -0
- package/esm5/core/gipi-components/interface/abstract-find.interface.js +1 -0
- package/esm5/core/gipi-components/interface/abstract.interface.js +1 -0
- package/esm5/core/gipi-components/interface/base-permission.interface.js +1 -0
- package/esm5/core/gipi-components/models/abstract-filter.model.js +7 -0
- package/esm5/core/gipi-components/models/abstract.model.js +7 -0
- package/esm5/core/gipi-components/models/applied-filter.model.js +29 -0
- package/esm5/core/gipi-components/models/dto/abstract.dto.js +7 -0
- package/esm5/core/gipi-components/models/page-event.model.js +49 -0
- package/esm5/core/gipi-components/models/page.model.js +9 -0
- package/esm5/core/gipi-components/models/sort.model.js +9 -0
- package/esm5/core/gipi-components/services/abstract-crud.service.js +114 -0
- package/esm5/core/gipi-components/services/abstract.service.js +49 -0
- package/esm5/core/gipi-components/services/base.service.js +143 -0
- package/esm5/core/gipi-components/services/file.service.js +53 -0
- package/esm5/core/gipi-components/services/session-storage.service.js +45 -0
- package/esm5/core/gipi-components/types/generic.type.js +1 -0
- package/esm5/core/gipi-components/types/uuid.type.js +1 -0
- package/esm5/core/guards/auth.guard.js +50 -0
- package/esm5/core/guards/permission.guard.js +74 -0
- package/esm5/core/guards/public.guard.js +47 -0
- package/esm5/core/interceptors/auth.interceptor.js +29 -0
- package/esm5/core/interceptors/error.interceptor.js +129 -0
- package/esm5/core/models/abstract.model.js +7 -0
- package/esm5/core/models/archive.model.js +7 -0
- package/esm5/core/models/authority.model.js +7 -0
- package/esm5/core/models/base-user.model.js +13 -0
- package/esm5/core/models/dto/abstract.dto.js +7 -0
- package/esm5/core/models/dto/api-error.dto.js +13 -0
- package/esm5/core/models/dto/api-sub-error.dto.js +11 -0
- package/esm5/core/models/dto/chart.dto.js +11 -0
- package/esm5/core/models/dto/confirmation.dto.js +13 -0
- package/esm5/core/models/dto/dialog.dto.js +11 -0
- package/esm5/core/models/dto/filter.dto.js +11 -0
- package/esm5/core/models/dto/input-listbox.dto.js +11 -0
- package/esm5/core/models/dto/menu.dto.js +14 -0
- package/esm5/core/models/dto/message.dto.js +11 -0
- package/esm5/core/models/dto/page.dto.js +14 -0
- package/esm5/core/models/dto/sort.dto.js +14 -0
- package/esm5/core/models/dto/tab.dto.js +15 -0
- package/esm5/core/models/dto/table-column.dto.js +29 -0
- package/esm5/core/models/dto/table-group-header.dto.js +15 -0
- package/esm5/core/models/dto/table-page-event.dto.js +11 -0
- package/esm5/core/models/dto/token.dto.js +11 -0
- package/esm5/core/models/enums/criteria-operation.enum.js +15 -0
- package/esm5/core/models/enums/criteria-sort-direction.enum.js +6 -0
- package/esm5/core/models/enums/menu-type.enum.js +7 -0
- package/esm5/core/models/enums/radio-button.enum.js +8 -0
- package/esm5/core/models/enums/sort-direction.enum.js +6 -0
- package/esm5/core/models/multitenant.model.js +11 -0
- package/esm5/core/models/permission.model.js +16 -0
- package/esm5/core/models/role.model.js +13 -0
- package/esm5/core/pipes/local-time.pipe.js +26 -0
- package/esm5/core/services/abstract-crud.service.js +30 -0
- package/esm5/core/services/abstract-find.service.js +71 -0
- package/esm5/core/services/abstract.service.js +32 -0
- package/esm5/core/services/authentication.service.js +121 -0
- package/esm5/core/services/breakpoint-observer.service.js +52 -0
- package/esm5/core/services/confirmation.service.js +66 -0
- package/esm5/core/services/dialog.service.js +44 -0
- package/esm5/core/services/message.service.js +36 -0
- package/esm5/core/services/nav.service.js +51 -0
- package/esm5/core/services/svg-register.service.js +67 -0
- package/esm5/core/types/local-time.type.js +1 -0
- package/esm5/core/types/ng-class.type.js +1 -0
- package/esm5/core/utils/array.util.js +120 -0
- package/esm5/core/utils/browser.util.js +17 -0
- package/esm5/core/utils/currency.util.js +26 -0
- package/esm5/core/utils/date.util.js +269 -0
- package/esm5/core/utils/document.util.js +157 -0
- package/esm5/core/utils/email.util.js +29 -0
- package/esm5/core/utils/number.util.js +32 -0
- package/esm5/core/utils/object.util.js +204 -0
- package/esm5/core/utils/password.util.js +42 -0
- package/esm5/core/utils/phone.util.js +135 -0
- package/esm5/core/utils/string.util.js +44 -0
- package/esm5/core/utils/table-column-builder.js +87 -0
- package/esm5/core/utils/time.util.js +65 -0
- package/esm5/core/utils/url-params.util.js +16 -0
- package/esm5/core/utils/uuid.util.js +21 -0
- package/esm5/core/utils/zindex.util.js +35 -0
- package/esm5/core.js +89 -0
- package/esm5/gipi-components.js +105 -0
- package/esm5/gipisistemas-ng-core.js +21 -0
- package/esm5/public_api.js +4 -0
- package/esm5/shared/api/generate-id-component.js +16 -0
- package/esm5/shared/api/gipi-ng-config.js +77 -0
- package/esm5/shared/api/overlay-message.js +1 -0
- package/esm5/shared/api/throttle.js +60 -0
- package/esm5/shared/api/translation.js +1 -0
- package/esm5/shared/components/button/button.component.js +111 -0
- package/esm5/shared/components/card/card.component.js +45 -0
- package/esm5/shared/components/checkbox/checkbox.component.js +85 -0
- package/esm5/shared/components/dom/connected-overlay-scroll-handler.js +30 -0
- package/esm5/shared/components/dom/dom-handler.js +573 -0
- package/esm5/shared/components/icon/icon.component.js +38 -0
- package/esm5/shared/components/input/input.component.js +242 -0
- package/esm5/shared/components/input-currency/input-currency.component.js +121 -0
- package/esm5/shared/components/input-file/input-file.component.js +165 -0
- package/esm5/shared/components/loading/loading.component.js +18 -0
- package/esm5/shared/components/loading-overlay/loading-overlay.component.js +23 -0
- package/esm5/shared/components/overlay-panel/overlay-panel.component.js +366 -0
- package/esm5/shared/components/popover/popover-ref.js +28 -0
- package/esm5/shared/components/popover/popover.component.js +35 -0
- package/esm5/shared/components/popover/popover.service.js +88 -0
- package/esm5/shared/components/radio-group-entity/radio-group-entity.component.js +80 -0
- package/esm5/shared/components/radio-group-enum/radio-group-enum.component.js +138 -0
- package/esm5/shared/components/select-button/select-button.component.js +195 -0
- package/esm5/shared/components/select-entity/select-entity.component.js +269 -0
- package/esm5/shared/components/select-entity-paged/select-entity-paged.component.js +453 -0
- package/esm5/shared/components/select-entity-paged/shared/default-options.js +35 -0
- package/esm5/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.js +72 -0
- package/esm5/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.js +62 -0
- package/esm5/shared/components/select-entity-paged/shared/select-no-entries-found.directive.js +23 -0
- package/esm5/shared/components/select-entity-paged/shared/select-search/select-search.component.js +590 -0
- package/esm5/shared/components/select-entity-paged/shared/select-search-clear.directive.js +21 -0
- package/esm5/shared/components/select-enum/select-enum.component.js +124 -0
- package/esm5/shared/components/select-month-period/select-month-period.component.js +91 -0
- package/esm5/shared/components/slide-toggle/slide-toggle.component.js +81 -0
- package/esm5/shared/components/stepper/stepper.component.js +36 -0
- package/esm5/shared/components/tab/tab.component.js +58 -0
- package/esm5/shared/components/tab-group/tab-group.component.js +125 -0
- package/esm5/shared/components/table/table.component.js +538 -0
- package/esm5/shared/components/table-scrolled/table-scrolled.component.js +107 -0
- package/esm5/shared/components/textarea/textarea.component.js +174 -0
- package/esm5/shared/directives/dynamic-tab.directive.js +19 -0
- package/esm5/shared/directives/generic-template.directive.js +31 -0
- package/esm5/shared/directives/input-select-infinite-scroll.directive.js +113 -0
- package/esm5/shared/directives/lower-case.directive.js +48 -0
- package/esm5/shared/directives/phone-mask.directive.js +61 -0
- package/esm5/shared/directives/space-drop.directive.js +48 -0
- package/esm5/shared/directives/upper-case.directive.js +48 -0
- package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +141 -0
- package/esm5/shared/gipi-components/action-row/action-row.component.js +33 -0
- package/esm5/shared/gipi-components/badge/badge.component.js +46 -0
- package/esm5/shared/gipi-components/button/button.component.js +257 -0
- package/esm5/shared/gipi-components/chips/chips.component.js +159 -0
- package/esm5/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +46 -0
- package/esm5/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +378 -0
- package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.js +42 -0
- package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.js +40 -0
- package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.js +291 -0
- package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +252 -0
- package/esm5/shared/gipi-components/datepicker/datepicker.module.js +133 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +349 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar.js +441 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.js +339 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +376 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.js +46 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.js +62 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.js +167 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.js +35 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.js +586 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.js +14 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.js +327 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.js +199 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.js +52 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.js +133 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker.js +34 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/month-view.js +384 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.js +324 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.js +118 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.js +10 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.js +300 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.js +19 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.js +82 -0
- package/esm5/shared/gipi-components/datepicker/mat-datepicker/year-view.js +313 -0
- package/esm5/shared/gipi-components/dom/connected-overlay-scroll-handler.js +30 -0
- package/esm5/shared/gipi-components/dom/dom-handler.js +681 -0
- package/esm5/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +191 -0
- package/esm5/shared/gipi-components/expansion-panel/expansion-panel.component.js +83 -0
- package/esm5/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.js +255 -0
- package/esm5/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.js +93 -0
- package/esm5/shared/gipi-components/footer/footer.component.js +32 -0
- package/esm5/shared/gipi-components/form-field/form-field.component.js +276 -0
- package/esm5/shared/gipi-components/helpful-tip/helpful-tip.component.js +68 -0
- package/esm5/shared/gipi-components/infinite-scroll/infinite-scroll.directive.js +106 -0
- package/esm5/shared/gipi-components/input-checkbox/input-checkbox.component.js +118 -0
- package/esm5/shared/gipi-components/input-currency/input-currency.component.js +207 -0
- package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +426 -0
- package/esm5/shared/gipi-components/input-select/input-select.component.js +698 -0
- package/esm5/shared/gipi-components/input-select-enum/input-select-enum.component.js +351 -0
- package/esm5/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +437 -0
- package/esm5/shared/gipi-components/input-select-paged/input-search/input-search.component.js +397 -0
- package/esm5/shared/gipi-components/input-select-paged/input-select-paged.component.js +384 -0
- package/esm5/shared/gipi-components/input-select-radio/input-select-radio.component.js +286 -0
- package/esm5/shared/gipi-components/layout-grid/col.directive.js +164 -0
- package/esm5/shared/gipi-components/layout-grid/row.directive.js +127 -0
- package/esm5/shared/gipi-components/layout-grid/services/breakpoint.service.js +90 -0
- package/esm5/shared/gipi-components/layout-grid/services/resize.service.js +68 -0
- package/esm5/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.js +200 -0
- package/esm5/shared/gipi-components/month-year-picker/mont-year-picker.module.js +50 -0
- package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +505 -0
- package/esm5/shared/gipi-components/notification/notification.component.js +106 -0
- package/esm5/shared/gipi-components/novelties/novelties.component.js +111 -0
- package/esm5/shared/gipi-components/overlay/overlay.component.js +670 -0
- package/esm5/shared/gipi-components/overlay/shared/overlay-service.js +22 -0
- package/esm5/shared/gipi-components/overlay/shared/overlay_options.js +1 -0
- package/esm5/shared/gipi-components/password-requeriments/password-requeriments.component.js +157 -0
- package/esm5/shared/gipi-components/popover/popover.component.js +473 -0
- package/esm5/shared/gipi-components/popover/shared/popover-animations.js +29 -0
- package/esm5/shared/gipi-components/popover/shared/popover-errors.js +21 -0
- package/esm5/shared/gipi-components/popover/shared/popover-interfaces.js +1 -0
- package/esm5/shared/gipi-components/popover/shared/popover-target.js +20 -0
- package/esm5/shared/gipi-components/popover/shared/popover-trigger.js +529 -0
- package/esm5/shared/gipi-components/popover/shared/popover-types.js +1 -0
- package/esm5/shared/gipi-components/radio-group/radio-group.component.js +155 -0
- package/esm5/shared/gipi-components/range-page/range-page.component.js +283 -0
- package/esm5/shared/gipi-components/range-slider/range-slider.component.js +364 -0
- package/esm5/shared/gipi-components/select/select.component.js +222 -0
- package/esm5/shared/gipi-components/select-button/select-button.component.js +206 -0
- package/esm5/shared/gipi-components/sidebar/container/container.component.js +96 -0
- package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +267 -0
- package/esm5/shared/gipi-components/stepper/stepper.component.js +43 -0
- package/esm5/shared/gipi-components/table/components/table-body/table-body.component.js +209 -0
- package/esm5/shared/gipi-components/table/components/table-footer/table-footer.component.js +33 -0
- package/esm5/shared/gipi-components/table/components/table-header/table-header.component.js +155 -0
- package/esm5/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.js +123 -0
- package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.js +228 -0
- package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.js +1 -0
- package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination.service.js +108 -0
- package/esm5/shared/gipi-components/table/components/table-pagination/table-pagination.component.js +116 -0
- package/esm5/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.js +33 -0
- package/esm5/shared/gipi-components/table/models/pipe-transform.model.js +1 -0
- package/esm5/shared/gipi-components/table/models/sort.model.js +29 -0
- package/esm5/shared/gipi-components/table/models/sorted-column.model.js +2 -0
- package/esm5/shared/gipi-components/table/models/table-column-builder.model.js +106 -0
- package/esm5/shared/gipi-components/table/models/table-column.model.js +252 -0
- package/esm5/shared/gipi-components/table/table.component.js +161 -0
- package/esm5/shared/gipi-components/table/types/sort-direction.type.js +1 -0
- package/esm5/shared/gipi-components/table/types/sort.type.js +1 -0
- package/esm5/shared/gipi-components/template/template.directive.js +34 -0
- package/esm5/shared/gipi-components/toolbar/toolbar.component.js +56 -0
- package/esm5/shared/gipi-components/top-nav/top-nav.component.js +40 -0
- package/esm5/shared/gipi-components/user-profile/user-profile.component.js +115 -0
- package/esm5/shared/material.module.js +101 -0
- package/esm5/shared/shared.module.js +340 -0
- package/esm5/shared.js +36 -0
- package/fesm2015/gipisistemas-ng-core.js +25879 -0
- package/fesm2015/gipisistemas-ng-core.js.map +1 -0
- package/fesm5/gipisistemas-ng-core.js +27905 -0
- package/fesm5/gipisistemas-ng-core.js.map +1 -0
- package/gipi-components.d.ts +97 -0
- package/gipisistemas-ng-core.d.ts +20 -0
- package/gipisistemas-ng-core.metadata.json +1 -0
- package/package.json +31 -83
- package/public_api.d.ts +3 -0
- package/shared/api/generate-id-component.d.ts +3 -0
- package/shared/api/gipi-ng-config.d.ts +18 -0
- package/shared/api/overlay-message.d.ts +14 -0
- package/shared/api/throttle.d.ts +17 -0
- package/shared/api/translation.d.ts +45 -0
- package/shared/components/button/button.component.d.ts +26 -0
- package/shared/components/card/card.component.d.ts +10 -0
- package/shared/components/checkbox/checkbox.component.d.ts +20 -0
- package/shared/components/dom/connected-overlay-scroll-handler.d.ts +9 -0
- package/shared/components/dom/dom-handler.d.ts +74 -0
- package/shared/components/icon/icon.component.d.ts +9 -0
- package/shared/components/input/input.component.d.ts +52 -0
- package/shared/components/input-currency/input-currency.component.d.ts +29 -0
- package/shared/components/input-file/input-file.component.d.ts +28 -0
- package/shared/components/loading/loading.component.d.ts +4 -0
- package/shared/components/loading-overlay/loading-overlay.component.d.ts +6 -0
- package/shared/components/overlay-panel/overlay-panel.component.d.ts +67 -0
- package/shared/components/popover/popover-ref.d.ts +17 -0
- package/shared/components/popover/popover.component.d.ts +10 -0
- package/shared/components/popover/popover.service.d.ts +23 -0
- package/shared/components/radio-group-entity/radio-group-entity.component.d.ts +19 -0
- package/shared/components/radio-group-enum/radio-group-enum.component.d.ts +30 -0
- package/shared/components/select-button/select-button.component.d.ts +35 -0
- package/shared/components/select-entity/select-entity.component.d.ts +52 -0
- package/shared/components/select-entity-paged/select-entity-paged.component.d.ts +78 -0
- package/shared/components/select-entity-paged/shared/default-options.d.ts +25 -0
- package/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.d.ts +18 -0
- package/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.d.ts +16 -0
- package/shared/components/select-entity-paged/shared/select-no-entries-found.directive.d.ts +11 -0
- package/shared/components/select-entity-paged/shared/select-search/select-search.component.d.ts +119 -0
- package/shared/components/select-entity-paged/shared/select-search-clear.directive.d.ts +9 -0
- package/shared/components/select-enum/select-enum.component.d.ts +29 -0
- package/shared/components/select-month-period/select-month-period.component.d.ts +20 -0
- package/shared/components/slide-toggle/slide-toggle.component.d.ts +19 -0
- package/shared/components/stepper/stepper.component.d.ts +7 -0
- package/shared/components/tab/tab.component.d.ts +14 -0
- package/shared/components/tab-group/tab-group.component.d.ts +22 -0
- package/shared/components/table/table.component.d.ts +86 -0
- package/shared/components/table-scrolled/table-scrolled.component.d.ts +31 -0
- package/shared/components/textarea/textarea.component.d.ts +35 -0
- package/shared/directives/dynamic-tab.directive.d.ts +5 -0
- package/shared/directives/generic-template.directive.d.ts +8 -0
- package/shared/directives/input-select-infinite-scroll.directive.d.ts +35 -0
- package/shared/directives/lower-case.directive.d.ts +9 -0
- package/shared/directives/phone-mask.directive.d.ts +8 -0
- package/shared/directives/space-drop.directive.d.ts +9 -0
- package/shared/directives/upper-case.directive.d.ts +9 -0
- package/shared/gipi-components/abstract-form/abstract-form.component.d.ts +21 -0
- package/shared/gipi-components/action-row/action-row.component.d.ts +5 -0
- package/shared/gipi-components/badge/badge.component.d.ts +8 -0
- package/shared/gipi-components/button/button.component.d.ts +56 -0
- package/shared/gipi-components/chips/chips.component.d.ts +37 -0
- package/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.d.ts +11 -0
- package/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.d.ts +71 -0
- package/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.d.ts +11 -0
- package/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.d.ts +6 -0
- package/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.d.ts +40 -0
- package/shared/gipi-components/datepicker/datepicker/datepicker.component.d.ts +49 -0
- package/shared/gipi-components/datepicker/datepicker.module.d.ts +2 -0
- package/shared/gipi-components/datepicker/mat-datepicker/calendar-body.d.ts +143 -0
- package/shared/gipi-components/datepicker/mat-datepicker/calendar.d.ts +152 -0
- package/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.d.ts +102 -0
- package/shared/gipi-components/datepicker/mat-datepicker/date-range-input.d.ts +124 -0
- package/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.d.ts +21 -0
- package/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.d.ts +45 -0
- package/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.d.ts +106 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.d.ts +16 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.d.ts +209 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.d.ts +9 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.d.ts +136 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.d.ts +68 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.d.ts +38 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.d.ts +39 -0
- package/shared/gipi-components/datepicker/mat-datepicker/datepicker.d.ts +11 -0
- package/shared/gipi-components/datepicker/mat-datepicker/month-view.d.ts +120 -0
- package/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.d.ts +85 -0
- package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.d.ts +225 -0
- package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.d.ts +20 -0
- package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.d.ts +76 -0
- package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.d.ts +9 -0
- package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.d.ts +33 -0
- package/shared/gipi-components/datepicker/mat-datepicker/year-view.d.ts +97 -0
- package/shared/gipi-components/dom/connected-overlay-scroll-handler.d.ts +9 -0
- package/shared/gipi-components/dom/dom-handler.d.ts +85 -0
- package/shared/gipi-components/dropdown-menu/dropdown-menu.component.d.ts +36 -0
- package/shared/gipi-components/expansion-panel/expansion-panel.component.d.ts +16 -0
- package/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.d.ts +43 -0
- package/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.d.ts +13 -0
- package/shared/gipi-components/footer/footer.component.d.ts +5 -0
- package/shared/gipi-components/form-field/form-field.component.d.ts +61 -0
- package/shared/gipi-components/helpful-tip/helpful-tip.component.d.ts +13 -0
- package/shared/gipi-components/infinite-scroll/infinite-scroll.directive.d.ts +27 -0
- package/shared/gipi-components/input-checkbox/input-checkbox.component.d.ts +28 -0
- package/shared/gipi-components/input-currency/input-currency.component.d.ts +48 -0
- package/shared/gipi-components/input-monthpicker/input-monthpicker.component.d.ts +89 -0
- package/shared/gipi-components/input-select/input-select.component.d.ts +120 -0
- package/shared/gipi-components/input-select-enum/input-select-enum.component.d.ts +65 -0
- package/shared/gipi-components/input-select-listbox/input-select-listbox.component.d.ts +85 -0
- package/shared/gipi-components/input-select-paged/input-search/input-search.component.d.ts +77 -0
- package/shared/gipi-components/input-select-paged/input-select-paged.component.d.ts +66 -0
- package/shared/gipi-components/input-select-radio/input-select-radio.component.d.ts +53 -0
- package/shared/gipi-components/layout-grid/col.directive.d.ts +38 -0
- package/shared/gipi-components/layout-grid/row.directive.d.ts +28 -0
- package/shared/gipi-components/layout-grid/services/breakpoint.service.d.ts +30 -0
- package/shared/gipi-components/layout-grid/services/resize.service.d.ts +17 -0
- package/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.d.ts +37 -0
- package/shared/gipi-components/month-year-picker/mont-year-picker.module.d.ts +2 -0
- package/shared/gipi-components/month-year-picker/month-year-picker.component.d.ts +104 -0
- package/shared/gipi-components/notification/notification.component.d.ts +21 -0
- package/shared/gipi-components/novelties/novelties.component.d.ts +22 -0
- package/shared/gipi-components/overlay/overlay.component.d.ts +113 -0
- package/shared/gipi-components/overlay/shared/overlay-service.d.ts +6 -0
- package/shared/gipi-components/overlay/shared/overlay_options.d.ts +50 -0
- package/shared/gipi-components/password-requeriments/password-requeriments.component.d.ts +27 -0
- package/shared/gipi-components/popover/popover.component.d.ts +133 -0
- package/shared/gipi-components/popover/shared/popover-animations.d.ts +13 -0
- package/shared/gipi-components/popover/shared/popover-errors.d.ts +14 -0
- package/shared/gipi-components/popover/shared/popover-interfaces.d.ts +43 -0
- package/shared/gipi-components/popover/shared/popover-target.d.ts +5 -0
- package/shared/gipi-components/popover/shared/popover-trigger.d.ts +140 -0
- package/shared/gipi-components/popover/shared/popover-types.d.ts +4 -0
- package/shared/gipi-components/radio-group/radio-group.component.d.ts +33 -0
- package/shared/gipi-components/range-page/range-page.component.d.ts +55 -0
- package/shared/gipi-components/range-slider/range-slider.component.d.ts +57 -0
- package/shared/gipi-components/select/select.component.d.ts +45 -0
- package/shared/gipi-components/select-button/select-button.component.d.ts +39 -0
- package/shared/gipi-components/sidebar/container/container.component.d.ts +15 -0
- package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +40 -0
- package/shared/gipi-components/stepper/stepper.component.d.ts +8 -0
- package/shared/gipi-components/table/components/table-body/table-body.component.d.ts +36 -0
- package/shared/gipi-components/table/components/table-footer/table-footer.component.d.ts +5 -0
- package/shared/gipi-components/table/components/table-header/table-header.component.d.ts +28 -0
- package/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.d.ts +40 -0
- package/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.d.ts +81 -0
- package/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.d.ts +24 -0
- package/shared/gipi-components/table/components/table-pagination/shared/pagination.service.d.ts +45 -0
- package/shared/gipi-components/table/components/table-pagination/table-pagination.component.d.ts +21 -0
- package/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.d.ts +5 -0
- package/shared/gipi-components/table/models/pipe-transform.model.d.ts +3 -0
- package/shared/gipi-components/table/models/sort.model.d.ts +10 -0
- package/shared/gipi-components/table/models/sorted-column.model.d.ts +6 -0
- package/shared/gipi-components/table/models/table-column-builder.model.d.ts +52 -0
- package/shared/gipi-components/table/models/table-column.model.d.ts +74 -0
- package/shared/gipi-components/table/table.component.d.ts +37 -0
- package/shared/gipi-components/table/types/sort-direction.type.d.ts +1 -0
- package/shared/gipi-components/table/types/sort.type.d.ts +1 -0
- package/shared/gipi-components/template/template.directive.d.ts +8 -0
- package/shared/gipi-components/toolbar/toolbar.component.d.ts +11 -0
- package/shared/gipi-components/top-nav/top-nav.component.d.ts +8 -0
- package/shared/gipi-components/user-profile/user-profile.component.d.ts +24 -0
- package/shared/material.module.d.ts +2 -0
- package/shared/shared.module.d.ts +6 -0
- package/shared.d.ts +35 -0
- package/README.md +0 -38
- package/_ITSS-NG-CI-CD.yml +0 -53
- package/_ITSS-NG-CI-PR.yml +0 -53
- package/angular-cli.json +0 -42
- package/azure-pipelines.yml +0 -35
- package/projects/itss-ng/ng-package.json +0 -7
- package/projects/itss-ng/package.json +0 -25
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@gipisistemas/ng-core/core/app.messages.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.ts","ng://@gipisistemas/ng-core/shared/material.module.ts","ng://@gipisistemas/ng-core/shared/components/button/button.component.ts","ng://@gipisistemas/ng-core/shared/components/card/card.component.ts","ng://@gipisistemas/ng-core/shared/components/checkbox/checkbox.component.ts","ng://@gipisistemas/ng-core/shared/components/icon/icon.component.ts","ng://@gipisistemas/ng-core/shared/components/input-currency/input-currency.component.ts","ng://@gipisistemas/ng-core/core/utils/string.util.ts","ng://@gipisistemas/ng-core/core/utils/object.util.ts","ng://@gipisistemas/ng-core/core/utils/uuid.util.ts","ng://@gipisistemas/ng-core/core/components/abstract.component.ts","ng://@gipisistemas/ng-core/core/models/archive.model.ts","ng://@gipisistemas/ng-core/core/services/abstract.service.ts","ng://@gipisistemas/ng-core/core/models/dto/abstract.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/message.dto.ts","ng://@gipisistemas/ng-core/core/components/alert/alert.component.ts","ng://@gipisistemas/ng-core/core/services/message.service.ts","ng://@gipisistemas/ng-core/shared/components/input-file/input-file.component.ts","ng://@gipisistemas/ng-core/shared/components/input/input.component.ts","ng://@gipisistemas/ng-core/shared/components/loading-overlay/loading-overlay.component.ts","ng://@gipisistemas/ng-core/shared/components/loading/loading.component.ts","ng://@gipisistemas/ng-core/core/utils/zindex.util.ts","ng://@gipisistemas/ng-core/shared/components/table-scrolled/table-scrolled.component.ts","ng://@gipisistemas/ng-core/shared/api/gipi-ng-config.ts","ng://@gipisistemas/ng-core/shared/gipi-components/overlay/shared/overlay-service.ts","ng://@gipisistemas/ng-core/shared/components/dom/dom-handler.ts","ng://@gipisistemas/ng-core/shared/components/dom/connected-overlay-scroll-handler.ts","ng://@gipisistemas/ng-core/shared/components/overlay-panel/overlay-panel.component.ts","ng://@gipisistemas/ng-core/shared/components/popover/popover-ref.ts","ng://@gipisistemas/ng-core/shared/components/popover/popover.component.ts","ng://@gipisistemas/ng-core/shared/components/radio-group-entity/radio-group-entity.component.ts","ng://@gipisistemas/ng-core/shared/api/generate-id-component.ts","ng://@gipisistemas/ng-core/shared/components/radio-group-enum/radio-group-enum.component.ts","ng://@gipisistemas/ng-core/shared/components/select-button/select-button.component.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/select-entity-paged.component.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/shared/select-no-entries-found.directive.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/shared/select-search-clear.directive.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/shared/default-options.ts","ng://@gipisistemas/ng-core/shared/components/select-entity-paged/shared/select-search/select-search.component.ts","ng://@gipisistemas/ng-core/core/utils/array.util.ts","ng://@gipisistemas/ng-core/shared/components/select-entity/select-entity.component.ts","ng://@gipisistemas/ng-core/shared/components/select-enum/select-enum.component.ts","ng://@gipisistemas/ng-core/shared/components/select-month-period/select-month-period.component.ts","ng://@gipisistemas/ng-core/shared/components/slide-toggle/slide-toggle.component.ts","ng://@gipisistemas/ng-core/shared/components/stepper/stepper.component.ts","ng://@gipisistemas/ng-core/shared/components/tab/tab.component.ts","ng://@gipisistemas/ng-core/shared/directives/dynamic-tab.directive.ts","ng://@gipisistemas/ng-core/core/models/dto/tab.dto.ts","ng://@gipisistemas/ng-core/shared/components/tab-group/tab-group.component.ts","ng://@gipisistemas/ng-core/shared/api/throttle.ts","ng://@gipisistemas/ng-core/shared/gipi-components/layout-grid/services/breakpoint.service.ts","ng://@gipisistemas/ng-core/core/models/dto/table-group-header.dto.ts","ng://@gipisistemas/ng-core/shared/components/table/table.component.ts","ng://@gipisistemas/ng-core/shared/components/textarea/textarea.component.ts","ng://@gipisistemas/ng-core/shared/directives/generic-template.directive.ts","ng://@gipisistemas/ng-core/shared/directives/input-select-infinite-scroll.directive.ts","ng://@gipisistemas/ng-core/shared/directives/lower-case.directive.ts","ng://@gipisistemas/ng-core/shared/directives/phone-mask.directive.ts","ng://@gipisistemas/ng-core/shared/directives/space-drop.directive.ts","ng://@gipisistemas/ng-core/shared/directives/upper-case.directive.ts","ng://@gipisistemas/ng-core/core/custom-breakpoints.ts","ng://@gipisistemas/ng-core/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/infinite-scroll/infinite-scroll.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/layout-grid/services/resize.service.ts","ng://@gipisistemas/ng-core/shared/gipi-components/layout-grid/row.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/layout-grid/col.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-pagination/shared/pagination.service.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/template/template.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.ts","ng://@gipisistemas/ng-core/shared/gipi-components/action-row/action-row.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/abstract-form/abstract-form.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/badge/badge.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/dom/dom-handler.ts","ng://@gipisistemas/ng-core/shared/gipi-components/popover/shared/popover-trigger.ts","ng://@gipisistemas/ng-core/shared/gipi-components/popover/shared/popover-errors.ts","ng://@gipisistemas/ng-core/shared/gipi-components/button/button.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/chips/chips.component.ts","ng://@gipisistemas/ng-core/core/models/dto/confirmation.dto.ts","ng://@gipisistemas/ng-core/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/dropdown-menu/dropdown-menu.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/expansion-panel/expansion-panel.component.ts","ng://@gipisistemas/ng-core/core/services/confirmation.service.ts","ng://@gipisistemas/ng-core/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/footer/footer.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/form-field/form-field.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/helpful-tip/helpful-tip.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-checkbox/input-checkbox.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-currency/input-currency.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-monthpicker/input-monthpicker.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-select-enum/input-select-enum.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/dom/connected-overlay-scroll-handler.ts","ng://@gipisistemas/ng-core/shared/gipi-components/overlay/overlay.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-select/input-select.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-select-listbox/input-select-listbox.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-select-paged/input-search/input-search.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-select-paged/input-select-paged.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/input-select-radio/input-select-radio.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/notification/notification.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/novelties/novelties.component.ts","ng://@gipisistemas/ng-core/core/utils/password.util.ts","ng://@gipisistemas/ng-core/shared/gipi-components/password-requeriments/password-requeriments.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/popover/shared/popover-animations.ts","ng://@gipisistemas/ng-core/shared/gipi-components/popover/popover.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/popover/shared/popover-target.ts","ng://@gipisistemas/ng-core/shared/gipi-components/radio-group/radio-group.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/select-button/select-button.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/select/select.component.ts","ng://@gipisistemas/ng-core/core/services/breakpoint-observer.service.ts","ng://@gipisistemas/ng-core/core/services/nav.service.ts","ng://@gipisistemas/ng-core/shared/gipi-components/sidebar/container/container.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/sidebar/sidenav/sidenav.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/stepper/stepper.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-body/table-body.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-footer/table-footer.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/models/sort.model.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-header/table-header.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-pagination/table-pagination.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/table.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/toolbar/toolbar.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/top-nav/top-nav.component.ts","ng://@gipisistemas/ng-core/core/utils/number.util.ts","ng://@gipisistemas/ng-core/core/utils/date.util.ts","ng://@gipisistemas/ng-core/shared/gipi-components/user-profile/user-profile.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/calendar-body.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/month-view.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/year-view.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/calendar.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/date-range-input.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.ts","ng://@gipisistemas/ng-core/core/utils/browser.util.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/datepicker/datepicker.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/datepicker.module.ts","ng://@gipisistemas/ng-core/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/month-year-picker/month-year-picker.component.ts","ng://@gipisistemas/ng-core/core/models/enums/sort-direction.enum.ts","ng://@gipisistemas/ng-core/shared/gipi-components/month-year-picker/mont-year-picker.module.ts","ng://@gipisistemas/ng-core/shared/gipi-components/range-page/range-page.component.ts","ng://@gipisistemas/ng-core/shared/gipi-components/range-slider/range-slider.component.ts","ng://@gipisistemas/ng-core/shared/shared.module.ts","ng://@gipisistemas/ng-core/core/models/dto/page.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/sort.dto.ts","ng://@gipisistemas/ng-core/core/enums/local-time.enum.ts","ng://@gipisistemas/ng-core/core/components/abstract-find.component.ts","ng://@gipisistemas/ng-core/core/components/abstract-crud.component.ts","ng://@gipisistemas/ng-core/core/services/authentication.service.ts","ng://@gipisistemas/ng-core/core/interceptors/auth.interceptor.ts","ng://@gipisistemas/ng-core/core/interceptors/error.interceptor.ts","ng://@gipisistemas/ng-core/core/services/dialog.service.ts","ng://@gipisistemas/ng-core/core/services/svg-register.service.ts","ng://@gipisistemas/ng-core/core/utils/time.util.ts","ng://@gipisistemas/ng-core/core/pipes/local-time.pipe.ts","ng://@gipisistemas/ng-core/core/gipi-components/services/abstract.service.ts","ng://@gipisistemas/ng-core/core/gipi-components/services/abstract-crud.service.ts","ng://@gipisistemas/ng-core/core/gipi-components/services/file.service.ts","ng://@gipisistemas/ng-core/core/gipi-components/services/session-storage.service.ts","ng://@gipisistemas/ng-core/core/gipi-components/services/base.service.ts","ng://@gipisistemas/ng-core/core/gipi-components/components/abstract.component.ts","ng://@gipisistemas/ng-core/core/gipi-components/components/abstract-crud.component.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/page.model.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/sort.model.ts","ng://@gipisistemas/ng-core/core/gipi-components/components/abstract-find.component.ts","ng://@gipisistemas/ng-core/core/core.module.ts","ng://@gipisistemas/ng-core/core/models/enums/criteria-operation.enum.ts","ng://@gipisistemas/ng-core/core/models/enums/criteria-sort-direction.enum.ts","ng://@gipisistemas/ng-core/core/models/enums/menu-type.enum.ts","ng://@gipisistemas/ng-core/core/models/enums/radio-button.enum.ts","ng://@gipisistemas/ng-core/core/guards/auth.guard.ts","ng://@gipisistemas/ng-core/core/guards/permission.guard.ts","ng://@gipisistemas/ng-core/core/guards/public.guard.ts","ng://@gipisistemas/ng-core/core/models/abstract.model.ts","ng://@gipisistemas/ng-core/core/models/base-user.model.ts","ng://@gipisistemas/ng-core/core/models/dto/chart.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/dialog.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/filter.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/input-listbox.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/menu.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/table-column.dto.ts","ng://@gipisistemas/ng-core/core/models/dto/token.dto.ts","ng://@gipisistemas/ng-core/core/models/multitenant.model.ts","ng://@gipisistemas/ng-core/core/models/permission.model.ts","ng://@gipisistemas/ng-core/core/models/role.model.ts","ng://@gipisistemas/ng-core/core/services/abstract-find.service.ts","ng://@gipisistemas/ng-core/core/services/abstract-crud.service.ts","ng://@gipisistemas/ng-core/core/extensions/string.extension.ts","ng://@gipisistemas/ng-core/core/utils/currency.util.ts","ng://@gipisistemas/ng-core/core/gipi-components/enums/sort-direction.enum.ts","ng://@gipisistemas/ng-core/core/utils/document.util.ts","ng://@gipisistemas/ng-core/core/utils/email.util.ts","ng://@gipisistemas/ng-core/core/utils/phone.util.ts","ng://@gipisistemas/ng-core/core/utils/table-column-builder.ts","ng://@gipisistemas/ng-core/core/utils/url-params.util.ts","ng://@gipisistemas/ng-core/core/gipi-components/decorators/autowired.decorator.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/abstract-filter.model.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/abstract.model.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/applied-filter.model.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/dto/abstract.dto.ts","ng://@gipisistemas/ng-core/core/gipi-components/models/page-event.model.ts","ng://@gipisistemas/ng-core/shared/components/popover/popover.service.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/models/table-column.model.ts","ng://@gipisistemas/ng-core/shared/gipi-components/table/models/table-column-builder.model.ts","ng://@gipisistemas/ng-core/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__values","o","m","__read","ar","error","__spread","concat","APP_MESSAGES","InjectionToken","DEFAULT_MESSAGES","SUCCESS","RETURN_CONFIRMATION","DELETE_CONFIRMATION","DELETE_ALL_CONFIRMATION","BUTTON_OK_CONFIRMATION","BUTTON_CANCEL_CONFIRMATION","NOT_PERMISSION","MAT_DATE_FORMATS","MODULES","A11yModule","CdkPopoverEditModule","CdkTableModule","CdkTreeModule","CdkStepperModule","DragDropModule","MatAutocompleteModule","MatBadgeModule","MatBottomSheetModule","MatButtonModule","MatButtonToggleModule","MatCardModule","MatCheckboxModule","MatChipsModule","MatDialogModule","MatDividerModule","MatExpansionModule","MatFormFieldModule","MatGridListModule","MatIconModule","MatInputModule","MatListModule","MatMenuModule","MatPaginatorModule","MatProgressBarModule","MatProgressSpinnerModule","MatRadioModule","MatRippleModule","MatSelectModule","MatSidenavModule","MatSlideToggleModule","MatSliderModule","MatSnackBarModule","MatSortModule","MatStepperModule","MatTableModule","MatTabsModule","MatToolbarModule","MatTooltipModule","MatTreeModule","ScrollingModule","PortalModule","MaterialModule","NgModule","imports","exports","ButtonComponent","color","loading","download","stylePopover","onClick","EventEmitter","ngOnInit","onClickButton","event","disabled","emit","stopPropagation","ContentChild","static","TemplateRef","ViewChild","MdePopoverTrigger","read","ElementRef","Input","MatMenu","Output","Component","selector","template","CardComponent","shadow","margin","CheckboxComponent","indeterminateChange","change","onChange","onTouch","val","registerOnChange","fn","registerOnTouched","writeValue","CheckboxComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","IconComponent","InputCurrencyComponent","tooltip","maxlength","type","appearance","styleClassFormField","styleClassSuffix","InputCurrencyComponent_1","StringUtil","replaceAccents","normalize","replace","removeAccents","isEmpty","ObjectUtil","isNull","format","mask","formatted","includes","pad","valueMask","substring","valorMaskPos","isNaN","parseInt","charAt","indexOf","truncateWithEllipses","text","max","trim","EMPTY","isNewModel","id","get","UUIDUtil","isValid","isNotNil","isNil","clone","resolveFieldData","data","field","isFunction","fields","split","len","obj","equals","obj1","obj2","equalsByValue","length_1","arrA","isArray","arrB","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","toString","keys","str","search","merge","undefined","join","shallowEqual","objA","objB","keysA","keysB","bHasOwnProperty","bind","idx","hasPropertyInObj","property","AbstractComponent","messageService","router","activatedRoute","loadingChange","ngOnDestroy","hasPermission","permission","JSON","parse","localStorage","getItem","user","authorities","find","authority","match","handleError","String","Error","message","addErrorMessage","addSuccessMessage","add","icon","title","addWarningMessage","addInfoMessage","fileName","mimeType","blob","Blob","link","document","createElement","url","URL","createObjectURL","setAttribute","style","visibility","appendChild","click","removeChild","downloadContent","response","headers","printArchive","htmlIFrameElement","display","position","right","bottom","width","height","border","src","onload","setTimeout","focus","contentWindow","print","UUIDIsValid","AbstractService","onDestroy","Subject","complete","options","params","buildHeaders","buildParams","HttpHeaders","HttpParams","mapper","jsonObj","throwError","MessageDTO","_super","AbstractDTO","AlertComponent","Inject","args","MAT_SNACK_BAR_DATA","MessageService","snackBar","_this","openFromComponent","verticalPosition","horizontalPosition","duration","MatSnackBar","Injectable","providedIn","InputFileComponent","maximumSize","archiveChange","nativeFileChange","validateExtensions","file","extensions","filter","extension","name","toLowerCase","endsWith","reduce","previous","current","validateMaximumSize","size","uploadArchive","element","fileInput","nativeElement","onchange","files","archive","Archive","reader_1","FileReader","fileByteArray_1","readAsArrayBuffer","onloadend","readyState","DONE","arrayBuffer","array","Uint8Array","content","downloadArchive","clearArchive","Router","ActivatedRoute","InputComponent","_inputSubject","BehaviorSubject","_maskPhone","readonly","hidePasswordManager","phone","dropSpecialCharacters","upperCase","lowerCase","spaceDrop","blur","checkLowercase","checkSpaceDrop","checkUppercase","pipe","debounceTime","subscribe","PhoneUtil","ngAfterViewInit","toUpperCase","onFocus","onBlur","onInputPhoneKeyup","removeCharacters","test","onInputPhoneChange","InputComponent_1","LoadingOverlayComponent","LoadingComponent","zIndexes","getZIndex","ScrollDirection","ScrollListener","ZIndexUtils$1","el","zIndex","set","baseZIndex","lastZIndex","newZIndex","generateZIndex","clear","getCurrent","GIPINgConfig","ripple","overlayOptions","translation","startsWith","contains","notContains","notEquals","noFilter","lt","lte","gt","gte","is","isNot","before","after","dateIs","dateIsNot","dateBefore","dateAfter","matchAll","matchAny","addRule","removeRule","accept","choose","upload","cancel","dayNames","dayNamesShort","dayNamesMin","monthNames","monthNamesShort","dateFormat","firstDayOfWeek","today","weekHeader","weak","medium","strong","passwordPrompt","modal","overlay","menu","translationSource","translationObserver","asObservable","getTranslation","setTranslation","GIPIOverlayService","clickSource","clickObservable","DomHandler","addClass","className","classList","addMultipleClasses","styles","removeClass","remove","hasClass","siblings","parentNode","children","child","from","querySelectorAll","findSingle","querySelector","index","childNodes","num","nodeType","indexWithinGroup","attributeName","attributes","relativePosition","top","left","elementDimensions","offsetParent","offsetWidth","offsetHeight","getHiddenElementDimensions","targetHeight","targetOffset","getBoundingClientRect","viewport","getViewport","transformOrigin","absolutePosition","calculateTop","elementOuterHeight","elementOuterWidth","targetOuterHeight","targetOuterWidth","windowScrollTop","getWindowScrollTop","windowScrollLeft","getWindowScrollLeft","Math","getParents","parents","getScrollableParents","scrollableParents","overflowRegex_1","overflowCheck","node","styleDeclaration","window","getPropertyValue","parents_1","parents_1_1","parent_1","scrollSelectors","dataset","selectors","selectors_1","e_2","selectors_1_1","getHiddenElementOuterHeight","elementHeight","getHiddenElementOuterWidth","elementWidth","dimensions","scrollInView","container","item","borderTopValue","getComputedStyle","borderTop","parseFloat","paddingTopValue","paddingTop","containerRect","offset","scrollTop","scroll","clientHeight","itemHeight","getOuterHeight","fadeIn","opacity","last","tick","requestAnimationFrame","fadeOut","ms","gap","fading","setInterval","clearInterval","doc","documentElement","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","matches","Element","webkitMatchesSelector","getOuterWidth","marginLeft","marginRight","getHorizontalPadding","paddingLeft","paddingRight","getHorizontalMargin","innerWidth","getInnerHeight","paddingBottom","marginTop","marginBottom","getHeight","borderTopWidth","borderBottomWidth","getWidth","borderLeftWidth","borderRightWidth","win","getElementsByTagName","clientWidth","innerHeight","getOffset","rect","replaceElementWith","replacementElement","replaceChild","getUserAgent","navigator","userAgent","isIE","ua","isIOS","isAndroid","isTouchDevice","maxTouchPoints","isElement","removeElement","HTMLElement","nodeName","calculateScrollbarWidth","calculatedScrollbarWidth","scrollDiv","scrollbarWidth","calculateScrollbarHeight","calculatedScrollbarHeight","scrollbarHeight","invokeElementMethod","methodName","clearSelection","getSelection","empty","removeAllRanges","rangeCount","getRangeAt","getClientRects","getBrowser","browser","matched","resolveUserAgent","version","exec","isInteger","Number","isFinite","floor","isHidden","getFocusableElements","focusableElements","visibleFocusableElements","focusableElements_1","focusableElements_1_1","focusableElement","zindex","ConnectedOverlayScrollHandler","listener","bindScrollListener","addEventListener","unbindScrollListener","removeEventListener","destroy","OverlayPanelComponent","renderer","cd","zone","config","overlayService","dismissable","closeIconSize","appendTo","autoZIndex","focusOnShow","showTransitionOptions","hideTransitionOptions","onShow","onHide","overlayVisible","render","isOverlayAnimationInProgress","selfClick","ngAfterContentInit","bindDocumentClickListener","documentClickListener","runOutsideAngular","documentEvent","documentTarget","ownerDocument","listen","run","hide","markForCheck","unbindDocumentClickListener","toggle","hasTargetChanged","destroyCallback","show","currentTarget","onOverlayClick","originalEvent","onContentClick","appendContainer","restoreAppend","align","ZIndexUtils","containerOffset","arrowLeft","setProperty","onAnimationStart","toState","bindDocumentResizeListener","overlayEventListener","overlaySubscription","onAnimationEnd","unsubscribe","onContainerDestroy","focusable","onCloseClick","preventDefault","onWindowResize","documentResizeListener","unbindDocumentResizeListener","scrollHandler","destroyed","Renderer2","ChangeDetectorRef","NgZone","animations","trigger","state","transform","transition","animate","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","host","class","PopoverRef","afterClosed","afterClosed$","backdropClick","_close","close","dispose","PopoverComponent","popoverRef","renderMethod","context","RadioGroupEntityComponent","entities","entity","RadioGroupEntityComponent_1","GenerateIdComponent","uniqueId","nameComponent","stringArr","S4","random","RadioGroupEnumComponent","changeDetectorRef","enumList","isGroupbox","isInput","selectionChange","lEnumList","enum","map","sort","valuesExclud","this_1","some","detectChanges","changeRadioGroup","_a","validateOmitByKey","valuesOmit","getId","RadioGroupEnumComponent_1","SelectButtonComponent","tabindex","onOptionClick","onModelChange","onModelTouched","getPropertyLabel","option","getOptionValue","optionValue","isOptionDisabled","optionDisabled","setDisabledState","onItemClick","multiple","isSelected","removeOption","dataKey","selected","_b","_c","SelectButtonComponent_1","SelectEntityPagedComponent","_changeDetectorRef","valueSearchCtrl","FormControl","totalOptions","subscriptions","searching","toggleAllCheckboxChecked","toggleAllCheckboxIndeterminate","_options","closeIcon","hideFieldSearch","showClear","trackyBy","initLoaded","infiniteScroll","modelChange","searchChange","addChange","openedChange","trackByOption","_paramNextBatch","modelValue","ArrayUtil","valueChanges","distinctUntilChanged","onSearchChange","ngOnChanges","changes","model","isFirstChange","forEach","sub","compareFn","f1","f2","propertyFn","getValue","properties","onSelectionChange","matSelect","panelOpen","onToggleAllSelection","page","onLoadMoreOptions","isInfiniteScroll","isOpened","nextBatchFn","console","totalElements","cdkVirtualScrollViewPort","scrollToIndex","checkViewportSize","pageNumber","number","paramNextBatch","findIndex","splice","modelInList","finally","selectAll","select","deselect","onToggleIndeterminateAllSelection","lOptions","showClearOptionButton","haveSelected","onClickAdd","MatSelect","CdkVirtualScrollViewport","SelectEntityPagedComponent_1","SelectButtonAddComponent","_viewportRuler","matOption","matFormField","addIcon","ariaLabel","ViewportRuler","MatOption","Optional","MatFormField","SelectButtonNextBatchComponent","SelectNoEntriesFoundDirective","Directive","SelectSearchClearDirective","configurableDefaultOptions","ITSS_SELECT_SEARCH_DEFAULT_OPTIONS","SelectSearchComponent","defaultOptions","placeholderLabel","noEntriesFoundLabel","clearSearchInput","disableInitialFocus","enableClearOnEscapePressed","preventHomeEndKeyPropagation","disableScrollToActiveOnOptionsChanged","showToggleAllCheckbox","_toggleAllCheckboxChecked","_toggleAllCheckboxIndeterminate","toggleAllCheckboxTooltipMessage","toggleAllCheckboxTooltipPosition","hideClearSearchButton","alwaysRestoreSelectedOptionsMulti","toggleAll","toggleAllIndeterminate","_options$","optionsList$","switchMap","toArray","startWith","of","optionsLength$","_formControl","_showNoEntriesFound$","combineLatest","optionsLength","getOptionsLengthOffset","_onDestroy","onTouched","applyDefaultOptions","configurableDefaultOptions_1","configurableDefaultOptions_1_1","_getHostElement","delay","takeUntil","opened","updateInputWidth","_focus","_reset","take","previousFirstOption","tap","currentFirstOption","keyManager","_keyManager","compareWith","activeItem","setFirstItemActive","showNoEntriesFound","initMultipleHandling","disable","enable","_isToggleAllCheckboxVisible","_handleKeydown","keyCode","A","Z","ZERO","NINE","SPACE","HOME","END","ENTER","ESCAPE","_handleKeyup","UP_ARROW","DOWN_ARROW","ariaActiveDescendantId_1","_getAriaActiveDescendant","unselectActiveDescendant","activeDescendant","searchSelectInput","_lastExternalInputValue","setValue","panel","ngControl","previousSelectedValues","values","restoreSelectedValues","optionValues_1","previousValue","_onChange","innerSelectSearch","panelElement","parentElement","removeAttribute","HostBinding","SelectSearchComponent_1","sortObjects","propertyList","sortProp","x","typeOrder","sortFactor","isAsc","xValue","fnGetPropertyValue","yValue","xType","yType","compareResult","localeCompare","xValOrder","yValOrder","SelectEntityComponent","filteredEntities","previousSearchValue","allSelected","indeterminateAllSelected","displayCheckboxAll","_modelValue","ngAfterContentChecked","currentValue","filterEntities","propertyEnum","onSearch","valueSearch","resetSearch","toggleAllSelection","validateIndeterminateAllSelected","showClearButton","validKey","SelectEnumComponent","SelectEnumComponent_1","SelectMonthPeriodComponent","_config","required","bootPeriod","dateChange","periodSelected","onClickButtonLeft","setMonth","getMonth","dateChangeEmit","onClickButtonRight","getMonthNameByDate","getFullYearByDate","getFullYear","SelectMonthPeriodComponent_1","SlideToggleComponent","SlideToggleComponent_1","StepperComponent","isDisableClick","selectedIndex","StepperComponent_1","CdkStepper","TabComponent","active","closeable","DynamicTabDirective","viewContainer","ViewContainerRef","TabDTO","TabGroupComponent","_componentFactoryResolver","dynamicTabs","tabs","tab","selectTab","first","openTab","action","openTabs","tabsComponent","getTabComponent","componentFactory","resolveComponentFactory","componentRef","dynamicTabPlaceholder","createComponent","instance","closeTab","closeActiveTab","activeTabs","closeAllTabs","nextTab","currentTab","previousTab","ComponentFactoryResolver","ContentChildren","QueryList","throttle","func","wait","timeout","later","leading","now","remaining","clearTimeout","trailing","BreakpointEnum","TableScrolledComponent","_elementRef","more","scrollDelay","scrollOffset","scrolled","_element","_window","setThrottle","_scroll","_windowScroll","handleScroll","getListener","scrollHeight","WINDOW","HOST","roundTo","to","getScrollDirection","st","DOWN","UP","canScroll","HostListener","Function","TableGroupHeaderDTO","columnData","childrenGroup","totalCount","TableComponent","_expandedElements","_scrollHeightCalc","_isPopoverHover","_displayedColumns","columns","paginator","backendPagination","paginatorPageIndex","paginatorLength","paginatorPageSize","paginatorPageSizeOptions","showPageSizeOptions","expandable","showHeader","headerSticky","groupHeaderSticky","groupStartExpanded","isFiltering","showColumnExpandableFixed","expandableOneRow","ignoreChildrenExpandRow","clearSort","sortActive","sortDirection","rowExpandedChange","dataChange","rowHover","_dataValue","headerRowHeight","paginatorRowHeight","_matHeaderRowRef","elementRef","paginatorRef","_matBackendPaginatorRowRef","_matFrontendPaginatorRowRef","matHeaderwHeight","matPaginatorHeight","pageSize","setHeigth","_dataSource","matSort","matFrontendPaginator","onPage","pageIndex","previousPageIndex","actionsPopoverRef","_contextPopover","closePopover","popover","getElementById","_createDataSource","visible","expandedRef","actionsRef","dataAll","MatTableDataSource","groupByColumn","groupHeaderRef","genereteGroupsByColumn","calcScrollHeight","setSortingDataAccessor","row","addCollapse","pageEvent","isExpansed","removeCollapse","expandedElementsAux","rowExpandedChangeEmit","sortData","showPopover","domRectPopover","domRectRow","cells","startPosition_1","endPosition_1","columnInitial","columnFinal","clientX","time","sortingDataAccessor","sortHeaderId","groups","group","dataColumn","groupValue","getHighlightRow","highlightRowFn","getIndexRow","hasMore","MatSort","MatPaginator","minHeight","TextareaComponent","rows","mentionConfiguration","_minHeight","_height","_maxHeight","coerceCssPixelValue","TextareaComponent_1","ItssTemplate","getType","InputSelectInfiniteScrollDirective","ngZone","threshold","_thrPx","_thrPc","_singleOptionHeight","_destroyed$","evaluateThreshold","_panel","getSelectItemHeightPx","registerScrollListener","lastIndexOf","fromEvent","handleScrollEvent","countOfRenderedOptions","infiniteScrollDistance","fontSize","LowerCaseDirective","enabledLowerCase","ngModelChange","onInputChange","keydown","valueAccessor","NgControl","PhoneMaskDirective","keydownBackspace","backspace","newVal","SpaceDropDirective","UpperCaseDirective","enabledUpperCase","GIPI_BREAKPOINTS","alias","mediaQuery","priority","overlapping","GIPI_CUSTOM_BREAKPOINTS_PROVIDER","BREAKPOINT","useValue","GIPIFileDragAndDropDirective","filesChangeEmiter","background","borderStyle","borderColor","borderRadius","onDragOver","evt","onDragLeave","onDrop","valid_files","dataTransfer","GIPIInfiniteScrollDirective","_cdkVirtualScrollViewport","_ngZone","infiniteScrollThrottle","infiniteScrollDisabled","infiniteScrollOptionHeight","getElementRef","elementScrolled","infiniteScrollcomplete","getDataLength","NOOP","GIPIResizeService","rendererFactory2","resizeSource$","listeners","disposeHandle","handler","createRenderer","registerListener","auditTime","finalize","unregisterListener","RendererFactory2","gridResponsiveMap","xs","sm","md","lg","xl","GIPIBreakpointService","resizeService","mediaMatcher","destroy$","breakpointMap","fullMap","matchMedia","bp","breakpointBooleanMap","breakpoint","castBP","MediaMatcher","GIPIRowDirective","platform","_breakpointService","_destroy$","actualGap$","ReplaySubject","GIPIAlign","GIPIJustify","GIPIGap","_setGapStyle","isBrowser","_getGap","horizontalGap","verticalGap","setStyle","results","screen","Platform","exportAs","[class.grid-row-top]","[class.grid-row-middle]","[class.grid-row-bottom]","[class.grid-row-start]","[class.grid-row-end]","[class.grid-row-center]","[class.grid-row-space-around]","[class.grid-row-space-between]","[class.grid-row-space-evenly]","GIPIColDirective","_classMap","hostFlexStyle","GIPIFlex","GIPISpan","GIPIOrder","GIPIOffset","GIPIPush","GIPIPull","GIPIXs","GIPISm","GIPIMd","GIPILg","GIPIXl","GIPIXXl","_setHostClassMap","_setHostFlexStyle","hostClassMap","_generateClass","_parseFlex","flex","listClassMap","sizeName","embedded_1","prefix","Host","[style.flex]","GIPIPaginationService","_instances","_DEFAULT_ID","defaultId","register","updateInstance","changed","prop","getCurrentPage","currentPage","setCurrentPage","ceil","totalItems","itemsPerPage","setTotalItems","setItemsPerPage","getInstance","GIPIPaginationControlsDirective","_service","pages","maxSize","pageChange","pageBoundsCorrection","changeSub","updatePageLinks","checkValidId","setCurrent","isFirstPage","isLastPage","getLastPage","inst","getTotalItems","warn","correctedCurrentPage","outOfBoundCorrection","createPageArray","totalPages","paginationRange","halfWay","isStart","isEnd","isMiddle","ellipsesNeeded","calculatePageNumber","GIPITemplateDirective","LARGE_NUMBER","MAX_SAFE_INTEGER","GIPIPaginatePipe","_state","collection","_id","slice","start","end","serverSideMode","createInstance","perPage","emitChange","stateIsIdentical","saveState","checkConfig","missing","every","Pipe","pure","GIPIActionRowComponent","GIPIActionRowComponent_1","GIPIAbstractFormComponent","flexDirection","alignItems","justifyContent","padding","dialog","attrId","attrName","GIPIAbstractFormComponent_1","GIPIBadgeComponent","textColor","GIPIBadgeComponent_1","GIPIDomHandler","appendOverlay","alignOverlay","calculateMinWidth","minWidth","getClosestRelativeElement","relativeElement","relativeElementOffset","isVisible","isExist","activeElement","getNextFocusableElement","reverse","focusedIndex","createRange","getTargetElement","nextElementSibling","previousElementSibling","GIPIPopoverTrigger","_overlay","_viewContainerRef","_dir","ariaHaspopup","popoverOpened","popoverClosed","_overlayRef","_popoverOpen","_halt","_openedByMouse","backdropCloseOnClick","closed","_checkPopover","_setCurrentConfig","destroyPopover","positionX","positionY","triggerEvent","enterDelay","leaveDelay","overlapTrigger","targetOffsetX","targetOffsetY","arrowOffsetX","arrowWidth","arrowColor","closeOnClick","setCurrentStyles","togglePopover","onMouseEnter","_mouseoverTimer","openPopover","onMouseLeave","closeDisabled","_createOverlay","attach","_portal","popoverWidth","_subscribeToBackdrop","_subscribeToDetachments","_initPopover","detach","_resetPopover","_cleanUpSubscriptions","_emitCloseEvent","detachments","_setPopoverClosed","_setPopoverOpened","throwPopoverMissingError","TemplatePortal","templateRef","_getOverlayConfig","_subscribeToPositions","positionStrategy","overlayState","OverlayConfig","_getPosition","hasBackdrop","backdropClass","direction","dir","scrollStrategy","_getOverlayScrollStrategy","strategy","scrollStrategies","noop","block","reposition","_positionSubscription","positionChanges","posisionX","connectionPair","overlayX","posisionY","overlayY","setPositionClasses","originX","originFallbackX","overlayFallbackY","originY","originFallbackY","overlayFallbackX","offsetX","offsetY","targetElement","containerPositioning","flexibleConnectedTo","withLockedPosition","withPositions","withDefaultOffsetX","withDefaultOffsetY","_backdropSubscription","_detachmentsSubscription","_handleMousedown","isFakeMousedownFromScreenReader","Overlay","Directionality","MouseEvent","GIPIButtonComponent","isButtonPrimary","_hasHostAttributes","isButtonPrimaryIcon","isButtonSecondary","isButtonSecondaryIcon","isButtonTertiary","isButtonTertiaryIcon","isButtonLink","isButtonIcon","isButtonAction","_overlayVisible","svgIcon","iconPos","notification","isForInput","onShowOverlay","onOpenPopover","onClosePopover","popoverTrigger","getHostElement","_i","attribute","hasAttribute","toggleOverlay","handleClick","handleFocus","handleBlur","onResize","UIEvent","GIPIButtonComponent_1","nextUniqueId","GIPIChipsComponent","_name","labelRemoveAll","showRemovableAll","showRemovable","removeChange","removeAllChange","_value","removeChip","chip","removeAllChips","GIPIChipsComponent_1","ConfirmationDTO","isWarningScreen","GIPIConfirmationDialogComponent","dialogRef","confirmation","messages","MatDialogRef","MAT_DIALOG_DATA","GIPIConfirmationDialogComponent_1","GIPIDropdownMenuComponent","placeholder","showTrigger","_trigger","onKeydown","onInputKeydown","onInputFocus","onInputBlur","onInputClick","GIPIDropdownMenuComponent_1","GIPIExpansionPanelComponent","isExpanded","startExpanded","expanded","emitExpanded","GIPIExpansionPanelComponent_1","ConfirmationService","confirm","dialogConfig","MatDialogConfig","disableClose","autoFocus","maxWidth","open","isAccept","toPromise","MatDialog","GIPIFileDragAndDropComponent","_messageService","_confirmationService","iconSize","iconSizeFile","verifyHasAdded","legendFieldset","listFileVisible","removingFiles","fileChange","onFileChange","pFileList","_validateCountFiles","_validateExtensionFile","_validateHasAdded","onDeleteFile","list","fileUploaded","onClearInputFile","emitFileChange","openConfirmDialogRemoveFile","valid","onlyExtensions","specialExtensions","ext","fileExtension","this_2","specExt","GIPIFileDragAndDropComponent_1","GIPIFooterComponent","GIPIFooterComponent_1","GIPIFormFieldComponent","showSearch","onKeydownEnter","onClear","_model","onButtonClearClick","onButtonSearchClick","inputRef","GIPIFormFieldComponent_1","GIPIHelpfulTipComponent","_tooltip","GIPIHelpfulTipComponent_1","GIPIInputCheckboxComponent","disableRipple","labelPosition","GIPIInputCheckboxComponent_1","GIPIInputCurrencyComponent","inputCurrencyRef","GIPIInputCurrencyComponent_1","GIPIInputMonthPickerComponent","_yearArrays","_now","_currentMonth","_currentYear","monthArrays","internalCalendarView","showOnFocus","_calendarView","onClose","onMonthChange","onYearChange","_initialYear","monthChanged","yearChanged","setDate","calendarView","month","inputFieldValue","_generateYears","realCurrentYear","initialYear","yearArrays","baseYear","clickToggleCalendar","currentView","clickPrev","clickNext","yearsPerPage","year","_monthOrYearChanged","_hideOverlay","newMonth","newYear","minDate","maxDate","isMonthSelected","isMonthDisabled","isYearSelected","isYearDisabled","onInputKeyup","_showOverlay","onButtonShowMonthpicker","toogleOverlay","HTMLInputElement","GIPIInputMonthPickerComponent_1","GIPIInputSelectEnumComponent","_enumList","_itemSizeScrollViewport","_lastOptionSelected","_disabled","_loading","_multiple","_showOnFocus","_hideOnEscape","onOpenedChange","coerceBooleanProperty","popoverOpen","formFieldSelectEnum","stopImmediatePropagation","code","hideOnEscape","onButtonSelectOptionClick","GIPIInputSelectEnumComponent_1","GIPIConnectedOverlayScrollHandler","showOverlayContentAnimation","animation","hideOverlayContentAnimation","GIPIOverlayComponent","_document","_zone","modalVisible","isOverlayClicked","isOverlayContentClicked","transformOptions","default","center","top-start","top-end","bottom-start","bottom-end","left-start","left-end","right-start","right-end","_visible","visibleChange","onBeforeShow","onBeforeHide","onAnimationDone","defaultView","_mode","mode","_style","overlayResponsiveOptions","_styleClass","styleClass","_contentStyle","contentStyle","_contentStyleClass","contentStyleClass","_target","_appendTo","_autoZIndex","_baseZIndex","_showTransitionOptions","_hideTransitionOptions","_listener","_responsive","responsive","_documentClick","media","overlayViewChild","contentViewChild","templates","contentTemplate","overlayEl","targetEl","unbindListeners","isFocus","onVisibleChange","handleEvents","overlayMode","onOverlayContentClick","onOverlayContentAnimationStart","onOverlayContentAnimationDone","bindListeners","bindDocumentKeyboardListener","unbindDocumentKeyboardListener","isTargetClicked","isSameNode","isDocumentClicked","documentClick","isOutsideClicked","which","documentKeyboardListener","Document","DOCUMENT","GIPIOverlayComponent_1","useAnimation","GIPIInputSelectComponent","_formControlSearch","inputFieldValueSelected","isLoading","labelSelectAll","showSelectAll","showFooter","onSelectChange","onAddChange","trackBy","_disableInputSearch","firstValue","overlaySelect","_searchChange","indeterminateAllCheckbox","_getValue","showOverlay","formFieldSelect","hideOverlay","onClearOptionsClick","_searchSelectInputFocus","_cache","onScroll","_pageModel","pagedData","_totalOptions","onChangeToggleAllCheckbox","indexOption","lValue","optionCheckboxIsChecked","onClickSelectAllByOption","onClickAddOptions","selectedAll","formfieldSelectSearchInput","_searchSelectInputReset","onInputSearchKeydown","GIPIInputSelectComponent_1","GIPIInputSelectListboxComponent","_renderer","_isOverlayChildrenClicked","_selectEntityOpened","_radioValue","placeholderSelected","placeholderSearch","hideFilterType","onApply","overlaySelectListbox","formFieldSelectListbox","onSelectEntityOpened","onChangeInputSelect","ngModelRadioGroup","onClickRadioButton","resizeOverlay","onRemoveOptionsSelected","inputSelect","onChangeRadioGroup","radioChange","ngModel","reset","radioValue","onClickClear","onClickApply","applyChange","filterType","GIPIInputSelectListboxComponent_1","GIPIInputSearchComponent","GIPIInputSearchComponent_1","GIPIInputSelectPagedComponent","GIPIInputSelectPagedComponent_1","GIPIInputSelectRadioComponent","hideOnClick","formFieldSelectRadio","GIPIInputSelectRadioComponent_1","GIPINotificationComponent","buttonPadding","iconWidth","iconHeight","GIPINotificationComponent_1","GIPINoveltiesComponent","hasNovelties","GIPINoveltiesComponent_1","PasswordUtil","password","isValidMinLength","isValidMaxLength","hasUppercase","hasLowercase","hasNumber","hasSpecialChar","hasBackspace","GIPIPasswordRequerimentsComponent","_password","onValid","GIPIPasswordRequerimentsComponent_1","transformPopover","GIPIPopoverComponent","role","_popoverWidth","_positionX","_positionY","_triggerEvent","_scrollStrategy","_enterDelay","_leaveDelay","_overlapTrigger","_disableAnimation","_targetOffsetX","_targetOffsetY","_arrowOffsetX","_arrowWidth","_arrowColor","_closeOnClick","_focusTrapEnabled","_focusTrapAutoCaptureEnabled","_classList","_onAnimationStateChange","throwPopoverInvalidPositionX","throwPopoverInvalidPositionY","classes","onMouseOver","popoverArrowStyles","border-top","border-right","border-bottom","border-left","popoverContentStyles","padding-top","padding-bottom","margin-top","posX","posY","GIPIPopoverComponent_1","GIPIPopoverTarget","GIPIRadioGroupComponent","fieldset","GIPIRadioGroupComponent_1","GIPISelectButtonComponent","isDisabled","getOptionLabel","optionLabel","GIPISelectButtonComponent_1","GIPISelectComponent","isOptionActive","onClickOption","GIPISelectComponent_1","POINTS_NAME","QUERY","Map","BreakpointObserverService","_size$","_getScreenSize","shareReplay","entries","NavService","menuItems","currentUrl","events","NavigationEnd","_collapseAllMenu","GIPISidenavContainerComponent","_navService","_breakpointObserverService","isScreenLarge","size$","onClickBackdrop","GIPISidenavContainerComponent_1","GIPISidenavComponent","_router","_levelOneMenuCollapsableSelected","_levelTwoMenuCollapsableSelected","_mouseEnter","labelToggle","showConfiguration","onClickMenuItem","sidenav","menuList","toggleSidenav","onMenuCollapsableReset","onMenuCollapsableSelected","onMenuCollapsableGoBack","isMenuActive","route","isMenuCollapsableActive","existInRoute","levelZeroActive","mi","levelOneActive","levelTwoActive","onMenuItemSelected","closeNav","getMenuName","MatSidenav","GIPISidenavComponent_1","GIPIStepperComponent","GIPIStepperComponent_1","GIPITableBodyComponent","_rowsExpanded","loadingDetail","clickOnRow","expandOnlyOneRow","rowsExpandedChange","rowDetailToggleChange","_rows","columnTrackingFn","column","rowTrackingFn","getShowHighlightRow","getIdentifierRow","getShowExpandable","rowExpandableFn","getColumnValue","userPipe","getRowExpanded","onRowExpandedChange","onClickCell","GIPITableBodyComponent_1","GIPITableFooterComponent","GIPITableFooterComponent_1","SortModel","_property","_direction","GIPITableHeaderComponent","_sortedColumn","sortStart","sortDisableClear","sortLocked","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","sortChange","columnActive","sortable","onSortChange","_getNextSortDirection","isEqualsColumns","GIPITableHeaderComponent_1","GIPITablePaginationComponent","_directionLinks","_autoHide","previousTooltip","nextTooltip","coerceToBoolean","trackByIndex","GIPITablePaginationComponent_1","input","GIPITableProgressBarComponent","GIPITableProgressBarComponent_1","GIPITableComponent","tableShowBorder","hideHeader","hideFooter","GIPITableComponent_1","GIPIToolbarComponent","GIPIToolbarComponent_1","GIPITopNavComponent","GIPITopNavComponent_1","NumberUtil","isPositive","isNegative","digitsInfo","formatPercent","formatNumber","onlyNumbers","isNumber","moment","moment_","DateUtil","formatDate","isGreaterThan","isEqual","initial","final","granularity","initialMoment","finalMoment","startOf","isSame","isAfter","isLessThan","isBefore","isLessThanOrEqual","isGreaterThanOrEqual","isBetween","date","diffBetweenDates","diff","lDateInitial","lDateFinal","lDiff","lReturn","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asMonths","getDayOfWeek","getDay","isValidWithString","pattern","stringToDate","zoned","dateItems","formatItems","yearIndex","monthIndex","dayIndex","hourIndex","minutesIndex","secondsIndex","UTC","dateAndStringHourToDate","hour","stringDate","stringFormattedToDate","getLastDayMonth","getDate","isValidMonth","isEqualMonth","isGreaterThanMonth","isLessThanMonth","isLessThanOrEqualMonth","isGreaterThanOrEqualMonth","isBetweenMonth","getNameWeekTranslation","week","getNameMonthTranslation","isDate","isNotEmpty","DATE_FORMAT","DATE_TIME_FORMAT","GIPIUserProfileComponent","clickEdit","clickExit","lastAccess","GIPIUserProfileComponent_1","MAT_DATE_LOCALE","factory","MAT_DATE_LOCALE_FACTORY","inject","LOCALE_ID","MAT_DATE_LOCALE_PROVIDER","DateAdapter","_localeChanges","localeChanges","getValidDateOrNull","isDateInstance","deserialize","invalid","setLocale","locale","compareDate","second","getYear","sameDate","firstValid","secondValid","clampDate","min","DateRange","MatDateSelectionModel","selection","_adapter","_selectionChanged","selectionChanged","updateSelection","source","_isValidDateInstance","MatSingleDateSelectionModel","adapter","isComplete","MatRangeDateSelectionModel","MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY","parent","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","deps","SkipSelf","useFactory","MAT_RANGE_DATE_SELECTION_MODEL_FACTORY","MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER","createMissingDateImplError","provider","MatDatepickerIntl","calendarLabel","openCalendarLabel","prevMonthLabel","nextMonthLabel","prevYearLabel","nextYearLabel","prevMultiYearLabel","nextMultiYearLabel","switchToMonthViewLabel","switchToMultiYearViewLabel","formatYearRange","MatCalendarCell","displayValue","enabled","cssClasses","compareValue","rawValue","MatCalendarBody","numCols","activeCell","isRange","cellAspectRatio","previewStart","previewEnd","selectedValueChange","previewChange","_enterHandler","_skipNextFocus","cell_1","_getCellFromElement","_leaveHandler","isTableCell","_cellClicked","cell","_isSelected","startValue","endValue","columnChanges","_firstRowOffset","_cellPadding","_cellWidth","_isActiveCell","rowIndex","colIndex","cellNumber","_focusActiveCell","movePreview","onStable","_isRangeStart","_isRangeEnd","_isInRange","isInRange","_isComparisonStart","comparisonStart","comparisonEnd","_isComparisonBridgeStart","previousCell","previousRow","_isComparisonBridgeEnd","_isComparisonEnd","nextCell","nextRow","_isInComparisonRange","_isComparisonIdentical","_isPreviewStart","_isPreviewEnd","_isInPreview","getAttribute","col","aria-readonly","rangeEnabled","MAT_DATE_RANGE_SELECTION_STRATEGY","DefaultMatCalendarRangeStrategy","_dateAdapter","selectionFinished","currentRange","createPreview","activeDate","MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY","MAT_CALENDAR_RANGE_STRATEGY_PROVIDER","MatMonthView","_dateFormats","_rangeStrategy","_rerenderSubscription","Subscription","selectedChange","_userSelection","activeDateChange","_activeDate","oldActiveDate","validDate","_hasSameMonthAndYear","_init","_selected","_setRanges","_minDate","_maxDate","comparisonChange","firstChange","_dateSelected","rangeStartDate","rangeEndDate","selectedYear","selectedMonth","selectedDate","createDate","_getDateInCurrentMonth","_handleCalendarBodyKeydown","isRtl","_isRtl","LEFT_ARROW","addCalendarDays","RIGHT_ARROW","getNumDaysInMonth","PAGE_UP","altKey","addCalendarYears","addCalendarMonths","PAGE_DOWN","dateFilter","_previewEnd","_previewStart","_todayDate","_getCellCompareValue","_monthLabel","getMonthNames","toLocaleUpperCase","firstOfMonth","_firstWeekOffset","getFirstDayOfWeek","_initWeekdays","_createWeekCells","_matCalendarBody","_previewChanged","previewRange","narrowWeekdays","getDayOfWeekNames","weekdays","long","narrow","_weekdays","daysInMonth","dateNames","getDateNames","_weeks","_shouldEnableDate","dateA11yLabel","cellClasses","dateClass","d1","d2","day","selectedValue","_rangeStart","_rangeEnd","_isRange","_comparisonRangeStart","_comparisonRangeEnd","MatMultiYearView","yearSelected","isSameMultiYearView","_setSelectedYear","_todayYear","minYearOfPage","getActiveOffset","_years","_createCellForYear","_yearSelected","_getActiveCell","yearName","getYearName","_shouldEnableYear","_selectedYear","dateAdapter","date1","date2","year1","year2","startingYear","getStartingYear","activeYear","MatYearView","monthSelected","_setSelectedMonth","_monthSelected","normalizedDate","_todayMonth","_getMonthInCurrentYear","_yearLabel","_months","_createCellForMonth","monthName","monthYearA11yLabel","_shouldEnableMonth","_isYearAndMonthAfterMaxDate","_isYearAndMonthBeforeMinDate","maxYear","maxMonth","minYear","minMonth","_selectedMonth","MatCalendar","_intl","matCalendarRef","_moveFocusOnNextTick","startView","stateChanges","_intlChanges","_startAt","_clampedActiveDate","_currentView","startAt","ngAfterViewChecked","focusActiveCell","view","_getCurrentViewComponent","updateTodaysDate","monthView","yearView","multiYearView","_yearSelectedInMultiYearView","normalizedYear","_monthSelectedInYearView","normalizedMonth","_goToDateInView","MatCalendarHeader","matCalendar","monthYearLabel","maxYearOfPage","minYearName","maxYearName","multi-year","currentPeriodClicked","previousClicked","nextClicked","previousEnabled","_isSameView","nextEnabled","MatDatepickerInputEvent","MatDatepickerInputBase","dateInput","_valueChange","_onTouched","_validatorOnChange","_cvaOnChange","_valueChangesSubscription","_localeSubscription","_parseValidator","_lastValueValid","matDatepickerParse","_filterValidator","control","controlValue","_getDateFilter","matDatepickerFilter","_minValidator","_getMinDate","matDatepickerMin","actual","_maxValidator","_getMaxDate","matDatepickerMax","_getValueFromModel","_pendingValue","_isValidValue","oldDate","_assignValue","_formatValue","_parentDisabled","newValue","_isInitialized","_getValidators","_registerModel","_canEmitChangeEvent","_outsideValueChanged","dateInputsHaveChanged","registerOnValidatorChange","validate","_validator","_onKeydown","readOnly","_openPopup","_onInput","lastValueWasValid","_onBlur","_assignValueToModel","keys_1","keys_1_1","MAT_DATE_RANGE_INPUT_PARENT","MatDateRangeInputPartBase","_rangeInput","_defaultErrorStateMatcher","_injector","_parentForm","_parentFormGroup","dateFormats","InjectFlags","Self","ngDoCheck","updateErrorState","_getPlaceholder","_handleChildValueChange","_openDatepicker","_groupDisabled","ErrorStateMatcher","Injector","NgForm","FormGroupDirective","_MatDateRangeInputBase","mixinErrorState","MatStartDate","rangeInput","defaultErrorStateMatcher","injector","parentForm","parentFormGroup","_startValidator","matStartDateInvalid","Validators","compose","_endInput","range","getMirrorValue","MatStartDate_1","[disabled]","(input)","(change)","(keydown)","[attr.id]","[attr.aria-haspopup]","[attr.aria-owns]","[attr.min]","[attr.max]","(blur)","NG_VALIDATORS","MatEndDate","_endValidator","matEndDateInvalid","_startInput","BACKSPACE","MatEndDate_1","matDatepickerAnimations","transformPanel","fadeInCalendar","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY","hasV8BreakIterator","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","MatDatepickerContentBase","MatDatepickerContent","_rangeSelectionStrategy","_subscriptions","_animationState","_animationDone","datepicker","_stateChanges","_calendar","_handleUserSelection","newSelection","_startExitAnimation","_getSelected","[@transformPanel]","(@transformPanel.done)","[class.mat-datepicker-content-touch]","inputs","mixinColor","MatDatepickerBase","_dialog","_inputStateChanges","_touchUi","xPosition","yPosition","openedStream","closedStream","_opened","_focusedElementBeforeOpen","_backdropHarnessClass","_datepickerInput","getStartValue","_color","getThemePalette","positionChange","_popupRef","_setConnectedPositions","getConfig","updatePosition","_destroyPopup","_selectYear","_selectMonth","_registerInput","touchUi","_openAsDialog","_openAsPopup","_popupComponentRef","_dialogRef","completeClose","viewContainerRef","panelClass","maxHeight","restoreFocus","_forwardContentValues","componentInstance","portal","ComponentPortal","_createPopup","getConnectedOverlayOrigin","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","overlayConfig","overlayElement","keydownEvents","primaryX","secondaryX","primaryY","secondaryY","MatDateRangePicker","MatDatepicker","MAT_DATEPICKER_VALUE_ACCESSOR","MatDatepickerInput","MAT_DATEPICKER_VALIDATORS","MAT_FORM_FIELD","_formField","_datepicker","_min","validValue","_max","_dateFilter","getPopupConnectionElementRef","MatDatepickerInput_1","MAT_INPUT_VALUE_ACCESSOR","[attr.data-mat-calendar]","MatDateRangeInput","focused","controlType","_ariaDescribedBy","separator","_rangePicker","rangePicker","_required","_revalidate","errorState","startEmpty","endEmpty","setDescribedByIds","ids","onContainerClick","_getInputMirrorValue","_shouldHidePlaceholders","_shouldHideSeparator","_hideControlPlaceholder","_getAriaLabelledby","formField","_hasFloatingLabel","_labelId","ControlContainer","MatDateRangeInput_1","[class.mat-date-range-input-hide-placeholders]","[class.mat-date-range-input-required]","[attr.aria-labelledby]","[attr.aria-describedby]","MatFormFieldControl","MatDatepickerToggleIcon","MatDatepickerToggle","defaultTabIndex","parsedTabIndex","tabIndex","_watchStateChanges","_open","datepickerStateChanged","observableOf","inputStateChanged","datepickerToggled","Attribute","MatButton","[attr.tabindex]","[class.mat-datepicker-toggle-active]","[class.mat-accent]","[class.mat-warn]","(focus)","Intl","v8BreakIterator","SUPPORTS_INTL_API","_platformId","isPlatformBrowser","EDGE","TRIDENT","BLINK","chrome","CSS","WEBKIT","IOS","FIREFOX","ANDROID","SAFARI","PLATFORM_ID","DEFAULT_MONTH_NAMES","short","DEFAULT_DATE_NAMES","DEFAULT_DAY_OF_WEEK_NAMES","ISO_8601_REGEX","valueFunction","valuesArray","NativeDateAdapter","matDateLocale","useUtcForDisplay","_clampDate","dtf_1","DateTimeFormat","timeZone","_stripDirectionalityCharacters","_format","dtf_2","dtf_3","weekday","dtf","_createDateWithOverflow","displayFormat","setFullYear","toDateString","years","months","newDate","days","toIso8601","getUTCFullYear","_2digit","getUTCMonth","getUTCDate","NaN","setHours","setUTCFullYear","setUTCHours","getHours","getMinutes","getSeconds","getMilliseconds","BrowserUtil","browsers","indexBrowser","DateRangePickerComponent","idStartDate","idEndDate","nameStartDate","nameEndDate","placeholderStartDate","placeholderEndDate","help","_customRangeLabel","_maxRange","_readonly","_startDate","_endDate","startDate","_ranges","coerceNumberProperty","toDate","endOf","endDate","onInputContentClick","matDatepickerToggleRef","generatedStartDate","valueDate","keyUp","generatedEndDate","DateRangePickerComponent_1","MaxRangeSelectionStrategy","delta","rangeEnd","MaxRangeDirective","maxRangeStrategy","useClass","PresetRangeComponent","rangesArray","selectedRange","matDateRangeInput","matDateRangePicker","_renderRanges","_loadSelectedRange","ranges","maxRange","customRange","startRange","endRange","customRangeLabel","_calculateDateRange","startDateResp","endDateResp","_getValidDateOrNull","_isDateInstance","_isValid","clickRange","isDisableRange","rangeMarkers","areBothBefore","areBothAfter","PresetRangeComponent_1","DatepickerComponent","generatedDate","validateMinAndMaxDate","DatepickerComponent_1","DatepickerModule","CommonModule","OverlayModule","FormsModule","ReactiveFormsModule","PlatformModule","MatNativeDateModule","declarations","ɵ0$2","entryComponents","CalendarMonthYearComponent","_locale","monthYearPicker","toggleShowYears","onValueChange","selectedMonthIndex","selectedMonthYear","decrement","decrementYear","isShowYears","_renderYears","increment","incrementYear","selectMonth","isSelectedMonth","selectedYearMoment","isCurrentMonth","currentMonth","currentYear","isDisabledMonth","selectedYearText","selectYear","updateYearText","isSelectedYear","isCurrentYear","isDisabledYear","CalendarMonthYearComponent_1","GIPI_MONTH_YEAR_SCROLL_STRATEGY","GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY","SortDirectionEnum","GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY_PROVIDER","MonthYear","_month","_year","MonthPickerModel","selectedMonthMoment","monthsShort","subtract","MonthYearPickerComponent","valueLabel","valueAux","monthYear","inputMonthYearContentRef","_getConnectedOverlayOrigin","MonthYearPickerComponent_1","MonthYearPickerModule","RangePage","getTotalCount","getRange","GIPIRangePageComponent","_startPage","_endPage","placeholderStart","placeholderEnd","_step","_initPage","updateEndPage","_propagateChange","updateStartPage","newStartPage","newEndPage","selectText","GIPIRangePageComponent_1","GIPIRangeSliderComponent","_fromValue","_toValue","_fillSlider","_setToggleAccessible","fromValue","toValue","fromSlider","toSlider","controlFromInput","isByNgModel","_getParsed","_roundToStep","_notifyValueChange","controlToInput","controlFromSlider","from_1","to_1","controlToSlider","from_2","to_2","currentFrom","currentTo","fromSliderEl","toSliderEl","rangeDistance","fromPosition","toPosition","fromInput","toInput","round","GIPIRangeSliderComponent_1","GIPIComponents","GIPIDirectives","GIPIPipes","GIPIServices","SharedModule","INJECTOR","RouterModule","FlexLayoutModule","withConfig","disableDefaultBps","NgxMaskModule","forChild","NgxCurrencyModule","NgxMaterialTimepickerModule","MdePopoverModule","InfiniteScrollModule","MentionModule","ɵ0$3","PageDTO","SortDTO","LocalTimeEnum","AbstractFindComponent","service","confirmationService","returnPath","getPath","newPage","newFilterDTO","getFilterDTOSessionStorage","createTableColumns","new","navigateByUrl","skipLocationChange","navigate","edit","delete","preDelete","isFinding","deleteAll","entityList","updateStatus","save","snapshot","path","createSorts","tablePageEventDTO","sorts","DESC","isViewing","isCreating","AbstractCrudComponent","entityChange","entityValue","newEntity","initializeForm","preSave","getOne","afterInitializeForm","AuthenticationService","http","tokenSubject","token","login","username","post","accessToken","setCurrentUser","logout","revokeToken","removeToken","queryParams","returnUrl","routerState","removeItem","refreshToken","additionalParams","tokenValue","append","lHttpHeaders","isValidToken","expiration","valueOf","setItem","stringify","btoa","HttpClient","AuthInterceptor","authenticationService","intercept","request","setHeaders","Authorization","handle","ErrorInterceptor","catchError","err","HttpErrorResponse","blobToJson","httpErrorResponse","validateErrors","statusText","apiError","apierror","onLine","status","debugMessage","subErrorList","rejectedMessage","httpErrorResponse_1","reader","errmsg","readAsText","DialogService","componentOrTemplateRef","closeOnNavigation","SvgRegisterService","_matIconRegistry","_domSanitizer","registerListSvgIcons","enumSvgs","svgKeys","svgKeys_1","svgKeys_1_1","svg","registerSvgIcon","svgName","svgUrl","bypassSecurityTrustResourceUrl","addSvgIcon","MatIconRegistry","DomSanitizer","TimeUtil","period","lTime","minute","lFormat","TIME_FORMAT","_formatDate","Hour","_padToAnyDigits","minutes","seconds","Period","digits","padStart","LocalTimePipe","LocalTimePipe_1","GIPIAbstractService","handleDestroy","resource","versionAux","resourceAux","handleMapper","GIPIAbstractCrudService","baseService","httpClient","saveAll","idList","findAll","findAllEnabled","findByValue","lSort","enableOrDisable","patch","enableOrDisableAll","GIPIFileService","GIPISessionStorageService","_storage","sessionStorage","json","GIPIBaseService","_sessionStorageService","_dialogService","_fileService","_matDialog","_httpClient","_matSnackBar","GIPIAbstractComponent","_basePermissionList","onInitForm","onAfterInitForm","isEditing","isListing","addMessage","matSnackBar","getExistInRouterPath","validateParams","pathList","parameterList","GIPIAbstractCrudComponent","abstractCrudService","_entity","basePermissionList","onAfterGetOne","toGoBack","resp","goBack","showConfirmation","GIPIAbstractFindComponent","_filter","_page","_columns","_appliedFilters","_tablePageEventDTO","_onInitFilter","GIPIPageModel","createTableSorts","existInAppliedFilters","appliedFilters","newFilter","setAppliedFilters","filterSessionStorage","sessionStorageService","handleFilterSessionStorage","GIPISortModel","newRegister","setFilterSessionStorage","MAKE","editRegister","handleEntityId","UPDATE","deleteRegister","fetchAgain","_deleteRegister","DELETE","deleteAllRegister","handleEntityIdList","_deleteAllRegister","viewRegister","READ","editOrViewRegister","enableOrDisableRegister","_enableOrDisableRegister","enableAndDisableAllRegister","_enableAndDisableAllRegister","clearAppliedFilters","firstSeletected","listSelected","customCurrencyMaskConfig","allowNegative","allowZero","decimal","precision","suffix","thousands","nullable","CoreModule","setMessages","ngModule","CoreModule_1","BrowserAnimationsModule","HttpClientModule","forRoot","HTTP_INTERCEPTORS","CriteriaOperationEnum","CriteriaSortDirectionEnum","MenuTypeEnum","RadioButtonEnum","AuthGuard","canActivate","tokenValueLocalStorage","canActivateChild","PermissionGuard","hasAuthority","menuList_1","menuList_1_1","PublicGuard","BaseUser","AbstractModel","ChartDTO","DialogDTO","FilterDTO","radiobuttonSelected","entitentitiesSelected","entitiesSelected","MenuDTO","TableColumnDTO","hiddenSm","templateHeader","sliceLength","TokenDTO","MultitenantModel","Permission","make","update","Role","permissionList","AbstractFindService","AbstractCrudService","numberFullName","isCurrency","a","l","ex","$","j","toFixed","GIPISortDirectionEnum","CurrencyUtil","isPercent","formatCurrency","transformNumberFullName","DocumentUtil","clearFormat","isValidCpf","cpf","rev","isValidCnpj","cnpj","numbers","sum","pos","resultado","isValidStateRegistration","acronymState","stateRegistration","BrasilianUtil.onlyNumbers","calcDigit","BrasilianUtil.isValidIE","isValidCep","cep","BrasilianUtil.isValidCEP","ie","weight","digit","dig","fatorG","EmailUtil","maskLib","phoneNumber","country","exampleNumber","libPhone.getExampleNumber","parsedNumber","libPhone.parsePhoneNumberFromString","formatNational","formatLib","numberNotFormatted","phoneFormatted","isPossible","phoneAux","phoneNumber1","phoneNumber2","parsedNumber1","parsedNumber2","TableColumnBuilder","breakpointObserverService","sortable$","hiddenSm$","visible$","align$","breakpointObserverService$","name$","property$","value$","width$","marginLeft$","marginRight$","breakpointWidth","has","template$","templateHeader$","sliceLength$","action$","build","URLParamsUtil","param","_queryParams","URLSearchParams","location","href","getReflectType","propertyKey","getMetadata","GIPIAppliedFilter","description","_description","_key","GIPIPageEvent","_pageIndex","_pageSize","_length","PopoverService","origin","overlayRef","getOverlayConfig","createInjector","getOverlayPosition","offsetTop","global","getPositions","withPush","updatePositionStrategy","clientY","tokens","WeakMap","PortalInjector","TableColumnModel","checkboxable","columnSpan","columnSpanXs","columnSpanSm","columnSpanMd","columnSpanLg","columnSpanXl","paddingInline","templateCell","comparator","_sortable","_checkboxable","_columnSpan","_columnSpanXs","_columnSpanSm","_columnSpanMd","_columnSpanLg","_columnSpanXl","_minWidth","_maxWidth","_paddingInline","_align","_templateCell","_templateHeader","_sliceLength","_comparator","_pipe","_action","TableColumnBuilderModel","_sortable$","_visible$","_checkboxable$","_align$","_name$","_property$","_value$","_columnSpan$","_columnSpanXs$","_columnSpanSm$","_columnSpanMd$","_columnSpanLg$","_columnSpanXl$","_minWidth$","_maxWidth$","_paddingInline$","_templateCell$","_templateHeader$","_sliceLength$","_comparator$","_pipe$","_action$","isJIT","classRef","compDef","compFactory","directiveInject","catch"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { InjectionToken } from '@angular/core';\n\nimport { AppMessages } from './app-messages';\n\nexport const APP_MESSAGES = new InjectionToken<AppMessages>('app.messages');\n\nexport const DEFAULT_MESSAGES: AppMessages = {\n SUCCESS: 'Operação realizada com sucesso',\n RETURN_CONFIRMATION: 'Deseja retornar para à tela de consulta?',\n DELETE_CONFIRMATION: 'Deseja realmente excluir este registro?',\n DELETE_ALL_CONFIRMATION: 'Deseja realmente excluir os registros selecionados?',\n BUTTON_OK_CONFIRMATION: 'OK',\n BUTTON_CANCEL_CONFIRMATION: 'Cancelar',\n NOT_PERMISSION: 'Infelizmente, esta ação não é permitida para o seu perfil',\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { InjectionToken } from '@angular/core';\n\n\nexport type MatDateFormats = {\n parse: {\n dateInput: any\n },\n display: {\n dateInput: any,\n monthYearLabel: any,\n dateA11yLabel: any,\n monthYearA11yLabel: any,\n }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","import { NgModule } from '@angular/core';\n\nimport { CdkPopoverEditModule } from '@angular/cdk-experimental/popover-edit';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkStepperModule } from '@angular/cdk/stepper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CdkTreeModule } from '@angular/cdk/tree';\n\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\n\nconst MODULES = [\n A11yModule,\n CdkPopoverEditModule,\n CdkTableModule,\n CdkTreeModule,\n CdkStepperModule,\n DragDropModule,\n MatAutocompleteModule,\n MatBadgeModule,\n MatBottomSheetModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatCardModule,\n MatCheckboxModule,\n MatChipsModule,\n MatDialogModule,\n MatDividerModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatGridListModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatRadioModule,\n MatRippleModule,\n MatSelectModule,\n MatSidenavModule,\n MatSlideToggleModule,\n MatSliderModule,\n MatSnackBarModule,\n MatSortModule,\n MatStepperModule,\n MatTableModule,\n MatTabsModule,\n MatToolbarModule,\n MatTooltipModule,\n MatTreeModule,\n ScrollingModule,\n PortalModule,\n];\n\n@NgModule({\n imports: [\n ...MODULES\n ],\n exports: [\n ...MODULES\n ]\n})\nexport class MaterialModule { }\n","import { Component, ContentChild, ElementRef, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { MatMenu } from '@angular/material';\nimport { MdePopoverTrigger } from '@material-extended/mde';\n\n@Component({\n selector: 'itss-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent implements OnInit {\n\n @ContentChild('popover', { static: false }) popoverRef: TemplateRef<any>;\n\n @ViewChild('popoverTrigger', { static: false }) popoverTrigger: MdePopoverTrigger;\n\n @ViewChild('button', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @Input() label: string;\n\n @Input() icon: string;\n\n @Input() rightIcon: string;\n\n @Input() svgIcon: string;\n\n @Input() color: string = 'primary';\n\n @Input() type: 'raised' | 'stroked' | 'icon' | 'menu' | 'spinner' | 'popover' | 'popover-icon';\n\n @Input() menu: MatMenu;\n\n @Input() badge: number;\n\n @Input() badgeColor: string;\n\n @Input() disabled: boolean;\n\n @Input() tooltip: string;\n\n @Input() loading: boolean = false;\n\n @Input() download: boolean = false;\n\n @Input() stylePopover: string = '';\n\n @Input() styleClassPopover: string;\n\n // tslint:disable-next-line: no-output-on-prefix\n @Output('click') onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(true);\n\n ngOnInit(): void {\n }\n\n onClickButton(event: MouseEvent): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.onClick.emit(event);\n event.stopPropagation();\n }\n }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\n\n@Component({\n selector: 'itss-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss']\n})\nexport class CardComponent implements OnInit {\n\n @Input() cardTitle;\n\n @Input() cardSubtitle;\n\n @Input() icon;\n\n @Input() loading = false;\n\n @Input() shadow = true;\n\n @Input() margin = true;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, forwardRef, Input, OnInit, EventEmitter, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'itss-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true\n }\n ]\n})\nexport class CheckboxComponent implements ControlValueAccessor, OnInit {\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() indeterminate: boolean;\n\n @Output() indeterminateChange = new EventEmitter<boolean>();\n\n @Output() change = new EventEmitter<any>();\n\n @Input('value') val: any;\n\n ngOnInit(): void {\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n get value() {\n return this.val;\n }\n\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'itss-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss']\n})\nexport class IconComponent implements OnInit {\n\n @Input() color: string;\n\n @Input() icon: string;\n\n @Input() svgIcon: string;\n\n @Input() tooltip: string;\n\n @Input() iconSize: number;\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, ContentChild, ElementRef, forwardRef, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CurrencyMaskConfig } from 'ngx-currency';\n\n@Component({\n selector: 'itss-input-currency',\n templateUrl: './input-currency.component.html',\n styleUrls: ['./input-currency.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputCurrencyComponent),\n multi: true\n }\n ]\n})\nexport class InputCurrencyComponent implements ControlValueAccessor, OnInit {\n\n @ViewChild('input', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @ContentChild('suffix', { static: false }) suffixRef: TemplateRef<any>;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() tooltip: string = '';\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() maxlength = 250;\n\n @Input() type = 'text';\n\n @Input() appearance = 'outline';\n\n @Input('value') val: any;\n\n @Input() prefix: string;\n\n @Input() styleClassFormField: string = '';\n\n @Input() styleClassSuffix: string = '';\n\n @Input() options: Partial<CurrencyMaskConfig>;\n\n ngOnInit(): void {\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n get value() {\n return this.val;\n }\n\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n}\n","import { ObjectUtil } from './object.util';\n\n/** @dynamic */\nexport class StringUtil {\n\n public static EMPTY: string = '';\n\n public static replaceAccents(value: string): string {\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n }\n\n public static removeAccents(value: string): string {\n return value.replace(/[^\\w\\s]/gi, '');\n }\n\n public static isEmpty(value: string): boolean {\n return ObjectUtil.isNull(value) || value.length === 0;\n }\n\n public static format(value: string, mask: string): string {\n let formatted: string = value;\n if (!value.includes('*')) {\n formatted = value.replace(/\\D/g, '');\n }\n\n const pad: string = mask.replace(/\\D/g, '').replace(/9/g, '_');\n const valueMask: string = formatted + pad.substring(0, pad.length - pad.length);\n\n let valorMaskPos: number = 0;\n formatted = '';\n for (let i: number = 0; i < mask.length; i++) {\n if (isNaN(parseInt(mask.charAt(i)))) {\n formatted += mask.charAt(i);\n } else {\n formatted += valueMask[valorMaskPos++];\n }\n }\n\n if (formatted.indexOf('_') > -1) {\n formatted = formatted.substring(0, formatted.indexOf('_'));\n }\n\n return formatted;\n }\n\n public static truncateWithEllipses(text: string, max: number): '' | '...' {\n return text.trim().substring(0, max - 1) + (text.trim().length > max) ? '...' : '';\n }\n}\n","import { GIPIIndexableObject } from '../types/ng-class.type';\nimport { StringUtil } from './string.util';\nimport { UUIDUtil } from './uuid.util';\n\n/** @dynamic */\nexport class ObjectUtil {\n\n public static isNull(value: Object): boolean {\n return value === undefined || value === null;\n }\n\n public static isNewModel(value: Object): boolean {\n if (ObjectUtil.isNull(value)) {\n return true;\n }\n\n let id: number | string = null;\n if (typeof value === 'object') {\n id = Reflect.get(value, 'id');\n }\n return !UUIDUtil.isValid(id);\n }\n\n public static isNotNil<T>(value: T): value is NonNullable<T> {\n return typeof value !== 'undefined' && value !== null;\n }\n\n public static isNil(value: unknown): value is null | undefined {\n return typeof value === 'undefined' || value === null;\n }\n\n public static clone(value: Object): any {\n if (ObjectUtil.isNull(value)) {\n return new Object();\n }\n return { ...value };\n }\n\n public static resolveFieldData(data: any, field: any): any {\n if (data && field) {\n if (this.isFunction(field)) {\n return field(data);\n } else if (field.indexOf('.') === -1) {\n return data[field];\n } else {\n const fields: string[] = field.split('.');\n let value: any = data;\n for (let i: number = 0, len: number = fields.length; i < len; ++i) {\n if (value == null) {\n return null;\n }\n value = value[fields[i]];\n }\n return value;\n }\n } else {\n return null;\n }\n }\n\n public static isFunction(obj: any): boolean {\n return !!(obj && obj.constructor && obj.call && obj.apply);\n }\n\n public static equals(obj1: any, obj2: any, field?: string): boolean {\n if (field) {\n return (this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field));\n } else {\n return this.equalsByValue(obj1, obj2);\n }\n }\n\n public static equalsByValue(obj1: any, obj2: any): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n if (obj1 && obj2 && typeof obj1 === 'object' && typeof obj2 === 'object') {\n const arrA: boolean = Array.isArray(obj1);\n const arrB: boolean = Array.isArray(obj2);\n let i: any;\n let length: any;\n let key: any;\n\n if (arrA && arrB) {\n length = obj1.length;\n if (length !== obj2.length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!this.equalsByValue(obj1[i], obj2[i])) {\n return false;\n }\n }\n return true;\n }\n\n if (arrA !== arrB) {\n return false;\n }\n\n const dateA: boolean = obj1 instanceof Date;\n const dateB: boolean = obj2 instanceof Date;\n if (dateA !== dateB) {\n return false;\n }\n\n if (dateA && dateB) {\n return obj1.getTime() === obj2.getTime();\n }\n\n const regexpA: boolean = obj1 instanceof RegExp;\n const regexpB: boolean = obj2 instanceof RegExp;\n if (regexpA !== regexpB) {\n return false;\n }\n\n if (regexpA && regexpB) {\n return obj1.toString() === obj2.toString();\n }\n\n const keys: string[] = Object.keys(obj1);\n length = keys.length;\n\n if (length !== Object.keys(obj2).length) {\n return false;\n }\n\n for (i = length; i-- !== 0;) {\n if (!Object.prototype.hasOwnProperty.call(obj2, keys[i])) {\n return false;\n }\n }\n\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!this.equalsByValue(obj1[key], obj2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return obj1 !== obj1 && obj2 !== obj2;\n }\n\n public static removeAccents(str: any): any {\n if (str && str.search(/[\\xC0-\\xFF]/g) > -1) {\n str = str\n .replace(/[\\xC0-\\xC5]/g, 'A')\n .replace(/[\\xC6]/g, 'AE')\n .replace(/[\\xC7]/g, 'C')\n .replace(/[\\xC8-\\xCB]/g, 'E')\n .replace(/[\\xCC-\\xCF]/g, 'I')\n .replace(/[\\xD0]/g, 'D')\n .replace(/[\\xD1]/g, 'N')\n .replace(/[\\xD2-\\xD6\\xD8]/g, 'O')\n .replace(/[\\xD9-\\xDC]/g, 'U')\n .replace(/[\\xDD]/g, 'Y')\n .replace(/[\\xDE]/g, 'P')\n .replace(/[\\xE0-\\xE5]/g, 'a')\n .replace(/[\\xE6]/g, 'ae')\n .replace(/[\\xE7]/g, 'c')\n .replace(/[\\xE8-\\xEB]/g, 'e')\n .replace(/[\\xEC-\\xEF]/g, 'i')\n .replace(/[\\xF1]/g, 'n')\n .replace(/[\\xF2-\\xF6\\xF8]/g, 'o')\n .replace(/[\\xF9-\\xFC]/g, 'u')\n .replace(/[\\xFE]/g, 'p')\n .replace(/[\\xFD\\xFF]/g, 'y');\n }\n\n return str;\n }\n\n public static merge(obj1?: any, obj2?: any): any {\n if (obj1 == undefined && obj2 == undefined) {\n return undefined;\n } else if ((obj1 == undefined || typeof obj1 === 'object') && (obj2 == undefined || typeof obj2 === 'object')) {\n return { ...(obj1 || {}), ...(obj2 || {}) };\n } else if ((obj1 == undefined || typeof obj1 === 'string') && (obj2 == undefined || typeof obj2 === 'string')) {\n return [obj1 || '', obj2 || ''].join(' ');\n }\n\n return obj2 || obj1;\n }\n\n /**\n * Examine se dois objetos são superficialmente igualados.\n */\n public static shallowEqual(objA?: GIPIIndexableObject, objB?: GIPIIndexableObject): boolean {\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {\n return false;\n }\n\n const keysA: string[] = Object.keys(objA);\n const keysB: string[] = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n const bHasOwnProperty: any = Object.prototype.hasOwnProperty.bind(objB);\n\n for (let idx: number = 0; idx < keysA.length; idx++) {\n const key: string = keysA[idx];\n if (!bHasOwnProperty(key)) {\n return false;\n }\n if (objA[key] !== objB[key]) {\n return false;\n }\n }\n\n return true;\n }\n\n public static hasPropertyInObj(obj: Object, property: string): boolean {\n if (ObjectUtil.isNull(obj) || StringUtil.isEmpty(property)) {\n return false;\n }\n return Object.prototype.hasOwnProperty.call(obj, property);\n }\n\n}\n","import { GIPIUuid } from '../gipi-components/types/uuid.type';\nimport { ObjectUtil } from './object.util';\nimport { StringUtil } from './string.util';\n\n/** @dynamic */\nexport class UUIDUtil {\n\n public static isValid(id: GIPIUuid): boolean {\n if (ObjectUtil.isNull(id)) {\n return false;\n }\n if (typeof id === 'number') {\n return id && id > 0;\n } else if (typeof id === 'string') {\n return !StringUtil.isEmpty(id) && (id.length > 0);\n }\n }\n\n}\n","import { EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { BaseUser } from '../models/base-user.model';\nimport { TokenDTO } from '../models/dto/token.dto';\nimport { MessageService } from '../services/message.service';\nimport { UUIDUtil } from '../utils/uuid.util';\n\nexport abstract class AbstractComponent implements OnInit, OnDestroy {\n\n @Input() loading: boolean = false;\n @Output() loadingChange: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n constructor(\n protected messageService: MessageService,\n protected router: Router,\n protected activatedRoute: ActivatedRoute\n ) { }\n\n ngOnInit(): void { }\n\n ngOnDestroy(): void { }\n\n hasPermission(permission: string): boolean {\n const token: TokenDTO<BaseUser> = JSON.parse(localStorage.getItem('token'));\n return !!token.user.authorities.find(authority => authority.authority.match(permission));\n }\n\n protected handleError(error: any): void {\n this.loading = false;\n this.loadingChange.emit(this.loading);\n if (String(error).includes('Unknown')) {\n error = new Error('Ocorreu um erro ao realizar essa operação, tente novamente');\n }\n if (error instanceof Error) {\n error = error.message;\n }\n this.addErrorMessage(error);\n throw error;\n }\n\n protected addSuccessMessage(message: string): void {\n this.messageService.add({\n icon: 'check_circle',\n title: 'Sucesso',\n message: message,\n type: 'success'\n });\n }\n\n protected addErrorMessage(message: string): void {\n this.messageService.add({\n icon: 'cancel',\n title: 'Ocorreu um erro',\n message: message,\n type: 'error'\n });\n }\n\n protected addWarningMessage(message: string): void {\n this.messageService.add({\n icon: 'error',\n title: 'Atenção',\n message: message,\n type: 'warning'\n });\n }\n\n protected addInfoMessage(message: string): void {\n this.messageService.add({\n icon: 'info',\n title: 'Notificação',\n message: message,\n type: 'info'\n });\n }\n\n download(data: any, fileName: string, mimeType: string): void {\n const blob: Blob = new Blob([data], { type: mimeType });\n const link: HTMLAnchorElement = document.createElement('a');\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n\n downloadContent(response: any): void {\n this.download(\n response.body,\n response.headers.get('content-disposition').split(';')[1].split('filename')[1].split('=')[1].trim(),\n response.headers.get('content-type')\n );\n }\n\n printArchive(data: any, mimeType: string): void {\n const blob: Blob = new Blob([data], { type: mimeType });\n const url: string = URL.createObjectURL(blob);\n const htmlIFrameElement: HTMLIFrameElement = document.createElement('iframe');\n\n document.body.appendChild(htmlIFrameElement);\n htmlIFrameElement.style.display = 'none';\n htmlIFrameElement.style.position = 'fixed';\n htmlIFrameElement.style.right = '0';\n htmlIFrameElement.style.bottom = '0';\n htmlIFrameElement.style.width = '0';\n htmlIFrameElement.style.height = '0';\n htmlIFrameElement.style.border = '0';\n htmlIFrameElement.src = url;\n htmlIFrameElement.onload = () => {\n setTimeout(() => {\n htmlIFrameElement.focus();\n htmlIFrameElement.contentWindow.print();\n }, 1);\n };\n }\n\n UUIDIsValid(id: number | string): boolean {\n return UUIDUtil.isValid(id);\n }\n\n}\n","export class Archive {\n\n name: string;\n\n content: any;\n\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { OnDestroy } from '@angular/core';\nimport { Observable, Subject, throwError } from 'rxjs';\n\nexport abstract class AbstractService implements OnDestroy {\n\n protected onDestroy: Subject<void> = new Subject<void>();\n\n constructor() { }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n protected options(params?: HttpParams, headers?: HttpHeaders): {} {\n return {\n headers: headers ? headers : this.buildHeaders(),\n params: params ? params : this.buildParams()\n };\n }\n\n protected buildHeaders(): HttpHeaders {\n return new HttpHeaders();\n }\n\n protected buildParams(): HttpParams {\n return new HttpParams();\n }\n\n protected mapper(jsonObj: any): any {\n return jsonObj;\n }\n\n protected handleError(error: string): Observable<any> {\n return throwError(error);\n }\n\n}\n","export abstract class AbstractDTO {\n}\n","import { AbstractDTO } from './abstract.dto';\n\nexport class MessageDTO extends AbstractDTO {\n\n title: string;\n\n message: string;\n\n icon?: string;\n\n type: 'success' | 'error' | 'warning' | 'info';\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material';\n\nimport { MessageDTO } from '../../models/dto/message.dto';\n\n@Component({\n selector: 'a-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent implements OnInit {\n\n constructor(@Inject(MAT_SNACK_BAR_DATA) public message: MessageDTO) { }\n\n ngOnInit(): void { }\n\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material';\n\nimport { AbstractService } from './abstract.service';\nimport { MessageDTO } from '../models/dto/message.dto';\nimport { AlertComponent } from '../components/alert/alert.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService extends AbstractService {\n\n constructor(protected snackBar: MatSnackBar) {\n super();\n }\n\n add(message: MessageDTO): void {\n this.snackBar.openFromComponent(AlertComponent, {\n verticalPosition: 'top',\n horizontalPosition: 'center',\n duration: 8000,\n data: message\n });\n }\n\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { AbstractComponent } from '../../../core/components/abstract.component';\nimport { Archive } from '../../../core/models/archive.model';\nimport { MessageService } from '../../../core/services/message.service';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { StringUtil } from '../../../core/utils/string.util';\n\n@Component({\n selector: 'itss-input-file',\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss']\n})\nexport class InputFileComponent extends AbstractComponent {\n\n @ViewChild('input', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() tooltip: string = '';\n\n @Input() placeholder: string;\n\n @Input() required: boolean;\n\n @Input() disabled: boolean;\n\n @Input() appearance = 'outline';\n\n @Input() loading = false;\n\n @Input() extensions: string[];\n\n @Input() maximumSize = 3;\n\n @Output() archiveChange = new EventEmitter<Archive>();\n\n @Input() archive: Archive;\n\n @Output() nativeFileChange = new EventEmitter<File>();\n\n constructor(\n messageService: MessageService,\n router: Router,\n activatedRoute: ActivatedRoute\n ) {\n super(messageService, router, activatedRoute);\n }\n\n private validateExtensions(file: File): boolean {\n if (this.extensions.filter(extension => file.name.toLowerCase().endsWith(extension.toLowerCase())).length === 0) {\n super.addErrorMessage(\n `São permitidos somente arquivos do tipo: ${this.extensions.reduce((previous, current) => previous + ', ' + current)}`\n );\n return false;\n }\n return true;\n }\n\n private validateMaximumSize(file: File): boolean {\n if (file.size > this.maximumSize * 1000000) {\n super.addErrorMessage(\n `O arquivo deve ter no máximo ${this.maximumSize} MB.`\n );\n return false;\n }\n return true;\n }\n\n uploadArchive(): void {\n // tslint:disable-next-line:no-shadowed-variable\n const element = this.fileInput.nativeElement;\n element.value = StringUtil.EMPTY;\n element.onchange = () => {\n const file = element.files[0];\n if (!ObjectUtil.isNull(file) && this.validateExtensions(file) && this.validateMaximumSize(file)) {\n const archive = new Archive();\n archive.name = file.name;\n\n const reader = new FileReader();\n const fileByteArray = [];\n reader.readAsArrayBuffer(file);\n reader.onloadend = function (e) {\n if (reader.readyState === FileReader.DONE) {\n const arrayBuffer = reader.result, array = new Uint8Array(arrayBuffer as ArrayBuffer);\n for (let i = 0; i < array.length; i++) {\n fileByteArray.push(array[i]);\n }\n }\n };\n\n archive.content = fileByteArray;\n this.archiveChange.emit(archive);\n this.nativeFileChange.emit(file);\n }\n };\n element.click();\n }\n\n downloadArchive(): void {\n /*\n this.loading = true;\n this.loadingChange.emit(this.loading);\n this.fileService.download(this.target, this.file).subscribe(\n resp => {\n super.download(\n resp.body,\n resp.headers.get('content-disposition').split(';')[1].split('filename')[1].split('=')[1].trim(),\n resp.headers.get('content-type')\n );\n this.loading = false;\n this.loadingChange.emit(this.loading);\n },\n error => {\n super.addErrorMessage('Não foi possível baixar o arquivo');\n this.clearFile();\n });\n */\n }\n\n clearArchive(): void {\n this.fileInput.nativeElement.value = StringUtil.EMPTY;\n this.archiveChange.emit(null);\n }\n\n}\n","import { AfterViewInit, Component, ContentChild, ElementRef, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { debounceTime } from 'rxjs/operators';\nimport { PhoneUtil } from '../../../core';\n\n@Component({\n selector: 'itss-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof InputComponent => InputComponent),\n multi: true\n }\n ]\n})\nexport class InputComponent implements ControlValueAccessor, OnInit, AfterViewInit {\n\n @ViewChild('input', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @ContentChild('suffix', { static: false }) suffixRef: TemplateRef<any>;\n\n private _inputSubject: BehaviorSubject<string> = new BehaviorSubject('');\n\n public _maskPhone: BehaviorSubject<string> = new BehaviorSubject('');\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() tooltip: string = '';\n\n @Input() styleClassFormField: string = '';\n\n @Input() styleClassSuffix: string = '';\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() readonly: boolean = false;\n\n @Input() hidePasswordManager: boolean = false;\n\n @Input() maxlength: number = 250;\n\n @Input() type: string = 'text';\n\n @Input() min;\n\n @Input() max;\n\n @Input() appearance: string = 'outline';\n\n @Input('value') val: any;\n get value(): any {\n return this.val;\n }\n set value(val: any) {\n if (this.lowerCase) {\n this.val = this.checkLowercase(this.checkSpaceDrop(val));\n } else {\n this.val = this.checkUppercase(this.checkSpaceDrop(val));\n }\n this.onChange(this.val);\n this.onTouch();\n }\n\n @Input() mask: string | undefined | null;\n\n @Input() phone: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() dropSpecialCharacters: boolean = true;\n\n @Input() upperCase: boolean = false;\n\n @Input() lowerCase: boolean = false;\n\n @Input() patterns: any;\n\n @Input() spaceDrop: boolean = false;\n\n @Output() focus: EventEmitter<Event> = new EventEmitter();\n\n @Output() blur: EventEmitter<Event> = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n if (this.phone) {\n this._inputSubject.pipe(\n debounceTime(300)\n ).subscribe(value => {\n this._maskPhone.next(PhoneUtil.mask(value));\n });\n }\n }\n\n ngAfterViewInit(): void { }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n checkSpaceDrop(value: any): any {\n if (this.spaceDrop && value) {\n return value.replace(/\\s/g, '');\n }\n return value;\n }\n\n checkUppercase(value: any): any {\n if (this.upperCase && value) {\n return value.toUpperCase();\n }\n return value;\n }\n\n checkLowercase(value: any): any {\n if (this.lowerCase && value) {\n return value.toLowerCase();\n }\n return value;\n }\n\n onFocus(event: Event): void {\n if (!this.disabled) {\n this.focus.emit(event);\n }\n }\n\n onBlur(event: Event): void {\n if (!this.disabled) {\n this.blur.emit(event);\n this.onTouch();\n }\n }\n\n onInputPhoneKeyup(event: KeyboardEvent): void {\n if (!this.phone) {\n return;\n }\n const value = PhoneUtil.removeCharacters((event.target as HTMLInputElement).value);\n const key = event.key;\n\n if (/\\d/.test(key) && value.length < 12) {\n this._maskPhone.next('0*');\n }\n }\n\n onInputPhoneChange(value: string): void {\n if (!this.phone) {\n return;\n }\n\n this._inputSubject.next(value);\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'itss-loading-overlay',\n templateUrl: './loading-overlay.component.html',\n styleUrls: ['./loading-overlay.component.scss']\n})\nexport class LoadingOverlayComponent implements OnInit {\n\n @Input() message: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'itss-loading',\n templateUrl: './loading.component.html',\n styleUrls: ['./loading.component.scss']\n})\nexport class LoadingComponent implements OnInit {\n\n ngOnInit(): void {\n }\n\n}\n\n","function ZIndexUtils() {\n let zIndexes = [];\n\n const generateZIndex = (key, baseZIndex) => {\n const lastZIndex = zIndexes.length > 0 ? zIndexes[zIndexes.length - 1] : { key, value: baseZIndex };\n const newZIndex = lastZIndex.value + (lastZIndex.key === key ? 0 : baseZIndex) + 1;\n\n zIndexes.push({ key, value: newZIndex });\n\n return newZIndex;\n };\n\n const revertZIndex = (zIndex) => {\n zIndexes = zIndexes.filter(obj => obj.value !== zIndex);\n };\n\n const getCurrentZIndex = () => {\n return zIndexes.length > 0 ? zIndexes[zIndexes.length - 1].value : 0;\n };\n\n const getZIndex = (el) => {\n return el ? parseInt(el.style.zIndex, 10) || 0 : 0;\n };\n\n return {\n get: getZIndex,\n set: (key, el, baseZIndex) => {\n if (el) {\n el.style.zIndex = String(generateZIndex(key, baseZIndex));\n }\n },\n clear: (el) => {\n if (el) {\n revertZIndex(getZIndex(el));\n el.style.zIndex = '';\n }\n },\n getCurrent: () => getCurrentZIndex()\n };\n}\n\nexport default ZIndexUtils();\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\n\nimport { throttle } from '../../api/throttle';\n\nenum ScrollDirection {\n UP = 'up',\n DOWN = 'down'\n}\n\nenum ScrollListener {\n HOST = 'scroll',\n WINDOW = 'window:scroll'\n}\n\n@Component({\n selector: 'itss-table-scrolled',\n templateUrl: './table-scrolled.component.html',\n styleUrls: ['./table-scrolled.component.scss']\n})\nexport class TableScrolledComponent implements OnInit, OnChanges {\n\n private _element: Element;\n\n private _window: Element;\n\n public scrollTop: number = 0;\n\n @Input() more: boolean = true;\n\n @Input() scrollDelay: number = 500;\n\n @Input() scrollOffset: number = 1000;\n\n @Output() scrolled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @HostListener(ScrollListener.HOST) _scroll: Function;\n\n @HostListener(ScrollListener.WINDOW) _windowScroll: Function;\n\n constructor(private _elementRef: ElementRef) {\n this._element = this._elementRef.nativeElement;\n this._window = document.documentElement as Element;\n }\n\n ngOnInit(): void {\n this.setThrottle();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollDelay) {\n this.setThrottle();\n }\n }\n\n setThrottle(): void {\n this._scroll = this._windowScroll = throttle(this.handleScroll, this.scrollDelay);\n }\n\n getListener(): ScrollListener {\n if (this._elementRef.nativeElement.clientHeight === this._elementRef.nativeElement.scrollHeight) {\n return ScrollListener.WINDOW;\n } else {\n return ScrollListener.HOST;\n }\n }\n\n roundTo(from: number, to: number = this.scrollOffset): number {\n return (Math.floor(from / to) * to);\n }\n\n getScrollDirection(st: number): ScrollDirection {\n if (this.scrollTop <= st) {\n return ScrollDirection.DOWN;\n } else {\n return ScrollDirection.UP;\n }\n }\n\n canScroll(element: Element): boolean {\n const scrolled: boolean = this.more && (this.getScrollDirection(element.scrollTop) === ScrollDirection.DOWN) && (this.roundTo(element.clientHeight) === this.roundTo(element.scrollHeight - element.scrollTop));\n this.scrollTop = element.scrollTop;\n return scrolled;\n }\n\n handleScroll(): void {\n if (this.getListener() === ScrollListener.HOST) {\n this.scrolled.emit(this.canScroll(this._element));\n } else {\n this.scrolled.emit(this.canScroll(this._window));\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { OverlayOptions } from '../gipi-components/overlay/shared/overlay_options';\nimport { Translation } from './translation';\n\n@Injectable({ providedIn: 'root' })\nexport class GIPINgConfig {\n\n ripple: boolean = false;\n\n overlayOptions: OverlayOptions = {};\n\n public translation: Translation = {\n startsWith: 'Começa com',\n contains: 'Contém',\n notContains: 'Não contém',\n endsWith: 'Termina com',\n equals: 'É igual a',\n notEquals: 'Não é igual',\n noFilter: 'Sem filtro',\n lt: 'Menor que',\n lte: 'Menor que ou igual a',\n gt: 'Maior que',\n gte: 'Maior que ou igual a',\n is: 'É',\n isNot: 'Não é',\n before: 'Antes',\n after: 'Depois',\n dateIs: 'A data é',\n dateIsNot: 'A data não é',\n dateBefore: 'A data é anterior',\n dateAfter: 'A data é depois',\n clear: 'Limpar',\n apply: 'Aplicar',\n matchAll: 'Corresponder a todos',\n matchAny: 'Corresponder a qualquer',\n addRule: 'Adicionar regra',\n removeRule: 'Remover regra',\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Envio',\n cancel: 'Cancelar',\n dayNames: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['Do', 'Se', 'Te', 'Qa', 'Qi', 'Se', 'Sá'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n dateFormat: 'dd/mm/yyyy',\n firstDayOfWeek: 0,\n today: 'Hoje',\n weekHeader: 'Cabeçalho da semana',\n weak: 'Fraco',\n medium: 'Médio',\n strong: 'Forte',\n passwordPrompt: 'Insira uma senha'\n };\n\n zIndex: { modal: number; overlay: number; menu: number; tooltip: number; } = {\n modal: 2,\n overlay: 1000,\n menu: 1,\n tooltip: 2\n };\n\n private translationSource: Subject<any> = new Subject<any>();\n\n translationObserver: Observable<any> = this.translationSource.asObservable();\n\n getTranslation(key: string): any {\n return this.translation[key];\n }\n\n setTranslation(value: Translation): void {\n this.translation = { ...this.translation, ...value };\n this.translationSource.next(this.translation);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { OverlayMessage } from '../../../api/overlay-message';\n\n@Injectable({ providedIn: 'root' })\nexport class GIPIOverlayService {\n\n private clickSource: Subject<any> = new Subject<OverlayMessage | OverlayMessage[]>();\n\n clickObservable: Observable<any> = this.clickSource.asObservable();\n\n add(event: any): void {\n if (event) {\n this.clickSource.next(event);\n }\n }\n}\n","/**\n * @dynamic é para inicializar o DomHandler.browser em tempo de execução\n *\n * Se excluir o comentário abaixo, podemos ver esta mensagem de erro:\n * Os metadados coletados contêm um erro que será relatado em tempo de execução:\n * Somente variáveis e constantes inicializadas podem ser referenciadas\n * porque o valor desta variável é necessário para o compilador de template.\n */\n/** @dynamic */\nexport class DomHandler {\n\n public static zindex: number = 100;\n\n private static calculatedScrollbarWidth: number = null;\n\n private static calculatedScrollbarHeight: number = null;\n\n private static browser: any;\n\n public static addClass(element: any, className: string): void {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ' ' + className;\n }\n }\n\n public static addMultipleClasses(element: any, className: string): void {\n if (element.classList) {\n const styles: string[] = className.trim().split(' ');\n for (let i: number = 0; i < styles.length; i++) {\n element.classList.add(styles[i]);\n }\n\n } else {\n const styles: string[] = className.split(' ');\n for (let i: number = 0; i < styles.length; i++) {\n element.className += ' ' + styles[i];\n }\n }\n }\n\n public static removeClass(element: any, className: string): void {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n }\n }\n\n public static hasClass(element: any, className: string): boolean {\n if (element.classList) {\n return element.classList.contains(className);\n } else {\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n }\n }\n\n public static siblings(element: any): any {\n return Array.prototype.filter.call(element.parentNode.children, function (child) {\n return child !== element;\n });\n }\n\n public static find(element: any, selector: string): any[] {\n return Array.from(element.querySelectorAll(selector));\n }\n\n public static findSingle(element: any, selector: string): any {\n if (element) {\n return element.querySelector(selector);\n }\n return null;\n }\n\n public static index(element: any): number {\n const children: any = element.parentNode.childNodes;\n let num: number = 0;\n for (let i: number = 0; i < children.length; i++) {\n // tslint:disable-next-line: triple-equals\n if (children[i] == element) {\n return num;\n }\n // tslint:disable-next-line: triple-equals\n if (children[i].nodeType == 1) {\n num++;\n }\n }\n return -1;\n }\n\n public static indexWithinGroup(element: any, attributeName: string): number {\n const children: any = element.parentNode ? element.parentNode.childNodes : [];\n let num: number = 0;\n for (let i: number = 0; i < children.length; i++) {\n // tslint:disable-next-line: triple-equals\n if (children[i] == element) {\n return num;\n }\n // tslint:disable-next-line: triple-equals\n if (children[i].attributes && children[i].attributes[attributeName] && children[i].nodeType == 1) {\n num++;\n }\n }\n return -1;\n }\n\n public static relativePosition(element: any, target: any): void {\n const elementDimensions: any = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n const targetHeight: any = target.offsetHeight;\n const targetOffset: any = target.getBoundingClientRect();\n const viewport: any = this.getViewport();\n let top: number, left: number;\n\n if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) {\n top = -1 * (elementDimensions.height);\n element.style.transformOrigin = 'bottom';\n if (targetOffset.top + top < 0) {\n top = -1 * targetOffset.top;\n }\n } else {\n top = targetHeight;\n element.style.transformOrigin = 'top';\n }\n\n if (elementDimensions.width > viewport.width) {\n // Elemento mais largo que a viewport e não cabe na tela (alinhar no lado esquerdo da viewport)\n left = targetOffset.left * -1;\n } else if ((targetOffset.left + elementDimensions.width) > viewport.width) {\n // Elemento mais largo que a janela de visualização, mas pode ser ajustado na tela (alinhar no lado direito da janela de visualização)\n left = (targetOffset.left + elementDimensions.width - viewport.width) * -1;\n } else {\n // Elemento se encaixa na tela (alinhar com o destino)\n left = 0;\n }\n\n element.style.top = top + 'px';\n element.style.left = left + 'px';\n }\n\n public static absolutePosition(element: any, target: any, calculateTop: boolean = true): void {\n const elementDimensions: any = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n const elementOuterHeight: any = elementDimensions.height;\n const elementOuterWidth: any = elementDimensions.width;\n const targetOuterHeight: any = target.offsetHeight;\n const targetOuterWidth: any = target.offsetWidth;\n const targetOffset: any = target.getBoundingClientRect();\n const windowScrollTop: number = this.getWindowScrollTop();\n const windowScrollLeft: number = this.getWindowScrollLeft();\n const viewport: any = this.getViewport();\n let top, left;\n\n if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {\n top = targetOffset.top + windowScrollTop - elementOuterHeight;\n element.style.transformOrigin = 'bottom';\n\n if (top < 0) {\n top = windowScrollTop;\n }\n } else {\n if (calculateTop) {\n top = targetOuterHeight + targetOffset.top + windowScrollTop;\n }\n element.style.transformOrigin = 'top';\n }\n\n if (targetOffset.left + elementOuterWidth > viewport.width) {\n left = Math.max(0, targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth);\n } else {\n left = targetOffset.left + windowScrollLeft;\n }\n\n element.style.top = top + 'px';\n element.style.left = left + 'px';\n }\n\n static getParents(element: any, parents: any = []): any {\n return element['parentNode'] === null ? parents : this.getParents(element.parentNode, parents.concat([element.parentNode]));\n }\n\n static getScrollableParents(element: any): any[] {\n const scrollableParents: any[] = [];\n\n if (element) {\n const parents: any = this.getParents(element);\n const overflowRegex = /(auto|scroll)/;\n const overflowCheck = (node: any) => {\n const styleDeclaration: CSSStyleDeclaration = window['getComputedStyle'](node, null);\n return overflowRegex.test(styleDeclaration.getPropertyValue('overflow'))\n || overflowRegex.test(styleDeclaration.getPropertyValue('overflowX'))\n || overflowRegex.test(styleDeclaration.getPropertyValue('overflowY'));\n };\n\n for (const parent of parents) {\n const scrollSelectors: any = parent.nodeType === 1 && parent.dataset['scrollselectors'];\n if (scrollSelectors) {\n const selectors: any = scrollSelectors.split(',');\n for (const selector of selectors) {\n const el: any = this.findSingle(parent, selector);\n if (el && overflowCheck(el)) {\n scrollableParents.push(el);\n }\n }\n }\n\n if (parent.nodeType !== 9 && overflowCheck(parent)) {\n scrollableParents.push(parent);\n }\n }\n }\n\n return scrollableParents;\n }\n\n public static getHiddenElementOuterHeight(element: any): number {\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n const elementHeight: any = element.offsetHeight;\n element.style.display = 'none';\n element.style.visibility = 'visible';\n\n return elementHeight;\n }\n\n public static getHiddenElementOuterWidth(element: any): number {\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n const elementWidth: any = element.offsetWidth;\n element.style.display = 'none';\n element.style.visibility = 'visible';\n\n return elementWidth;\n }\n\n public static getHiddenElementDimensions(element: any): any {\n const dimensions: any = {};\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n dimensions.width = element.offsetWidth;\n dimensions.height = element.offsetHeight;\n element.style.display = 'none';\n element.style.visibility = 'visible';\n\n return dimensions;\n }\n\n public static scrollInView(container: any, item: any): void {\n const borderTopValue: string = getComputedStyle(container).getPropertyValue('borderTopWidth');\n const borderTop: number = borderTopValue ? parseFloat(borderTopValue) : 0;\n const paddingTopValue: string = getComputedStyle(container).getPropertyValue('paddingTop');\n const paddingTop: number = paddingTopValue ? parseFloat(paddingTopValue) : 0;\n const containerRect: any = container.getBoundingClientRect();\n const itemRect: any = item.getBoundingClientRect();\n const offset: number = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\n const scroll: any = container.scrollTop;\n const elementHeight: any = container.clientHeight;\n const itemHeight: any = this.getOuterHeight(item);\n\n if (offset < 0) {\n container.scrollTop = scroll + offset;\n } else if ((offset + itemHeight) > elementHeight) {\n container.scrollTop = scroll + offset - elementHeight + itemHeight;\n }\n }\n\n public static fadeIn(element: any, duration: number): void {\n element.style.opacity = 0;\n\n let last: number = +new Date();\n let opacity: number = 0;\n const tick = () => {\n opacity = +element.style.opacity.replace(',', '.') + (new Date().getTime() - last) / duration;\n element.style.opacity = opacity;\n last = +new Date();\n\n if (+opacity < 1) {\n // tslint:disable-next-line: no-unused-expression\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n }\n };\n\n tick();\n }\n\n public static fadeOut(element: any, ms: any): void {\n let opacity: number = 1;\n const interval = 50;\n const duration: any = ms;\n const gap: number = interval / duration;\n\n const fading = setInterval(() => {\n opacity = opacity - gap;\n\n if (opacity <= 0) {\n opacity = 0;\n clearInterval(fading);\n }\n\n element.style.opacity = opacity;\n }, interval);\n }\n\n public static getWindowScrollTop(): number {\n const doc: HTMLElement = document.documentElement;\n return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n }\n\n public static getWindowScrollLeft(): number {\n const doc: HTMLElement = document.documentElement;\n return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n }\n\n public static matches(element: any, selector: string): boolean {\n const p: Element = Element.prototype;\n const f: any = p['matches'] || p.webkitMatchesSelector || p['mozMatchesSelector'] || p['msMatchesSelector'] || function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n return f.call(element, selector);\n }\n\n public static getOuterWidth(el: any, margin?: any): any {\n let width: any = el.offsetWidth;\n\n if (margin) {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n }\n\n return width;\n }\n\n public static getHorizontalPadding(el: any): number {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n }\n\n public static getHorizontalMargin(el: any): number {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n return parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n }\n\n public static innerWidth(el: any): any {\n let width: any = el.offsetWidth;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n return width;\n }\n\n public static width(el: any): any {\n let width: any = el.offsetWidth;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n return width;\n }\n\n public static getInnerHeight(el: any): any {\n let height: any = el.offsetHeight;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n return height;\n }\n\n public static getOuterHeight(el: any, margin?: any): any {\n let height: any = el.offsetHeight;\n\n if (margin) {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n }\n\n return height;\n }\n\n public static getHeight(el: any): number {\n let height: any = el.offsetHeight;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\n return height;\n }\n\n public static getWidth(el: any): number {\n let width: any = el.offsetWidth;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\n\n return width;\n }\n\n public static getViewport(): any {\n\n const win = window;\n const d: Document = document;\n const e: HTMLElement = d.documentElement;\n const g: HTMLBodyElement = d.getElementsByTagName('body')[0];\n const w: number = win.innerWidth || e.clientWidth || g.clientWidth;\n const h: number = win.innerHeight || e.clientHeight || g.clientHeight;\n\n return { width: w, height: h };\n }\n\n public static getOffset(el: any): { top: any; left: any; } {\n const rect: any = el.getBoundingClientRect();\n return {\n top: rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0),\n left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0),\n };\n }\n\n public static replaceElementWith(element: any, replacementElement: any): any {\n const parentNode: any = element.parentNode;\n if (!parentNode) {\n throw new Error('Não é possível substituir o elemento');\n }\n return parentNode.replaceChild(replacementElement, element);\n }\n\n public static getUserAgent(): string {\n return navigator.userAgent;\n }\n\n public static isIE(): boolean {\n const ua: string = window.navigator.userAgent;\n\n const msie: number = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return true;\n }\n\n const trident: number = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n const rv: number = ua.indexOf('rv:');\n return true;\n }\n\n const edge: number = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return true;\n }\n\n // other browser\n return false;\n }\n\n public static isIOS(): boolean {\n return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window['MSStream'];\n }\n\n public static isAndroid(): boolean {\n return /(android)/i.test(navigator.userAgent);\n }\n\n public static isTouchDevice(): boolean {\n return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0));\n }\n\n public static appendChild(element: any, target: any): void {\n if (this.isElement(target)) {\n target.appendChild(element);\n } else if (target.el && target.el.nativeElement) {\n target.el.nativeElement.appendChild(element);\n } else {\n throw new Error(`Não é possível anexar ${target} para ${element}`);\n }\n }\n\n public static removeChild(element: any, target: any): void {\n if (this.isElement(target)) {\n target.removeChild(element);\n } else if (target.el && target.el.nativeElement) {\n target.el.nativeElement.removeChild(element);\n } else {\n throw new Error(`Não é possível remover ${element} a partir de ${target}`);\n }\n }\n\n public static removeElement(element: Element): void {\n if (!('remove' in Element.prototype)) {\n element.parentNode.removeChild(element);\n } else {\n element.remove();\n }\n }\n\n public static isElement(obj: any): boolean {\n return (\n typeof HTMLElement === 'object'\n ? obj instanceof HTMLElement\n : obj && typeof obj === 'object' && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === 'string'\n );\n }\n\n public static calculateScrollbarWidth(el?: HTMLElement): number {\n if (el) {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n return (el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth) - parseFloat(style.borderRightWidth));\n } else {\n if (this.calculatedScrollbarWidth !== null) {\n return this.calculatedScrollbarWidth;\n }\n\n const scrollDiv: HTMLDivElement = document.createElement('div');\n scrollDiv.className = 'p-scrollbar-measure';\n document.body.appendChild(scrollDiv);\n\n const scrollbarWidth: number = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n\n this.calculatedScrollbarWidth = scrollbarWidth;\n\n return scrollbarWidth;\n }\n }\n\n public static calculateScrollbarHeight(): number {\n if (this.calculatedScrollbarHeight !== null) {\n return this.calculatedScrollbarHeight;\n }\n\n const scrollDiv: HTMLDivElement = document.createElement('div');\n scrollDiv.className = 'p-scrollbar-measure';\n document.body.appendChild(scrollDiv);\n\n const scrollbarHeight: number = scrollDiv.offsetHeight - scrollDiv.clientHeight;\n document.body.removeChild(scrollDiv);\n\n this.calculatedScrollbarWidth = scrollbarHeight;\n\n return scrollbarHeight;\n }\n\n public static invokeElementMethod(element: any, methodName: string, args?: any[]): void {\n (element as any)[methodName].apply(element, args);\n }\n\n public static clearSelection(): void {\n if (window.getSelection) {\n if (window.getSelection().empty) {\n window.getSelection().empty();\n } else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {\n window.getSelection().removeAllRanges();\n }\n } else if (document['selection'] && document['selection'].empty) {\n try {\n document['selection'].empty();\n } catch (error) {\n // Ignore IE bug\n }\n }\n }\n\n public static getBrowser(): any {\n if (!this.browser) {\n const matched: { browser: any; version: any; } = this.resolveUserAgent();\n this.browser = {};\n\n if (matched.browser) {\n this.browser[matched.browser] = true;\n this.browser['version'] = matched.version;\n }\n\n if (this.browser['chrome']) {\n this.browser['webkit'] = true;\n } else if (this.browser['webkit']) {\n this.browser['safari'] = true;\n }\n }\n\n return this.browser;\n }\n\n public static resolveUserAgent(): { browser: any; version: any; } {\n const ua: string = navigator.userAgent.toLowerCase();\n const match: any[] | RegExpExecArray = /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n /(msie) ([\\w.]+)/.exec(ua) ||\n ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n [];\n\n return {\n browser: match[1] || '',\n version: match[2] || '0'\n };\n }\n\n public static isInteger(value: any): boolean {\n if (Number.isInteger) {\n return Number.isInteger(value);\n } else {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n }\n }\n\n public static isHidden(element: HTMLElement): boolean {\n return element.offsetParent === null;\n }\n\n public static getFocusableElements(element: HTMLElement): any[] {\n const focusableElements: any[] = DomHandler.find(element, `button:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n [href][clientHeight][clientWidth]:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n input:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]), select:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n textarea:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]), [tabIndex]:not([tabIndex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n [contenteditable]:not([tabIndex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]):not(.p-disabled)`\n );\n\n const visibleFocusableElements: any[] = [];\n for (const focusableElement of focusableElements) {\n // tslint:disable-next-line: triple-equals\n if (getComputedStyle(focusableElement).display != 'none' && getComputedStyle(focusableElement).visibility != 'hidden') {\n visibleFocusableElements.push(focusableElement);\n }\n }\n return visibleFocusableElements;\n }\n\n static generateZIndex(): number {\n this.zindex = this.zindex || 100;\n return ++this.zindex;\n }\n\n}\n","import { DomHandler } from './dom-handler';\n\nexport class ConnectedOverlayScrollHandler {\n\n element: any;\n\n listener: any;\n\n scrollableParents: any;\n\n constructor(element: any, listener: any = () => { }) {\n this.element = element;\n this.listener = listener;\n }\n\n bindScrollListener(): void {\n this.scrollableParents = DomHandler.getScrollableParents(this.element);\n for (let i: number = 0; i < this.scrollableParents.length; i++) {\n this.scrollableParents[i].addEventListener('scroll', this.listener);\n }\n }\n\n unbindScrollListener(): void {\n if (this.scrollableParents) {\n for (let i: number = 0; i < this.scrollableParents.length; i++) {\n this.scrollableParents[i].removeEventListener('scroll', this.listener);\n }\n }\n }\n\n destroy(): void {\n this.unbindScrollListener();\n this.element = null;\n this.listener = null;\n this.scrollableParents = null;\n }\n}\n","import { animate, AnimationEvent, state, style, transition, trigger } from '@angular/animations';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output, Renderer2,\n TemplateRef,\n ViewEncapsulation,\n ViewRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport ZIndexUtils from '../../../core/utils/zindex.util';\nimport { GIPINgConfig } from '../../api/gipi-ng-config';\nimport { GIPIOverlayService } from '../../gipi-components/overlay/shared/overlay-service';\nimport { ConnectedOverlayScrollHandler } from '../dom/connected-overlay-scroll-handler';\nimport { DomHandler } from '../dom/dom-handler';\n\n@Component({\n selector: 'itss-overlay-panel',\n templateUrl: './overlay-panel.component.html',\n styleUrls: ['./overlay-panel.component.scss'],\n animations: [\n trigger('animation', [\n state('void', style({\n transform: 'scaleY(0.8)',\n opacity: 0\n })),\n state('close', style({\n opacity: 0\n })),\n state('open', style({\n transform: 'translateY(0)',\n opacity: 1\n })),\n transition('void => open', animate('{{showTransitionParams}}')),\n transition('open => close', animate('{{hideTransitionParams}}')),\n ])\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { 'class': 'itss-element' }\n})\nexport class OverlayPanelComponent implements AfterContentInit, OnInit, OnDestroy {\n\n @Input() dismissable: boolean = true;\n\n @Input() showCloseIcon: boolean;\n\n @Input() closeIconSize: number = 15;\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() appendTo: any = 'body';\n\n @Input() autoZIndex: boolean = true;\n\n @Input() ariaCloseLabel: string;\n\n @Input() baseZIndex: number = 0;\n\n @Input() focusOnShow: boolean = true;\n\n @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n @Input() hideTransitionOptions: string = '.1s linear';\n\n @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('overlayContent', { static: false }) overlayContentRef: TemplateRef<any>;\n\n @ContentChild('overlayFooter', { static: false }) overlayFooterRef: TemplateRef<any>;\n\n container: HTMLDivElement;\n\n overlayVisible: boolean = false;\n\n render: boolean = false;\n\n isOverlayAnimationInProgress: boolean = false;\n\n selfClick: boolean = false;\n\n documentClickListener: any;\n\n target: any;\n\n willHide: boolean;\n\n scrollHandler: any;\n\n documentResizeListener: any;\n\n destroyCallback: Function;\n\n overlayEventListener;\n\n overlaySubscription: Subscription;\n\n constructor(\n public el: ElementRef,\n public renderer: Renderer2,\n public cd: ChangeDetectorRef,\n private zone: NgZone,\n public config: GIPINgConfig,\n public overlayService: GIPIOverlayService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterContentInit(): void {\n }\n\n bindDocumentClickListener(): void {\n if (!this.documentClickListener && this.dismissable) {\n this.zone.runOutsideAngular(() => {\n const documentEvent: 'touchstart' | 'click' = DomHandler.isIOS() ? 'touchstart' : 'click';\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, documentEvent, (event) => {\n if (!this.container.contains(event.target) && this.target !== event.target && !this.target.contains(event.target) && !this.selfClick) {\n this.zone.run(() => {\n this.hide();\n });\n }\n\n this.selfClick = false;\n this.cd.markForCheck();\n });\n });\n }\n }\n\n unbindDocumentClickListener(): void {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n this.selfClick = false;\n }\n }\n\n toggle(event: any, target?: any): void {\n if (this.isOverlayAnimationInProgress) {\n return;\n }\n\n if (this.overlayVisible) {\n if (this.hasTargetChanged(event, target)) {\n this.destroyCallback = () => {\n this.show(null, (target || event.currentTarget || event.target));\n };\n }\n\n this.hide();\n } else {\n this.show(event, target);\n }\n }\n\n show(event: any, target?: any): void {\n if (this.isOverlayAnimationInProgress) {\n return;\n }\n\n this.target = target || event.currentTarget || event.target;\n this.overlayVisible = true;\n this.render = true;\n this.cd.markForCheck();\n }\n\n onOverlayClick(event: any): void {\n this.overlayService.add({\n originalEvent: event,\n target: this.el.nativeElement\n });\n\n this.selfClick = true;\n }\n\n onContentClick(): void {\n this.selfClick = true;\n }\n\n hasTargetChanged(event: any, target: any): boolean {\n return this.target != null && this.target !== (target || event.currentTarget || event.target);\n }\n\n appendContainer(): void {\n if (this.appendTo) {\n if (this.appendTo === 'body') {\n document.body.appendChild(this.container);\n } else {\n DomHandler.appendChild(this.container, this.appendTo);\n }\n }\n }\n\n restoreAppend(): void {\n if (this.container && this.appendTo) {\n this.el.nativeElement.appendChild(this.container);\n }\n }\n\n align(): void {\n if (this.autoZIndex) {\n ZIndexUtils.set('overlay', this.container, this.baseZIndex + this.config.zIndex.overlay);\n }\n\n DomHandler.absolutePosition(this.container, this.target);\n\n const containerOffset: { top: any; left: any; } = DomHandler.getOffset(this.container);\n const targetOffset: { top: any; left: any; } = DomHandler.getOffset(this.target);\n let arrowLeft: number = 0;\n\n if (containerOffset.left < targetOffset.left) {\n arrowLeft = targetOffset.left - containerOffset.left;\n }\n this.container.style.setProperty('--overlayArrowLeft', `${arrowLeft}px`);\n\n if (containerOffset.top < targetOffset.top) {\n DomHandler.addClass(this.container, 'overlay-panel-flipped');\n }\n }\n\n onAnimationStart(event: AnimationEvent): void {\n if (event.toState === 'open') {\n this.container = event.element;\n this.onShow.emit(null);\n this.appendContainer();\n this.align();\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n\n if (this.focusOnShow) {\n this.focus();\n }\n\n this.overlayEventListener = e => {\n if (this.container && this.container.contains(e.target)) {\n this.selfClick = true;\n }\n };\n\n this.overlaySubscription = this.overlayService.clickObservable.subscribe(this.overlayEventListener);\n }\n\n this.isOverlayAnimationInProgress = true;\n }\n\n onAnimationEnd(event: AnimationEvent): void {\n switch (event.toState) {\n case 'void': {\n if (this.destroyCallback) {\n this.destroyCallback();\n this.destroyCallback = null;\n }\n\n if (this.overlaySubscription) {\n this.overlaySubscription.unsubscribe();\n }\n break;\n }\n case 'close': {\n if (this.autoZIndex) {\n ZIndexUtils.clear(this.container);\n }\n\n if (this.overlaySubscription) {\n this.overlaySubscription.unsubscribe();\n }\n\n this.onContainerDestroy();\n this.onHide.emit({});\n this.render = false;\n break;\n }\n }\n\n this.isOverlayAnimationInProgress = false;\n }\n\n focus(): void {\n const focusable: any = DomHandler.findSingle(this.container, '[autofocus]');\n if (focusable) {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => focusable.focus(), 5);\n });\n }\n }\n\n hide(): void {\n if (this.isOverlayAnimationInProgress) {\n return;\n }\n\n this.overlayVisible = false;\n this.cd.markForCheck();\n }\n\n onCloseClick(event: any): void {\n this.hide();\n event.preventDefault();\n }\n\n onWindowResize(event: any): void {\n if (this.overlayVisible && !DomHandler.isTouchDevice()) {\n this.hide();\n }\n }\n\n bindDocumentResizeListener(): void {\n this.documentResizeListener = this.onWindowResize.bind(this);\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener(): void {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n bindScrollListener(): void {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener(): void {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n onContainerDestroy(): void {\n if (!(this.cd as ViewRef).destroyed) {\n this.target = null;\n }\n\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n }\n\n ngOnDestroy(): void {\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n\n if (this.container && this.autoZIndex) {\n ZIndexUtils.clear(this.container);\n }\n\n if (!(this.cd as ViewRef).destroyed) {\n this.target = null;\n }\n\n this.destroyCallback = null;\n if (this.container) {\n this.restoreAppend();\n this.onContainerDestroy();\n }\n\n if (this.overlaySubscription) {\n this.overlaySubscription.unsubscribe();\n }\n }\n\n}\n","import {OverlayRef} from '@angular/cdk/overlay';\nimport {TemplateRef, Type} from '@angular/core';\n\nimport {Subject} from 'rxjs';\n\nexport interface PopoverCloseEvent<T = any> {\n type: 'backdropClick' | 'close';\n data: T;\n}\n\nexport type PopoverContent = TemplateRef<any> | Type<any> | string;\n\nexport class PopoverRef<T = any> {\n private afterClosed = new Subject<PopoverCloseEvent<T>>();\n afterClosed$ = this.afterClosed.asObservable();\n\n constructor(public overlay: OverlayRef,\n public content: PopoverContent,\n public data: T) {\n overlay.backdropClick().subscribe(() => {\n this._close('backdropClick', null);\n });\n }\n\n close(data?: T) {\n this._close('close', data);\n }\n\n private _close(type: PopoverCloseEvent['type'], data?: T) {\n this.overlay.dispose();\n this.afterClosed.next({\n type,\n data\n });\n this.afterClosed.complete();\n }\n\n}\n","import {Component, OnInit, TemplateRef} from '@angular/core';\nimport {PopoverContent, PopoverRef} from './popover-ref';\n\n@Component({\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss']\n})\nexport class PopoverComponent implements OnInit {\n\n renderMethod: 'template' | 'component' | 'text' = 'component';\n\n content: PopoverContent;\n\n context;\n\n constructor(private popoverRef: PopoverRef) {\n }\n\n ngOnInit(): void {\n this.content = this.popoverRef.content;\n\n if (typeof this.content === 'string') {\n this.renderMethod = 'text';\n }\n\n if (this.content instanceof TemplateRef) {\n this.renderMethod = 'template';\n this.context = {\n close: this.popoverRef.close.bind(this.popoverRef),\n data: this.popoverRef.data\n };\n }\n }\n\n}\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'itss-radio-group-entity',\n templateUrl: './radio-group-entity.component.html',\n styleUrls: ['./radio-group-entity.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioGroupEntityComponent),\n multi: true\n }\n ]\n})\nexport class RadioGroupEntityComponent implements ControlValueAccessor, OnInit {\n\n @Input() label: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() property = 'description';\n\n @Input() entities = [];\n\n @Input('value') val: any;\n\n ngOnInit(): void {\n }\n\n getPropertyValue(entity: any): string {\n return entity && typeof entity !== 'string' && entity[this.property];\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n get value() {\n return this.val;\n }\n\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n}\n","export class GenerateIdComponent {\n\n public static uniqueId(nameComponent: string): string {\n const stringArr: any[] = [];\n for (let i: number = 0; i < 2; i++) {\n // tslint:disable-next-line: no-bitwise\n const S4: string = (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n stringArr.push(S4);\n }\n return `${nameComponent}-${stringArr.join('-')}`;\n }\n\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioChange } from '@angular/material';\n\nimport { ObjectUtil } from '../../../core';\nimport { GenerateIdComponent } from '../../api/generate-id-component';\n\n@Component({\n selector: 'itss-radio-group-enum',\n templateUrl: './radio-group-enum.component.html',\n styleUrls: ['./radio-group-enum.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioGroupEnumComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'class': 'itss-element' },\n})\nexport class RadioGroupEnumComponent implements ControlValueAccessor, OnInit {\n\n enumList: any[] = [];\n\n @Input() label: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input('groupbox') isGroupbox: boolean = false;\n\n @Input('input') isInput: boolean = false;\n\n @Input() enum;\n\n @Input('value') val: any;\n\n @Input() sort: (a: any, b: any) => number;\n\n @Input() valuesExclud: string[];\n\n @Input() valuesOmit: string[];\n\n @Output() selectionChange: EventEmitter<string> = new EventEmitter<string>();\n\n constructor(private changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n const lEnumList = Object.keys(this.enum)\n .map(key => ({ key: key, value: this.enum[key] }))\n .sort(this.sort);\n\n if (!ObjectUtil.isNull(this.valuesExclud)) {\n for (let i = 0; i < lEnumList.length; i++) {\n const excludEnum: boolean = this.valuesExclud.some(e => e === lEnumList[i].key);\n if (!excludEnum) {\n this.enumList.push(lEnumList[i]);\n }\n }\n } else {\n this.enumList = lEnumList;\n }\n this.changeDetectorRef.detectChanges();\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n get value() {\n return this.val;\n }\n\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n changeRadioGroup({ value }: MatRadioChange): void {\n this.selectionChange.emit(value);\n }\n\n validateOmitByKey(key: string): boolean {\n return !ObjectUtil.isNull(this.valuesOmit) ? !this.valuesOmit.some(el => el === key) : true;\n }\n\n getId(key: string): string {\n return GenerateIdComponent.uniqueId(key);\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, forwardRef, Input, OnInit, Output, TemplateRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core';\n\n@Component({\n selector: 'itss-select-button',\n templateUrl: './select-button.component.html',\n styleUrls: ['./select-button.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectButtonComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'itss-element'\n }\n})\nexport class SelectButtonComponent implements OnInit {\n\n @Input() options: any[];\n\n @Input() property: string;\n\n @Input() optionValue: string;\n\n @Input() optionDisabled: string;\n\n @Input() tabindex: number = 0;\n\n @Input() multiple: boolean;\n\n @Input() label: string;\n\n @Input() required: boolean;\n\n @Input() styleClass: string;\n\n @Input() ariaLabelledBy: string;\n\n @Input() disabled: boolean;\n\n @Input() dataKey: string;\n\n @Output() onOptionClick: EventEmitter<any> = new EventEmitter();\n\n @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n @ContentChild(TemplateRef, { static: false }) itemTemplate;\n\n value: any;\n\n onModelChange: Function = () => { };\n\n onModelTouched: Function = () => { };\n\n constructor(public cd: ChangeDetectorRef) { }\n\n ngOnInit(): void { }\n\n getPropertyLabel(option: any): any {\n return this.property ? ObjectUtil.resolveFieldData(option, this.property) : (option.label !== undefined ? option.label : option);\n }\n\n getOptionValue(option: any): any {\n return this.optionValue ? ObjectUtil.resolveFieldData(option, this.optionValue) : (this.property || option.value === undefined ? option : option.value);\n }\n\n isOptionDisabled(option: any): any {\n return this.optionDisabled ? ObjectUtil.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cd.markForCheck();\n }\n\n registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this.cd.markForCheck();\n }\n\n onItemClick(event: any, option: any, index: number): void {\n if (this.disabled || this.isOptionDisabled(option)) {\n return;\n }\n\n if (this.multiple) {\n if (this.isSelected(option)) {\n this.removeOption(option);\n } else {\n this.value = [...(this.value || []), this.getOptionValue(option)];\n }\n\n this.onModelChange(this.value);\n\n this.onChange.emit({\n originalEvent: event,\n value: this.value\n });\n } else {\n const value: any = this.getOptionValue(option);\n\n if (this.value !== value) {\n this.value = this.getOptionValue(option);\n this.onModelChange(this.value);\n\n this.onChange.emit({\n originalEvent: event,\n value: this.value\n });\n }\n }\n\n this.onOptionClick.emit({\n originalEvent: event,\n option: option,\n index: index\n });\n }\n\n onBlur(): void {\n this.onModelTouched();\n }\n\n removeOption(option: any): void {\n this.value = this.value.filter(val => !ObjectUtil.equals(val, this.getOptionValue(option), this.dataKey));\n }\n\n isSelected(option: any): boolean {\n let selected: boolean = false;\n const optionValue: any = this.getOptionValue(option);\n\n if (this.multiple) {\n if (this.value) {\n for (const val of this.value) {\n if (ObjectUtil.equals(val, optionValue, this.dataKey)) {\n selected = true;\n break;\n }\n }\n }\n } else {\n selected = ObjectUtil.equals(this.getOptionValue(option), this.value, this.dataKey);\n }\n\n return selected;\n }\n\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TrackByFunction, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\nimport { Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { MatOption } from '@angular/material/core/typings/option';\nimport { AbstractModel, ArrayUtil, ObjectUtil, PageDTO, StringUtil } from '../../../core';\nimport { UUIDUtil } from '../../../core/utils/uuid.util';\n\n@Component({\n selector: 'itss-select-entity-paged',\n templateUrl: './select-entity-paged.component.html',\n styleUrls: ['./select-entity-paged.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof SelectEntityPagedComponent => SelectEntityPagedComponent),\n multi: true\n }\n ]\n})\nexport class SelectEntityPagedComponent<T> implements OnInit, OnChanges, ControlValueAccessor, OnDestroy {\n\n valueSearchCtrl: FormControl = new FormControl('');\n\n page: PageDTO<T>;\n\n totalOptions: number = 0;\n\n subscriptions: Subscription[] = [];\n\n searching: boolean = false;\n\n toggleAllCheckboxChecked: boolean = false;\n\n toggleAllCheckboxIndeterminate: boolean = false;\n\n modelValue: any;\n\n private _paramNextBatch: any;\n\n private _options: T[] = [];\n\n @ViewChild('matSelect', { static: false }) private matSelect: MatSelect;\n\n @ViewChild(CdkVirtualScrollViewport, { static: false }) private cdkVirtualScrollViewPort: CdkVirtualScrollViewport;\n\n @Input() initAllCheckboxChecked: boolean;\n\n @Input() closeIcon: string = 'close';\n\n @Input() closeSvgIcon?: string;\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() showButtonAdd: boolean;\n\n @Input() multiple: boolean = false;\n\n @Input() iconPrefix: string;\n @Input() svgIconPrefix: string;\n\n // Mostrar/ocultar o input para pesquisar\n @Input() hideFieldSearch: boolean = false;\n\n // Mostrar/ocultar o botão limpar opções selecionadas\n @Input() showClear: boolean = false;\n\n @Input() debounceTime: number = 1000; // milissegundos\n\n // Valores que não serão exibidos nas opções\n @Input() valuesExclud: T[] = [];\n\n @Input() appearance: string = 'outline';\n\n @Input() classSelectPanel: string;\n\n @Input() property: string = 'description';\n\n @Input() trackyBy: string = 'id';\n\n @Input() initLoaded: boolean = true;\n\n @Input() infiniteScroll: boolean = true;\n\n @Input() propertyFn: (obj: T) => string;\n\n @Input() nextBatchFn: (researchField: string, page: number, paramNextBatch?: any) => Promise<PageDTO<T>>;\n\n @Input() set paramNextBatch(val: any) {\n this._paramNextBatch = val;\n }\n get paramNextBatch(): any {\n return this._paramNextBatch;\n }\n\n @Input() set model(val: any) {\n this.modelValue = val;\n this.modelChange.emit(this.modelValue);\n this.onChange(this.modelValue);\n this.onTouch(this.modelValue);\n }\n get model(): any {\n return this.modelValue;\n }\n\n @Input() set options(val: T[]) {\n this._options = val;\n }\n get options(): T[] {\n return this._options;\n }\n\n @Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() selectionChange: EventEmitter<T> = new EventEmitter<T>();\n @Output() searchChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() addChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n get scrollViewportHeight(): number {\n if (ArrayUtil.isEmpty(this.options)) {\n return 0;\n }\n\n // Cada mat-option possui 3em ou 39px. 3 * quantidade de mat-option\n return (3 * this.options.length);\n }\n\n trackByOption: TrackByFunction<T> = (index, obj) => this.trackyBy ? obj[this.trackyBy] : obj;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n // O debounceTime é utlizado para emitir o valor após o usuário parar\n // de digitar, evitando consulta a toda letra que for digitada.\n // O distinctUntilChanged é utilizado para emitir apenas valores\n // que são diferentes dos valores anteriores emitidos.\n this.subscriptions.push(\n this.valueSearchCtrl.valueChanges\n .pipe(\n map((value: string): string => value),\n debounceTime(this.debounceTime),\n distinctUntilChanged()\n )\n .subscribe((value: string): void => {\n this.onSearchChange(value);\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!ObjectUtil.isNull(changes.model) && !changes.model.isFirstChange()) {\n if (ArrayUtil.isEmpty(this.options) && !ObjectUtil.isNull(this.model)) {\n if (!this.multiple) {\n this.options.push(this.model);\n } else {\n this.options = this.model;\n }\n }\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n writeValue(value: any): void {\n this.model = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n compareFn(f1: AbstractModel, f2: AbstractModel): boolean {\n return f1 && f2 && f1.id === f2.id;\n }\n\n getPropertyValue(entity: any): string {\n if (!ObjectUtil.isNewModel(entity)) {\n if (!ObjectUtil.isNull(this.propertyFn)) {\n return this.propertyFn(entity);\n }\n return this.getValue(entity, this.property);\n }\n return StringUtil.EMPTY;\n }\n\n getValue(entity: any, property: string): string {\n const properties: string[] = property.split('.');\n let value: any = entity;\n\n for (let i: number = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n return value;\n }\n }\n }\n\n onSelectionChange(entity: T): void {\n this.selectionChange.emit(entity);\n }\n\n onSearchChange(value: string): void {\n if (this.matSelect.panelOpen) {\n this.searchChange.emit(value);\n\n this.model = null;\n this.onSelectionChange(this.model);\n\n if (this.multiple) {\n this.onToggleAllSelection(false);\n }\n\n this.page = null;\n this.options = [];\n\n this.onLoadMoreOptions(false);\n }\n }\n\n async onLoadMoreOptions(isInfiniteScroll: boolean, isOpened: boolean = true): Promise<void> {\n if (!this.infiniteScroll) {\n return;\n }\n if (!isOpened) {\n return;\n }\n if (ObjectUtil.isNull(this.nextBatchFn)) {\n console.error('A função nextBatchFn é obrigatória e não foi informada');\n return;\n }\n if (this.searching) {\n return;\n }\n if (!ArrayUtil.isEmpty(this.options) && !ObjectUtil.isNull(this.page) && ArrayUtil.isEmpty(this.valuesExclud)) {\n if (this.options.length === this.page.totalElements) {\n return;\n }\n }\n\n this.cdkVirtualScrollViewPort.scrollToIndex(0, 'smooth');\n this.cdkVirtualScrollViewPort.checkViewportSize();\n\n this.searching = true;\n\n let pageNumber: number = 0;\n if (isInfiniteScroll) {\n pageNumber = !ObjectUtil.isNull(this.page) ? this.page.number + 1 : 1;\n } else {\n this.page = null;\n this.options = [];\n }\n\n await this.nextBatchFn(this.valueSearchCtrl.value, pageNumber, this.paramNextBatch)\n .then(page => {\n this.page = page;\n\n if (!ObjectUtil.isNull(this.page) && !ArrayUtil.isEmpty(this.page.content)) {\n if (!ArrayUtil.isEmpty(this.valuesExclud)) {\n for (let i: number = 0; i < this.valuesExclud.length; i++) {\n const index: number = this.page.content.findIndex(o => this.valuesExclud[i][this.trackyBy] === o[this.trackyBy]);\n this.page.content.splice(index, 1);\n }\n }\n\n this.options = [...this.options, ...this.page.content];\n }\n\n if (!ObjectUtil.isNull(this.model) && !this.multiple) {\n const modelInList: T = this.options.find(o => ObjectUtil.equals(o, this.model));\n if (ObjectUtil.isNull(modelInList)) {\n this.options.push(this.model);\n }\n }\n\n this.searching = false;\n })\n .finally(() => {\n this.searching = false;\n });\n }\n\n onToggleAllSelection(selectAll: boolean): void {\n if (this.multiple && !ObjectUtil.isNull(this.matSelect) && !this.searching) {\n if (selectAll) {\n this.matSelect.options.forEach((item: MatOption) => item.select());\n } else {\n this.matSelect.options.forEach((item: MatOption) => item.deselect());\n }\n\n this.onToggleIndeterminateAllSelection();\n\n this._changeDetectorRef.markForCheck();\n }\n }\n\n onToggleIndeterminateAllSelection(): void {\n if (this.multiple && !ObjectUtil.isNull(this.matSelect)) {\n const lOptions: MatOption[] = this.matSelect.options.filter((item: MatOption) => item.selected);\n this.toggleAllCheckboxChecked = lOptions.length > 0;\n this.toggleAllCheckboxIndeterminate = (lOptions.length > 0) && (lOptions.length < this.matSelect.options.length);\n\n if (lOptions.length <= 0) {\n this.model = null;\n this.onSelectionChange(this.model);\n }\n }\n }\n\n showClearOptionButton(): boolean {\n let isNewModel: boolean = false;\n if (this.multiple && Array.isArray(this.model)) {\n isNewModel = !this.model || (this.model && (this.model.length <= 0));\n } else if (!this.multiple && !ObjectUtil.isNull(this.model)) {\n isNewModel = ObjectUtil.isNewModel(this.model);\n }\n return this.showClear && !isNewModel && (!this.disabled) && (!this.searching);\n }\n\n removeOption(): void {\n if (this.multiple) {\n this.onToggleAllSelection(false);\n }\n\n this.model = null;\n this.onSelectionChange(this.model);\n this.options = [];\n }\n\n haveSelected(): boolean {\n const entity: any = this.model;\n if (entity) {\n return UUIDUtil.isValid(entity.id);\n }\n return false;\n }\n\n onClickAdd(): void {\n if (Array.isArray(this.model) && !ArrayUtil.isEmpty(this.model)) {\n this.addChange.emit(this.model);\n } else {\n this.addChange.emit([]);\n }\n }\n\n}\n","import { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core';\nimport { MatFormField, MatOption, MatSelect } from '@angular/material';\n\n@Component({\n selector: 'itss-select-button-add',\n templateUrl: './select-button-add.component.html',\n styleUrls: ['./select-button-add.component.scss']\n})\nexport class SelectButtonAddComponent implements OnInit {\n\n // Rótulo do marcador de posição de pesquisa\n @Input() label: string = 'Adicionar novo registro';\n\n // Ícone baseado em fonte usado para exibir addIcon\n @Input() addIcon: string = 'add_circle';\n\n // Ícone baseado em Svg usado para exibir addIcon. Se definido, addIcon é substituído\n @Input() addSvgIcon?: string;\n\n // Adiciona suporte a leitor de tela 508 para o botão\n @Input() ariaLabel: string = 'Botão de adicionar registro';\n\n @Output('click') onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(true);\n\n constructor(\n @Inject(MatSelect) public matSelect: MatSelect,\n public changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() @Inject(MatOption) public matOption: MatOption = null,\n @Optional() @Inject(MatFormField) public matFormField: MatFormField = null,\n ) { }\n\n ngOnInit(): void { }\n\n onClickButton(event: MouseEvent): void {\n this.onClick.emit(event);\n event.stopPropagation();\n }\n\n}\n","import { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core';\nimport { MatFormField, MatOption, MatSelect } from '@angular/material';\n\n@Component({\n selector: 'itss-select-button-next-batch',\n templateUrl: './select-button-next-batch.component.html',\n styleUrls: ['./select-button-next-batch.component.scss']\n})\nexport class SelectButtonNextBatchComponent implements OnInit {\n\n // Rótulo do marcador de posição de pesquisa\n @Input() label: string = 'Mostrar mais';\n\n // Adiciona suporte a leitor de tela 508 para o botão\n @Input() ariaLabel: string = 'Botão para exibir mais resultados';\n\n @Output('click') onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(true);\n\n constructor(\n @Inject(MatSelect) public matSelect: MatSelect,\n public changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() @Inject(MatOption) public matOption: MatOption = null,\n @Optional() @Inject(MatFormField) public matFormField: MatFormField = null,\n ) { }\n\n ngOnInit(): void { }\n\n onClickButton(event: MouseEvent): void {\n this.onClick.emit(event);\n event.stopPropagation();\n }\n\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Diretiva para fornecer um elemento personalizado sem entradas encontradas.\n * Por exemplo:\n * <itss-select-search [formControl]=\"entityFilterCtrl\">\n * <span itssSelectNoEntriesFound>\n * Nenhum registro encontrado <button>Add</button>\n * </span>\n * </itss-select-search>\n */\n@Directive({\n selector: '[itssSelectNoEntriesFound]'\n})\nexport class SelectNoEntriesFoundDirective { }\n","import { Directive } from '@angular/core';\n\n/**\n * Diretiva para fornecer um ícone transparente personalizado.\n * Por exemplo:\n * <itss-select-search [formControl]=\"entityFilterCtrl\">\n * <mat-icon itssSelectSearchClear>delete</mat-icon>\n * </itss-select-search>\n */\n@Directive({\n selector: '[itssSelectSearchClear]'\n})\nexport class SelectSearchClearDirective { }\n","import { InjectionToken } from '@angular/core';\nimport { SelectSearchComponent } from './select-search/select-search.component';\n\n/** Lista de entradas de ItssSelectSearchComponent que podem ser configuradas com um padrão global. */\nexport const configurableDefaultOptions = [\n 'ariaLabel',\n 'clearSearchInput',\n 'closeIcon',\n 'closeSvgIcon',\n 'disableInitialFocus',\n 'disableScrollToActiveOnOptionsChanged',\n 'enableClearOnEscapePressed',\n 'hideClearSearchButton',\n 'noEntriesFoundLabel',\n 'placeholderLabel',\n 'preventHomeEndKeyPropagation',\n 'searching',\n] as const;\n\nexport type ConfigurableDefaultOptions = typeof configurableDefaultOptions[number];\n\n/**\n * InjectionToken que pode ser usado para especificar opções globais. por exemplo.\n *\n * ```typescript\n * providers: [\n * {\n * provide: ITSS_SELECT_SEARCH_DEFAULT_OPTIONS,\n * useValue: <ItssSelectSearchOptions>{\n * closeIcon: 'delete',\n * noEntriesFoundLabel: 'Nenhuma registro foi encontrado'\n * }\n * }\n * ]\n * ```\n *\n * Veja as entradas correspondentes de `ItssSelectSearchComponent` para documentação.\n */\nexport const ITSS_SELECT_SEARCH_DEFAULT_OPTIONS = new InjectionToken<ItssSelectSearchOptions>('itss-select_search-default-options');\n\n/** Opções globais configuráveis para ItssSelectSearch. */\nexport type ItssSelectSearchOptions = Readonly<Partial<Pick<SelectSearchComponent, ConfigurableDefaultOptions>>>;\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, NINE, SPACE, UP_ARROW, Z, ZERO } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, HostBinding, Inject, Input, OnChanges, OnDestroy, OnInit, Optional, Output, QueryList, SimpleChanges, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormField, MatOption, MatSelect } from '@angular/material';\nimport { BehaviorSubject, Observable, Subject, combineLatest, of } from 'rxjs';\nimport { delay, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\n\nimport { ITSS_SELECT_SEARCH_DEFAULT_OPTIONS, ItssSelectSearchOptions, configurableDefaultOptions } from '../default-options';\nimport { SelectNoEntriesFoundDirective } from '../select-no-entries-found.directive';\nimport { SelectSearchClearDirective } from '../select-search-clear.directive';\n\n/**\n * Este componente foi reescrito utilizando se do projeto a seguir\n * https://github.com/bithost-gmbh/ngx-mat-select-search\n */\n@Component({\n selector: 'itss-input-search',\n templateUrl: './select-search.component.html',\n styleUrls: ['./select-search.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof SelectSearchComponent => SelectSearchComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SelectSearchComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n\n // Valor de pesquisa atual\n get value(): string {\n return this._formControl.value;\n }\n\n // Referência às opções MatSelect\n public set _options(_options: QueryList<MatOption>) {\n this._options$.next(_options);\n }\n public get _options(): QueryList<MatOption> {\n return this._options$.getValue();\n }\n\n // Adiciona a classe mat-select-search-inside-mat-option se o itss-select-search estiver\n // dentro do mat-option\n @HostBinding('class.mat-select-search-inside-mat-option')\n get isInsideMatOption(): boolean {\n return !!this.matOption;\n }\n\n constructor(\n @Inject(MatSelect) public matSelect: MatSelect,\n public changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() @Inject(MatOption) public matOption: MatOption = null,\n @Optional() @Inject(MatFormField) public matFormField: MatFormField = null,\n @Optional() @Inject(ITSS_SELECT_SEARCH_DEFAULT_OPTIONS) defaultOptions?: ItssSelectSearchOptions\n ) {\n this.applyDefaultOptions(defaultOptions);\n }\n\n // Rótulo do marcador de posição de pesquisa\n @Input() placeholderLabel: string = 'Pesquisar...';\n\n // Tipo do campo de entrada de pesquisa\n @Input() type: string = 'text';\n\n // Ícone baseado em fonte usado para exibir Close-Icon\n @Input() closeIcon: string = 'close';\n\n // Ícone baseado em Svg usado para exibir Close-Icon. Se definido, Close-Icon é substituído\n @Input() closeSvgIcon?: string;\n\n // Rótulo a ser mostrado quando nenhuma entrada for encontrada. Defina como nulo se nenhuma mensagem deve ser mostrada\n @Input() noEntriesFoundLabel: string = 'Nenhum resultado encontrado';\n\n /**\n * Se o campo de pesquisa deve ou não ser limpo após o menu suspenso ser fechado.\n * Útil para filtragem do lado do servidor. Veja [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)\n */\n @Input() clearSearchInput: boolean = true;\n\n // Se deve mostrar o indicador de pesquisa em andamento\n @Input() searching: boolean = false;\n\n // Desativa o foco inicial do campo de entrada\n @Input() disableInitialFocus: boolean = false;\n\n // Ativar limpar input ao pressionar escape\n @Input() enableClearOnEscapePressed: boolean = false;\n\n /**\n * Impede que a chave home/end seja propagada para mat-select,\n * permitindo mover o cursor dentro da entrada de pesquisa em vez de navegar pelas opções\n */\n @Input() preventHomeEndKeyPropagation: boolean = false;\n\n // Desativa a rolagem para as opções ativas quando a lista de opções é alterada. Útil para pesquisa do lado do servidor\n @Input() disableScrollToActiveOnOptionsChanged: boolean = false;\n\n // Adiciona suporte a leitor de tela 508 para caixa de pesquisa\n @Input() ariaLabel: string = 'Pesquisa suspensa';\n\n // Se deve mostrar a caixa de seleção Selecionar tudo (para mat-select[multi=true])\n @Input() showToggleAllCheckbox: boolean = false;\n\n // Selecione tudo caixa de seleção marcada estado\n private _toggleAllCheckboxChecked: boolean = false;\n @Input() set toggleAllCheckboxChecked(value: boolean) {\n this._toggleAllCheckboxChecked = value;\n this.toggleAll.emit(value);\n }\n get toggleAllCheckboxChecked(): boolean {\n return this._toggleAllCheckboxChecked;\n }\n\n // Marque todas as caixas de seleção estado indeterminado\n private _toggleAllCheckboxIndeterminate: boolean = false;\n @Input() set toggleAllCheckboxIndeterminate(value: boolean) {\n this._toggleAllCheckboxIndeterminate = value;\n this.toggleAllIndeterminate.emit(value);\n }\n get toggleAllCheckboxIndeterminate(): boolean {\n return this._toggleAllCheckboxIndeterminate;\n }\n\n // Exibir uma mensagem em uma dica de ferramenta na caixa de seleção de alternar tudo\n @Input() toggleAllCheckboxTooltipMessage: string = '';\n\n // Defina a posição da dica de ferramenta na caixa de seleção de alternar tudo.\n @Input() toggleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';\n\n // Mostrar/ocultar o botão limpar pesquisa da entrada de pesquisa\n @Input() hideClearSearchButton: boolean = false;\n\n /**\n * Sempre restaure as opções selecionadas na seleção Altere para o modo multi (por exemplo, para carregamento lento/rolagem infinita).\n * O padrão é falso, portanto, as opções selecionadas são restauradas apenas enquanto a filtragem está ativa.\n */\n @Input() alwaysRestoreSelectedOptionsMulti: boolean = false;\n\n // Emissor de saída para enviar ao componente pai com a alternância de todos os booleanos\n @Output() toggleAll: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() toggleAllIndeterminate: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n // Referência ao campo de entrada de pesquisa\n @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\n\n // Referência ao campo de entrada de pesquisa\n @ViewChild('innerSelectSearch', { read: ElementRef, static: true }) innerSelectSearch: ElementRef;\n\n // Referência ao ícone claro de entrada de pesquisa personalizada\n @ContentChild(SelectSearchClearDirective, { static: false }) clearIcon: SelectSearchClearDirective;\n\n // Referência ao elemento personalizado sem entradas encontradas\n @ContentChild(SelectNoEntriesFoundDirective, { static: false }) noEntriesFound: SelectNoEntriesFoundDirective;\n private _lastExternalInputValue: string;\n public _options$: BehaviorSubject<QueryList<MatOption>> = new BehaviorSubject<QueryList<MatOption>>(null);\n\n private optionsList$: Observable<MatOption[]> = this._options$.pipe(\n switchMap((_options: QueryList<MatOption>): Observable<any> => _options\n ? _options.changes.pipe(\n map((options: any): any => options.toArray()),\n startWith<MatOption[]>(_options.toArray()),)\n : of(null)\n )\n );\n\n private optionsLength$: Observable<number> = this.optionsList$.pipe(\n map((options: MatOption[]): number => options ? options.length : 0)\n );\n\n // Valores previamente selecionados ao usar <mat-select [multiple]=\"true\">\n private previousSelectedValues: any[];\n\n public _formControl: FormControl = new FormControl('');\n\n // Se deve mostrar a mensagem sem entradas encontradas\n public _showNoEntriesFound$: Observable<boolean> = combineLatest([\n this._formControl.valueChanges,\n this.optionsLength$\n ]).pipe(\n map(([value, optionsLength]: [any, number]): boolean => this.noEntriesFoundLabel && value\n && optionsLength === this.getOptionsLengthOffset())\n );\n\n // Subject emitido quando o componente foi destruído\n private _onDestroy: Subject<void> = new Subject<void>();\n\n // Referência ao descendente ativo para suporte ARIA.\n private activeDescendant: HTMLElement;\n\n private applyDefaultOptions(defaultOptions: ItssSelectSearchOptions): void {\n if (!defaultOptions) {\n return;\n }\n\n for (const key of configurableDefaultOptions) {\n if (defaultOptions.hasOwnProperty(key)) {\n (this[key] as any) = defaultOptions[key];\n }\n }\n }\n\n ngOnInit(): void {\n // Definir classe de opção mat personalizada se o componente foi colocado dentro de uma opção mat\n if (this.matOption) {\n this.matOption.disabled = true;\n this.matOption._getHostElement().classList.add('contains-mat-select-search');\n this.matOption._getHostElement().setAttribute('aria-hidden', 'true');\n } else {\n console.error('<itss-input-search> deve ser colocado dentro de um elemento <mat-option>');\n }\n\n // Quando o painel suspenso de seleção é aberto ou fechado\n this.matSelect.openedChange\n .pipe(\n delay(1),\n takeUntil(this._onDestroy)\n )\n .subscribe((opened: boolean): void => {\n if (opened) {\n this.updateInputWidth();\n\n // Focar o campo de pesquisa ao abrir\n if (!this.disableInitialFocus) {\n this._focus();\n }\n } else {\n // Limpá-lo ao fechar\n if (this.clearSearchInput) {\n this._reset();\n }\n }\n });\n\n // Definir o primeiro item ativo após as opções alteradas\n this.matSelect.openedChange\n .pipe(\n take(1),\n switchMap((): Observable<any> => {\n this._options = this.matSelect.options;\n\n // Variável de fechamento para rastrear a primeira opção mais recente.\n // Para evitar que a lista role para o topo quando as opções são adicionadas ao final da lista\n // (por exemplo: rolagem infinita), comparamos apenas as alterações nas primeiras opções para\n // determinar se devemos definir o primeiro item como ativo. Isso evita a rolagem desnecessária\n // para o topo da lista quando as opções são anexadas, mas permite que o primeiro item da lista\n // seja definido como ativo por padrão quando não há seleção ativa.\n let previousFirstOption: MatOption = this._options.toArray()[this.getOptionsLengthOffset()];\n\n return this._options.changes\n .pipe(\n tap((): void => {\n // Evitar o erro \"expression has been changed\"\n setTimeout((): void => {\n // Converter a QueryList em uma matriz\n const options: MatOption[] = this._options.toArray();\n\n // O verdadeiro primeiro item é compensado por 1\n const currentFirstOption: MatOption = options[this.getOptionsLengthOffset()];\n\n const keyManager: ActiveDescendantKeyManager<MatOption> = this.matSelect._keyManager;\n if (keyManager && this.matSelect.panelOpen) {\n\n // Definir primeiro item ativo e largura de entrada\n\n // Verifique se a primeira opção nessas alterações é diferente da anterior.\n const firstOptionIsChanged: boolean = !this.matSelect.compareWith(previousFirstOption, currentFirstOption);\n\n // CASO: A primeira opção é diferente agora.\n // Indica que devemos defini-lo como ativo e rolar para o topo.\n if (firstOptionIsChanged\n || !keyManager.activeItem\n || !options.find((option: MatOption): boolean => this.matSelect.compareWith(option, keyManager.activeItem))) {\n keyManager.setFirstItemActive();\n }\n\n // Aguarde as alterações na largura do painel\n setTimeout((): void => {\n this.updateInputWidth();\n });\n }\n\n // Atualize nossa referência\n previousFirstOption = currentFirstOption;\n });\n })\n );\n })\n )\n .pipe(takeUntil(this._onDestroy))\n .subscribe();\n\n // Adicione ou remova a classe css dependendo se deseja mostrar a mensagem sem entradas encontradas\n // obs: isso é hacky\n this._showNoEntriesFound$.pipe(\n takeUntil(this._onDestroy)\n ).subscribe((showNoEntriesFound: boolean): void => {\n // Definir nenhuma classe de entrada encontrada na mat-option\n if (this.matOption) {\n if (showNoEntriesFound) {\n this.matOption._getHostElement().classList.add('mat-select-search-no-entries-found');\n } else {\n this.matOption._getHostElement().classList.remove('mat-select-search-no-entries-found');\n }\n }\n });\n\n // Redimensione a largura de entrada quando a viewport for redimensionada,\n // ou seja, a largura do acionador pode ser redimensionada.\n this._viewportRuler.change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe((): void => {\n if (this.matSelect.panelOpen) {\n this.updateInputWidth();\n }\n });\n\n this.initMultipleHandling();\n\n this.optionsList$.pipe(\n takeUntil(this._onDestroy)\n ).subscribe((): void => {\n // Atualizar visualização quando as opções disponíveis mudarem\n this.changeDetectorRef.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.searching) {\n this._formControl.disable();\n } else {\n this._formControl.enable();\n this._focus();\n }\n }\n\n ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n onTouched: Function = (_: any): void => { };\n\n _isToggleAllCheckboxVisible(): boolean {\n return this.matSelect.multiple && this.showToggleAllCheckbox;\n }\n\n /**\n * Manipula o evento de tecla pressionada com MatSelect.\n * Permite, por ex. selecionando com a tecla enter, navegando com as teclas de seta, etc.\n * @param event\n */\n _handleKeydown(event: KeyboardEvent): void {\n // Evite a propagação de todos os caracteres alfanuméricos para evitar problemas de seleção\n if ((event.key && event.key.length === 1) ||\n (event.keyCode >= A && event.keyCode <= Z) ||\n (event.keyCode >= ZERO && event.keyCode <= NINE) ||\n (event.keyCode === SPACE)\n || (this.preventHomeEndKeyPropagation && (event.keyCode === HOME || event.keyCode === END))\n ) {\n event.stopPropagation();\n }\n\n if (this.matSelect.multiple && event.key && event.keyCode === ENTER) {\n // Recupere o foco após a seleção múltipla, para que possamos digitar ainda mais\n setTimeout((): void => this._focus());\n }\n\n // Caso especial, se clicar em Escape, se a entrada estiver vazia, feche o menu suspenso, caso contrário, esvazie o campo de pesquisa\n if (this.enableClearOnEscapePressed === true && event.keyCode === ESCAPE && this.value) {\n this._reset(true);\n event.stopPropagation();\n }\n }\n\n /**\n * Manipula o evento de ativação de chave com MatSelect.\n * Permite, por ex. o anúncio do Descendente atualmente ativo por leitores de tela.\n */\n _handleKeyup(event: KeyboardEvent): void {\n if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {\n const ariaActiveDescendantId: string = this.matSelect._getAriaActiveDescendant();\n const index: number = this._options.toArray().findIndex((item: MatOption): boolean => item.id === ariaActiveDescendantId);\n if (index !== -1) {\n this.unselectActiveDescendant();\n this.activeDescendant = this._options.toArray()[index]._getHostElement();\n this.activeDescendant.setAttribute('aria-selected', 'true');\n this.searchSelectInput.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);\n }\n }\n }\n\n writeValue(value: string): void {\n this._lastExternalInputValue = value;\n this._formControl.setValue(value);\n this.changeDetectorRef.markForCheck();\n }\n\n onBlur(): void {\n this.unselectActiveDescendant();\n this.onTouched();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._formControl.valueChanges.pipe(\n filter((value: any): boolean => value !== this._lastExternalInputValue),\n tap((): any => this._lastExternalInputValue = undefined),\n takeUntil(this._onDestroy)\n ).subscribe(fn);\n }\n\n registerOnTouched(fn: Function): void {\n this.onTouched = fn;\n }\n\n /**\n * Focaliza o campo de entrada de pesquisa\n */\n public _focus(): void {\n if (!this.searchSelectInput || !this.matSelect.panel) {\n return;\n }\n // salve e restaure o scrollTop do painel, pois será redefinido por focus ()\n // obs: isso é hacky\n const panel: any = this.matSelect.panel.nativeElement;\n const scrollTop: any = panel.scrollTop;\n\n // Seta o foco\n this.searchSelectInput.nativeElement.focus();\n\n panel.scrollTop = scrollTop;\n }\n\n /**\n * Redefine o valor de pesquisa atual\n * @param focus se deve focar após a redefinição\n */\n public _reset(focus?: boolean): void {\n this._formControl.setValue('');\n if (focus) {\n this._focus();\n }\n }\n\n /**\n * Inicializa a manipulação <mat-select [multiple]=\"true\">\n * Nota: para melhorar este código, mat-select deve ser estendido para permitir desabilitar a redefinição da seleção durante a filtragem.\n */\n private initMultipleHandling(): void {\n if (!this.matSelect.ngControl) {\n if (this.matSelect.multiple) {\n // nota: o acesso a matSelect.ngControl (em vez de matSelect.value / matSelect.valueChanges)\n // é necessário para funcionar corretamente no modo de seleção múltipla.\n console.error('o mat-select contendo itss-input-search deve ter uma diretiva ngModel ou formControl quando multiple=true');\n }\n return;\n }\n // Se <mat-select [multiple]=\"true\">\n // armazenar valores previamente selecionados e restaurá-los quando forem desmarcados\n // porque a opção não está disponível enquanto estamos filtrando\n this.previousSelectedValues = this.matSelect.ngControl.value;\n\n this.matSelect.ngControl.valueChanges\n .pipe(takeUntil(this._onDestroy))\n .subscribe((values: any): void => {\n let restoreSelectedValues: boolean = false;\n\n if (this.matSelect.multiple) {\n if ((this.alwaysRestoreSelectedOptionsMulti || (this._formControl.value && this._formControl.value.length))\n && this.previousSelectedValues && Array.isArray(this.previousSelectedValues)) {\n\n if (!values || !Array.isArray(values)) {\n values = [];\n }\n\n const optionValues: any[] = this.matSelect.options.map((option: MatOption): any => option.value);\n\n this.previousSelectedValues.forEach((previousValue: any): void => {\n if (!values.some((v: any): boolean => this.matSelect.compareWith(v, previousValue))\n && !optionValues.some((v: any): boolean => this.matSelect.compareWith(v, previousValue))) {\n // Se um valor que foi selecionado antes for desmarcado e não encontrado nas opções, ele foi desmarcado\n // devido à filtragem, então restauramos.\n values.push(previousValue);\n restoreSelectedValues = true;\n }\n });\n }\n }\n this.previousSelectedValues = values;\n\n if (restoreSelectedValues) {\n this.matSelect._onChange(values);\n }\n });\n }\n\n /**\n * Defina a largura do innerSelectSearch para ajustar até mesmo as barras de rolagem personalizadas\n * E apoiar todos os sistemas de operação\n */\n public updateInputWidth(): void {\n if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\n return;\n }\n let element: HTMLElement = this.innerSelectSearch.nativeElement;\n let panelElement: HTMLElement;\n while (element = element.parentElement) {\n if (element.classList.contains('mat-select-panel')) {\n panelElement = element;\n break;\n }\n }\n if (panelElement) {\n this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\n }\n }\n\n /**\n * Determine o deslocamento para o comprimento que pode ser causado pelo matOption opcional usado como uma entrada de pesquisa.\n */\n private getOptionsLengthOffset(): number {\n if (this.matOption) {\n return 1;\n } else {\n return 0;\n }\n }\n\n private unselectActiveDescendant(): void {\n if (this.activeDescendant) {\n this.activeDescendant.removeAttribute('aria-selected');\n }\n this.searchSelectInput.nativeElement.removeAttribute('aria-activedescendant');\n }\n\n\n}\n","import { ObjectUtil } from './object.util';\n\n/** @dynamic */\nexport class ArrayUtil {\n\n public static isEmpty(value: Object[]): boolean {\n return ObjectUtil.isNull(value) || value.length === 0;\n }\n\n public static clone(value: Object[]): any[] {\n if (ObjectUtil.isNull(value)) {\n return new Array();\n }\n return [...value];\n }\n\n /**\n * Função para realizar ordenação de Array de objetos\n * @param propertyList Lista de propriedades que serão usadas na ordenação\n * @returns (a,b) => n. Onde n é -1, 0, 1\n */\n public static sortObjects(propertyList: { property: string, isAsc: boolean }[]): () => number {\n const fnGetPropertyValue = function (entity: any, property: string): string {\n if (!ObjectUtil.isNewModel(entity)) {\n const properties: string[] = property.split('.');\n let value: any = entity;\n\n for (let i: number = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n return value;\n }\n }\n }\n return '';\n }\n\n const fnSort = function (sortProp: { property: string, isAsc: boolean }[], x: any, y: any): number {\n const typeOrder: string[] = ['boolean', 'number', 'string', 'object', 'undefined']; // Quando os pares não combinam usará esta ordem de precedência\n for (let i: number = 0; i < sortProp.length; i++) {\n let sortFactor: number = 1;\n if (!sortProp[i].isAsc) {\n sortFactor = -1;\n }\n\n let xValue: any = fnGetPropertyValue(x, sortProp[i].property);\n let yValue: any = y[sortProp[i].property];\n const xType: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function' = typeof xValue;\n const yType: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function' = typeof yValue;\n\n let compareResult: number = 0;\n if (xType === yType) {\n switch (xType) {\n case 'string': {\n compareResult = xValue.localeCompare(yValue);\n break;\n }\n case 'number': {\n compareResult = (xValue === yValue) ? 0 : (xValue < yValue) ? -1 : 1;\n break;\n }\n case 'boolean': {\n compareResult = (xValue === yValue) ? 0 : (xValue === false) ? -1 : 1;\n break;\n }\n case 'object': {\n if (ObjectUtil.isNull(xValue) && ObjectUtil.isNull(yValue)) {\n compareResult = 0;\n } else if (ObjectUtil.isNull(xValue)) {\n compareResult = -1;\n } else if (ObjectUtil.isNull(yValue)) {\n compareResult = 1;\n } else {\n xValue = xValue.toString();\n yValue = yValue.toString();\n compareResult = xValue.localeCompare(yValue);\n }\n break;\n }\n default: {\n // Isso é típico de indefinido, o que acontecerá muito se o nome da propriedade passada for digitado incorretamente, etc.\n // Então, apenas assuma que os pares de itens não podem ser distinguidos e use 0.\n compareResult = 0;\n }\n }\n } else {\n if (ObjectUtil.isNull(xValue) && ObjectUtil.isNull(yValue)) {\n compareResult = 0;\n } else if (ObjectUtil.isNull(xValue)) {\n compareResult = 1; // Ordena NULL para o final\n } else if (ObjectUtil.isNull(yValue)) {\n compareResult = -1; // Ordena NULL para o final\n } else {\n const xValOrder: number = typeOrder.findIndex(t => t === xType);\n const yValOrder: number = typeOrder.findIndex(t => t === yType);\n compareResult = (xValOrder === yValOrder) ? 0 : (xValOrder < yValOrder) ? -1 : 1;\n }\n if (compareResult !== 0) {\n return compareResult; // Uma decisão de classificação definida está disponível, mas IGNORE o fator de classificação! Este caso é precedente\n }\n }\n if (compareResult !== 0) {\n return compareResult * sortFactor; // Uma decisão de classificação definida está disponível\n }\n }\n return 0; // Trate os itens como equivalentes não tendo encontrado uma diferença específica na lista de propriedades de ordenação\n\n };\n\n return fnSort.bind(this, propertyList);\n }\n\n}\n","import { AfterContentChecked, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { MatOption, MatSelect } from '@angular/material';\n\nimport { AbstractModel } from '../../../core/models/abstract.model';\nimport { ArrayUtil } from '../../../core/utils/array.util';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { StringUtil } from '../../../core/utils/string.util';\n\n@Component({\n selector: 'itss-select-entity',\n templateUrl: './select-entity.component.html',\n styleUrls: ['./select-entity.component.scss']\n})\nexport class SelectEntityComponent<T> implements OnInit, AfterContentChecked, OnChanges {\n\n filteredEntities: any[] = [];\n\n previousSearchValue: string = null;\n\n allSelected: boolean = false;\n\n indeterminateAllSelected: boolean = false;\n\n @ViewChild('select', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @ViewChild('select', { static: false }) private select: MatSelect;\n\n @ViewChild('search', { static: false, read: ElementRef }) search: ElementRef;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() multiple: boolean = false;\n\n @Input() displayCheckboxAll: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() showClear: boolean = false;\n\n @Input() upperCase: boolean = false;\n\n @Input() property: string = 'description';\n\n @Input() propertyFn: (obj: any) => any;\n\n @Input() propertyEnum;\n\n @Input() map: (value: any, index?: number, array?: any[]) => boolean;\n\n @Input() nullValue: string;\n\n @Input() valuesExclud: T[] = [];\n\n @Input() entities: T[] = [];\n\n private _modelValue: T;\n @Input() set model(model: T) {\n this._modelValue = model;\n this.modelChange.emit(this._modelValue);\n }\n get model(): T {\n return this._modelValue;\n }\n\n @Output() modelChange: EventEmitter<T> = new EventEmitter<T>();\n @Output() selectionChange: EventEmitter<T> = new EventEmitter<T>();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void { }\n\n ngAfterContentChecked(): void {\n this._changeDetectorRef.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.model && !ObjectUtil.isNull(changes.model.currentValue)) {\n this.filterEntities();\n }\n if (changes.entities && !ObjectUtil.isNull(changes.entities.currentValue)) {\n this.filteredEntities = this.entities;\n this.filterEntities();\n }\n }\n\n filterEntities(): void {\n if (!ObjectUtil.isNewModel(this.model) && !ArrayUtil.isEmpty(this.filteredEntities) && !this.multiple) {\n const entity = this.filteredEntities.find(e => ObjectUtil.equalsByValue(e, this.model));\n if (!ObjectUtil.isNewModel(entity)) {\n this.model = entity;\n }\n }\n }\n\n getPropertyValue(entity: T): string {\n if (!ObjectUtil.isNewModel(entity)) {\n if (!ObjectUtil.isNull(this.propertyFn)) {\n return this.propertyFn(entity);\n }\n return this.getValue(entity, this.property);\n }\n return StringUtil.EMPTY;\n }\n\n getValue(entity: any, property: string): string {\n const properties = property.split('.');\n let value = entity;\n\n for (let i = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n if (!ObjectUtil.isNull(this.propertyEnum)) {\n return this.propertyEnum[value];\n }\n return value;\n }\n }\n }\n\n onSearch(valueSearch: string): void {\n if (\n (valueSearch === this.previousSearchValue) ||\n (this.haveSelected() && (valueSearch === this.getPropertyValue(this.model)))\n ) {\n return;\n }\n if (this.upperCase) {\n this.search.nativeElement.value = this.search.nativeElement.value.toUpperCase();\n }\n\n this.previousSearchValue = valueSearch;\n\n this.filteredEntities = this.entities\n .filter(entity => StringUtil.replaceAccents(this.getPropertyValue(entity)).toLowerCase().includes(StringUtil.replaceAccents(valueSearch).toLowerCase()));\n }\n\n haveSelected(): boolean {\n return !ObjectUtil.isNull(this.model);\n }\n\n onSelectionChange(entity: T): void {\n this.selectionChange.emit(entity);\n }\n\n compareFn = (f1: AbstractModel, f2: AbstractModel): boolean => {\n return f1 && f2 && f1.id === f2.id;\n }\n\n resetSearch(): void {\n if (ArrayUtil.isEmpty(this.filteredEntities)) {\n this.search.nativeElement.value = '';\n this.filteredEntities = this.entities;\n }\n }\n\n selectAll(): void {\n this.allSelected = true;\n this.indeterminateAllSelected = false;\n this.toggleAllSelection();\n this._changeDetectorRef.detectChanges();\n }\n\n toggleAllSelection(): void {\n if (!this.disabled) {\n if (this.displayCheckboxAll && this.allSelected && !ObjectUtil.isNull(this.select)) {\n for (let i: number = 0; i < this.select.options.length; i++) {\n const option: MatOption = this.select.options[i];\n if (!ObjectUtil.isNull(option)) {\n option.select();\n }\n }\n } else {\n for (let i: number = 0; i < this.select.options.length; i++) {\n const option: MatOption = this.select.options[i];\n if (!ObjectUtil.isNull(option)) {\n option.deselect();\n }\n }\n }\n\n this.validateIndeterminateAllSelected();\n this._changeDetectorRef.detectChanges();\n }\n }\n\n validateIndeterminateAllSelected(): void {\n if (this.displayCheckboxAll && !ObjectUtil.isNull(this.select)) {\n const lOptions: MatOption[] = this.select.options.filter((item: MatOption) => item.selected);\n this.allSelected = lOptions.length > 0;\n this.indeterminateAllSelected = lOptions.length > 0 && lOptions.length !== this.select.options.length;\n this._changeDetectorRef.detectChanges();\n }\n }\n\n removeOption(): void {\n if (this.multiple) {\n this.allSelected = false;\n this.indeterminateAllSelected = false;\n this.toggleAllSelection();\n } else {\n this.model = null;\n this.onSelectionChange(null);\n }\n\n this._changeDetectorRef.detectChanges();\n }\n\n showClearButton(): boolean {\n return (this.showClear) && (!StringUtil.isEmpty(this.getPropertyValue(this.model))) && (!ObjectUtil.isNull(this.model)) && (!this.disabled) && (!this.loading) && (!ArrayUtil.isEmpty(this.entities));\n }\n\n validKey(option: any): boolean {\n return !ObjectUtil.isNull(this.valuesExclud) ? !this.valuesExclud.some(el => el === option) : true;\n }\n}\n","import { Component, ElementRef, EventEmitter, forwardRef, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core/utils/object.util';\n\n@Component({\n selector: 'itss-select-enum',\n templateUrl: './select-enum.component.html',\n styleUrls: ['./select-enum.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectEnumComponent),\n multi: true\n }\n ]\n})\nexport class SelectEnumComponent implements ControlValueAccessor, OnInit {\n\n @ViewChild('select', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() multiple = false;\n\n @Input() enum;\n\n @Output() selectionChange = new EventEmitter<any>();\n\n @Input('value') val: any;\n\n @Input() loading = false;\n\n @Input() sort: (a: any, b: any) => number;\n\n @Input() valuesExclud: string[];\n\n @Input() nullValue: string;\n\n enumList: any[] = [];\n\n ngOnInit(): void {\n this.enumList = Object.keys(this.enum)\n .map(key => ({ key: key, value: this.enum[key] }))\n .sort(this.sort);\n }\n\n onSelectionChange(entity: any) {\n this.selectionChange.emit(entity);\n }\n\n onChange: any = () => {\n }\n\n onTouch: any = () => {\n }\n\n get value() {\n return this.val;\n }\n\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n validKey(key: string): boolean {\n return !ObjectUtil.isNull(this.valuesExclud) ? !this.valuesExclud.some(el => el === key) : true;\n }\n\n}\n","import { Component, ElementRef, EventEmitter, forwardRef, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { GIPINgConfig } from '../../api/gipi-ng-config';\n\n@Component({\n selector: 'itss-select-month-period',\n templateUrl: './select-month-period.component.html',\n styleUrls: ['./select-month-period.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMonthPeriodComponent),\n multi: true\n }\n ],\n host: { 'class': 'itss-element' }\n})\nexport class SelectMonthPeriodComponent implements OnInit {\n\n periodSelected: Date;\n\n @ViewChild('datePeriodDropdown', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() disabled: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() bootPeriod: Date = new Date();\n\n @Output() dateChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n constructor(private _config: GIPINgConfig) { }\n\n ngOnInit(): void {\n this.periodSelected = new Date(this.bootPeriod);\n }\n\n onClickButtonLeft(): void {\n setTimeout(() => {\n this.periodSelected.setMonth(this.periodSelected.getMonth() - 1);\n this.dateChangeEmit();\n });\n }\n\n onClickButtonRight(): void {\n setTimeout(() => {\n this.periodSelected.setMonth(this.periodSelected.getMonth() + 1);\n this.dateChangeEmit();\n });\n }\n\n dateChangeEmit(): void {\n this.dateChange.emit(this.periodSelected);\n }\n\n getMonthNameByDate(): string {\n return this._config.getTranslation('monthNames')[this.periodSelected.getMonth()];\n }\n\n getFullYearByDate(): string {\n return this.periodSelected.getFullYear().toString();\n }\n\n}\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'itss-slide-toggle',\n templateUrl: './slide-toggle.component.html',\n styleUrls: ['./slide-toggle.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SlideToggleComponent),\n multi: true\n }\n ]\n})\nexport class SlideToggleComponent implements ControlValueAccessor, OnInit {\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() color = 'primary';\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input('value') val: any;\n\n @Output() change = new EventEmitter<any>();\n\n ngOnInit(): void {\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n get value() {\n return this.val;\n }\n\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CdkStepper } from '@angular/cdk/stepper';\n\n@Component({\n selector: 'itss-stepper',\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n providers: [{\n provide: CdkStepper,\n useExisting: StepperComponent\n }]\n})\nexport class StepperComponent extends CdkStepper implements OnInit {\n\n @Input() isDisableClick = false;\n\n ngOnInit(): void {\n }\n\n onClick(index: number): void {\n this.selectedIndex = index;\n }\n\n}\n","import {Component, EventEmitter, Input, OnInit, Output, TemplateRef} from '@angular/core';\n\n@Component({\n selector: 'itss-tab',\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss']\n})\nexport class TabComponent implements OnInit {\n\n @Input() index: number;\n\n @Input() label: string;\n\n @Input() active = false;\n\n @Input() template: TemplateRef<any>;\n\n @Input() closeable = false;\n\n @Input() disabled = false;\n\n @Input() data: any;\n\n @Input() icon: string;\n\n @Output() selectionChange = new EventEmitter<any>();\n\n action: (obj: any) => void;\n\n ngOnInit(): void {\n }\n\n}\n","import {Directive, ViewContainerRef} from '@angular/core';\n\n@Directive({\n selector: '[dynamicTab]'\n})\nexport class DynamicTabDirective {\n\n constructor(public viewContainer: ViewContainerRef) {\n }\n\n}\n","import {EventEmitter, TemplateRef} from '@angular/core';\nimport {AbstractDTO} from './abstract.dto';\nimport {AbstractModel} from '../abstract.model';\n\nexport class TabDTO extends AbstractDTO {\n\n label: string;\n\n active = false;\n\n template: TemplateRef<any>;\n\n closeable = false;\n\n disabled = false;\n\n data: any;\n\n icon: string;\n\n action: (obj: any) => void;\n\n}\n","import {AfterContentInit, Component, ComponentFactoryResolver, ContentChildren, OnInit, QueryList, ViewChild} from '@angular/core';\nimport {TabComponent} from '../tab/tab.component';\nimport {DynamicTabDirective} from '../../directives/dynamic-tab.directive';\nimport {TabDTO} from '../../../core/models/dto/tab.dto';\n\n@Component({\n selector: 'itss-tab-group',\n templateUrl: './tab-group.component.html',\n styleUrls: ['./tab-group.component.scss']\n})\nexport class TabGroupComponent implements AfterContentInit, OnInit {\n\n dynamicTabs: TabComponent[] = [];\n\n @ContentChildren(TabComponent) tabs: QueryList<TabComponent>;\n\n @ViewChild(DynamicTabDirective, {static: false}) dynamicTabPlaceholder: DynamicTabDirective;\n\n constructor(private _componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n ngOnInit(): void {\n }\n\n ngAfterContentInit() {\n const activeTabs = this.tabs.filter(tab => tab.active);\n\n if (activeTabs.length === 0 && this.tabs.length > 0) {\n this.selectTab(this.tabs.first);\n }\n }\n\n openTab(label: string, template, data, closeable = false, disabled = false, action?: (obj: any) => void): void {\n const tab = new TabDTO();\n tab.label = label;\n tab.template = template;\n tab.data = data;\n tab.closeable = closeable;\n tab.disabled = disabled;\n tab.action = action;\n this.openTabs(Array(tab));\n }\n\n openTabs(tabs: TabDTO[]): void {\n const tabsComponent = tabs.map(tab => this.getTabComponent(tab.label, tab.template, tab.data, tab.closeable, tab.disabled, tab.action));\n this.dynamicTabs.push(...tabsComponent);\n this.selectTab(this.dynamicTabs[0]);\n }\n\n getTabComponent(label: string, template, data, closeable = false, disabled = false, action?: (obj: any) => void): TabComponent {\n const componentFactory = this._componentFactoryResolver.resolveComponentFactory(TabComponent);\n const componentRef = this.dynamicTabPlaceholder.viewContainer.createComponent(componentFactory);\n\n const instance = componentRef.instance;\n instance.label = label;\n instance.template = template;\n instance.data = data;\n instance.closeable = closeable;\n instance.disabled = disabled;\n instance.action = action;\n\n return componentRef.instance;\n }\n\n selectTab(tab: TabComponent) {\n this.tabs.toArray().forEach(t => (t.active = false));\n this.dynamicTabs.forEach(t => (t.active = false));\n tab.active = true;\n tab.selectionChange.emit();\n if (tab.action) {\n tab.action(tab.data);\n }\n }\n\n closeTab(tab: TabComponent) {\n const index = this.dynamicTabs.indexOf(tab);\n this.dynamicTabs.splice(index, 1);\n\n const viewContainerRef = this.dynamicTabPlaceholder.viewContainer;\n viewContainerRef.remove(index);\n\n if (this.tabs.length > 0) {\n this.selectTab(this.tabs.first);\n }\n }\n\n closeActiveTab() {\n const activeTabs = this.dynamicTabs.filter(tab => tab.active);\n if (activeTabs.length > 0) {\n this.closeTab(activeTabs[0]);\n }\n }\n\n closeAllTabs() {\n const tabs = Object.assign([], this.dynamicTabs);\n if (tabs.length > 0) {\n tabs.forEach(tab => this.closeTab(tab));\n }\n }\n\n nextTab() {\n const currentTab = this.tabs.toArray().find(tab => tab.active);\n const nextTab = this.tabs.toArray()[this.tabs.toArray().indexOf(currentTab) + 1];\n if (nextTab != null) {\n this.tabs.toArray().forEach(t => (t.active = false));\n this.dynamicTabs.forEach(t => (t.active = false));\n nextTab.active = true;\n nextTab.selectionChange.emit();\n }\n }\n\n previousTab() {\n const currentTab = this.tabs.toArray().find(tab => tab.active);\n const previousTab = this.tabs.toArray()[this.tabs.toArray().indexOf(currentTab) - 1];\n if (previousTab != null) {\n this.tabs.toArray().forEach(t => (t.active = false));\n this.dynamicTabs.forEach(t => (t.active = false));\n previousTab.active = true;\n previousTab.selectionChange.emit();\n }\n }\n\n}\n\n","/**\n * Throttle a function\n */\nexport function throttle(func: any, wait: number, options?: any): (this: any) => any {\n options = options || {};\n let context: any;\n let args: any;\n let result: any;\n let timeout: any = null;\n let previous: number = 0;\n\n function later(): void {\n previous = options.leading === false ? 0 : +new Date();\n timeout = null;\n result = func.apply(context, args);\n }\n\n return function (this: any): any {\n const now: number = +new Date();\n\n if (!previous && options.leading === false) {\n previous = now;\n }\n\n const remaining: number = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n}\n\n/**\n * Throttle decorator\n *\n * class MyClass {\n * throttleable(10)\n * myFn() { ... }\n * }\n */\nexport function throttleable(duration: number, options?: any): (target: any, key: PropertyKey, descriptor: PropertyDescriptor) => { configurable: boolean; enumerable: boolean; get: () => any; } {\n return function innerDecorator(target: any, key: PropertyKey, descriptor: PropertyDescriptor) {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter(): any {\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: throttle(descriptor.value, duration, options)\n });\n\n return this[key];\n }\n };\n };\n}\n","import { MediaMatcher } from '@angular/cdk/layout';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, startWith, takeUntil } from 'rxjs/operators';\n\nimport { GIPIResizeService } from './resize.service';\n\nexport enum BreakpointEnum {\n xl = 'xl',\n lg = 'lg',\n md = 'md',\n sm = 'sm',\n xs = 'xs'\n}\n\nexport type BreakpointMap = { [key in BreakpointEnum]: string };\nexport type BreakpointBooleanMap = { [key in BreakpointEnum]: boolean };\nexport type GridBreakpointKey = keyof typeof BreakpointEnum;\n\nexport const gridResponsiveMap: BreakpointMap = {\n xs: '(max-width: 419px)',\n sm: '(min-width: 420px)',\n md: '(min-width: 600px)',\n lg: '(min-width: 768px)',\n xl: '(min-width: 1366px)',\n};\n\nexport const siderResponsiveMap: BreakpointMap = {\n xs: '(max-width: 420px)',\n sm: '(max-width: 600px)',\n md: '(max-width: 768px)',\n lg: '(max-width: 1366px)',\n xl: '(max-width: 1920px)',\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GIPIBreakpointService implements OnDestroy {\n\n private destroy$: Subject<void> = new Subject<void>();\n\n constructor(\n private resizeService: GIPIResizeService,\n private mediaMatcher: MediaMatcher\n ) {\n this.resizeService\n .subscribe()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => { });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n subscribe(breakpointMap: BreakpointMap): Observable<BreakpointEnum>;\n subscribe(breakpointMap: BreakpointMap, fullMap: true): Observable<BreakpointBooleanMap>;\n subscribe(breakpointMap: BreakpointMap, fullMap?: true): Observable<BreakpointEnum | BreakpointBooleanMap> {\n if (fullMap) {\n const get = () => this.matchMedia(breakpointMap, true);\n return this.resizeService.subscribe().pipe(\n map(get),\n startWith(get()),\n distinctUntilChanged(\n (x: [BreakpointEnum, BreakpointBooleanMap], y: [BreakpointEnum, BreakpointBooleanMap]) => x[0] === y[0]\n ),\n map(x => x[1])\n );\n } else {\n const get = () => this.matchMedia(breakpointMap);\n return this.resizeService.subscribe().pipe(map(get), startWith(get()), distinctUntilChanged());\n }\n }\n\n private matchMedia(breakpointMap: BreakpointMap): BreakpointEnum;\n private matchMedia(breakpointMap: BreakpointMap, fullMap: true): [BreakpointEnum, BreakpointBooleanMap];\n private matchMedia(\n breakpointMap: BreakpointMap,\n fullMap?: true\n ): BreakpointEnum | [BreakpointEnum, BreakpointBooleanMap] {\n let bp: BreakpointEnum = BreakpointEnum.md;\n\n const breakpointBooleanMap: Partial<BreakpointBooleanMap> = {};\n\n Object.keys(breakpointMap).map(breakpoint => {\n const castBP = breakpoint as BreakpointEnum;\n const matched: boolean = this.mediaMatcher.matchMedia(gridResponsiveMap[castBP]).matches;\n\n breakpointBooleanMap[breakpoint as BreakpointEnum] = matched;\n\n if (matched) {\n bp = castBP;\n }\n });\n\n if (fullMap) {\n return [bp, breakpointBooleanMap as BreakpointBooleanMap];\n } else {\n return bp;\n }\n }\n}\n\n","import { AbstractDTO } from './abstract.dto';\n\nexport class TableGroupHeaderDTO extends AbstractDTO {\n\n columnData: any;\n\n childrenGroup: any[];\n\n totalCount: number;\n\n constructor(columnData?: any, childrenGroup?: any[], totalCount?: number) {\n super();\n this.columnData = columnData;\n this.childrenGroup = childrenGroup;\n this.totalCount = totalCount;\n }\n\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, Component, ContentChild, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { MatHeaderRowDef, MatPaginator, MatSort, MatTableDataSource, Sort, SortDirection } from '@angular/material';\nimport { Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\nimport { ArrayUtil, ObjectUtil, StringUtil } from '../../../core';\nimport { TableColumnDTO } from '../../../core/models/dto/table-column.dto';\nimport { TableGroupHeaderDTO } from '../../../core/models/dto/table-group-header.dto';\nimport { TablePageEventDTO } from '../../../core/models/dto/table-page-event.dto';\n\n\n@Component({\n selector: 'itss-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0px', minHeight: '0', display: 'none' })),\n state('expanded', style({ height: '*' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n})\nexport class TableComponent<T> implements AfterViewInit, OnChanges, OnInit {\n\n private _expandedElements: any[] = [];\n\n public _scrollHeightCalc: number = 410;\n public _isPopoverHover: any = null;\n public _contextPopover: T;\n public _expandedElement: any;\n public _displayedColumns: any[] = [];\n public _dataSource: MatTableDataSource<T | TableGroupHeaderDTO>;\n\n @ViewChild(MatSort, { static: true }) matSort: MatSort;\n @ViewChild(MatPaginator, { static: true }) matPaginator: MatPaginator;\n @ViewChild('frontendPaginator', { static: false }) matFrontendPaginator: MatPaginator;\n @ViewChild('backendPaginator', { static: false }) matBackendPaginator: MatPaginator;\n\n @ViewChild('matHeaderRow', { static: true }) private _matHeaderRowRef: TemplateRef<MatHeaderRowDef>;\n @ViewChild('frontendPaginator', { static: true }) private _matFrontendPaginatorRowRef: TemplateRef<any>;\n @ViewChild('backendPaginator', { static: true }) private _matBackendPaginatorRowRef: TemplateRef<any>;\n\n @ContentChild('actions', { static: false }) actionsRef: TemplateRef<any>;\n @ContentChild('actionsPopover', { static: false }) actionsPopoverRef: TemplateRef<any>;\n @ContentChild('footer', { static: false }) footerRef: TemplateRef<any>;\n @ContentChild('expanded', { static: false }) expandedRef: TemplateRef<any>;\n @ContentChild('groupHeader', { static: false }) groupHeaderRef: TemplateRef<any>;\n @ContentChild('groupFooter', { static: false }) groupFooterRef: TemplateRef<any>;\n\n @Input() shadow: boolean = false;\n\n @Input() columns: TableColumnDTO[] = [];\n\n private _dataValue: T[];\n @Input() get data(): T[] {\n return this._dataValue;\n }\n set data(data: T[]) {\n this._dataValue = data;\n this.dataChange.emit(this._dataValue);\n }\n\n @Input() paginator: boolean = false;\n\n @Input() backendPagination: boolean = true;\n\n @Input() paginatorPageIndex: number = 0;\n\n @Input() paginatorLength: number = 0;\n\n @Input() paginatorPageSize: number = 10;\n\n @Input() paginatorPageSizeOptions: number[] = [10, 20, 30];\n\n @Input() showPageSizeOptions: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() expandable: boolean = false;\n\n @Input() showHeader: boolean = true;\n\n @Input() columnInitial: number;\n\n @Input() columnFinal: number;\n\n @Input() headerSticky: boolean = false;\n\n @Input() groupByColumn: string;\n\n @Input() groupHeaderSticky: boolean = false;\n\n @Input() groupStartExpanded: boolean = false;\n\n @Input() highlightRowFn: (row: T | TableGroupHeaderDTO) => boolean;\n\n @Input() infiniteScroll: boolean = false;\n\n @Input() scrollDelay: number = 1000;\n\n @Input() scrollOffset: number = 1000;\n\n @Input() scrollHeigth: number;\n\n @Input() isFiltering: boolean = false;\n\n @Input('columnExpandableFixed') showColumnExpandableFixed: boolean = false;\n\n @Input() expandableOneRow: boolean = false;\n\n @Input() ignoreChildrenExpandRow: boolean = false;\n\n @Input() clearSort: boolean = false;\n @Input() sortActive: string = '';\n @Input() sortDirection: SortDirection = 'asc';\n\n @Output() rowExpandedChange: EventEmitter<T> = new EventEmitter<T>(true);\n @Output() dataChange: EventEmitter<T[]> = new EventEmitter<T[]>(true);\n @Output() page: EventEmitter<TablePageEventDTO> = new EventEmitter();\n @Output() rowHover: EventEmitter<any> = new EventEmitter();\n\n public get matTableHeigth(): Observable<string> {\n let headerRowHeight: number;\n if (!ObjectUtil.isNull(this._matHeaderRowRef)) {\n headerRowHeight = (this._matHeaderRowRef.elementRef.nativeElement as HTMLElement).clientHeight;\n }\n\n let paginatorRowHeight: number;\n const paginatorRef = this.backendPagination ? this._matBackendPaginatorRowRef : this._matFrontendPaginatorRowRef;\n if (!ObjectUtil.isNull(paginatorRef)) {\n paginatorRowHeight = (paginatorRef.elementRef.nativeElement as HTMLElement).clientHeight;\n }\n\n const matHeaderwHeight: number = headerRowHeight || 60;\n const matPaginatorHeight: number = paginatorRowHeight || 57;\n\n const pageSize: number = this.paginatorPageSize && (this.paginatorPageSize <= 10) ? this.paginatorPageSize : 10;\n const setHeigth: boolean = this.headerSticky && (this.data.length > pageSize);\n\n return of(setHeigth ? `${((57 * pageSize) + matHeaderwHeight + matPaginatorHeight)}px` : 'auto');\n }\n\n constructor() { }\n\n ngOnInit(): void { }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (!ObjectUtil.isNull(this._dataSource)) {\n this._dataSource.sort = this.matSort;\n\n if (this.paginator && !this.backendPagination && !this.infiniteScroll) {\n this._dataSource.paginator = this.matFrontendPaginator;\n }\n }\n\n if (this.paginator && (this.backendPagination || this.infiniteScroll)) {\n this.onPage({\n pageSize: this.paginatorPageSize,\n paginatorPageSizeOptions: this.paginatorPageSizeOptions,\n pageIndex: 0,\n length: 0,\n previousPageIndex: 0\n });\n }\n\n if (!ObjectUtil.isNull(this.actionsPopoverRef)) {\n this._contextPopover = null;\n this._isPopoverHover = false;\n this.closePopover(0);\n\n const popover: HTMLElement = document.getElementById('table-popover');\n if (!ObjectUtil.isNull(popover)) {\n popover.style.visibility = 'hidden';\n }\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n setTimeout(() => {\n if (changes.data) {\n this._createDataSource();\n }\n });\n }\n\n private _createDataSource(): void {\n let columns: string[] = this.columns.filter(c => c.visible).map(c => c.property);\n if (!ObjectUtil.isNull(this.expandedRef)) {\n columns = ['expandedColumn', ...columns];\n }\n if (!ObjectUtil.isNull(this.actionsRef)) {\n columns = [...columns, 'actionsColumn'];\n }\n this._displayedColumns = columns;\n\n if (this.infiniteScroll) {\n let dataAll: T[] = [];\n\n if (!this.isFiltering) {\n if (!ObjectUtil.isNull(this._dataSource)) {\n dataAll = ArrayUtil.clone(this._dataSource.data);\n }\n }\n\n if (!ArrayUtil.isEmpty(this.data)) {\n dataAll.push(...this.data);\n }\n\n this._dataSource = new MatTableDataSource([]);\n if (!StringUtil.isEmpty(this.groupByColumn) && !ObjectUtil.isNull(this.groupHeaderRef)) {\n this._dataSource.data = this.genereteGroupsByColumn(dataAll);\n } else {\n this._dataSource.data = dataAll;\n }\n\n this.data = dataAll;\n this.dataChange.emit(this.data);\n this.calcScrollHeight();\n } else {\n this._dataSource = new MatTableDataSource([]);\n if (!StringUtil.isEmpty(this.groupByColumn) && !ObjectUtil.isNull(this.groupHeaderRef)) {\n this._dataSource.data = this.genereteGroupsByColumn(this.data);\n } else {\n this._dataSource.data = this.data;\n }\n }\n\n if (!ArrayUtil.isEmpty(this._dataSource.data)) {\n this._dataSource.sort = this.matSort;\n this.setSortingDataAccessor();\n }\n\n if (this.paginator && !this.backendPagination) {\n this._dataSource.paginator = this.matFrontendPaginator;\n }\n\n if (!this.groupStartExpanded && (this.groupHeaderRef || (this.expandable && this.expandedRef)) && !ArrayUtil.isEmpty(this._dataSource.data)) {\n this._dataSource.data.forEach(row => this.addCollapse(row));\n }\n }\n\n calcScrollHeight(): void {\n if ((this._dataSource && (this._dataSource.data.length > 0)) && (Math.floor(this._scrollHeightCalc) <= 700)) {\n this._scrollHeightCalc = 130 + (this._dataSource.data.length * 48);\n }\n }\n\n onPage(pageEvent: TablePageEventDTO): void {\n this.paginatorPageSize = pageEvent.pageSize;\n pageEvent.paginatorPageSizeOptions = ArrayUtil.isEmpty(pageEvent.paginatorPageSizeOptions) ? this.paginatorPageSizeOptions : pageEvent.paginatorPageSizeOptions;\n this.page.emit(pageEvent);\n }\n\n isExpansed(element: any): boolean {\n return this._expandedElements.filter(e => ObjectUtil.equals(e, element)).length > 0;\n }\n\n removeCollapse(element: any): void {\n if (this.expandableOneRow) {\n this._dataSource.data.forEach(row => this.addCollapse(row));\n }\n\n const expandedElementsAux: any[] = ArrayUtil.clone(this._expandedElements);\n expandedElementsAux.splice(this._expandedElements.indexOf(element), 1);\n this._expandedElements = ArrayUtil.clone(expandedElementsAux);\n }\n\n addCollapse(element: any): void {\n const collapsedElement: boolean = this._expandedElements.filter(e => ObjectUtil.equals(e, element)).length > 0;\n if (!collapsedElement) {\n this._expandedElements.push(element);\n }\n }\n\n rowExpandedChangeEmit(element: any): void {\n this.rowExpandedChange.emit(element);\n }\n\n sortData(sort: Sort): void {\n if (this.infiniteScroll) {\n this.data = [];\n this.dataChange.emit([]);\n this._dataSource = new MatTableDataSource([]);\n this.calcScrollHeight();\n }\n\n this.onPage({\n pageSize: this.paginatorPageSize,\n pageIndex: 0,\n length: 0,\n previousPageIndex: 0,\n paginatorPageSizeOptions: this.paginatorPageSizeOptions,\n sort: sort\n });\n }\n\n showPopover(event: MouseEvent, data: any): void {\n const popover: HTMLElement = document.getElementById('table-popover');\n if (!ObjectUtil.isNull(popover)) {\n popover.style.visibility = 'hidden';\n\n if (!this.loading) {\n const domRectPopover = popover.getBoundingClientRect();\n const domRectRow = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const cells = (event.currentTarget as HTMLTableRowElement).children;\n\n if (domRectPopover && domRectRow) {\n popover.style.visibility = 'visible';\n popover.style.top = `${(domRectRow.top + domRectRow.height) - 1}px`;\n\n let startPosition: number = 0;\n let endPosition: number = 0;\n\n if (this.columnInitial && (this.columnInitial >= 0)) {\n if (!cells[this.columnInitial]) {\n throw new Error('Initial column undefined or null');\n }\n startPosition = cells[this.columnInitial].getBoundingClientRect().left;\n } else {\n startPosition = domRectRow.left;\n }\n\n if (this.columnFinal && (this.columnFinal >= 0)) {\n if (!cells[this.columnFinal]) {\n throw new Error('Final column undefined or null');\n }\n endPosition = cells[this.columnFinal].getBoundingClientRect().left - domRectPopover.width;\n } else {\n endPosition = domRectRow.right - domRectPopover.width;\n }\n\n setTimeout(() => {\n if (event.clientX > startPosition + 15 && event.clientX < endPosition) {\n popover.style.left = `${event.clientX - 15}px`;\n } else if (event.clientX <= startPosition) {\n popover.style.left = `${startPosition}px`;\n } else if (event.clientX >= endPosition) {\n popover.style.left = `${endPosition}px`;\n }\n });\n }\n }\n }\n this.rowHover.emit(data);\n this._contextPopover = data;\n }\n\n closePopover(time: number): void {\n of(null).pipe(delay(time)).subscribe(() => {\n if (!ObjectUtil.isNull(this._isPopoverHover) && !this._isPopoverHover) {\n if (!ObjectUtil.isNull(this._isPopoverHover) && !ObjectUtil.isNull(this.actionsPopoverRef)) {\n const popover: HTMLElement = document.getElementById('table-popover');\n if (!ObjectUtil.isNull(popover)) {\n popover.style.visibility = 'hidden';\n }\n }\n this._contextPopover = null;\n this._isPopoverHover = null;\n }\n });\n }\n\n setSortingDataAccessor(): void {\n this._dataSource.sortingDataAccessor = (data: any, sortHeaderId: string): string => {\n if (typeof data[sortHeaderId] === 'string') {\n return data[sortHeaderId].toLowerCase();\n }\n return data[sortHeaderId];\n };\n }\n\n // group header\n genereteGroupsByColumn(data: any[]): TableGroupHeaderDTO[] {\n const groups: {} = data.reduce((group, row) => {\n const dataColumn: string = row[this.groupByColumn].toString();\n if (!group[dataColumn]) {\n group[dataColumn] = [];\n }\n group[dataColumn].push(row);\n return group;\n }, {});\n\n return Object.keys(groups).map(groupValue => {\n return new TableGroupHeaderDTO(groupValue, groups[groupValue], groups[groupValue].length);\n });\n }\n\n getHighlightRow(row: T | TableGroupHeaderDTO): boolean {\n if (!ObjectUtil.isNull(row)) {\n if (!ObjectUtil.isNull(this.highlightRowFn)) {\n return this.highlightRowFn(row);\n }\n return false;\n }\n return false;\n }\n\n getIndexRow(row: T | TableGroupHeaderDTO): number {\n if (!ObjectUtil.isNull(this._dataSource) && !ArrayUtil.isEmpty(this._dataSource.data) && !ObjectUtil.isNull(row)) {\n return this._dataSource.data.findIndex(r => r === row);\n }\n }\n\n // infinite scroll\n hasMore(): boolean {\n return !this._dataSource || (this._dataSource.data.length < this.paginatorLength);\n }\n\n handleScroll(scrolled: boolean): void {\n if (scrolled && this.hasMore()) {\n this.onPage({\n pageSize: this.paginatorPageSize,\n pageIndex: this.paginatorPageIndex,\n length: this.paginatorLength,\n previousPageIndex: this.paginatorPageIndex,\n });\n\n this.paginatorPageIndex += 1;\n }\n }\n\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { Component, ElementRef, forwardRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'itss-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextareaComponent),\n multi: true\n }\n ]\n})\nexport class TextareaComponent implements ControlValueAccessor, OnInit {\n\n @ViewChild('input', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @Input() name: string;\n\n @Input() label: string;\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n @Input() maxlength = 250;\n\n @Input() rows = 2;\n\n @Input() appearance = 'outline';\n\n @Input('value') val: any;\n get value() {\n return this.val;\n }\n set value(val) {\n this.val = this.checkUppercase(val);\n this.onChange(this.val);\n this.onTouch();\n }\n\n @Input() upperCase = false;\n\n @Input() mentionConfiguration = {};\n\n private _minHeight: string = '60px';\n @Input() get minHeight(): string {\n return this._minHeight;\n }\n set minHeight(value: string) {\n if (value.trim().toUpperCase() === 'AUTO') {\n this._minHeight = 'auto';\n } else {\n this._minHeight = coerceCssPixelValue(value);\n }\n }\n\n private _height: string = '60px';\n @Input() get height(): string {\n return this._height;\n }\n set height(value: string) {\n if (value.trim().toUpperCase() === 'AUTO') {\n this._height = 'auto';\n } else {\n this._height = coerceCssPixelValue(value);\n }\n }\n\n private _maxHeight: string = 'auto';\n @Input() get maxHeight(): string {\n return this._maxHeight;\n }\n set maxHeight(value: string) {\n if (value.trim().toUpperCase() === 'AUTO') {\n this._maxHeight = 'auto';\n } else {\n this._maxHeight = coerceCssPixelValue(value);\n }\n }\n\n constructor() { }\n\n ngOnInit(): void { }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = this.checkUppercase(value);\n }\n\n checkUppercase(value: any): any {\n if (this.upperCase && value) {\n return value.toUpperCase();\n }\n return value;\n }\n\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[pTemplate]',\n host: {}\n})\nexport class ItssTemplate {\n\n @Input() type: string;\n\n @Input('pTemplate') name: string;\n\n constructor(public template: TemplateRef<any>) { }\n\n getType(): string {\n return this.name;\n }\n}\n","import { AfterViewInit, Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\n\n/** A altura dos itens selecionados em unidades `em`. */\nconst SELECT_ITEM_HEIGHT_EM = 3;\n\n/**\n * Esta diretiva foi reescrita utilizando se do projeto a seguir\n * https://github.com/HaidarZ/ng-mat-select-infinite-scroll\n */\n@Directive({\n selector: '[itssInfiniteScroll]'\n})\nexport class InputSelectInfiniteScrollDirective implements OnInit, OnDestroy, AfterViewInit {\n\n /**\n * A distância limite da parte inferior da lista de opções para chamar o evento\n * infiniteScroll quando rolado. O valor limite pode ser em porcentagem ou em\n * pixels. Por exemplo, use o valor de 10%para que o infiniteScrollevento de saída\n * seja chamado quando o usuário precisar de 10% para chegar ao fundo.\n */\n @Input() threshold: string = '15%';\n\n /** O tempo limite antes de disparar o evento infiniteScroll */\n @Input() debounceTime: number = 100;\n\n /* Se true, a infiniteScroll não será mais acionada */\n @Input() complete!: boolean;\n\n /** Emitido quando o scroller dentro do mat-select atinge a distância necessária */\n @Output() infiniteScroll: EventEmitter<void> = new EventEmitter<void>();\n\n private _panel!: Element;\n\n private _thrPx: number = 0;\n\n private _thrPc: number = 0;\n\n private _singleOptionHeight: number = SELECT_ITEM_HEIGHT_EM;\n\n private _destroyed$: Subject<boolean> = new Subject<boolean>();\n\n constructor(\n private matSelect: MatSelect,\n private ngZone: NgZone\n ) { }\n\n ngOnInit(): void {\n this.evaluateThreshold();\n }\n\n ngAfterViewInit(): void {\n this.matSelect.openedChange.pipe(\n takeUntil(this._destroyed$)\n ).subscribe((opened: boolean): void => {\n if (opened) {\n this._panel = this.matSelect.panel.nativeElement;\n this._singleOptionHeight = this.getSelectItemHeightPx();\n this.registerScrollListener();\n }\n });\n }\n\n ngOnDestroy(): void {\n this._destroyed$.next(true);\n this._destroyed$.complete();\n }\n\n evaluateThreshold(): void {\n if (this.threshold.lastIndexOf('%') > -1) {\n this._thrPx = 0;\n this._thrPc = (parseFloat(this.threshold) / 100);\n\n } else {\n this._thrPx = parseFloat(this.threshold);\n this._thrPc = 0;\n }\n }\n\n registerScrollListener(): void {\n fromEvent(this._panel, 'scroll').pipe(\n takeUntil(this._destroyed$),\n debounceTime(this.debounceTime),\n tap((event: Event): void => {\n this.handleScrollEvent(event);\n })\n ).subscribe();\n }\n\n handleScrollEvent(event: any): void {\n this.ngZone.runOutsideAngular((): void => {\n if (this.complete) {\n return;\n }\n const countOfRenderedOptions: number = this.matSelect.options.length;\n const infiniteScrollDistance: number = this._singleOptionHeight * countOfRenderedOptions;\n const threshold: number = this._thrPc !== 0 ? (infiniteScrollDistance * this._thrPc) : this._thrPx;\n\n const scrolledDistance: number = this._panel.clientHeight + event.target.scrollTop;\n\n if ((scrolledDistance + threshold) >= infiniteScrollDistance) {\n this.ngZone.run((): void => this.infiniteScroll.emit());\n }\n });\n }\n\n getSelectItemHeightPx(): number {\n return parseFloat(getComputedStyle(this._panel).fontSize) * SELECT_ITEM_HEIGHT_EM;\n }\n\n}\n","import {Directive, HostListener, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[lowerCase]',\n})\nexport class LowerCaseDirective {\n\n @Input() enabledLowerCase = false;\n\n constructor(public ngControl: NgControl) {\n }\n\n @HostListener('ngModelChange', ['$event'])\n ngModelChange(event) {\n this.onInputChange(event);\n }\n\n @HostListener('keydown', ['$event'])\n keydown(event) {\n this.onInputChange(event.target.value);\n }\n\n onInputChange(event) {\n if (this.enabledLowerCase) {\n this.ngControl.valueAccessor.writeValue(event.toLowerCase());\n }\n }\n\n}\n","import {Directive, HostListener} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[phoneMask]',\n})\nexport class PhoneMaskDirective {\n\n constructor(public ngControl: NgControl) {\n }\n\n @HostListener('ngModelChange', ['$event'])\n onModelChange(event) {\n this.onInputChange(event, false);\n }\n\n @HostListener('keydown.backspace', ['$event'])\n keydownBackspace(event) {\n this.onInputChange(event.target.value, true);\n }\n\n\n onInputChange(event, backspace) {\n let newVal = event.replace(/\\D/g, '');\n if (backspace && newVal.length <= 6) {\n newVal = newVal.substring(0, newVal.length - 1);\n }\n if (newVal.length === 0) {\n newVal = '';\n } else if (newVal.length <= 3) {\n newVal = newVal.replace(/^(\\d{0,2})/, '($1)');\n } else if (newVal.length <= 6) {\n newVal = newVal.replace(/^(\\d{0,2})(\\d{0,4})/, '($1) $2');\n } else if (newVal.length <= 10) {\n newVal = newVal.replace(/^(\\d{0,2})(\\d{0,4})(\\d{0,4})/, '($1) $2-$3');\n } else {\n newVal = newVal.substring(0, 11);\n newVal = newVal.replace(/^(\\d{0,2})(\\d{0,5})(\\d{0,4})/, '($1) $2-$3');\n }\n this.ngControl.valueAccessor.writeValue(newVal);\n }\n}\n","import {Directive, HostListener, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[spaceDrop]',\n})\nexport class SpaceDropDirective {\n\n @Input() spaceDrop = false;\n\n constructor(public ngControl: NgControl) {\n }\n\n @HostListener('ngModelChange', ['$event'])\n ngModelChange(event) {\n this.onInputChange(event);\n }\n\n @HostListener('keydown', ['$event'])\n keydown(event) {\n this.onInputChange(event.target.value);\n }\n\n onInputChange(event) {\n if (this.spaceDrop) {\n this.ngControl.valueAccessor.writeValue(event.replace(/\\s/g, ''));\n }\n }\n\n}\n","import {Directive, HostListener, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[upperCase]',\n})\nexport class UpperCaseDirective {\n\n @Input() enabledUpperCase = false;\n\n constructor(public ngControl: NgControl) {\n }\n\n @HostListener('ngModelChange', ['$event'])\n ngModelChange(event) {\n this.onInputChange(event);\n }\n\n @HostListener('keydown', ['$event'])\n keydown(event) {\n this.onInputChange(event.target.value);\n }\n\n onInputChange(event) {\n if (this.enabledUpperCase) {\n this.ngControl.valueAccessor.writeValue(event.toUpperCase());\n }\n }\n\n}\n","import { BreakPoint, BREAKPOINT } from '@angular/flex-layout';\n\nexport const GIPI_BREAKPOINTS: BreakPoint[] = [\n {\n alias: 'xs',\n mediaQuery: 'screen and (min-width: 0px) and (max-width: 599.98px)',\n priority: 1001,\n },\n {\n alias: 'sm',\n mediaQuery: 'screen and (min-width: 600px) and (max-width: 767.98px)',\n priority: 1001,\n },\n {\n alias: 'md',\n mediaQuery: 'screen and (min-width: 768px) and (max-width: 1365.98px)',\n priority: 1001,\n },\n {\n alias: 'lg',\n mediaQuery: 'screen and (min-width: 1366px) and (max-width: 1919.98px)',\n priority: 1001,\n },\n {\n alias: 'xl',\n mediaQuery: 'screen and (min-width: 1920px) and (max-width: 4999.98px)',\n priority: 1001,\n },\n {\n alias: 'lt-xs',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 599.98px)',\n priority: 1001,\n },\n {\n alias: 'lt-sm',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 767.98px)',\n priority: 1001,\n },\n {\n alias: 'lt-md',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 1365.98px)',\n priority: 1001,\n },\n {\n alias: 'lt-lg',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 1919.98px)',\n priority: 1001,\n },\n {\n alias: 'lt-xl',\n overlapping: true,\n priority: 1001,\n mediaQuery: 'screen and (max-width: 4999.98px)',\n },\n {\n alias: 'gt-xs',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 600px)',\n priority: 1001,\n },\n {\n alias: 'gt-sm',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 768px)',\n priority: 1001,\n }, {\n alias: 'gt-md',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 1366px)',\n priority: 1001,\n },\n {\n alias: 'gt-lg',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 1920px)',\n priority: 1001,\n }\n];\n\nexport const GIPI_CUSTOM_BREAKPOINTS_PROVIDER = {\n provide: BREAKPOINT,\n useValue: GIPI_BREAKPOINTS,\n multi: true\n};\n","import { Directive, HostListener, HostBinding, Output, EventEmitter, Input } from '@angular/core';\n\n@Directive({\n selector: '[fileDragAndDrop]'\n})\nexport class GIPIFileDragAndDropDirective {\n\n @Output() filesChangeEmiter: EventEmitter<File[]> = new EventEmitter();\n\n @Input() disabled: boolean = false;\n\n @HostBinding('style.background') background: string = 'transparent';\n @HostBinding('style.border') borderStyle: string = '2px dashed';\n @HostBinding('style.border-color') borderColor: string = '#595959';\n @HostBinding('style.border-radius') borderRadius: string = '5px';\n\n constructor() { }\n\n @HostListener('dragover', ['$event']) public onDragOver(evt) {\n if (!this.disabled) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'transparent';\n this.borderColor = '#595959';\n this.borderStyle = '2px solid';\n }\n }\n\n @HostListener('dragleave', ['$event']) public onDragLeave(evt) {\n if (!this.disabled) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f6';\n this.borderColor = '#262626';\n this.borderStyle = '2px dashed';\n }\n }\n\n @HostListener('drop', ['$event']) public onDrop(evt) {\n if (!this.disabled) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'transparent';\n this.borderColor = '#595959';\n this.borderStyle = '2px dashed';\n const files = evt.dataTransfer.files;\n const valid_files: Array<File> = files;\n this.filesChangeEmiter.emit(valid_files);\n }\n }\n\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { AfterViewInit, Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\n\n/** A altura dos itens selecionados em unidades `px`. */\nconst SELECT_ITEM_HEIGHT_PX = 48;\n\n/**\n * Esta diretiva foi reescrita utilizando se do projeto a seguir\n * https://github.com/HaidarZ/ng-mat-select-infinite-scroll\n */\n@Directive({\n selector: '[GIPIInfiniteScroll]',\n})\nexport class GIPIInfiniteScrollDirective implements OnInit, OnDestroy, AfterViewInit {\n\n private _panel!: Element;\n\n private _thrPx: number = 0;\n\n private _thrPc: number = 0;\n\n private _destroyed$: Subject<boolean> = new Subject<boolean>();\n\n @Input() infiniteScrollDistance: string = '15%';\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollcomplete!: boolean;\n @Input() infiniteScrollOptionHeight: number = SELECT_ITEM_HEIGHT_PX;\n\n @Output() scrolled: EventEmitter<'up' | 'down'> = new EventEmitter<'up' | 'down'>();\n\n constructor(\n private _cdkVirtualScrollViewport: CdkVirtualScrollViewport,\n private _ngZone: NgZone\n ) { }\n\n ngOnInit(): void {\n this.evaluateThreshold();\n }\n\n ngAfterViewInit(): void {\n if (!this.infiniteScrollDisabled) {\n this._panel = this._cdkVirtualScrollViewport.getElementRef().nativeElement;\n this.registerScrollListener();\n }\n }\n\n ngOnDestroy(): void {\n this._destroyed$.next(true);\n this._destroyed$.complete();\n }\n\n evaluateThreshold(): void {\n if (typeof this.infiniteScrollDistance === 'string' && this.infiniteScrollDistance.lastIndexOf('%') > -1) {\n this._thrPx = 0;\n this._thrPc = (parseFloat(this.infiniteScrollDistance) / 100);\n } else {\n this._thrPx = parseFloat(this.infiniteScrollDistance);\n this._thrPc = 0;\n }\n }\n\n registerScrollListener(): void {\n this._cdkVirtualScrollViewport.elementScrolled\n\n fromEvent(this._panel, 'scroll').pipe(\n takeUntil(this._destroyed$),\n debounceTime(this.infiniteScrollThrottle),\n tap((event: Event): void => this.handleScrollEvent(event))\n ).subscribe();\n }\n\n handleScrollEvent(event: any): void {\n this._ngZone.runOutsideAngular((): void => {\n if (this.infiniteScrollcomplete) {\n return;\n }\n const countOfRenderedOptions: number = this._cdkVirtualScrollViewport.getDataLength();\n const infiniteScrollDistance: number = this.infiniteScrollOptionHeight * countOfRenderedOptions;\n const threshold: number = this._thrPc !== 0 ? (infiniteScrollDistance * this._thrPc) : this._thrPx;\n const scrolledDistance: number = this._panel.clientHeight + event.target.scrollTop;\n\n if ((scrolledDistance + threshold) >= infiniteScrollDistance) {\n this._ngZone.run((): void => this.scrolled.emit());\n }\n });\n }\n\n}\n","import { Injectable, NgZone, OnDestroy, Renderer2, RendererFactory2 } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { auditTime, finalize } from 'rxjs/operators';\n\nconst NOOP: () => void = (): void => { };\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GIPIResizeService implements OnDestroy {\n\n private readonly resizeSource$: Subject<void> = new Subject<void>();\n\n private listeners: number = 0;\n\n private renderer: Renderer2;\n\n private disposeHandle: () => void = NOOP;\n\n private handler: () => void = (): void => {\n this.ngZone.run(() => {\n this.resizeSource$.next();\n });\n }\n\n constructor(\n private ngZone: NgZone,\n private rendererFactory2: RendererFactory2\n ) {\n this.renderer = this.rendererFactory2.createRenderer(null, null);\n }\n\n ngOnDestroy(): void {\n // Caretaker note: the `handler` is an instance property (it's not defined on the class prototype).\n // The `handler` captures `this` and prevents the `GIPIResizeService` from being GC'd.\n this.handler = NOOP;\n }\n\n subscribe(): Observable<void> {\n this.registerListener();\n\n return this.resizeSource$.pipe(\n auditTime(16),\n finalize(() => this.unregisterListener())\n );\n }\n\n unsubscribe(): void {\n this.unregisterListener();\n }\n\n private registerListener(): void {\n if (this.listeners === 0) {\n this.ngZone.runOutsideAngular(() => {\n this.disposeHandle = this.renderer.listen('window', 'resize', this.handler);\n });\n }\n\n this.listeners += 1;\n }\n\n private unregisterListener(): void {\n this.listeners -= 1;\n\n if (this.listeners === 0) {\n this.disposeHandle();\n this.disposeHandle = NOOP;\n }\n }\n}\n\n","import { MediaMatcher } from '@angular/cdk/layout';\nimport { Platform } from '@angular/cdk/platform';\nimport { AfterViewInit, Directive, ElementRef, Input, NgZone, OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { GIPIIndexableObject } from '../../../core/types/ng-class.type';\nimport { GridBreakpointKey, GIPIBreakpointService, gridResponsiveMap } from './services/breakpoint.service';\n\nexport type GIPIJustify = 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly';\nexport type GIPIAlign = 'top' | 'middle' | 'bottom';\n\n@Directive({\n selector: '[gipi-row],gipi-row,GIPIRow',\n exportAs: 'gipiRow',\n host: {\n class: 'grid-row',\n '[class.grid-row-top]': `GIPIAlign === 'top'`,\n '[class.grid-row-middle]': `GIPIAlign === 'middle'`,\n '[class.grid-row-bottom]': `GIPIAlign === 'bottom'`,\n '[class.grid-row-start]': `GIPIJustify === 'start'`,\n '[class.grid-row-end]': `GIPIJustify === 'end'`,\n '[class.grid-row-center]': `GIPIJustify === 'center'`,\n '[class.grid-row-space-around]': `GIPIJustify === 'space-around'`,\n '[class.grid-row-space-between]': `GIPIJustify === 'space-between'`,\n '[class.grid-row-space-evenly]': `GIPIJustify === 'space-evenly'`\n }\n})\nexport class GIPIRowDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n private readonly _destroy$: Subject<unknown> = new Subject();\n\n readonly actualGap$: ReplaySubject<[number, number]> = new ReplaySubject<[number | null, number | null]>(1);\n\n @Input() GIPIAlign: GIPIAlign | null = null;\n\n @Input() GIPIJustify: GIPIJustify | null = null;\n\n @Input() GIPIGap: string | number | GIPIIndexableObject | [number, number] | [GIPIIndexableObject, GIPIIndexableObject] | null = null;\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public mediaMatcher: MediaMatcher,\n public ngZone: NgZone,\n public platform: Platform,\n private _breakpointService: GIPIBreakpointService,\n ) { }\n\n ngOnInit(): void {\n this._setGapStyle();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.GIPIGap) {\n this._setGapStyle();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.platform.isBrowser) {\n this._breakpointService\n .subscribe(gridResponsiveMap)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._setGapStyle();\n });\n }\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n private _setGapStyle(): void {\n let [horizontalGap, verticalGap] = this._getGap();\n if (horizontalGap === null && verticalGap !== null) {\n horizontalGap = 0;\n }\n if (verticalGap === null) {\n verticalGap = 0;\n }\n\n this.actualGap$.next([horizontalGap, verticalGap]);\n\n const nativeElement: ElementRef = this.elementRef.nativeElement;\n if (horizontalGap !== null && verticalGap !== null) {\n this.renderer.setStyle(nativeElement, 'gap', `${verticalGap}px ${horizontalGap}px`);\n }\n }\n\n private _getGap(): [number | null, number | null] {\n const results: [number | null, number | null] = [null, null];\n const gap: string | number | GIPIIndexableObject = this.GIPIGap || 0;\n const normalizedGap: any[] = Array.isArray(gap) ? gap : [gap, null];\n\n normalizedGap.forEach((g, index) => {\n if (typeof g === 'object' && g !== null) {\n results[index] = null;\n\n Object.keys(gridResponsiveMap).map((screen: string) => {\n const bp = screen as GridBreakpointKey;\n if (this.mediaMatcher.matchMedia(gridResponsiveMap[bp]).matches && g[bp]) {\n results[index] = g![bp] as number;\n }\n });\n } else {\n results[index] = Number(g) || null;\n }\n });\n return results;\n }\n\n}\n","import { AfterViewInit, Directive, ElementRef, Host, Input, OnChanges, OnDestroy, OnInit, Optional, Renderer2, SimpleChanges } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { GIPIClassInterface } from '../../../core/types/ng-class.type';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { GIPIRowDirective } from './row.directive';\n\nexport interface EmbeddedProperty {\n span?: number;\n pull?: number;\n push?: number;\n offset?: number;\n order?: number;\n}\n\n@Directive({\n selector: '[gipi-col],gipi-col,GIPICol',\n exportAs: 'gipiCol',\n host: {\n 'class': 'grid-col',\n '[style.flex]': 'hostFlexStyle'\n }\n})\nexport class GIPIColDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n private _classMap: { [key: string]: boolean } = {};\n\n private _destroy$: Subject<unknown> = new Subject();\n\n hostFlexStyle: string | null = null;\n\n @Input() GIPIFlex: string | number | null = null;\n\n @Input() GIPISpan: string | number | null = null;\n\n @Input() GIPIOrder: string | number | null = null;\n\n @Input() GIPIOffset: string | number | null = null;\n\n @Input() GIPIPush: string | number | null = null;\n\n @Input() GIPIPull: string | number | null = null;\n\n @Input() GIPIXs: string | number | EmbeddedProperty | null = null;\n\n @Input() GIPISm: string | number | EmbeddedProperty | null = null;\n\n @Input() GIPIMd: string | number | EmbeddedProperty | null = null;\n\n @Input() GIPILg: string | number | EmbeddedProperty | null = null;\n\n @Input() GIPIXl: string | number | EmbeddedProperty | null = null;\n\n @Input() GIPIXXl: string | number | EmbeddedProperty | null = null;\n\n constructor(\n private elementRef: ElementRef,\n @Optional() @Host() public GIPIRowDirective: GIPIRowDirective,\n public renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n this._setHostClassMap();\n this._setHostFlexStyle();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this._setHostClassMap();\n\n const { GIPIFlex } = changes;\n if (GIPIFlex) {\n this._setHostFlexStyle();\n }\n }\n\n ngAfterViewInit(): void { }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n private _setHostClassMap(): void {\n const hostClassMap = {\n ['grid-col']: true,\n [`grid-col-${this.GIPISpan}`]: ObjectUtil.isNotNil(this.GIPISpan),\n [`grid-col-order-${this.GIPIOrder}`]: ObjectUtil.isNotNil(this.GIPIOrder),\n [`grid-col-offset-${this.GIPIOffset}`]: ObjectUtil.isNotNil(this.GIPIOffset),\n [`grid-col-pull-${this.GIPIPull}`]: ObjectUtil.isNotNil(this.GIPIPull),\n [`grid-col-push-${this.GIPIPush}`]: ObjectUtil.isNotNil(this.GIPIPush),\n ...this._generateClass()\n };\n\n for (const i in this._classMap) {\n if (this._classMap.hasOwnProperty(i)) {\n this.renderer.removeClass(this.elementRef.nativeElement, i);\n }\n }\n\n this._classMap = { ...hostClassMap };\n for (const i in this._classMap) {\n if (this._classMap.hasOwnProperty(i) && this._classMap[i]) {\n this.renderer.addClass(this.elementRef.nativeElement, i);\n }\n }\n }\n\n private _setHostFlexStyle(): void {\n this.hostFlexStyle = this._parseFlex(this.GIPIFlex);\n }\n\n private _parseFlex(flex: number | string | null): string | null {\n if (typeof flex === 'number') {\n return `${flex} ${flex} auto`;\n } else if (typeof flex === 'string') {\n if (/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(flex)) {\n return `0 0 ${flex}`;\n }\n }\n return flex;\n }\n\n private _generateClass(): object {\n const listOfSizeInputName: Array<keyof GIPIColDirective> = ['GIPIXs', 'GIPISm', 'GIPIMd', 'GIPILg', 'GIPIXl', 'GIPIXXl'];\n const listClassMap: GIPIClassInterface = {};\n\n listOfSizeInputName.forEach(name => {\n const sizeName: string = name.replace('GIPI', '').toLowerCase();\n\n if (ObjectUtil.isNotNil(this[name])) {\n if (typeof this[name] === 'number' || typeof this[name] === 'string') {\n listClassMap[`grid-col-${sizeName}-${this[name]}`] = true;\n } else {\n const embedded = this[name] as EmbeddedProperty;\n const prefixArray: Array<keyof EmbeddedProperty> = ['span', 'pull', 'push', 'offset', 'order'];\n\n prefixArray.forEach(prefix => {\n const prefixClass: string = prefix === 'span' ? '-' : `-${prefix}-`;\n listClassMap[`grid-col-${sizeName}${prefixClass}${embedded[prefix]}`] = embedded && ObjectUtil.isNotNil(embedded[prefix]);\n });\n }\n }\n });\n return listClassMap;\n }\n\n}\n","import { EventEmitter } from '@angular/core';\nimport { PaginationInstance } from './pagination-instance';\n\nexport class GIPIPaginationService {\n\n private _instances: { [id: string]: PaginationInstance } = {};\n private _DEFAULT_ID = 'DEFAULT_PAGINATION_ID';\n\n public change: EventEmitter<string> = new EventEmitter<string>();\n\n constructor() { }\n\n public defaultId(): string {\n return this._DEFAULT_ID;\n }\n\n /**\n * Registre uma PaginationInstance com este serviço. Retorna um\n * valor booleano significando se a instância é nova ou atualizada.\n * (true = new or updated, false = unchanged).\n */\n public register(instance: PaginationInstance): boolean {\n if (instance.id == null) {\n instance.id = this._DEFAULT_ID;\n }\n\n if (!this._instances[instance.id]) {\n this._instances[instance.id] = instance;\n return true;\n } else {\n return this.updateInstance(instance);\n }\n }\n\n /**\n * Verifique cada propriedade da instância e atualize as que foram alteradas. Retornar\n * true se alguma alteração foi feita, senão retorna false.\n */\n private updateInstance(instance: PaginationInstance): boolean {\n let changed = false;\n for (let prop in this._instances[instance.id]) {\n if (instance[prop] !== this._instances[instance.id][prop]) {\n this._instances[instance.id][prop] = instance[prop];\n changed = true;\n }\n }\n return changed;\n }\n\n /**\n * Retorna o número da página atual.\n */\n public getCurrentPage(id: string): number {\n if (this._instances[id]) {\n return this._instances[id].currentPage;\n }\n return 1;\n }\n\n /**\n * Define o número da página atual.\n */\n public setCurrentPage(id: string, page: number) {\n if (this._instances[id]) {\n let instance = this._instances[id];\n let maxPage = Math.ceil(instance.totalItems / instance.itemsPerPage);\n\n if (page <= maxPage && 1 <= page) {\n this._instances[id].currentPage = page;\n this.change.emit(id);\n }\n }\n }\n\n /**\n * Define o valor de instance.totalItems\n */\n public setTotalItems(id: string, totalItems: number) {\n if (this._instances[id] && 0 <= totalItems) {\n this._instances[id].totalItems = totalItems;\n this.change.emit(id);\n }\n }\n\n /**\n * Define o valor de instance.itemsPerPage\n */\n public setItemsPerPage(id: string, itemsPerPage: number) {\n if (this._instances[id]) {\n this._instances[id].itemsPerPage = itemsPerPage;\n this.change.emit(id);\n }\n }\n\n /**\n * Retorna um clone do objeto de instância de paginação correspondente ao id. Se não tiver\n * id especificado, retorna a instância correspondente ao id padrão.\n */\n public getInstance(id: string = this._DEFAULT_ID): PaginationInstance {\n if (this._instances[id]) {\n return this.clone(this._instances[id]);\n }\n return {} as PaginationInstance;\n }\n\n /**\n * Execute um clone raso de um objeto.\n */\n private clone(obj: any): any {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n}\n","import { ChangeDetectorRef, Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { PaginationInstance } from './pagination-instance';\nimport { GIPIPaginationService } from './pagination.service';\n\nexport interface Page {\n label: string;\n value: any;\n}\n\n/**\n * Esta diretiva é o que alimenta todos os componentes de controle de paginação, incluindo o padrão.\n * Ele expõe uma API conectada ao GIPIPaginationService para manter o PaginatePipe sincronizado\n * com os controles de paginação.\n */\n@Directive({\n selector: 'pagination-template,[pagination-template]',\n exportAs: 'paginationApi'\n})\nexport class GIPIPaginationControlsDirective {\n\n private changeSub: Subscription;\n\n pages: Page[] = [];\n\n @Input() id: string;\n\n @Input() maxSize: number = 5;\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n @Output() pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n\n constructor(\n private _service: GIPIPaginationService,\n private _changeDetectorRef: ChangeDetectorRef,\n ) {\n this.changeSub = this._service.change.subscribe(id => {\n if (this.id === id) {\n this.updatePageLinks();\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n }\n });\n }\n\n ngOnInit() {\n if (this.id === undefined) {\n this.id = this._service.defaultId();\n }\n\n this.updatePageLinks();\n }\n\n ngOnChanges(changes: any) {\n this.updatePageLinks();\n }\n\n ngOnDestroy() {\n this.changeSub.unsubscribe();\n }\n\n /**\n * Ir para a página anterior\n */\n previous() {\n this.checkValidId();\n this.setCurrent(this.getCurrent() - 1);\n }\n\n /**\n * Vá para a página seguinte\n */\n next() {\n this.checkValidId();\n this.setCurrent(this.getCurrent() + 1);\n }\n\n /**\n * Retorna true se a página atual for a primeira página\n */\n isFirstPage(): boolean {\n return this.getCurrent() === 1;\n }\n\n /**\n * Retorna true se a página atual for a última página\n */\n isLastPage(): boolean {\n return this.getLastPage() === this.getCurrent();\n }\n\n /**\n * Defina o número da página atual\n */\n setCurrent(page: number) {\n this.pageChange.emit(page);\n }\n\n /**\n * Obtenha o número da página atual\n */\n getCurrent(): number {\n return this._service.getCurrentPage(this.id);\n }\n\n /**\n * Retorna o número da última página\n */\n getLastPage(): number {\n let inst = this._service.getInstance(this.id);\n if (inst.totalItems < 1) {\n // quando há 0 ou menos itens (um caso de erro), não há \"páginas\" como tal,\n // mas faz sentido considerar uma única página vazia como a última página.\n return 1;\n }\n return Math.ceil(inst.totalItems / inst.itemsPerPage);\n }\n\n /**\n * Retorna a quantidade total de páginas\n */\n getTotalItems(): number {\n return this._service.getInstance(this.id).totalItems;\n }\n\n /**\n * Verifica se o id da PaginationInstance é válido\n */\n private checkValidId() {\n if (this._service.getInstance(this.id).id == null) {\n console.warn(`PaginationControlsDirective: O id especificado \"${this.id}\" não corresponde a nenhuma PaginationInstance registrada`);\n }\n }\n\n /**\n * Atualiza os links da página e verifica se a página atual é válida. Deve ser executado sempre que o\n * PaginationService.change stream emite um valor correspondente ao ID atual ou quando qualquer um das\n * mudanças nos valores de entrada.\n */\n private updatePageLinks() {\n let inst = this._service.getInstance(this.id);\n const correctedCurrentPage = this.outOfBoundCorrection(inst);\n\n if (correctedCurrentPage !== inst.currentPage) {\n setTimeout(() => {\n this.pageBoundsCorrection.emit(correctedCurrentPage);\n this.pages = this.createPageArray(inst.currentPage, inst.itemsPerPage, inst.totalItems, this.maxSize);\n });\n } else {\n this.pages = this.createPageArray(inst.currentPage, inst.itemsPerPage, inst.totalItems, this.maxSize);\n }\n }\n\n /**\n * Verifica se a propriedade instance.currentPage está dentro dos limites do intervalo de páginas atual.\n * Caso contrário, retorne um valor correto para currentPage ou o valor atual se OK.\n */\n private outOfBoundCorrection(instance: PaginationInstance): number {\n const totalPages = Math.ceil(instance.totalItems / instance.itemsPerPage);\n if (totalPages < instance.currentPage && 0 < totalPages) {\n return totalPages;\n } else if (instance.currentPage < 1) {\n return 1;\n }\n\n return instance.currentPage;\n }\n\n /**\n * Retorna uma matriz de objetos Page para usar nos controles de paginação.\n */\n private createPageArray(currentPage: number, itemsPerPage: number, totalItems: number, paginationRange: number): Page[] {\n // paginationRange pode ser uma string se for passada de atributo, então converta para number.\n paginationRange = +paginationRange;\n let pages = [];\n\n // Retorne 1 como número de página padrão\n // Faz sentido mostrar 1 em vez de vazio quando não há itens\n const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n const halfWay = Math.ceil(paginationRange / 2);\n\n const isStart = currentPage <= halfWay;\n const isEnd = totalPages - halfWay < currentPage;\n const isMiddle = !isStart && !isEnd;\n\n let ellipsesNeeded = paginationRange < totalPages;\n let i = 1;\n\n while (i <= totalPages && i <= paginationRange) {\n let label: string;\n let pageNumber = this.calculatePageNumber(i, currentPage, paginationRange, totalPages);\n let openingEllipsesNeeded = (i === 2 && (isMiddle || isEnd));\n let closingEllipsesNeeded = (i === paginationRange - 1 && (isMiddle || isStart));\n if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {\n label = '...';\n } else {\n label = String(pageNumber);\n }\n pages.push({\n label: label,\n value: pageNumber\n });\n i++;\n }\n return pages;\n }\n\n /**\n * Dada a posição na sequência de links de paginação [i],\n * descubra qual número de página corresponde a essa posição.\n */\n private calculatePageNumber(i: number, currentPage: number, paginationRange: number, totalPages: number) {\n let halfWay = Math.ceil(paginationRange / 2);\n if (i === paginationRange) {\n return totalPages;\n } else if (i === 1) {\n return i;\n } else if (paginationRange < totalPages) {\n if (totalPages - halfWay < currentPage) {\n return totalPages - paginationRange + i;\n } else if (halfWay < currentPage) {\n return currentPage - halfWay + i;\n } else {\n return i;\n }\n } else {\n return i;\n }\n }\n\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[GIPItemplate]',\n exportAs: 'GIPITemplate',\n host: {\n 'class': 'gipi-template',\n }\n})\nexport class GIPITemplateDirective {\n\n @Input() type: string;\n\n @Input('gipi-template') name: string;\n\n constructor(public template: TemplateRef<any>) { }\n\n getType(): string {\n return this.name;\n }\n\n}\n","import { Pipe } from \"@angular/core\";\nimport { PaginationInstance } from './pagination-instance';\nimport { GIPIPaginationService } from \"./pagination.service\";\n\nconst LARGE_NUMBER = Number.MAX_SAFE_INTEGER;\n\nexport type Collection<T> = T[] | ReadonlyArray<T>;\n\nexport interface PaginatePipeArgs {\n id?: string;\n itemsPerPage?: string | number;\n currentPage?: string | number;\n totalItems?: string | number;\n}\n\nexport interface PipeState {\n collection: ArrayLike<any>;\n size: number;\n start: number;\n end: number;\n slice: ArrayLike<any>;\n}\n\n@Pipe({\n name: 'paginate',\n pure: false\n})\nexport class GIPIPaginatePipe {\n\n // Armazenar os valores da última vez que o pipe foi invocado\n private _state: { [id: string]: PipeState } = {};\n\n constructor(private _service: GIPIPaginationService) { }\n\n public transform<T, U extends Collection<T>>(collection: U, args: PaginatePipeArgs): U {\n\n // Quando um observável é passado pelo AsyncPipe, ele produzirá\n // `null` até que a assinatura seja resolvida. Neste caso, queremos\n // usar os dados em cache do objeto `_state` para evitar que o NgFor\n // pisque vazio até que os valores reais cheguem.\n if (!(collection instanceof Array)) {\n let _id = args.id || this._service.defaultId();\n if (this._state[_id]) {\n return this._state[_id].slice as U;\n } else {\n return collection;\n }\n }\n\n let serverSideMode: boolean = args.totalItems && args.totalItems !== collection.length;\n let instance: PaginationInstance = this.createInstance(collection, args);\n let id: string = instance.id;\n let start: number;\n let end: number;\n let perPage: number = instance.itemsPerPage;\n\n let emitChange: boolean = this._service.register(instance);\n\n if (!serverSideMode && collection instanceof Array) {\n perPage = +perPage || LARGE_NUMBER;\n start = (instance.currentPage - 1) * perPage;\n end = start + perPage;\n\n let isIdentical = this.stateIsIdentical(id, collection, start, end);\n if (isIdentical) {\n return this._state[id].slice as U;\n } else {\n let slice = collection.slice(start, end);\n this.saveState(id, collection, slice, start, end);\n this._service.change.emit(id);\n return slice as U;\n }\n } else {\n if (emitChange) {\n this._service.change.emit(id);\n }\n\n // salve o estado para coleta do lado do servidor para evitar nulo\n // pisca à medida que novos dados são carregados.\n this.saveState(id, collection, collection, start, end);\n\n return collection;\n }\n }\n\n /**\n * Crie um objeto PaginationInstance, usando padrões para quaisquer propriedades opcionais não fornecidas.\n */\n private createInstance(collection: readonly any[], config: PaginatePipeArgs): PaginationInstance {\n this.checkConfig(config);\n\n return {\n id: config.id != null ? config.id : this._service.defaultId(),\n itemsPerPage: +config.itemsPerPage || 0,\n currentPage: +config.currentPage || 1,\n totalItems: +config.totalItems || collection.length\n };\n }\n\n /**\n * Assegure-se de que o argumento passado para o filtro contenha as propriedades necessárias.\n */\n private checkConfig(config: PaginatePipeArgs): void {\n const required = ['itemsPerPage', 'currentPage'];\n\n const missing = required.filter(prop => !(prop in config));\n if (0 < missing.length) {\n throw new Error(`PaginatePipe: Argumento está faltando as seguintes propriedades necessárias: ${missing.join(', ')}`);\n }\n }\n\n /**\n * Para evitar o retorno de um novo array toda vez que o pipe é executado, armazenamos o estado do sliced\n * array para um determinado id. Isso significa que na próxima vez que o canal for executado nesta coleção e id, apenas\n * precisa verificar se a coleta, os pontos inicial e final são todos idênticos e, em caso afirmativo, retornar o\n * último array fatiado.\n */\n private saveState(id: string, collection: ArrayLike<any>, slice: ArrayLike<any>, start: number, end: number) {\n this._state[id] = {\n collection,\n size: collection.length,\n slice,\n start,\n end\n };\n }\n\n /**\n * Para um determinado id, retorna true se os valores de coleção, tamanho, início e fim forem idênticos.\n */\n private stateIsIdentical(id: string, collection: ArrayLike<any>, start: number, end: number): boolean {\n let state = this._state[id];\n if (!state) {\n return false;\n }\n let isMetaDataIdentical = state.size === collection.length &&\n state.start === start &&\n state.end === end;\n\n if (!isMetaDataIdentical) {\n return false;\n }\n\n return (state.slice as Array<any>).every((element, index) => element === collection[start + index]);\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-action-row`,\n exportAs: 'gipiActionRow',\n templateUrl: './action-row.component.html',\n styleUrls: ['./action-row.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIActionRowComponent => GIPIActionRowComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-action-row',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIActionRowComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","import { ChangeDetectionStrategy, Component, ContentChildren, HostBinding, Input, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { GIPIActionRowComponent } from '../action-row/action-row.component';\n\n@Component({\n selector: `gipi-abstract-form`,\n exportAs: 'gipiAbstractForm',\n templateUrl: './abstract-form.component.html',\n styleUrls: ['./abstract-form.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIAbstractFormComponent => GIPIAbstractFormComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-abstract-form',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIAbstractFormComponent implements OnInit {\n\n @HostBinding('attr.id') attrId: string;\n\n @HostBinding('attr.name') attrName: string;\n\n @HostBinding('style.margin')\n get attrMargin() {\n return this.dialog ? '0' : '0 auto';\n }\n\n @ContentChildren(GIPIActionRowComponent) GIPIActionRowComponent: GIPIActionRowComponent;\n\n @Input() set id(value: string) {\n if (!value) {\n this.attrId = value;\n }\n }\n\n @Input() set name(value: string) {\n if (value) {\n this.attrName = value;\n }\n }\n\n @Input() flexDirection: 'row' | 'column' = 'column';\n\n @Input() gap: string | number = 32;\n\n @Input() alignItems: 'start' | 'center' | 'end' | 'flex-start' | 'flex-end' | 'stretch' = 'stretch';\n\n @Input() justifyContent: 'start' | 'center' | 'end' | 'flex-start' | 'flex-end' | 'space-around' | 'space-between' | 'space-evenly' | 'stretch' = 'flex-start';\n\n @Input() padding: string | number = 16;\n\n @Input() dialog: boolean = false;\n\n @Input() loading: boolean = false;\n\n get getPadding(): string {\n if (typeof this.padding === 'string' && this.padding.includes('px')) {\n return this.padding;\n }\n\n return this.padding + 'px';\n }\n\n get getGap(): string {\n if (typeof this.gap === 'string' && this.gap.includes('px')) {\n return this.gap;\n }\n\n return this.gap + 'px';\n }\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'gipi-badge',\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GIPIBadgeComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-badge',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIBadgeComponent implements OnInit {\n\n @Input() label: string;\n\n @Input() color = 'primary';\n\n @Input() textColor = '#ffffff';\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","/**\n * @dynamic é para inicializar DomHandler.browser em tempo de execução\n *\n * Se excluir o comentário abaixo, podemos ver esta mensagem de erro:\n * Os metadados coletados contêm um erro que será reportado em tempo de execução:\n * Somente variáveis e constantes inicializadas podem ser referenciadas\n * porque o valor dessa variável é necessário para o compilador de modelo.\n */\n\n\n/** @dynamic */\nexport class GIPIDomHandler {\n\n public static zIndex: number = 1000;\n\n private static calculatedScrollbarWidth: number = null;\n\n private static calculatedScrollbarHeight: number = null;\n\n private static browser: any;\n\n public static addClass(element: any, className: string): void {\n if (element && className) {\n if (element.classList) { element.classList.add(className); } else { element.className += ' ' + className; }\n }\n }\n\n public static addMultipleClasses(element: any, className: string): void {\n if (element && className) {\n if (element.classList) {\n const styles: string[] = className.trim().split(' ');\n for (let i: number = 0; i < styles.length; i++) {\n element.classList.add(styles[i]);\n }\n } else {\n const styles: string[] = className.split(' ');\n for (let i: number = 0; i < styles.length; i++) {\n element.className += ' ' + styles[i];\n }\n }\n }\n }\n\n public static removeClass(element: any, className: string): void {\n if (element && className) {\n if (element.classList) { element.classList.remove(className); } else { element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' '); }\n }\n }\n\n public static hasClass(element: any, className: string): boolean {\n if (element && className) {\n if (element.classList) { return element.classList.contains(className); } else { return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className); }\n }\n\n return false;\n }\n\n public static siblings(element: any): any {\n return Array.prototype.filter.call(element.parentNode.children, function (child) {\n return child !== element;\n });\n }\n\n public static find(element: any, selector: string): any[] {\n return Array.from(element.querySelectorAll(selector));\n }\n\n public static findSingle(element: any, selector: string): any {\n if (element) {\n return element.querySelector(selector);\n }\n return null;\n }\n\n public static index(element: any): number {\n const children: any = element.parentNode.childNodes;\n let num: number = 0;\n for (let i: number = 0; i < children.length; i++) {\n if (children[i] == element) { return num; }\n if (children[i].nodeType == 1) { num++; }\n }\n return -1;\n }\n\n public static indexWithinGroup(element: any, attributeName: string): number {\n const children: any = element.parentNode ? element.parentNode.childNodes : [];\n let num: number = 0;\n for (let i: number = 0; i < children.length; i++) {\n if (children[i] == element) { return num; }\n if (children[i].attributes && children[i].attributes[attributeName] && children[i].nodeType == 1) { num++; }\n }\n return -1;\n }\n\n public static appendOverlay(overlay: any, target: any, appendTo: any = 'self'): void {\n if (appendTo !== 'self' && overlay && target) {\n this.appendChild(overlay, target);\n }\n }\n\n public static alignOverlay(overlay: any, target: any, appendTo: any = 'self', calculateMinWidth: boolean = true): void {\n if (overlay && target) {\n calculateMinWidth && (overlay.style.minWidth || (overlay.style.minWidth = GIPIDomHandler.getOuterWidth(target) + 'px'));\n\n if (appendTo === 'self') {\n this.relativePosition(overlay, target);\n } else {\n this.absolutePosition(overlay, target);\n }\n }\n }\n\n public static relativePosition(element: any, target: any): void {\n const getClosestRelativeElement: (el: any) => any = (el: any): any => {\n if (!el) {\n return;\n }\n return (getComputedStyle(el).getPropertyValue('position') === 'relative')\n ? el\n : getClosestRelativeElement(el.parentElement);\n };\n\n const elementDimensions: any = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n const targetHeight: any = target.offsetHeight;\n const targetOffset: any = target.getBoundingClientRect();\n const windowScrollTop: number = this.getWindowScrollTop();\n const windowScrollLeft: number = this.getWindowScrollLeft();\n const viewport: { width: number; height: number; } = this.getViewport();\n const relativeElement: any = getClosestRelativeElement(element);\n const relativeElementOffset: any = relativeElement?.getBoundingClientRect() || { top: -1 * windowScrollTop, left: -1 * windowScrollLeft };\n\n let top: number, left: number;\n\n if (targetOffset.top + targetHeight + elementDimensions.height > viewport.height) {\n top = targetOffset.top - relativeElementOffset.top - elementDimensions.height;\n element.style.transformOrigin = 'bottom';\n if (targetOffset.top + top < 0) {\n top = -1 * targetOffset.top;\n }\n } else {\n top = targetHeight + targetOffset.top - relativeElementOffset.top;\n element.style.transformOrigin = 'top';\n }\n\n if (elementDimensions.width > viewport.width) {\n // element wider then viewport and cannot fit on screen (align at left side of viewport)\n left = (targetOffset.left - relativeElementOffset.left) * -1;\n } else if (targetOffset.left - relativeElementOffset.left + elementDimensions.width > viewport.width) {\n // element wider then viewport but can be fit on screen (align at right side of viewport)\n left = (targetOffset.left - relativeElementOffset.left + elementDimensions.width - viewport.width) * -1;\n } else {\n // element fits on screen (align with target)\n left = targetOffset.left - relativeElementOffset.left;\n }\n\n element.style.top = top + 'px';\n element.style.left = left + 'px';\n }\n\n public static absolutePosition(element: any, target: any): void {\n const elementDimensions: any = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n const elementOuterHeight: any = elementDimensions.height;\n const elementOuterWidth: any = elementDimensions.width;\n const targetOuterHeight: any = target.offsetHeight;\n const targetOuterWidth: any = target.offsetWidth;\n const targetOffset: any = target.getBoundingClientRect();\n const windowScrollTop: number = this.getWindowScrollTop();\n const windowScrollLeft: number = this.getWindowScrollLeft();\n const viewport: any = this.getViewport();\n let top: number, left: number;\n\n if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {\n top = targetOffset.top + windowScrollTop - elementOuterHeight;\n element.style.transformOrigin = 'bottom';\n\n if (top < 0) {\n top = windowScrollTop;\n }\n } else {\n top = targetOuterHeight + targetOffset.top + windowScrollTop;\n element.style.transformOrigin = 'top';\n }\n\n if (targetOffset.left + elementOuterWidth > viewport.width) { left = Math.max(0, targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth); } else { left = targetOffset.left + windowScrollLeft; }\n\n element.style.top = top + 'px';\n element.style.left = left + 'px';\n }\n\n static getParents(element: any, parents: any = []): any {\n return (element['parentNode'] === null)\n ? parents\n : this.getParents(element.parentNode, parents.concat([element.parentNode]));\n }\n\n static getScrollableParents(element: any): any[] {\n const scrollableParents: any[] = [];\n\n if (element) {\n const parents: any = this.getParents(element);\n const overflowRegex = /(auto|scroll)/;\n\n const overflowCheck: (node: any) => boolean = (node: any): boolean => {\n const styleDeclaration: CSSStyleDeclaration = window['getComputedStyle'](node, null);\n return overflowRegex.test(styleDeclaration.getPropertyValue('overflow')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowX')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowY'));\n };\n\n for (const parent of parents) {\n const scrollSelectors: any = parent.nodeType === 1 && parent.dataset['scrollselectors'];\n if (scrollSelectors) {\n const selectors: any = scrollSelectors.split(',');\n for (const selector of selectors) {\n const el: any = this.findSingle(parent, selector);\n if (el && overflowCheck(el)) {\n scrollableParents.push(el);\n }\n }\n }\n\n if (parent.nodeType !== 9 && overflowCheck(parent)) {\n scrollableParents.push(parent);\n }\n }\n }\n\n return scrollableParents;\n }\n\n public static getHiddenElementOuterHeight(element: any): number {\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n const elementHeight: any = element.offsetHeight;\n element.style.display = 'none';\n element.style.visibility = 'visible';\n\n return elementHeight;\n }\n\n public static getHiddenElementOuterWidth(element: any): number {\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n const elementWidth: any = element.offsetWidth;\n element.style.display = 'none';\n element.style.visibility = 'visible';\n\n return elementWidth;\n }\n\n public static getHiddenElementDimensions(element: any): any {\n const dimensions: any = {};\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n dimensions.width = element.offsetWidth;\n dimensions.height = element.offsetHeight;\n element.style.display = 'none';\n element.style.visibility = 'visible';\n\n return dimensions;\n }\n\n public static scrollInView(container: any, item: any): void {\n const borderTopValue: string = getComputedStyle(container).getPropertyValue('borderTopWidth');\n const borderTop: number = borderTopValue ? parseFloat(borderTopValue) : 0;\n const paddingTopValue: string = getComputedStyle(container).getPropertyValue('paddingTop');\n const paddingTop: number = paddingTopValue ? parseFloat(paddingTopValue) : 0;\n const containerRect: any = container.getBoundingClientRect();\n const itemRect: any = item.getBoundingClientRect();\n const offset: number = itemRect.top + document.body.scrollTop - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\n const scroll: any = container.scrollTop;\n const elementHeight: any = container.clientHeight;\n const itemHeight: any = this.getOuterHeight(item);\n\n if (offset < 0) {\n container.scrollTop = scroll + offset;\n } else if (offset + itemHeight > elementHeight) {\n container.scrollTop = scroll + offset - elementHeight + itemHeight;\n }\n }\n\n public static fadeIn(element: any, duration: number): void {\n element.style.opacity = 0;\n\n let last: number = +new Date();\n let opacity: number = 0;\n const tick: () => void = (): void => {\n opacity = +element.style.opacity.replace(',', '.') + (new Date().getTime() - last) / duration;\n element.style.opacity = opacity;\n last = +new Date();\n if (+opacity < 1) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n }\n };\n\n tick();\n }\n\n public static fadeOut(element: any, ms: number): void {\n let opacity: number = 1;\n const interval: number = 50;\n const duration: number = ms;\n const gap: number = interval / duration;\n\n const fading = setInterval((): void => {\n opacity = opacity - gap;\n\n if (opacity <= 0) {\n opacity = 0;\n clearInterval(fading);\n }\n\n element.style.opacity = opacity;\n }, interval);\n }\n\n public static getWindowScrollTop(): number {\n const doc: HTMLElement = document.documentElement;\n return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n }\n\n public static getWindowScrollLeft(): number {\n const doc: HTMLElement = document.documentElement;\n return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n }\n\n public static matches(element: any, selector: string): boolean {\n const p: Element = Element.prototype;\n const f: any =\n p['matches'] ||\n p.webkitMatchesSelector ||\n p['mozMatchesSelector'] ||\n p['msMatchesSelector'] ||\n function (s: any): boolean {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n return f.call(element, selector);\n }\n\n public static getOuterWidth(el: any, margin?: any): number {\n let width: number = el.offsetWidth;\n if (margin) {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n }\n\n return width;\n }\n\n public static getHorizontalPadding(el: any): number {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n }\n\n public static getHorizontalMargin(el: any): number {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n return parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n }\n\n public static innerWidth(el: any): number {\n let width: number = el.offsetWidth;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n return width;\n }\n\n public static width(el: any): number {\n let width: number = el.offsetWidth;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n return width;\n }\n\n public static getInnerHeight(el: any): number {\n let height: number = el.offsetHeight;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n return height;\n }\n\n public static getOuterHeight(el: any, margin?: any): number {\n let height: number = el.offsetHeight;\n\n if (margin) {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n }\n\n return height;\n }\n\n public static getHeight(el: any): number {\n let height: number = el.offsetHeight;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\n return height;\n }\n\n public static getWidth(el: any): number {\n let width: number = el.offsetWidth;\n const style: CSSStyleDeclaration = getComputedStyle(el);\n\n width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\n\n return width;\n }\n\n public static getViewport(): { width: number; height: number; } {\n const win = window;\n const d: Document = document;\n const e: HTMLElement = d.documentElement;\n const g: HTMLBodyElement = d.getElementsByTagName('body')[0];\n const w: number = win.innerWidth || e.clientWidth || g.clientWidth;\n const h: number = win.innerHeight || e.clientHeight || g.clientHeight;\n\n return { width: w, height: h };\n }\n\n public static getOffset(el: any): { top: any; left: any; } {\n const rect: any = el.getBoundingClientRect();\n\n return {\n top: rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0),\n left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0)\n };\n }\n\n public static replaceElementWith(element: any, replacementElement: any): any {\n const parentNode: any = element.parentNode;\n if (!parentNode) {\n throw new Error(`Can't replace element`);\n }\n return parentNode.replaceChild(replacementElement, element);\n }\n\n public static getUserAgent(): string {\n return navigator.userAgent;\n }\n\n public static isIE(): boolean {\n const ua: string = window.navigator.userAgent;\n\n const msie: number = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return true;\n }\n\n const trident: number = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n const rv: number = ua.indexOf('rv:');\n return true;\n }\n\n const edge: number = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return true;\n }\n\n // other browser\n return false;\n }\n\n public static isIOS(): boolean {\n return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window['MSStream'];\n }\n\n public static isAndroid(): boolean {\n return /(android)/i.test(navigator.userAgent);\n }\n\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n public static appendChild(element: any, target: any): void {\n if (this.isElement(target)) {\n target.appendChild(element);\n } else if (target.el && target.el.nativeElement) {\n target.el.nativeElement.appendChild(element);\n } else {\n throw new Error('Cannot append ' + target + ' to ' + element);\n }\n }\n\n public static removeChild(element: any, target: any): void {\n if (this.isElement(target)) {\n target.removeChild(element);\n } else if (target.el && target.el.nativeElement) {\n target.el.nativeElement.removeChild(element);\n } else {\n throw new Error('Cannot remove ' + element + ' from ' + target);\n }\n }\n\n public static removeElement(element: Element): void {\n if (!('remove' in Element.prototype)) {\n element.parentNode.removeChild(element);\n } else {\n element.remove();\n }\n }\n\n public static isElement(obj: any): boolean {\n return (typeof HTMLElement === 'object')\n ? (obj instanceof HTMLElement)\n : (obj) && (typeof obj === 'object') && (obj !== null) && (obj.nodeType === 1) && (typeof obj.nodeName === 'string');\n }\n\n public static calculateScrollbarWidth(el?: HTMLElement): number {\n if (el) {\n const style: CSSStyleDeclaration = getComputedStyle(el);\n return el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth) - parseFloat(style.borderRightWidth);\n } else {\n if (this.calculatedScrollbarWidth !== null) {\n return this.calculatedScrollbarWidth;\n }\n\n const scrollDiv: HTMLDivElement = document.createElement('div');\n scrollDiv.className = 'p-scrollbar-measure';\n document.body.appendChild(scrollDiv);\n\n const scrollbarWidth: number = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n\n this.calculatedScrollbarWidth = scrollbarWidth;\n\n return scrollbarWidth;\n }\n }\n\n public static calculateScrollbarHeight(): number {\n if (this.calculatedScrollbarHeight !== null) {\n return this.calculatedScrollbarHeight;\n }\n\n const scrollDiv: HTMLDivElement = document.createElement('div');\n scrollDiv.className = 'p-scrollbar-measure';\n document.body.appendChild(scrollDiv);\n\n const scrollbarHeight: number = scrollDiv.offsetHeight - scrollDiv.clientHeight;\n document.body.removeChild(scrollDiv);\n\n this.calculatedScrollbarWidth = scrollbarHeight;\n\n return scrollbarHeight;\n }\n\n public static invokeElementMethod(element: any, methodName: string, args?: any[]): void {\n (element as any)[methodName].apply(element, args);\n }\n\n public static clearSelection(): void {\n if (window.getSelection) {\n if (window.getSelection().empty) {\n window.getSelection().empty();\n } else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {\n window.getSelection().removeAllRanges();\n }\n } else if (document['selection'] && document['selection'].empty) {\n try {\n document['selection'].empty();\n } catch (error) {\n // ignore IE bug\n }\n }\n }\n\n public static getBrowser(): any {\n if (!this.browser) {\n const matched: { browser: string; version: string; } = this.resolveUserAgent();\n this.browser = {};\n\n if (matched.browser) {\n this.browser[matched.browser] = true;\n this.browser['version'] = matched.version;\n }\n\n if (this.browser['chrome']) {\n this.browser['webkit'] = true;\n } else if (this.browser['webkit']) {\n this.browser['safari'] = true;\n }\n }\n\n return this.browser;\n }\n\n public static resolveUserAgent(): { browser: string; version: string; } {\n const ua: string = navigator.userAgent.toLowerCase();\n const match: RegExpExecArray | [] = /(chrome)[ \\/]([\\w.]+)/.exec(ua) || /(webkit)[ \\/]([\\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) || /(msie) ([\\w.]+)/.exec(ua) || (ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua)) || [];\n\n return {\n browser: match[1] || '',\n version: match[2] || '0'\n };\n }\n\n public static isInteger(value: any): boolean {\n if (Number.isInteger) {\n return Number.isInteger(value);\n } else {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n }\n }\n\n public static isHidden(element: HTMLElement): boolean {\n return !element || element.offsetParent === null;\n }\n\n public static isVisible(element: HTMLElement): boolean {\n return element && element.offsetParent != null;\n }\n\n public static isExist(element: HTMLElement): ParentNode {\n return element !== null && typeof element !== 'undefined' && element.nodeName && element.parentNode;\n }\n\n public static focus(element: HTMLElement, options?: FocusOptions): void {\n element && document.activeElement !== element && element.focus(options);\n }\n\n public static getFocusableElements(element: HTMLElement): any[] {\n const focusableElements: any[] = GIPIDomHandler.find(\n element,\n `button:not([tabindex = '-1']):not([disabled]):not([style*='display:none']):not([hidden]),\n [href]:not([tabindex = '-1']):not([disabled]):not([style*='display:none']):not([hidden]),\n input:not([tabindex = '-1']):not([disabled]):not([style*='display:none']):not([hidden]),\n select:not([tabindex = '-1']):not([disabled]):not([style*='display:none']):not([hidden]),\n textarea:not([tabindex = '-1']):not([disabled]):not([style*='display:none']):not([hidden]),\n [tabIndex]:not([tabIndex = '-1']):not([disabled]):not([style*='display:none']):not([hidden]),\n [contenteditable]:not([tabIndex = '-1']):not([disabled]):not([style*='display:none']):not([hidden])`\n );\n\n const visibleFocusableElements: any[] = [];\n for (const focusableElement of focusableElements) {\n if (!!(focusableElement.offsetWidth || focusableElement.offsetHeight || focusableElement.getClientRects().length)) { visibleFocusableElements.push(focusableElement); }\n }\n return visibleFocusableElements;\n }\n\n public static getNextFocusableElement(element: HTMLElement, reverse = false): any {\n const focusableElements: any[] = GIPIDomHandler.getFocusableElements(element);\n let index: number = 0;\n if (focusableElements && focusableElements.length > 0) {\n const focusedIndex: number = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n if (reverse) {\n if (focusedIndex == -1 || focusedIndex === 0) {\n index = focusableElements.length - 1;\n } else {\n index = focusedIndex - 1;\n }\n } else if (focusedIndex != -1 && focusedIndex !== focusableElements.length - 1) {\n index = focusedIndex + 1;\n }\n }\n\n return focusableElements[index];\n }\n\n static generateZIndex(): number {\n this.zIndex = this.zIndex || 999;\n return ++this.zIndex;\n }\n\n public static getSelection(): string {\n if (window.getSelection) {\n return window.getSelection().toString();\n } else if (document.getSelection) {\n return document.getSelection().toString();\n } else if (document['selection']) {\n return document['selection'].createRange().text;\n }\n\n return null;\n }\n\n public static getTargetElement(target: any, el?: HTMLElement) {\n if (!target) {\n return null;\n }\n\n switch (target) {\n case 'document': {\n return document;\n } case 'window': {\n return window;\n } case '@next': {\n return el?.nextElementSibling;\n } case '@prev': {\n return el?.previousElementSibling;\n } case '@parent': {\n return el?.parentElement;\n } case '@grandparent': {\n return el?.parentElement.parentElement;\n } default: {\n const type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function' = typeof target;\n\n if (type === 'string') {\n return document.querySelector(target);\n } else if (type === 'object' && target.hasOwnProperty('nativeElement')) {\n return this.isExist(target.nativeElement) ? target.nativeElement : undefined;\n }\n\n const isFunction: (obj: any) => boolean = (obj: any): boolean => !!(obj && obj.constructor && obj.call && obj.apply);\n const element: any = isFunction(target) ? target() : target;\n\n return (element && element.nodeType === 9) || this.isExist(element) ? element : null;\n }\n }\n }\n}\n","import { isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { FlexibleConnectedPositionStrategy, HorizontalConnectionPos, Overlay, OverlayConfig, OverlayRef, ScrollStrategy, VerticalConnectionPos } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, Optional, Output, ViewContainerRef, } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { ObjectUtil } from '../../../../core/utils/object.util';\nimport { StringUtil } from '../../../../core/utils/string.util';\nimport { GIPIDomHandler } from '../../dom/dom-handler';\nimport { throwPopoverMissingError } from './popover-errors';\nimport { PopoverPanel, Target } from './popover-interfaces';\nimport { PopoverPositionX, PopoverPositionY, PopoverScrollStrategy, PopoverTriggerEvent } from './popover-types';\n\n/**\n * Esta diretiva destina-se a ser usada em conjunto com uma tag gipi-popover.\n * Ele é responsável por alternar a exibição da instância popover fornecida.\n */\n\n@Directive({\n selector: '[popoverTriggerFor]',\n exportAs: 'popoverTrigger'\n})\nexport class GIPIPopoverTrigger implements AfterViewInit, OnDestroy { // tslint:disable-line:directive-class-suffix\n\n @HostBinding('attr.aria-haspopup') ariaHaspopup: boolean = true;\n\n popoverOpened: Subject<void> = new Subject<void>();\n popoverClosed: Subject<void> = new Subject<void>();\n\n private _portal: TemplatePortal<any>;\n private _overlayRef: OverlayRef | null = null;\n private _popoverOpen: boolean = false;\n private _halt: boolean = false;\n private _backdropSubscription: Subscription;\n private _positionSubscription: Subscription;\n private _detachmentsSubscription: Subscription;\n\n private _mouseoverTimer: any;\n\n // tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the popover is opened via the keyboard\n private _openedByMouse: boolean = false;\n\n private _onDestroy: Subject<void> = new Subject<void>();\n\n /** References the popover instance that the trigger is associated with. */\n @Input('popoverTriggerFor') popover: PopoverPanel;\n\n /** References the popover target instance that the trigger is associated with. */\n @Input('popoverTargetAt') targetElement: Target;\n\n /** Position of the popover in the X axis */\n @Input('popoverPositionX') positionX: PopoverPositionX;\n\n /** Position of the popover in the Y axis */\n @Input('popoverPositionY') positionY: PopoverPositionY;\n\n /** Popover trigger event */\n @Input('popoverTriggerOn') triggerEvent: PopoverTriggerEvent;\n\n /** Popover delay */\n @Input('popoverEnterDelay') enterDelay: number;\n\n /** Popover delay */\n @Input('popoverLeaveDelay') leaveDelay: number;\n\n /** Popover overlap trigger */\n @Input('popoverOverlapTrigger') overlapTrigger: boolean;\n\n /** Popover target offset x */\n @Input('popoverOffsetX') targetOffsetX: number;\n\n /** Popover target offset y */\n @Input('popoverOffsetY') targetOffsetY: number;\n\n /** Popover arrow offset x */\n @Input('popoverArrowOffsetX') arrowOffsetX: number;\n\n /** Popover arrow width */\n @Input('popoverArrowWidth') arrowWidth: number;\n\n /** Popover arrow color */\n @Input('popoverArrowColor') arrowColor: string;\n\n /** Popover container close on click */\n @Input('popoverCloseOnClick') closeOnClick: boolean;\n\n /** Popover backdrop close on click */\n @Input('popoverBackdropCloseOnClick') backdropCloseOnClick: boolean = true;\n\n /** Event emitted when the associated popover is opened. */\n @Output() opened: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the associated popover is closed. */\n @Output() closed: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(\n private _overlay: Overlay,\n public _elementRef: ElementRef,\n private _viewContainerRef: ViewContainerRef,\n @Optional() private _dir: Directionality,\n private _changeDetectorRef: ChangeDetectorRef\n ) { }\n\n ngAfterViewInit(): void {\n this._checkPopover();\n this._setCurrentConfig();\n this.popover.close.subscribe(() => this.closePopover());\n }\n\n ngOnDestroy(): void {\n this.destroyPopover();\n }\n\n private _setCurrentConfig(): void {\n if (this.positionX === 'before' || this.positionX === 'after') {\n this.popover.positionX = this.positionX;\n }\n\n if (this.positionY === 'above' || this.positionY === 'below') {\n this.popover.positionY = this.positionY;\n }\n\n if (this.triggerEvent) {\n this.popover.triggerEvent = this.triggerEvent;\n }\n\n if (this.enterDelay) {\n this.popover.enterDelay = this.enterDelay;\n }\n\n if (this.leaveDelay) {\n this.popover.leaveDelay = this.leaveDelay;\n }\n\n if (this.overlapTrigger === true || this.overlapTrigger === false) {\n this.popover.overlapTrigger = this.overlapTrigger;\n }\n\n if (this.targetOffsetX) {\n this.popover.targetOffsetX = this.targetOffsetX;\n }\n\n if (this.targetOffsetY) {\n this.popover.targetOffsetY = this.targetOffsetY;\n }\n\n if (this.arrowOffsetX) {\n this.popover.arrowOffsetX = this.arrowOffsetX;\n }\n\n if (this.arrowWidth) {\n this.popover.arrowWidth = this.arrowWidth;\n }\n\n if (this.arrowColor) {\n this.popover.arrowColor = this.arrowColor;\n }\n\n if (this.closeOnClick === true || this.closeOnClick === false) {\n this.popover.closeOnClick = this.closeOnClick;\n }\n\n this.popover.setCurrentStyles();\n }\n\n /** Whether the popover is open. */\n get popoverOpen(): boolean { return this._popoverOpen; }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.popover.triggerEvent === 'click') {\n this.togglePopover();\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n onMouseEnter(event: MouseEvent): void {\n this._halt = false;\n if (this.popover.triggerEvent === 'hover') {\n this._mouseoverTimer = setTimeout(() => {\n this.openPopover();\n }, this.popover.enterDelay);\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n onMouseLeave(event: MouseEvent): void {\n if (this.popover.triggerEvent === 'hover') {\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n if (this._popoverOpen) {\n setTimeout(() => {\n if (!this.popover.closeDisabled) {\n this.closePopover();\n }\n }, this.popover.leaveDelay);\n } else {\n this._halt = true;\n }\n }\n }\n\n /** Toggles the popover between the open and closed states. */\n togglePopover(): void {\n return this._popoverOpen ? this.closePopover() : this.openPopover();\n }\n\n /** Opens the popover. */\n openPopover(): void {\n if (!this._popoverOpen && !this._halt) {\n this._createOverlay().attach(this._portal);\n\n if (!ObjectUtil.isNull(this._viewContainerRef) && !ObjectUtil.isNull(this._viewContainerRef.element)) {\n const width: number = GIPIDomHandler.getWidth((this._viewContainerRef.element.nativeElement as HTMLElement));\n if (StringUtil.isEmpty(this.popover.popoverWidth) || (this.popover.popoverWidth === 'auto')) {\n this.popover.popoverWidth = `${width}px`;\n }\n }\n\n this._subscribeToBackdrop();\n this._subscribeToDetachments();\n\n this._initPopover();\n }\n }\n\n /** Closes the popover. */\n closePopover(): void {\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._resetPopover();\n }\n }\n\n /** Removes the popover from the DOM. */\n destroyPopover(): void {\n if (this._mouseoverTimer) {\n clearTimeout(this._mouseoverTimer);\n this._mouseoverTimer = null;\n }\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n this._cleanUpSubscriptions();\n }\n\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n /** Focuses the popover trigger. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n /** The text direction of the containing app. */\n get dir(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /**\n * This method ensures that the popover closes when the overlay backdrop is clicked.\n * We do not use first() here because doing so would not catch clicks from within\n * the popover, and it would fail to unsubscribe properly. Instead, we unsubscribe\n * explicitly when the popover is closed or destroyed.\n */\n private _subscribeToBackdrop(): void {\n if (this._overlayRef) {\n /** Only subscribe to backdrop if trigger event is click */\n if (this.triggerEvent === 'click' && this.backdropCloseOnClick === true) {\n this._overlayRef.backdropClick()\n .pipe(\n takeUntil(this.popoverClosed),\n takeUntil(this._onDestroy),\n )\n .subscribe(() => {\n this.popover._emitCloseEvent();\n });\n }\n }\n }\n\n private _subscribeToDetachments(): void {\n if (this._overlayRef) {\n this._overlayRef.detachments()\n .pipe(\n takeUntil(this.popoverClosed),\n takeUntil(this._onDestroy),\n )\n .subscribe(() => {\n this._setPopoverClosed();\n });\n }\n }\n\n /**\n * This method sets the popover state to open and focuses the first item if\n * the popover was opened via the keyboard.\n */\n private _initPopover(): void {\n this._setPopoverOpened();\n }\n\n /**\n * This method resets the popover when it's closed, most importantly restoring\n * focus to the popover trigger if the popover was opened via the keyboard.\n */\n private _resetPopover(): void {\n this._setPopoverClosed();\n\n // Focus only needs to be reset to the host element if the popover was opened\n // by the keyboard and manually shifted to the first popover item.\n if (!this._openedByMouse) {\n this.focus();\n }\n this._openedByMouse = false;\n }\n\n /** set state rather than toggle to support triggers sharing a popover */\n private _setPopoverOpened(): void {\n if (!this._popoverOpen) {\n this._popoverOpen = true;\n\n this.popoverOpened.next();\n this.opened.emit();\n }\n }\n\n /** set state rather than toggle to support triggers sharing a popover */\n private _setPopoverClosed(): void {\n if (this._popoverOpen) {\n this._popoverOpen = false;\n\n this.popoverClosed.next();\n this.closed.emit();\n }\n }\n\n /**\n * This method checks that a valid instance of MdPopover has been passed into\n * mdPopoverTriggerFor. If not, an exception is thrown.\n */\n private _checkPopover(): void {\n if (!this.popover) {\n throwPopoverMissingError();\n }\n }\n\n /**\n * This method creates the overlay from the provided popover's template and saves its\n * OverlayRef so that it can be attached to the DOM when openPopover is called.\n */\n private _createOverlay(): OverlayRef {\n if (!this._overlayRef) {\n this._portal = new TemplatePortal(this.popover.templateRef, this._viewContainerRef);\n const config = this._getOverlayConfig();\n this._subscribeToPositions(config.positionStrategy as FlexibleConnectedPositionStrategy);\n this._overlayRef = this._overlay.create(config);\n }\n\n return this._overlayRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayConfig.\n * @returns OverlayConfig\n */\n private _getOverlayConfig(): OverlayConfig {\n const overlayState = new OverlayConfig();\n overlayState.positionStrategy = this._getPosition();\n\n /** Display overlay backdrop if trigger event is click */\n if (this.triggerEvent === 'click') {\n overlayState.hasBackdrop = true;\n overlayState.backdropClass = 'cdk-overlay-transparent-backdrop';\n }\n\n overlayState.direction = this.dir;\n overlayState.scrollStrategy = this._getOverlayScrollStrategy(this.popover.scrollStrategy);\n\n return overlayState;\n }\n\n /**\n * This method returns the scroll strategy used by the cdk/overlay.\n */\n private _getOverlayScrollStrategy(strategy: PopoverScrollStrategy): ScrollStrategy {\n switch (strategy) {\n case 'noop':\n return this._overlay.scrollStrategies.noop();\n case 'close':\n return this._overlay.scrollStrategies.close();\n case 'block':\n return this._overlay.scrollStrategies.block();\n case 'reposition':\n default:\n return this._overlay.scrollStrategies.reposition();\n }\n }\n\n /**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the popover based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n */\n private _subscribeToPositions(position: FlexibleConnectedPositionStrategy): void {\n this._positionSubscription = position.positionChanges.subscribe(change => {\n const posisionX: PopoverPositionX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n let posisionY: PopoverPositionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n\n if (!this.popover.overlapTrigger) {\n posisionY = posisionY === 'below' ? 'above' : 'below';\n }\n\n // required for ChangeDetectionStrategy.OnPush\n this._changeDetectorRef.markForCheck();\n\n this.popover.zone.run(() => {\n this.popover.positionX = posisionX;\n this.popover.positionY = posisionY;\n this.popover.setCurrentStyles();\n\n this.popover.setPositionClasses(posisionX, posisionY);\n });\n });\n }\n\n /**\n * This method builds the position strategy for the overlay, so the popover is properly connected\n * to the trigger.\n * @returns ConnectedPositionStrategy\n */\n private _getPosition(): FlexibleConnectedPositionStrategy {\n const [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.popover.positionX === 'before' ? ['end', 'start'] : ['start', 'end'];\n\n const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.popover.positionY === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n\n // let originY = overlayY;\n // let fallbackOriginY = overlayFallbackY;\n\n let originY: 'top' | 'bottom' = overlayY;\n let originFallbackY: 'top' | 'bottom' = overlayFallbackY;\n\n const overlayX: 'start' | 'end' = originX;\n const overlayFallbackX: 'start' | 'end' = originFallbackX;\n\n /** Reverse overlayY and fallbackOverlayY when overlapTrigger is false */\n if (!this.popover.overlapTrigger) {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n\n let offsetX: number = 0;\n let offsetY: number = 0;\n\n if (this.popover.targetOffsetX && !isNaN(Number(this.popover.targetOffsetX))) {\n offsetX = Number(this.popover.targetOffsetX);\n }\n\n if (this.popover.targetOffsetY && !isNaN(Number(this.popover.targetOffsetY))) {\n offsetY = Number(this.popover.targetOffsetY);\n }\n\n /**\n * For overriding position element, when popoverTargetAt has a valid element reference.\n * Useful for sticking popover to parent element and offsetting arrow to trigger element.\n * If undefined defaults to the trigger element reference.\n */\n let element: ElementRef<any> = this._elementRef;\n if (typeof this.targetElement !== 'undefined') {\n this.popover.containerPositioning = true;\n element = this.targetElement._elementRef;\n }\n\n return this._overlay.position()\n .flexibleConnectedTo(element)\n .withLockedPosition(true)\n .withPositions([\n {\n originX,\n originY,\n overlayX,\n overlayY,\n offsetY\n },\n {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY\n },\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n }\n ])\n .withDefaultOffsetX(offsetX)\n .withDefaultOffsetY(offsetY);\n }\n\n private _cleanUpSubscriptions(): void {\n if (this._backdropSubscription) {\n this._backdropSubscription.unsubscribe();\n }\n if (this._positionSubscription) {\n this._positionSubscription.unsubscribe();\n }\n if (this._detachmentsSubscription) {\n this._detachmentsSubscription.unsubscribe();\n }\n }\n\n @HostListener('mousedown', ['$event']) _handleMousedown(event: MouseEvent): void {\n if (event && !isFakeMousedownFromScreenReader(event)) {\n this._openedByMouse = true;\n }\n }\n}\n","/**\n * Lança uma exceção para o caso em que o gatilho popover não possui uma instância popover válida\n */\nexport function throwPopoverMissingError() {\n throw Error(`popover-trigger: deve passar em uma instância popover.\n\n Example:\n <gipi-popover #popover=\"popover\"> </gipi-popover>\n <button [popoverTriggerFor]=\"popover\"> </button>`);\n}\n\n/**\n * Lança uma exceção para o caso em que o valor popoverPositionX do popover não é válido.\n * Em outras palavras, não corresponde a 'before' ou 'after'.\n */\nexport function throwPopoverInvalidPositionX() {\n throw Error(`O valor popoverPositionX deve ser 'before' ou after'.\n Example: <gipi-popover popoverPositionX=\"before\" #popover=\"popover\"> </gipi-popover>`);\n}\n\n/**\n * Lança uma exceção para o caso em que o valor popoverPositionY do popover não é válido.\n * Em outras palavras, não corresponde a 'above' ou 'below'.\n */\nexport function throwPopoverInvalidPositionY() {\n throw Error(`O valor popoverPositionY deve ser 'above' ou below'.\n Example: <gipi-popover popoverPositionY=\"above\" #popover=\"popover\"> </gipi-popover>`);\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { GIPIPopoverTrigger } from '../popover/shared/popover-trigger';\n\ntype ButtonIconPosition = 'left' | 'right' | 'top' | 'bottom' | 'center';\n\n@Component({\n selector: `gipi-button[gipi-primary], gipi-button[gipi-primary-icon], gipi-button[gipi-secondary], gipi-button[gipi-secondary-icon],\n gipi-button[gipi-tertiary], gipi-button[gipi-link], gipi-button[gipi-icon], gipi-button[gipi-action]`,\n exportAs: 'gipiButton',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIButtonComponent => GIPIButtonComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-button',\n }\n})\nexport class GIPIButtonComponent implements OnInit, OnDestroy {\n\n readonly isButtonPrimary: boolean = this._hasHostAttributes('gipi-primary');\n readonly isButtonPrimaryIcon: boolean = this._hasHostAttributes('gipi-primary-icon');\n readonly isButtonSecondary: boolean = this._hasHostAttributes('gipi-secondary');\n readonly isButtonSecondaryIcon: boolean = this._hasHostAttributes('gipi-secondary-icon');\n readonly isButtonTertiary: boolean = this._hasHostAttributes('gipi-tertiary');\n readonly isButtonTertiaryIcon: boolean = this._hasHostAttributes('gipi-tertiary-icon');\n readonly isButtonLink: boolean = this._hasHostAttributes('gipi-link');\n readonly isButtonIcon: boolean = this._hasHostAttributes('gipi-icon');\n readonly isButtonAction: boolean = this._hasHostAttributes('gipi-action');\n\n _overlayVisible: boolean = false;\n\n @ViewChild(GIPIPopoverTrigger, { static: false }) popoverTrigger: GIPIPopoverTrigger;\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n @Input() ariaLabel: string = '';\n\n @Input() title: string = '';\n\n @Input() label: string = '';\n\n @Input() buttonClass: string;\n\n @Input() buttonPadding: number | string;\n\n @Input() iconWidth: number | string;\n @Input() iconHeight: number | string;\n\n @Input() icon: string = null;\n\n @Input() svgIcon: string = null;\n\n @Input() iconPos: ButtonIconPosition = 'left';\n\n @Input() disabled: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() notification: boolean = false;\n\n @Input() tooltip: string = '';\n\n @Input() popover: boolean = false;\n\n @Input() overlay: boolean = false;\n\n @Input('forInput') isForInput: boolean = false;\n\n @Output() onShowOverlay: EventEmitter<void> = new EventEmitter<void>();\n @Output() onOpenPopover: EventEmitter<void> = new EventEmitter<void>();\n @Output() onClosePopover: EventEmitter<void> = new EventEmitter<void>();\n @Output('click') onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(true);\n @Output('focus') onFocus: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(true);\n @Output('blur') onBlur: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(true);\n\n constructor(private _elementRef: ElementRef) { }\n\n ngOnInit(): void { }\n\n ngOnDestroy(): void {\n if (this.popoverTrigger) {\n this.popoverTrigger.destroyPopover();\n }\n }\n\n getHostElement(): any {\n return this._elementRef.nativeElement;\n }\n\n private _hasHostAttributes(...attributes: string[]): boolean {\n return attributes.some(attribute => this.getHostElement().hasAttribute(attribute));\n }\n\n toggleOverlay(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this._overlayVisible = !this._overlayVisible;\n }\n }\n\n showPopover(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.popoverTrigger.openPopover();\n }\n }\n\n closePopover(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.popoverTrigger.closePopover();\n }\n }\n\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n if (this.overlay) {\n this.toggleOverlay();\n }\n this.onClick.emit(event);\n event.stopPropagation();\n }\n }\n\n handleFocus(event: MouseEvent): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.onFocus.emit(event);\n event.stopPropagation();\n }\n }\n\n handleBlur(event: MouseEvent): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.onBlur.emit(event);\n event.stopPropagation();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: UIEvent): void {\n if (this.popoverTrigger) {\n this.popoverTrigger.closePopover();\n event.stopPropagation();\n }\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport class RemoveChange<T> {\n chip: T;\n index: number;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-chips`,\n exportAs: 'gipiChips',\n templateUrl: './chips.component.html',\n styleUrls: ['./chips.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIChipsComponent => GIPIChipsComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-chips',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIChipsComponent<T> implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-chips-${nextUniqueId++}`;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string = 'Selecionados';\n\n @Input() labelRemoveAll: string = 'Limpar';\n\n @Input() ariaLabel: string;\n\n @Input() disabled: boolean = false;\n\n @Input() showRemovableAll: boolean = false;\n\n @Input() showRemovable: boolean = false;\n\n @Input() property: string = 'description';\n\n private _value: T[];\n @Input() set value(value: T[]) {\n this._value = value;\n this.onChange(value);\n this.onTouch();\n this._changeDetectorRef.markForCheck();\n }\n get value(): T[] {\n return this._value;\n }\n\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClick: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() removeChange: EventEmitter<RemoveChange<T>> = new EventEmitter<RemoveChange<T>>();\n @Output() removeAllChange: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public elementRef: ElementRef,\n ) { }\n\n ngOnInit() { }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState?(value: boolean): void {\n this.disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n\n public removeChip(chip: T, index: number): void {\n if (!this.disabled && this.showRemovable) {\n this.value.splice(index, 1);\n this._changeDetectorRef.detectChanges();\n this.removeChange.emit({ chip: chip, index: index });\n }\n }\n\n public removeAllChips(): void {\n if (!this.disabled && this.showRemovableAll) {\n this.value = [];\n this._changeDetectorRef.detectChanges();\n this.removeAllChange.emit();\n }\n }\n\n}\n","import { AbstractDTO } from './abstract.dto';\n\nexport class ConfirmationDTO extends AbstractDTO {\n\n title: string;\n\n message: string;\n\n listMessage?: string[];\n\n isWarningScreen?: boolean = false;\n\n width?: string;\n\n accept?: Function;\n\n cancel?: Function;\n\n}\n","import { Component, Inject, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';\n\nimport { AppMessages } from '../../../core/app-messages';\nimport { APP_MESSAGES } from '../../../core/app.messages';\nimport { ConfirmationDTO } from '../../../core/models/dto/confirmation.dto';\n\n@Component({\n selector: `gipi-confirmation-dialog`,\n exportAs: 'gipiConfirmationDialog',\n templateUrl: './confirmation-dialog.component.html',\n styleUrls: ['./confirmation-dialog.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIConfirmationDialogComponent => GIPIConfirmationDialogComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-confirmation-dialog',\n },\n})\nexport class GIPIConfirmationDialogComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<GIPIConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public confirmation: ConfirmationDTO,\n @Inject(APP_MESSAGES) public messages: AppMessages\n ) { }\n\n ngOnInit(): void { }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { GIPIPopoverTrigger } from '../popover/shared/popover-trigger';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-dropdown-menu`,\n exportAs: 'gipiDropdownMenu',\n templateUrl: './dropdown-menu.component.html',\n styleUrls: ['./dropdown-menu.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIDropdownMenuComponent => GIPIDropdownMenuComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-dropdown-menu',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIDropdownMenuComponent implements OnInit, OnDestroy {\n\n private _name: string = `gipi-dropdown-menu-${nextUniqueId++}`;\n\n @ViewChild(GIPIPopoverTrigger, { static: false }) popoverTrigger: GIPIPopoverTrigger;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string = '';\n\n @Input() ariaLabel: string = '';\n\n @Input() placeholder: string = '';\n\n @Input() disabled: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() showTrigger: boolean = true;\n\n private _trigger: number = 0;\n @Input() set trigger(value: number) {\n this._trigger = value;\n }\n get trigger(): number {\n return this._trigger;\n }\n\n @Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClick: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onOpenPopover: EventEmitter<void> = new EventEmitter<void>();\n @Output() onClosePopover: EventEmitter<void> = new EventEmitter<void>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public elementRef: ElementRef,\n ) { }\n\n ngOnInit() { }\n\n ngOnDestroy(): void {\n if (this.popoverTrigger) {\n this.popoverTrigger.destroyPopover();\n }\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.onKeydown.emit(event);\n }\n }\n\n public onInputFocus(event: Event): void {\n if (!this.disabled) {\n this.onFocus.emit(event);\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n }\n }\n\n public onInputClick(event: Event): void {\n if (!this.disabled) {\n this.onClick.emit(event);\n event.stopPropagation();\n }\n }\n\n public togglePopover(): void {\n if (!this.disabled) {\n this.popoverTrigger.togglePopover();\n }\n }\n\n public showPopover(): void {\n if (this.disabled) {\n return;\n } else {\n this.popoverTrigger.openPopover();\n }\n }\n\n public closePopover(): void {\n if (this.disabled) {\n return;\n } else {\n this.popoverTrigger.closePopover();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: UIEvent): void {\n if (this.popoverTrigger) {\n this.popoverTrigger.closePopover();\n }\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-expansion-panel`,\n exportAs: 'gipiExpansionPanel',\n templateUrl: './expansion-panel.component.html',\n styleUrls: ['./expansion-panel.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIExpansionPanelComponent => GIPIExpansionPanelComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-expansion-panel',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIExpansionPanelComponent implements OnInit {\n\n @Input() icon: string;\n\n @Input() svgIcon: string;\n\n @Input() iconSize: string | number;\n\n @Input() panelTitle: string;\n\n @Input() isExpanded: boolean = false;\n\n @Input() startExpanded: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Output() expanded: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n if (this.startExpanded) {\n this.isExpanded = this.startExpanded;\n }\n }\n\n emitExpanded(value: boolean): void {\n this.expanded.emit(value);\n }\n\n}\n\n\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material';\nimport { tap } from 'rxjs/operators';\n\nimport { GIPIConfirmationDialogComponent } from '../../shared/gipi-components/confirmation-dialog/confirmation-dialog.component';\nimport { ConfirmationDTO } from '../models/dto/confirmation.dto';\nimport { AbstractService } from './abstract.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmationService extends AbstractService {\n\n constructor(public dialog: MatDialog) {\n super();\n }\n\n async confirm(confirmation: ConfirmationDTO): Promise<boolean> {\n let result: boolean = false;\n const dialogConfig = new MatDialogConfig();\n dialogConfig.disableClose = true;\n dialogConfig.autoFocus = true;\n dialogConfig.data = confirmation;\n dialogConfig.minWidth = '20%';\n (confirmation.width ? dialogConfig.width = confirmation.width : dialogConfig.maxWidth = '40%');\n\n await this.dialog\n .open(GIPIConfirmationDialogComponent, dialogConfig)\n .afterClosed()\n .pipe(\n tap((isAccept: boolean) => {\n if (isAccept) {\n if ((confirmation.accept !== null) && (confirmation.accept !== undefined)) {\n confirmation.accept();\n }\n } else {\n if ((confirmation.cancel !== null) && (confirmation.cancel !== undefined)) {\n confirmation.cancel();\n }\n }\n result = isAccept;\n })\n )\n .toPromise();\n\n return result;\n }\n\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ConfirmationService } from '../../../core/services/confirmation.service';\nimport { MessageService } from '../../../core/services/message.service';\nimport { ArrayUtil } from '../../../core/utils/array.util';\nimport { StringUtil } from '../../../core/utils/string.util';\n\n@Component({\n selector: `gipi-file-drag-and-drop`,\n exportAs: 'gipiFileDragAndDrop',\n templateUrl: './file-drag-and-drop.component.html',\n styleUrls: ['./file-drag-and-drop.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIFileDragAndDropComponent => GIPIFileDragAndDropComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-file-drag-and-drop',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIFileDragAndDropComponent implements ControlValueAccessor, OnInit {\n\n @ViewChild('inputFile', { static: false, read: ElementRef }) _elementRef: ElementRef;\n\n @Input() files: any[] = [];\n\n @Input() color: string;\n\n @Input() icon: string;\n\n @Input() iconFile: string;\n\n @Input() iconDeleteFile: string;\n\n @Input() svgIcon: string;\n\n @Input() svgIconFile: string;\n\n @Input() svgIconDeleteFile: string;\n\n @Input() iconSize: number = 0;\n\n @Input() iconSizeFile: number = 0;\n\n @Input() multiple: boolean = false;\n\n @Input() disabled: boolean;\n\n @Input() onlyExtensions: string[];\n\n @Input() verifyHasAdded: boolean = false;\n\n @Input() legendFieldset: string = '';\n\n @Input() listFileVisible: boolean = false;\n\n @Input() removingFiles: boolean = false;\n\n @Output() fileChange: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(\n private _messageService: MessageService,\n private _confirmationService: ConfirmationService\n ) { }\n\n ngOnInit(): void { }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.files = value;\n }\n\n onFileChange(pFileList: File[]): void {\n if (this._validateCountFiles(pFileList) && this._validateExtensionFile(pFileList) && this._validateHasAdded(pFileList)) {\n this.files = Object.keys(pFileList).map(key => pFileList[key]);\n this.fileChange.emit(this.files);\n }\n this._elementRef.nativeElement.value = '';\n }\n\n onDeleteFile(file: File): void {\n let list: File[] = this.files;\n this.files = [];\n\n list = this.files.filter((fileUploaded) => fileUploaded.name !== file.name);\n this.files = list;\n\n this.fileChange.emit(this.files);\n this._elementRef.nativeElement.value = '';\n }\n\n onClearInputFile(emitFileChange: boolean): boolean {\n this._elementRef.nativeElement.value = '';\n this.files = [];\n if (emitFileChange) {\n this.fileChange.emit(this.files);\n }\n return ((this.files.length <= 0) && StringUtil.isEmpty(this._elementRef.nativeElement.value));\n }\n\n openConfirmDialogRemoveFile(file: File, index: number): void {\n try {\n this._confirmationService.confirm({\n title: 'Confirmação',\n message: `Deseja realmente remover o arquivo ${file.name} da lista?`,\n accept: () => {\n const list: File[] = this.files;\n list.splice(index, 1);\n this.files = [];\n this.files = list;\n },\n cancel: () => { }\n });\n } catch (e) {\n this.addErrorMessage(e);\n }\n }\n\n private _validateCountFiles(pFileList: File[]): boolean {\n if (!this.multiple && pFileList.length > 1) {\n this.addErrorMessage('Não é possível selecionar mais de um arquivo por vez');\n return false;\n }\n\n return true;\n }\n\n private _validateHasAdded(pFileList: File[]): boolean {\n if ((!this.verifyHasAdded) || (ArrayUtil.isEmpty(this.files))) {\n return true;\n }\n\n let valid: boolean = true;\n for (let i: number = 0; i < pFileList.length; i++) {\n const existInListFile: boolean = this.files.filter(f => f.name.toUpperCase() === pFileList[i].name.toUpperCase()).length > 0;\n if (existInListFile) {\n this.addErrorMessage(`O arquivo ${pFileList[i].name} já foi adicionado`);\n valid = false;\n break;\n }\n }\n\n return valid;\n }\n\n private _validateExtensionFile(pFileList: File[]): boolean {\n // Verifica se não há extensões especificadas\n if (!this.onlyExtensions || this.onlyExtensions.length === 0) {\n return true; // Se não há extensões especificadas, todos os arquivos são considerados válidos\n }\n\n const specialExtensions = this.onlyExtensions.filter(ext => ext.includes('*')).map(ext => ext.slice(0, ext.indexOf('*')));\n\n for (let i = 0; i < pFileList.length; i++) {\n const fileName = pFileList[i].name;\n const fileExtension = fileName.substring(fileName.lastIndexOf('.')).toLowerCase();\n\n // Verifica se a extensão está na lista de extensões permitidas\n let isValid = this.onlyExtensions.includes(fileExtension);\n\n // Se a extensão não estiver na lista e houver extensões especiais\n if (!isValid && specialExtensions.length > 0) {\n isValid = specialExtensions.some(specExt => fileExtension.startsWith(specExt));\n }\n\n // Se não for válido, adiciona mensagem de erro e retorna falso imediatamente\n if (!isValid) {\n this.addErrorMessage(`Informe somente arquivos com extensão ${this.onlyExtensions.join(', ')}`);\n return false;\n }\n }\n\n return true; // Se todas as extensões forem válidas, retorna true\n }\n\n private addSuccessMessage(message: string): void {\n this._messageService.add({\n icon: 'check_circle',\n title: 'Sucesso',\n message: message,\n type: 'success'\n });\n }\n\n private addErrorMessage(message: string): void {\n this._messageService.add({\n icon: 'cancel',\n title: 'Ocorreu um erro',\n message: message,\n type: 'error'\n });\n }\n\n}\n","import { Component, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-footer`,\n exportAs: 'gipiFooter',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIFooterComponent => GIPIFooterComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-footer',\n }\n})\nexport class GIPIFooterComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { CurrencyMaskConfig } from 'ngx-currency';\nimport { ObjectUtil } from '../../../core';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-form-field`,\n exportAs: 'gipiFormField',\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIFormFieldComponent => GIPIFormFieldComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-form-field',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIFormFieldComponent implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-form-field-${nextUniqueId++}`;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string = '';\n\n @Input() ariaLabel: string = '';\n\n @Input() placeholder: string = '';\n\n @Input() readonly: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() showClear: boolean = false;\n\n @Input() showSearch: boolean = false;\n\n @Input() showTrigger: boolean = false;\n\n @Input() type: 'text' | 'email' | 'number' | 'password' | 'url' | 'tel' | 'select' | 'search' | 'currency' = 'text';\n\n @Input() min: number;\n\n @Input() max: number;\n\n @Input() maxLength: number;\n\n @Input() mask: string | undefined | null;\n\n @Input() pattern: string;\n\n @Input() optionsCurrency: Partial<CurrencyMaskConfig>;\n\n private _model: any;\n @Input() set model(value: any) {\n this._model = value;\n this.onChange(value);\n this.onTouch();\n this._changeDetectorRef.markForCheck();\n }\n get model() {\n return this._model;\n }\n\n private _value: any;\n @Input() set value(value: any) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n\n private _trigger: number = 0;\n @Input() set trigger(value: number) {\n this._trigger = value;\n }\n get trigger(): number {\n return this._trigger;\n }\n\n @ViewChild('inputRef', { static: true, read: ElementRef }) inputRef: ElementRef;\n\n @Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onKeydownEnter: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClick: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClear: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onSearch: EventEmitter<Event> = new EventEmitter<Event>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public elementRef: ElementRef,\n ) { }\n\n ngOnInit() { }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n writeValue(value: any): void {\n this.model = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState?(value: boolean): void {\n this.disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n if (event.key.toUpperCase() === 'ENTER') {\n this.onKeydownEnter.emit(event);\n }\n this.onKeydown.emit(event);\n }\n }\n\n public onInputFocus(event: Event): void {\n if (!this.disabled) {\n this.onFocus.emit(event);\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputClick(event: Event): void {\n if (!this.disabled) {\n this.onClick.emit(event);\n this.focus();\n }\n }\n\n public onButtonClearClick(event: Event): void {\n if (!this.disabled) {\n if (this.type === 'search') {\n this.model = '';\n }\n this.onClear.emit(event);\n }\n }\n\n onButtonSearchClick(event: Event): void {\n if (!this.disabled && (this.type === 'search')) {\n this.onSearch.emit(event);\n }\n }\n\n /**\n * Seta o foco no inputRef\n */\n public focus(): void {\n if (!ObjectUtil.isNull(this.inputRef)) {\n this.inputRef.nativeElement.focus();\n }\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-helpful-tip`,\n exportAs: 'gipiHelpfulTip',\n templateUrl: './helpful-tip.component.html',\n styleUrls: ['./helpful-tip.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIHelpfulTipComponent => GIPIHelpfulTipComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-helpful-tip',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIHelpfulTipComponent implements OnInit {\n\n private _name: string = `gipi-form-field-${nextUniqueId++}`;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n private _tooltip: string = '';\n @Input() set tooltip(value: string) {\n this._tooltip = value;\n }\n get tooltip(): string {\n return this._tooltip;\n }\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public elementRef: ElementRef,\n ) { }\n\n ngOnInit() { }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-checkbox`,\n exportAs: 'gipiInputCheckbox',\n templateUrl: './input-checkbox.component.html',\n styleUrls: ['./input-checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputCheckboxComponent => GIPIInputCheckboxComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-checkbox',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputCheckboxComponent implements ControlValueAccessor, OnInit {\n\n private _name: string = `gipi-input-checkbox-${nextUniqueId++}`;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string;\n\n @Input() disabled: boolean = false;\n\n @Input() disableRipple: boolean = false;\n\n @Input() labelPosition: 'before' | 'after' = 'after';\n\n @Input() required: boolean;\n\n @Input() indeterminate: boolean;\n\n private _value: any;\n @Input() set value(val: any) {\n this._value = val;\n this.onChange(val);\n this.onTouch();\n }\n get value() {\n return this._value;\n }\n\n @Output() change: EventEmitter<MatCheckboxChange> = new EventEmitter<MatCheckboxChange>();\n @Output() indeterminateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void { }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this._changeDetectorRef.markForCheck();\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { CurrencyMaskConfig } from 'ngx-currency';\nimport { ObjectUtil } from '../../../core';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-currency`,\n exportAs: 'gipiInputCurrency',\n templateUrl: './input-currency.component.html',\n styleUrls: ['./input-currency.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputCurrencyComponent => GIPIInputCurrencyComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-currency',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputCurrencyComponent implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-input-currency-${nextUniqueId++}`;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string;\n\n @Input() ariaLabel: string;\n\n @Input() placeholder: string = '';\n\n @Input() readonly: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() min: number;\n\n @Input() max: number;\n\n @Input() maxLength: number;\n\n @Input() options: Partial<CurrencyMaskConfig>;\n\n private _model: any;\n @Input() set model(value: any) {\n this._model = value;\n this.onChange(value);\n this.onTouch();\n this._changeDetectorRef.markForCheck();\n }\n get model() {\n return this._model;\n }\n\n private _value: any;\n @Input() set value(value: any) {\n this._value = value;\n }\n get value() {\n return this._value;\n }\n\n @ViewChild('inputCurrencyRef', { static: true, read: ElementRef }) inputCurrencyRef: ElementRef;\n\n @Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onKeydownEnter: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClick: EventEmitter<Event> = new EventEmitter<Event>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public elementRef: ElementRef,\n ) { }\n\n ngOnInit() { }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n writeValue(value: any): void {\n this.model = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState?(value: boolean): void {\n this.disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n if (event.key.toUpperCase() === 'ENTER') {\n this.onKeydownEnter.emit(event);\n }\n this.onKeydown.emit(event);\n }\n }\n\n public onInputFocus(event: Event): void {\n if (!this.disabled) {\n this.onFocus.emit(event);\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputClick(event: Event): void {\n if (!this.disabled) {\n this.onClick.emit(event);\n this.focus();\n }\n }\n\n /**\n * Seta o foco no inputRef\n */\n public focus(): void {\n if (!ObjectUtil.isNull(this.inputCurrencyRef)) {\n this.inputCurrencyRef.nativeElement.focus();\n }\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { GIPINgConfig } from '../../api/gipi-ng-config';\n\nconst yearsPerPage = 24;\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-monthpicker`,\n exportAs: 'gipiInputMonthPicker',\n templateUrl: './input-monthpicker.component.html',\n styleUrls: ['./input-monthpicker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputMonthPickerComponent => GIPIInputMonthPickerComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-monthpicker',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputMonthPickerComponent implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-input-monthpicker-${nextUniqueId++}`;\n\n private _initialYear: number;\n set initialYear(value: number) {\n if (value > 1900) {\n this._initialYear = value;\n }\n }\n get initialYear(): number {\n return this._initialYear;\n }\n\n private _yearArrays: number[] = [];\n set yearArrays(value: number[]) {\n this._yearArrays = value;\n }\n get yearArrays(): number[] {\n return this._yearArrays;\n }\n\n _now: Date = new Date();\n _currentMonth: number = this._now.getMonth();\n _currentYear: number = this._now.getFullYear();\n\n _overlayVisible: boolean = false;\n\n monthArrays: number[] = Array.from(Array(12).keys());\n\n monthNames: string[] = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'];\n\n internalCalendarView: 'month' | 'year' = 'month';\n\n inputFieldValue: string;\n\n @Input() id: string | number = this._name;\n\n @Input() name: string = this._name;\n\n @Input() ariaLabel: string = '';\n\n @Input() label: string = '';\n\n @Input() placeholder: string = '';\n\n @Input() disabled: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() showOnFocus: boolean = true;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n private _calendarView: 'month' | 'year' = 'month';\n @Input() set calendarView(value: 'month' | 'year') {\n this._calendarView = value;\n\n if (!ObjectUtil.isNull(this.value)) {\n if (value === 'month') {\n this.monthChanged(this.value.getMonth());\n } else if (value === 'year') {\n this.yearChanged(this.value.getFullYear());\n }\n\n this.internalCalendarView = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n get calendarView(): 'month' | 'year' {\n return this._calendarView;\n }\n\n private _value: Date;\n @Input() set value(value: Date) {\n this._value = value;\n\n if (value) {\n value.setDate(1);\n this._value = value;\n\n if (this.calendarView === 'month') {\n const month: number = this.value.getMonth() + 1;\n this.inputFieldValue = `${((month <= 9) ? ('0' + month) : month)}/${this.value.getFullYear()}`;\n } else if (this.calendarView === 'year') {\n this.inputFieldValue = `${this.value.getFullYear()}`;\n }\n }\n\n this.onChange(value);\n this._changeDetectorRef.markForCheck();\n }\n get value(): Date {\n return this._value;\n }\n\n @Output() onClose: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onMonthChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onYearChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onKeydown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onKeydownEnter: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClick: EventEmitter<Event> = new EventEmitter<Event>();\n\n @ViewChild('inputMonthPicker', { static: true, read: HTMLInputElement }) inputMonthPickerRef: HTMLInputElement;\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _config: GIPINgConfig,\n ) { }\n\n ngOnInit(): void {\n this._generateYears();\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this._changeDetectorRef.markForCheck();\n }\n\n private _generateYears(): void {\n const realCurrentYear: number = this._now.getFullYear();\n\n if (!this.initialYear) {\n this.initialYear = this.value ? this.value.getFullYear() : this._now.getFullYear();\n }\n\n this.yearArrays = [];\n if (this.initialYear === realCurrentYear) {\n let baseYear = this.initialYear - (this.initialYear % (yearsPerPage / 2));\n for (let y = 0; y < yearsPerPage; y++) {\n this.yearArrays.push((baseYear + y));\n }\n } else {\n for (let y = this.initialYear; y < (this.initialYear + yearsPerPage); y++) {\n this.yearArrays.push(y);\n }\n }\n }\n\n public clickToggleCalendar(currentView?: 'month' | 'year') {\n if (currentView) {\n this.internalCalendarView = currentView;\n } else {\n if (this.internalCalendarView === 'month') {\n this.internalCalendarView = 'year';\n }\n }\n this._changeDetectorRef.detectChanges();\n }\n\n public clickPrev() {\n if (this.internalCalendarView === 'month') {\n this.value = new Date(this.value.getFullYear() - 1, this.value.getMonth(), 1);\n this.initialYear = (this.value.getFullYear() - 7);\n } else if (this.internalCalendarView === 'year') {\n this.initialYear = this.yearArrays[0] - (yearsPerPage - 1);\n }\n this._generateYears();\n this._changeDetectorRef.detectChanges();\n }\n\n public clickNext() {\n if (this.internalCalendarView === 'month') {\n this.value = new Date(this.value.getFullYear() + 1, this.value.getMonth(), 1);\n this.initialYear = ((this.value.getFullYear() - 7) + 1);\n } else if (this.internalCalendarView === 'year') {\n this.initialYear = this.yearArrays[yearsPerPage - 1];\n }\n this._generateYears();\n this._changeDetectorRef.detectChanges();\n }\n\n /**\n * Chamado quando o mês é alterado\n * @param month mês selecionado no calendário de meses\n */\n public monthChanged(month: number) {\n const year: number = this.value.getFullYear();\n this._monthOrYearChanged(month, year);\n this._hideOverlay();\n }\n\n /**\n * Chamado quando o ano é alterado\n * @param year ano selecionado no calendário de anos\n */\n public yearChanged(year: number) {\n const month: number = this.value.getMonth();\n this._monthOrYearChanged(month, year);\n\n if (this.calendarView === 'month') {\n this.clickToggleCalendar('month');\n } else if (this.calendarView === 'year') {\n this._hideOverlay();\n }\n }\n\n /**\n * Chamar quando mês ou ano mudou\n * @param month número do mês 0-11\n * @param year ano exemplo: 1995\n */\n private _monthOrYearChanged(month: number, year: number) {\n let newMonth: number = month;\n let newYear: number = year;\n\n if (this.minDate) {\n if (newYear < this.minDate.getFullYear() || (newYear === this.minDate.getFullYear() && newMonth < this.minDate.getMonth())) {\n newMonth = this.minDate.getMonth();\n newYear = this.minDate.getFullYear();\n }\n }\n\n if (this.maxDate) {\n if (newYear > this.maxDate.getFullYear() || (newYear === this.maxDate.getFullYear() && newMonth > this.maxDate.getMonth())) {\n newMonth = this.maxDate.getMonth();\n newYear = this.maxDate.getFullYear();\n }\n }\n\n this.value = new Date(newYear, newMonth, 1);\n\n this._changeDetectorRef.detectChanges();\n }\n\n public isMonthSelected(month: number): boolean {\n if (this.value) {\n return this.value.getMonth() === month;\n }\n\n return false;\n }\n\n public isMonthDisabled(month: number): boolean {\n if (this.value && this.minDate && this.maxDate) {\n return (this.value.getFullYear() === this.minDate.getFullYear() && month < this.minDate.getMonth())\n || (this.value.getFullYear() === this.maxDate.getFullYear() && month > this.maxDate.getMonth());\n }\n return false;\n }\n\n public isYearSelected(year: number): boolean {\n if (this.value) {\n return this.value.getFullYear() === year;\n }\n\n return false;\n }\n\n public isYearDisabled(year: number): boolean {\n if (this.value && this.minDate && this.maxDate) {\n return (this.value.getFullYear() === this.minDate.getFullYear() && year < this.minDate.getFullYear())\n || (this.value.getFullYear() === this.maxDate.getFullYear() && year > this.maxDate.getFullYear());\n }\n return false;\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n if (event.key.toUpperCase() === 'ENTER') {\n this.onKeydownEnter.emit(event);\n }\n this.onKeydown.emit(event);\n }\n }\n\n public onInputKeyup(event: KeyboardEvent): void {\n if (!this.disabled) {\n if ((event.key.toUpperCase() === 'ESC') || (event.key.toUpperCase() === 'ESCAPE')) {\n this._hideOverlay();\n }\n this.onKeydown.emit(event);\n }\n }\n\n public onInputFocus(event: Event): void {\n if (!this.disabled && this.showOnFocus) {\n this._showOverlay();\n this.onFocus.emit(event);\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputClick(event: Event): void {\n if (!this.disabled) {\n this._showOverlay();\n this.onClick.emit(event);\n }\n }\n\n public onButtonShowMonthpicker(): void {\n this.toogleOverlay();\n this._changeDetectorRef.markForCheck();\n }\n\n private _showOverlay(): void {\n if (!this._overlayVisible) {\n this._overlayVisible = true;\n }\n }\n\n private _hideOverlay(): void {\n this._overlayVisible = false;\n this._changeDetectorRef.markForCheck();\n }\n\n public toogleOverlay(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n if (!this._overlayVisible) {\n this._showOverlay();\n } else {\n this._hideOverlay();\n }\n }\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ArrayUtil } from '../../../core/utils/array.util';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { GIPIFormFieldComponent } from '../form-field/form-field.component';\nimport { GIPIPopoverTrigger } from '../popover/shared/popover-trigger';\n\nlet nextUniqueId = 0;\n\n/** A altura dos itens selecionados em unidades `px`. */\nconst OPTION_HEIGHT_PX = 40;\n\n@Component({\n selector: `gipi-input-select-enum`,\n exportAs: 'gipiInputSelectEnum',\n templateUrl: './input-select-enum.component.html',\n styleUrls: ['./input-select-enum.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputSelectEnumComponent => GIPIInputSelectEnumComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-select-enum',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputSelectEnumComponent implements OnInit, OnDestroy, ControlValueAccessor {\n\n private _name: string = `gipi-input-select-enum-${nextUniqueId++}`;\n\n _enumList: any[] = [];\n\n _itemSizeScrollViewport: number = 5;\n\n _lastOptionSelected: any = null;\n\n @ViewChild('formFieldSelectEnum', { read: GIPIFormFieldComponent, static: false }) formFieldSelectEnum: GIPIFormFieldComponent;\n\n @ViewChild(GIPIPopoverTrigger, { static: false }) popoverTrigger: GIPIPopoverTrigger;\n\n @Input() id: string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() placeholder: string = 'Selecionar';\n\n @Input() required: boolean;\n\n private _disabled: boolean = false;\n @Input() set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n get disabled() {\n return this._disabled;\n }\n\n private _loading: boolean = false;\n @Input() set loading(value: any) {\n this._loading = coerceBooleanProperty(value);\n }\n get loading() {\n return this._loading;\n }\n\n private _multiple: boolean = false;\n @Input() set multiple(value: any) {\n this._multiple = coerceBooleanProperty(value);\n }\n get multiple() {\n return this._multiple;\n }\n\n private _showOnFocus: boolean = true;\n @Input() set showOnFocus(value: any) {\n this._showOnFocus = coerceBooleanProperty(value);\n }\n get showOnFocus() {\n return this._showOnFocus;\n }\n\n private _hideOnEscape: boolean = true;\n @Input() set hideOnEscape(value: any) {\n this._hideOnEscape = coerceBooleanProperty(value);\n }\n get hideOnEscape() {\n return this._hideOnEscape;\n }\n\n @Input() enum: any;\n\n @Input() sort: (a: any, b: any) => number;\n\n @Input() valuesExclud: string[];\n\n @Input() valuesOmit: string[];\n\n private _value: any;\n @Input('value') set value(value: any) {\n this._value = value;\n this.onChange(value);\n this.onTouch();\n }\n get value() {\n return this._value;\n }\n\n @Output() selectionChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onOpenedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n get optionSelected(): string {\n if (this.value && !ArrayUtil.isEmpty(this._enumList)) {\n const selected = this._enumList.find(e => e.key === this.value);\n if (selected) {\n return selected.value;\n }\n }\n\n return '';\n }\n\n get scrollViewportHeight(): number {\n let height: number = 0;\n if (this._enumList && this._enumList.length) {\n height = (this._enumList.length * OPTION_HEIGHT_PX);\n }\n\n return height;\n }\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n const lEnumList = Object.keys(this.enum)\n .map(key => ({ key: key, value: this.enum[key] }))\n .sort(this.sort);\n\n if (!ObjectUtil.isNull(this.valuesExclud)) {\n for (let i = 0; i < lEnumList.length; i++) {\n const excludEnum: boolean = this.valuesExclud.some(e => e === lEnumList[i].key);\n if (!excludEnum) {\n this._enumList.push(lEnumList[i]);\n }\n }\n } else {\n this._enumList = lEnumList;\n }\n\n this._changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n if (!ObjectUtil.isNull(this.popoverTrigger)) {\n this.popoverTrigger.destroyPopover();\n }\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n validateOmitByKey(key: string): boolean {\n return !ObjectUtil.isNull(this.valuesOmit) ? !this.valuesOmit.some(el => el === key) : true;\n }\n\n public showPopover(): void {\n if (!this.disabled && !this.loading) {\n this.popoverTrigger.openPopover();\n }\n }\n\n public closePopover(): void {\n if (!this.disabled && !this.loading) {\n this.popoverTrigger.closePopover();\n }\n }\n\n public onInputFocus(event: Event): void {\n if (this.showOnFocus && !this.disabled) {\n this.showPopover();\n }\n if (!this.disabled) {\n this.onFocus.emit(event);\n event.stopPropagation();\n }\n }\n\n public onInputClick(event: Event): void {\n if (!this.disabled) {\n this.showPopover();\n\n if (!ObjectUtil.isNull(this.popoverTrigger) && !this.popoverTrigger.popoverOpen) {\n this.formFieldSelectEnum.focus();\n }\n\n event.stopPropagation();\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n event.stopImmediatePropagation();\n return;\n }\n\n if (\n ((event.code.toUpperCase() === 'ESCAPE') && this.hideOnEscape) ||\n ((event.code.toUpperCase() === 'ENTER') || (event.code.toUpperCase() === 'NUMPADENTER')) ||\n (event.code.toUpperCase() === 'TAB')\n ) {\n if (!ObjectUtil.isNull(this.popoverTrigger) && this.popoverTrigger.popoverOpen) {\n this.closePopover();\n event.preventDefault();\n }\n }\n }\n\n public onButtonSelectOptionClick(key: string): void {\n this.value = key;\n this.closePopover();\n this._changeDetectorRef.detectChanges();\n }\n\n @HostListener('window:resize', ['$event'])\n onWindowResize(event: UIEvent): void {\n if (!ObjectUtil.isNull(this.popoverTrigger) && this.popoverTrigger.popoverOpen) {\n this.closePopover();\n this._changeDetectorRef.detectChanges();\n event.stopPropagation();\n }\n }\n\n}\n","import { GIPIDomHandler } from './dom-handler';\n\nexport class GIPIConnectedOverlayScrollHandler {\n\n element: any;\n\n listener: any;\n\n scrollableParents: any;\n\n constructor(element: any, listener: any = (): void => { }) {\n this.element = element;\n this.listener = listener;\n }\n\n bindScrollListener(): void {\n this.scrollableParents = GIPIDomHandler.getScrollableParents(this.element);\n for (let i: number = 0; i < this.scrollableParents.length; i++) {\n this.scrollableParents[i].addEventListener('scroll', this.listener);\n }\n }\n\n unbindScrollListener(): void {\n if (this.scrollableParents) {\n for (let i: number = 0; i < this.scrollableParents.length; i++) {\n this.scrollableParents[i].removeEventListener('scroll', this.listener);\n }\n }\n }\n\n destroy(): void {\n this.unbindScrollListener();\n this.element = null;\n this.listener = null;\n this.scrollableParents = null;\n }\n}\n","import { AnimationEvent, AnimationReferenceMetadata, animate, animation, style, transition, trigger, useAnimation } from '@angular/animations';\nimport { DOCUMENT } from '@angular/common';\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, OnInit, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport ZIndexUtils from '../../../core/utils/zindex.util';\nimport { GIPINgConfig } from '../../api/gipi-ng-config';\nimport { GIPIConnectedOverlayScrollHandler } from '../dom/connected-overlay-scroll-handler';\nimport { GIPIDomHandler } from '../dom/dom-handler';\nimport { GIPITemplateDirective } from '../template/template.directive';\nimport { GIPIOverlayService } from './shared/overlay-service';\nimport { OverlayModeType, OverlayOptions, ResponsiveOverlayDirectionType, ResponsiveOverlayOptions } from './shared/overlay_options';\n\nconst showOverlayContentAnimation: AnimationReferenceMetadata = animation([style({ transform: '{{transform}}', opacity: 0 }), animate('{{showTransitionParams}}')]);\nconst hideOverlayContentAnimation: AnimationReferenceMetadata = animation([animate('{{hideTransitionParams}}', style({ transform: '{{transform}}', opacity: 0 }))]);\n\n/** @dynamic */\n@Component({\n selector: `gipi-overlay`,\n exportAs: 'gipiOverlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('overlayContentAnimation', [\n transition(':enter', [useAnimation(showOverlayContentAnimation)]),\n transition(':leave', [useAnimation(hideOverlayContentAnimation)])\n ])\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIOverlayComponent => GIPIOverlayComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-overlay',\n }\n})\nexport class GIPIOverlayComponent implements OnInit, AfterContentInit, OnDestroy {\n\n contentTemplate: TemplateRef<any> | undefined;\n\n modalVisible: boolean = false;\n\n isOverlayClicked: boolean = false;\n\n isOverlayContentClicked: boolean = false;\n\n scrollHandler: any;\n\n documentClickListener: any;\n\n documentResizeListener: any;\n\n private documentKeyboardListener: VoidFunction | null;\n\n public transformOptions: any = {\n default: 'scaleY(0.8)',\n center: 'scale(0.7)',\n top: 'translate3d(0px, -100%, 0px)',\n 'top-start': 'translate3d(0px, -100%, 0px)',\n 'top-end': 'translate3d(0px, -100%, 0px)',\n bottom: 'translate3d(0px, 100%, 0px)',\n 'bottom-start': 'translate3d(0px, 100%, 0px)',\n 'bottom-end': 'translate3d(0px, 100%, 0px)',\n left: 'translate3d(-100%, 0px, 0px)',\n 'left-start': 'translate3d(-100%, 0px, 0px)',\n 'left-end': 'translate3d(-100%, 0px, 0px)',\n right: 'translate3d(100%, 0px, 0px)',\n 'right-start': 'translate3d(100%, 0px, 0px)',\n 'right-end': 'translate3d(100%, 0px, 0px)'\n };\n\n private _window: Window | null;\n\n private _visible: boolean = false;\n @Input() get visible(): boolean {\n return this._visible;\n }\n set visible(value: boolean) {\n this._visible = value;\n\n if (this._visible && !this.modalVisible) {\n this.modalVisible = true;\n }\n }\n\n private _mode: OverlayModeType | string;\n @Input() get mode(): OverlayModeType | string {\n return this._mode || this.overlayOptions?.mode;\n }\n set mode(value: OverlayModeType | string) {\n this._mode = value;\n }\n\n private _style: any;\n @Input() get style(): any {\n return ObjectUtil.merge(this._style, this.modal ? this.overlayResponsiveOptions?.style : this.overlayOptions?.style);\n }\n set style(value: any) {\n this._style = value;\n }\n\n private _styleClass: string | undefined;\n @Input() get styleClass(): string {\n return ObjectUtil.merge(this._styleClass, this.modal ? this.overlayResponsiveOptions?.styleClass : this.overlayOptions?.styleClass);\n }\n set styleClass(value: string) {\n this._styleClass = value;\n }\n\n private _contentStyle: any;\n @Input() get contentStyle(): any {\n return ObjectUtil.merge(this._contentStyle, this.modal ? this.overlayResponsiveOptions?.contentStyle : this.overlayOptions?.contentStyle);\n }\n set contentStyle(value: any) {\n this._contentStyle = value;\n }\n\n private _contentStyleClass: string | undefined;\n @Input() get contentStyleClass(): string {\n return ObjectUtil.merge(this._contentStyleClass, this.modal ? this.overlayResponsiveOptions?.contentStyleClass : this.overlayOptions?.contentStyleClass);\n }\n set contentStyleClass(value: string) {\n this._contentStyleClass = value;\n }\n\n private _target: any;\n @Input() get target(): any {\n const value: any = this._target || this.overlayOptions?.target;\n return (value === undefined) ? '@prev' : value;\n }\n set target(value: any) {\n this._target = value;\n }\n\n private _appendTo: 'body' | HTMLElement | undefined;\n @Input() get appendTo(): any {\n return this._appendTo || this.overlayOptions?.appendTo;\n }\n set appendTo(value: any) {\n this._appendTo = value;\n }\n\n private _autoZIndex: boolean | undefined;\n @Input() get autoZIndex(): boolean {\n const value: boolean = this._autoZIndex || this.overlayOptions?.autoZIndex;\n return (value === undefined) ? true : value;\n }\n set autoZIndex(value: boolean) {\n this._autoZIndex = value;\n }\n\n private _baseZIndex: number | undefined;\n @Input() get baseZIndex(): number {\n const value: number = this._baseZIndex || this.overlayOptions?.baseZIndex;\n return (value === undefined) ? 0 : value;\n }\n set baseZIndex(value: number) {\n this._baseZIndex = value;\n }\n\n private _showTransitionOptions: string | undefined;\n @Input() get showTransitionOptions(): string {\n const value: string = this._showTransitionOptions || this.overlayOptions?.showTransitionOptions;\n return (value === undefined) ? '.12s cubic-bezier(0, 0, 0.2, 1)' : value;\n }\n set showTransitionOptions(value: string) {\n this._showTransitionOptions = value;\n }\n\n private _hideTransitionOptions: string | undefined;\n @Input() get hideTransitionOptions(): string {\n const value: string = this._hideTransitionOptions || this.overlayOptions?.hideTransitionOptions;\n return (value === undefined) ? '.1s linear' : value;\n }\n set hideTransitionOptions(value: string) {\n this._hideTransitionOptions = value;\n }\n\n private _listener: any;\n @Input() get listener(): any {\n return this._listener || this.overlayOptions?.listener;\n }\n set listener(value: any) {\n this._listener = value;\n }\n\n private _responsive: ResponsiveOverlayOptions | undefined;\n @Input() get responsive(): ResponsiveOverlayOptions | undefined {\n return this._responsive || this.overlayOptions?.responsive;\n }\n set responsive(val: ResponsiveOverlayOptions | undefined) {\n this._responsive = val;\n }\n\n private _options: OverlayOptions | undefined;\n @Input() get options(): OverlayOptions | undefined {\n return this._options;\n }\n set options(val: OverlayOptions | undefined) {\n this._options = val;\n }\n\n private _documentClick: () => boolean;\n @Input() get documentClick(): () => boolean {\n return this._documentClick;\n }\n set documentClick(val: () => boolean) {\n this._documentClick = val;\n }\n\n @Output() visibleChange: EventEmitter<any> = new EventEmitter();\n @Output() onBeforeShow: EventEmitter<any> = new EventEmitter();\n @Output() onShow: EventEmitter<any> = new EventEmitter();\n @Output() onBeforeHide: EventEmitter<any> = new EventEmitter();\n @Output() onHide: EventEmitter<any> = new EventEmitter();\n @Output() onAnimationStart: EventEmitter<any> = new EventEmitter();\n @Output() onAnimationDone: EventEmitter<any> = new EventEmitter();\n\n @ContentChildren(GIPITemplateDirective) templates: QueryList<any> | undefined;\n\n @ViewChild('overlay', { static: false }) overlayViewChild: ElementRef | undefined;\n\n @ViewChild('content', { static: false }) contentViewChild: ElementRef | undefined;\n\n get modal(): boolean {\n return this.mode === 'modal' || (this.overlayResponsiveOptions && this._window?.matchMedia(this.overlayResponsiveOptions.media?.replace('@media', '') || `(max-width: ${this.overlayResponsiveOptions.breakpoint})`).matches);\n }\n\n get overlayMode(): string {\n return this.mode || (this.modal ? 'modal' : 'overlay');\n }\n\n get overlayOptions(): OverlayOptions {\n return { ...this._config?.overlayOptions, ...this.options }; // TODO: Melhorar o desempenho\n }\n\n get overlayResponsiveOptions(): ResponsiveOverlayOptions {\n return { ...this.overlayOptions?.responsive, ...this.responsive }; // TODO: Melhorar o desempenho\n }\n\n get overlayResponsiveDirection(): ResponsiveOverlayDirectionType {\n return this.overlayResponsiveOptions?.direction || 'center';\n }\n\n get overlayEl(): any {\n return this.overlayViewChild?.nativeElement;\n }\n\n get contentEl(): any {\n return this.contentViewChild?.nativeElement;\n }\n\n get targetEl(): any {\n return GIPIDomHandler.getTargetElement(this.target, this.elementRef?.nativeElement);\n }\n\n constructor(\n @Inject(DOCUMENT) private _document: Document,\n private _config: GIPINgConfig,\n private _zone: NgZone,\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public overlayService: GIPIOverlayService,\n ) {\n this._window = this._document.defaultView;\n }\n\n ngOnInit(): void { }\n\n ngAfterContentInit(): void {\n if (!ObjectUtil.isNull(this.templates)) {\n this.templates.forEach(item => {\n switch (item.getType()) {\n case 'content': {\n this.contentTemplate = item.template;\n break;\n } default: {\n this.contentTemplate = item.template;\n break;\n }\n }\n });\n }\n }\n\n ngOnDestroy(): void {\n this.hide(this.overlayEl, true);\n\n if (this.overlayEl) {\n GIPIDomHandler.appendOverlay(this.overlayEl, this.targetEl, this.appendTo);\n ZIndexUtils.clear(this.overlayEl);\n }\n\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n\n this.unbindListeners();\n }\n\n show(overlay?: HTMLElement, isFocus: boolean = false): void {\n this.onVisibleChange(true);\n this.handleEvents('onShow', { overlay: overlay || this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n\n isFocus && GIPIDomHandler.focus(this.targetEl);\n this.modal && GIPIDomHandler.addClass(this._document?.body, 'overflow-hidden');\n }\n\n hide(overlay?: HTMLElement, isFocus: boolean = false): void {\n if (!this.visible) {\n return;\n } else {\n this.onVisibleChange(false);\n this.handleEvents('onHide', { overlay: overlay || this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n isFocus && GIPIDomHandler.focus(this.targetEl);\n this.modal && GIPIDomHandler.removeClass(this._document?.body, 'overflow-hidden');\n }\n }\n\n alignOverlay(): void {\n !this.modal && GIPIDomHandler.alignOverlay(this.overlayEl, this.targetEl, this.appendTo);\n }\n\n onVisibleChange(visible: boolean): void {\n this._visible = visible;\n this.visibleChange.emit(visible);\n }\n\n onOverlayClick(event: any): void {\n this.isOverlayClicked = true;\n }\n\n onOverlayContentClick(event: MouseEvent): void {\n this.overlayService.add({\n originalEvent: event,\n target: this.targetEl\n });\n\n this.isOverlayContentClicked = true;\n }\n\n onOverlayContentAnimationStart(event: AnimationEvent): void {\n switch (event.toState) {\n case 'visible': {\n this.handleEvents('onBeforeShow', { overlay: this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n\n if (this.autoZIndex) {\n ZIndexUtils.set(this.overlayMode, this.overlayEl, this.baseZIndex + this._config?.zIndex[this.overlayMode]);\n }\n\n GIPIDomHandler.appendOverlay(this.overlayEl, this.appendTo === 'body' ? this._document.body : this.appendTo, this.appendTo);\n this.alignOverlay();\n\n break;\n } case 'void': {\n this.handleEvents('onBeforeHide', { overlay: this.overlayEl, target: this.targetEl, mode: this.overlayMode });\n this.modal && GIPIDomHandler.addClass(this.overlayEl, 'component-overlay-leave');\n break;\n }\n }\n\n this.handleEvents('onAnimationStart', event);\n }\n\n onOverlayContentAnimationDone(event: AnimationEvent): void {\n const container: any = this.overlayEl || event.element.parentElement;\n switch (event.toState) {\n case 'visible': {\n this.show(container, true);\n this.bindListeners();\n break;\n } case 'void': {\n this.hide(container, true);\n this.unbindListeners();\n GIPIDomHandler.appendOverlay(this.overlayEl, this.targetEl, this.appendTo);\n ZIndexUtils.clear(container);\n this.modalVisible = false;\n break;\n }\n }\n\n this.handleEvents('onAnimationDone', event);\n }\n\n handleEvents(name: string, params: any): void {\n (this as any)[name].emit(params);\n this.options && (this.options as any)[name] && (this.options as any)[name](params);\n this._config?.overlayOptions && (this._config?.overlayOptions as any)[name] && (this._config?.overlayOptions as any)[name](params);\n }\n\n bindListeners(): void {\n this.bindScrollListener();\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindDocumentKeyboardListener();\n }\n\n unbindListeners(): void {\n this.unbindScrollListener();\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindDocumentKeyboardListener();\n }\n\n bindScrollListener(): void {\n if (!this.scrollHandler) {\n this.scrollHandler = new GIPIConnectedOverlayScrollHandler(this.targetEl, (event: any): void => {\n const valid: any = this.listener\n ? this.listener(event, { type: 'scroll', mode: this.overlayMode, valid: true })\n : true;\n\n valid && this.hide(event, true);\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener(): void {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n bindDocumentClickListener(): void {\n if (!this.documentClickListener) {\n this.documentClickListener = this.renderer.listen(this._document, 'click', event => {\n const isTargetClicked: any = this.targetEl && (this.targetEl.isSameNode(event.target) || (!this.isOverlayClicked && this.targetEl.contains(event.target)));\n const isDocumentClicked: boolean = this.documentClick ? this.documentClick() : false;\n const isOutsideClicked: boolean = !isTargetClicked && !this.isOverlayContentClicked && !isDocumentClicked;\n\n const valid: any = this.listener\n ? this.listener(event, { type: 'outside', mode: this.overlayMode, valid: event.which !== 3 && isOutsideClicked })\n : isOutsideClicked;\n\n valid && this.hide(event);\n this.isOverlayClicked = this.isOverlayContentClicked = false;\n });\n }\n }\n\n unbindDocumentClickListener(): void {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener(): void {\n if (!this.documentResizeListener) {\n this.documentResizeListener = this.renderer.listen(this._window, 'resize', event => {\n const valid: any = this.listener\n ? this.listener(event, { type: 'resize', mode: this.overlayMode, valid: !GIPIDomHandler.isTouchDevice() })\n : !GIPIDomHandler.isTouchDevice();\n\n valid && this.hide(event, true);\n });\n }\n }\n\n unbindDocumentResizeListener(): void {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = null;\n }\n }\n\n bindDocumentKeyboardListener(): void {\n if (this.documentKeyboardListener) {\n return;\n }\n\n this._zone.runOutsideAngular(() => {\n this.documentKeyboardListener = this.renderer.listen(this._window, 'keydown', (event) => {\n if (!this.overlayOptions.hideOnEscape || event.keyCode !== 27) {\n return;\n }\n\n const valid: any = this.listener\n ? this.listener(event, { type: 'keydown', mode: this.overlayMode, valid: !GIPIDomHandler.isTouchDevice() })\n : !GIPIDomHandler.isTouchDevice();\n\n if (valid) {\n this._zone.run(() => {\n this.hide(event, true);\n });\n }\n });\n });\n }\n\n unbindDocumentKeyboardListener(): void {\n if (this.documentKeyboardListener) {\n this.documentKeyboardListener();\n this.documentKeyboardListener = null;\n }\n }\n\n}\n","import { A, ENTER, ESCAPE, NINE, SPACE, Z, ZERO } from '@angular/cdk/keycodes';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, TrackByFunction, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, takeUntil } from 'rxjs/operators';\n\nimport { PageDTO } from '../../../core/models/dto/page.dto';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { GIPIFormFieldComponent } from '../form-field/form-field.component';\nimport { GIPIOverlayComponent } from '../overlay/overlay.component';\n\nexport interface AddChange<T> {\n values: T | T[];\n selectedAll?: boolean;\n}\n\n/** A altura dos itens selecionados em unidades `px`. */\nconst OPTION_HEIGHT_PX = 40;\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-select`,\n exportAs: 'gipiInputSelect',\n templateUrl: './input-select.component.html',\n styleUrls: ['./input-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputSelectComponent => GIPIInputSelectComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-select',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputSelectComponent<T> implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-input-select-${nextUniqueId++}`;\n\n private _cache: any;\n\n private _pageModel: PageDTO<T>;\n\n private _onDestroy: Subject<void> = new Subject<void>();\n\n _itemSizeScrollViewport: number = 5;\n\n _totalOptions: number;\n\n _overlayVisible: boolean = false;\n\n _formControlSearch: FormControl = new FormControl({ value: '', disabled: false });\n\n inputFieldValue: string = '';\n\n inputFieldValueSelected: number = 0;\n\n toggleAllCheckboxChecked: boolean = false;\n toggleAllCheckboxIndeterminate: boolean = false;\n\n isLoading: number = 0;\n\n // @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\n @ViewChild('formfieldSelectSearchInput', { read: GIPIFormFieldComponent, static: true }) formfieldSelectSearchInput: GIPIFormFieldComponent;\n\n @ViewChild('formFieldSelect', { read: GIPIFormFieldComponent, static: false }) formFieldSelect: GIPIFormFieldComponent;\n\n @ViewChild('overlaySelect', { read: GIPIOverlayComponent, static: false }) overlaySelect: GIPIOverlayComponent;\n\n @ViewChild(CdkVirtualScrollViewport, { static: false }) private cdkVirtualScrollViewPort: CdkVirtualScrollViewport;\n\n @Input() id: string | number = this._name;\n\n @Input() name: string = this._name;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() placeholder: string = 'Selecionar';\n\n @Input() labelSelectAll: string = 'Selecionar todos';\n\n @Input() multiple: boolean = false;\n\n // Mostrar/ocultar o botão limpar opções selecionadas\n @Input() showClear: boolean = false;\n\n @Input() showOnFocus: boolean = true;\n\n @Input() hideOnEscape: boolean = true;\n\n @Input() showSelectAll: boolean = false;\n\n @Input() showFooter: boolean = false;\n\n @Input() infiniteScroll: boolean = true;\n\n @Input() showSearch: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() property: string;\n\n @Input() trackBy: string;\n\n @Input() appendTo: any;\n\n @Input() propertyFn: (obj: T) => string;\n\n @Input() nextBatchFn!: (researchField: string, page: number, paramNextBatch?: any) => Promise<PageDTO<T>>;\n\n @Input() pageSize: number = 5;\n\n // Input search --------\n // Ativar limpar input ao pressionar escape\n @Input() enableClearOnEscapePressed: boolean = true;\n // ---------------------\n\n private _disabled: boolean = false;\n @Input() set disabled(value: boolean) {\n this._disabled = value;\n this._disableInputSearch();\n }\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _loading: boolean = false;\n @Input() set loading(value: boolean) {\n this._loading = value;\n this._disableInputSearch();\n }\n get loading(): boolean {\n return this._loading;\n }\n\n private _paramNextBatch: any;\n @Input() set paramNextBatch(val: any) {\n this._paramNextBatch = val;\n }\n get paramNextBatch(): any {\n return this._paramNextBatch;\n }\n\n private _value: T | T[];\n @Input() set value(value: T | T[]) {\n this._value = value;\n\n if (this.multiple) {\n if (Array.isArray(value) && value && value.length) {\n const firstValue = value[0];\n this.inputFieldValue = this.property ? firstValue[this.property] : this.getPropertyValue(firstValue);\n this.inputFieldValueSelected = value.length;\n } else {\n this.inputFieldValue = '';\n this.inputFieldValueSelected = 0;\n }\n\n } else {\n if (!Array.isArray(value) && value) {\n this.inputFieldValue = this.property ? value[this.property] : this.getPropertyValue(value);\n this.inputFieldValueSelected = 0;\n } else {\n this.inputFieldValue = '';\n this.inputFieldValueSelected = 0;\n }\n }\n\n this.onChange(value);\n this.onSelectChange.emit(value);\n this.onTouch();\n this._changeDetectorRef.markForCheck();\n }\n get value(): T | T[] {\n return this._value;\n }\n\n private _options: T[];\n @Input() set options(val: T[]) {\n this._options = val;\n }\n get options(): T[] {\n return this._options;\n }\n\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClose: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onSelectChange: EventEmitter<T | T[]> = new EventEmitter<T | T[]>();\n @Output() onOpenedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() onSearchChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onAddChange: EventEmitter<AddChange<T>> = new EventEmitter<AddChange<T>>();\n\n get scrollViewportHeight(): number {\n let height: number = 0;\n if (this.options && this.options.length) {\n height = (this.options.length * OPTION_HEIGHT_PX) - (this.pageSize === this.options.length ? OPTION_HEIGHT_PX : 0);\n }\n\n if (!ObjectUtil.isNull(this.overlaySelect)) {\n this.overlaySelect.alignOverlay();\n }\n\n return height;\n }\n\n get valueSearch(): string {\n return this._formControlSearch.value;\n }\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit() {\n this._formControlSearch.valueChanges\n .pipe(\n map((value: string): string => value),\n debounceTime(1000),\n distinctUntilChanged(),\n takeUntil(this._onDestroy)\n )\n .subscribe((value: string): void => this._searchChange(value));\n\n this.indeterminateAllCheckbox();\n }\n\n ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n trackByOption: TrackByFunction<T> = (index, obj) => obj && this.trackBy && obj[this.trackBy] ? obj[this.trackBy] : obj;\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this._changeDetectorRef.markForCheck();\n }\n\n compareFn(f1: T, f2: T): boolean {\n if (!this.property && !this.propertyFn) {\n throw new Error('O parâmetro property ou propertyFn deve conter um valor');\n }\n\n if (!this.property && this.propertyFn && f1 && f2) {\n const propF1 = this.getPropertyValue(f1);\n const propF2 = this.getPropertyValue(f2);\n return propF1 === propF2;\n }\n\n return f1 && f2 && f1[this.property] === f2[this.property];\n }\n\n public getPropertyValue(entity: T): string {\n if (!ObjectUtil.isNull(entity)) {\n if (!ObjectUtil.isNull(this.propertyFn)) {\n return this.propertyFn(entity);\n } else if (this.property) {\n return this._getValue(entity, this.property);\n }\n }\n return '';\n }\n\n private _getValue(entity: T, property: string): string {\n const properties: string[] = property.split('.');\n let value: any = entity;\n\n for (let i: number = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n return value;\n }\n }\n }\n\n public onInputFocus(event: Event): void {\n if (this.showOnFocus && !this.disabled) {\n this.showOverlay();\n this.onFocus.emit(event);\n }\n }\n\n public onInputClick(): void {\n if (!this.disabled) {\n this.showOverlay();\n\n if (!this._overlayVisible) {\n this.formFieldSelect.focus();\n }\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputKeydown(event: any): void {\n if (this.disabled) {\n event.stopImmediatePropagation();\n return;\n }\n\n if (\n ((event.code.toUpperCase() === 'ESCAPE') && this.hideOnEscape) ||\n ((event.code.toUpperCase() === 'ENTER') || (event.code.toUpperCase() === 'NUMPADENTER')) ||\n (event.code.toUpperCase() === 'TAB')\n ) {\n if (this._overlayVisible) {\n this.hideOverlay();\n event.preventDefault();\n }\n }\n }\n\n public onClearOptionsClick(event: Event): void {\n if (this.disabled) {\n event.stopImmediatePropagation();\n return;\n }\n\n if (this.multiple && Array.isArray(this.value)) {\n this.value = [];\n } else {\n this.value = null;\n }\n\n this.toggleAllCheckboxChecked = false;\n this.toggleAllCheckboxIndeterminate = false;\n this._changeDetectorRef.detectChanges();\n this.onSelectChange.emit(this.value);\n\n this._searchSelectInputFocus();\n event.stopImmediatePropagation();\n }\n\n public showOverlay(): void {\n if (!this._overlayVisible) {\n this._overlayVisible = true;\n this.indeterminateAllCheckbox();\n this.onOpenedChange.emit(this._overlayVisible);\n this._changeDetectorRef.detectChanges();\n\n if (ObjectUtil.isNull(this._cache)) {\n this.onScroll();\n }\n }\n }\n\n public hideOverlay(): void {\n this._overlayVisible = false;\n this.onOpenedChange.emit(this._overlayVisible);\n this._cache = {};\n this._changeDetectorRef.markForCheck();\n }\n\n public toggleOverlay(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n if (!this._overlayVisible) {\n this.showOverlay();\n } else {\n this.hideOverlay();\n }\n }\n }\n\n // Infinite scroll ------------------------------------------------\n async onScroll() {\n if (!this.infiniteScroll) {\n return;\n }\n if (ObjectUtil.isNull(this.nextBatchFn)) {\n console.error('A função \"nextBatchFn\" é obrigatória e não foi informada');\n return;\n }\n if (!ObjectUtil.isNull(this._pageModel) && (this._pageModel.totalPages === this._pageModel.number)) {\n return;\n }\n\n const pageNumber: number = !ObjectUtil.isNull(this._pageModel) ? this._pageModel.number + 1 : 0;\n\n // Mantemos um índice de páginas carregadas pelo servidor para não carregarmos os mesmos dados duas vezes\n // Isso é baseado na página do servidor, não na interface do usuário\n if (ObjectUtil.isNull(this._cache)) {\n this._cache = {};\n }\n if (this._cache[pageNumber]) {\n return;\n }\n this._cache[pageNumber] = true;\n\n this.isLoading++;\n\n await this.nextBatchFn(this._formControlSearch.value, pageNumber, this.paramNextBatch).then(pagedData => {\n this._pageModel = pagedData;\n this._totalOptions = pagedData.totalElements;\n\n if (!this.options) {\n this.options = [];\n }\n\n // Deslocamento da linha inicial. Esta é a posição para inserir os novos dados\n const start = this._pageModel.number * this.pageSize;\n\n // Copiar dados existentes\n const options = [...this.options];\n\n // Inserir novas linhas na posição correta\n options.splice(start, this.pageSize, ...pagedData.content);\n\n // Volta o array de opções ja atualizado para exibição\n this.options = options;\n\n if (this.toggleAllCheckboxChecked) {\n this.onChangeToggleAllCheckbox();\n } else {\n this.indeterminateAllCheckbox();\n }\n\n\n // Diminuir o contador de chamadas de API pendentes\n this.isLoading--;\n }, error => {\n this.isLoading = 0;\n });\n\n if (!ObjectUtil.isNull(this.cdkVirtualScrollViewPort) && this.options && this.options.length) {\n this.cdkVirtualScrollViewPort.scrollToIndex(this.options.length, 'smooth');\n this.cdkVirtualScrollViewPort.checkViewportSize();\n }\n\n this._changeDetectorRef.detectChanges();\n }\n\n // Options --------------------------------------------------------\n public onButtonSelectOptionClick(option: T): void {\n if (this.multiple) {\n if (!this.value) {\n this.value = [];\n }\n\n if (Array.isArray(this.value)) {\n const indexOption: number = this.value.findIndex(o => ObjectUtil.equals(o, option));\n if (indexOption >= 0) {\n const lValue = this.value;\n lValue.splice(indexOption, 1);\n this.value = [...lValue];\n } else {\n this.value = [...this.value, option];\n }\n }\n } else {\n if (!Array.isArray(this.value)) {\n this.value = option;\n }\n }\n\n this.indeterminateAllCheckbox();\n\n this.onSelectChange.emit(this.value);\n this._changeDetectorRef.detectChanges();\n }\n\n public indeterminateAllCheckbox(): void {\n if (this.multiple && this.showSelectAll) {\n if (\n !Array.isArray(this.value) ||\n !this.value ||\n (this.value && !this.value.length) ||\n !this.options ||\n (this.options && !this.options.length)\n ) {\n this.toggleAllCheckboxChecked = false;\n this.toggleAllCheckboxIndeterminate = false;\n }\n\n if (Array.isArray(this.value)) {\n if (this.infiniteScroll) {\n this.toggleAllCheckboxChecked = this.value && this._pageModel && (this.value.length > 0) && (this._totalOptions > 0) && (this.value.length === this._totalOptions);\n this.toggleAllCheckboxIndeterminate = (this.value.length > 0) && (this.value.length < this._totalOptions);\n } else {\n this.toggleAllCheckboxChecked = this.value && (this.value.length > 0) && this.options && (this.options.length > 0) && (this.value.length === this.options.length);\n this.toggleAllCheckboxIndeterminate = (this.value.length > 0) && (this.options.length > 0) && (this.value.length < this.options.length);\n }\n }\n\n this._changeDetectorRef.detectChanges();\n }\n }\n\n public optionCheckboxIsChecked(option: T): boolean {\n if (!this.multiple) {\n return false;\n }\n\n if (Array.isArray(this.value) && (this.value && this.value.length)) {\n this._changeDetectorRef.markForCheck();\n return this.value.findIndex(o => ObjectUtil.equals(o, option)) > -1;\n }\n }\n\n public onClickSelectAllByOption(): void {\n if (this.disabled || this.loading) {\n return;\n }\n\n this.toggleAllCheckboxChecked = !this.toggleAllCheckboxChecked;\n this.onChangeToggleAllCheckbox();\n }\n\n public onChangeToggleAllCheckbox(): void {\n if (this.multiple) {\n if (this.toggleAllCheckboxChecked) {\n this.value = [...this.options];\n } else {\n this.value = [];\n }\n\n this.indeterminateAllCheckbox();\n }\n }\n\n public onClickAddOptions(): void {\n if (this.multiple && !this.showSelectAll) {\n const addChange: AddChange<T> = {\n values: this.value,\n selectedAll: false\n };\n this.onAddChange.emit(addChange);\n }\n }\n\n // Input search --------------------------------------------------\n private _disableInputSearch(): void {\n if (this.disabled || this.loading) {\n this._formControlSearch.disable();\n } else {\n this._formControlSearch.enable();\n }\n }\n\n private _searchChange(value: string): void {\n if (this._overlayVisible) {\n this.loading = true;\n this.onSearchChange.emit(value);\n\n this._pageModel = null;\n this.options = [];\n this._cache = {};\n\n this.onScroll();\n this.loading = false;\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * Focaliza o input de pesquisa\n */\n public _searchSelectInputFocus(): void {\n if (ObjectUtil.isNull(this.formfieldSelectSearchInput) || !this._overlayVisible) {\n return;\n }\n // Seta o foco\n this.formfieldSelectSearchInput.focus();\n }\n\n /**\n * Redefine o valor do input de pesquisa atual\n * @param focus se deve focar após a redefinição\n */\n public _searchSelectInputReset(focus?: boolean): void {\n this._formControlSearch.setValue('');\n if (focus) {\n this._searchSelectInputFocus();\n }\n }\n\n /**\n * Manipula o evento de tecla pressionada.\n * Permite, por ex. selecionando com a tecla enter, navegando com as teclas de seta, etc.\n * @param event\n */\n public onInputSearchKeydown(event: KeyboardEvent): void {\n // Evite a propagação de todos os caracteres alfanuméricos para evitar problemas de seleção\n if (\n (event.key && event.key.length === 1) ||\n (event.keyCode >= A && event.keyCode <= Z) ||\n (event.keyCode >= ZERO && event.keyCode <= NINE) ||\n (event.keyCode === SPACE)\n ) {\n event.stopPropagation();\n }\n\n if (this.multiple && event.key && event.keyCode === ENTER) {\n // Recupere o foco após a seleção múltipla, para que possamos digitar ainda mais\n setTimeout((): void => this._searchSelectInputFocus());\n }\n\n // Caso especial, se clicar em Escape, se a entrada estiver vazia, feche o menu suspenso, caso contrário, esvazie o campo de pesquisa\n if (this.enableClearOnEscapePressed && (event.keyCode === ESCAPE) && this._formControlSearch.value) {\n this._searchSelectInputReset(true);\n event.stopPropagation();\n }\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, Renderer2, TrackByFunction, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, NgModel } from '@angular/forms';\nimport { MatRadioChange } from '@angular/material/radio';\n\nimport { PageDTO } from '../../../core/models/dto/page.dto';\nimport { ArrayUtil } from '../../../core/utils/array.util';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { StringUtil } from '../../../core/utils/string.util';\nimport { GIPIFormFieldComponent } from '../form-field/form-field.component';\nimport { GIPIInputSelectComponent } from '../input-select/input-select.component';\nimport { GIPIOverlayComponent } from '../overlay/overlay.component';\n\nexport type FilterType = 'TO_OMIT' | 'ALL' | 'BY_SELECTION';\n\nexport interface ApplyChange<T> {\n filterType: FilterType;\n values: T[];\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-select-listbox`,\n exportAs: 'gipiInputSelectListbox',\n templateUrl: './input-select-listbox.component.html',\n styleUrls: ['./input-select-listbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputSelectListboxComponent => GIPIInputSelectListboxComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-select-listbox',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputSelectListboxComponent<T> implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-input-select-listbox-${nextUniqueId++}`;\n\n _isOverlayChildrenClicked: boolean = false;\n\n _overlayVisible: boolean = false;\n\n _selectEntityOpened: boolean = false;\n\n _radioValue: FilterType = 'ALL';\n\n @ViewChild('formFieldSelectListbox', { read: GIPIFormFieldComponent, static: false }) formFieldSelectListbox: GIPIFormFieldComponent;\n\n @ViewChild('overlaySelectListbox', { read: GIPIOverlayComponent, static: false }) overlaySelectListbox: GIPIOverlayComponent;\n\n @ViewChild('inputSelect', { read: GIPIInputSelectComponent, static: false }) inputSelect: GIPIInputSelectComponent<T>;\n\n @Input() id: string | number = this._name;\n\n @Input() name: string = this._name;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() placeholder: string = 'Selecionar';\n\n @Input() placeholderSelected: string = 'Opções selecionadas';\n\n @Input() placeholderSearch: string = 'Selecionar';\n\n @Input() multiple: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() readonly: boolean;\n\n @Input() required: boolean;\n\n @Input() hideFilterType: boolean = false;\n\n @Input() showOnFocus: boolean = true;\n\n @Input() hideOnEscape: boolean = true;\n\n @Input() showSearch: boolean = true;\n\n @Input() property: string;\n\n @Input() trackBy: string;\n\n @Input() propertyFn: (obj: T) => string;\n\n @Input() nextBatchFn: (researchField: string, page: number, paramNextBatch?: any) => Promise<PageDTO<T>>;\n\n _value: T[];\n @Input() set value(value: T[]) {\n this._value = value;\n this.onChange(value);\n this.onTouch();\n\n if (!ObjectUtil.isNull(this.overlaySelectListbox)) {\n this.overlaySelectListbox.alignOverlay();\n }\n }\n get value(): T[] {\n return this._value;\n }\n\n _options: T[];\n @Input() set options(val: T[]) {\n this._options = val;\n }\n get options(): T[] {\n return this._options;\n }\n\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClose: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onOpenedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() onSelectChange: EventEmitter<T[]> = new EventEmitter<T[]>();\n @Output() onApply: EventEmitter<ApplyChange<T>> = new EventEmitter<ApplyChange<T>>();\n\n get valueInput(): string {\n if (this._radioValue === 'ALL') {\n return 'Todas as opções selecionadas';\n }\n\n if (!ArrayUtil.isEmpty(this.value)) {\n return this.placeholderSelected;\n }\n\n return !StringUtil.isEmpty(this.placeholder) ? this.placeholder : '';\n }\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n ) { }\n\n ngOnInit() { }\n\n trackByOption: TrackByFunction<T> = (index, obj) => this.trackBy ? obj[this.trackBy] : obj;\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this._changeDetectorRef.markForCheck();\n }\n\n public getPropertyValue(entity: T): string {\n if (!ObjectUtil.isNull(entity)) {\n if (!ObjectUtil.isNull(this.propertyFn)) {\n return this.propertyFn(entity);\n } else if (this.property) {\n return this._getValue(entity, this.property);\n }\n }\n return '';\n }\n\n private _getValue(entity: T, property: string): string {\n const properties: string[] = property.split('.');\n let value: any = entity;\n\n for (let i: number = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n return value;\n }\n }\n }\n\n public onInputFocus(event: Event): void {\n if (this.showOnFocus && !this.disabled) {\n this.showOverlay();\n }\n this.onFocus.emit(event);\n }\n\n public onInputClick(): void {\n if (!this.disabled) {\n this.showOverlay();\n\n if (!this._overlayVisible) {\n this.formFieldSelectListbox.focus();\n }\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n event.stopImmediatePropagation();\n return;\n }\n\n if (\n ((event.code.toUpperCase() === 'ESCAPE') && this.hideOnEscape) ||\n ((event.code.toUpperCase() === 'ENTER') || (event.code.toUpperCase() === 'NUMPADENTER')) ||\n (event.code.toUpperCase() === 'TAB')\n ) {\n if (this._overlayVisible) {\n this.hideOverlay();\n }\n }\n }\n\n public showOverlay(): void {\n if (!this._overlayVisible) {\n this._overlayVisible = true;\n this.onOpenedChange.emit(this._overlayVisible);\n this._changeDetectorRef.detectChanges();\n }\n }\n\n public hideOverlay(): void {\n this._overlayVisible = false;\n this._changeDetectorRef.markForCheck();\n }\n\n public toggleOverlay(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n if (!this._overlayVisible) {\n this.showOverlay();\n } else {\n this.hideOverlay();\n }\n }\n }\n\n public onSelectEntityOpened(isOpened: boolean): void {\n this._selectEntityOpened = isOpened;\n\n if (!ObjectUtil.isNull(this.overlaySelectListbox)) {\n this.overlaySelectListbox.alignOverlay();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n onChangeInputSelect(values: T[], ngModelRadioGroup: NgModel): void {\n if ((!ArrayUtil.isEmpty(values)) && (this._radioValue === 'ALL')) {\n this.onClickRadioButton('BY_SELECTION', ngModelRadioGroup);\n }\n }\n\n @HostListener('window:resize', ['$event'])\n resizeOverlay(event: UIEvent): void {\n if (this._overlayVisible) {\n this.hideOverlay();\n this._changeDetectorRef.detectChanges();\n }\n }\n\n documentClick = () => {\n return this._selectEntityOpened;\n }\n\n // Options --------------------------------------------------------\n onRemoveOptionsSelected(option: T, inputSelect: GIPIInputSelectComponent<T>): void {\n const values = [...this.value];\n const index: number = values.findIndex(o => o === option);\n if (index >= 0) {\n values.splice(index, 1);\n this.value = [...values];\n\n if (!ArrayUtil.isEmpty(values)) {\n inputSelect.indeterminateAllCheckbox();\n } else {\n inputSelect.toggleAllCheckboxChecked = false;\n inputSelect.toggleAllCheckboxIndeterminate = false;\n }\n\n this._changeDetectorRef.detectChanges();\n }\n }\n\n onChangeRadioGroup(radioChange: MatRadioChange, ngModel: NgModel): void {\n if ((radioChange.value === this._radioValue) || (this._radioValue === 'BY_SELECTION')) {\n ngModel.reset();\n this._radioValue = 'BY_SELECTION';\n } else {\n if ((radioChange.value === 'ALL') && (!ArrayUtil.isEmpty(this.value))) {\n ngModel.reset();\n this._radioValue = 'BY_SELECTION';\n } else {\n this._radioValue = radioChange.value;\n }\n }\n\n if (!ObjectUtil.isNull(this.overlaySelectListbox)) {\n this.overlaySelectListbox.alignOverlay();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n onClickRadioButton(radioValue: FilterType, ngModel: NgModel): void {\n if (radioValue === this._radioValue) {\n ngModel.reset();\n this._radioValue = 'BY_SELECTION';\n } else {\n if ((radioValue === 'ALL') && (!ArrayUtil.isEmpty(this.value))) {\n ngModel.reset();\n this._radioValue = 'BY_SELECTION';\n } else {\n this._radioValue = radioValue;\n }\n }\n\n if (!ObjectUtil.isNull(this.overlaySelectListbox)) {\n this.overlaySelectListbox.alignOverlay();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n onClickClear(inputSelect?: GIPIInputSelectComponent<T>): void {\n this.value = [];\n if (!ObjectUtil.isNull(this.inputSelect)) {\n inputSelect = this.inputSelect;\n }\n if (!ObjectUtil.isNull(inputSelect)) {\n inputSelect.toggleAllCheckboxChecked = false;\n inputSelect.toggleAllCheckboxIndeterminate = false;\n }\n\n this._radioValue = this.hideFilterType ? 'BY_SELECTION' : 'ALL';\n\n if (!ObjectUtil.isNull(this.overlaySelectListbox)) {\n this.overlaySelectListbox.alignOverlay();\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n onClickApply(): void {\n const applyChange: ApplyChange<T> = {\n filterType: this._radioValue,\n values: this.value,\n };\n this.onApply.emit(applyChange);\n this.hideOverlay();\n\n }\n\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, NINE, SPACE, UP_ARROW, Z, ZERO } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, Inject, Input, OnChanges, OnDestroy, OnInit, Optional, QueryList, SimpleChanges, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormField, MatOption, MatSelect } from '@angular/material';\nimport { BehaviorSubject, Observable, Subject, combineLatest, of } from 'rxjs';\nimport { delay, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\n\n@Component({\n selector: `gipi-input-search`,\n exportAs: 'gipiInputSearch',\n templateUrl: './input-search.component.html',\n styleUrls: ['./input-search.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputSearchComponent => GIPIInputSearchComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-search',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputSearchComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n\n // Valor de pesquisa atual\n get value(): string {\n return this._formControl.value;\n }\n\n private _lastExternalInputValue: string;\n\n // Referência às opções MatSelect\n public _options$: BehaviorSubject<QueryList<MatOption>> = new BehaviorSubject<QueryList<MatOption>>(null);\n public set _options(_options: QueryList<MatOption>) {\n this._options$.next(_options);\n }\n public get _options(): QueryList<MatOption> {\n return this._options$.getValue();\n }\n\n private optionsList$: Observable<MatOption[]> = this._options$.pipe(\n switchMap((_options: QueryList<MatOption>): Observable<any> => _options\n ? _options.changes.pipe(\n map((options: any): any => options.toArray()),\n startWith<MatOption[]>(_options.toArray()),)\n : of(null)\n )\n );\n\n private optionsLength$: Observable<number> = this.optionsList$.pipe(\n map((options: MatOption[]): number => options ? options.length : 0)\n );\n\n public _formControl: FormControl = new FormControl('');\n\n // Se deve mostrar a mensagem sem entradas encontradas\n public _showNoEntriesFound$: Observable<boolean> = combineLatest([\n this._formControl.valueChanges,\n this.optionsLength$\n ]).pipe(\n map(([value, optionsLength]: [any, number]): boolean => value && optionsLength === this.getOptionsLengthOffset())\n );\n\n // Subject emitido quando o componente foi destruído\n private _onDestroy: Subject<void> = new Subject<void>();\n\n // Referência ao descendente ativo para suporte ARIA.\n private activeDescendant: HTMLElement;\n\n @Input() placeholderLabel: string = 'Pesquisar';\n\n @Input() clearSearchInput: boolean = true;\n\n // Se deve mostrar o indicador de pesquisa em andamento\n @Input() searching: boolean = false;\n\n // Desativa o foco inicial do campo de entrada\n @Input() disableInitialFocus: boolean = false;\n\n // Ativar limpar input ao pressionar escape\n @Input() enableClearOnEscapePressed: boolean = false;\n\n /**\n * Impede que a chave home/end seja propagada para mat-select,\n * permitindo mover o cursor dentro da entrada de pesquisa em vez de navegar pelas opções\n */\n @Input() preventHomeEndKeyPropagation: boolean = false;\n\n // Desativa a rolagem para as opções ativas quando a lista de opções é alterada. Útil para pesquisa do lado do servidor\n @Input() disableScrollToActiveOnOptionsChanged: boolean = false;\n\n // Mostrar/ocultar o botão limpar pesquisa da entrada de pesquisa\n @Input() hideClearSearchButton: boolean = false;\n\n // Referência ao campo de entrada de pesquisa\n @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\n\n // Referência ao campo de entrada de pesquisa\n @ViewChild('innerSelectSearch', { read: ElementRef, static: true }) innerSelectSearch: ElementRef;\n\n // Adiciona a classe mat-select-search-inside-mat-option se o itss-input-search estiver\n // dentro do mat-option\n @HostBinding('class.mat-select-search-inside-mat-option')\n get isInsideMatOption(): boolean {\n return !!this.matOption;\n }\n\n constructor(\n @Inject(MatSelect) public matSelect: MatSelect,\n public changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() @Inject(MatOption) public matOption: MatOption = null,\n @Optional() @Inject(MatFormField) public matFormField: MatFormField = null,\n ) { }\n\n ngOnInit(): void {\n // Definir classe de opção mat personalizada se o componente foi colocado dentro de uma opção mat\n if (this.matOption) {\n this.matOption.disabled = true;\n this.matOption._getHostElement().classList.add('contains-mat-select-search');\n this.matOption._getHostElement().setAttribute('aria-hidden', 'true');\n } else {\n console.error('<gipi-select-search> deve ser colocado dentro de um elemento <mat-option>');\n }\n\n // Quando o painel suspenso de seleção é aberto ou fechado\n this.matSelect.openedChange\n .pipe(\n delay(1),\n takeUntil(this._onDestroy)\n )\n .subscribe((opened: boolean): void => {\n if (opened) {\n this.updateInputWidth();\n\n // Focar o campo de pesquisa ao abrir\n if (!this.disableInitialFocus) {\n this._focus();\n }\n } else {\n // Limpá-lo ao fechar\n if (this.clearSearchInput) {\n this._reset();\n }\n }\n });\n\n // Definir o primeiro item ativo após as opções alteradas\n this.matSelect.openedChange\n .pipe(\n take(1),\n switchMap((): Observable<any> => {\n this._options = this.matSelect.options;\n\n // Variável de fechamento para rastrear a primeira opção mais recente.\n // Para evitar que a lista role para o topo quando as opções são adicionadas ao final da lista\n // (por exemplo: rolagem infinita), comparamos apenas as alterações nas primeiras opções para\n // determinar se devemos definir o primeiro item como ativo. Isso evita a rolagem desnecessária\n // para o topo da lista quando as opções são anexadas, mas permite que o primeiro item da lista\n // seja definido como ativo por padrão quando não há seleção ativa.\n let previousFirstOption: MatOption = this._options.toArray()[this.getOptionsLengthOffset()];\n\n return this._options.changes\n .pipe(\n tap((): void => {\n // Evitar o erro \"expression has been changed\"\n setTimeout((): void => {\n // Converter a QueryList em uma matriz\n const options: MatOption[] = this._options.toArray();\n\n // O verdadeiro primeiro item é compensado por 1\n const currentFirstOption: MatOption = options[this.getOptionsLengthOffset()];\n\n const keyManager: ActiveDescendantKeyManager<MatOption> = this.matSelect._keyManager;\n if (keyManager && this.matSelect.panelOpen) {\n\n // Definir primeiro item ativo e largura de entrada\n\n // Verifique se a primeira opção nessas alterações é diferente da anterior.\n const firstOptionIsChanged: boolean = !this.matSelect.compareWith(previousFirstOption, currentFirstOption);\n\n // CASO: A primeira opção é diferente agora.\n // Indica que devemos defini-lo como ativo e rolar para o topo.\n if (firstOptionIsChanged\n || !keyManager.activeItem\n || !options.find((option: MatOption): boolean => this.matSelect.compareWith(option, keyManager.activeItem))) {\n keyManager.setFirstItemActive();\n }\n\n // Aguarde as alterações na largura do painel\n setTimeout((): void => {\n this.updateInputWidth();\n });\n }\n\n // Atualize nossa referência\n previousFirstOption = currentFirstOption;\n });\n })\n );\n })\n )\n .pipe(takeUntil(this._onDestroy))\n .subscribe();\n\n // Adicione ou remova a classe css dependendo se deseja mostrar a mensagem sem entradas encontradas\n // obs: isso é hacky\n this._showNoEntriesFound$.pipe(\n takeUntil(this._onDestroy)\n ).subscribe((showNoEntriesFound: boolean): void => {\n // Definir nenhuma classe de entrada encontrada na mat-option\n if (this.matOption) {\n if (showNoEntriesFound) {\n this.matOption._getHostElement().classList.add('mat-select-search-no-entries-found');\n } else {\n this.matOption._getHostElement().classList.remove('mat-select-search-no-entries-found');\n }\n }\n });\n\n // Redimensione a largura de entrada quando a viewport for redimensionada,\n // ou seja, a largura do acionador pode ser redimensionada.\n this._viewportRuler.change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe((): void => {\n if (this.matSelect.panelOpen) {\n this.updateInputWidth();\n }\n });\n\n this.optionsList$.pipe(\n takeUntil(this._onDestroy)\n ).subscribe((): void => {\n // Atualizar visualização quando as opções disponíveis mudarem\n this.changeDetectorRef.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.searching) {\n this._formControl.disable();\n } else {\n this._formControl.enable();\n this._focus();\n }\n }\n\n ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n onTouched: Function = (_: any): void => { };\n\n registerOnChange(fn: (value: string) => void): void {\n this._formControl.valueChanges.pipe(\n filter((value: any): boolean => value !== this._lastExternalInputValue),\n tap((): any => this._lastExternalInputValue = undefined),\n takeUntil(this._onDestroy)\n ).subscribe(fn);\n }\n\n registerOnTouched(fn: Function): void {\n this.onTouched = fn;\n }\n\n writeValue(value: string): void {\n this._lastExternalInputValue = value;\n this._formControl.setValue(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Manipula o evento de tecla pressionada com MatSelect.\n * Permite, por ex. selecionando com a tecla enter, navegando com as teclas de seta, etc.\n * @param event\n */\n _handleKeydown(event: KeyboardEvent): void {\n // Evite a propagação de todos os caracteres alfanuméricos para evitar problemas de seleção\n if ((event.key && event.key.length === 1) ||\n (event.keyCode >= A && event.keyCode <= Z) ||\n (event.keyCode >= ZERO && event.keyCode <= NINE) ||\n (event.keyCode === SPACE)\n || (this.preventHomeEndKeyPropagation && (event.keyCode === HOME || event.keyCode === END))\n ) {\n event.stopPropagation();\n }\n\n if (this.matSelect.multiple && event.key && event.keyCode === ENTER) {\n // Recupere o foco após a seleção múltipla, para que possamos digitar ainda mais\n setTimeout((): void => this._focus());\n }\n\n // Caso especial, se clicar em Escape, se a entrada estiver vazia, feche o menu suspenso, caso contrário, esvazie o campo de pesquisa\n if (this.enableClearOnEscapePressed === true && event.keyCode === ESCAPE && this.value) {\n this._reset(true);\n event.stopPropagation();\n }\n }\n\n /**\n * Manipula o evento de ativação de chave com MatSelect.\n * Permite, por ex. o anúncio do Descendente atualmente ativo por leitores de tela.\n */\n _handleKeyup(event: KeyboardEvent): void {\n if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {\n const ariaActiveDescendantId: string = this.matSelect._getAriaActiveDescendant();\n const index: number = this._options.toArray().findIndex((item: MatOption): boolean => item.id === ariaActiveDescendantId);\n if (index !== -1) {\n this.unselectActiveDescendant();\n this.activeDescendant = this._options.toArray()[index]._getHostElement();\n this.activeDescendant.setAttribute('aria-selected', 'true');\n this.searchSelectInput.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);\n }\n }\n }\n\n onBlur(): void {\n this.unselectActiveDescendant();\n this.onTouched();\n }\n\n /**\n * Focaliza o campo de entrada de pesquisa\n */\n public _focus(): void {\n if (!this.searchSelectInput || !this.matSelect.panel) {\n return;\n }\n // salve e restaure o scrollTop do painel, pois será redefinido por focus ()\n // obs: isso é hacky\n const panel: any = this.matSelect.panel.nativeElement;\n const scrollTop: any = panel.scrollTop;\n\n // Seta o foco\n this.searchSelectInput.nativeElement.focus();\n\n panel.scrollTop = scrollTop;\n }\n\n /**\n * Redefine o valor de pesquisa atual\n * @param focus se deve focar após a redefinição\n */\n public _reset(focus?: boolean): void {\n this._formControl.setValue('');\n if (focus) {\n this._focus();\n }\n }\n\n /**\n * Defina a largura do innerSelectSearch para ajustar até mesmo as barras de rolagem personalizadas\n * E apoiar todos os sistemas de operação\n */\n public updateInputWidth(): void {\n if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\n return;\n }\n let element: HTMLElement = this.innerSelectSearch.nativeElement;\n let panelElement: HTMLElement;\n while (element = element.parentElement) {\n if (element.classList.contains('mat-select-panel')) {\n panelElement = element;\n break;\n }\n }\n if (panelElement) {\n this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\n }\n }\n\n /**\n * Determine o deslocamento para o comprimento que pode ser causado pelo matOption opcional usado como uma entrada de pesquisa.\n */\n private getOptionsLengthOffset(): number {\n if (this.matOption) {\n return 1;\n } else {\n return 0;\n }\n }\n\n private unselectActiveDescendant(): void {\n if (this.activeDescendant) {\n this.activeDescendant.removeAttribute('aria-selected');\n }\n this.searchSelectInput.nativeElement.removeAttribute('aria-activedescendant');\n }\n\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TrackByFunction, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSelect } from '@angular/material/select';\nimport { Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\nimport { AbstractModel, ArrayUtil, ObjectUtil, PageDTO, StringUtil } from '../../../core';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-select-paged`,\n exportAs: 'gipiInputSelectPaged',\n templateUrl: './input-select-paged.component.html',\n styleUrls: ['./input-select-paged.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputSelectPagedComponent => GIPIInputSelectPagedComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-select-paged',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputSelectPagedComponent<T> implements OnInit, OnChanges, ControlValueAccessor, OnDestroy {\n\n private _name: string = `gipi-input-select-paged-${nextUniqueId++}`;\n\n valueSearchCtrl: FormControl = new FormControl('');\n\n page: PageDTO<T>;\n\n totalOptions: number = 0;\n\n subscriptions: Subscription[] = [];\n\n searching: boolean = false;\n\n @ViewChild('matSelect', { static: false }) private matSelect: MatSelect;\n\n @ViewChild(CdkVirtualScrollViewport, { static: false }) private cdkVirtualScrollViewPort: CdkVirtualScrollViewport;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string;\n\n @Input() ariaLabel: string;\n\n @Input() placeholder: string = 'Selecionar';\n\n @Input() disabled: boolean;\n\n @Input() required: boolean;\n\n // Mostrar/ocultar o input para pesquisar\n @Input() hideFieldSearch: boolean = false;\n\n // Mostrar/ocultar o botão limpar opções selecionadas\n @Input() showClear: boolean = false;\n\n @Input() debounceTime: number = 1000; // milissegundos\n\n // Valores que não serão exibidos nas opções\n @Input() valuesExclud: T[] = [];\n\n @Input() classSelectPanel: string;\n\n @Input() trackyBy: string = 'id';\n\n @Input() infiniteScroll: boolean = true;\n\n @Input() property: string = 'description';\n\n @Input() propertyFn: (obj: T) => string;\n\n @Input() nextBatchFn: (researchField: string, page: number, paramNextBatch?: any) => Promise<PageDTO<T>>;\n\n private _paramNextBatch: any;\n @Input() set paramNextBatch(val: any) {\n this._paramNextBatch = val;\n }\n get paramNextBatch(): any {\n return this._paramNextBatch;\n }\n\n private _model: T;\n @Input() set model(value: T) {\n this._model = value;\n this.modelChange.emit(this._model);\n this.onChange(this._model);\n this.onTouch(this._model);\n\n this._changeDetectorRef.markForCheck();\n }\n get model(): T {\n return this._model;\n }\n\n private _options: T[] = [];\n @Input() set options(val: T[]) {\n this._options = val;\n }\n get options(): T[] {\n return this._options;\n }\n\n @Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() selectionChange: EventEmitter<any> = new EventEmitter<any>();\n @Output() searchChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n get scrollViewportHeight(): number {\n if (ArrayUtil.isEmpty(this.options)) {\n return 0;\n }\n\n // Cada mat-option possui 3em ou 39px. 3 * quantidade de mat-option\n return (3 * this.options.length);\n };\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n // O debounceTime é utlizado para emitir o valor após o usuário parar\n // de digitar, evitando consulta a toda letra que for digitada.\n // O distinctUntilChanged é utilizado para emitir apenas valores\n // que são diferentes dos valores anteriores emitidos.\n this.subscriptions.push(\n this.valueSearchCtrl.valueChanges\n .pipe(\n map((value: string): string => value),\n debounceTime(this.debounceTime),\n distinctUntilChanged()\n )\n .subscribe((value: string): void => {\n this.onSearchChange(value);\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!ObjectUtil.isNull(changes.model) && !changes.model.isFirstChange()) {\n if (ArrayUtil.isEmpty(this.options) && !ObjectUtil.isNull(this.model)) {\n this.options.push(this.model);\n }\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n trackByOption: TrackByFunction<T> = (index, obj) => obj && this.trackyBy ? obj[this.trackyBy] : obj;\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.model = value;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this._changeDetectorRef.markForCheck();\n }\n\n compareFn(f1: AbstractModel, f2: AbstractModel): boolean {\n return f1 && f2 && f1.id === f2.id;\n }\n\n getPropertyValue(entity: any): string {\n if (!ObjectUtil.isNewModel(entity)) {\n if (!ObjectUtil.isNull(this.propertyFn)) {\n return this.propertyFn(entity);\n }\n return this.getValue(entity, this.property);\n }\n return StringUtil.EMPTY;\n }\n\n getValue(entity: any, property: string): string {\n if (ObjectUtil.isNull(entity)) {\n return '';\n }\n\n const properties: string[] = property.split('.');\n let value: any = entity;\n\n for (let i: number = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n return value;\n }\n }\n }\n\n onSelectionChange(entity: T): void {\n this.selectionChange.emit(entity);\n }\n\n onSearchChange(value: string): void {\n if (this.matSelect.panelOpen) {\n this.searchChange.emit(value);\n\n this.model = null;\n this.onSelectionChange(this.model);\n\n this.page = null;\n this.options = [];\n\n this.onLoadMoreOptions(false);\n }\n }\n\n async onLoadMoreOptions(isInfiniteScroll: boolean, isOpened: boolean = true): Promise<void> {\n if (!this.infiniteScroll) {\n return;\n }\n if (!isOpened) {\n return;\n }\n if (ObjectUtil.isNull(this.nextBatchFn)) {\n console.error('A função nextBatchFn é obrigatória e não foi informada');\n return;\n }\n if (this.searching) {\n return;\n }\n if (!ArrayUtil.isEmpty(this.options) && !ObjectUtil.isNull(this.page)) {\n if (this.options.length === this.page.totalElements) {\n return;\n }\n }\n\n this.cdkVirtualScrollViewPort.scrollToIndex(0, 'smooth');\n this.cdkVirtualScrollViewPort.checkViewportSize();\n\n this.searching = true;\n\n let pageNumber: number = 0;\n if (isInfiniteScroll) {\n pageNumber = !ObjectUtil.isNull(this.page) ? this.page.number + 1 : 1;\n } else {\n this.page = null;\n this.options = [];\n }\n\n await this.nextBatchFn(this.valueSearchCtrl.value, pageNumber, this.paramNextBatch)\n .then(page => {\n this.page = page;\n\n if (!ObjectUtil.isNull(this.page) && !ArrayUtil.isEmpty(this.page.content)) {\n if (!ArrayUtil.isEmpty(this.valuesExclud)) {\n for (let i: number = 0; i < this.valuesExclud.length; i++) {\n const index: number = this.page.content.findIndex(o => this.valuesExclud[i][this.trackyBy] === o[this.trackyBy]);\n this.page.content.splice(index, 1);\n }\n }\n\n this.options = [...this.options, ...this.page.content];\n }\n\n if (!ObjectUtil.isNull(this.model)) {\n const modelInList: T = this.options.find(o => ObjectUtil.equals(o, this.model));\n if (ObjectUtil.isNull(modelInList)) {\n this.options.push(this.model);\n }\n }\n\n this.searching = false;\n })\n .finally(() => {\n this.searching = false;\n });\n\n this._changeDetectorRef.detectChanges();\n }\n\n showClearOptionButton(): boolean {\n let isNewModel: boolean = true;\n if (!ObjectUtil.isNull(this.model)) {\n isNewModel = ObjectUtil.isNewModel(this.model);\n }\n return this.showClear && !isNewModel && (!this.disabled) && (!this.searching);\n }\n\n haveSelected(): boolean {\n const entity: any = this.model;\n if (entity) {\n return entity.id && entity.id > 0;\n }\n return false;\n }\n\n removeOption(): void {\n this.model = null;\n this.onSelectionChange(this.model);\n this.options = [];\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioChange } from '@angular/material/radio';\n\nimport { ArrayUtil } from '../../../core/utils/array.util';\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { GIPIFormFieldComponent } from '../form-field/form-field.component';\nimport { GIPIPopoverTrigger } from '../popover/shared/popover-trigger';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-input-select-radio`,\n exportAs: 'gipiInputSelectRadio',\n templateUrl: './input-select-radio.component.html',\n styleUrls: ['./input-select-radio.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIInputSelectRadioComponent => GIPIInputSelectRadioComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-input-select-radio',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIInputSelectRadioComponent implements OnInit, OnDestroy, ControlValueAccessor {\n\n private _name: string = `gipi-input-select-radio-${nextUniqueId++}`;\n\n _enumList: any[] = [];\n\n @ViewChild('formFieldSelectRadio', { read: GIPIFormFieldComponent, static: false }) formFieldSelectRadio: GIPIFormFieldComponent;\n\n @ViewChild(GIPIPopoverTrigger, { static: false }) popoverTrigger: GIPIPopoverTrigger;\n\n @Input() id: string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() placeholder: string = 'Selecionar';\n\n @Input() required: boolean;\n\n @Input() disabled: boolean = false;\n\n @Input() loading: boolean = false;\n\n @Input() showOnFocus: boolean = true;\n\n @Input() hideOnEscape: boolean = true;\n\n @Input() hideOnClick: boolean = true;\n\n @Input() enum: any;\n\n @Input() sort: (a: any, b: any) => number;\n\n @Input() valuesExclud: string[];\n\n @Input() valuesOmit: string[];\n\n _value: any;\n @Input('value') set value(value: any) {\n this._value = value;\n this.onChange(value);\n this.onTouch();\n }\n get value() {\n return this._value;\n }\n\n @Output() selectionChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onOpenedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n get optionSelected(): string {\n if (this.value && !ArrayUtil.isEmpty(this._enumList)) {\n const selected = this._enumList.find(e => e.key === this.value);\n if (selected) {\n return selected.value;\n }\n }\n\n return '';\n }\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n const lEnumList = Object.keys(this.enum)\n .map(key => ({ key: key, value: this.enum[key] }))\n .sort(this.sort);\n\n if (!ObjectUtil.isNull(this.valuesExclud)) {\n for (let i = 0; i < lEnumList.length; i++) {\n const excludEnum: boolean = this.valuesExclud.some(e => e === lEnumList[i].key);\n if (!excludEnum) {\n this._enumList.push(lEnumList[i]);\n }\n }\n } else {\n this._enumList = lEnumList;\n }\n\n this._changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n if (!ObjectUtil.isNull(this.popoverTrigger)) {\n this.popoverTrigger.destroyPopover();\n }\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n changeRadioGroup({ value }: MatRadioChange): void {\n this.selectionChange.emit(value);\n\n if (this.hideOnClick) {\n this.popoverTrigger.closePopover();\n }\n }\n\n validateOmitByKey(key: string): boolean {\n return !ObjectUtil.isNull(this.valuesOmit) ? !this.valuesOmit.some(el => el === key) : true;\n }\n\n public showPopover(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.popoverTrigger.openPopover();\n }\n }\n\n public closePopover(): void {\n if (this.disabled || this.loading) {\n return;\n } else {\n this.popoverTrigger.closePopover();\n }\n }\n\n public onInputFocus(event: Event): void {\n if (this.showOnFocus && !this.disabled) {\n this.showPopover();\n this.onFocus.emit(event);\n event.stopPropagation();\n }\n }\n\n public onInputClick(event: Event): void {\n if (!this.disabled) {\n this.showPopover();\n\n if (!ObjectUtil.isNull(this.popoverTrigger) && !this.popoverTrigger.popoverOpen) {\n this.formFieldSelectRadio.focus();\n }\n\n event.stopPropagation();\n }\n }\n\n public onInputBlur(event: Event): void {\n if (!this.disabled) {\n this.onBlur.emit(event);\n this.onTouch();\n }\n }\n\n public onInputKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n event.stopImmediatePropagation();\n return;\n }\n\n if (\n ((event.code.toUpperCase() === 'ESCAPE') && this.hideOnEscape) ||\n ((event.code.toUpperCase() === 'ENTER') || (event.code.toUpperCase() === 'NUMPADENTER')) ||\n (event.code.toUpperCase() === 'TAB')\n ) {\n if (!ObjectUtil.isNull(this.popoverTrigger) && this.popoverTrigger.popoverOpen) {\n this.closePopover();\n event.preventDefault();\n }\n }\n }\n\n @HostListener('window:resize', ['$event'])\n onWindowResize(event: UIEvent): void {\n if (!ObjectUtil.isNull(this.popoverTrigger) && this.popoverTrigger.popoverOpen) {\n this.closePopover();\n event.stopPropagation();\n this._changeDetectorRef.detectChanges();\n }\n }\n\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-notification`,\n exportAs: 'gipiNotification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPINotificationComponent => GIPINotificationComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-notification',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPINotificationComponent implements OnInit {\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() buttonPadding: number | string = 4;\n\n @Input() iconWidth: number | string = 24;\n @Input() iconHeight: number | string = 24;\n\n @Input() icon: string = null;\n\n @Input() svgIcon: string = null;\n\n @Input() disabled: string;\n\n @Input() loading: string;\n\n @Input() tooltip: string;\n\n @Output() onShowOverlay: EventEmitter<void> = new EventEmitter<void>();\n @Output('click') onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output('focus') onFocus: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output('blur') onBlur: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-novelties`,\n exportAs: 'gipiNovelties',\n templateUrl: './novelties.component.html',\n styleUrls: ['./novelties.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPINoveltiesComponent => GIPINoveltiesComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-novelties',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPINoveltiesComponent implements OnInit {\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() buttonPadding: number | string = 4;\n\n @Input() iconWidth: number | string = 24;\n @Input() iconHeight: number | string = 24;\n\n @Input() icon: string = null;\n\n @Input() svgIcon: string = null;\n\n @Input() disabled: string;\n\n @Input() loading: string;\n\n @Input() tooltip: string;\n\n @Input() hasNovelties: boolean = false;\n\n @Output() onShowOverlay: EventEmitter<void> = new EventEmitter<void>();\n @Output('click') onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output('focus') onFocus: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output('blur') onBlur: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","import { StringUtil } from './string.util';\n\n/** @dynamic */\nexport class PasswordUtil {\n\n public static isValid(password: string): boolean {\n if (StringUtil.isEmpty(password)) {\n return false;\n }\n\n return (\n this.isValidMinLength(password) &&\n this.isValidMaxLength(password) &&\n this.hasUppercase(password) &&\n this.hasLowercase(password) &&\n this.hasNumber(password) &&\n this.hasSpecialChar(password) &&\n !this.hasBackspace(password)\n );\n }\n\n public static isValidMinLength(password: string): boolean {\n return (password.trim().length > 0) && (password.trim().length >= 6);\n }\n\n public static isValidMaxLength(password: string): boolean {\n return (password.trim().length > 0) && (password.trim().length <= 15);\n }\n\n public static hasUppercase(password: string): boolean {\n return (password.trim().length > 0) && (password.toLowerCase() !== password);\n }\n\n public static hasLowercase(password: string): boolean {\n return (password.trim().length > 0) && (password.toUpperCase() !== password);\n }\n\n public static hasNumber(password: string): boolean {\n return (password.trim().length > 0) && (/\\d/.test(password));\n }\n\n public static hasSpecialChar(password: string): boolean {\n return (password.trim().length > 0) && (/[!@#$%^&*()_={};':\"|,.<>?~]/g.test(password));\n }\n\n public static hasBackspace(password: string): boolean {\n return (password.trim.length > 0) && (/\\s/g.test(password));\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { PasswordUtil } from '../../../core/utils/password.util';\nimport { StringUtil } from '../../../core/utils/string.util';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-password-requeriments`,\n exportAs: 'gipiPasswordRequeriments',\n templateUrl: './password-requeriments.component.html',\n styleUrls: ['./password-requeriments.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIPasswordRequerimentsComponent => GIPIPasswordRequerimentsComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-password-requeriments',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIPasswordRequerimentsComponent implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-password-requeriments-${nextUniqueId++}`;\n\n @Input() id: number | string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() disabled: boolean = false;\n\n private _password: string = '';\n @Input() set password(value: string) {\n if (ObjectUtil.isNull(value)) {\n this._password = '';\n } else {\n this._password = value;\n }\n\n if (StringUtil.isEmpty(this._password)) {\n this.onValid.emit(false);\n } else {\n this.onValid.emit(\n this.isValidMinLength &&\n this.isValidMaxLength &&\n this.hasUppercase &&\n this.hasLowercase &&\n this.hasNumber &&\n // this.hasSpecialChar &&\n !this.hasBackspace\n );\n }\n\n this.onChange(this._password);\n this.onTouch();\n }\n get password(): string {\n return this._password;\n }\n\n get isValidMinLength(): boolean {\n return (this.password.trim().length > 0) && (PasswordUtil.isValidMinLength(this.password));\n }\n\n get isValidMaxLength(): boolean {\n return (this.password.trim().length > 0) && (PasswordUtil.isValidMaxLength(this.password));\n }\n\n get hasUppercase(): boolean {\n return (this.password.trim().length > 0) && (PasswordUtil.hasUppercase(this.password));\n }\n\n get hasLowercase(): boolean {\n return (this.password.trim().length > 0) && (PasswordUtil.hasLowercase(this.password));\n }\n\n get hasNumber(): boolean {\n return (this.password.trim().length > 0) && (PasswordUtil.hasNumber(this.password));\n }\n\n // get hasSpecialChar(): boolean {\n // return (this.password.trim().length > 0) && (PasswordUtil.hasSpecialChar(this.password));\n // }\n\n get hasBackspace(): boolean {\n return (this.password.trim().length > 0) && (PasswordUtil.hasBackspace(this.password));\n }\n\n @Output() onValid: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit() { }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n writeValue(value: any): void {\n this.password = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n setDisabledState?(value: boolean): void {\n this.disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n\n}\n","import { trigger, state, style, animate, transition, AnimationTriggerMetadata, } from '@angular/animations';\n\n/**\n * Abaixo estão todas as animações para o componente popover.\n * A duração da animação e os valores de tempo são baseados no Angular Material.\n */\n\n/**\n * Esta animação controla a entrada e saída do painel popover da página.\n *\n * Quando o painel popover é adicionado ao DOM, ele é dimensionado e esmaecido em sua borda.\n *\n * Quando o painel popover é removido do DOM, ele simplesmente desaparece após um breve atraso para exibir a ondulação.\n */\n\nexport const transformPopover: AnimationTriggerMetadata = trigger('transformPopover', [\n state('enter', style({\n opacity: 1,\n transform: `scale(1)`\n })),\n transition('void => *', [\n style({\n opacity: 0,\n transform: `scale(0)`\n }),\n animate(`200ms cubic-bezier(0.25, 0.8, 0.25, 1)`)\n ]),\n transition('* => void', [\n animate('50ms 100ms linear', style({ opacity: 0 }))\n ])\n]);\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, OnDestroy, OnInit, Output, TemplateRef, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { transformPopover } from './shared/popover-animations';\nimport { throwPopoverInvalidPositionX, throwPopoverInvalidPositionY } from './shared/popover-errors';\nimport { PopoverPanel } from './shared/popover-interfaces';\nimport { PopoverPositionX, PopoverPositionY, PopoverScrollStrategy, PopoverTriggerEvent } from './shared/popover-types';\n\n@Component({\n selector: `gipi-popover`,\n exportAs: 'gipiPopover',\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIPopoverComponent => GIPIPopoverComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-popover',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [\n transformPopover\n ],\n})\nexport class GIPIPopoverComponent implements OnInit, PopoverPanel, OnDestroy {\n\n @HostBinding('attr.role') role: string = 'dialog';\n\n private _popoverWidth: string = 'auto';\n private _positionX: PopoverPositionX = 'after';\n private _positionY: PopoverPositionY = 'below';\n private _triggerEvent: PopoverTriggerEvent = 'hover';\n private _scrollStrategy: PopoverScrollStrategy = 'reposition';\n private _enterDelay: number = 200;\n private _leaveDelay: number = 200;\n private _overlapTrigger: boolean = true;\n private _disableAnimation: boolean = false;\n private _targetOffsetX: number = 0;\n private _targetOffsetY: number = 0;\n private _arrowOffsetX: number = 20;\n private _arrowWidth: number = 8;\n private _arrowColor: string = 'rgba(0, 0, 0, 0.12)';\n private _closeOnClick: boolean = true;\n private _focusTrapEnabled: boolean = true;\n private _focusTrapAutoCaptureEnabled: boolean = true;\n\n /** Objeto de configuração a ser passado para o ngClass do popover */\n _classList: { [key: string]: boolean } = {};\n\n /** Posição do popover */\n public containerPositioning: boolean = false;\n\n /** Fechamento desabilitado no popover */\n public closeDisabled: boolean = false;\n\n /** Objeto de configuração a ser passado para a seta ngStyle do popover */\n public popoverPanelStyles: {};\n\n /** Objeto de configuração a ser passado para a seta ngStyle do popover */\n public popoverArrowStyles: {};\n\n /** Objeto de configuração a ser passado para o conteúdo do popover ngStyle */\n public popoverContentStyles: {};\n\n /** Emite o estado de animação atual sempre que muda. */\n _onAnimationStateChange: EventEmitter<AnimationEvent> = new EventEmitter<AnimationEvent>();\n\n /** Largura do popover */\n @Input()\n get popoverWidth(): string {\n return this._popoverWidth;\n }\n set popoverWidth(value: string) {\n this._popoverWidth = value;\n }\n\n /** Posição do popover no eixo X. */\n @Input('popoverPositionX')\n get positionX(): PopoverPositionX {\n return this._positionX;\n }\n set positionX(value: PopoverPositionX) {\n if (value !== 'before' && value !== 'after') {\n throwPopoverInvalidPositionX();\n }\n this._positionX = value;\n this.setPositionClasses();\n }\n\n /** Posição do popover no eixo Y. */\n @Input('popoverPositionY')\n get positionY(): PopoverPositionY {\n return this._positionY;\n }\n set positionY(value: PopoverPositionY) {\n if (value !== 'above' && value !== 'below') {\n throwPopoverInvalidPositionY();\n }\n this._positionY = value;\n this.setPositionClasses();\n }\n\n /** Evento de gatilho popover */\n @Input('popoverTriggerOn')\n get triggerEvent(): PopoverTriggerEvent {\n return this._triggerEvent;\n }\n set triggerEvent(value: PopoverTriggerEvent) {\n this._triggerEvent = value;\n }\n\n /** Estratégia de rolagem popover */\n @Input('popoverScrollStrategy')\n get scrollStrategy(): PopoverScrollStrategy {\n return this._scrollStrategy;\n }\n set scrollStrategy(value: PopoverScrollStrategy) {\n this._scrollStrategy = value;\n }\n\n /** Atrazo de entrada popover */\n @Input('popoverEnterDelay')\n get enterDelay(): number {\n return this._enterDelay;\n }\n set enterDelay(value: number) {\n this._enterDelay = value;\n }\n\n /** Atraso de saída popover */\n @Input('popoverLeaveDelay')\n get leaveDelay(): number {\n return this._leaveDelay;\n }\n set leaveDelay(value: number) {\n this._leaveDelay = value;\n }\n\n /** Gatilho de sobreposição de popover */\n @Input('popoverOverlapTrigger')\n get overlapTrigger(): boolean {\n return this._overlapTrigger;\n }\n set overlapTrigger(value: boolean) {\n this._overlapTrigger = value;\n }\n\n /** Deslocamento alvo do popover x */\n @Input('popoverOffsetX')\n get targetOffsetX(): number {\n return this._targetOffsetX;\n }\n set targetOffsetX(value: number) {\n this._targetOffsetX = value;\n }\n\n /** Deslocamento do alvo popover y */\n @Input('popoverOffsetY')\n get targetOffsetY(): number {\n return this._targetOffsetY;\n }\n set targetOffsetY(value: number) {\n this._targetOffsetY = value;\n }\n\n /** Deslocamento da seta popover x */\n @Input('popoverArrowOffsetX')\n get arrowOffsetX(): number {\n return this._arrowOffsetX;\n }\n set arrowOffsetX(value: number) {\n this._arrowOffsetX = value;\n }\n\n /** Largura da seta popover */\n @Input('popoverArrowWidth')\n get arrowWidth(): number {\n return this._arrowWidth;\n }\n set arrowWidth(value: number) {\n this._arrowWidth = value;\n }\n\n /** Cor da seta popover */\n @Input('popoverArrowColor')\n get arrowColor(): string {\n return this._arrowColor;\n }\n set arrowColor(value: string) {\n this._arrowColor = value;\n }\n\n /**\n * Contêiner popover fechado ao clicar\n * default: true\n */\n @Input('popoverCloseOnClick')\n get closeOnClick(): boolean {\n return this._closeOnClick;\n }\n set closeOnClick(value: boolean) {\n this._closeOnClick = coerceBooleanProperty(value);\n }\n\n /**\n * Desativar animações de popover e todos os elementos filhos\n * default: false\n */\n @Input('popoverDisableAnimation')\n get disableAnimation(): boolean {\n return this._disableAnimation;\n }\n set disableAnimation(value: boolean) {\n this._disableAnimation = coerceBooleanProperty(value);\n }\n\n /**\n * Armadilha de foco popover usando cdkTrapFocus\n * default: true\n */\n @Input('focusTrapEnabled')\n get focusTrapEnabled(): boolean {\n return this._focusTrapEnabled;\n }\n set focusTrapEnabled(value: boolean) {\n this._focusTrapEnabled = coerceBooleanProperty(value);\n }\n\n /**\n * Captura automática da armadilha de foco popover usando cdkTrapFocusAutoCapture\n * default: true\n */\n @Input('focusTrapAutoCaptureEnabled')\n get focusTrapAutoCaptureEnabled(): boolean {\n return this._focusTrapAutoCaptureEnabled;\n }\n set focusTrapAutoCaptureEnabled(value: boolean) {\n this._focusTrapAutoCaptureEnabled = coerceBooleanProperty(value);\n }\n\n /**\n * Esse método usa classes definidas no elemento popover do host e as aplica no modelo popover\n * exibido no contêiner de sobreposição. Caso contrário, é difícil estilizar o popover de fora do componente.\n * @param classes list of class names\n */\n @Input('class')\n set panelClass(classes: string) {\n if (classes && classes.length) {\n this._classList = classes.split(' ').reduce((obj: any, className: string) => {\n obj[className] = true;\n return obj;\n }, {});\n\n this._elementRef.nativeElement.className = '';\n this.setPositionClasses();\n }\n }\n\n /** Evento emitido quando o popover é fechado. */\n @Output() close: EventEmitter<void> = new EventEmitter<void>();\n\n @ViewChild(TemplateRef, { static: false }) templateRef: TemplateRef<any>;\n\n constructor(private _elementRef: ElementRef, public zone: NgZone) {\n this.setPositionClasses();\n }\n\n ngOnInit(): void { }\n\n ngOnDestroy(): void {\n this._emitCloseEvent();\n this.close.complete();\n }\n\n /** Manipule um evento de teclado do popover, delegando para a ação apropriada. */\n _handleKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case ESCAPE: {\n this._emitCloseEvent();\n return;\n }\n }\n }\n\n /** Isso emite um evento de fechamento no qual o acionador está inscrito. Quando emitido, o gatilho fechará o popover. */\n _emitCloseEvent(): void {\n this.close.emit();\n }\n\n /** Fechar popover ao clicar se closeOnClick for true */\n onClick(): void {\n if (this.closeOnClick) {\n this._emitCloseEvent();\n }\n }\n\n /** Desativa o fechamento do popover ao sair do elemento de gatilho e passar o mouse sobre o popover */\n onMouseOver(): void {\n if (this.triggerEvent === 'hover') {\n this.closeDisabled = true;\n }\n }\n\n /** Habilita o fechamento do popover quando o mouse sai do elemento popover */\n onMouseLeave(): void {\n if (this.triggerEvent === 'hover') {\n this.closeDisabled = false;\n this._emitCloseEvent();\n }\n }\n\n // TODO: Refatore como os estilos são definidos e atualizados no componente, use as melhores práticas.\n // TODO: Se o posicionamento da seta para a esquerda e para a direita for solicitado, veja se a direção flexível pode ser usada para trabalhar com a ordem.\n /** Define os estilos atuais para o popover para permitir a alteração dinâmica das configurações */\n setCurrentStyles(): void {\n\n // TODO: Veja se a posição da seta pode ser calculada automaticamente e permitir a substituição.\n // TODO: Veja se a ordem flexível é uma alternativa melhor para posicionar a seta para cima ou para baixo.\n this.popoverArrowStyles = {\n 'right': this.positionX === 'before' ? (this.arrowOffsetX - this.arrowWidth) + 'px' : '',\n 'left': this.positionX === 'after' ? (this.arrowOffsetX - this.arrowWidth) + 'px' : '',\n 'border-top': this.positionY === 'below' ? this.arrowWidth + 'px solid ' + this.arrowColor : '0px solid transparent',\n 'border-right': 'undefined' === undefined ? this.arrowWidth + 'px solid ' + this.arrowColor : this.arrowWidth + 'px solid transparent',\n 'border-bottom': this.positionY === 'above' ? this.arrowWidth + 'px solid ' + this.arrowColor : this.arrowWidth + 'px solid transparent',\n 'border-left': 'undefined' === undefined ? this.arrowWidth + 'px solid ' + this.arrowColor : this.arrowWidth + 'px solid transparent',\n };\n\n // TODO: Remova se a ordem flexível for adicionada.\n this.popoverContentStyles = {\n 'padding-top': this.overlapTrigger === true ? '0px' : this.arrowWidth + 'px',\n 'padding-bottom': this.overlapTrigger === true ? '0px' : (this.arrowWidth) + 'px',\n 'margin-top': this.overlapTrigger === false && this.positionY === 'below' && this.containerPositioning === false ? -(this.arrowWidth * 2) + 'px' : '0px'\n };\n }\n\n /**\n * É necessário definir classes baseadas em posição para garantir que a animação do painel popover\n * se expanda na direção correta.\n */\n setPositionClasses(posX: PopoverPositionX = this.positionX, posY: PopoverPositionY = this.positionY): void {\n this._classList['popover-before'] = posX === 'before';\n this._classList['popover-after'] = posX === 'after';\n this._classList['popover-above'] = posY === 'above';\n this._classList['popover-below'] = posY === 'below';\n }\n\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: 'popover-target, [popoverTarget]',\n exportAs: 'popoverTarget'\n})\nexport class GIPIPopoverTarget {\n constructor(public _elementRef: ElementRef) { }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioChange } from '@angular/material';\n\nimport { ObjectUtil } from '../../../core';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: `gipi-radio-group`,\n exportAs: 'gipiRadioGroup',\n templateUrl: './radio-group.component.html',\n styleUrls: ['./radio-group.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIRadioGroupComponent => GIPIRadioGroupComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-radio-group',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIRadioGroupComponent implements ControlValueAccessor, OnInit {\n\n private _name: string = `gipi-radio-group-${nextUniqueId++}`;\n\n _enumList: any[] = [];\n\n @Input() id: string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() disabled: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() fieldset: boolean = false;\n\n @Input() direction: 'row' | 'column' = 'row';\n\n @Input() enum: any;\n\n @Input() sort: (a: any, b: any) => number;\n\n @Input() valuesExclud: string[];\n\n @Input() valuesOmit: string[];\n\n @Input('value') val: any;\n get value() {\n return this.val;\n }\n set value(val) {\n this.val = val;\n this.onChange(val);\n this.onTouch();\n }\n\n @Output() selectionChange: EventEmitter<string> = new EventEmitter<string>();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n const lEnumList = Object.keys(this.enum)\n .map(key => ({ key: key, value: this.enum[key] }))\n .sort(this.sort);\n\n if (!ObjectUtil.isNull(this.valuesExclud)) {\n for (let i = 0; i < lEnumList.length; i++) {\n const excludEnum: boolean = this.valuesExclud.some(e => e === lEnumList[i].key);\n if (!excludEnum) {\n this._enumList.push(lEnumList[i]);\n }\n }\n } else {\n this._enumList = lEnumList;\n }\n\n this._changeDetectorRef.detectChanges();\n }\n\n onChange: any = () => { };\n\n onTouch: any = () => { };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n changeRadioGroup({ value }: MatRadioChange): void {\n this.selectionChange.emit(value);\n }\n\n validateOmitByKey(key: string): boolean {\n return !ObjectUtil.isNull(this.valuesOmit) ? !this.valuesOmit.some(el => el === key) : true;\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core/utils/object.util';\n\n@Component({\n selector: `gipi-select-button[gipi-primary], gipi-select-button[gipi-secondary]`,\n exportAs: 'gipiSelectButton',\n templateUrl: './select-button.component.html',\n styleUrls: ['./select-button.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPISelectButtonComponent => GIPISelectButtonComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-select-button',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPISelectButtonComponent implements ControlValueAccessor, OnInit {\n\n readonly isButtonPrimary: boolean = this._hasHostAttributes('gipi-primary');\n readonly isButtonSecondary: boolean = this._hasHostAttributes('gipi-secondary');\n\n @Input() id: string | number;\n\n @Input() arialLabel: string;\n\n @Input() dataKey: string;\n\n @Input() label: string;\n\n @Input() required: boolean = false;\n\n @Input() options: any[];\n\n @Input() optionLabel: string;\n\n @Input() optionValue: string;\n\n @Input() optionDisabled: string;\n\n @Input() multiple: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Output() onOptionClick: EventEmitter<any> = new EventEmitter();\n\n @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n value: any;\n\n onModelChange: Function = () => { };\n\n onModelTouched: Function = () => { };\n\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void { }\n\n writeValue(obj: any): void {\n this.value = obj;\n this._changeDetectorRef.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onModelTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n getOptionLabel(option: any): any {\n return this.optionLabel ? ObjectUtil.resolveFieldData(option, this.optionLabel) : option.label != undefined ? option.label : option;\n }\n\n getOptionValue(option: any): any {\n return this.optionValue ? ObjectUtil.resolveFieldData(option, this.optionValue) : this.optionLabel || option.value === undefined ? option : option.value;\n }\n\n isOptionDisabled(option: any): any {\n return this.optionDisabled ? ObjectUtil.resolveFieldData(option, this.optionDisabled) : option.disabled !== undefined ? option.disabled : false;\n }\n\n onItemClick(event: any, option: any, index: number): void {\n if (this.disabled || this.isOptionDisabled(option)) {\n return;\n }\n\n if (this.multiple) {\n if (this.isSelected(option)) { this.removeOption(option); } else { this.value = [...(this.value || []), this.getOptionValue(option)]; }\n\n this.onModelChange(this.value);\n\n this.onChange.emit({\n originalEvent: event,\n value: this.value\n });\n } else {\n const value: any = this.getOptionValue(option);\n\n if (this.value !== value) {\n this.value = this.getOptionValue(option);\n this.onModelChange(this.value);\n\n this.onChange.emit({\n originalEvent: event,\n value: this.value\n });\n }\n }\n\n this.onOptionClick.emit({\n originalEvent: event,\n option: option,\n index: index\n });\n }\n\n isSelected(option: any): boolean {\n let selected: boolean = false;\n const optionValue: any = this.getOptionValue(option);\n\n if (this.multiple) {\n if (this.value && Array.isArray(this.value)) {\n for (const val of this.value) {\n if (ObjectUtil.equals(val, optionValue, this.dataKey)) {\n selected = true;\n break;\n }\n }\n }\n } else {\n selected = ObjectUtil.equals(this.getOptionValue(option), this.value, this.dataKey);\n }\n\n return selected;\n }\n\n removeOption(option: any): void {\n this.value = this.value.filter(val => !ObjectUtil.equals(val, this.getOptionValue(option), this.dataKey));\n }\n\n onBlur(): void {\n this.onModelTouched();\n }\n\n private _getHostElement(): any {\n return this._elementRef.nativeElement;\n }\n\n private _hasHostAttributes(...attributes: string[]): boolean {\n return attributes.some(attribute => this._getHostElement().hasAttribute(attribute));\n }\n\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, TrackByFunction, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../core/utils/object.util';\nimport { StringUtil } from '../../../core/utils/string.util';\n\n@Component({\n selector: `gipi-select`,\n exportAs: 'gipiSelect',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPISelectComponent => GIPISelectComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-select',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class GIPISelectComponent<T> implements OnInit, ControlValueAccessor {\n\n _overlayVisible: boolean = false;\n\n _modelValue: T;\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() placeholder: string;\n\n @Input() disabled: boolean = false;\n\n @Input() required: boolean = false;\n\n @Input() iconPrefix: string;\n @Input() iconPrefixWidth: string | number;\n @Input() iconPrefixHeight: string | number;\n @Input() svgIconPrefix: string;\n\n @Input() iconSuffix: string;\n @Input() iconSuffixWidth: string | number;\n @Input() iconSuffixHeight: string | number;\n @Input() svgIconSuffix: string;\n\n @Input() property: string = 'description';\n\n @Input() propertyFn: (obj: T) => string;\n\n @Input() options: T[] = [];\n\n @Input() trackyBy: string = 'id';\n\n @Input() set model(model: any) {\n this._modelValue = model;\n this.onModelChange.emit(this._modelValue);\n this.onChange(this._modelValue);\n this.onTouch(this._modelValue);\n }\n get model(): any {\n return this._modelValue;\n }\n\n @Output() onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output() onShowOverlay: EventEmitter<void> = new EventEmitter<void>();\n @Output() onModelChange: EventEmitter<T> = new EventEmitter<T>();\n @Output() onSelectionChange: EventEmitter<T> = new EventEmitter<T>();\n\n get optionSelectedText(): string {\n if (ObjectUtil.isNull(this.model) && !StringUtil.isEmpty(this.placeholder)) {\n return this.placeholder;\n } else if (!ObjectUtil.isNull(this.model)) {\n return this.getPropertyValue(this.model);\n }\n\n return '';\n }\n\n trackByOption: TrackByFunction<T> = (index, obj) => this.trackyBy ? obj[this.trackyBy] : obj;\n\n constructor() { }\n\n ngOnInit(): void { }\n\n onChange: any = (): void => { };\n\n onTouch: any = (): void => { };\n\n writeValue(value: any): void {\n this.model = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n toggleOverlay(): void {\n if (this.disabled) {\n return;\n }\n\n this._overlayVisible = !this._overlayVisible;\n }\n\n getPropertyValue(entity: T): string {\n if (!ObjectUtil.isNewModel(entity)) {\n if (!ObjectUtil.isNull(this.propertyFn)) {\n return this.propertyFn(entity);\n }\n return this._getValue(entity, this.property);\n }\n return StringUtil.EMPTY;\n }\n\n private _getValue(entity: T, property: string): string {\n const properties: string[] = property.split('.');\n let value: any = entity;\n\n for (let i: number = 0; i < properties.length; i++) {\n value = Reflect.get(value, properties[i]);\n if (value && i === properties.length - 1) {\n return value;\n }\n }\n }\n\n isOptionActive(option: T): boolean {\n if (!ObjectUtil.isNull(this._modelValue)) {\n if (!StringUtil.isEmpty(this.property)) {\n return (option[this.property] === this._modelValue[this.property]);\n } else {\n return (option === this._modelValue);\n }\n }\n return false;\n }\n\n onClickOption(option: T): void {\n this.model = option;\n this.onSelectionChange.emit(option);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, startWith } from 'rxjs/operators';\n\nimport { AbstractService } from './abstract.service';\n\nexport const POINTS_NAME: string[] = [\n 'xl',\n 'lg',\n 'md',\n 'sm',\n 'xs'\n];\n\nconst QUERY: Map<string, string> = new Map([\n [POINTS_NAME[0], '(min-width: 1920px)'], // xl\n [POINTS_NAME[1], '(min-width: 1366px)'], // lg\n [POINTS_NAME[2], '(min-width: 768px)'], // md\n [POINTS_NAME[3], '(min-width: 600px)'], // sm\n [POINTS_NAME[4], '(min-width: 0px)'], // xs\n]);\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreakpointObserverService extends AbstractService {\n\n readonly _size$: Observable<string>;\n\n constructor() {\n super();\n this._size$ = fromEvent(window, 'resize').pipe(\n startWith(this._getScreenSize()),\n map((event: Event) => this._getScreenSize()),\n distinctUntilChanged(),\n shareReplay(1)\n );\n }\n\n public get size$(): Observable<string> {\n return this._size$;\n }\n\n private _getScreenSize(): string {\n const [[newSize = 'never']] = Array.from(QUERY.entries()).filter(([size, mediaQuery]) => window.matchMedia(mediaQuery).matches);\n return newSize;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { AbstractService } from './abstract.service';\nimport { MenuDTO } from '../models/dto/menu.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NavService extends AbstractService {\n\n public sidenav: any;\n\n public menuItems: MenuDTO[] = [];\n\n public isOpened: boolean = false;\n\n public currentUrl: BehaviorSubject<string> = new BehaviorSubject<string>(undefined);\n\n constructor(private router: Router) {\n super();\n this.router.events.subscribe((event: NavigationEnd) => {\n if (event instanceof NavigationEnd) {\n this.currentUrl.next(event.url);\n }\n });\n }\n\n public close(): void {\n this.isOpened = false;\n this._collapseAllMenu();\n }\n\n public open(): void {\n this.isOpened = true;\n this._collapseAllMenu();\n }\n\n public toggle(): void {\n this.isOpened = !this.isOpened;\n this._collapseAllMenu();\n }\n\n private _collapseAllMenu(): void {\n this.menuItems.forEach(m => m.expanded = false);\n }\n\n}\n","import { AfterContentInit, Component, HostListener, OnInit, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { BreakpointObserverService } from '../../../../core/services/breakpoint-observer.service';\nimport { NavService } from '../../../../core/services/nav.service';\n\n@Component({\n selector: `gipi-sidenav-container`,\n exportAs: 'gipiSidenavContainer',\n templateUrl: './container.component.html',\n styleUrls: ['./container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPISidenavContainerComponent => GIPISidenavContainerComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-sidenav-container',\n },\n})\nexport class GIPISidenavContainerComponent implements OnInit, AfterContentInit {\n\n constructor(\n private _navService: NavService,\n private _breakpointObserverService: BreakpointObserverService\n ) { }\n\n ngOnInit(): void { }\n\n ngAfterContentInit(): void {\n this.isScreenLarge.subscribe(isScreenLarge => {\n if (isScreenLarge) {\n this._navService.open();\n }\n });\n }\n\n get isOpened(): Observable<boolean> {\n return of(this._navService.isOpened);\n }\n\n get isScreenLarge(): Observable<boolean> {\n // return this._breakpointObserverService.size$.pipe(\n // map(size => (size === 'lg'))\n // );\n return this._breakpointObserverService.size$.pipe(\n map(size => (size !== 'xs') && (size !== 'sm') && (size !== 'md'))\n );\n }\n\n onClickBackdrop(): void {\n if (this._navService.isOpened) {\n this.isScreenLarge.subscribe(isScreenLarge => {\n if (!isScreenLarge) {\n this._navService.close();\n }\n });\n }\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: UIEvent): void {\n this.isScreenLarge.subscribe(isScreenLarge => {\n if (isScreenLarge) {\n this._navService.open();\n } else {\n this._navService.close();\n }\n });\n }\n\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSidenav } from '@angular/material/sidenav';\nimport { Router } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { MenuDTO } from '../../../../core/models/dto/menu.dto';\nimport { BreakpointObserverService } from '../../../../core/services/breakpoint-observer.service';\nimport { NavService } from '../../../../core/services/nav.service';\nimport { ArrayUtil } from '../../../../core/utils/array.util';\nimport { ObjectUtil } from '../../../../core/utils/object.util';\nimport { StringUtil } from '../../../../core/utils/string.util';\n\n@Component({\n selector: `gipi-sidenav`,\n exportAs: 'gipiSidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: ['./sidenav.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPISidenavComponent => GIPISidenavComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-sidenav',\n },\n animations: [\n trigger('indicatorRotate', [\n state('closed', style({ transform: 'rotate(0deg)' })),\n state('opened', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\n ])\n ]\n})\nexport class GIPISidenavComponent implements OnInit, AfterViewInit {\n\n @ViewChild('sidenav', { static: false }) sidenav: MatSidenav;\n\n public _levelOneMenuCollapsableSelected: MenuDTO = null;\n public _levelTwoMenuCollapsableSelected: MenuDTO = null;\n\n public _mouseEnter: boolean = false;\n\n @Input() menuItems: MenuDTO[] = [];\n\n @Input() labelToggle: string = 'Retrair menu';\n\n @Input() iconConfiguration: string;\n\n @Input() svgIconConfiguration: string;\n\n @Input() labelConfiguration: string;\n\n @Input() showConfiguration: boolean = false;\n\n @Output() onClickMenuItem: EventEmitter<MenuDTO | null> = new EventEmitter<MenuDTO | null>();\n\n constructor(\n private _navService: NavService,\n private _breakpointObserverService: BreakpointObserverService,\n private _router: Router,\n ) { }\n\n ngOnInit(): void { }\n\n ngAfterViewInit(): void {\n this._navService.sidenav = this.sidenav;\n this._navService.menuItems = this.menuItems;\n }\n\n public get isOpened(): Observable<boolean> {\n return of(this._navService.isOpened);\n }\n\n public get isScreenLarge(): Observable<boolean> {\n return this._breakpointObserverService.size$.pipe(\n map(size => (size !== 'xs') && (size !== 'sm') && (size !== 'md'))\n );\n }\n\n public get submenuBackButtonName(): Observable<string> {\n if (ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n return of('Voltar');\n } else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n return of(this._levelOneMenuCollapsableSelected.name);\n } else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && !ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n return of(`${this._levelOneMenuCollapsableSelected.name} / ${this._levelTwoMenuCollapsableSelected.name}`);\n }\n }\n\n public get levelMenuCollapsableSelected(): Observable<MenuDTO[]> {\n if (ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n return of(this.menuItems);\n } else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n return of(this._levelOneMenuCollapsableSelected.menuList);\n } else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && !ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n return of(this._levelTwoMenuCollapsableSelected.menuList);\n }\n }\n\n public toggleSidenav(): void {\n this._levelOneMenuCollapsableSelected = null;\n this._levelTwoMenuCollapsableSelected = null;\n this.onMenuCollapsableReset(this.menuItems);\n\n this._navService.toggle();\n }\n\n public onMenuCollapsableSelected(menu: MenuDTO): void {\n setTimeout(() => {\n if (!this._navService.isOpened) {\n this._navService.open();\n }\n\n if (this._navService.isOpened) {\n menu.expanded = true;\n\n /**\n * Se o menuList está carregado e o (this._levelOneMenuCollapsableSelected === null) significa que possui mais niveis, portanto este é o nivel 1.\n * Se o menuList está carregado e o (this._levelTwoMenuCollapsableSelected === null) significa que este é o útimo nível, portanto este é o nivel 2.\n */\n if (!ArrayUtil.isEmpty(menu.menuList) && ObjectUtil.isNull(this._levelOneMenuCollapsableSelected)) {\n this._levelOneMenuCollapsableSelected = ObjectUtil.clone(menu);\n } else if (!ArrayUtil.isEmpty(menu.menuList) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n this._levelTwoMenuCollapsableSelected = ObjectUtil.clone(menu);\n }\n }\n });\n }\n\n public onMenuCollapsableReset(menuList: MenuDTO[]): void {\n setTimeout(() => {\n for (let i = 0; i < menuList.length; i++) {\n menuList[i].expanded = false;\n\n if (!ArrayUtil.isEmpty(menuList[i].menuList)) {\n this.onMenuCollapsableReset(menuList[i].menuList);\n }\n }\n });\n }\n\n public onMenuCollapsableGoBack(): void {\n setTimeout(() => {\n if (!ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n this._levelTwoMenuCollapsableSelected = null;\n } else if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected)) {\n this._levelOneMenuCollapsableSelected = null;\n } else {\n this.onMenuCollapsableReset(this.menuItems);\n }\n });\n }\n\n public isMenuActive(menu: MenuDTO): boolean {\n return this._router.url.startsWith(menu.route);\n }\n\n public isMenuCollapsableActive(menu: MenuDTO): boolean {\n if (StringUtil.isEmpty(menu.route)) {\n return false;\n }\n\n const existInRoute: boolean = this._router.url.includes(menu.route);\n\n let menuList: MenuDTO[] = ArrayUtil.clone(this.menuItems);\n if (!ObjectUtil.isNull(this._levelOneMenuCollapsableSelected) && ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n menuList = ArrayUtil.clone(this._levelOneMenuCollapsableSelected.menuList);\n } else if (!ObjectUtil.isNull(this._levelTwoMenuCollapsableSelected)) {\n menuList = ArrayUtil.clone(this._levelTwoMenuCollapsableSelected.menuList);\n }\n\n const levelZeroActive: MenuDTO = menuList\n .filter(mi => !ArrayUtil.isEmpty(mi.menuList))\n .find(mi => ((mi.route === menu.route) && (mi.index === menu.index) && (mi.type && menu.type)));\n\n if (existInRoute && !ObjectUtil.isNull(levelZeroActive) && !ArrayUtil.isEmpty(levelZeroActive.menuList)) {\n const levelOneActive: MenuDTO = levelZeroActive.menuList.find(mi => this._router.url.includes(mi.route));\n if (!ObjectUtil.isNull(levelOneActive) && !ArrayUtil.isEmpty(levelOneActive.menuList)) {\n const levelTwoActive: MenuDTO = levelOneActive.menuList.find(mi => this._router.url.includes(mi.route));\n return !ObjectUtil.isNull(levelTwoActive);\n } else {\n return !ObjectUtil.isNull(levelOneActive);\n }\n }\n\n return false;\n }\n\n public onMenuItemSelected(menu: MenuDTO = null, closeNav: boolean = true): void {\n if (closeNav) {\n this._levelOneMenuCollapsableSelected = null;\n this._levelTwoMenuCollapsableSelected = null;\n\n this.onMenuCollapsableReset(this.menuItems);\n\n this.isScreenLarge.subscribe(isScreenLarge => {\n if (!isScreenLarge) {\n this._navService.close();\n }\n });\n }\n\n this.onClickMenuItem.emit(menu);\n }\n\n public getMenuName(name: string): string {\n return (name.length <= 35) ? name : (name.slice(0, 35) + '...');\n }\n\n public onMouseEnter(): void {\n this.isOpened.toPromise().then(isOpened => {\n if (!isOpened) {\n this._mouseEnter = true;\n this.toggleSidenav();\n }\n });\n }\n\n public onMouseLeave(): void {\n this.isOpened.toPromise().then(isOpened => {\n if (isOpened && this._mouseEnter) {\n this._mouseEnter = false;\n this.toggleSidenav();\n }\n })\n }\n\n}\n","import { CdkStep, CdkStepper } from '@angular/cdk/stepper';\nimport { ChangeDetectionStrategy, Component, Input, OnInit, forwardRef } from '@angular/core';\n\n@Component({\n selector: `gipi-stepper`,\n exportAs: 'gipiStepper',\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n providers: [\n {\n provide: CdkStepper,\n useExisting: GIPIStepperComponent,\n }\n ],\n host: {\n 'class': 'gipi-stepper',\n },\n})\nexport class GIPIStepperComponent extends CdkStepper implements OnInit {\n\n @Input() id: string;\n\n @Input() name: string;\n\n ngOnInit(): void { }\n\n onClick(index: number): void {\n this.selectedIndex = index;\n }\n\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, TemplateRef, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ArrayUtil } from '../../../../../core/utils/array.util';\nimport { ObjectUtil } from '../../../../../core/utils/object.util';\nimport { PipeTransformModel } from '../../models/pipe-transform.model';\nimport { TableColumnModel } from '../../models/table-column.model';\n\n@Component({\n selector: `gipi-table-body`,\n exportAs: 'gipiTableBody',\n templateUrl: './table-body.component.html',\n styleUrls: ['./table-body.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITableBodyComponent => GIPITableBodyComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-table-body',\n },\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0px', minHeight: '0', display: 'none' })),\n state('expanded', style({ height: '*' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPITableBodyComponent<T> implements OnInit {\n\n private _rows: T[];\n\n _rowsExpanded: T[] = [];\n\n @Input() loading: boolean = false;\n\n @Input() loadingDetail: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() clickOnRow: boolean = false;\n\n @Input() expandable: boolean = false;\n\n @Input() expandOnlyOneRow: boolean = false;\n\n @Input() rowExpandableFn: (row: T) => boolean;\n\n @Input() highlightRowFn: (row: T) => boolean;\n\n @Input() columns: TableColumnModel[] = [];\n\n @Input() trackBy: string = 'id';\n\n @Input() rowDetailRef: TemplateRef<any>;\n\n @Input() set rows(val: T[]) {\n this._rows = val;\n }\n get rows(): T[] {\n return this._rows;\n }\n\n @Output() rowsExpandedChange: EventEmitter<T[]> = new EventEmitter();\n @Output() rowDetailToggleChange: EventEmitter<{ row: T; isExpanded: boolean; }> = new EventEmitter();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit() { }\n\n public columnTrackingFn(index: number, column: TableColumnModel): any {\n return column.property;\n }\n\n public rowTrackingFn(index: number, row: T): any {\n return row[this.trackBy];\n }\n\n public getShowHighlightRow(row: T): boolean {\n if (ObjectUtil.isNull(row) || ObjectUtil.isNull(this.highlightRowFn)) {\n return false;\n }\n\n return this.highlightRowFn(row);\n }\n\n public getIdentifierRow(index: number): string {\n return `row-${index}`;\n }\n\n public getShowExpandable(row: T): boolean {\n if (!ObjectUtil.isNull(this.rowExpandableFn)) {\n return this.expandable && this.rowExpandableFn(row);\n } else {\n return this.expandable;\n }\n }\n\n public getColumnValue(row: object, column: TableColumnModel): string {\n let value: string = '';\n\n if (!this.rows || !this.columns) {\n value = '';\n } else {\n let val: any = column.value;\n if (typeof column.value === 'function') {\n val = column.value(row);\n }\n const userPipe: PipeTransformModel = column.pipe;\n if (userPipe) {\n value = userPipe.transform(val);\n } else if (value !== undefined) {\n value = val;\n }\n }\n\n return value;\n }\n\n public getRowExpanded(row: T): boolean {\n if (ArrayUtil.isEmpty(this._rowsExpanded)) {\n return false;\n }\n return this._rowsExpanded.includes(row);\n }\n\n public onRowExpandedChange(row: T): void {\n if (!this.getShowExpandable(row)) {\n return;\n }\n\n if (this.expandOnlyOneRow) {\n if (!ArrayUtil.isEmpty(this._rowsExpanded)) {\n if (this.getRowExpanded(row)) {\n this._rowsExpanded.splice(0, this._rowsExpanded.length);\n } else {\n this._rowsExpanded.splice(0, this._rowsExpanded.length, row);\n }\n } else {\n this._rowsExpanded.push(row);\n }\n } else {\n if (this.getRowExpanded(row)) {\n const index: number = this._rowsExpanded.findIndex(r => r === row);\n this._rowsExpanded.splice(index, 1);\n } else {\n this._rowsExpanded.push(row);\n }\n }\n\n this.rowsExpandedChange.emit(this._rowsExpanded);\n this.rowDetailToggleChange.emit({ row: row, isExpanded: this.getRowExpanded(row) });\n\n this._changeDetectorRef.detectChanges();\n }\n\n public onClickCell(row: T, column: TableColumnModel): void {\n if (!ObjectUtil.isNull(column.action)) {\n column.action(row);\n }\n }\n\n}\n","import { ChangeDetectionStrategy, Component, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-table-footer`,\n exportAs: 'gipiTableFooter',\n templateUrl: './table-footer.component.html',\n styleUrls: ['./table-footer.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITableFooterComponent => GIPITableFooterComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-table-footer',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPITableFooterComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n","import { SortDirection } from '../types/sort-direction.type';\n\nexport class SortModel {\n\n private _property: string;\n\n private _direction: SortDirection;\n\n constructor(\n property: string,\n direction: SortDirection\n ) {\n this.property = property;\n this.direction = direction;\n }\n\n public get property(): string {\n return this._property;\n }\n public set property(value: string) {\n this._property = value;\n }\n\n public get direction(): SortDirection {\n return this._direction;\n }\n public set direction(value: SortDirection) {\n this._direction = value;\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ObjectUtil } from '../../../../../core/utils/object.util';\nimport { SortModel } from '../../models/sort.model';\nimport { TableColumnModel } from '../../models/table-column.model';\nimport { SortDirection } from '../../types/sort-direction.type';\n\n@Component({\n selector: `gipi-table-header`,\n exportAs: 'gipiTableHeader',\n templateUrl: './table-header.component.html',\n styleUrls: ['./table-header.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITableHeaderComponent => GIPITableHeaderComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-table-header',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPITableHeaderComponent implements OnInit {\n\n _sortedColumn: { column?: TableColumnModel, sortDirection?: SortDirection } = null;\n\n @Input() columns: TableColumnModel[] = [];\n\n @Input() loading: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() sortActive: string;\n @Input() sortStart: 'asc' | 'desc' = 'asc';\n @Input() sortDisableClear: boolean = true;\n @Input() sortLocked: boolean = false;\n\n @Input() sortAscendingIcon: string = 'keyboard_arrow_up';\n @Input() sortDescendingIcon: string = 'keyboard_arrow_down';\n @Input() sortUnsetIcon: string = 'unfold_more';\n\n @Output() sortChange: EventEmitter<SortModel> = new EventEmitter<SortModel>();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit() {\n if ((this.columns && this.columns.length) && this.sortActive) {\n const columnActive = this.columns.find(c => c.property === this.sortActive);\n if (!ObjectUtil.isNull(columnActive) && columnActive.sortable && ObjectUtil.isNull(this._sortedColumn)) {\n this._sortedColumn = {};\n this._sortedColumn.column = columnActive;\n this._sortedColumn.sortDirection = this.sortStart;\n this.sortChange.emit(new SortModel(columnActive.property, this._sortedColumn.sortDirection));\n } else {\n throw new Error('There is no column with the property indicated in \"sortActive\"');\n }\n }\n }\n\n public columnTrackingFn(index: number, column: TableColumnModel): any {\n return column.property;\n }\n\n public onSortChange(column: TableColumnModel): void {\n if (!column.sortable || this.sortLocked) {\n return;\n }\n\n if (ObjectUtil.isNull(this._sortedColumn)) {\n this._sortedColumn = {};\n }\n\n this._sortedColumn.column = column;\n this._sortedColumn.sortDirection = this._getNextSortDirection(column);\n this.sortChange.emit(new SortModel(column.property, this._sortedColumn.sortDirection));\n\n this._changeDetectorRef.markForCheck();\n }\n\n private _getNextSortDirection(column: TableColumnModel): SortDirection {\n if (!column.sortable) {\n return '';\n }\n\n if (this.sortDisableClear) {\n if (this._sortedColumn.sortDirection === 'asc') {\n return 'desc';\n } else {\n return 'asc';\n }\n } else {\n if (!this._sortedColumn.sortDirection) {\n return 'asc';\n } else if (this._sortedColumn.sortDirection === 'asc') {\n return 'desc';\n } else if (this._sortedColumn.sortDirection === 'desc') {\n return '';\n }\n }\n\n return '';\n }\n\n public isEqualsColumns(column: TableColumnModel): boolean {\n if (!ObjectUtil.isNull(this._sortedColumn) && !ObjectUtil.isNull(this._sortedColumn.column)) {\n const equals: boolean = ObjectUtil.shallowEqual(this._sortedColumn.column, column);\n return equals;\n }\n\n return false;\n }\n\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-table-pagination`,\n exportAs: 'gipiTablePagination',\n templateUrl: './table-pagination.component.html',\n styleUrls: ['./table-pagination.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITablePaginationComponent => GIPITablePaginationComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-table-pagination',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPITablePaginationComponent implements OnInit {\n\n @Input() id: string;\n\n @Input() maxSize: number = 5;\n\n private _directionLinks: boolean = true;\n @Input() set directionLinks(value: boolean) {\n this._directionLinks = coerceToBoolean(value);\n }\n get directionLinks(): boolean {\n return this._directionLinks;\n }\n\n private _autoHide: boolean = false;\n @Input() set autoHide(value: boolean) {\n this._autoHide = coerceToBoolean(value);\n }\n get autoHide(): boolean {\n return this._autoHide;\n }\n\n private _responsive: boolean = false;\n @Input() set responsive(value: boolean) {\n this._responsive = coerceToBoolean(value);\n }\n get responsive(): boolean {\n return this._responsive;\n }\n\n @Input() previousTooltip: string = 'Voltar';\n\n @Input() nextTooltip: string = 'Avançar';\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n @Output() pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n\n constructor() { }\n\n ngOnInit(): void { }\n\n trackByIndex(index: number) {\n return index;\n }\n\n}\n\nfunction coerceToBoolean(input: string | boolean): boolean {\n return !!input && input !== 'false';\n}\n","import { ChangeDetectionStrategy, Component, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-table-progress-bar`,\n exportAs: 'gipiTableProgressBar',\n templateUrl: './table-progress-bar.component.html',\n styleUrls: ['./table-progress-bar.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITableProgressBarComponent => GIPITableProgressBarComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-table-progress-bar',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPITableProgressBarComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, OnDestroy, OnInit, Output, TemplateRef, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { SortModel } from './models/sort.model';\nimport { TableColumnModel } from './models/table-column.model';\n\n@Component({\n selector: `gipi-table`,\n exportAs: 'gipiTable',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITableComponent => GIPITableComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-table',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPITableComponent<T> implements OnInit, OnDestroy {\n\n @Input() columns: TableColumnModel[] = [];\n @Input() loading: boolean = false;\n @Input() disabled: boolean = false;\n\n // Header ---------------------------------------------------------------------\n @Input() sortActive: string;\n @Input() sortStart: 'asc' | 'desc' = 'asc';\n @Input() sortDisableClear: boolean = true;\n @Input() sortLocked: boolean = false;\n\n @Input() sortAscendingIcon: string = 'keyboard_arrow_up';\n @Input() sortDescendingIcon: string = 'keyboard_arrow_down';\n @Input() sortUnsetIcon: string = 'unfold_more';\n\n @Output() sortChange: EventEmitter<SortModel> = new EventEmitter<SortModel>();\n // ----------------------------------------------------------------------------\n\n // Body -----------------------------------------------------------------------\n @Input() loadingDetail: boolean = false;\n @Input() clickOnRow: boolean = false;\n @Input() expandable: boolean = false;\n @Input() expandOnlyOneRow: boolean = false;\n @Input() rowExpandableFn: (row: T) => boolean;\n @Input() highlightRowFn: (row: T) => boolean;\n @Input() trackBy: string = 'id';\n @ContentChild('rowDetail', { static: false }) rowDetailRef: TemplateRef<any>;\n @Input() rows: T[];\n\n @Output() rowsExpandedChange: EventEmitter<T[]> = new EventEmitter();\n @Output() rowDetailToggleChange: EventEmitter<{ row: T; isExpanded: boolean; }> = new EventEmitter();\n // ----------------------------------------------------------------------------\n\n // Table ----------------------------------------------------------------------\n @Input() id: string | number;\n @Input() tableShowBorder: boolean = true;\n @Input() hideHeader: boolean = false;\n @Input() hideFooter: boolean = false;\n // ----------------------------------------------------------------------------\n\n constructor() { }\n\n ngOnInit() { }\n\n ngOnDestroy(): void { }\n\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: `gipi-toolbar`,\n exportAs: 'gipiToolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIToolbarComponent => GIPIToolbarComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-toolbar',\n }\n})\nexport class GIPIToolbarComponent implements OnInit {\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @Input() label: string;\n\n @Input() style: string;\n\n @Input() class: string;\n\n constructor() { }\n\n ngOnInit(): void { }\n\n}\n","import { Component, OnInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { NavService } from '../../../core/services/nav.service';\n\n@Component({\n selector: '[gipi-top-nav], gipi-top-nav',\n exportAs: 'gipiTopNav',\n templateUrl: './top-nav.component.html',\n styleUrls: ['./top-nav.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPITopNavComponent => GIPITopNavComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-top-nav'\n }\n})\nexport class GIPITopNavComponent implements OnInit {\n\n constructor(private _navService: NavService) { }\n\n ngOnInit(): void { }\n\n toggle(): void {\n this._navService.toggle();\n }\n\n}\n","import { formatNumber, formatPercent } from '@angular/common';\nimport { ObjectUtil } from './object.util';\nimport { StringUtil } from './string.util';\n\n/** @dynamic */\nexport class NumberUtil {\n\n public static isPositive(value: number): boolean {\n return !ObjectUtil.isNull(value) && value > 0;\n }\n\n public static isNegative(value: number): boolean {\n return !ObjectUtil.isNull(value) && value < 0;\n }\n\n public static format(value: number, digitsInfo?: string, type?: 'NUMBER' | 'PERCENT'): string {\n if (!ObjectUtil.isNull(value) && (!type || type === 'NUMBER')) {\n return formatNumber(value, 'pt', digitsInfo);\n } else if (!ObjectUtil.isNull(value) && type === 'PERCENT') {\n return formatPercent(value / 100, 'pt', digitsInfo);\n }\n return StringUtil.EMPTY;\n }\n\n public static onlyNumbers(value: string | number): string {\n return String(value).replace(/[^\\d]/g, '');\n }\n\n public static isNumber(value: any): boolean {\n return value !== null && value !== undefined && !isNaN(value) && typeof value === 'number';\n }\n\n}\n","import { formatDate } from '@angular/common';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { GIPINgConfig } from '../../shared/api/gipi-ng-config';\nimport { NumberUtil } from './number.util';\nimport { ObjectUtil } from './object.util';\nimport { StringUtil } from './string.util';\n\n/** @dynamic */\nexport class DateUtil {\n\n public static DATE_FORMAT = 'dd/MM/yyyy';\n\n public static DATE_TIME_FORMAT = 'dd/MM/yyyy HH:mm';\n\n constructor() { }\n\n public static format(value: Date, format: string): string {\n if (!ObjectUtil.isNull(value)) {\n return formatDate(value, format, 'pt');\n }\n return StringUtil.EMPTY;\n }\n\n public static isValid(value: Date): boolean {\n if (ObjectUtil.isNull(value)) {\n return false;\n }\n value = new Date(value);\n return !isNaN(value.getTime()) && DateUtil.isGreaterThan(value, new Date('1900-01-01Z00:00:00:000'));\n }\n\n /** Initial === Final, ignora o Time */\n public static isEqual(initial: Date | moment.Moment, final: Date | moment.Moment, granularity: moment.unitOfTime.StartOf = 'date'): boolean {\n if (!ObjectUtil.isNull(initial) && !ObjectUtil.isNull(final)) {\n const initialMoment = moment(initial);\n const finalMoment = moment(final);\n return initialMoment.startOf('day').isSame(finalMoment.startOf('day'), granularity);\n }\n return false;\n }\n\n /** Initial > Final */\n public static isGreaterThan(initial: Date | moment.Moment, final: Date | moment.Moment, granularity: moment.unitOfTime.StartOf = 'date'): boolean {\n if (!ObjectUtil.isNull(initial) && !ObjectUtil.isNull(final)) {\n const initialMoment = moment(initial);\n const finalMoment = moment(final);\n return initialMoment.isAfter(finalMoment, granularity);\n }\n return false;\n }\n\n /** Initial < Final */\n public static isLessThan(initial: Date | moment.Moment, final: Date | moment.Moment, granularity: moment.unitOfTime.StartOf = 'date'): boolean {\n if (!ObjectUtil.isNull(initial) && !ObjectUtil.isNull(final)) {\n const initialMoment = moment(initial);\n const finalMoment = moment(final);\n return initialMoment.isBefore(finalMoment, granularity);\n }\n return false;\n }\n\n /** Initial <= Final */\n public static isLessThanOrEqual(initial: Date | moment.Moment, final: Date | moment.Moment, granularity: moment.unitOfTime.StartOf = 'date'): boolean {\n return this.isLessThan(initial, final, granularity) || this.isEqual(initial, final, granularity);\n }\n\n /** Initial >= Final */\n public static isGreaterThanOrEqual(initial: Date | moment.Moment, final: Date | moment.Moment, granularity: moment.unitOfTime.StartOf = 'date'): boolean {\n return this.isGreaterThan(initial, final, granularity) || this.isEqual(initial, final, granularity);\n }\n\n /** Date >= Inicial ou Date <= Final */\n public static isBetween(date: Date | moment.Moment, initial: Date | moment.Moment, final: Date | moment.Moment, granularity: moment.unitOfTime.StartOf = 'date'): boolean {\n return this.isGreaterThanOrEqual(date, initial, granularity) && this.isLessThanOrEqual(date, final, granularity);\n }\n\n public static diffBetweenDates(initial: Date, final: Date, diff: 'MILLISECONDS' | 'SECONDS' | 'MINUTES' | 'HOURS' | 'DAYS' | 'MONTHS'): number {\n const lDateInitial: Date = new Date(initial);\n const lDateFinal: Date = new Date(final);\n const lDiff: number = moment(lDateInitial, 'DD/MM/YYYY HH:mm:ss').diff(moment(lDateFinal, 'DD/MM/YYYY HH:mm:ss'));\n let lReturn = 0;\n switch (diff) {\n case 'MILLISECONDS': { lReturn = moment.duration(lDiff).asMilliseconds(); break; }\n case 'SECONDS': { lReturn = moment.duration(lDiff).asSeconds(); break; }\n case 'MINUTES': { lReturn = moment.duration(lDiff).asMinutes(); break; }\n case 'HOURS': { lReturn = moment.duration(lDiff).asHours(); break; }\n case 'DAYS': { lReturn = moment.duration(lDiff).asDays(); break; }\n case 'MONTHS': { lReturn = moment.duration(lDiff).asMonths(); break; }\n }\n return ((lReturn < 0) ? (lReturn * (-1)) : (lReturn));\n }\n\n public static getDayOfWeek(date: Date): string {\n switch (date.getDay() + 1) {\n case 1:\n return 'SUNDAY';\n case 2:\n return 'MONDAY';\n case 3:\n return 'TUESDAY';\n case 4:\n return 'WEDNESDAY';\n case 5:\n return 'THURSDAY';\n case 6:\n return 'FRIDAY';\n case 7:\n return 'SATURDAY';\n }\n return null;\n }\n\n public static isValidWithString(value: string, pattern: string): boolean {\n if (StringUtil.isEmpty(value) || value.length < pattern.length) {\n return false;\n }\n const date = this.stringToDate(value, pattern);\n return !isNaN(date.getTime());\n }\n\n public static stringToDate(date: string, format: string, zoned: boolean = false): Date {\n const dateItems = date.replace(/[^a-zA-Z0-9]/g, '-').split('-');\n const formatItems = format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-').split('-');\n\n const yearIndex = formatItems.indexOf('yyyy');\n const monthIndex = formatItems.indexOf('mm');\n const dayIndex = formatItems.indexOf('dd');\n const hourIndex = formatItems.indexOf('hh');\n const minutesIndex = formatItems.indexOf('ii');\n const secondsIndex = formatItems.indexOf('ss');\n\n if (zoned) {\n return new Date(Date.UTC(\n (yearIndex > -1 ? +dateItems[yearIndex] : 0),\n (monthIndex > -1 ? +dateItems[monthIndex] - 1 : 0),\n (dayIndex > -1 ? +dateItems[dayIndex] : 1),\n (hourIndex > -1 ? +dateItems[hourIndex] : 0),\n (minutesIndex > -1 ? +dateItems[minutesIndex] : 0),\n (secondsIndex > -1 ? +dateItems[secondsIndex] : 0)));\n }\n return new Date(\n (yearIndex > -1 ? dateItems[yearIndex] : '1970') + '-' +\n (monthIndex > -1 ? dateItems[monthIndex] : '01') + '-' +\n (dayIndex > -1 ? dateItems[dayIndex] : '01') + 'T' +\n (hourIndex > -1 ? dateItems[hourIndex] : '00') + ':' +\n (minutesIndex > -1 ? dateItems[minutesIndex] : '00') + ':' +\n (secondsIndex > -1 ? dateItems[secondsIndex] : '00') + '.000Z');\n }\n\n public static dateAndStringHourToDate(date: Date, hour: string): Date {\n const list = String(date).split(' ');\n const stringDate = `${list[0]} ${list[1]} ${list[2]} ${list[3]} ${hour}:00`;\n return new Date(stringDate);\n }\n\n public static stringFormattedToDate(date: string): Date {\n const list = date.split('/').map(el => Number(el));\n return new Date(list[2], list[1] - 1, list[0]);\n }\n\n public static getLastDayMonth(month?: number): number {\n const date = new Date();\n let lastDay = new Date();\n if (!month) {\n lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n } else {\n lastDay = new Date(date.getFullYear(), month + 1, 0);\n }\n return lastDay.getDate();\n }\n\n /* Somente mês e ano */\n public static isValidMonth(date: Date): boolean {\n date = new Date(date);\n const year: number = date.getFullYear();\n const month: number = date.getMonth();\n if (NumberUtil.isNegative(year) || NumberUtil.isNegative(month) || (month < 0) || (month > 12) || (year <= 1900)) {\n return false;\n }\n return true;\n }\n\n public static isEqualMonth(initial: Date, final: Date): boolean {\n initial = new Date(initial);\n final = new Date(final);\n if (ObjectUtil.isNull(initial) || ObjectUtil.isNull(final) || !this.isValidMonth(initial) || !this.isValidMonth(final)) {\n return false;\n } else if (initial.getMonth() !== final.getMonth()) {\n return false;\n }\n return true;\n }\n\n public static isGreaterThanMonth(initial: Date, final: Date): boolean {\n initial = new Date(initial);\n final = new Date(final);\n if (ObjectUtil.isNull(initial) || ObjectUtil.isNull(final) || !this.isValidMonth(initial) || !this.isValidMonth(final)) {\n return false;\n } else if (initial.getFullYear() > final.getFullYear()) {\n return true;\n } else if ((initial.getFullYear() >= final.getFullYear()) && (initial.getMonth() > final.getMonth())) {\n return true;\n }\n return false;\n }\n\n public static isLessThanMonth(initial: Date, final: Date): boolean {\n initial = new Date(initial);\n final = new Date(final);\n if (ObjectUtil.isNull(initial) || ObjectUtil.isNull(final) || !this.isValidMonth(initial) || !this.isValidMonth(final)) {\n return false;\n } else if (initial.getFullYear() < final.getFullYear()) {\n return true;\n } else if (initial.getFullYear() <= final.getFullYear() && initial.getMonth() < final.getMonth()) {\n return true;\n }\n return false;\n }\n\n public static isLessThanOrEqualMonth(initial: Date, final: Date): boolean {\n initial = new Date(initial);\n final = new Date(final);\n return this.isLessThanMonth(initial, final) || this.isEqualMonth(initial, final);\n }\n\n public static isGreaterThanOrEqualMonth(initial: Date, final: Date): boolean {\n initial = new Date(initial);\n final = new Date(final);\n return this.isGreaterThanMonth(initial, final) || this.isEqualMonth(initial, final);\n }\n\n public static isBetweenMonth(date: Date, initial: Date, final: Date): boolean {\n date = new Date(date);\n initial = new Date(initial);\n final = new Date(final);\n return this.isGreaterThanOrEqualMonth(date, initial) && this.isLessThanOrEqualMonth(date, final);\n }\n\n public static getNameWeekTranslation(week: number, type: 'MIN' | 'SHORT' | 'LONG' = 'LONG'): string {\n const config: GIPINgConfig = new GIPINgConfig();\n switch (type) {\n case 'MIN': return config.translation.dayNamesMin[week];\n case 'SHORT': return config.translation.dayNamesShort[week];\n case 'LONG': return config.translation.dayNames[week];\n }\n }\n\n public static getNameMonthTranslation(month: number, type: 'SHORT' | 'LONG' = 'LONG'): string {\n const config: GIPINgConfig = new GIPINgConfig();\n switch (type) {\n case 'SHORT': return config.translation.monthNamesShort[month];\n case 'LONG': return config.translation.monthNames[month];\n }\n }\n\n public static isDate(input: any): boolean {\n return Object.prototype.toString.call(input) === '[object Date]';\n }\n\n public static isEmpty(value: any): boolean {\n return (\n (value === null) ||\n (value === undefined) ||\n (value === '') ||\n (Array.isArray(value) && (value.length === 0)) ||\n (!this.isDate(value) && (typeof value === 'object') && (Object.keys(value).length === 0))\n );\n }\n\n public static isNotEmpty(value: any) {\n return !this.isEmpty(value);\n }\n\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateUtil } from '../../../core/utils/date.util';\n\n@Component({\n selector: `gipi-user-profile`,\n exportAs: 'gipiUserProfile',\n templateUrl: './user-profile.component.html',\n styleUrls: ['./user-profile.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof GIPIUserProfileComponent => GIPIUserProfileComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'gipi-user-profile',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GIPIUserProfileComponent implements OnInit {\n\n _overlayVisible: boolean = false;\n\n @Input() id: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @Input() imgSrc: string;\n\n @Input() text: string;\n\n @Input() username: string;\n\n @Input() email: string;\n\n @Input() lastAccess: Date;\n\n @Input() iconEdit: string;\n @Input() svgIconEdit: string;\n\n @Input() iconExit: string;\n @Input() svgIconExit: string;\n\n @Output('onClick') click: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output('onShowOverlay') showOverlay: EventEmitter<void> = new EventEmitter<void>();\n @Output('onClickEdit') clickEdit: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output('onClickExit') clickExit: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n get lastAccessText(): string {\n const date: string = DateUtil.format(this.lastAccess, DateUtil.DATE_FORMAT);\n const hours: string = DateUtil.format(this.lastAccess, 'HH:mm');\n return `Último acesso ${date} às ${hours}`;\n }\n\n constructor() { }\n\n ngOnInit(): void { }\n\n toggleOverlay(): void {\n this._overlayVisible = !this._overlayVisible;\n }\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n providedIn: 'root',\n factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n return inject(LOCALE_ID);\n}\n\n/**\n * No longer needed since MAT_DATE_LOCALE has been changed to a scoped injectable.\n * If you are importing and providing this in your code you can simply remove it.\n * @deprecated\n * @breaking-change 8.0.0\n */\nexport const MAT_DATE_LOCALE_PROVIDER = { provide: MAT_DATE_LOCALE, useExisting: LOCALE_ID };\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n /** The locale to use for all dates. */\n protected locale: any;\n protected _localeChanges = new Subject<void>();\n\n /** A stream that emits when the locale changes. */\n readonly localeChanges: Observable<void> = this._localeChanges;\n\n /**\n * Gets the year component of the given date.\n * @param date The date to extract the year from.\n * @returns The year component.\n */\n abstract getYear(date: D): number;\n\n /**\n * Gets the month component of the given date.\n * @param date The date to extract the month from.\n * @returns The month component (0-indexed, 0 = January).\n */\n abstract getMonth(date: D): number;\n\n /**\n * Gets the date of the month component of the given date.\n * @param date The date to extract the date of the month from.\n * @returns The month component (1-indexed, 1 = first of month).\n */\n abstract getDate(date: D): number;\n\n /**\n * Gets the day of the week component of the given date.\n * @param date The date to extract the day of the week from.\n * @returns The month component (0-indexed, 0 = Sunday).\n */\n abstract getDayOfWeek(date: D): number;\n\n /**\n * Gets a list of names for the months.\n * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n * @returns An ordered list of all month names, starting with January.\n */\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n /**\n * Gets a list of names for the dates of the month.\n * @returns An ordered list of all date of the month names, starting with '1'.\n */\n abstract getDateNames(): string[];\n\n /**\n * Gets a list of names for the days of the week.\n * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n * @returns An ordered list of all weekday names, starting with Sunday.\n */\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n /**\n * Gets the name for the year of the given date.\n * @param date The date to get the year name for.\n * @returns The name of the given year (e.g. '2017').\n */\n abstract getYearName(date: D): string;\n\n /**\n * Gets the first day of the week.\n * @returns The first day of the week (0-indexed, 0 = Sunday).\n */\n abstract getFirstDayOfWeek(): number;\n\n /**\n * Gets the number of days in the month of the given date.\n * @param date The date whose month should be checked.\n * @returns The number of days in the month of the given date.\n */\n abstract getNumDaysInMonth(date: D): number;\n\n /**\n * Clones the given date.\n * @param date The date to clone\n * @returns A new date equal to the given date.\n */\n abstract clone(date: D): D;\n\n /**\n * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n * month and date.\n * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n * @returns The new date, or null if invalid.\n */\n abstract createDate(year: number, month: number, date: number): D;\n\n /**\n * Gets today's date.\n * @returns Today's date.\n */\n abstract today(): D;\n\n /**\n * Parses a date from a user-provided value.\n * @param value The value to parse.\n * @param parseFormat The expected format of the value being parsed\n * (type is implementation-dependent).\n * @returns The parsed date.\n */\n abstract parse(value: any, parseFormat: any): D | null;\n\n /**\n * Formats a date as a string according to the given format.\n * @param date The value to format.\n * @param displayFormat The format to use to display the date as a string.\n * @returns The formatted date string.\n */\n abstract format(date: D, displayFormat: any): string;\n\n /**\n * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n * calendar for each year and then finding the closest date in the new month. For example when\n * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n * @param date The date to add years to.\n * @param years The number of years to add (may be negative).\n * @returns A new date equal to the given one with the specified number of years added.\n */\n abstract addCalendarYears(date: D, years: number): D;\n\n /**\n * Adds the given number of months to the date. Months are counted as if flipping a page on the\n * calendar for each month and then finding the closest date in the new month. For example when\n * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n * @param date The date to add months to.\n * @param months The number of months to add (may be negative).\n * @returns A new date equal to the given one with the specified number of months added.\n */\n abstract addCalendarMonths(date: D, months: number): D;\n\n /**\n * Adds the given number of days to the date. Days are counted as if moving one cell on the\n * calendar for each day.\n * @param date The date to add days to.\n * @param days The number of days to add (may be negative).\n * @returns A new date equal to the given one with the specified number of days added.\n */\n abstract addCalendarDays(date: D, days: number): D;\n\n /**\n * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n * This method is used to generate date strings that are compatible with native HTML attributes\n * such as the `min` or `max` attribute of an `<input>`.\n * @param date The date to get the ISO date string for.\n * @returns The ISO date string date string.\n */\n abstract toIso8601(date: D): string;\n\n /**\n * Checks whether the given object is considered a date instance by this DateAdapter.\n * @param obj The object to check\n * @returns Whether the object is a date instance.\n */\n abstract isDateInstance(obj: any): boolean;\n\n /**\n * Checks whether the given date is valid.\n * @param date The date to check.\n * @returns Whether the date is valid.\n */\n abstract isValid(date: D): boolean;\n\n /**\n * Gets date instance that is not valid.\n * @returns An invalid date.\n */\n abstract invalid(): D;\n\n /**\n * Given a potential date object, returns that same date object if it is\n * a valid date, or `null` if it's not a valid date.\n * @param obj The object to check.\n * @returns A date or `null`.\n */\n getValidDateOrNull(obj: unknown): D | null {\n return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n }\n\n /**\n * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n * string). The default implementation does not allow any deserialization, it simply checks that\n * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n * support passing values from your backend directly to these properties by overriding this method\n * to also deserialize the format used by your backend.\n * @param value The value to be deserialized into a date object.\n * @returns The deserialized date object, either a valid date, null if the value can be\n * deserialized into a null date (e.g. the empty string), or an invalid date.\n */\n deserialize(value: any): D | null {\n if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n return value;\n }\n return this.invalid();\n }\n\n /**\n * Sets the locale used for all dates.\n * @param locale The new locale.\n */\n setLocale(locale: any) {\n this.locale = locale;\n this._localeChanges.next();\n }\n\n /**\n * Compares two dates.\n * @param first The first date to compare.\n * @param second The second date to compare.\n * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\n compareDate(first: D, second: D): number {\n return this.getYear(first) - this.getYear(second) ||\n this.getMonth(first) - this.getMonth(second) ||\n this.getDate(first) - this.getDate(second);\n }\n\n /**\n * Checks if two dates are equal.\n * @param first The first date to check.\n * @param second The second date to check.\n * @returns Whether the two dates are equal.\n * Null dates are considered equal to other null dates.\n */\n sameDate(first: D | null, second: D | null): boolean {\n if (first && second) {\n let firstValid = this.isValid(first);\n let secondValid = this.isValid(second);\n if (firstValid && secondValid) {\n return !this.compareDate(first, second);\n }\n return firstValid == secondValid;\n }\n return first == second;\n }\n\n /**\n * Clamp the given date between min and max dates.\n * @param date The date to clamp.\n * @param min The minimum value to allow. If null or omitted no min is enforced.\n * @param max The maximum value to allow. If null or omitted no max is enforced.\n * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n * otherwise `date`.\n */\n clampDate(date: D, min?: D | null, max?: D | null): D {\n if (min && this.compareDate(date, min) < 0) {\n return min;\n }\n if (max && this.compareDate(date, max) > 0) {\n return max;\n }\n return date;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Directive, FactoryProvider, Injectable, OnDestroy, Optional, SkipSelf } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\n/** A class representing a range of dates. */\nexport class DateRange<D> {\n /**\n * Ensures that objects with a `start` and `end` property can't be assigned to a variable that\n * expects a `DateRange`\n */\n // tslint:disable-next-line:no-unused-variable\n private _disableStructuralEquivalency: never;\n\n constructor(\n /** The start date of the range. */\n readonly start: D | null,\n /** The end date of the range. */\n readonly end: D | null,\n ) { }\n}\n\n/**\n * Conditionally picks the date type, if a DateRange is passed in.\n * @docs-private\n */\nexport type ExtractDateTypeFromSelection<T> = T extends DateRange<infer D> ? D : NonNullable<T>;\n\n/** Event emitted by the date selection model when its selection changes. */\nexport interface DateSelectionModelChange<S> {\n /** New value for the selection. */\n selection: S;\n\n /** Object that triggered the change. */\n source: unknown;\n}\n\n/** A selection model containing a date selection. */\nexport abstract class MatDateSelectionModel<S, D = any> implements OnDestroy {\n\n private _selectionChanged = new Subject<DateSelectionModelChange<S>>();\n\n /** Emits when the selection has changed. */\n selectionChanged: Observable<DateSelectionModelChange<S>> = this._selectionChanged;\n\n protected constructor(\n /** The current selection. */\n readonly selection: S,\n protected _adapter: DateAdapter<D>\n ) {\n this.selection = selection;\n }\n\n /**\n * Updates the current selection in the model.\n * @param value New selection that should be assigned.\n * @param source Object that triggered the selection change.\n */\n updateSelection(value: S, source: unknown) {\n (this as { selection: S }).selection = value;\n this._selectionChanged.next({ selection: value, source });\n }\n\n ngOnDestroy() {\n this._selectionChanged.complete();\n }\n\n protected _isValidDateInstance(date: D): boolean {\n return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\n }\n\n /** Adds a date to the current selection. */\n abstract add(date: D | null): void;\n\n /** Checks whether the current selection is valid. */\n abstract isValid(): boolean;\n\n /** Checks whether the current selection is complete. */\n abstract isComplete(): boolean;\n}\n\n/** A selection model that contains a single date. */\n@Injectable()\nexport class MatSingleDateSelectionModel<D> extends MatDateSelectionModel<D | null, D> {\n constructor(adapter: DateAdapter<D>) {\n super(null, adapter);\n }\n\n /**\n * Adds a date to the current selection. In the case of a single date selection, the added date\n * simply overwrites the previous selection\n */\n add(date: D | null) {\n super.updateSelection(date, this);\n }\n\n /** Checks whether the current selection is valid. */\n isValid(): boolean {\n return this.selection != null && this._isValidDateInstance(this.selection);\n }\n\n /**\n * Checks whether the current selection is complete. In the case of a single date selection, this\n * is true if the current selection is not null.\n */\n isComplete() {\n return this.selection != null;\n }\n}\n\n/** A selection model that contains a date range. */\n@Injectable()\nexport class MatRangeDateSelectionModel<D> extends MatDateSelectionModel<DateRange<D>, D> {\n\n constructor(adapter: DateAdapter<D>) {\n super(new DateRange<D>(null, null), adapter);\n }\n\n /**\n * Adds a date to the current selection. In the case of a date range selection, the added date\n * fills in the next `null` value in the range. If both the start and the end already have a date,\n * the selection is reset so that the given date is the new `start` and the `end` is null.\n */\n add(date: D | null): void {\n let { start, end } = this.selection;\n\n if (start == null) {\n start = date;\n } else if (end == null) {\n end = date;\n } else {\n start = date;\n end = null;\n }\n\n super.updateSelection(new DateRange<D>(start, end), this);\n }\n\n /** Checks whether the current selection is valid. */\n isValid(): boolean {\n const { start, end } = this.selection;\n\n // Empty ranges are valid.\n if (start == null && end == null) {\n return true;\n }\n\n // Complete ranges are only valid if both dates are valid and the start is before the end.\n if (start != null && end != null) {\n return this._isValidDateInstance(start) && this._isValidDateInstance(end) &&\n this._adapter.compareDate(start, end) <= 0;\n }\n\n // Partial ranges are valid if the start/end is valid.\n return (start == null || this._isValidDateInstance(start)) &&\n (end == null || this._isValidDateInstance(end));\n }\n\n /**\n * Checks whether the current selection is complete. In the case of a date range selection, this\n * is true if the current selection has a non-null `start` and `end`.\n */\n isComplete(): boolean {\n return this.selection.start != null && this.selection.end != null;\n }\n}\n\n/** @docs-private */\nexport function MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>) {\n return parent || new MatSingleDateSelectionModel(adapter);\n}\n\n/** Used to provide a single selection model to a component. */\nexport const MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n provide: MatDateSelectionModel,\n deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY,\n};\n\n\n/** @docs-private */\nexport function MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>) {\n return parent || new MatRangeDateSelectionModel(adapter);\n}\n\n/** Used to provide a range selection model to a component. */\nexport const MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\n provide: MatDateSelectionModel,\n deps: [[new Optional(), new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_RANGE_DATE_SELECTION_MODEL_FACTORY,\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n return Error(\n `MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a ` +\n `custom implementation.`\n );\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n\n/** Datepicker data that requires internationalization. */\n@Injectable({ providedIn: 'root' })\nexport class MatDatepickerIntl {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n\n /** A label for the calendar popup (used by screen readers). */\n calendarLabel: string = 'Calendar';\n\n /** A label for the button used to open the calendar popup (used by screen readers). */\n openCalendarLabel: string = 'Open calendar';\n\n /** A label for the previous month button (used by screen readers). */\n prevMonthLabel: string = 'Previous month';\n\n /** A label for the next month button (used by screen readers). */\n nextMonthLabel: string = 'Next month';\n\n /** A label for the previous year button (used by screen readers). */\n prevYearLabel: string = 'Previous year';\n\n /** A label for the next year button (used by screen readers). */\n nextYearLabel: string = 'Next year';\n\n /** A label for the previous multi-year button (used by screen readers). */\n prevMultiYearLabel: string = 'Previous 20 years';\n\n /** A label for the next multi-year button (used by screen readers). */\n nextMultiYearLabel: string = 'Next 20 years';\n\n /** A label for the 'switch to month view' button (used by screen readers). */\n switchToMonthViewLabel: string = 'Choose date';\n\n /** A label for the 'switch to year view' button (used by screen readers). */\n switchToMultiYearViewLabel: string = 'Choose month and year';\n\n /** Formats a range of years. */\n formatYearRange(start: string, end: string): string {\n return `${start} \\u2013 ${end}`;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, OnChanges, OnDestroy, Output, SimpleChanges, ViewEncapsulation, } from '@angular/core';\nimport { take } from 'rxjs/operators';\n\n/** Extra CSS classes that can be associated with a calendar cell. */\nexport type MatCalendarCellCssClasses = string | string[] | Set<string> | { [key: string]: any };\n\n/** Function that can generate the extra classes that should be added to a calendar cell. */\nexport type MatCalendarCellClassFunction<D> =\n (date: D, view: 'month' | 'year' | 'multi-year') => MatCalendarCellCssClasses;\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MatCalendarCell<D = any> {\n constructor(\n public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean,\n public cssClasses: MatCalendarCellCssClasses = {},\n public compareValue = value,\n public rawValue?: D\n ) { }\n}\n\n/** Event emitted when a date inside the calendar is triggered as a result of a user action. */\nexport interface MatCalendarUserEvent<D> {\n value: D;\n event: Event;\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n selector: '[gipi-mat-calendar-body]',\n templateUrl: 'calendar-body.html',\n styleUrls: ['calendar-body.scss'],\n host: {\n 'class': 'mat-calendar-body',\n 'role': 'grid',\n 'aria-readonly': 'true'\n },\n exportAs: 'gipiMatCalendarBody',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarBody implements OnChanges, OnDestroy {\n /**\n * Used to skip the next focus event when rendering the preview range.\n * We need a flag like this, because some browsers fire focus events asynchronously.\n */\n private _skipNextFocus: boolean;\n\n /** The label for the table. (e.g. \"Jan 2017\"). */\n @Input() label: string;\n\n /** The cells to display in the table. */\n @Input() rows: MatCalendarCell[][];\n\n /** The value in the table that corresponds to today. */\n @Input() todayValue: number;\n\n /** Start value of the selected date range. */\n @Input() startValue: number;\n\n /** End value of the selected date range. */\n @Input() endValue: number;\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n @Input() labelMinRequiredCells: number;\n\n /** The number of columns in the table. */\n @Input() numCols: number = 7;\n\n /** The cell number of the active cell in the table. */\n @Input() activeCell: number = 0;\n\n /** Whether a range is being selected. */\n @Input() isRange: boolean = false;\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n @Input() cellAspectRatio: number = 1;\n\n /** Start of the comparison range. */\n @Input() comparisonStart: number | null;\n\n /** End of the comparison range. */\n @Input() comparisonEnd: number | null;\n\n /** Start of the preview range. */\n @Input() previewStart: number | null = null;\n\n /** End of the preview range. */\n @Input() previewEnd: number | null = null;\n\n /** Emits when a new value is selected. */\n @Output() readonly selectedValueChange: EventEmitter<MatCalendarUserEvent<number>> =\n new EventEmitter<MatCalendarUserEvent<number>>();\n\n /** Emits when the preview has changed as a result of a user action. */\n @Output() previewChange = new EventEmitter<MatCalendarUserEvent<MatCalendarCell | null>>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n _firstRowOffset: number;\n\n /** Padding for the individual date cells. */\n _cellPadding: string;\n\n /** Width of an individual cell. */\n _cellWidth: string;\n\n constructor(private _elementRef: ElementRef<HTMLElement>, private _ngZone: NgZone) {\n _ngZone.runOutsideAngular(() => {\n const element = _elementRef.nativeElement;\n element.addEventListener('mouseenter', this._enterHandler, true);\n element.addEventListener('focus', this._enterHandler, true);\n element.addEventListener('mouseleave', this._leaveHandler, true);\n element.addEventListener('blur', this._leaveHandler, true);\n });\n }\n\n /** Called when a cell is clicked. */\n _cellClicked(cell: MatCalendarCell, event: MouseEvent): void {\n if (cell.enabled) {\n this.selectedValueChange.emit({ value: cell.value, event });\n }\n }\n\n /** Returns whether a cell should be marked as selected. */\n _isSelected(value: number) {\n return this.startValue === value || this.endValue === value;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const columnChanges = changes['numCols'];\n const { rows, numCols } = this;\n\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${50 * this.cellAspectRatio / numCols}%`;\n }\n\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n\n ngOnDestroy() {\n const element = this._elementRef.nativeElement;\n element.removeEventListener('mouseenter', this._enterHandler, true);\n element.removeEventListener('focus', this._enterHandler, true);\n element.removeEventListener('mouseleave', this._leaveHandler, true);\n element.removeEventListener('blur', this._leaveHandler, true);\n }\n\n /** Returns whether a cell is active. */\n _isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n\n return cellNumber == this.activeCell;\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview = true) {\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n const activeCell: HTMLElement | null =\n this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n\n if (activeCell) {\n if (!movePreview) {\n this._skipNextFocus = true;\n }\n\n activeCell.focus();\n }\n });\n });\n }\n\n /** Gets whether a value is the start of the main range. */\n _isRangeStart(value: number) {\n return isStart(value, this.startValue, this.endValue);\n }\n\n /** Gets whether a value is the end of the main range. */\n _isRangeEnd(value: number) {\n return isEnd(value, this.startValue, this.endValue);\n }\n\n /** Gets whether a value is within the currently-selected range. */\n _isInRange(value: number): boolean {\n return isInRange(value, this.startValue, this.endValue, this.isRange);\n }\n\n /** Gets whether a value is the start of the comparison range. */\n _isComparisonStart(value: number) {\n return isStart(value, this.comparisonStart, this.comparisonEnd);\n }\n\n /** Whether the cell is a start bridge cell between the main and comparison ranges. */\n _isComparisonBridgeStart(value: number, rowIndex: number, colIndex: number) {\n if (!this._isComparisonStart(value) || this._isRangeStart(value) || !this._isInRange(value)) {\n return false;\n }\n\n let previousCell: MatCalendarCell | undefined = this.rows[rowIndex][colIndex - 1];\n\n if (!previousCell) {\n const previousRow = this.rows[rowIndex - 1];\n previousCell = previousRow && previousRow[previousRow.length - 1];\n }\n\n return previousCell && !this._isRangeEnd(previousCell.compareValue);\n }\n\n /** Whether the cell is an end bridge cell between the main and comparison ranges. */\n _isComparisonBridgeEnd(value: number, rowIndex: number, colIndex: number) {\n if (!this._isComparisonEnd(value) || this._isRangeEnd(value) || !this._isInRange(value)) {\n return false;\n }\n\n let nextCell: MatCalendarCell | undefined = this.rows[rowIndex][colIndex + 1];\n\n if (!nextCell) {\n const nextRow = this.rows[rowIndex + 1];\n nextCell = nextRow && nextRow[0];\n }\n\n return nextCell && !this._isRangeStart(nextCell.compareValue);\n }\n\n /** Gets whether a value is the end of the comparison range. */\n _isComparisonEnd(value: number) {\n return isEnd(value, this.comparisonStart, this.comparisonEnd);\n }\n\n /** Gets whether a value is within the current comparison range. */\n _isInComparisonRange(value: number) {\n return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);\n }\n\n /**\n * Gets whether a value is the same as the start and end of the comparison range.\n * For context, the functions that we use to determine whether something is the start/end of\n * a range don't allow for the start and end to be on the same day, because we'd have to use\n * much more specific CSS selectors to style them correctly in all scenarios. This is fine for\n * the regular range, because when it happens, the selected styles take over and still show where\n * the range would've been, however we don't have these selected styles for a comparison range.\n * This function is used to apply a class that serves the same purpose as the one for selected\n * dates, but it only applies in the context of a comparison range.\n */\n _isComparisonIdentical(value: number) {\n // Note that we don't need to null check the start/end\n // here, because the `value` will always be defined.\n return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;\n }\n\n /** Gets whether a value is the start of the preview range. */\n _isPreviewStart(value: number) {\n return isStart(value, this.previewStart, this.previewEnd);\n }\n\n /** Gets whether a value is the end of the preview range. */\n _isPreviewEnd(value: number) {\n return isEnd(value, this.previewStart, this.previewEnd);\n }\n\n /** Gets whether a value is inside the preview range. */\n _isInPreview(value: number) {\n return isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n }\n\n /**\n * Event handler for when the user enters an element\n * inside the calendar body (e.g. by hovering in or focus).\n */\n private _enterHandler = (event: Event) => {\n if (this._skipNextFocus && event.type === 'focus') {\n this._skipNextFocus = false;\n return;\n }\n\n // We only need to hit the zone when we're selecting a range.\n if (event.target && this.isRange) {\n const cell = this._getCellFromElement(event.target as HTMLElement);\n\n if (cell) {\n this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));\n }\n }\n }\n\n /**\n * Event handler for when the user's pointer leaves an element\n * inside the calendar body (e.g. by hovering out or blurring).\n */\n private _leaveHandler = (event: Event) => {\n // We only need to hit the zone when we're selecting a range.\n if (this.previewEnd !== null && this.isRange) {\n // Only reset the preview end value when leaving cells. This looks better, because\n // we have a gap between the cells and the rows and we don't want to remove the\n // range just for it to show up again when the user moves a few pixels to the side.\n if (event.target && isTableCell(event.target as HTMLElement)) {\n this._ngZone.run(() => this.previewChange.emit({ value: null, event }));\n }\n }\n }\n\n /** Finds the MatCalendarCell that corresponds to a DOM node. */\n private _getCellFromElement(element: HTMLElement): MatCalendarCell | null {\n let cell: HTMLElement | undefined;\n\n if (isTableCell(element)) {\n cell = element;\n } else if (isTableCell(element.parentNode!)) {\n cell = element.parentNode as HTMLElement;\n }\n\n if (cell) {\n const row = cell.getAttribute('data-mat-row');\n const col = cell.getAttribute('data-mat-col');\n\n if (row && col) {\n return this.rows[parseInt(row)][parseInt(col)];\n }\n }\n\n return null;\n }\n\n}\n\n/** Checks whether a node is a table cell element. */\nfunction isTableCell(node: Node): node is HTMLTableCellElement {\n return node.nodeName === 'TD';\n}\n\n/** Checks whether a value is the start of a range. */\nfunction isStart(value: number, start: number | null, end: number | null): boolean {\n return end !== null && start !== end && value < end && value === start;\n}\n\n/** Checks whether a value is the end of a range. */\nfunction isEnd(value: number, start: number | null, end: number | null): boolean {\n return start !== null && start !== end && value >= start && value === end;\n}\n\n/** Checks whether a value is inside of a range. */\nfunction isInRange(value: number, start: number | null, end: number | null, rangeEnabled: boolean): boolean {\n return rangeEnabled && start !== null && end !== null && start !== end && value >= start && value <= end;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { FactoryProvider, Injectable, InjectionToken, Optional, SkipSelf } from '@angular/core';\nimport { DateRange } from './date-selection-model';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\n/** Injection token used to customize the date range selection behavior. */\nexport const MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken<MatDateRangeSelectionStrategy<any>>('MAT_DATE_RANGE_SELECTION_STRATEGY');\n\n/** Object that can be provided in order to customize the date range selection behavior. */\nexport interface MatDateRangeSelectionStrategy<D> {\n /**\n * Called when the user has finished selecting a value.\n * @param date Date that was selected. Will be null if the user cleared the selection.\n * @param currentRange Range that is currently show in the calendar.\n * @param event DOM event that triggered the selection. Currently only corresponds to a `click`\n * event, but it may get expanded in the future.\n */\n selectionFinished(date: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\n\n /**\n * Called when the user has activated a new date (e.g. by hovering over\n * it or moving focus) and the calendar tries to display a date range.\n *\n * @param activeDate Date that the user has activated. Will be null if the user moved\n * focus to an element that's no a calendar cell.\n * @param currentRange Range that is currently shown in the calendar.\n * @param event DOM event that caused the preview to be changed. Will be either a\n * `mouseenter`/`mouseleave` or `focus`/`blur` depending on how the user is navigating.\n */\n createPreview(activeDate: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\n}\n\n/** Provides the default date range selection behavior. */\n@Injectable()\nexport class DefaultMatCalendarRangeStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n\n constructor(private _dateAdapter: DateAdapter<D>) { }\n\n selectionFinished(date: D, currentRange: DateRange<D>) {\n let { start, end } = currentRange;\n\n if (start == null) {\n start = date;\n } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n end = date;\n } else {\n start = date;\n end = null;\n }\n\n return new DateRange<D>(start, end);\n }\n\n createPreview(activeDate: D | null, currentRange: DateRange<D>) {\n let start: D | null = null;\n let end: D | null = null;\n\n if (currentRange.start && !currentRange.end && activeDate) {\n start = currentRange.start;\n end = activeDate;\n }\n\n return new DateRange<D>(start, end);\n }\n}\n\n\n/** @docs-private */\nexport function MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(parent: MatDateRangeSelectionStrategy<unknown>, adapter: DateAdapter<unknown>) {\n return parent || new DefaultMatCalendarRangeStrategy(adapter);\n}\n\n/** @docs-private */\nexport const MAT_CALENDAR_RANGE_STRATEGY_PROVIDER: FactoryProvider = {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n deps: [[new Optional(), new SkipSelf(), MAT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],\n useFactory: MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { DOWN_ARROW, END, ENTER, ESCAPE, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, SPACE, UP_ARROW, } from '@angular/cdk/keycodes';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnChanges, OnDestroy, Optional, Output, SimpleChanges, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { MAT_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { MatCalendarBody, MatCalendarCell, MatCalendarCellClassFunction, MatCalendarUserEvent, } from './calendar-body';\nimport { MAT_DATE_RANGE_SELECTION_STRATEGY, MatDateRangeSelectionStrategy, } from './date-range-selection-strategy';\nimport { DateRange } from './date-selection-model';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\nconst DAYS_PER_WEEK = 7;\n\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\n@Component({\n selector: 'gipi-mat-month-view',\n templateUrl: 'month-view.html',\n exportAs: 'gipiMatMonthView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatMonthView<D> implements AfterContentInit, OnChanges, OnDestroy {\n private _rerenderSubscription = Subscription.EMPTY;\n\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n @Input()\n get activeDate(): D { return this._activeDate; }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): DateRange<D> | D | null { return this._selected; }\n set selected(value: DateRange<D> | D | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n\n this._setRanges(this._selected);\n }\n private _selected: DateRange<D> | D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** Function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Function that can be used to add custom CSS classes to dates. */\n @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n /** Start of the comparison range. */\n @Input() comparisonStart: D | null;\n\n /** End of the comparison range. */\n @Input() comparisonEnd: D | null;\n\n /** Emits when a new date is selected. */\n @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection: EventEmitter<MatCalendarUserEvent<D | null>> =\n new EventEmitter<MatCalendarUserEvent<D | null>>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MatCalendarBody, { static: true }) _matCalendarBody: MatCalendarBody;\n\n /** The label for this month (e.g. \"January 2017\"). */\n _monthLabel: string;\n\n /** Grid of calendar cells representing the dates of the month. */\n _weeks: MatCalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n _firstWeekOffset: number;\n\n /** Start value of the currently-shown date range. */\n _rangeStart: number | null;\n\n /** End value of the currently-shown date range. */\n _rangeEnd: number | null;\n\n /** Start value of the currently-shown comparison date range. */\n _comparisonRangeStart: number | null;\n\n /** End value of the currently-shown comparison date range. */\n _comparisonRangeEnd: number | null;\n\n /** Start of the preview range. */\n _previewStart: number | null;\n\n /** End of the preview range. */\n _previewEnd: number | null;\n\n /** Whether the user is currently selecting a range of dates. */\n _isRange: boolean;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n _todayDate: number | null;\n\n /** The names of the weekdays. */\n _weekdays: { long: string, narrow: string }[];\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() private _dir?: Directionality,\n @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY) @Optional()\n private _rangeStrategy?: MatDateRangeSelectionStrategy<D>\n ) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n this._activeDate = this._dateAdapter.today();\n }\n\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\n\n if (comparisonChange && !comparisonChange.firstChange) {\n this._setRanges(this.selected);\n }\n }\n\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n\n /** Handles when a new date is selected. */\n _dateSelected(event: MatCalendarUserEvent<number>) {\n const date = event.value;\n const selectedYear = this._dateAdapter.getYear(this.activeDate);\n const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\n const selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);\n let rangeStartDate: number | null;\n let rangeEndDate: number | null;\n\n if (this._selected instanceof DateRange) {\n rangeStartDate = this._getDateInCurrentMonth(this._selected.start);\n rangeEndDate = this._getDateInCurrentMonth(this._selected.end);\n } else {\n rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selected);\n }\n\n if (rangeStartDate !== date || rangeEndDate !== date) {\n this.selectedChange.emit(selectedDate);\n }\n\n this._userSelection.emit({ value: selectedDate, event: event.event });\n }\n\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n 1 - this._dateAdapter.getDate(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n (this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n this._dateAdapter.getDate(this._activeDate)));\n break;\n case PAGE_UP:\n this.activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, -1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, 1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n if (!this.dateFilter || this.dateFilter(this._activeDate)) {\n this._dateSelected({ value: this._dateAdapter.getDate(this._activeDate), event });\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n return;\n case ESCAPE:\n // Abort the current range selection if the user presses escape mid-selection.\n if (this._previewEnd != null) {\n this._previewStart = this._previewEnd = null;\n this.selectedChange.emit(null);\n this._userSelection.emit({ value: null, event });\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Initializes this month view. */\n _init() {\n this._setRanges(this.selected);\n this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\n this._monthLabel = this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();\n\n let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), 1);\n this._firstWeekOffset = (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) - this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n\n this._initWeekdays();\n this._createWeekCells();\n this._changeDetectorRef.markForCheck();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview?: boolean) {\n this._matCalendarBody._focusActiveCell(movePreview);\n }\n\n /** Called when the user has activated a new cell and the preview needs to be updated. */\n _previewChanged({ event, value: cell }: MatCalendarUserEvent<MatCalendarCell<D> | null>) {\n if (this._rangeStrategy) {\n // We can assume that this will be a range, because preview\n // events aren't fired for single date selections.\n const value = cell ? cell.rawValue! : null;\n const previewRange = this._rangeStrategy.createPreview(value, this.selected as DateRange<D>, event);\n this._previewStart = this._getCellCompareValue(previewRange.start);\n this._previewEnd = this._getCellCompareValue(previewRange.end);\n\n // Note that here we need to use `detectChanges`, rather than `markForCheck`, because\n // the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time\n // when navigating one month back using the keyboard which will cause this handler\n // to throw a \"changed after checked\" error when updating the preview state.\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /** Initializes the weekdays. */\n private _initWeekdays() {\n const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i] };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n\n /** Creates MatCalendarCells for the dates in this month. */\n private _createWeekCells() {\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._dateAdapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), i + 1);\n const enabled = this._shouldEnableDate(date);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;\n\n this._weeks[this._weeks.length - 1].push(new MatCalendarCell<D>(i + 1, dateNames[i], ariaLabel, enabled, cellClasses, this._getCellCompareValue(date)!, date));\n }\n }\n\n /** Date filter for the month */\n private _shouldEnableDate(date: D): boolean {\n return !!date &&\n (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) &&\n (!this.dateFilter || this.dateFilter(date));\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private _getDateInCurrentMonth(date: D | null): number | null {\n return date && this._hasSameMonthAndYear(date, this.activeDate) ?\n this._dateAdapter.getDate(date) : null;\n }\n\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n private _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n }\n\n /** Gets the value that will be used to one cell to another. */\n private _getCellCompareValue(date: D | null): number | null {\n if (date) {\n // We use the time since the Unix epoch to compare dates in this view, rather than the\n // cell values, because we need to support ranges that span across multiple months/years.\n const year = this._dateAdapter.getYear(date);\n const month = this._dateAdapter.getMonth(date);\n const day = this._dateAdapter.getDate(date);\n return new Date(year, month, day).getTime();\n }\n\n return null;\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n\n /** Sets the current range based on a model value. */\n private _setRanges(selectedValue: DateRange<D> | D | null) {\n if (selectedValue instanceof DateRange) {\n this._rangeStart = this._getCellCompareValue(selectedValue.start);\n this._rangeEnd = this._getCellCompareValue(selectedValue.end);\n this._isRange = true;\n } else {\n this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\n this._isRange = false;\n }\n\n this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\n this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, SPACE, UP_ARROW, } from '@angular/cdk/keycodes';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, Optional, Output, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { MatCalendarBody, MatCalendarCell, MatCalendarCellClassFunction, MatCalendarUserEvent, } from './calendar-body';\nimport { DateRange } from './date-selection-model';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\n@Component({\n selector: 'gipi-mat-multi-year-view',\n templateUrl: 'multi-year-view.html',\n exportAs: 'gipiMatMultiYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatMultiYearView<D> implements AfterContentInit, OnDestroy {\n private _rerenderSubscription = Subscription.EMPTY;\n\n /** The date to display in this multi-year view (everything other than the year is ignored). */\n @Input()\n get activeDate(): D { return this._activeDate; }\n set activeDate(value: D) {\n let oldActiveDate = this._activeDate;\n const validDate =\n this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(value)\n ) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n\n if (!isSameMultiYearView(\n this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): DateRange<D> | D | null { return this._selected; }\n set selected(value: DateRange<D> | D | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n\n this._setSelectedYear(value);\n }\n private _selected: DateRange<D> | D | null;\n\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Function that can be used to add custom CSS classes to date cells. */\n @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n /** Emits when a new year is selected. */\n @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits the selected year. This doesn't imply a change on the selected date */\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MatCalendarBody, { static: true }) _matCalendarBody: MatCalendarBody;\n\n /** Grid of calendar cells representing the currently displayed years. */\n _years: MatCalendarCell[][];\n\n /** The year that today falls on. */\n _todayYear: number;\n\n /** The year of the selected date. Null if the selected date is null. */\n _selectedYear: number | null;\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() private _dir?: Directionality\n ) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n this._activeDate = this._dateAdapter.today();\n }\n\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n\n /** Initializes this multi-year view. */\n _init() {\n this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n\n // We want a range years such that we maximize the number of\n // enabled dates visible at once. This prevents issues where the minimum year\n // is the last item of a page OR the maximum year is the first item of a page.\n\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view.\n const activeYear = this._dateAdapter.getYear(this._activeDate);\n const minYearOfPage = activeYear - getActiveOffset(\n this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n\n this._years = [];\n for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length == yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n\n /** Handles when a new year is selected. */\n _yearSelected(event: MatCalendarUserEvent<number>) {\n const year = event.value;\n this.yearSelected.emit(this._dateAdapter.createDate(year, 0, 1));\n let month = this._dateAdapter.getMonth(this.activeDate);\n let daysInMonth =\n this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, month, 1));\n this.selectedChange.emit(this._dateAdapter.createDate(year, month,\n Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n yearsPerPage - getActiveOffset(\n this._dateAdapter, this.activeDate, this.minDate, this.maxDate) - 1);\n break;\n case PAGE_UP:\n this.activeDate =\n this._dateAdapter.addCalendarYears(\n this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n break;\n case PAGE_DOWN:\n this.activeDate =\n this._dateAdapter.addCalendarYears(\n this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n break;\n case ENTER:\n case SPACE:\n this._yearSelected({ value: this._dateAdapter.getYear(this._activeDate), event });\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n _getActiveCell(): number {\n return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n\n /** Creates an MatCalendarCell for the given year. */\n private _createCellForYear(year: number) {\n const date = this._dateAdapter.createDate(year, 0, 1);\n const yearName = this._dateAdapter.getYearName(date);\n const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;\n\n return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year), cellClasses);\n }\n\n /** Whether the given year is enabled. */\n private _shouldEnableYear(year: number) {\n // disable if the year is greater than maxDate lower than minDate\n if (year === undefined || year === null ||\n (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) ||\n (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\n return false;\n }\n\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear; this._dateAdapter.getYear(date) == year;\n date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n\n /** Sets the currently-highlighted year based on a model value. */\n private _setSelectedYear(value: DateRange<D> | D | null) {\n this._selectedYear = null;\n\n if (value instanceof DateRange) {\n const displayValue = value.start || value.end;\n\n if (displayValue) {\n this._selectedYear = this._dateAdapter.getYear(displayValue);\n }\n } else if (value) {\n this._selectedYear = this._dateAdapter.getYear(value);\n }\n }\n}\n\nexport function isSameMultiYearView<D>(dateAdapter: DateAdapter<D>, date1: D, date2: D, minDate: D | null, maxDate: D | null): boolean {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return Math.floor((year1 - startingYear) / yearsPerPage) === Math.floor((year2 - startingYear) / yearsPerPage);\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(dateAdapter: DateAdapter<D>, activeDate: D, minDate: D | null, maxDate: D | null): number {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo((activeYear - getStartingYear(dateAdapter, minDate, maxDate)), yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(dateAdapter: DateAdapter<D>, minDate: D | null, maxDate: D | null): number {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n } else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a: number, b: number): number {\n return (a % b + b) % b;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, SPACE, UP_ARROW, } from '@angular/cdk/keycodes';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnDestroy, Optional, Output, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { MAT_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { MatCalendarBody, MatCalendarCell, MatCalendarCellClassFunction, MatCalendarUserEvent, } from './calendar-body';\nimport { DateRange } from './date-selection-model';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\n@Component({\n selector: 'gipi-mat-year-view',\n templateUrl: 'year-view.html',\n exportAs: 'gipiMatYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatYearView<D> implements AfterContentInit, OnDestroy {\n private _rerenderSubscription = Subscription.EMPTY;\n\n /** The date to display in this year view (everything other than the year is ignored). */\n @Input()\n get activeDate(): D { return this._activeDate; }\n set activeDate(value: D) {\n let oldActiveDate = this._activeDate;\n const validDate =\n this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(value)\n ) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): DateRange<D> | D | null { return this._selected; }\n set selected(value: DateRange<D> | D | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n\n this._setSelectedMonth(value);\n }\n private _selected: DateRange<D> | D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Function that can be used to add custom CSS classes to date cells. */\n @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n /** Emits when a new month is selected. */\n @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits the selected month. This doesn't imply a change on the selected date */\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MatCalendarBody, { static: true }) _matCalendarBody: MatCalendarBody;\n\n /** Grid of calendar cells representing the months of the year. */\n _months: MatCalendarCell[][];\n\n /** The label for this year (e.g. \"2017\"). */\n _yearLabel: string;\n\n /** The month in this year that today falls on. Null if today is in a different year. */\n _todayMonth: number | null;\n\n /**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n */\n _selectedMonth: number | null;\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() private _dir?: Directionality\n ) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n this._activeDate = this._dateAdapter.today();\n }\n\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges\n .pipe(startWith(null))\n .subscribe(() => this._init());\n }\n\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n\n /** Handles when a new month is selected. */\n _monthSelected(event: MatCalendarUserEvent<number>) {\n const month = event.value;\n const normalizedDate =\n this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n\n this.monthSelected.emit(normalizedDate);\n\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n\n this.selectedChange.emit(this._dateAdapter.createDate(\n this._dateAdapter.getYear(this.activeDate), month,\n Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n -this._dateAdapter.getMonth(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n 11 - this._dateAdapter.getMonth(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n this._monthSelected({ value: this._dateAdapter.getMonth(this._activeDate), event });\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Initializes this year view. */\n _init() {\n this._setSelectedMonth(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n\n let monthNames = this._dateAdapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n this._changeDetectorRef.markForCheck();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n private _getMonthInCurrentYear(date: D | null) {\n return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ?\n this._dateAdapter.getMonth(date) : null;\n }\n\n /** Creates an MatCalendarCell for the given month. */\n private _createCellForMonth(month: number, monthName: string) {\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;\n\n return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month), cellClasses);\n }\n\n /** Whether the given month is enabled. */\n private _shouldEnableMonth(month: number) {\n const activeYear = this._dateAdapter.getYear(this.activeDate);\n\n if (\n month === undefined ||\n month === null ||\n this._isYearAndMonthAfterMaxDate(activeYear, month) ||\n this._isYearAndMonthBeforeMinDate(activeYear, month)\n ) {\n return false;\n }\n\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n\n // If any date in the month is enabled count the month as enabled.\n for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month;\n date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Tests whether the combination month/year is after this.maxDate, considering\n * just the month and year of this.maxDate\n */\n private _isYearAndMonthAfterMaxDate(year: number, month: number) {\n if (this.maxDate) {\n const maxYear = this._dateAdapter.getYear(this.maxDate);\n const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n\n return year > maxYear || (year === maxYear && month > maxMonth);\n }\n\n return false;\n }\n\n /**\n * Tests whether the combination month/year is before this.minDate, considering\n * just the month and year of this.minDate\n */\n private _isYearAndMonthBeforeMinDate(year: number, month: number) {\n if (this.minDate) {\n const minYear = this._dateAdapter.getYear(this.minDate);\n const minMonth = this._dateAdapter.getMonth(this.minDate);\n\n return year < minYear || (year === minYear && month < minMonth);\n }\n\n return false;\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n\n /** Sets the currently-selected month based on a model value. */\n private _setSelectedMonth(value: DateRange<D> | D | null) {\n if (value instanceof DateRange) {\n this._selectedMonth = this._getMonthInCurrentYear(value.start) ||\n this._getMonthInCurrentYear(value.end);\n } else {\n this._selectedMonth = this._getMonthInCurrentYear(value);\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { AfterContentInit, AfterViewChecked, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnChanges, OnDestroy, Optional, Output, SimpleChanges, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { MatCalendarCellClassFunction, MatCalendarUserEvent } from './calendar-body';\nimport { DateRange, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER } from './date-selection-model';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { MatDatepickerIntl } from './datepicker-intl';\nimport { MatMonthView } from './month-view';\nimport { getActiveOffset, isSameMultiYearView, MatMultiYearView, yearsPerPage } from './multi-year-view';\nimport { DateAdapter } from './shared/adapter/date-adapter';\nimport { MAT_DATE_FORMATS, MatDateFormats } from './shared/adapter/date-formats';\nimport { MatYearView } from './year-view';\n\n/**\n * Possible views for the calendar.\n * @docs-private\n */\nexport type MatCalendarView = 'month' | 'year' | 'multi-year';\n\n/**\n * A calendar that is used as part of the datepicker.\n * @docs-private\n */\n@Component({\n selector: 'gipi-mat-calendar',\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.scss'],\n host: {\n 'class': 'mat-calendar',\n },\n exportAs: 'gipiMatCalendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER\n ]\n})\nexport class MatCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges {\n\n public matCalendarRef: MatCalendar<D> = this;\n\n /** Created by GIPI Sistemas */\n @Input() templatePresetRange: TemplateRef<any>;\n\n private _intlChanges: Subscription;\n\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n private _moveFocusOnNextTick = false;\n\n /** A date representing the period (month or year) to start the calendar in. */\n @Input()\n get startAt(): D | null { return this._startAt; }\n set startAt(value: D | null) {\n this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _startAt: D | null;\n\n /** Whether the calendar should be started in month or year view. */\n @Input() startView: MatCalendarView = 'month';\n\n /** The currently selected date. */\n @Input()\n get selected(): DateRange<D> | D | null { return this._selected; }\n set selected(value: DateRange<D> | D | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n }\n private _selected: DateRange<D> | D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** Function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Function that can be used to add custom CSS classes to dates. */\n @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n /** Start of the comparison range. */\n @Input() comparisonStart: D | null;\n\n /** End of the comparison range. */\n @Input() comparisonEnd: D | null;\n\n /**\n * Emits when the currently selected date changes.\n * @breaking-change 11.0.0 Emitted value to change to `D | null`.\n */\n @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection: EventEmitter<MatCalendarUserEvent<D | null>> = new EventEmitter<MatCalendarUserEvent<D | null>>();\n\n /** Reference to the current month view component. */\n @ViewChild(MatMonthView, { static: false }) monthView: MatMonthView<D>;\n\n /** Reference to the current year view component. */\n @ViewChild(MatYearView, { static: false }) yearView: MatYearView<D>;\n\n /** Reference to the current multi-year view component. */\n @ViewChild(MatMultiYearView, { static: false }) multiYearView: MatMultiYearView<D>;\n\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get activeDate(): D { return this._clampedActiveDate; }\n set activeDate(value: D) {\n this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n this.stateChanges.next();\n this._changeDetectorRef.markForCheck();\n }\n private _clampedActiveDate: D;\n\n /** Whether the calendar is in month view. */\n get currentView(): MatCalendarView { return this._currentView; }\n set currentView(value: MatCalendarView) {\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n }\n private _currentView: MatCalendarView;\n\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n stateChanges = new Subject<void>();\n\n constructor(\n _intl: MatDatepickerIntl,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n private _changeDetectorRef: ChangeDetectorRef\n ) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n this._intlChanges = _intl.changes.subscribe(() => {\n _changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n\n ngAfterContentInit() {\n this.activeDate = this.startAt || this._dateAdapter.today();\n\n // Assign to the private property since we don't want to move focus on init.\n this._currentView = this.startView;\n }\n\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n this.stateChanges.complete();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const change = changes['minDate'] || changes['maxDate'] || changes['dateFilter'];\n\n if (change && !change.firstChange) {\n const view = this._getCurrentViewComponent();\n\n if (view) {\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n this._changeDetectorRef.detectChanges();\n view._init();\n }\n }\n\n this.stateChanges.next();\n }\n\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell(false);\n }\n\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n const currentView = this.currentView;\n let view: MatMonthView<D> | MatYearView<D> | MatMultiYearView<D>;\n\n if (currentView === 'month') {\n view = this.monthView;\n } else if (currentView === 'year') {\n view = this.yearView;\n } else {\n view = this.multiYearView;\n }\n\n view._init();\n }\n\n /** Handles date selection in the month view. */\n _dateSelected(event: MatCalendarUserEvent<D | null>): void {\n const date = event.value;\n\n if (this.selected instanceof DateRange || (date && !this._dateAdapter.sameDate(date, this.selected))) {\n // @breaking-change 11.0.0 remove non-null assertion\n // once the `selectedChange` is allowed to be null.\n this.selectedChange.emit(date!);\n }\n\n this._userSelection.emit(event);\n }\n\n /** Handles year selection in the multiyear view. */\n _yearSelectedInMultiYearView(normalizedYear: D) {\n this.yearSelected.emit(normalizedYear);\n }\n\n /** Handles month selection in the year view. */\n _monthSelectedInYearView(normalizedMonth: D) {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /** Handles year/month selection in the multi-year/year views. */\n _goToDateInView(date: D, view: 'month' | 'year' | 'multi-year'): void {\n this.activeDate = date;\n this.currentView = view;\n }\n\n /** Returns the component instance that corresponds to the current calendar view. */\n private _getCurrentViewComponent() {\n return this.monthView || this.yearView || this.multiYearView;\n }\n}\n\n/** Default header for MatCalendar */\n@Component({\n selector: 'gipi-mat-calendar-header',\n templateUrl: 'calendar-header.html',\n exportAs: 'gipiMatCalendarHeader',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarHeader<D> implements AfterViewInit {\n\n @Input() matCalendar: MatCalendar<D>;\n\n constructor(\n private _intl: MatDatepickerIntl,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n private _changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngAfterViewInit(): void {\n this.matCalendar.stateChanges.subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n /** The label for the current matCalendar view. */\n get periodButtonText(): string {\n if (this.matCalendar.currentView == 'month') {\n return this._dateAdapter\n .format(this.matCalendar.activeDate, this._dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n if (this.matCalendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.matCalendar.activeDate);\n }\n\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._dateAdapter.getYear(this.matCalendar.activeDate);\n const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.matCalendar.activeDate, this.matCalendar.minDate, this.matCalendar.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n const minYearName = this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0, 1));\n const maxYearName = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));\n return this._intl.formatYearRange(minYearName, maxYearName);\n }\n\n get periodButtonLabel(): string {\n return this.matCalendar.currentView == 'month' ? this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\n }\n\n /** The label for the previous button. */\n get prevButtonLabel(): string {\n return {\n 'month': this._intl.prevMonthLabel,\n 'year': this._intl.prevYearLabel,\n 'multi-year': this._intl.prevMultiYearLabel\n }[this.matCalendar.currentView];\n }\n\n /** The label for the next button. */\n get nextButtonLabel(): string {\n return {\n 'month': this._intl.nextMonthLabel,\n 'year': this._intl.nextYearLabel,\n 'multi-year': this._intl.nextMultiYearLabel\n }[this.matCalendar.currentView];\n }\n\n /** Handles user clicks on the period label. */\n currentPeriodClicked(): void {\n this.matCalendar.currentView = this.matCalendar.currentView == 'month' ? 'multi-year' : 'month';\n }\n\n /** Handles user clicks on the previous button. */\n previousClicked(): void {\n this.matCalendar.activeDate = this.matCalendar.currentView == 'month'\n ? this._dateAdapter.addCalendarMonths(this.matCalendar.activeDate, -1)\n : this._dateAdapter.addCalendarYears(this.matCalendar.activeDate, this.matCalendar.currentView == 'year' ? -1 : -yearsPerPage);\n }\n\n /** Handles user clicks on the next button. */\n nextClicked(): void {\n this.matCalendar.activeDate = this.matCalendar.currentView == 'month'\n ? this._dateAdapter.addCalendarMonths(this.matCalendar.activeDate, 1)\n : this._dateAdapter.addCalendarYears(this.matCalendar.activeDate, this.matCalendar.currentView == 'year' ? 1 : yearsPerPage);\n }\n\n /** Whether the previous period button is enabled. */\n previousEnabled(): boolean {\n if (!this.matCalendar.minDate) {\n return true;\n }\n return !this.matCalendar.minDate || !this._isSameView(this.matCalendar.activeDate, this.matCalendar.minDate);\n }\n\n /** Whether the next period button is enabled. */\n nextEnabled(): boolean {\n return !this.matCalendar.maxDate || !this._isSameView(this.matCalendar.activeDate, this.matCalendar.maxDate);\n }\n\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n private _isSameView(date1: D, date2: D): boolean {\n if (this.matCalendar.currentView == 'month') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) && this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2);\n }\n if (this.matCalendar.currentView == 'year') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(this._dateAdapter, date1, date2, this.matCalendar.minDate, this.matCalendar.maxDate);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, OnDestroy, Optional, Output, SimpleChanges, } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, ValidationErrors, Validator, ValidatorFn, } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { DateSelectionModelChange, ExtractDateTypeFromSelection, MatDateSelectionModel, } from './date-selection-model';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { DateAdapter } from './shared/adapter/date-adapter';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MAT_DATE_FORMATS, MatDateFormats } from './shared/adapter/date-formats';\n\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nexport class MatDatepickerInputEvent<D, S = unknown> {\n /** The new value for the target datepicker input. */\n value: D | null;\n\n constructor(\n /** Reference to the datepicker input component that emitted the event. */\n public target: MatDatepickerInputBase<S, D>,\n /** Reference to the native input element associated with the datepicker input. */\n public targetElement: HTMLElement) {\n this.value = this.target.value;\n }\n}\n\n/** Function that can be used to filter out dates from a calendar. */\nexport type DateFilterFn<D> = (date: D | null) => boolean;\n\n/** Base class for datepicker inputs. */\nexport abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromSelection<S>> implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, Validator {\n\n /** Whether the component has been initialized. */\n private _isInitialized: boolean;\n\n /** The value of the input. */\n @Input()\n get value(): D | null {\n return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\n }\n set value(value: D | null) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = this._isValidValue(value);\n value = this._dateAdapter.getValidDateOrNull(value);\n const oldDate = this.value;\n this._assignValue(value);\n this._formatValue(value);\n\n if (!this._dateAdapter.sameDate(oldDate, value)) {\n this._valueChange.emit(value);\n }\n }\n protected _model: MatDateSelectionModel<S, D> | undefined;\n\n /** Whether the datepicker-input is disabled. */\n @Input()\n get disabled(): boolean { return !!this._disabled || this._parentDisabled(); }\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n const element = this._elementRef.nativeElement;\n\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.stateChanges.next(undefined);\n }\n\n // We need to null check the `blur` method, because it's undefined during SSR.\n // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n // element has been inserted.\n if (newValue && this._isInitialized && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n private _disabled: boolean;\n\n /** Emits when a `change` event is fired on this `<input>`. */\n @Output() readonly dateChange: EventEmitter<MatDatepickerInputEvent<D, S>> = new EventEmitter<MatDatepickerInputEvent<D, S>>();\n\n /** Emits when an `input` event is fired on this `<input>`. */\n @Output() readonly dateInput: EventEmitter<MatDatepickerInputEvent<D, S>> = new EventEmitter<MatDatepickerInputEvent<D, S>>();\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n _valueChange = new EventEmitter<D | null>();\n\n /** Emits when the internal state has changed */\n stateChanges = new Subject<void>();\n\n _onTouched = () => { };\n _validatorOnChange = () => { };\n\n protected _cvaOnChange: (value: any) => void = () => { };\n private _valueChangesSubscription = Subscription.EMPTY;\n private _localeSubscription = Subscription.EMPTY;\n\n /**\n * Since the value is kept on the model which is assigned in an Input,\n * we might get a value before we have a model. This property keeps track\n * of the value until we have somewhere to assign it.\n */\n private _pendingValue: D | null;\n\n /** The form control validator for whether the input parses. */\n private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this._lastValueValid ? null : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };\n }\n\n /** The form control validator for the date filter. */\n private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const dateFilter = this._getDateFilter();\n return !dateFilter || !controlValue || dateFilter(controlValue) ? null : { 'matDatepickerFilter': true };\n }\n\n /** The form control validator for the min date. */\n private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const min = this._getMinDate();\n return (!min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0) ? null : { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };\n }\n\n /** The form control validator for the max date. */\n private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const max = this._getMaxDate();\n return (!max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0) ? null : { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };\n }\n\n /** Gets the base validator functions. */\n protected _getValidators(): ValidatorFn[] {\n return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\n }\n\n /** Gets the minimum date for the input. Used for validation. */\n abstract _getMinDate(): D | null;\n\n /** Gets the maximum date for the input. Used for validation. */\n abstract _getMaxDate(): D | null;\n\n /** Gets the date filter function. Used for validation. */\n protected abstract _getDateFilter(): DateFilterFn<D> | undefined;\n\n /** Registers a date selection model with the input. */\n _registerModel(model: MatDateSelectionModel<S, D>): void {\n this._model = model;\n this._valueChangesSubscription.unsubscribe();\n\n if (this._pendingValue) {\n this._assignValue(this._pendingValue);\n }\n\n this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\n if (event.source !== this) {\n const value = this._getValueFromModel(event.selection);\n this._lastValueValid = this._isValidValue(value);\n this._cvaOnChange(value);\n this._onTouched();\n this._formatValue(value);\n\n // Note that we can't wrap the entire block with this logic, because for the range inputs\n // we want to revalidate whenever either one of the inputs changes and we don't have a\n // good way of distinguishing it at the moment.\n if (this._canEmitChangeEvent(event)) {\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n if (this._outsideValueChanged) {\n this._outsideValueChanged();\n }\n }\n });\n }\n\n /** Opens the popup associated with the input. */\n protected abstract _openPopup(): void;\n\n /** Assigns a value to the input's model. */\n protected abstract _assignValueToModel(model: D | null): void;\n\n /** Converts a value from the model into a native value for the input. */\n protected abstract _getValueFromModel(modelValue: S): D | null;\n\n /** Combined form control validator for this input. */\n protected abstract _validator: ValidatorFn | null;\n\n /**\n * Callback that'll be invoked when the selection model is changed\n * from somewhere that's not the current datepicker input.\n */\n protected abstract _outsideValueChanged?: () => void;\n\n /** Predicate that determines whether we're allowed to emit a particular change event. */\n protected abstract _canEmitChangeEvent(event: DateSelectionModelChange<S>): boolean;\n\n /** Whether the last value set on the input was valid. */\n protected _lastValueValid = false;\n\n constructor(\n protected _elementRef: ElementRef<HTMLInputElement>,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats\n ) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this.value = this.value;\n });\n }\n\n ngAfterViewInit() {\n this._isInitialized = true;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n this.stateChanges.next(undefined);\n }\n }\n\n ngOnDestroy() {\n this._valueChangesSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this._valueChange.complete();\n this.stateChanges.complete();\n }\n\n /** @docs-private */\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n /** @docs-private */\n validate(c: AbstractControl): ValidationErrors | null {\n return this._validator ? this._validator(c) : null;\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: D): void {\n this.value = value;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this._cvaOnChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _onKeydown(event: KeyboardEvent) {\n const isAltDownArrow = event.altKey && event.keyCode === DOWN_ARROW;\n\n if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n this._openPopup();\n event.preventDefault();\n }\n }\n\n _onInput(value: string) {\n const lastValueWasValid = this._lastValueValid;\n let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n this._lastValueValid = this._isValidValue(date);\n date = this._dateAdapter.getValidDateOrNull(date);\n\n if (!this._dateAdapter.sameDate(date, this.value)) {\n this._assignValue(date);\n this._cvaOnChange(date);\n this._valueChange.emit(date);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n } else {\n // Call the CVA change handler for invalid values\n // since this is what marks the control as dirty.\n if (value && !this.value) {\n this._cvaOnChange(date);\n }\n\n if (lastValueWasValid !== this._lastValueValid) {\n this._validatorOnChange();\n }\n }\n }\n\n _onChange() {\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n\n this._onTouched();\n }\n\n /** Formats a value and sets it on the input element. */\n protected _formatValue(value: D | null) {\n this._elementRef.nativeElement.value =\n value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n }\n\n /** Assigns a value to the model. */\n private _assignValue(value: D | null) {\n // We may get some incoming values before the model was\n // assigned. Save the value so that we can assign it later.\n if (this._model) {\n this._assignValueToModel(value);\n this._pendingValue = null;\n } else {\n this._pendingValue = value;\n }\n }\n\n /** Whether a value is considered valid. */\n private _isValidValue(value: D | null): boolean {\n return !value || this._dateAdapter.isValid(value);\n }\n\n /**\n * Checks whether a parent control is disabled. This is in place so that it can be overridden\n * by inputs extending this one which can be placed inside of a group that can be disabled.\n */\n protected _parentDisabled() {\n return false;\n }\n\n}\n\n/**\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\n * callback has any changes, accounting for date objects.\n */\nexport function dateInputsHaveChanged(changes: SimpleChanges, adapter: DateAdapter<unknown>): boolean {\n const keys = Object.keys(changes);\n\n for (let key of keys) {\n const { previousValue, currentValue } = changes[key];\n\n if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\n if (!adapter.sameDate(previousValue, currentValue)) {\n return true;\n }\n } else {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { BACKSPACE } from '@angular/cdk/keycodes';\nimport { Directive, DoCheck, ElementRef, Inject, InjectFlags, InjectionToken, Injector, OnInit, Optional, Type, } from '@angular/core';\nimport { AbstractControl, FormGroupDirective, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgForm, ValidationErrors, ValidatorFn, Validators, } from '@angular/forms';\nimport { CanUpdateErrorState, CanUpdateErrorStateCtor, ErrorStateMatcher, MAT_DATE_FORMATS, MatDateFormats, mixinErrorState, } from '@angular/material/core';\nimport { DateRange, DateSelectionModelChange } from './date-selection-model';\nimport { DateFilterFn, MatDatepickerInputBase } from './datepicker-input-base';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\n/** Parent component that should be wrapped around `MatStartDate` and `MatEndDate`. */\nexport interface MatDateRangeInputParent<D> {\n id: string;\n min: D | null;\n max: D | null;\n dateFilter: DateFilterFn<D>;\n rangePicker: {\n opened: boolean;\n id: string;\n };\n _startInput: MatDateRangeInputPartBase<D>;\n _endInput: MatDateRangeInputPartBase<D>;\n _groupDisabled: boolean;\n _handleChildValueChange(): void;\n _openDatepicker(): void;\n}\n\n/**\n * Used to provide the date range input wrapper component\n * to the parts without circular dependencies.\n */\nexport const MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken<MatDateRangeInputParent<unknown>>('MAT_DATE_RANGE_INPUT_PARENT');\n\n/**\n * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.\n */\n@Directive({})\nabstract class MatDateRangeInputPartBase<D> extends MatDatepickerInputBase<DateRange<D>> implements OnInit, DoCheck {\n\n /** @docs-private */\n ngControl: NgControl;\n\n /** @docs-private */\n abstract updateErrorState(): void;\n\n protected abstract _validator: ValidatorFn | null;\n protected abstract _assignValueToModel(value: D | null): void;\n protected abstract _getValueFromModel(modelValue: DateRange<D>): D | null;\n\n constructor(\n @Inject(MAT_DATE_RANGE_INPUT_PARENT) public _rangeInput: MatDateRangeInputParent<D>,\n elementRef: ElementRef<HTMLInputElement>,\n public _defaultErrorStateMatcher: ErrorStateMatcher,\n private _injector: Injector,\n @Optional() public _parentForm: NgForm,\n @Optional() public _parentFormGroup: FormGroupDirective,\n @Optional() dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats) {\n super(elementRef, dateAdapter, dateFormats);\n }\n\n ngOnInit() {\n // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while\n // injecting its `NgControl` so that the error state is handled correctly. This introduces a\n // circular dependency, because both `ControlValueAccessor` and `Validator` depend on the input\n // itself. Usually we can work around it for the CVA, but there's no API to do it for the\n // validator. We work around it here by injecting the `NgControl` in `ngOnInit`, after\n // everything has been resolved.\n const ngControl = this._injector.get<NgControl>(NgControl as Type<NgControl>, null, InjectFlags.Self);\n\n this._injector.get(NgControl, null)\n\n if (ngControl) {\n this.ngControl = ngControl;\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n\n /** Gets whether the input is empty. */\n isEmpty(): boolean {\n return this._elementRef.nativeElement.value.length === 0;\n }\n\n /** Gets the placeholder of the input. */\n _getPlaceholder() {\n return this._elementRef.nativeElement.placeholder;\n }\n\n /** Focuses the input. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n /** Handles `input` events on the input element. */\n _onInput(value: string) {\n super._onInput(value);\n this._rangeInput._handleChildValueChange();\n }\n\n /** Opens the datepicker associated with the input. */\n protected _openPopup(): void {\n this._rangeInput._openDatepicker();\n }\n\n /** Gets the minimum date from the range input. */\n _getMinDate() {\n return this._rangeInput.min;\n }\n\n /** Gets the maximum date from the range input. */\n _getMaxDate() {\n return this._rangeInput.max;\n }\n\n /** Gets the date filter function from the range input. */\n protected _getDateFilter() {\n return this._rangeInput.dateFilter;\n }\n\n protected _outsideValueChanged = () => {\n // Whenever the value changes outside the input we need to revalidate, because\n // the validation state of each of the inputs depends on the other one.\n this._validatorOnChange();\n }\n\n protected _parentDisabled() {\n return this._rangeInput._groupDisabled;\n }\n}\n\nconst _MatDateRangeInputBase:\n CanUpdateErrorStateCtor & typeof MatDateRangeInputPartBase =\n // Needs to be `as any`, because the base class is abstract.\n mixinErrorState(MatDateRangeInputPartBase as any);\n\n/** Input for entering the start date in a `mat-date-range-input`. */\n@Directive({\n selector: 'input[gipiMatStartDate]',\n host: {\n 'class': 'mat-start-date mat-date-range-input-inner',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(keydown)': '_onKeydown($event)',\n '[attr.id]': '_rangeInput.id',\n '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n '(blur)': '_onBlur()',\n 'type': 'text',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },\n { provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true }\n ]\n})\nexport class MatStartDate<D> extends _MatDateRangeInputBase<D> implements CanUpdateErrorState, DoCheck, OnInit {\n\n /** Validator that checks that the start date isn't after the end date. */\n private _startValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const end = this._model ? this._model.selection.end : null;\n return (!start || !end || this._dateAdapter.compareDate(start, end) <= 0) ? null : { 'matStartDateInvalid': { 'end': end, 'actual': start } };\n }\n\n constructor(\n @Inject(MAT_DATE_RANGE_INPUT_PARENT) rangeInput: MatDateRangeInputParent<D>,\n elementRef: ElementRef<HTMLInputElement>,\n defaultErrorStateMatcher: ErrorStateMatcher,\n injector: Injector,\n @Optional() parentForm: NgForm,\n @Optional() parentFormGroup: FormGroupDirective,\n @Optional() dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats\n ) {\n\n // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n // constructor once ViewEngine is removed.\n super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);\n }\n\n ngOnInit() {\n // Normally this happens automatically, but it seems to break if not added explicitly when all\n // of the criteria below are met:\n // 1) The class extends a TS mixin.\n // 2) The application is running in ViewEngine.\n // 3) The application is being transpiled through tsickle.\n // This can be removed once google3 is completely migrated to Ivy.\n super.ngOnInit();\n }\n\n ngDoCheck() {\n // Normally this happens automatically, but it seems to break if not added explicitly when all\n // of the criteria below are met:\n // 1) The class extends a TS mixin.\n // 2) The application is running in ViewEngine.\n // 3) The application is being transpiled through tsickle.\n // This can be removed once google3 is completely migrated to Ivy.\n super.ngDoCheck();\n }\n\n protected _validator = Validators.compose([...super._getValidators(), this._startValidator]);\n\n protected _getValueFromModel(modelValue: DateRange<D>) {\n return modelValue.start;\n }\n\n protected _assignValueToModel(value: D | null) {\n if (this._model) {\n const range = new DateRange(value, this._model.selection.end);\n this._model.updateSelection(range, this);\n this._cvaOnChange(value);\n }\n }\n\n protected _canEmitChangeEvent = (event: DateSelectionModelChange<DateRange<D>>): boolean => {\n return event.source !== this._rangeInput._endInput;\n }\n\n protected _formatValue(value: D | null) {\n super._formatValue(value);\n\n // Any time the input value is reformatted we need to tell the parent.\n this._rangeInput._handleChildValueChange();\n }\n\n /** Gets the value that should be used when mirroring the input's size. */\n getMirrorValue(): string {\n const element = this._elementRef.nativeElement;\n const value = element.value;\n return value.length > 0 ? value : element.placeholder;\n }\n\n\n}\n\n\n/** Input for entering the end date in a `mat-date-range-input`. */\n@Directive({\n selector: 'input[gipiMatEndDate]',\n host: {\n 'class': 'mat-end-date mat-date-range-input-inner',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(keydown)': '_onKeydown($event)',\n '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',\n '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',\n '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',\n '(blur)': '_onBlur()',\n 'type': 'text',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },\n { provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true }\n ]\n})\nexport class MatEndDate<D> extends _MatDateRangeInputBase<D> implements CanUpdateErrorState, DoCheck, OnInit {\n\n /** Validator that checks that the end date isn't before the start date. */\n private _endValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const start = this._model ? this._model.selection.start : null;\n return (!end || !start || this._dateAdapter.compareDate(end, start) >= 0) ? null : { 'matEndDateInvalid': { 'start': start, 'actual': end } };\n }\n\n constructor(\n @Inject(MAT_DATE_RANGE_INPUT_PARENT) rangeInput: MatDateRangeInputParent<D>,\n elementRef: ElementRef<HTMLInputElement>,\n defaultErrorStateMatcher: ErrorStateMatcher,\n injector: Injector,\n @Optional() parentForm: NgForm,\n @Optional() parentFormGroup: FormGroupDirective,\n @Optional() dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats\n ) {\n\n // TODO(crisbeto): this constructor shouldn't be necessary, but ViewEngine doesn't seem to\n // handle DI correctly when it is inherited from `MatDateRangeInputPartBase`. We can drop this\n // constructor once ViewEngine is removed.\n super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);\n }\n\n ngOnInit() {\n // Normally this happens automatically, but it seems to break if not added explicitly when all\n // of the criteria below are met:\n // 1) The class extends a TS mixin.\n // 2) The application is running in ViewEngine.\n // 3) The application is being transpiled through tsickle.\n // This can be removed once google3 is completely migrated to Ivy.\n super.ngOnInit();\n }\n\n ngDoCheck() {\n // Normally this happens automatically, but it seems to break if not added explicitly when all\n // of the criteria below are met:\n // 1) The class extends a TS mixin.\n // 2) The application is running in ViewEngine.\n // 3) The application is being transpiled through tsickle.\n // This can be removed once google3 is completely migrated to Ivy.\n super.ngDoCheck();\n }\n\n protected _validator = Validators.compose([...super._getValidators(), this._endValidator]);\n\n protected _getValueFromModel(modelValue: DateRange<D>) {\n return modelValue.end;\n }\n\n protected _assignValueToModel(value: D | null) {\n if (this._model) {\n const range = new DateRange(this._model.selection.start, value);\n this._model.updateSelection(range, this);\n this._cvaOnChange(value);\n }\n }\n\n protected _canEmitChangeEvent = (event: DateSelectionModelChange<DateRange<D>>): boolean => {\n return event.source !== this._rangeInput._startInput;\n }\n\n _onKeydown(event: KeyboardEvent) {\n // If the user is pressing backspace on an empty end input, move focus back to the start.\n if (event.keyCode === BACKSPACE && !this._elementRef.nativeElement.value) {\n this._rangeInput._startInput.focus();\n }\n\n super._onKeydown(event);\n }\n\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { animate, AnimationTriggerMetadata, state, style, transition, trigger, } from '@angular/animations';\n\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nexport const matDatepickerAnimations: {\n readonly transformPanel: AnimationTriggerMetadata;\n readonly fadeInCalendar: AnimationTriggerMetadata;\n} = {\n /** Transforms the height of the datepicker's calendar. */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n opacity: 0,\n transform: 'scale(1, 0.8)'\n })),\n transition('void => enter', animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n opacity: 1,\n transform: 'scale(1, 1)'\n }))),\n transition('* => void', animate('100ms linear', style({ opacity: 0 })))\n ]),\n\n /** Fades in the content of the calendar. */\n fadeInCalendar: trigger('fadeInCalendar', [\n state('void', style({ opacity: 0 })),\n state('enter', style({ opacity: 1 })),\n\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\n ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayConfig, OverlayRef, ScrollStrategy, } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, Directive, ElementRef, EventEmitter, Inject, InjectionToken, Input, NgZone, OnChanges, OnDestroy, Optional, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';\nimport { CanColor, CanColorCtor, mixinColor, ThemePalette, } from '@angular/material/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { MatCalendar } from './calendar';\nimport { MatCalendarCellClassFunction, MatCalendarUserEvent } from './calendar-body';\nimport { MAT_DATE_RANGE_SELECTION_STRATEGY, MatDateRangeSelectionStrategy, } from './date-range-selection-strategy';\nimport { DateRange, ExtractDateTypeFromSelection, MatDateSelectionModel, } from './date-selection-model';\nimport { matDatepickerAnimations } from './datepicker-animations';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { DateFilterFn } from './datepicker-input-base';\nimport { DateAdapter } from './shared/adapter/date-adapter';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('mat-datepicker-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** Possible positions for the datepicker dropdown along the X axis. */\nexport type DatepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the datepicker dropdown along the Y axis. */\nexport type DatepickerDropdownPositionY = 'above' | 'below';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n// Boilerplate for applying mixins to MatDatepickerContent.\n/** @docs-private */\nclass MatDatepickerContentBase {\n constructor(public _elementRef: ElementRef) { }\n}\n\nconst _MatDatepickerContentMixinBase: CanColorCtor & typeof MatDatepickerContentBase = mixinColor(MatDatepickerContentBase);\n\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n selector: 'gipi-mat-datepicker-content',\n templateUrl: 'datepicker-content.html',\n styleUrls: ['datepicker-content.scss'],\n host: {\n 'class': 'mat-datepicker-content',\n '[@transformPanel]': '_animationState',\n '(@transformPanel.done)': '_animationDone.next()',\n '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\n },\n animations: [\n matDatepickerAnimations.transformPanel,\n matDatepickerAnimations.fadeInCalendar,\n ],\n exportAs: 'gipiMatDatepickerContent',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color'],\n})\nexport class MatDatepickerContent<S, D = ExtractDateTypeFromSelection<S>> extends _MatDatepickerContentMixinBase implements AfterViewInit, OnDestroy, CanColor {\n\n private _subscriptions = new Subscription();\n\n /** Reference to the internal calendar component. */\n @ViewChild(MatCalendar, { static: true }) _calendar: MatCalendar<D>;\n\n /** Reference to the datepicker that created the overlay. */\n datepicker: MatDatepickerBase<any, S, D>;\n\n /** Start of the comparison range. */\n comparisonStart: D | null;\n\n /** End of the comparison range. */\n comparisonEnd: D | null;\n\n /** Whether the datepicker is above or below the input. */\n _isAbove: boolean;\n\n /** Current state of the animation. */\n _animationState: 'enter' | 'void' = 'enter';\n\n /** Emits when an animation has finished. */\n _animationDone = new Subject<void>();\n\n constructor(\n elementRef: ElementRef,\n /**\n * @deprecated `_changeDetectorRef`, `_model` and `_rangeSelectionStrategy`\n * parameters to become required.\n * @breaking-change 11.0.0\n */\n private _changeDetectorRef?: ChangeDetectorRef,\n private _model?: MatDateSelectionModel<S, D>,\n private _dateAdapter?: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY)\n private _rangeSelectionStrategy?: MatDateRangeSelectionStrategy<D>\n ) {\n super(elementRef);\n }\n\n ngAfterViewInit() {\n // @breaking-change 11.0.0 Remove null check for `_changeDetectorRef.\n if (this._changeDetectorRef) {\n this._subscriptions.add(this.datepicker._stateChanges.subscribe(() => {\n this._changeDetectorRef!.markForCheck();\n }));\n }\n\n this._calendar.focusActiveCell();\n }\n\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._animationDone.complete();\n }\n\n _handleUserSelection(event: MatCalendarUserEvent<D | null>) {\n // @breaking-change 11.0.0 Remove null checks for _model,\n // _rangeSelectionStrategy and _dateAdapter.\n if (this._model && this._dateAdapter) {\n const selection = this._model.selection;\n const value = event.value;\n const isRange = selection instanceof DateRange;\n\n // If we're selecting a range and we have a selection strategy, always pass the value through\n // there. Otherwise don't assign null values to the model, unless we're selecting a range.\n // A null value when picking a range means that the user cancelled the selection (e.g. by\n // pressing escape), whereas when selecting a single value it means that the value didn't\n // change. This isn't very intuitive, but it's here for backwards-compatibility.\n if (isRange && this._rangeSelectionStrategy) {\n const newSelection = this._rangeSelectionStrategy.selectionFinished(value,\n selection as unknown as DateRange<D>, event.event);\n this._model.updateSelection(newSelection as unknown as S, this);\n } else if (value && (isRange ||\n !this._dateAdapter.sameDate(value, selection as unknown as D))) {\n this._model.add(value);\n }\n }\n\n if (!this._model || this._model.isComplete()) {\n this.datepicker.close();\n }\n }\n\n _startExitAnimation() {\n this._animationState = 'void';\n\n // @breaking-change 11.0.0 Remove null check for `_changeDetectorRef`.\n if (this._changeDetectorRef) {\n this._changeDetectorRef.markForCheck();\n }\n }\n\n _getSelected() {\n // @breaking-change 11.0.0 Remove null check for `_model`.\n return this._model ? this._model.selection as unknown as D | DateRange<D> | null : null;\n }\n}\n\n/** Form control that can be associated with a datepicker. */\nexport interface MatDatepickerControl<D> {\n getStartValue(): D | null;\n getThemePalette(): ThemePalette;\n min: D | null;\n max: D | null;\n disabled: boolean;\n dateFilter: DateFilterFn<D>;\n getConnectedOverlayOrigin(): ElementRef;\n stateChanges: Observable<void>;\n}\n\n/** Base class for a datepicker. */\nexport abstract class MatDatepickerBase<C extends MatDatepickerControl<D>, S, D = any> implements OnDestroy, OnChanges {\n\n private _scrollStrategy: () => ScrollStrategy;\n private _inputStateChanges = Subscription.EMPTY;\n\n @Input() templatePresetRange: TemplateRef<any>;\n\n /** The date to open the calendar to initially. */\n @Input()\n get startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this._datepickerInput ? this._datepickerInput.getStartValue() : null);\n }\n set startAt(value: D | null) {\n this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _startAt: D | null;\n\n /** The view that the calendar should start in. */\n @Input() startView: 'month' | 'year' | 'multi-year' = 'month';\n\n /** Color palette to use on the datepicker's calendar. */\n @Input()\n get color(): ThemePalette {\n return this._color || (this._datepickerInput ? this._datepickerInput.getThemePalette() : undefined);\n }\n set color(value: ThemePalette) {\n this._color = value;\n }\n _color: ThemePalette;\n\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n */\n @Input()\n get touchUi(): boolean { return this._touchUi; }\n set touchUi(value: boolean) {\n this._touchUi = coerceBooleanProperty(value);\n }\n private _touchUi = false;\n\n /** Whether the datepicker pop-up should be disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled === undefined && this._datepickerInput ?\n this._datepickerInput.disabled : !!this._disabled;\n }\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._stateChanges.next(undefined);\n }\n }\n private _disabled: boolean;\n\n /** Preferred position of the datepicker in the X axis. */\n @Input()\n xPosition: DatepickerDropdownPositionX = 'start';\n\n /** Preferred position of the datepicker in the Y axis. */\n @Input()\n yPosition: DatepickerDropdownPositionY = 'below';\n\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Classes to be passed to the date picker panel. Supports the same syntax as `ngClass`. */\n @Input() panelClass: string | string[];\n\n /** Function that can be used to add custom CSS classes to dates. */\n @Input() dateClass: MatCalendarCellClassFunction<D>;\n\n /** Emits when the datepicker has been opened. */\n @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when the datepicker has been closed. */\n @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n\n /** Whether the calendar is open. */\n @Input()\n get opened(): boolean { return this._opened; }\n set opened(value: boolean) {\n coerceBooleanProperty(value) ? this.open() : this.close();\n }\n private _opened = false;\n\n /** The id for the datepicker calendar. */\n id: string = `mat-datepicker-${datepickerUid++}`;\n\n /** The minimum selectable date. */\n _getMinDate(): D | null {\n return this._datepickerInput && this._datepickerInput.min;\n }\n\n /** The maximum selectable date. */\n _getMaxDate(): D | null {\n return this._datepickerInput && this._datepickerInput.max;\n }\n\n _getDateFilter(): DateFilterFn<D> {\n return this._datepickerInput && this._datepickerInput.dateFilter;\n }\n\n /** A reference to the overlay when the calendar is opened as a popup. */\n private _popupRef: OverlayRef | null;\n\n /** A reference to the dialog when the calendar is opened as a dialog. */\n private _dialogRef: MatDialogRef<MatDatepickerContent<S, D>> | null;\n\n /** Reference to the component instantiated in popup mode. */\n private _popupComponentRef: ComponentRef<MatDatepickerContent<S, D>> | null;\n\n /** The element that was focused before the datepicker was opened. */\n private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n private _backdropHarnessClass = `${this.id}-backdrop`;\n\n /** The input element this datepicker is associated with. */\n _datepickerInput: C;\n\n /** Emits when the datepicker's state changes. */\n readonly _stateChanges = new Subject<void>();\n\n constructor(\n private _dialog: MatDialog,\n private _overlay: Overlay,\n private _ngZone: NgZone,\n private _viewContainerRef: ViewContainerRef,\n @Inject(MAT_DATEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(DOCUMENT) private _document: any,\n private _model: MatDateSelectionModel<S, D>\n ) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n this._scrollStrategy = scrollStrategy;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const positionChange = changes['xPosition'] || changes['yPosition'];\n\n if (positionChange && !positionChange.firstChange && this._popupRef) {\n this._setConnectedPositions(this._popupRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy);\n\n if (this.opened) {\n this._popupRef.updatePosition();\n }\n }\n\n this._stateChanges.next(undefined);\n }\n\n ngOnDestroy() {\n this._destroyPopup();\n this.close();\n this._inputStateChanges.unsubscribe();\n this._stateChanges.complete();\n }\n\n /** Selects the given date */\n select(date: D): void {\n this._model.add(date);\n }\n\n /** Emits the selected year in multiyear view */\n _selectYear(normalizedYear: D): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n /** Emits selected month in year view */\n _selectMonth(normalizedMonth: D): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /**\n * Register an input with this datepicker.\n * @param input The datepicker input to register with this datepicker.\n * @returns Selection model that the input should hook itself up to.\n */\n _registerInput(input: C): MatDateSelectionModel<S, D> {\n if (this._datepickerInput) {\n throw Error('A MatDatepicker can only be associated with a single input.');\n }\n this._inputStateChanges.unsubscribe();\n this._datepickerInput = input;\n this._inputStateChanges = input.stateChanges.subscribe(() => this._stateChanges.next(undefined));\n return this._model;\n }\n\n /** Open the calendar. */\n open(): void {\n if (this._opened || this.disabled) {\n return;\n }\n if (!this._datepickerInput) {\n throw Error('Attempted to open an MatDatepicker with no associated input.');\n }\n if (this._document) {\n this._focusedElementBeforeOpen = this._document.activeElement;\n }\n\n this.touchUi ? this._openAsDialog() : this._openAsPopup();\n this._opened = true;\n this.openedStream.emit();\n }\n\n /** Close the calendar. */\n close(): void {\n if (!this._opened) {\n return;\n }\n if (this._popupComponentRef && this._popupRef) {\n const instance = this._popupComponentRef.instance;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => this._destroyPopup());\n }\n if (this._dialogRef) {\n this._dialogRef.close();\n this._dialogRef = null;\n }\n\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n this._focusedElementBeforeOpen = null;\n }\n };\n\n if (this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function') {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n this._focusedElementBeforeOpen.focus();\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n /** Open the calendar as a dialog. */\n private _openAsDialog(): void {\n // Usually this would be handled by `open` which ensures that we can only have one overlay\n // open at a time, however since we reset the variables in async handlers some overlays\n // may slip through if the user opens and closes multiple times in quick succession (e.g.\n // by holding down the enter key).\n if (this._dialogRef) {\n this._dialogRef.close();\n }\n\n this._dialogRef = this._dialog.open<MatDatepickerContent<S, D>>(MatDatepickerContent, {\n direction: this._dir ? this._dir.value : 'ltr',\n viewContainerRef: this._viewContainerRef,\n panelClass: 'mat-datepicker-dialog',\n\n // These values are all the same as the defaults, but we set them explicitly so that the\n // datepicker dialog behaves consistently even if the user changed the defaults.\n hasBackdrop: true,\n disableClose: false,\n backdropClass: `cdk-overlay-dark-backdrop, ${this._backdropHarnessClass}`,\n width: '',\n height: '',\n minWidth: '',\n minHeight: '',\n maxWidth: '80vw',\n maxHeight: '',\n position: {},\n autoFocus: true,\n\n // `MatDialog` has focus restoration built in, however we want to disable it since the\n // datepicker also has focus restoration for dropdown mode. We want to do this, in order\n // to ensure that the timing is consistent between dropdown and dialog modes since `MatDialog`\n // restores focus when the animation is finished, but the datepicker does it immediately.\n // Furthermore, this avoids any conflicts where the datepicker consumer might move focus\n // inside the `closed` event which is dispatched immediately.\n restoreFocus: false\n });\n\n this._dialogRef.afterClosed().subscribe(() => this.close());\n this._forwardContentValues(this._dialogRef.componentInstance);\n }\n\n /** Open the calendar as a popup. */\n private _openAsPopup(): void {\n const portal = new ComponentPortal<MatDatepickerContent<S, D>>(MatDatepickerContent, this._viewContainerRef);\n\n this._destroyPopup();\n this._createPopup();\n this._popupComponentRef = this._popupRef!.attach(portal);\n this._forwardContentValues(this._popupComponentRef.instance);\n\n // Update the position once the calendar has rendered.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._popupRef!.updatePosition();\n });\n }\n\n /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\n protected _forwardContentValues(instance: MatDatepickerContent<S, D>) {\n instance.datepicker = this;\n instance.color = this.color;\n }\n\n /** Create the popup. */\n private _createPopup(): void {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mat-datepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n\n const overlayConfig = new OverlayConfig({\n positionStrategy: this._setConnectedPositions(positionStrategy),\n hasBackdrop: true,\n backdropClass: ['mat-overlay-transparent-backdrop', this._backdropHarnessClass],\n direction: this._dir,\n scrollStrategy: this._scrollStrategy(),\n panelClass: 'mat-datepicker-popup',\n });\n\n this._popupRef = this._overlay.create(overlayConfig);\n this._popupRef.overlayElement.setAttribute('role', 'dialog');\n\n merge(\n this._popupRef.backdropClick(),\n this._popupRef.detachments(),\n this._popupRef.keydownEvents().pipe(filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the datepicker.\n return event.keyCode === ESCAPE || (this._datepickerInput && event.altKey && event.keyCode === UP_ARROW);\n }))\n ).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n\n this.close();\n });\n }\n\n /** Destroys the current popup overlay. */\n private _destroyPopup() {\n if (this._popupRef) {\n this._popupRef.dispose();\n this._popupRef = this._popupComponentRef = null;\n }\n }\n\n /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\n private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n return strategy.withPositions([\n {\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY\n },\n {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY\n },\n {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY\n },\n {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY\n }\n ]);\n }\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n// Whether the current platform supports the V8 Break Iterator. The V8 check\n// is necessary to detect all Blink based browsers.\nlet hasV8BreakIterator: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n hasV8BreakIterator = typeof Intl !== 'undefined' && (Intl as any).v8BreakIterator;\n} catch {\n hasV8BreakIterator = false;\n}\n\n/**\n * Service to detect the current platform by comparing the userAgent strings and\n * checking browser-specific global properties.\n */\nexport class Platform {\n // We want to use the Angular platform check because if the Document is shimmed\n // without the navigator, the following checks will fail. This is preferred because\n // sometimes the Document may be shimmed without the user's knowledge or intention\n /** Whether the Angular application is being rendered in the browser. */\n isBrowser: boolean = this._platformId\n ? isPlatformBrowser(this._platformId)\n : typeof document === 'object' && !!document;\n\n /** Whether the current browser is Microsoft Edge. */\n EDGE: boolean = this.isBrowser && /(edge)/i.test(navigator.userAgent);\n\n /** Whether the current rendering engine is Microsoft Trident. */\n TRIDENT: boolean = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\n\n // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\n /** Whether the current rendering engine is Blink. */\n BLINK: boolean =\n this.isBrowser &&\n !!((window as any).chrome || hasV8BreakIterator) &&\n typeof CSS !== 'undefined' &&\n !this.EDGE &&\n !this.TRIDENT;\n\n // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\n // ensure that Webkit runs standalone and is not used as another engine's base.\n /** Whether the current rendering engine is WebKit. */\n WEBKIT: boolean =\n this.isBrowser &&\n /AppleWebKit/i.test(navigator.userAgent) &&\n !this.BLINK &&\n !this.EDGE &&\n !this.TRIDENT;\n\n /** Whether the current platform is Apple iOS. */\n IOS: boolean =\n this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n\n // It's difficult to detect the plain Gecko engine, because most of the browsers identify\n // them self as Gecko-like browsers and modify the userAgent's according to that.\n // Since we only cover one explicit Firefox case, we can simply check for Firefox\n // instead of having an unstable check for Gecko.\n /** Whether the current browser is Firefox. */\n FIREFOX: boolean = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\n\n /** Whether the current platform is Android. */\n // Trident on mobile adds the android platform to the userAgent to trick detections.\n ANDROID: boolean = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\n\n // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\n // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\n // Safari browser should also use Webkit as its layout engine.\n /** Whether the current browser is Safari. */\n SAFARI: boolean = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\n\n constructor(@Inject(PLATFORM_ID) private _platformId: Object) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { MAT_CALENDAR_RANGE_STRATEGY_PROVIDER } from './date-range-selection-strategy';\nimport { DateRange, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER } from './date-selection-model';\nimport { MatDatepickerBase, MatDatepickerContent, MatDatepickerControl } from './datepicker-base';\n\n/**\n * Input that can be associated with a date range picker.\n * @docs-private\n */\nexport interface MatDateRangePickerInput<D> extends MatDatepickerControl<D> {\n comparisonStart: D | null;\n comparisonEnd: D | null;\n}\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDateRangePicker\"). We can change this to a\n// directive if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the date range picker popup/dialog. */\n@Component({\n selector: 'gipi-mat-date-range-picker',\n template: '',\n exportAs: 'gipiMatDateRangePicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,\n MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,\n ]\n})\nexport class MatDateRangePicker<D> extends MatDatepickerBase<MatDateRangePickerInput<D>, DateRange<D>, D> {\n\n protected _forwardContentValues(instance: MatDatepickerContent<DateRange<D>, D>) {\n super._forwardContentValues(instance);\n\n const input = this._datepickerInput;\n\n if (input) {\n instance.comparisonStart = input.comparisonStart;\n instance.comparisonEnd = input.comparisonEnd;\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER } from './date-selection-model';\nimport { MatDatepickerBase, MatDatepickerControl } from './datepicker-base';\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\n@Component({\n selector: 'gipi-mat-datepicker',\n template: '',\n exportAs: 'gipiMatDatepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]\n})\nexport class MatDatepicker<D> extends MatDatepickerBase<MatDatepickerControl<D>, D | null, D> { }\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Directive, ElementRef, forwardRef, Inject, InjectionToken, Input, Optional, } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidatorFn, Validators, } from '@angular/forms';\nimport { MAT_DATE_FORMATS, MatDateFormats, ThemePalette, } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { MatDatepicker } from './datepicker';\nimport { MatDatepickerControl } from './datepicker-base';\nimport { DateFilterFn, MatDatepickerInputBase } from './datepicker-input-base';\nimport { DateAdapter } from './shared/adapter/date-adapter';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true\n};\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true\n};\n\nexport const MAT_FORM_FIELD = new InjectionToken<MatFormField>('MatFormField');\n\n/** Directive used to connect an input to a MatDatepicker. */\n@Directive({\n selector: 'input[gipiMatDatepicker]',\n providers: [\n MAT_DATEPICKER_VALUE_ACCESSOR,\n MAT_DATEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },\n ],\n host: {\n 'class': 'mat-datepicker-input',\n '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n // Used by the test harness to tie this input to its calendar. We can't depend on\n // `aria-owns` for this, because it's only defined while the calendar is open.\n '[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'gipiMatDatepickerInput',\n})\nexport class MatDatepickerInput<D> extends MatDatepickerInputBase<D | null, D> implements MatDatepickerControl<D | null> {\n\n /** The datepicker that this input is associated with. */\n @Input()\n set gipiMatDatepicker(datepicker: MatDatepicker<D>) {\n if (datepicker) {\n this._datepicker = datepicker;\n this._registerModel(datepicker._registerInput(this));\n }\n }\n _datepicker: MatDatepicker<D>;\n\n /** The minimum valid date. */\n @Input()\n get min(): D | null { return this._min; }\n set min(value: D | null) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\n this._min = validValue;\n this._validatorOnChange();\n }\n }\n private _min: D | null;\n\n /** The maximum valid date. */\n @Input()\n get max(): D | null { return this._max; }\n set max(value: D | null) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\n this._max = validValue;\n this._validatorOnChange();\n }\n }\n private _max: D | null;\n\n /** Function that can be used to filter out dates within the datepicker. */\n @Input('gipiMatDatepickerFilter')\n get dateFilter() { return this._dateFilter; }\n set dateFilter(value: DateFilterFn<D | null>) {\n this._dateFilter = value;\n this._validatorOnChange();\n }\n private _dateFilter: DateFilterFn<D | null>;\n\n /** The combined form control validator for this input. */\n protected _validator: ValidatorFn | null;\n\n constructor(\n elementRef: ElementRef<HTMLInputElement>,\n @Optional() dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats,\n @Optional() @Inject(MAT_FORM_FIELD) private _formField: MatFormField\n ) {\n super(elementRef, dateAdapter, dateFormats);\n this._validator = Validators.compose(super._getValidators());\n }\n\n /**\n * Gets the element that the datepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n\n /** Returns the palette used by the input's form field, if any. */\n getThemePalette(): ThemePalette {\n return this._formField ? this._formField.color : undefined;\n }\n\n /** Gets the value at which the calendar should start. */\n getStartValue(): D | null {\n return this.value;\n }\n\n /**\n * @deprecated\n * @breaking-change 8.0.0 Use `getConnectedOverlayOrigin` instead\n */\n getPopupConnectionElementRef(): ElementRef {\n return this.getConnectedOverlayOrigin();\n }\n\n /** Opens the associated datepicker. */\n protected _openPopup(): void {\n if (this._datepicker) {\n this._datepicker.open();\n }\n }\n\n protected _getValueFromModel(modelValue: D | null): D | null {\n return modelValue;\n }\n\n protected _assignValueToModel(value: D | null): void {\n if (this._model) {\n this._model.updateSelection(value, this);\n }\n }\n\n /** Gets the input's minimum date. */\n _getMinDate() {\n return this._min;\n }\n\n /** Gets the input's maximum date. */\n _getMaxDate() {\n return this._max;\n }\n\n /** Gets the input's date filtering function. */\n protected _getDateFilter() {\n return this._dateFilter;\n }\n\n protected _canEmitChangeEvent() {\n return true;\n }\n\n // Unnecessary when selecting a single date.\n protected _outsideValueChanged: undefined;\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, Inject, Input, OnChanges, OnDestroy, Optional, Self, SimpleChanges, ViewEncapsulation, } from '@angular/core';\nimport { ControlContainer, NgControl } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject, merge } from 'rxjs';\nimport { MAT_DATE_RANGE_INPUT_PARENT, MatDateRangeInputParent, MatEndDate, MatStartDate, } from './date-range-input-parts';\nimport { MatDateRangePicker, MatDateRangePickerInput } from './date-range-picker';\nimport { DateRange, MatDateSelectionModel } from './date-selection-model';\nimport { MatDatepickerControl } from './datepicker-base';\nimport { createMissingDateImplError } from './datepicker-errors';\nimport { MAT_FORM_FIELD } from './datepicker-input';\nimport { DateFilterFn, dateInputsHaveChanged } from './datepicker-input-base';\nimport { DateAdapter } from './shared/adapter/date-adapter';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'gipi-mat-date-range-input',\n templateUrl: 'date-range-input.html',\n styleUrls: ['date-range-input.scss'],\n exportAs: 'gipiMatDateRangeInput',\n host: {\n 'class': 'mat-date-range-input',\n '[class.mat-date-range-input-hide-placeholders]': '_shouldHidePlaceholders()',\n '[class.mat-date-range-input-required]': 'required',\n '[attr.id]': 'null',\n 'role': 'group',\n '[attr.aria-labelledby]': '_getAriaLabelledby()',\n '[attr.aria-describedby]': '_ariaDescribedBy',\n // Used by the test harness to tie this input to its calendar. We can't depend on\n // `aria-owns` for this, because it's only defined while the calendar is open.\n '[attr.data-mat-calendar]': 'rangePicker ? rangePicker.id : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: MatFormFieldControl, useExisting: MatDateRangeInput },\n { provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },\n ]\n})\nexport class MatDateRangeInput<D> implements MatFormFieldControl<DateRange<D>>, MatDatepickerControl<D>, MatDateRangeInputParent<D>, MatDateRangePickerInput<D>, AfterContentInit, OnChanges, OnDestroy {\n\n /** Current value of the range input. */\n get value() {\n return this._model ? this._model.selection : null;\n }\n\n /** Unique ID for the input. */\n id = `mat-date-range-input-${nextUniqueId++}`;\n\n /** Whether the control is focused. */\n focused = false;\n\n /** Whether the control's label should float. */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n /** Name of the form control. */\n controlType = 'gipi-date-range-input';\n\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * Set the placeholder attribute on `matStartDate` and `matEndDate`.\n * @docs-private\n */\n get placeholder() {\n const start = this._startInput ? this._startInput._getPlaceholder() : '';\n const end = this._endInput ? this._endInput._getPlaceholder() : '';\n return (start || end) ? `${start} ${this.separator} ${end}` : '';\n }\n\n /** The range picker that this input is associated with. */\n @Input()\n get rangePicker() { return this._rangePicker; }\n set rangePicker(rangePicker: MatDateRangePicker<D>) {\n if (rangePicker) {\n this._model = rangePicker._registerInput(this);\n this._rangePicker = rangePicker;\n this._registerModel(this._model!);\n }\n }\n private _rangePicker: MatDateRangePicker<D>;\n\n /** Whether the input is required. */\n @Input()\n get required(): boolean { return !!this._required; }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n private _required: boolean;\n\n /** Function that can be used to filter out dates within the date range picker. */\n @Input()\n get dateFilter() { return this._dateFilter; }\n set dateFilter(value: DateFilterFn<D>) {\n this._dateFilter = value;\n this._revalidate();\n }\n private _dateFilter: DateFilterFn<D>;\n\n /** The minimum valid date. */\n @Input()\n get min(): D | null { return this._min; }\n set min(value: D | null) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\n this._min = validValue;\n this._revalidate();\n }\n }\n private _min: D | null;\n\n /** The maximum valid date. */\n @Input()\n get max(): D | null { return this._max; }\n set max(value: D | null) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\n this._max = validValue;\n this._revalidate();\n }\n }\n private _max: D | null;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean {\n return (this._startInput && this._endInput) ?\n (this._startInput.disabled && this._endInput.disabled) :\n this._groupDisabled;\n }\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._groupDisabled) {\n this._groupDisabled = newValue;\n this.stateChanges.next(undefined);\n }\n }\n _groupDisabled = false;\n\n /** Whether the input is in an error state. */\n get errorState(): boolean {\n if (this._startInput && this._endInput) {\n return this._startInput.errorState || this._endInput.errorState;\n }\n\n return false;\n }\n\n /** Whether the datepicker input is empty. */\n get empty(): boolean {\n const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\n const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\n return startEmpty && endEmpty;\n }\n\n /** Value for the `aria-describedby` attribute of the inputs. */\n _ariaDescribedBy: string | null = null;\n\n /** Date selection model currently registered with the input. */\n private _model: MatDateSelectionModel<DateRange<D>> | undefined;\n\n /** Separator text to be shown between the inputs. */\n @Input() separator = '–';\n\n /** Start of the comparison range that should be shown in the calendar. */\n @Input() comparisonStart: D | null = null;\n\n /** End of the comparison range that should be shown in the calendar. */\n @Input() comparisonEnd: D | null = null;\n\n @ContentChild(MatStartDate, { static: true }) _startInput: MatStartDate<D>;\n @ContentChild(MatEndDate, { static: true }) _endInput: MatEndDate<D>;\n\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.\n * @docs-private\n */\n ngControl: NgControl | null;\n\n /** Emits when the input's state has changed. */\n stateChanges = new Subject<void>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef<HTMLElement>,\n @Optional() @Self() control: ControlContainer,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField\n ) {\n\n if (!_dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n // TODO(crisbeto): remove `as any` after #18206 lands.\n this.ngControl = control as any;\n }\n\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * @docs-private\n */\n setDescribedByIds(ids: string[]): void {\n this._ariaDescribedBy = ids.length ? ids.join(' ') : null;\n }\n\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * @docs-private\n */\n onContainerClick(): void {\n if (!this.focused && !this.disabled) {\n if (!this._model || !this._model.selection.start) {\n this._startInput.focus();\n } else {\n this._endInput.focus();\n }\n }\n }\n\n ngAfterContentInit() {\n if (!this._startInput) {\n throw Error('mat-date-range-input must contain a matStartDate input');\n }\n\n if (!this._endInput) {\n throw Error('mat-date-range-input must contain a matEndDate input');\n }\n\n if (this._model) {\n this._registerModel(this._model);\n }\n\n // We don't need to unsubscribe from this, because we\n // know that the input streams will be completed on destroy.\n merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(() => {\n this.stateChanges.next(undefined);\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n this.stateChanges.next(undefined);\n }\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n }\n\n /** Gets the date at which the calendar should start. */\n getStartValue(): D | null {\n return this.value ? this.value.start : null;\n }\n\n /** Gets the input's theme palette. */\n getThemePalette(): ThemePalette {\n return this._formField ? this._formField.color : undefined;\n }\n\n /** Gets the element to which the calendar overlay should be attached. */\n getConnectedOverlayOrigin(): ElementRef {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n\n /** Gets the value that is used to mirror the state input. */\n _getInputMirrorValue() {\n return this._startInput ? this._startInput.getMirrorValue() : '';\n }\n\n /** Whether the input placeholders should be hidden. */\n _shouldHidePlaceholders() {\n return this._startInput ? !this._startInput.isEmpty() : false;\n }\n\n /** Handles the value in one of the child inputs changing. */\n _handleChildValueChange() {\n this.stateChanges.next(undefined);\n this._changeDetectorRef.markForCheck();\n }\n\n /** Opens the date range picker associated with the input. */\n _openDatepicker() {\n if (this._rangePicker) {\n this._rangePicker.open();\n }\n }\n\n /** Whether the separate text should be hidden. */\n _shouldHideSeparator() {\n return (!this._formField || this._formField._hideControlPlaceholder()) && this.empty;\n }\n\n /** Gets the value for the `aria-labelledby` attribute of the inputs. */\n _getAriaLabelledby() {\n const formField = this._formField;\n return formField && formField._hasFloatingLabel() ? formField._labelId : null;\n }\n\n /** Re-runs the validators on the start/end inputs. */\n private _revalidate() {\n if (this._startInput) {\n this._startInput._validatorOnChange();\n }\n\n if (this._endInput) {\n this._endInput._validatorOnChange();\n }\n }\n\n /** Registers the current date selection model with the start/end inputs. */\n private _registerModel(model: MatDateSelectionModel<DateRange<D>>) {\n if (this._startInput) {\n this._startInput._registerModel(model);\n }\n\n if (this._endInput) {\n this._endInput._registerModel(model);\n }\n }\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { AfterContentInit, Attribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Directive, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { merge, of as observableOf, Subscription } from 'rxjs';\nimport { MatDatepickerBase, MatDatepickerControl } from './datepicker-base';\nimport { MatDatepickerIntl } from './datepicker-intl';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/** Can be used to override the icon of a `matDatepickerToggle`. */\n@Directive({ selector: '[gipiDatepickerToggleIcon]' })\nexport class MatDatepickerToggleIcon { }\n\n@Component({\n selector: 'gipi-mat-datepicker-toggle',\n templateUrl: 'datepicker-toggle.html',\n styleUrls: ['datepicker-toggle.scss'],\n host: {\n 'class': 'mat-datepicker-toggle',\n // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the\n // consumer may have provided, while still being able to receive focus.\n '[attr.tabindex]': 'disabled ? null : -1',\n '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\n '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\n '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"',\n // Used by the test harness to tie this toggle to its datepicker.\n '[attr.data-mat-calendar]': 'datepicker ? datepicker.id : null',\n '(focus)': '_button.focus()',\n },\n exportAs: 'gipiMatDatepickerToggle',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n\n private _stateChanges = Subscription.EMPTY;\n\n /** Datepicker instance that the button will toggle. */\n @Input('for') datepicker: MatDatepickerBase<MatDatepickerControl<any>, D>;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Whether the toggle button is disabled. */\n @Input()\n get disabled(): boolean {\n if (this._disabled === undefined && this.datepicker) {\n return this.datepicker.disabled;\n }\n\n return !!this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled: boolean;\n\n /** Whether ripples on the toggle should be disabled. */\n @Input() disableRipple: boolean;\n\n /** Custom icon set by the consumer. */\n @ContentChild(MatDatepickerToggleIcon, { static: true }) _customIcon: MatDatepickerToggleIcon;\n\n /** Underlying button element. */\n @ViewChild('button', { static: true }) _button: MatButton;\n\n constructor(\n public _intl: MatDatepickerIntl,\n private _changeDetectorRef: ChangeDetectorRef,\n @Attribute('tabindex') defaultTabIndex: string\n ) {\n\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['datepicker']) {\n this._watchStateChanges();\n }\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n\n _open(event: Event): void {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n\n private _watchStateChanges() {\n const datepickerStateChanged = this.datepicker ? this.datepicker._stateChanges : observableOf();\n const inputStateChanged = this.datepicker && this.datepicker._datepickerInput ?\n this.datepicker._datepickerInput.stateChanges : observableOf();\n const datepickerToggled = this.datepicker ?\n merge(this.datepicker.openedStream, this.datepicker.closedStream) :\n observableOf();\n\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(\n this._intl.changes,\n datepickerStateChanged,\n inputStateChanged,\n datepickerToggled\n ).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\nimport { DateAdapter, MAT_DATE_LOCALE } from './date-adapter';\nimport { Platform } from './platform';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n 'long': [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n 'October', 'November', 'December'\n ],\n 'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n 'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n 'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n 'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n 'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n const valuesArray = Array(length);\n for (let i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n\n /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n private readonly _clampDate: boolean;\n\n /**\n * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n * will produce `'8/13/1800'`.\n *\n * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n * getting the string representation of a Date object from its utc representation. We're keeping\n * it here for sometime, just for precaution, in case we decide to revert some of these changes\n * though.\n */\n useUtcForDisplay: boolean = true;\n\n constructor(\n @Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string,\n @Inject(PLATFORM_ID) private _platformId: Object\n ) {\n super();\n super.setLocale(matDateLocale);\n const platform: Platform = new Platform(this._platformId);\n\n if (platform) {\n // IE does its own time zone correction, so we disable this on IE.\n this.useUtcForDisplay = !platform.TRIDENT;\n this._clampDate = platform.TRIDENT || platform.EDGE;\n } else {\n this.useUtcForDisplay = true;\n this._clampDate = false;\n }\n }\n\n getYear(date: Date): number {\n return date.getFullYear();\n }\n\n getMonth(date: Date): number {\n return date.getMonth();\n }\n\n getDate(date: Date): number {\n return date.getDate();\n }\n\n getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'utc' });\n return range(12, i => this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n }\n return DEFAULT_MONTH_NAMES[style];\n }\n\n getDateNames(): string[] {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, { day: 'numeric', timeZone: 'utc' });\n return range(31, i => this._stripDirectionalityCharacters(\n this._format(dtf, new Date(2017, 0, i + 1))));\n }\n return DEFAULT_DATE_NAMES;\n }\n\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'utc' });\n return range(7, i => this._stripDirectionalityCharacters(\n this._format(dtf, new Date(2017, 0, i + 1))));\n }\n return DEFAULT_DAY_OF_WEEK_NAMES[style];\n }\n\n getYearName(date: Date): string {\n if (SUPPORTS_INTL_API) {\n const dtf = new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'utc' });\n return this._stripDirectionalityCharacters(this._format(dtf, date));\n }\n return String(this.getYear(date));\n }\n\n getFirstDayOfWeek(): number {\n // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n return 0;\n }\n\n getNumDaysInMonth(date: Date): number {\n return this.getDate(this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0));\n }\n\n clone(date: Date): Date {\n return new Date(date.getTime());\n }\n\n createDate(year: number, month: number, date: number): Date {\n // Check for invalid month and date (except upper bound on date which we have to check after\n // creating the Date).\n if (month < 0 || month > 11) {\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n }\n\n if (date < 1) {\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n }\n\n let result = this._createDateWithOverflow(year, month, date);\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n if (result.getMonth() != month) {\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n }\n\n return result;\n }\n\n today(): Date {\n return new Date();\n }\n\n parse(value: any): Date | null {\n // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n // parameters.\n if (typeof value == 'number') {\n return new Date(value);\n }\n return value ? new Date(Date.parse(value)) : null;\n }\n\n format(date: Date, displayFormat: Object): string {\n if (!this.isValid(date)) {\n throw Error('NativeDateAdapter: Cannot format invalid date.');\n }\n\n if (SUPPORTS_INTL_API) {\n // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n // if we attempt to format a date whose year is less than 1 or greater than 9999.\n if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n date = this.clone(date);\n date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n }\n\n displayFormat = { ...displayFormat, timeZone: 'utc' };\n\n const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n return this._stripDirectionalityCharacters(this._format(dtf, date));\n }\n return this._stripDirectionalityCharacters(date.toDateString());\n }\n\n addCalendarYears(date: Date, years: number): Date {\n return this.addCalendarMonths(date, years * 12);\n }\n\n addCalendarMonths(date: Date, months: number): Date {\n let newDate = this._createDateWithOverflow(\n this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n // It's possible to wind up in the wrong month if the original month has more days than the new\n // month. In this case we want to go to the last day of the desired month.\n // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n // guarantee this.\n if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n }\n\n return newDate;\n }\n\n addCalendarDays(date: Date, days: number): Date {\n return this._createDateWithOverflow(this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n }\n\n toIso8601(date: Date): string {\n return [\n date.getUTCFullYear(),\n this._2digit(date.getUTCMonth() + 1),\n this._2digit(date.getUTCDate())\n ].join('-');\n }\n\n /**\n * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n * invalid date for all other values.\n */\n deserialize(value: any): Date | null {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n // string is the right format first.\n if (ISO_8601_REGEX.test(value)) {\n let date = new Date(value);\n if (this.isValid(date)) {\n return date;\n }\n }\n }\n return super.deserialize(value);\n }\n\n isDateInstance(obj: any) {\n return obj instanceof Date;\n }\n\n isValid(date: Date) {\n return !isNaN(date.getTime());\n }\n\n invalid(): Date {\n return new Date(NaN);\n }\n\n /** Creates a date but allows the month and date to overflow. */\n private _createDateWithOverflow(year: number, month: number, date: number) {\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n // To work around this we use `setFullYear` and `setHours` instead.\n const d = new Date();\n d.setFullYear(year, month, date);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n /**\n * Pads a number to make it two digits.\n * @param n The number to pad.\n * @returns The padded number.\n */\n private _2digit(n: number) {\n return ('00' + n).slice(-2);\n }\n\n /**\n * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n * other browsers do not. We remove them to make output consistent and because they interfere with\n * date parsing.\n * @param str The string to strip direction characters from.\n * @returns The stripped string.\n */\n private _stripDirectionalityCharacters(str: string) {\n return str.replace(/[\\u200e\\u200f]/g, '');\n }\n\n /**\n * When converting Date object to string, javascript built-in functions may return wrong\n * results because it applies its internal DST rules. The DST rules around the world change\n * very frequently, and the current valid rule is not always valid in previous years though.\n * We work around this problem building a new Date object which has its internal UTC\n * representation with the local date and time.\n * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n * timeZone set to 'utc' to work fine.\n * @param date Date from which we want to get the string representation according to dtf\n * @returns A Date object with its UTC representation based on the passed in date info\n */\n private _format(dtf: Intl.DateTimeFormat, date: Date) {\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n const d = new Date();\n d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n return dtf.format(d);\n }\n}\n","// tslint:disable\n/** @dynamic */\nexport class BrowserUtil {\n\n public static getBrowser(): 'MSIE' | 'Firefox' | 'Safari' | 'Chrome' | 'Opera' | string {\n let browsers: string[] = ['MSIE', 'Firefox', 'Safari', 'Chrome', 'Opera'];\n let userAgent: string = navigator.userAgent;\n let indexBrowser: number = browsers.length - 1;\n\n for (indexBrowser; indexBrowser > -1 && userAgent.indexOf(browsers[indexBrowser]) === -1; indexBrowser--);\n\n return browsers[indexBrowser];\n }\n\n}\n","import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrowserUtil } from './../../../../core/utils/browser.util';\nimport { DateUtil } from './../../../../core/utils/date.util';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { DateRange } from '../mat-datepicker/date-selection-model';\nimport { DateFilterFn } from '../mat-datepicker/datepicker-input-base';\nimport { MatDatepickerToggle } from '../mat-datepicker/datepicker-toggle';\nimport { PresetRanges } from './shared/preset-range/preset-range.component';\n\nexport let nextUniqueId = 0;\n\n@Component({\n selector: 'gipi-date-range-picker',\n exportAs: 'gipiDateRangePicker',\n templateUrl: './date-range-picker.component.html',\n styleUrls: ['./date-range-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof DateRangePickerComponent => DateRangePickerComponent),\n multi: true\n },\n ],\n host: {\n 'class': 'gipi-date-range-picker',\n }\n})\nexport class DateRangePickerComponent implements OnInit, OnDestroy, ControlValueAccessor {\n\n @ViewChild(MatDatepickerToggle, { static: true }) matDatepickerToggleRef: MatDatepickerToggle<Date>;\n\n private _name: string = `gipi-date-range-${nextUniqueId++}`;\n\n private _startDate: Date;\n get startDate(): Date {\n return this._startDate;\n }\n set startDate(value: Date) {\n this._startDate = value;\n }\n\n private _endDate: Date;\n get endDate(): Date {\n return this._endDate;\n }\n set endDate(value: Date) {\n this._endDate = value;\n this.value = new DateRange(this.startDate, value);\n }\n\n @Input('idStart') idStartDate: string = `${this._name}-start`;\n @Input('idEnd') idEndDate: string = `${this._name}-end`;\n\n @Input('nameStart') nameStartDate: string = `${this._name}-start`;\n @Input('nameEnd') nameEndDate: string = `${this._name}-end`;\n\n @Input() label: string = '';\n\n @Input('placeholderStart') placeholderStartDate: string = 'Inicial';\n @Input('placeholderEnd') placeholderEndDate: string = 'Final';\n\n @Input() help: string = '';\n\n @Input() separator: string = '-';\n\n private _customRangeLabel: string = 'Personalizado';\n @Input() get customRangeLabel(): string {\n return this._customRangeLabel;\n }\n set customRangeLabel(value: string) {\n this._customRangeLabel = value;\n }\n\n private _ranges: PresetRanges<Date>;\n @Input() get ranges(): PresetRanges<Date> {\n return this._ranges;\n }\n set ranges(value: PresetRanges<Date>) {\n this._ranges = value;\n }\n\n private _maxRange: number = 368;\n @Input() get maxRange(): number {\n return this._maxRange;\n }\n set maxRange(value: number) {\n this._maxRange = coerceNumberProperty(value);\n }\n\n private _minDate: Date = new Date('01/01/2000');\n @Input('min') get minDate(): Date {\n return this._minDate;\n }\n set minDate(value: Date) {\n this._minDate = value;\n this._minDate.setHours(0, 0, 0, 0);\n }\n\n private _maxDate: Date;\n @Input('max') get maxDate(): Date {\n return this._maxDate;\n }\n set maxDate(value: Date) {\n this._maxDate = value;\n this._maxDate.setHours(0, 0, 0, 0);\n }\n\n private _required: boolean = false;\n @Input() get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n private _readonly: boolean = false;\n @Input() get readonly(): boolean {\n return this._readonly;\n }\n set readonly(value: boolean) {\n this._readonly = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n @Input() get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _dateFilter: DateFilterFn<Date> = null;\n @Input() get dateFilter(): DateFilterFn<Date> {\n return this._dateFilter;\n }\n set dateFilter(value: DateFilterFn<Date>) {\n this._dateFilter = value;\n }\n\n private _value: DateRange<Date>;\n @Input() get value(): DateRange<Date> {\n return this._value;\n }\n set value(value: DateRange<Date>) {\n let start: Date = null;\n let end: Date = null;\n if (value && value.start) {\n start = moment(value.start).startOf('day').toDate();\n }\n if (value && value.end) {\n end = moment(value.end).endOf('day').toDate();\n }\n\n if (start && end) {\n this._value = new DateRange(start, end);\n this.onChange(this._value);\n this.onTouched(this._value);\n }\n }\n\n onChange: Function = () => { };\n\n onTouched: Function = () => { };\n\n public get formattedValue(): string {\n return '';\n }\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void { }\n\n ngOnDestroy(): void { }\n\n writeValue(value: DateRange<Date>): void {\n if (value && value.start) {\n this.startDate = moment(value.start).startOf('day').toDate();\n } else {\n this.startDate = null;\n }\n if (value && value.end) {\n this.endDate = moment(value.end).endOf('day').toDate();\n } else {\n this.endDate = null;\n }\n\n this._changeDetectorRef.detectChanges();\n }\n\n registerOnChange(fn: Function): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n public onInputContentClick(event: MouseEvent): void {\n if (!this.readonly || !this.matDatepickerToggleRef) {\n return;\n }\n\n this.matDatepickerToggleRef._open(event);\n }\n\n public generatedStartDate(valueDate: string, keyUp: boolean): void {\n if (!keyUp && BrowserUtil.getBrowser() === 'Firefox') {\n return;\n }\n\n let match = false;\n if (valueDate.includes('/') && (!keyUp || valueDate.length === 10)) {\n this.startDate = moment(valueDate, 'DD/MM/YYYY').toDate();\n match = true;\n } else if (!valueDate.includes('/') && (!keyUp || valueDate.length === 8)) {\n this.startDate = moment(valueDate, 'DDMMYYYY').toDate();\n match = true;\n }\n\n if (BrowserUtil.getBrowser() !== 'Firefox') {\n if (match && !DateUtil.isValid(this.startDate)) {\n this.startDate = undefined;\n }\n } else {\n if (match && !this.startDate) {\n this.startDate = undefined;\n }\n }\n }\n\n public generatedEndDate(valueDate: string, keyUp: boolean): void {\n if (!keyUp && BrowserUtil.getBrowser() === 'Firefox') {\n return;\n }\n\n let match = false;\n if (valueDate.includes('/') && (!keyUp || valueDate.length === 10)) {\n this.endDate = moment(valueDate, 'DD/MM/YYYY').toDate();\n match = true;\n } else if (!valueDate.includes('/') && (!keyUp || valueDate.length === 8)) {\n this.endDate = moment(valueDate, 'DDMMYYYY').toDate();\n match = true;\n }\n\n if (BrowserUtil.getBrowser() !== 'Firefox') {\n if (match && !DateUtil.isValid(this.endDate)) {\n this.endDate = undefined;\n }\n } else {\n if (match && !this.endDate) {\n this.endDate = undefined;\n }\n }\n }\n\n\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { MatDateRangeSelectionStrategy } from \"../../../mat-datepicker/date-range-selection-strategy\";\nimport { DateRange } from \"../../../mat-datepicker/date-selection-model\";\nimport { DateAdapter } from \"../../../mat-datepicker/shared/adapter/date-adapter\";\n\n@Injectable()\nexport class MaxRangeSelectionStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n\n start: any;\n\n public delta: number;\n\n constructor(private _dateAdapter: DateAdapter<D>) { }\n\n selectionFinished(date: D, currentRange: DateRange<D>) {\n let { start, end } = currentRange;\n\n if (start == null) {\n start = date;\n } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n const maxDate = this._dateAdapter.addCalendarDays(start, (this.delta - 1));\n end = (date > maxDate) ? maxDate : date;\n } else {\n start = date;\n end = null;\n }\n\n return new DateRange<D>(start, end);\n }\n\n createPreview(activeDate: D | null, currentRange: DateRange<D>): DateRange<D> {\n if (currentRange.start && !currentRange.end) {\n const maxDate = this._dateAdapter.addCalendarDays(currentRange.start, (this.delta - 1));\n const rangeEnd = activeDate ? (activeDate > maxDate) ? maxDate : activeDate : null;\n return new DateRange(currentRange.start, rangeEnd);\n }\n\n return new DateRange<D>(null, null);\n }\n\n}\n","import { Directive, Inject, Input } from '@angular/core';\n\nimport { MAT_DATE_RANGE_SELECTION_STRATEGY } from '../../../mat-datepicker/date-range-selection-strategy';\nimport { MaxRangeSelectionStrategy } from './max-range-selection-startegy';\n\n@Directive({\n selector: '[maxRange]',\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: MaxRangeSelectionStrategy,\n }\n ]\n})\nexport class MaxRangeDirective {\n\n constructor(\n @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY)\n private maxRangeStrategy: MaxRangeSelectionStrategy<any>\n ) { }\n\n @Input() set maxRange(value: number) {\n this.maxRangeStrategy.delta = +value || 365;\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatCalendar } from '../../../mat-datepicker/calendar';\nimport { MatDateRangeInput } from '../../../mat-datepicker/date-range-input';\nimport { MatDateRangePicker } from '../../../mat-datepicker/date-range-picker';\n\nexport interface PresetRanges<D> {\n [index: string]: [D, D];\n}\n\n@Component({\n selector: 'gipi-preset-range',\n templateUrl: './preset-range.component.html',\n styleUrls: ['./preset-range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof PresetRangeComponent => PresetRangeComponent),\n multi: true\n },\n ],\n host: {\n 'class': 'gipi-preset-range',\n }\n})\nexport class PresetRangeComponent implements OnInit, OnDestroy {\n\n private readonly _destroy$: Subject<void> = new Subject();\n\n public rangesArray: string[] = [];\n public selectedRange: string = '';\n\n @Input() matDateRangeInput: MatDateRangeInput<Date> = null;\n @Input() matCalendar: MatCalendar<Date> = null;\n @Input() matDateRangePicker: MatDateRangePicker<Date> = null;\n\n private _customRangeLabel: string = 'Personalizado';\n @Input() get customRangeLabel(): string {\n return this._customRangeLabel;\n }\n set customRangeLabel(value: string) {\n this._customRangeLabel = value;\n }\n\n private _ranges: PresetRanges<moment.Moment>;\n @Input() get ranges(): PresetRanges<moment.Moment> {\n return this._ranges;\n }\n set ranges(value: PresetRanges<moment.Moment>) {\n this._ranges = value;\n this._renderRanges();\n }\n\n private _maxRange: number;\n @Input() get maxRange(): number {\n return this._maxRange;\n }\n set maxRange(value: number) {\n this._maxRange = value;\n }\n\n private get _startDate(): Date {\n const selectedRange: any = this.matCalendar.selected;\n return selectedRange.start;\n }\n\n private get _endDate(): Date {\n const selectedRange: any = this.matCalendar.selected;\n return selectedRange.end;\n }\n\n private get _minDate(): Date {\n return this.matCalendar.minDate;\n }\n\n private get _maxDate(): Date {\n return this.matCalendar.maxDate;\n }\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,) { }\n\n ngOnInit(): void {\n this.matCalendar.stateChanges\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._loadSelectedRange();\n this._changeDetectorRef.markForCheck();\n });\n\n this._loadSelectedRange();\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n }\n\n private _renderRanges(): void {\n let start: moment.Moment;\n let end: moment.Moment;\n\n if (typeof this.ranges === 'object') {\n for (const range in this.ranges) {\n if (this.ranges[range]) {\n // Start date\n if (typeof this.ranges[range][0] === 'string') {\n start = moment(this.ranges[range][0]);\n } else {\n start = moment(this.ranges[range][0]);\n }\n\n if (typeof this.ranges[range][1] === 'string') {\n end = moment(this.ranges[range][1]);\n } else {\n end = moment(this.ranges[range][1]);\n }\n\n const minDate: moment.Moment = moment(this._minDate).clone();\n let maxDate: moment.Moment = moment(this._maxDate).clone();\n\n if (minDate.isValid() && start.isBefore(minDate)) {\n start = minDate.clone();\n }\n if (maxDate.isValid() && start.clone().add((this.maxRange - 1), 'days').isAfter(maxDate)) {\n maxDate = start;\n }\n if (maxDate.isValid() && end.isAfter(maxDate)) {\n end = maxDate.clone();\n }\n if (\n (minDate && end.isBefore(minDate, 'day')) ||\n (maxDate && start.isAfter(maxDate, 'day'))\n ) {\n continue;\n }\n\n this.ranges[range] = [start, end];\n }\n }\n\n for (const range in this.ranges) {\n if (this.ranges[range]) {\n this.rangesArray.push(range);\n }\n }\n }\n\n this._loadSelectedRange();\n }\n\n private _loadSelectedRange(): void {\n let customRange: boolean = true;\n let i: number = 0;\n if (this.rangesArray.length > 0) {\n const startDate: moment.Moment = moment(this._startDate).startOf('day');\n const endDate: moment.Moment = moment(this._endDate).startOf('day');\n\n for (const range in this.ranges) {\n if (this.ranges[range]) {\n const startRange: moment.Moment = (this.ranges[range][0]).startOf('day');\n const endRange: moment.Moment = (this.ranges[range][1]).startOf('day');\n if (startDate.isSame(startRange) && endDate.isSame(endRange)) {\n customRange = false;\n this.selectedRange = this.rangesArray[i];\n break;\n }\n\n i++;\n }\n }\n if (customRange) {\n this.selectedRange = this.customRangeLabel;\n }\n } else {\n this.selectedRange = this.customRangeLabel;\n }\n }\n\n private _calculateDateRange(range: string): Date[] {\n const minDate: moment.Moment = this._minDate ? moment(this._minDate) : null;\n const maxDate: moment.Moment = this._maxDate ? moment(this._maxDate) : null;\n const [start, end] = [this.ranges[range][0], this.ranges[range][1]];\n\n let startDateResp: moment.Moment = null;\n let endDateResp: moment.Moment = null;\n\n if (minDate && start.isBefore(minDate)) {\n startDateResp = minDate.clone();\n } else {\n startDateResp = start.clone();\n }\n if (maxDate && end.isAfter(maxDate)) {\n endDateResp = maxDate.clone();\n } else {\n endDateResp = end.clone();\n }\n\n if (range === this.customRangeLabel) {\n const selectedRange: any = this.matCalendar.selected;\n startDateResp = selectedRange.start;\n endDateResp = selectedRange.end;\n }\n\n return [this._getValidDateOrNull(startDateResp.toDate()), this._getValidDateOrNull(endDateResp.toDate())];\n }\n\n private _getValidDateOrNull(obj: unknown): Date | null {\n return this._isDateInstance(obj) && this._isValid(obj as Date) ? obj as Date : null;\n }\n\n private _isDateInstance(obj: any): obj is Date {\n return obj instanceof Date;\n }\n\n private _isValid(date: Date) {\n return !isNaN(date.getTime());\n }\n\n public clickRange(event: MouseEvent, range: string): void {\n if (range === this.customRangeLabel) {\n return;\n }\n\n const [start, end] = this._calculateDateRange(range);\n // (this.matCalendar.selected as any).start = start;\n // (this.matCalendar.selected as any).end = end;\n // this.matCalendar.updateTodaysDate();\n // this.matCalendar.activeDate = start;\n // this.matCalendar.activeDate = end;\n this.matDateRangePicker.select(start);\n this.matDateRangePicker.select(end);\n this.matDateRangePicker.close();\n }\n\n\n public isDisableRange(range: string): boolean {\n if (range === this._customRangeLabel) {\n return false;\n }\n\n const rangeMarkers = this._ranges[range];\n const areBothBefore = rangeMarkers.every((date) => {\n const minDate: moment.Moment = moment(this.matCalendar.minDate);\n if (!minDate) {\n return false;\n }\n return moment(date).isBefore(minDate);\n\n });\n\n const areBothAfter = rangeMarkers.every((date) => {\n const maxDate: moment.Moment = moment(this.matCalendar.maxDate);\n if (!maxDate) {\n return false;\n }\n return moment(date).isAfter(maxDate);\n });\n\n return areBothBefore || areBothAfter;\n }\n\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { BrowserUtil } from '../../../../core/utils/browser.util';\nimport { DateUtil } from '../../../../core/utils/date.util';\nimport { DateFilterFn } from '../mat-datepicker/datepicker-input-base';\nimport { MatDatepickerToggle } from '../mat-datepicker/datepicker-toggle';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'gipi-datepicker',\n exportAs: 'gipiDatePicker',\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof DatepickerComponent => DatepickerComponent),\n multi: true\n },\n ],\n host: {\n 'class': 'gipi-datepicker',\n }\n})\nexport class DatepickerComponent implements OnInit, OnDestroy, ControlValueAccessor {\n\n @ViewChild(MatDatepickerToggle, { static: true }) matDatepickerToggleRef: MatDatepickerToggle<Date>;\n\n private _name: string = `gipi-date-range-${nextUniqueId++}`;\n\n @Input() id: string = `${this._name}-date`;\n\n @Input() name: string = `${this._name}-date`;\n\n @Input() label: string = '';\n\n @Input() placeholder: string = '__/__/____';\n\n @Input() help: string = '';\n\n private _minDate: Date = new Date('01/01/2000');\n @Input('min') get minDate(): Date {\n return this._minDate;\n }\n set minDate(value: Date) {\n this._minDate = value;\n this._minDate.setHours(0, 0, 0, 0);\n }\n\n private _maxDate: Date;\n @Input('max') get maxDate(): Date {\n return this._maxDate;\n }\n set maxDate(value: Date) {\n this._maxDate = value;\n this._maxDate.setHours(0, 0, 0, 0);\n }\n\n private _required: boolean = false;\n @Input() get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n private _readonly: boolean = false;\n @Input() get readonly(): boolean {\n return this._readonly;\n }\n set readonly(value: boolean) {\n this._readonly = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n @Input() get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _dateFilter: DateFilterFn<Date> = null;\n @Input() get dateFilter(): DateFilterFn<Date> {\n return this._dateFilter;\n }\n set dateFilter(value: DateFilterFn<Date>) {\n this._dateFilter = value;\n }\n\n private _value: Date;\n @Input() get value(): Date {\n return this._value;\n }\n set value(value: Date) {\n this._value = value;\n this.onChange(this._value);\n this.onTouched(this._value);\n }\n\n onChange: Function = () => { };\n\n onTouched: Function = () => { };\n\n public get formattedValue(): string {\n return '';\n }\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void { }\n\n ngOnDestroy(): void { }\n\n writeValue(value: Date): void {\n this._value = value;\n this._changeDetectorRef.detectChanges();\n }\n\n registerOnChange(fn: Function): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n public onInputContentClick(event: MouseEvent): void {\n if (!this.readonly || !this.matDatepickerToggleRef) {\n return;\n }\n }\n\n public generatedDate(valueDate: string, keyUp: boolean): void {\n if (!keyUp && BrowserUtil.getBrowser() === 'Firefox') {\n return;\n }\n\n let match = false;\n if (valueDate.includes('/') && (!keyUp || valueDate.length === 10)) {\n this.value = moment(valueDate, 'DD/MM/YYYY').toDate();\n match = true;\n } else if (!valueDate.includes('/') && (!keyUp || valueDate.length === 8)) {\n this.value = moment(valueDate, 'DDMMYYYY').toDate();\n match = true;\n }\n\n if (BrowserUtil.getBrowser() !== 'Firefox') {\n if (match && !DateUtil.isValid(this.value)) {\n this.value = undefined;\n }\n } else {\n if (match && !this.value) {\n this.value = undefined;\n }\n }\n }\n\n public validateMinAndMaxDate(valueDate: string): void {\n const dateInput = moment(valueDate, 'DD/MM/YYYY').toDate();\n if (DateUtil.isLessThan(dateInput, this.minDate)) {\n this.value = undefined;\n } else if (this.maxDate) {\n this.value = (DateUtil.isGreaterThan(dateInput, this.maxDate) ? undefined : dateInput);\n }\n }\n\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatNativeDateModule } from '@angular/material';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { MatCalendar, MatCalendarHeader } from './mat-datepicker/calendar';\nimport { MatCalendarBody } from './mat-datepicker/calendar-body';\nimport { MatDateRangeInput } from './mat-datepicker/date-range-input';\nimport { MatEndDate, MatStartDate } from './mat-datepicker/date-range-input-parts';\nimport { MatDateRangePicker } from './mat-datepicker/date-range-picker';\nimport { MatDatepicker } from './mat-datepicker/datepicker';\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerContent, } from './mat-datepicker/datepicker-base';\nimport { MatDatepickerInput } from './mat-datepicker/datepicker-input';\nimport { MatDatepickerIntl } from './mat-datepicker/datepicker-intl';\nimport { MatDatepickerToggle, MatDatepickerToggleIcon } from './mat-datepicker/datepicker-toggle';\nimport { MatMonthView } from './mat-datepicker/month-view';\nimport { MatMultiYearView } from './mat-datepicker/multi-year-view';\nimport { NativeDateAdapter } from './mat-datepicker/shared/adapter/native-date-adapter';\nimport { MatYearView } from './mat-datepicker/year-view';\n\nimport { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';\nimport { MaxRangeDirective } from './date-range-picker/shared/max-range/max-range.directive';\nimport { PresetRangeComponent } from './date-range-picker/shared/preset-range/preset-range.component';\nimport { DatepickerComponent } from './datepicker/datepicker.component';\nimport { DateAdapter, MAT_DATE_LOCALE } from './mat-datepicker/shared/adapter/date-adapter';\nimport { MAT_DATE_FORMATS } from './mat-datepicker/shared/adapter/date-formats';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n FormsModule,\n ReactiveFormsModule,\n PlatformModule,\n MatNativeDateModule,\n ],\n exports: [\n ScrollingModule,\n FormsModule,\n ReactiveFormsModule,\n PlatformModule,\n\n MatCalendar,\n MatCalendarBody,\n MatDatepicker,\n MatDatepickerContent,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepickerToggleIcon,\n MatMonthView,\n MatYearView,\n MatMultiYearView,\n MatCalendarHeader,\n MatDateRangeInput,\n MatStartDate,\n MatEndDate,\n MatDateRangePicker,\n\n MaxRangeDirective,\n PresetRangeComponent,\n DateRangePickerComponent,\n DatepickerComponent,\n ],\n declarations: [\n MatCalendar,\n MatCalendarBody,\n MatDatepicker,\n MatDatepickerContent,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepickerToggleIcon,\n MatMonthView,\n MatYearView,\n MatMultiYearView,\n MatCalendarHeader,\n MatDateRangeInput,\n MatStartDate,\n MatEndDate,\n MatDateRangePicker,\n\n MaxRangeDirective,\n PresetRangeComponent,\n DateRangePickerComponent,\n DatepickerComponent,\n ],\n providers: [\n MatDatepickerIntl,\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n {\n provide: DateAdapter,\n useClass: NativeDateAdapter,\n deps: [MAT_DATE_LOCALE]\n },\n {\n provide: MAT_DATE_LOCALE,\n useValue: 'pt-BR',\n },\n {\n provide: MAT_DATE_FORMATS,\n useValue: {\n parse: {\n dateInput: 'DD/MM/YYYY',\n },\n display: {\n dateInput: 'DD/MM/YYYY',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n },\n },\n ],\n entryComponents: [\n MatDatepickerContent,\n ]\n})\nexport class DatepickerModule { }\n","import { AfterViewInit, ChangeDetectorRef, Component, forwardRef, OnDestroy, OnInit } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { matDatepickerAnimations } from '@angular/material/datepicker';\nimport { ObjectUtil } from '../../../../core/utils/object.util';\nimport { MonthYearPickerComponent } from '../month-year-picker.component';\n@Component({\n selector: 'gipi-calendar-month-year',\n exportAs: 'gipiMonthYearPicker',\n templateUrl: './calendar-month-year.component.html',\n styleUrls: ['./calendar-month-year.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof CalendarMonthYearComponent => CalendarMonthYearComponent),\n multi: true\n },\n ],\n animations: [\n matDatepickerAnimations.transformPanel,\n matDatepickerAnimations.fadeInCalendar,\n ],\n host: {\n 'class': 'gipi-calendar-month-year',\n '[@transformPanel]': '_animationState',\n '(@transformPanel.done)': '_animationDone.next()',\n }\n})\nexport class CalendarMonthYearComponent implements AfterViewInit, OnInit, OnDestroy {\n\n private _subscriptions = new Subscription();\n\n _animationState: 'enter' | 'void' = 'enter';\n _animationDone: Subject<void> = new Subject<void>();\n\n monthYearPicker: MonthYearPickerComponent;\n\n isShowYears: boolean;\n years: Array<number> = [];\n months: Array<string> = [];\n\n _calendarView: 'both' | 'year' = 'both';\n _locale: string;\n _year: number;\n _month: number;\n // _enabledMonths: Array<number> = [];\n // _disabledMonths: Array<number> = [];\n // _enabledYears: Array<number> = [];\n // _disabledYears: Array<number> = [];\n _multiple: boolean;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,) { }\n\n ngOnInit() {\n if (this._locale) {\n moment.locale(this._locale);\n } else {\n moment.locale('pt-br');\n }\n\n this.months = [...this.monthYearPicker.model.months];\n this._calendarView = this.monthYearPicker.calendarView;\n if (this._calendarView === 'year') {\n this.toggleShowYears();\n }\n\n this.monthYearPicker.onValueChange(this.monthYearPicker.model.selectedMonthIndex, this.monthYearPicker.model.selectedMonthYear);\n }\n\n ngAfterViewInit(): void {\n if (this._changeDetectorRef) {\n this._subscriptions.add(\n this.monthYearPicker._stateChanges.subscribe(() => {\n this._changeDetectorRef!.markForCheck();\n })\n );\n }\n }\n\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._animationDone.complete();\n }\n\n public _startExitAnimation(): void {\n this._animationState = 'void';\n if (this._changeDetectorRef) {\n this._changeDetectorRef.markForCheck();\n }\n }\n\n public decrement(): void {\n this.monthYearPicker.model.decrementYear();\n if (this.isShowYears) {\n this._renderYears();\n }\n }\n\n public increment(): void {\n this.monthYearPicker.model.incrementYear();\n if (this.isShowYears) {\n this._renderYears();\n }\n }\n\n public selectMonth(index: number) {\n this.monthYearPicker.model.selectMonth(index);\n this.monthYearPicker.onValueChange(this.monthYearPicker.model.selectedMonthIndex, this.monthYearPicker.model.selectedMonthYear);\n this.monthYearPicker.close();\n }\n\n public isSelectedMonth(monthIndex: number) {\n return this.monthYearPicker.model.selectedMonthIndex == monthIndex && this.monthYearPicker.model.selectedMonthYear == this.monthYearPicker.model.selectedYearMoment.year();\n }\n\n public isCurrentMonth(monthIndex: number) {\n const currentMonth: number = moment().month();\n const currentYear: number = moment().year();\n return (monthIndex === currentMonth) && (this.monthYearPicker.model.selectedYearMoment.year() === currentYear);\n }\n\n public isDisabledMonth(index: number): boolean {\n let disabled = false;\n\n if (!ObjectUtil.isNull(this.monthYearPicker)) {\n const minMonth = !ObjectUtil.isNull(this.monthYearPicker.min) ? this.monthYearPicker.min.month : null;\n const maxMonth = !ObjectUtil.isNull(this.monthYearPicker.max) ? this.monthYearPicker.max.month : null;\n\n if (!ObjectUtil.isNull(minMonth) && !ObjectUtil.isNull(maxMonth)) {\n disabled = index < minMonth || index > maxMonth;\n } else if (!ObjectUtil.isNull(minMonth)) {\n disabled = index < minMonth;\n } else if (!ObjectUtil.isNull(maxMonth)) {\n disabled = index > maxMonth;\n }\n }\n\n return disabled;\n // let disabled = false;\n // if (this._enabledMonths && this._enabledMonths.length > 0) {\n // disabled = this._enabledMonths.indexOf(index) < 0;\n // }\n // if (this._disabledMonths && this._disabledMonths.length > 0) {\n // disabled = this._disabledMonths.indexOf(index) >= 0;\n // }\n // return disabled;\n }\n\n /** Years */\n public toggleShowYears() {\n this.isShowYears = !this.isShowYears;\n this._renderYears();\n }\n\n private _renderYears() {\n this.years = [];\n for (let i = 11; i > 0; i--) {\n this.years.push(this.monthYearPicker.model.selectedYearMoment.year() - i);\n }\n for (let i = 0; i <= 12; i++) {\n this.years.push(this.monthYearPicker.model.selectedYearMoment.year() + i);\n }\n }\n\n public get periodButtonLabel(): string {\n const formatYearRange = (start: number, end: number): string => {\n return `${start} \\u2013 ${end}`;\n };\n\n return this.isShowYears ? formatYearRange(this.years[0], this.years[this.years.length - 1]) : this.monthYearPicker.model.selectedYearText;\n }\n\n public selectYear(year: number) {\n if (this._calendarView === 'both') {\n this.isShowYears = false;\n }\n this.monthYearPicker.model.selectedYearMoment = moment().year(year);\n this.monthYearPicker.model.updateYearText();\n\n if (this._calendarView === 'year') {\n this.monthYearPicker.onValueChange(this.monthYearPicker.model.selectedMonthIndex, year);\n this.monthYearPicker.close();\n }\n }\n\n public isSelectedYear(year: number) {\n return this.monthYearPicker.model.selectedYearMoment.year() === year;\n }\n\n public isCurrentYear(year: number) {\n return moment().year() === year;\n }\n\n public isDisabledYear(index: number) {\n let disabled = false;\n\n if (!ObjectUtil.isNull(this.monthYearPicker)) {\n const minYear = !ObjectUtil.isNull(this.monthYearPicker.min) ? this.monthYearPicker.min.year : null;\n const maxYear = !ObjectUtil.isNull(this.monthYearPicker.max) ? this.monthYearPicker.max.year : null;\n\n if (!ObjectUtil.isNull(minYear) && !ObjectUtil.isNull(maxYear)) {\n disabled = index < minYear || index > maxYear;\n } else if (!ObjectUtil.isNull(minYear)) {\n disabled = index < minYear;\n } else if (!ObjectUtil.isNull(maxYear)) {\n disabled = index > maxYear;\n }\n }\n\n return disabled;\n\n // let disabled: boolean = false;\n // if (this._enabledYears && this._enabledYears.length > 0) {\n // disabled = this._enabledYears.findIndex(y => y === year) < 0;\n // }\n // if (this._disabledYears && this._disabledYears.length > 0) {\n // disabled = this._disabledYears.findIndex(y => y === year) >= 0;\n // }\n // return disabled;\n }\n\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayConfig, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, ElementRef, EventEmitter, forwardRef, Inject, InjectionToken, Input, NgZone, OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { merge, Subject } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ObjectUtil } from './../../../core/utils/object.util';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { CalendarMonthYearComponent } from './calendar-month-year/calendar-month-year.component';\n\n\nexport const GIPI_MONTH_YEAR_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('gipi-month-year-scroll-strategy');\n\n/** @docs-private */\nexport function GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: GIPI_MONTH_YEAR_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY,\n};\n\n\nexport class MonthYear {\n private _month: number;\n private _year: number;\n\n public get date(): Date {\n const date = moment().day(1).month(this.month).year(this.year).startOf('day').toDate();\n return date;\n }\n\n public get month(): number {\n return this._month;\n }\n\n public get year(): number {\n return this._year;\n }\n\n constructor(month?: number, year?: number) {\n this._month = month;\n this._year = year;\n }\n}\n\nexport class MonthPickerModel {\n selectedYearMoment: moment.Moment;\n selectedYearText: string;\n\n selectedMonthMoment: moment.Moment;\n selectedMonthIndex: number;\n selectedMonthYear: number;\n\n months: Array<string> = [];\n\n constructor() {\n this.selectedYearMoment = moment();\n this.updateYearText();\n\n this.selectedMonthMoment = moment();\n\n this.months = moment.monthsShort().map(month => `${month}.`);\n\n this.selectedMonthIndex = this.selectedMonthMoment.month();\n this.selectedMonthYear = this.selectedYearMoment.year();\n }\n\n updateYearText() {\n this.selectedYearText = !ObjectUtil.isNull(moment) ? moment(this.selectedYearMoment).format('YYYY') : '';\n }\n\n selectMonth(index: number) {\n this.selectedMonthMoment = moment().month(index);\n this.selectedMonthIndex = this.selectedMonthMoment.month();\n this.selectedMonthYear = this.selectedYearMoment.year();\n }\n\n incrementYear() {\n this.selectedYearMoment = this.selectedYearMoment.add(1, \"year\")\n this.updateYearText();\n }\n\n decrementYear() {\n this.selectedYearMoment = this.selectedYearMoment.subtract(1, \"year\")\n this.updateYearText();\n }\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'gipi-month-year-picker',\n templateUrl: './month-year-picker.component.html',\n styleUrls: ['./month-year-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof MonthYearPickerComponent => MonthYearPickerComponent),\n multi: true\n },\n ],\n host: {\n 'class': 'gipi-month-year-picker',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MonthYearPickerComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {\n\n @ViewChild('inputMonthYearContent', { static: false, }) inputMonthYearContentRef: ElementRef;\n\n private _name: string = `gipi-date-range-${nextUniqueId++}`;\n\n private _scrollStrategy: () => ScrollStrategy;\n\n private _popupRef: OverlayRef | null;\n private _popupComponentRef: ComponentRef<CalendarMonthYearComponent> | null;\n private _focusedElementBeforeOpen: HTMLElement | null = null;\n private _backdropHarnessClass = `${this._name}-backdrop`;\n\n readonly _stateChanges: Subject<void> = new Subject();\n\n public valueLabel: string = '';\n\n public model: MonthPickerModel;\n\n @Input() id: string = `${this._name}-date`;\n\n @Input() name: string = `${this._name}-date`;\n\n @Input() label: string = '';\n\n @Input() placeholder: string = '';\n\n @Input() help: string = '';\n\n @Input() locale: string;\n @Input() year: number;\n @Input() month: number;\n\n // @Input() enabledMonths: Array<number> = [];\n // @Input() disabledMonths: Array<number> = [];\n\n // @Input() enabledYears: Array<number> = [];\n // @Input() disabledYears: Array<number> = [];\n\n @Input() multiple: boolean;\n\n @Input() xPosition: 'start' | 'end' = 'start';\n\n @Input() yPosition: 'above' | 'below' = 'below';\n\n @Input() calendarView: 'both' | 'year' = 'both';\n\n private _opened = false;\n @Input() get opened(): boolean {\n return this._opened;\n }\n set opened(value: boolean) {\n coerceBooleanProperty(value) ? this.open() : this.close();\n }\n\n private _required: boolean = false;\n @Input() get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n @Input() get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _min: MonthYear = null;\n @Input() get min(): MonthYear {\n return this._min;\n }\n set min(value: MonthYear) {\n this._min = value;\n }\n\n private _max: MonthYear = null;\n @Input() get max(): MonthYear {\n return this._max;\n }\n set max(value: MonthYear) {\n this._max = value;\n }\n\n private _value: MonthYear;\n @Input() get value(): MonthYear {\n return this._value;\n }\n set value(value: MonthYear) {\n let valueAux: MonthYear = value;\n if (!value) {\n valueAux = null;\n }\n if (valueAux) {\n switch (this.calendarView) {\n case 'both': {\n this.valueLabel = moment(valueAux.date).format('MM/YYYY');\n break;\n }\n case 'year': {\n this.valueLabel = moment(valueAux.date).format('YYYY');\n break;\n }\n default: {\n this.valueLabel = moment(valueAux.date).format('MM/YYYY');\n break;\n }\n }\n }\n\n this._value = valueAux;\n\n this.onChange(this._value);\n this.onTouched(this._value);\n }\n\n @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n onChange: Function = () => { };\n\n onTouched: Function = () => { };\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _overlay: Overlay,\n private _ngZone: NgZone,\n private _viewContainerRef: ViewContainerRef,\n @Inject(GIPI_MONTH_YEAR_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(DOCUMENT) private _document: any,\n ) {\n this._scrollStrategy = scrollStrategy;\n }\n\n ngOnInit(): void {\n this.model = new MonthPickerModel();\n\n if (this.year) {\n this.model.selectedYearMoment = moment().year(this.year);\n }\n\n if (this.month) {\n this.model.selectedMonthIndex = this.month;\n this.model.selectedMonthMoment = moment().month(this.month);\n\n if (this.year) {\n this.model.selectedMonthYear = this.year;\n }\n }\n\n this.model.updateYearText();\n if (ObjectUtil.isNull(this.month) && ObjectUtil.isNull(this.year)) {\n this.value = null;\n this._changeDetectorRef.detectChanges();\n } else {\n this.onValueChange(this.model.selectedMonthIndex, this.model.selectedMonthYear);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const positionChange = changes['xPosition'] || changes['yPosition'];\n\n if (positionChange && !positionChange.firstChange && this._popupRef) {\n this._setConnectedPositions(this._popupRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy);\n\n if (this.opened) {\n this._popupRef.updatePosition();\n }\n }\n\n this._stateChanges.next(undefined);\n }\n\n ngOnDestroy(): void {\n this._destroyPopup();\n this.close();\n this._stateChanges.complete();\n }\n\n writeValue(value: MonthYear): void {\n this.value = value;\n this._changeDetectorRef.detectChanges();\n }\n\n registerOnChange(fn: Function): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n public onValueChange(month: number, year: number) {\n const monthYear: MonthYear = new MonthYear(month, year);\n this.value = monthYear;\n this._changeDetectorRef.detectChanges();\n }\n\n public open(): void {\n if (this._opened || this.disabled) {\n return;\n }\n if (!this.inputMonthYearContentRef) {\n throw Error('Attempted to open an MonthYearPicker with no associated input.');\n }\n if (this._document) {\n this._focusedElementBeforeOpen = this._document.activeElement;\n }\n\n this._openAsPopup();\n this._opened = true;\n this.openedStream.emit();\n }\n\n public close(): void {\n if (!this._opened) {\n return;\n }\n if (this._popupComponentRef && this._popupRef) {\n const instance = this._popupComponentRef.instance;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => this._destroyPopup());\n }\n\n const completeClose = () => {\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n this._focusedElementBeforeOpen = null;\n }\n };\n\n if (this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function') {\n this._focusedElementBeforeOpen.focus();\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n private _openAsPopup(): void {\n const portal: ComponentPortal<CalendarMonthYearComponent> = new ComponentPortal<CalendarMonthYearComponent>(CalendarMonthYearComponent, this._viewContainerRef);\n\n this._destroyPopup();\n this._createPopup();\n this._popupComponentRef = this._popupRef!.attach(portal);\n this._popupComponentRef.instance.monthYearPicker = this;\n\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._popupRef!.updatePosition();\n });\n }\n\n private _getConnectedOverlayOrigin(): ElementRef {\n return this.inputMonthYearContentRef ? this.inputMonthYearContentRef : this.elementRef;\n }\n\n private _createPopup(): void {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(this._getConnectedOverlayOrigin())\n .withTransformOriginOn('.mat-datepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n\n const overlayConfig = new OverlayConfig({\n positionStrategy: this._setConnectedPositions(positionStrategy),\n hasBackdrop: true,\n backdropClass: ['mat-overlay-transparent-backdrop', this._backdropHarnessClass],\n direction: this._dir || 'ltr',\n scrollStrategy: this._scrollStrategy(),\n panelClass: 'mat-month-year-picker-popup',\n });\n\n this._popupRef = this._overlay.create(overlayConfig);\n this._popupRef.overlayElement.setAttribute('role', 'dialog');\n\n merge(\n this._popupRef.backdropClick(),\n this._popupRef.detachments(),\n this._popupRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE || (this.inputMonthYearContentRef && event.altKey && event.keyCode === UP_ARROW)))\n ).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n\n this.close();\n });\n }\n\n private _destroyPopup() {\n if (this._popupRef) {\n this._popupRef.dispose();\n this._popupRef = this._popupComponentRef = null;\n }\n }\n\n private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n return strategy.withPositions([\n {\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY\n },\n {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY\n },\n {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY\n },\n {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY\n }\n ]);\n }\n\n}\n","export enum SortDirectionEnum {\n\n ASC = 'ASC',\n DESC = 'DESC'\n\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { CalendarMonthYearComponent } from './calendar-month-year/calendar-month-year.component';\nimport { GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY_PROVIDER, MonthYearPickerComponent } from './month-year-picker.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n MatIconModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n exports: [\n ScrollingModule,\n CalendarMonthYearComponent,\n MonthYearPickerComponent,\n ],\n declarations: [\n CalendarMonthYearComponent,\n MonthYearPickerComponent,\n ],\n providers: [\n GIPI_MONTH_YEAR_SCROLL_STRATEGY_FACTORY_PROVIDER,\n ],\n entryComponents: [\n CalendarMonthYearComponent,\n ],\n})\nexport class MonthYearPickerModule { }\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Component, ElementRef, forwardRef, Input, OnInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { NumberUtil } from '../../../core/utils/number.util';\nimport { ObjectUtil } from '../../../core/utils/object.util';\n\nlet nextUniqueId = 0;\n\nexport class RangePage {\n start: number;\n end: number;\n\n public getTotalCount(): number {\n return (this.end - this.start) + 1;\n }\n\n public getRange(): number[] {\n return Array.from({ length: this.getTotalCount() }, (_, i) => this.start - 1 + i);\n }\n\n constructor(start?: number, end?: number) {\n this.start = start;\n this.end = end;\n }\n}\n\n@Component({\n selector: 'gipi-range-page',\n templateUrl: './range-page.component.html',\n styleUrls: ['./range-page.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GIPIRangePageComponent),\n multi: true\n },\n ]\n})\nexport class GIPIRangePageComponent implements OnInit, ControlValueAccessor {\n\n private _name: string = `gipi-range-page-${nextUniqueId++}`;\n\n public _startPage: number = 1;\n public _endPage: number = 1;\n\n @Input() id: string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string = '';\n\n @Input() tooltip: string = '';\n\n @Input() placeholderStart: string = '';\n @Input() placeholderEnd: string = '';\n\n @Input() help: string = '';\n\n private _min: number = 1;\n @Input() get min(): number {\n return NumberUtil.isNumber(this._min) ? this._min : 1;\n }\n set min(value: number) {\n this._min = value;\n this._initPage();\n }\n\n private _max: number = 100;\n @Input() get max(): number {\n return NumberUtil.isNumber(this._max) ? this._max : 100;\n }\n set max(value: number) {\n this._max = value;\n this._initPage();\n }\n\n private _step: number = 1;\n @Input() get step(): number {\n return NumberUtil.isNumber(this._step) ? this._step : 1;\n }\n set step(value: number) {\n this._step = value;\n this._initPage();\n }\n\n private _required: boolean = false;\n @Input() get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n @Input() get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n onChange: Function = (value: RangePage) => { };\n onTouched: Function = () => { };\n\n public get formattedValue(): string {\n return '';\n }\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void {\n this._initPage();\n }\n\n ngOnDestroy(): void { }\n\n writeValue(value: RangePage): void {\n if (!ObjectUtil.isNull(value)) {\n this._startPage = value.start || this._startPage;\n this._endPage = value.end || this._endPage;\n }\n this._changeDetectorRef.detectChanges();\n }\n\n registerOnChange(fn: Function): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n private _initPage(): void {\n this._startPage = this.min;\n this._endPage = Math.min(this._startPage + this.step - 1, this.max);\n }\n\n public updateEndPage(): void {\n if (this.disabled) {\n return;\n }\n\n if (this._startPage < this.min) {\n this._startPage = this.min;\n } else if (this._startPage > this.max) {\n this._startPage = this.max;\n }\n\n if (this._endPage < this._startPage) {\n this._endPage = this._startPage;\n } else if (this._endPage > (this._startPage + (this.step - 1))) {\n this._endPage = Math.min(this._startPage + this.step - 1, this.max);\n }\n this._propagateChange();\n }\n\n public updateStartPage(): void {\n if (this.disabled) {\n return;\n }\n\n if (this._endPage > this.max) {\n this._endPage = this.max;\n } else if (this._endPage > this.max) {\n this._endPage = this.max;\n }\n\n if (this._startPage > this._endPage) {\n this._startPage = this._endPage;\n } else if (this._startPage < (this._endPage - (this.step + 1))) {\n this._startPage = Math.max(this._endPage - this.step + 1, this.min);\n }\n this._propagateChange();\n }\n\n public previous(): void {\n if (this.disabled) {\n return;\n }\n\n const newStartPage = Math.max(this._startPage - this.step + 1, this.min);\n let newEndPage = Math.min(newStartPage + this.step - 1, this.max);\n\n if (newEndPage >= this.min) {\n this._startPage = newStartPage;\n this._endPage = newEndPage;\n this._propagateChange();\n }\n }\n\n public next(): void {\n if (this.disabled) {\n return;\n }\n\n // const newStartPage = Math.min(this._startPage + this.step, this.max - this.step + 1);\n // let newEndPage = newStartPage + this.step - 1;\n const newStartPage = Math.min(this._startPage + this.step, this.max);\n let newEndPage = Math.min(newStartPage + this.step - 1, this.max);\n\n if ((newStartPage === this.max) || (newEndPage > this.max)) {\n newEndPage = newStartPage;\n }\n\n if (newEndPage <= this.max) {\n this._startPage = newStartPage;\n this._endPage = newEndPage;\n this._propagateChange();\n }\n }\n\n public selectText(input: HTMLInputElement) {\n if (this.disabled || !input) {\n return;\n }\n setTimeout(() => input.select(), 0);\n }\n\n private _propagateChange() {\n this.onChange(new RangePage(this._startPage, this._endPage));\n this.onTouched();\n }\n\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface RangeSlider {\n from: number;\n to: number;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'gipi-range-slider',\n exportAs: 'gipiRangeSlider',\n templateUrl: './range-slider.component.html',\n styleUrls: ['./range-slider.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GIPIRangeSliderComponent),\n multi: true\n },\n ],\n host: {\n 'class': 'gipi-range-slider',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GIPIRangeSliderComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\n @ViewChild('fromSlider', { static: false }) fromSlider: ElementRef;\n @ViewChild('toSlider', { static: false }) toSlider: ElementRef;\n\n private _name: string = `gipi-range-slider-${nextUniqueId++}`;\n\n @Input() id: string = this._name;\n\n @Input() name: string = this._name;\n\n @Input() label: string = '';\n\n @Input() help: string = '';\n\n @Input() min: number = 1;\n\n @Input() max: number = 100;\n\n private _maxRange: number = 5;\n @Input() get maxRange(): number {\n return this._maxRange || 5;\n }\n set maxRange(value: number) {\n if (!value || (value <= 0)) {\n throw new Error('Minimum value for \"maxRange\" must be 1');\n }\n this._maxRange = value || 5;\n }\n\n private _fromValue: number = 1;\n @Input('from') get fromValue(): number {\n return this._fromValue || 1;\n }\n set fromValue(value: number) {\n if (!value || (value <= 0)) {\n throw new Error('Minimum value for \"from\" must be 1');\n }\n this._fromValue = value || 1;\n }\n\n private _toValue: number = 1;\n @Input('to') get toValue(): number {\n return this._toValue || 1;\n }\n set toValue(value: number) {\n if (!value || (value <= 0)) {\n throw new Error('Minimum value for \"to\" must be 1');\n }\n this._toValue = value || 1;\n }\n\n private _step: number = 1;\n @Input() get step(): number {\n return this._step || 1;\n }\n set step(value: number) {\n if (!value || (value <= 0)) {\n throw new Error('Minimum value for \"step\" must be 1');\n }\n this._step = value || 1;\n }\n\n private _disabled: boolean = false;\n @Input() get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _required: boolean = false;\n @Input() get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n onChange: Function = () => { };\n onTouched: Function = () => { };\n\n constructor(\n public elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void { }\n\n ngAfterViewInit(): void {\n this._fillSlider();\n this._setToggleAccessible();\n }\n\n ngOnDestroy(): void { }\n\n writeValue(value: RangeSlider): void {\n if (value) {\n this.fromValue = value.from;\n this.toValue = value.to;\n\n if (this.fromSlider && this.toSlider) {\n this.fromSlider.nativeElement.value = this.fromValue.toString();\n this.toSlider.nativeElement.value = this.toValue.toString();\n\n this._fillSlider();\n this._setToggleAccessible();\n }\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n public controlFromInput(isByNgModel: boolean): void {\n let [from, to] = isByNgModel ? [this.fromValue, this.toValue] : this._getParsed(this.fromSlider.nativeElement, this.toSlider.nativeElement);\n from = this._roundToStep(from);\n to = this._roundToStep(to);\n\n // if ((to - from) > this.maxRange) {\n // from = to - this.maxRange;\n // }\n\n this._fillSlider();\n this._setToggleAccessible();\n\n if (from > to) {\n this.fromValue = to;\n }\n\n this.fromSlider.nativeElement.value = this.fromValue.toString();\n this._notifyValueChange();\n }\n\n public controlToInput(isByNgModel: boolean): void {\n let [from, to] = isByNgModel ? [this.fromValue, this.toValue] : this._getParsed(this.fromSlider.nativeElement, this.toSlider.nativeElement);\n from = this._roundToStep(from);\n to = this._roundToStep(to);\n\n // if ((to - from) > this.maxRange) {\n // to = from + this.maxRange;\n // }\n\n this._fillSlider();\n this._setToggleAccessible();\n\n if (from <= to) {\n this.toValue = to;\n } else {\n this.toValue = from;\n }\n\n this.toSlider.nativeElement.value = this.toValue.toString();\n this._notifyValueChange();\n }\n\n public controlFromSlider(): void {\n let [from, to] = this._getParsed(this.fromSlider.nativeElement, this.toSlider.nativeElement);\n from = this._roundToStep(from);\n to = this._roundToStep(to);\n\n if ((to - from) > this.maxRange) {\n from = to - this.maxRange;\n }\n\n this._fillSlider();\n this._setToggleAccessible();\n\n if ((to - from) === this.maxRange) {\n let [from, to] = this._getParsed(this.fromSlider.nativeElement, this.toSlider.nativeElement);\n from = this._roundToStep(from);\n to = this._roundToStep(to);\n\n if ((to - from) > this.maxRange) {\n to = from + this.maxRange;\n }\n\n this._fillSlider();\n\n if (from <= to) {\n this.toValue = to;\n } else {\n this.toValue = from;\n }\n\n this.toSlider.nativeElement.value = this.toValue.toString();\n }\n\n if (from >= to) {\n this.fromValue = to;\n } else {\n this.fromValue = from;\n }\n\n this.fromSlider.nativeElement.value = this.fromValue.toString();\n this._notifyValueChange();\n }\n\n public controlToSlider(): void {\n let [from, to] = this._getParsed(this.fromSlider.nativeElement, this.toSlider.nativeElement);\n from = this._roundToStep(from);\n to = this._roundToStep(to);\n\n if ((to - from) > this.maxRange) {\n to = from + this.maxRange;\n }\n\n this._fillSlider();\n this._setToggleAccessible();\n\n if ((to - from) === this.maxRange) {\n let [from, to] = this._getParsed(this.fromSlider.nativeElement, this.toSlider.nativeElement);\n from = this._roundToStep(from);\n to = this._roundToStep(to);\n\n if ((to - from) > this.maxRange) {\n from = to - this.maxRange;\n }\n\n this._fillSlider();\n\n if (from >= to) {\n this.fromValue = to;\n } else {\n this.fromValue = from;\n }\n\n this.fromSlider.nativeElement.value = this.fromValue.toString();\n }\n\n if (from <= to) {\n this.toValue = to;\n } else {\n this.toValue = from;\n }\n\n this.toSlider.nativeElement.value = this.toValue.toString();\n this._notifyValueChange();\n }\n\n private _getParsed(currentFrom: HTMLInputElement, currentTo: HTMLInputElement): [number, number] {\n const from: number = parseInt(currentFrom.value, 10);\n const to: number = parseInt(currentTo.value, 10);\n return [from, to];\n }\n\n private _fillSlider(): void {\n const fromSliderEl: HTMLInputElement = (this.fromSlider.nativeElement as HTMLInputElement);\n const toSliderEl: HTMLInputElement = (this.toSlider.nativeElement as HTMLInputElement);\n const rangeDistance: number = Number(toSliderEl.max) - Number(toSliderEl.min);\n const fromPosition: number = (this.fromValue - Number(fromSliderEl.min));\n const toPosition: number = (this.toValue - Number(toSliderEl.min));\n const sliderColor: string = '#e0e1e2';\n const rangeColor: string = '#f1a0a6';\n\n toSliderEl.style.background = `linear-gradient(\n to right,\n ${sliderColor} 0%,\n ${sliderColor} ${(fromPosition) / (rangeDistance) * 100}%,\n ${rangeColor} ${((fromPosition) / (rangeDistance)) * 100}%,\n ${rangeColor} ${(toPosition) / (rangeDistance) * 100}%,\n ${sliderColor} ${(toPosition) / (rangeDistance) * 100}%,\n ${sliderColor} 100%)`;\n }\n\n private _setToggleAccessible(): void {\n const fromInput = (this.fromSlider.nativeElement as HTMLInputElement);\n const toInput = (this.toSlider.nativeElement as HTMLInputElement);\n\n const fromValue = parseInt(fromInput.value, 10);\n const toValue = parseInt(toInput.value, 10);\n\n if (fromValue <= parseInt(fromInput.min, 10) && toValue <= parseInt(toInput.min, 10)) {\n // Ambos estão no mínimo\n fromInput.style.zIndex = '1';\n toInput.style.zIndex = '2';\n } else if (fromValue >= parseInt(fromInput.max, 10) && toValue >= parseInt(toInput.max, 10)) {\n // Ambos estão no máximo\n fromInput.style.zIndex = '2';\n toInput.style.zIndex = '1';\n } else {\n // Caso geral\n fromInput.style.zIndex = '2';\n toInput.style.zIndex = '1';\n }\n }\n\n private _roundToStep(value: number): number {\n return Math.round(value / this.step) * this.step;\n }\n\n private _notifyValueChange(): void {\n this.onChange({ from: this.fromValue, to: this.toValue });\n }\n\n public onBlur(): void {\n this.onTouched();\n }\n\n}\n","import { CdkStepperModule } from '@angular/cdk/stepper';\nimport { CommonModule } from '@angular/common';\nimport { Injector, NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialogModule, MatRippleModule } from '@angular/material';\nimport { RouterModule } from '@angular/router';\nimport { MdePopoverModule } from '@material-extended/mde';\nimport { MentionModule } from 'angular-mentions';\nimport { NgxCurrencyModule } from 'ngx-currency';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';\nimport { MAT_DATE_FORMATS } from './gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats';\n\nimport { MaterialModule } from './material.module';\n\nimport { ButtonComponent } from './components/button/button.component';\nimport { CardComponent } from './components/card/card.component';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { IconComponent } from './components/icon/icon.component';\nimport { InputCurrencyComponent } from './components/input-currency/input-currency.component';\nimport { InputFileComponent } from './components/input-file/input-file.component';\nimport { InputComponent } from './components/input/input.component';\nimport { LoadingOverlayComponent } from './components/loading-overlay/loading-overlay.component';\nimport { LoadingComponent } from './components/loading/loading.component';\nimport { OverlayPanelComponent } from './components/overlay-panel/overlay-panel.component';\nimport { PopoverComponent } from './components/popover/popover.component';\nimport { RadioGroupEntityComponent } from './components/radio-group-entity/radio-group-entity.component';\nimport { RadioGroupEnumComponent } from './components/radio-group-enum/radio-group-enum.component';\nimport { SelectButtonComponent } from './components/select-button/select-button.component';\nimport { SelectEntityPagedComponent } from './components/select-entity-paged/select-entity-paged.component';\nimport { SelectButtonAddComponent } from './components/select-entity-paged/shared/select-button-add/select-button-add.component';\nimport { SelectButtonNextBatchComponent } from './components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component';\nimport { SelectNoEntriesFoundDirective } from './components/select-entity-paged/shared/select-no-entries-found.directive';\nimport { SelectSearchClearDirective } from './components/select-entity-paged/shared/select-search-clear.directive';\nimport { SelectSearchComponent } from './components/select-entity-paged/shared/select-search/select-search.component';\nimport { SelectEntityComponent } from './components/select-entity/select-entity.component';\nimport { SelectEnumComponent } from './components/select-enum/select-enum.component';\nimport { SelectMonthPeriodComponent } from './components/select-month-period/select-month-period.component';\nimport { SlideToggleComponent } from './components/slide-toggle/slide-toggle.component';\nimport { StepperComponent } from './components/stepper/stepper.component';\nimport { TabGroupComponent } from './components/tab-group/tab-group.component';\nimport { TabComponent } from './components/tab/tab.component';\nimport { TableScrolledComponent } from './components/table-scrolled/table-scrolled.component';\nimport { TableComponent } from './components/table/table.component';\nimport { TextareaComponent } from './components/textarea/textarea.component';\nimport { DynamicTabDirective } from './directives/dynamic-tab.directive';\nimport { ItssTemplate } from './directives/generic-template.directive';\nimport { InputSelectInfiniteScrollDirective } from './directives/input-select-infinite-scroll.directive';\nimport { LowerCaseDirective } from './directives/lower-case.directive';\nimport { PhoneMaskDirective } from './directives/phone-mask.directive';\nimport { SpaceDropDirective } from './directives/space-drop.directive';\nimport { UpperCaseDirective } from './directives/upper-case.directive';\n\nimport { GIPI_BREAKPOINTS, GIPI_CUSTOM_BREAKPOINTS_PROVIDER } from '../core/custom-breakpoints';\n\n// New components\nimport { GIPIFileDragAndDropDirective } from './gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive';\nimport { GIPIInfiniteScrollDirective } from './gipi-components/infinite-scroll/infinite-scroll.directive';\nimport { GIPIColDirective } from './gipi-components/layout-grid/col.directive';\nimport { GIPIRowDirective, } from './gipi-components/layout-grid/row.directive';\nimport { GIPIPaginationControlsDirective } from './gipi-components/table/components/table-pagination/shared/pagination-controls.directive';\nimport { GIPITemplateDirective } from './gipi-components/template/template.directive';\n\nimport { GIPIPaginatePipe } from './gipi-components/table/components/table-pagination/shared/paginate.pipe';\n\nimport { GIPIBreakpointService } from './gipi-components/layout-grid/services/breakpoint.service';\nimport { GIPIResizeService } from './gipi-components/layout-grid/services/resize.service';\nimport { GIPIOverlayService } from './gipi-components/overlay/shared/overlay-service';\nimport { GIPIPaginationService } from './gipi-components/table/components/table-pagination/shared/pagination.service';\n\nimport { GIPIAbstractFormComponent } from './gipi-components/abstract-form/abstract-form.component';\nimport { GIPIActionRowComponent } from './gipi-components/action-row/action-row.component';\nimport { GIPIBadgeComponent } from './gipi-components/badge/badge.component';\nimport { GIPIButtonComponent } from './gipi-components/button/button.component';\nimport { GIPIChipsComponent } from './gipi-components/chips/chips.component';\nimport { GIPIConfirmationDialogComponent } from './gipi-components/confirmation-dialog/confirmation-dialog.component';\nimport { GIPIDropdownMenuComponent } from './gipi-components/dropdown-menu/dropdown-menu.component';\nimport { GIPIExpansionPanelComponent } from './gipi-components/expansion-panel/expansion-panel.component';\nimport { GIPIFileDragAndDropComponent } from './gipi-components/file-drag-and-drop/file-drag-and-drop.component';\nimport { GIPIFooterComponent } from './gipi-components/footer/footer.component';\nimport { GIPIFormFieldComponent } from './gipi-components/form-field/form-field.component';\nimport { GIPIHelpfulTipComponent } from './gipi-components/helpful-tip/helpful-tip.component';\nimport { GIPIInputCheckboxComponent } from './gipi-components/input-checkbox/input-checkbox.component';\nimport { GIPIInputCurrencyComponent } from './gipi-components/input-currency/input-currency.component';\nimport { GIPIInputMonthPickerComponent } from './gipi-components/input-monthpicker/input-monthpicker.component';\nimport { GIPIInputSelectEnumComponent } from './gipi-components/input-select-enum/input-select-enum.component';\nimport { GIPIInputSelectListboxComponent } from './gipi-components/input-select-listbox/input-select-listbox.component';\nimport { GIPIInputSearchComponent } from './gipi-components/input-select-paged/input-search/input-search.component';\nimport { GIPIInputSelectPagedComponent } from './gipi-components/input-select-paged/input-select-paged.component';\nimport { GIPIInputSelectRadioComponent } from './gipi-components/input-select-radio/input-select-radio.component';\nimport { GIPIInputSelectComponent } from './gipi-components/input-select/input-select.component';\nimport { GIPINotificationComponent } from './gipi-components/notification/notification.component';\nimport { GIPINoveltiesComponent } from './gipi-components/novelties/novelties.component';\nimport { GIPIOverlayComponent } from './gipi-components/overlay/overlay.component';\nimport { GIPIPasswordRequerimentsComponent } from './gipi-components/password-requeriments/password-requeriments.component';\nimport { GIPIPopoverComponent } from './gipi-components/popover/popover.component';\nimport { GIPIPopoverTarget } from './gipi-components/popover/shared/popover-target';\nimport { GIPIPopoverTrigger } from './gipi-components/popover/shared/popover-trigger';\nimport { GIPIRadioGroupComponent } from './gipi-components/radio-group/radio-group.component';\nimport { GIPISelectButtonComponent } from './gipi-components/select-button/select-button.component';\nimport { GIPISelectComponent } from './gipi-components/select/select.component';\nimport { GIPISidenavContainerComponent } from './gipi-components/sidebar/container/container.component';\nimport { GIPISidenavComponent } from './gipi-components/sidebar/sidenav/sidenav.component';\nimport { GIPIStepperComponent } from './gipi-components/stepper/stepper.component';\nimport { GIPITableBodyComponent } from './gipi-components/table/components/table-body/table-body.component';\nimport { GIPITableFooterComponent } from './gipi-components/table/components/table-footer/table-footer.component';\nimport { GIPITableHeaderComponent } from './gipi-components/table/components/table-header/table-header.component';\nimport { GIPITablePaginationComponent } from './gipi-components/table/components/table-pagination/table-pagination.component';\nimport { GIPITableProgressBarComponent } from './gipi-components/table/components/table-progress-bar/table-progress-bar.component';\nimport { GIPITableComponent } from './gipi-components/table/table.component';\nimport { GIPIToolbarComponent } from './gipi-components/toolbar/toolbar.component';\nimport { GIPITopNavComponent } from './gipi-components/top-nav/top-nav.component';\nimport { GIPIUserProfileComponent } from './gipi-components/user-profile/user-profile.component';\n\nimport { DatepickerModule } from './gipi-components/datepicker/datepicker.module';\nimport { DateAdapter, MAT_DATE_LOCALE } from './gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter';\nimport { NativeDateAdapter } from './gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter';\nimport { MonthYearPickerModule } from './gipi-components/month-year-picker/mont-year-picker.module';\nimport { GIPIRangePageComponent } from './gipi-components/range-page/range-page.component';\nimport { GIPIRangeSliderComponent } from './gipi-components/range-slider/range-slider.component';\n\nexport let INJECTOR: Injector;\n\nconst GIPIComponents: any[] = [\n GIPITopNavComponent,\n GIPIFooterComponent,\n GIPIButtonComponent,\n GIPISidenavContainerComponent,\n GIPISidenavComponent,\n GIPIOverlayComponent,\n GIPIToolbarComponent,\n GIPISelectButtonComponent,\n GIPIUserProfileComponent,\n GIPISelectComponent,\n GIPINotificationComponent,\n GIPINoveltiesComponent,\n GIPIPopoverComponent,\n GIPIPopoverTrigger,\n GIPIPopoverTarget,\n GIPIActionRowComponent,\n GIPIAbstractFormComponent,\n GIPIStepperComponent,\n GIPIFileDragAndDropComponent,\n GIPIConfirmationDialogComponent,\n GIPIInputMonthPickerComponent,\n GIPIRadioGroupComponent,\n GIPIInputSelectRadioComponent,\n GIPIInputSelectListboxComponent,\n GIPIInputSelectComponent,\n GIPIFormFieldComponent,\n GIPIInputCheckboxComponent,\n GIPIChipsComponent,\n GIPIInputCurrencyComponent,\n GIPIInputSearchComponent,\n GIPIInputSelectPagedComponent,\n GIPIInputSelectEnumComponent,\n GIPIDropdownMenuComponent,\n GIPIExpansionPanelComponent,\n GIPIPasswordRequerimentsComponent,\n GIPIHelpfulTipComponent,\n GIPIBadgeComponent,\n GIPIRangeSliderComponent,\n GIPIRangePageComponent,\n\n // Table\n GIPITableHeaderComponent,\n GIPITableBodyComponent,\n GIPITableFooterComponent,\n GIPITablePaginationComponent,\n GIPITableProgressBarComponent,\n GIPITableComponent,\n];\n\nconst GIPIDirectives: any[] = [\n GIPITemplateDirective,\n GIPIColDirective,\n GIPIRowDirective,\n GIPIFileDragAndDropDirective,\n GIPIInfiniteScrollDirective,\n GIPIPaginationControlsDirective,\n];\n\nconst GIPIPipes: any[] = [\n GIPIPaginatePipe,\n];\n\nconst GIPIServices: any[] = [\n GIPIOverlayService,\n GIPIBreakpointService,\n GIPIResizeService,\n GIPIPaginationService,\n];\n\n@NgModule({\n declarations: [\n GIPIComponents,\n GIPIDirectives,\n GIPIPipes,\n LoadingComponent,\n LoadingOverlayComponent,\n ButtonComponent,\n InputComponent,\n SelectEntityComponent,\n SelectEnumComponent,\n TableComponent,\n CardComponent,\n CheckboxComponent,\n RadioGroupEntityComponent,\n RadioGroupEnumComponent,\n SlideToggleComponent,\n TabGroupComponent,\n TabComponent,\n DynamicTabDirective,\n IconComponent,\n StepperComponent,\n TextareaComponent,\n InputCurrencyComponent,\n InputFileComponent,\n PopoverComponent,\n PhoneMaskDirective,\n UpperCaseDirective,\n LowerCaseDirective,\n SpaceDropDirective,\n OverlayPanelComponent,\n ItssTemplate,\n SelectButtonComponent,\n SelectMonthPeriodComponent,\n InputSelectInfiniteScrollDirective,\n TableScrolledComponent,\n SelectSearchComponent,\n SelectEntityPagedComponent,\n SelectNoEntriesFoundDirective,\n SelectSearchClearDirective,\n SelectButtonAddComponent,\n SelectButtonNextBatchComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n MaterialModule,\n FlexLayoutModule.withConfig({ disableDefaultBps: true }, GIPI_BREAKPOINTS),\n NgxMaskModule.forChild(),\n NgxCurrencyModule,\n NgxMaterialTimepickerModule,\n MdePopoverModule,\n InfiniteScrollModule,\n MentionModule,\n\n DatepickerModule,\n MonthYearPickerModule,\n ],\n exports: [\n GIPIComponents,\n GIPIDirectives,\n GIPIPipes,\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n CdkStepperModule,\n MatRippleModule,\n MatDialogModule,\n InfiniteScrollModule,\n LoadingComponent,\n LoadingOverlayComponent,\n ButtonComponent,\n InputComponent,\n SelectEntityComponent,\n SelectEnumComponent,\n TableComponent,\n CardComponent,\n CheckboxComponent,\n RadioGroupEntityComponent,\n RadioGroupEnumComponent,\n SlideToggleComponent,\n TabGroupComponent,\n TabComponent,\n IconComponent,\n StepperComponent,\n TextareaComponent,\n InputCurrencyComponent,\n InputFileComponent,\n PopoverComponent,\n MentionModule,\n OverlayPanelComponent,\n ItssTemplate,\n SelectButtonComponent,\n SelectMonthPeriodComponent,\n InputSelectInfiniteScrollDirective,\n TableScrolledComponent,\n SelectSearchComponent,\n SelectEntityPagedComponent,\n SelectNoEntriesFoundDirective,\n SelectSearchClearDirective,\n SelectButtonAddComponent,\n SelectButtonNextBatchComponent,\n\n DatepickerModule,\n MonthYearPickerModule,\n ],\n entryComponents: [\n GIPIConfirmationDialogComponent,\n TabGroupComponent,\n TabComponent,\n PopoverComponent,\n ],\n providers: [\n GIPIServices,\n GIPI_CUSTOM_BREAKPOINTS_PROVIDER,\n {\n provide: DateAdapter,\n useClass: NativeDateAdapter,\n deps: [MAT_DATE_LOCALE]\n },\n {\n provide: MAT_DATE_LOCALE,\n useValue: 'pt-BR',\n },\n {\n provide: MAT_DATE_FORMATS,\n useValue: {\n parse: {\n dateInput: 'DD/MM/YYYY',\n },\n display: {\n dateInput: 'DD/MM/YYYY',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n },\n },\n ]\n})\nexport class SharedModule {\n constructor(private _injector: Injector) {\n INJECTOR = this._injector;\n }\n}\n","import {AbstractDTO} from './abstract.dto';\n\nexport class PageDTO<U> extends AbstractDTO {\n\n content: U[];\n\n number: number;\n\n totalElements: number;\n\n totalPages: number;\n\n constructor() {\n super();\n this.content = [];\n this.number = 0;\n }\n\n}\n","import {AbstractDTO} from './abstract.dto';\nimport {SortDirectionEnum} from '../enums/sort-direction.enum';\n\nexport class SortDTO extends AbstractDTO {\n\n field: string;\n\n direction: SortDirectionEnum;\n\n constructor(field: string, direction: SortDirectionEnum) {\n super();\n this.field = field;\n this.direction = direction;\n }\n\n}\n","export enum LocalTimeEnum {\n FULL = 'FULL',\n SHORT = 'SHORT',\n}\n\nexport type LocalTimeType = 'FULL' | 'SHORT';\n","import { OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { INJECTOR } from '../../shared/shared.module';\nimport { APP_MESSAGES } from '../app.messages';\nimport { AbstractModel } from '../models/abstract.model';\nimport { FilterDTO } from '../models/dto/filter.dto';\nimport { PageDTO } from '../models/dto/page.dto';\nimport { SortDTO } from '../models/dto/sort.dto';\nimport { TableColumnDTO } from '../models/dto/table-column.dto';\nimport { TablePageEventDTO } from '../models/dto/table-page-event.dto';\nimport { SortDirectionEnum } from '../models/enums/sort-direction.enum';\nimport { AbstractCrudService } from '../services/abstract-crud.service';\nimport { ConfirmationService } from '../services/confirmation.service';\nimport { MessageService } from '../services/message.service';\nimport { ObjectUtil } from '../utils/object.util';\nimport { StringUtil } from '../utils/string.util';\nimport { AbstractComponent } from './abstract.component';\n\nexport abstract class AbstractFindComponent<T extends AbstractModel, F extends FilterDTO> extends AbstractComponent implements OnInit {\n\n filter: F;\n\n page: PageDTO<T>;\n\n columns: TableColumnDTO[];\n\n tablePageEventDTO: TablePageEventDTO;\n\n constructor(\n protected service: AbstractCrudService<T, F>,\n protected messageService: MessageService,\n protected confirmationService: ConfirmationService,\n protected router: Router,\n protected activatedRoute: ActivatedRoute,\n ) {\n super(messageService, router, activatedRoute);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.service.returnPath = this.getPath();\n this.page = this.newPage();\n this.filter = this.newFilterDTO();\n this.getFilterDTOSessionStorage();\n this.columns = this.createTableColumns();\n }\n\n new(): void {\n this.router.navigateByUrl(this.getPath(), { skipLocationChange: true }).then(\n () => this.router.navigate([this.getPath(), 'new'])\n );\n }\n\n edit(entity: T): void {\n this.router.navigateByUrl(this.getPath(), { skipLocationChange: true }).then(\n () => this.router.navigate([this.getPath(), 'edit', entity.id])\n );\n }\n\n view(entity: T): void {\n this.router.navigateByUrl(this.getPath(), { skipLocationChange: true }).then(\n () => this.router.navigate([this.getPath(), 'view', entity.id])\n );\n }\n\n delete(entity: T, filter?: boolean): void {\n this.confirmationService.confirm({\n title: 'Confirmação',\n message: INJECTOR.get(APP_MESSAGES).DELETE_CONFIRMATION,\n accept: () => {\n try {\n this.loading = true;\n this.loadingChange.emit(this.loading);\n this.page = this.newPage();\n this.preDelete();\n this.service.delete(entity.id).subscribe(() => {\n if (filter) {\n this.find();\n } else {\n this.new();\n this.loading = false;\n this.loadingChange.emit(this.loading);\n }\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n if (this.isFinding()) {\n this.clear();\n }\n this.handleError(error);\n });\n } catch (e) {\n this.handleError(e);\n }\n }\n });\n }\n\n deleteAll(entityList: T[], filter?: boolean): void {\n this.confirmationService.confirm({\n title: 'Confirmação',\n message: INJECTOR.get(APP_MESSAGES).DELETE_ALL_CONFIRMATION,\n accept: () => {\n try {\n this.loading = true;\n this.loadingChange.emit(this.loading);\n this.page = this.newPage();\n this.preDelete();\n this.service.deleteAll(entityList).subscribe(() => {\n if (filter) {\n this.find();\n } else {\n this.new();\n this.loading = false;\n this.loadingChange.emit(this.loading);\n }\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n if (this.isFinding()) {\n this.clear();\n }\n this.handleError(error);\n });\n } catch (e) {\n this.handleError(e);\n }\n }\n });\n }\n\n updateStatus(entity: T, enabled: boolean): void {\n this.confirmationService.confirm({\n title: 'Confirmação',\n message: `Deseja realmente ${enabled ? 'ativar' : 'inativar'} este registro?`,\n accept: () => {\n try {\n this.loading = true;\n this.loadingChange.emit(this.loading);\n this.service.save(entity).subscribe(() => {\n this.clear();\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n this.clear();\n this.handleError(error);\n });\n } catch (e) {\n this.handleError(e);\n }\n },\n cancel: () => this.clear()\n });\n }\n\n preDelete(): void {\n }\n\n clear(): void {\n this.page = this.newPage();\n this.filter = this.newFilterDTO();\n this.find();\n }\n\n protected getPath(): string {\n return `${this.activatedRoute.snapshot.parent.parent.url[0].path}/${this.activatedRoute.snapshot.parent.url[0].path}`;\n }\n\n protected newPage(): PageDTO<T> {\n return new PageDTO<T>();\n }\n\n protected newFilterDTO(): F {\n return null;\n }\n\n protected getFilterDTOSessionStorage(): Promise<void> {\n return Promise.resolve();\n }\n\n protected createTableColumns(): TableColumnDTO[] {\n return [];\n }\n\n protected createSorts(): SortDTO[] {\n return [];\n }\n\n find(pageEvent?: any): void {\n this.loading = true;\n this.loadingChange.emit(this.loading);\n this.page = this.newPage();\n if (ObjectUtil.isNull(this.filter)) {\n this.filter = this.newFilterDTO();\n }\n\n if (ObjectUtil.isNull(pageEvent) && !ObjectUtil.isNull(this.tablePageEventDTO)) {\n pageEvent = this.tablePageEventDTO;\n }\n\n if (pageEvent) {\n this.tablePageEventDTO = pageEvent;\n this.filter.pageNumber = pageEvent.pageIndex;\n this.filter.pageSize = pageEvent.pageSize;\n this.filter.offset = pageEvent.pageIndex * pageEvent.pageSize;\n if (pageEvent.sort) {\n this.filter.sorts = [new SortDTO(\n pageEvent.sort.active,\n StringUtil.isEmpty(pageEvent.sort.direction) ? SortDirectionEnum.DESC : pageEvent.sort.direction.toUpperCase()\n )];\n }\n } else {\n this.filter.pageNumber = 0;\n this.filter.offset = 0;\n this.filter.pageSize = 10;\n }\n this.service.find(this.filter).subscribe(page => {\n this.page = page;\n this.loading = false;\n this.loadingChange.emit(this.loading);\n }, error => this.handleError(error));\n }\n\n isFinding(): boolean {\n return this.router.url.split('/').filter(path => path === 'new' || path === 'edit').length === 0;\n }\n\n isViewing(): boolean {\n return this.router.url.split('/').filter(path => path === 'view').length > 0;\n }\n\n isCreating(): boolean {\n return this.router.url.split('/').filter(path => path === 'new').length > 0;\n }\n\n}\n","import { EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { INJECTOR } from '../../shared/shared.module';\nimport { APP_MESSAGES } from '../app.messages';\nimport { AbstractModel } from '../models/abstract.model';\nimport { FilterDTO } from '../models/dto/filter.dto';\nimport { AbstractCrudService } from '../services/abstract-crud.service';\nimport { ConfirmationService } from '../services/confirmation.service';\nimport { MessageService } from '../services/message.service';\nimport { AbstractFindComponent } from './abstract-find.component';\n\nexport abstract class AbstractCrudComponent<T extends AbstractModel, F extends FilterDTO> extends AbstractFindComponent<T, F> implements OnInit {\n\n entityValue: T;\n @Output() entityChange: EventEmitter<T> = new EventEmitter<T>(true);\n @Input() get entity(): T {\n return this.entityValue;\n }\n set entity(entity: T) {\n this.entityValue = entity;\n this.entityChange.emit(this.entityValue);\n }\n\n constructor(\n protected service: AbstractCrudService<T, F>,\n protected messageService: MessageService,\n protected confirmationService: ConfirmationService,\n protected router: Router,\n protected activatedRoute: ActivatedRoute\n ) {\n super(service, messageService, confirmationService, router, activatedRoute);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.entity = this.newEntity();\n this.initializeForm();\n }\n\n save(edit?: boolean, filter?: boolean): void {\n try {\n this.loading = true;\n this.loadingChange.emit(this.loading);\n if (filter) {\n this.page = this.newPage();\n }\n this.preSave();\n this.service.save(this.entity).subscribe(entity => {\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n if (edit) {\n this.edit(entity);\n } else if (filter) {\n this.find();\n } else {\n this.router.navigateByUrl(this.getPath(), { skipLocationChange: true }).then(() => this.router.navigate([this.getPath()]));\n }\n }, error => this.handleError(error));\n } catch (e) {\n this.handleError(e);\n }\n }\n\n preSave(): void { }\n\n return(): void {\n if (this.isViewing()) {\n this.router.navigateByUrl(this.service.returnPath, { skipLocationChange: true })\n .then(() => this.router.navigate([this.service.returnPath]));\n } else {\n this.confirmationService.confirm({\n title: 'Confirmação',\n message: INJECTOR.get(APP_MESSAGES).RETURN_CONFIRMATION,\n accept: () => this.router.navigateByUrl(this.service.returnPath, { skipLocationChange: true })\n .then(() => this.router.navigate([this.service.returnPath]))\n });\n }\n }\n\n protected abstract newEntity(): T;\n\n protected initializeForm(): void {\n this.loading = true;\n this.loadingChange.emit(this.loading);\n const id: number | string = this.activatedRoute.snapshot.params.id;\n if (id) {\n this.service.getOne(id).subscribe(entity => {\n this.entity = entity;\n this.afterInitializeForm();\n this.loading = false;\n this.loadingChange.emit(this.loading);\n }, error => this.handleError(error));\n } else {\n this.entity = this.newEntity();\n this.loading = false;\n this.loadingChange.emit(this.loading);\n }\n }\n\n public afterInitializeForm(): void { }\n\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport * as moment_ from 'moment';\nconst moment = moment_;\n\nimport { BaseUser } from '../models/base-user.model';\nimport { TokenDTO } from '../models/dto/token.dto';\nimport { ObjectUtil } from '../utils/object.util';\nimport { AbstractService } from './abstract.service';\nimport { StringUtil } from '../utils/string.util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService<U extends BaseUser> extends AbstractService {\n\n protected tokenSubject: BehaviorSubject<TokenDTO<U>>;\n\n token: Observable<TokenDTO<U>>;\n\n constructor(protected router: Router, protected http: HttpClient) {\n super();\n this.tokenSubject = new BehaviorSubject<TokenDTO<U>>(JSON.parse(localStorage.getItem('token')));\n this.token = this.tokenSubject.asObservable();\n }\n\n login(user: U): Observable<TokenDTO<U>> {\n const body: HttpParams = new HttpParams()\n .set('grant_type', 'password')\n .set('username', user.username)\n .set('password', user.password);\n\n return this.http.post<TokenDTO<U>>('api/authenticator/oauth/token', body, this.options()).pipe(\n map(accessToken => this.setCurrentUser(accessToken))\n );\n }\n\n async logout(): Promise<void> {\n await this.revokeToken().toPromise().then(() => {\n this.removeToken();\n this.router.navigate(['/oauth/login'], { queryParams: { returnUrl: this.router.routerState.snapshot.url } });\n });\n }\n\n removeToken(): void {\n localStorage.removeItem('token');\n this.tokenSubject.next(null);\n }\n\n refreshToken(additionalParams?: Map<any, any>): Observable<TokenDTO<U>> {\n let body: HttpParams = new HttpParams()\n .set('grant_type', 'refresh_token')\n .set('refresh_token', this.tokenValue.refreshToken);\n\n if (!ObjectUtil.isNull(additionalParams)) {\n additionalParams.forEach((value, key) => body = body.append(key, value));\n }\n\n return this.http.post<TokenDTO<U>>('api/authenticator/oauth/token', body, this.options(this.buildParams(), this.buildHeaders().append('skip', 'true'))).pipe(\n map(accessToken => this.setCurrentUser(accessToken))\n );\n }\n\n revokeToken(token?: TokenDTO<U>): Observable<any> {\n let lHttpHeaders: HttpHeaders = null;\n if (!ObjectUtil.isNull(token)) {\n lHttpHeaders = new HttpHeaders()\n .append('Authorization', token.accessToken)\n .append('skip', 'true');\n }\n return this.http.post('api/authenticator/oauth/token/revoke', {}, this.options(null, lHttpHeaders));\n }\n\n isValidToken(token: TokenDTO<U>): boolean {\n if (!ObjectUtil.isNull(token) && !ObjectUtil.isNull(token.expiration)) {\n return new Date(token.expiration).valueOf() > new Date().valueOf();\n }\n return false;\n }\n\n protected setCurrentUser(token: TokenDTO<U>): TokenDTO<U> {\n if (token && token.accessToken) {\n localStorage.setItem('token', JSON.stringify(token));\n this.tokenSubject.next(token);\n }\n return token;\n }\n\n get tokenValue(): TokenDTO<U> {\n return this.tokenSubject.value;\n }\n\n get tokenValueLocalStorage(): TokenDTO<U> {\n const token: string = localStorage.getItem('token');\n return !StringUtil.isEmpty(token) ? JSON.parse(token) : null;\n }\n\n protected buildHeaders(): HttpHeaders {\n return new HttpHeaders()\n .append('Authorization', 'Basic ' + btoa('CONVENANT_MANAGEMENT:123'))\n .append('Content-Type', 'application/x-www-form-urlencoded')\n .append('accessType', 'WEB')\n .append('timeZone', moment(new Date()).format('ZZ'));\n }\n\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { BaseUser } from '../models/base-user.model';\nimport { TokenDTO } from '../models/dto/token.dto';\nimport { AuthenticationService } from '../services/authentication.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n constructor(private authenticationService: AuthenticationService<BaseUser>) {\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const token: TokenDTO<BaseUser> = this.authenticationService.tokenValue;\n\n if (token && token.accessToken && !request.headers.get('skip')) {\n request = request.clone({\n setHeaders: {\n Authorization: `Bearer ${token.accessToken}`\n }\n });\n }\n\n return next.handle(request);\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable, Injector, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ApiErrorDTO } from '../models/dto/api-error.dto';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ArrayUtil } from '../utils/array.util';\nimport { ObjectUtil } from '../utils/object.util';\n\n@Injectable()\nexport class ErrorInterceptor implements HttpInterceptor {\n\n private _router: Router;\n\n constructor(private _injector: Injector) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(\n catchError(async (err: any) => {\n this._router = this._injector.get(Router);\n let error: any = null;\n\n if (err instanceof HttpErrorResponse && err.error instanceof Blob && err.error.type === 'application/json') {\n\n await this.blobToJson(err).then(httpErrorResponse => {\n if ((!ObjectUtil.isNull(httpErrorResponse)) && (httpErrorResponse instanceof HttpErrorResponse)) {\n error = httpErrorResponse;\n }\n });\n\n } else if (err instanceof HttpErrorResponse) {\n error = err;\n }\n\n return await (await this.validateErrors(error)).toPromise().then(e => e);\n })\n ) as Observable<HttpEvent<any>>;\n }\n\n private async validateErrors(err: any): Promise<Observable<never>> {\n return new Promise((resolve, reject) => {\n let error: any = err.error.message || err.statusText;\n const apiError: ApiErrorDTO = err.error.apierror as ApiErrorDTO;\n\n if (!ObjectUtil.isNull(apiError)) {\n if ((apiError.status === 'INTERNAL_SERVER_ERROR')\n && (apiError.debugMessage && apiError.debugMessage.toUpperCase().includes('QUERY DID NOT RETURN A UNIQUE RESULT'))) {\n error = 'A consulta não retornou resultado único';\n } else if ((apiError.status === 'INTERNAL_SERVER_ERROR')\n && (apiError.message && apiError.message.toUpperCase().includes('NENHUM REGISTRO FOI ENCONTRADO'))) {\n error = 'Nenhum registro foi encontrado';\n } else if ((apiError.status === 'INTERNAL_SERVER_ERROR')\n && (apiError.message && apiError.message.toUpperCase().includes('OCORREU UM PROBLEMA INESPERADO'))) {\n error = 'Ocorreu um problema inesperado';\n } else if (apiError.status === 'FORBIDDEN') {\n this._injector.get(NgZone).run(() => this._router.navigate(['/errors/403']));\n return;\n } else if (apiError.status === 'UNAUTHORIZED') {\n error = 'Sua sessão expirou';\n this._injector.get(AuthenticationService).logout();\n } else if (!ArrayUtil.isEmpty(apiError.subErrorList)) {\n error = apiError.subErrorList[0].rejectedMessage;\n } else {\n error = apiError.message;\n }\n } else if (!navigator.onLine) {\n error = 'Sem internet';\n } else if (err.status === 504) {\n this._injector.get(NgZone).run(() => this._router.navigate(['/errors/504']));\n return;\n }\n\n return resolve(throwError(error));\n });\n }\n\n private async blobToJson(err: any): Promise<HttpErrorResponse> {\n return new Promise((resolve, reject) => {\n try {\n let httpErrorResponse: HttpErrorResponse = null;\n const reader: FileReader = new FileReader();\n reader.onload = (e: Event) => {\n const errmsg = JSON.parse((<any>e.target).result);\n httpErrorResponse = new HttpErrorResponse({\n error: errmsg,\n headers: err.headers,\n status: err.status,\n statusText: err.statusText,\n url: err.url\n });\n resolve(httpErrorResponse);\n };\n reader.readAsText(err.error);\n } catch (e) {\n reject(null);\n throwError(e);\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material';\n\nimport { DialogDTO } from '../models/dto/dialog.dto';\nimport { AbstractService } from './abstract.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogService extends AbstractService {\n\n constructor(public dialog: MatDialog) {\n super();\n }\n\n open(dialog: DialogDTO): MatDialogRef<any> {\n return this.dialog.open(dialog.componentOrTemplateRef, {\n panelClass: dialog.panelClass,\n disableClose: dialog.disableClose,\n width: dialog.width,\n height: dialog.height,\n minWidth: dialog.minWidth,\n minHeight: dialog.minHeight,\n maxWidth: dialog.maxWidth,\n maxHeight: dialog.maxHeight,\n position: dialog.position,\n data: dialog.data,\n autoFocus: dialog.autoFocus,\n restoreFocus: dialog.restoreFocus,\n closeOnNavigation: dialog.closeOnNavigation,\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SvgRegisterService {\n\n constructor(\n private _matIconRegistry: MatIconRegistry,\n private _domSanitizer: DomSanitizer,\n ) { }\n\n /**\n * @param enumSvgs Enum de svgs: ex\n * export enum SvgIcons {\n * SVG_ONE: 'svg_one',\n * ...\n * }\n * @param path Path where the svg is located\n */\n public registerListSvgIcons(enumSvgs: any, path: string): void {\n const svgKeys: string[] = Object.values(enumSvgs);\n for (const svg of svgKeys) {\n this.registerSvgIcon(svg, path);\n }\n }\n\n /**\n * Enter only the svg name without the extension.\n * @param svgName Svg name without the extension\n * @param path Path where the svg is located\n */\n public registerSvgIcon(svgName: string, path: string): void {\n try {\n const svgUrl: SafeResourceUrl = this._domSanitizer.bypassSecurityTrustResourceUrl(`${path}/${svgName}.svg`);\n this._matIconRegistry.addSvgIcon(svgName, svgUrl);\n } catch (error) {\n throw new Error(error);\n }\n }\n\n}\n","import { LocalTimeType } from '../enums/local-time.enum';\nimport { GIPILocalTime } from '../types/local-time.type';\nimport { ObjectUtil } from './object.util';\nimport { StringUtil } from './string.util';\n\n/** @dynamic */\nexport class TimeUtil {\n\n public static TIME_FORMAT = 'HH:mm:ss';\n\n public static format(time: GIPILocalTime | Date, format: LocalTimeType | string, period: boolean = false): string {\n if (!ObjectUtil.isNull(time)) {\n let lTime: GIPILocalTime = null;\n if (time instanceof Date) {\n lTime = {\n hour: time.getHours(),\n minute: time.getMinutes(),\n second: time.getSeconds(),\n };\n } else {\n lTime = time;\n }\n\n let lFormat: string = this.TIME_FORMAT;\n if (format.trim().toUpperCase() === 'FULL') {\n lFormat = `HH:mm:ss${period ? ' AA' : ''}`;\n } else if (format.trim().toUpperCase() === 'SHORT') {\n lFormat = `HH:mm${period ? ' AA' : ''}`;\n } else if (!StringUtil.isEmpty(format.trim())) {\n lFormat = format.trim();\n }\n\n return this._formatDate(lTime, lFormat);\n }\n\n return StringUtil.EMPTY;\n }\n\n private static _formatDate(time: GIPILocalTime, format: string) {\n let Hour: number = time.hour;\n format = format.replace(/(^|[^\\\\])HH+/g, \"$1\" + this._padToAnyDigits(Hour));\n format = format.replace(/(^|[^\\\\])H/g, \"$1\" + Hour);\n\n let hour = (Hour > 12) ? (Hour - 12) : ((Hour === 0) ? 12 : Hour);\n format = format.replace(/(^|[^\\\\])hh+/g, \"$1\" + this._padToAnyDigits(hour));\n format = format.replace(/(^|[^\\\\])h/g, \"$1\" + hour);\n\n let minutes = time.minute;\n format = format.replace(/(^|[^\\\\])mm+/g, \"$1\" + this._padToAnyDigits(minutes));\n format = format.replace(/(^|[^\\\\])m/g, \"$1\" + minutes);\n\n let seconds = time.second;\n format = format.replace(/(^|[^\\\\])ss+/g, \"$1\" + this._padToAnyDigits(seconds));\n format = format.replace(/(^|[^\\\\])s/g, \"$1\" + seconds);\n\n let Period = Hour < 12 ? \"AM\" : \"PM\";\n format = format.replace(/(^|[^\\\\])AA+/g, \"$1\" + Period);\n format = format.replace(/(^|[^\\\\])A/g, \"$1\" + Period.charAt(0));\n\n let period = Period.toLowerCase();\n format = format.replace(/(^|[^\\\\])aa+/g, \"$1\" + period);\n format = format.replace(/(^|[^\\\\])a/g, \"$1\" + period.charAt(0));\n\n format = format.replace(/\\\\(.)/g, \"$1\");\n\n return format;\n }\n\n private static _padToAnyDigits(value: number, digits: number = 2) {\n return value.toString().padStart(digits, '0');\n }\n\n}\n","import { Pipe, PipeTransform, ɵstringify as stringify } from '@angular/core';\n\nimport { LocalTimeType } from '../enums/local-time.enum';\nimport { GIPILocalTime } from '../types/local-time.type';\nimport { TimeUtil } from '../utils/time.util';\n\n@Pipe({\n name: 'localtime'\n})\nexport class LocalTimePipe implements PipeTransform {\n\n transform(time: GIPILocalTime | Date, format: LocalTimeType | string, period: boolean = false): any {\n try {\n return TimeUtil.format(time, format, period);\n } catch (error) {\n throw new Error(`InvalidPipeArgument: '${LocalTimePipe}' for pipe '${stringify((error as Error).message)}'`);\n }\n }\n\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { OnDestroy } from '@angular/core';\nimport { Observable, Subject, throwError } from 'rxjs';\n\nimport { StringUtil } from '../../utils/string.util';\n\nexport class GIPIAbstractService implements OnDestroy {\n\n protected handleDestroy: Subject<void> = new Subject<void>();\n\n constructor(\n protected path: string,\n protected version: string,\n ) { }\n\n ngOnDestroy(): void {\n this.handleDestroy.next();\n this.handleDestroy.complete();\n }\n\n protected url(resource?: string, version?: string): string {\n let versionAux: string = '';\n if (!StringUtil.isEmpty(version)) {\n versionAux = `/${version.toLowerCase()}`;\n } else if (StringUtil.isEmpty(version) && !StringUtil.isEmpty(this.version)) {\n versionAux = `/${this.version.toLowerCase()}`;\n }\n\n let resourceAux: string = '';\n if (!StringUtil.isEmpty(resource)) {\n resourceAux = `/${resource}`;\n }\n\n return `api/${this.path}${versionAux}${resourceAux}`;\n }\n\n protected options(params?: HttpParams, headers?: HttpHeaders): { headers: HttpHeaders; params: HttpParams; } {\n return {\n headers: headers ? headers : this.buildHeaders(),\n params: params ? params : this.buildParams()\n };\n }\n\n protected buildHeaders(): HttpHeaders {\n return new HttpHeaders();\n }\n\n protected buildParams(): HttpParams {\n return new HttpParams();\n }\n\n protected handleMapper<T = void>(jsonObj: Object): (T extends void ? any : T) {\n return jsonObj as (T extends void ? any : T);\n }\n\n protected handleError<T = void>(error: string): Observable<(T extends void ? any : T)> {\n return throwError(error);\n }\n\n}\n","import { OnDestroy } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, takeUntil } from 'rxjs/operators';\n\nimport { ObjectUtil } from '../../utils/object.util';\nimport { StringUtil } from '../../utils/string.util';\nimport { UUIDUtil } from '../../utils/uuid.util';\nimport { GIPIAbstractFilterModel } from '../models/abstract-filter.model';\nimport { GIPIAbstractModel } from '../models/abstract.model';\nimport { GIPIPageModel } from '../models/page.model';\nimport { GIPISortModel } from '../models/sort.model';\nimport { GIPIUuid } from '../types/uuid.type';\nimport { GIPIAbstractService } from './abstract.service';\nimport { GIPIBaseService } from './base.service';\n\nexport abstract class GIPIAbstractCrudService<TEntity extends GIPIAbstractModel, TFilter extends GIPIAbstractFilterModel> extends GIPIAbstractService implements OnDestroy {\n\n constructor(\n protected path: string,\n protected version: string,\n protected baseService: GIPIBaseService,\n ) {\n super(path, version);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n /**\n * Refers to the save endpoint\n * @type POST\n * @path resource/version\n */\n public save<T = any>(entity: T, version?: string): Observable<T>;\n public save(entity: TEntity, version?: string): Observable<TEntity> {\n this.validate(entity);\n return this.baseService.httpClient.post(this.url('', version), entity, this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the save-all endpoint\n * @type POST\n * @path resource/version/save-all\n */\n public saveAll<T = any>(entities: T[], version?: string): Observable<T[]>;\n public saveAll(entities: TEntity[], version?: string): Observable<TEntity[]> {\n for (let i = 0; i < entities.length; i++) {\n this.validate(entities[i]);\n }\n\n return this.baseService.httpClient.post(this.url('save-all', version), entities, this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the delete endpoint\n * @type DELETE\n * @path resource/version/{id}\n */\n public delete<T = any>(id: number | string, version?: string): Observable<T>;\n public delete(id: number | string, version?: string): Observable<TEntity> {\n return this.baseService.httpClient.delete(this.url(`${id}`, version)).pipe(\n map(() => null),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the delete-all endpoint\n * @type POST\n * @path resource/version/delete-all\n */\n public deleteAll(idList: GIPIUuid[], version?: string): Observable<boolean> {\n for (let i = 0; i < idList.length; i++) {\n if (!UUIDUtil.isValid(idList[i])) {\n return of(false);\n }\n }\n\n return this.baseService.httpClient.post(this.url('delete-all', version), idList, this.options()).pipe(\n map(() => { return true; }),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the get-one endpoint\n * @type GET\n * @path resource/version/{id}\n */\n public getOne<T = any>(id: GIPIUuid, version?: string): Observable<T>;\n public getOne(id: GIPIUuid, version?: string): Observable<TEntity> {\n return this.baseService.httpClient.get(this.url(`${id}`, version), this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the find-all endpoint without the filters\n * @type GET\n * @path resource/version\n */\n public find<T = any>(version?: string): Observable<GIPIPageModel<T>>;\n public find(version?: string): Observable<GIPIPageModel<TEntity>> {\n return this.baseService.httpClient.get(this.url('', version), this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the find-all endpoint with filters\n * @type POST\n * @path resource/version/find-all\n */\n public findAll<F extends GIPIAbstractFilterModel = any, T = any>(filter?: F, version?: string): Observable<GIPIPageModel<T>>;\n public findAll(filter?: TFilter, version?: string): Observable<GIPIPageModel<TEntity>> {\n return this.baseService.httpClient.post(this.url('find-all', version), filter, this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the find-all-enabled endpoint\n * @type GET\n * @path resource/version/find-all-enabled\n */\n public findAllEnabled<T = any>(page: number, size: number, version?: string): Observable<GIPIPageModel<T>>;\n public findAllEnabled(page: number, size: number, version?: string): Observable<GIPIPageModel<TEntity>> {\n if ((!page) || (page && (page < 0))) {\n page = 0;\n }\n if ((!size) || (size && (size <= 0))) {\n size = 10;\n }\n return this.baseService.httpClient.get(this.url(`find-all-enabled?page=${page}&size=${size}`, version), this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the find-by-value endpoint\n * @type GET\n * @path resource/version/find-by-value\n */\n public findByValue<T = any>(value: string, page: number, size?: number, sort?: GIPISortModel, version?: string): Observable<GIPIPageModel<T>>;\n public findByValue(value: string, page: number, size?: number, sort?: GIPISortModel, version?: string): Observable<GIPIPageModel<TEntity>> {\n let lValue: string = value;\n if (value) {\n lValue = StringUtil.removeAccents(value).trim();\n } else {\n lValue = '';\n }\n if ((!page) || (page && (page < 0))) {\n page = 0;\n }\n if ((!size) || (size && (size <= 0))) {\n size = 10;\n }\n let lSort: string = '';\n if (!ObjectUtil.isNull(sort) && !StringUtil.isEmpty(sort.field)) {\n lSort = `&sort=${sort.field},${sort.direction}`;\n }\n\n return this.baseService.httpClient.get(this.url(`find-by-value?page=${page}&size=${size}${lSort}&value=${lValue}`, version), this.options()).pipe(\n map(this.handleMapper),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n );\n }\n\n /**\n * Refers to the enable-or-disable endpoint\n * @type PATCH\n * @path resource/version/enable-or-disable/{id}/{action}\n */\n public enableOrDisable(id: GIPIUuid, action: 'DISABLE' | 'ENABLE', version?: string): Observable<boolean> {\n if (!UUIDUtil.isValid(id)) {\n return of(false);\n }\n return this.baseService.httpClient.patch(this.url(`/enable-or-disable/${id}/${action}`, version), {}, this.options()).pipe(\n map(() => { return true; }),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n )\n }\n\n /**\n * Refers to the enable-or-disable-all endpoint\n * @type PATCH\n * @path resource/version/enable-or-disable-all/{action}\n */\n public enableOrDisableAll(idList: GIPIUuid[], action: 'DISABLE' | 'ENABLE', version?: string): Observable<boolean> {\n for (let i = 0; i < idList.length; i++) {\n if (!UUIDUtil.isValid(idList[i])) {\n return of(false);\n }\n }\n\n return this.baseService.httpClient.patch(this.url(`/enable-or-disable-all/${action}`, version), idList, this.options()).pipe(\n map(() => { return true; }),\n takeUntil(this.handleDestroy),\n catchError(this.handleError)\n )\n }\n\n public validate<T = any>(entity: T): string;\n public validate(entity: TEntity): string {\n return '';\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GIPIFileService {\n\n constructor() { }\n\n download(data: any, fileName: string, mimeType: string): void {\n const blob: Blob = new Blob([data], { type: mimeType });\n const link: HTMLAnchorElement = document.createElement('a');\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n\n downloadContent(response: any): void {\n this.download(\n response.body,\n response.headers.get('content-disposition').split(';')[1].split('filename')[1].split('=')[1].trim(),\n response.headers.get('content-type')\n );\n }\n\n printArchive(data: any, mimeType: string): void {\n const blob: Blob = new Blob([data], { type: mimeType });\n const url: string = URL.createObjectURL(blob);\n const htmlIFrameElement: HTMLIFrameElement = document.createElement('iframe');\n\n document.body.appendChild(htmlIFrameElement);\n htmlIFrameElement.style.display = 'none';\n htmlIFrameElement.style.position = 'fixed';\n htmlIFrameElement.style.right = '0';\n htmlIFrameElement.style.bottom = '0';\n htmlIFrameElement.style.width = '0';\n htmlIFrameElement.style.height = '0';\n htmlIFrameElement.style.border = '0';\n htmlIFrameElement.src = url;\n htmlIFrameElement.onload = () => {\n setTimeout(() => {\n htmlIFrameElement.focus();\n htmlIFrameElement.contentWindow.print();\n }, 1);\n };\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { ObjectUtil } from '../../utils/object.util';\n\n@Injectable({ providedIn: 'root' })\nexport class GIPISessionStorageService<TFilter = any> {\n\n private _storage: Storage;\n\n constructor() {\n this._storage = window.sessionStorage;\n }\n\n set<T = any>(key: string, value: T): boolean;\n set(key: string, value: TFilter): boolean {\n if (this._storage) {\n this._storage.setItem(key, JSON.stringify(value));\n return true;\n }\n return false;\n }\n\n get<T = any>(key: string): T;\n get(key: string): TFilter {\n if (this._storage) {\n const json: any = JSON.parse(this._storage.getItem(key));\n return !ObjectUtil.isNull(json) ? json : null;\n }\n return null;\n }\n\n remove(key: string): boolean {\n if (this._storage) {\n this._storage.removeItem(key);\n return true;\n }\n return false;\n }\n\n clear(): boolean {\n if (this._storage) {\n this._storage.clear();\n return true;\n }\n return false;\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { ChangeDetectorRef, Injectable, Injector, OnDestroy } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Router } from '@angular/router';\n\nimport { ConfirmationService } from '../../services/confirmation.service';\nimport { DialogService } from '../../services/dialog.service';\nimport { MessageService } from '../../services/message.service';\nimport { ObjectUtil } from '../../utils/object.util';\nimport { GIPIFileService } from './file.service';\nimport { GIPISessionStorageService } from './session-storage.service';\n\n@Injectable({ providedIn: 'root' })\nexport class GIPIBaseService implements OnDestroy {\n\n private _sessionStorageService: GIPISessionStorageService = null;\n private _confirmationService: ConfirmationService = null;\n private _messageService: MessageService = null;\n private _dialogService: DialogService = null;\n private _fileService: GIPIFileService = null;\n private _matDialog: MatDialog = null;\n private _httpClient: HttpClient = null;\n private _changeDetectorRef: ChangeDetectorRef = null;\n private _matSnackBar: MatSnackBar = null;\n\n constructor(\n private _injector: Injector,\n private _router: Router,\n ) { }\n\n ngOnDestroy(): void { }\n\n get sessionStorageService(): GIPISessionStorageService {\n if (ObjectUtil.isNull(this._sessionStorageService)) {\n this._sessionStorageService = this._injector.get(GIPISessionStorageService);\n }\n return this._sessionStorageService;\n }\n\n get confirmationService(): ConfirmationService {\n if (ObjectUtil.isNull(this._confirmationService)) {\n this._confirmationService = this._injector.get(ConfirmationService);\n }\n return this._confirmationService;\n }\n\n get messageService(): MessageService {\n if (ObjectUtil.isNull(this._messageService)) {\n this._messageService = this._injector.get(MessageService);\n }\n return this._messageService;\n }\n\n get dialogService(): DialogService {\n if (ObjectUtil.isNull(this._dialogService)) {\n this._dialogService = this._injector.get(DialogService);\n }\n return this._dialogService;\n }\n\n get fileService(): GIPIFileService {\n if (ObjectUtil.isNull(this._fileService)) {\n this._fileService = this._injector.get(GIPIFileService);\n }\n return this._fileService;\n }\n\n get matDialog(): MatDialog {\n if (ObjectUtil.isNull(this._matDialog)) {\n this._matDialog = this._injector.get(MatDialog);\n }\n return this._matDialog;\n }\n\n get httpClient(): HttpClient {\n if (ObjectUtil.isNull(this._httpClient)) {\n this._httpClient = this._injector.get(HttpClient);\n }\n return this._httpClient;\n }\n\n get router(): Router {\n if (ObjectUtil.isNull(this._router)) {\n this._router = this._injector.get(Router);\n }\n return this._router;\n }\n\n get changeDetectorRef(): ChangeDetectorRef {\n if (ObjectUtil.isNull(this._changeDetectorRef)) {\n this._changeDetectorRef = this._injector.get(ChangeDetectorRef);\n }\n return this._changeDetectorRef;\n }\n\n get matSnackBar(): MatSnackBar {\n if (ObjectUtil.isNull(this._matSnackBar)) {\n this._matSnackBar = this._injector.get(MatSnackBar);\n }\n return this._matSnackBar;\n }\n\n}\n","import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { AlertComponent } from '../../components/alert/alert.component';\nimport { BaseUser } from '../../models/base-user.model';\nimport { MessageDTO } from '../../models/dto/message.dto';\nimport { TokenDTO } from '../../models/dto/token.dto';\nimport { StringUtil } from '../../utils/string.util';\nimport { UUIDUtil } from '../../utils/uuid.util';\nimport { GIPIBasePermission } from '../interface/base-permission.interface';\nimport { GIPIBaseService } from '../services/base.service';\nimport { GIPIUuid } from '../types/uuid.type';\n\n@Component({ template: '' })\nexport abstract class GIPIAbstractComponent implements OnInit, AfterViewInit, OnDestroy {\n\n private _loading: boolean = false;\n public set loading(value: boolean) {\n this._loading = value;\n }\n public get loading(): boolean {\n return this._loading;\n }\n\n private _basePermissionList: GIPIBasePermission = null;\n public set basePermissionList(value: GIPIBasePermission) {\n this._basePermissionList = value;\n }\n public get basePermissionList(): GIPIBasePermission {\n return this._basePermissionList;\n }\n\n constructor(\n protected baseService: GIPIBaseService,\n protected activatedRoute: ActivatedRoute,\n ) { }\n\n ngOnInit(): void {\n this.onInitForm();\n }\n\n ngAfterViewInit(): void {\n this.onAfterInitForm();\n }\n\n ngOnDestroy(): void {\n this.onDestroy();\n }\n\n public isCreating(): boolean {\n return this.baseService.router.url.split('/').filter(path => (path === 'new')).length > 0;\n }\n\n public isEditing(): boolean {\n return this.baseService.router.url.split('/').filter(path => (path === 'edit')).length > 0;\n }\n\n public isViewing(): boolean {\n return this.baseService.router.url.split('/').filter(path => (path === 'view')).length > 0;\n }\n\n public isListing(): boolean {\n return this.baseService.router.url.split('/').filter(path => (path === 'new') || (path === 'edit') || (path === 'view')).length === 0;\n }\n\n public hasPermission(permission: string): boolean {\n if (StringUtil.isEmpty(permission)) {\n return false;\n }\n const token: TokenDTO<BaseUser> = JSON.parse(localStorage.getItem('token'));\n return !!token.user.authorities.find(authority => authority.authority.match(permission));\n }\n\n public UUIDIsValid(id: GIPIUuid): boolean {\n return UUIDUtil.isValid(id);\n }\n\n protected onInitForm(): void { }\n\n protected onAfterInitForm(): void { }\n\n protected onDestroy(): void { }\n\n protected getPath(): string {\n return `${this.activatedRoute.snapshot.parent.parent.url[0].path}/${this.activatedRoute.snapshot.parent.url[0].path}`;\n }\n\n protected navigateByUrl(navigateByUrl: string, navigate: any[], skipLocationChange: boolean = true): void {\n this.baseService.router.navigateByUrl(navigateByUrl, { skipLocationChange: skipLocationChange }).then(() => this.baseService.router.navigate(navigate));\n }\n\n protected addMessage(message: MessageDTO): void {\n this.baseService.matSnackBar.openFromComponent(AlertComponent, {\n verticalPosition: 'top',\n horizontalPosition: 'center',\n duration: 5000,\n data: message\n });\n }\n\n protected addSuccessMessage(message: string): void {\n this.baseService.messageService.add({\n icon: 'check_circle',\n title: 'Sucesso',\n message: message,\n type: 'success'\n });\n }\n\n protected addErrorMessage(message: string): void {\n this.baseService.messageService.add({\n icon: 'cancel',\n title: 'Erro',\n message: message,\n type: 'error'\n });\n }\n\n protected addWarningMessage(message: string): void {\n this.baseService.messageService.add({\n icon: 'error',\n title: 'Atenção',\n message: message,\n type: 'warning'\n });\n }\n\n protected addInfoMessage(message: string): void {\n this.baseService.messageService.add({\n icon: 'info',\n title: 'Informação',\n message: message,\n type: 'info'\n });\n }\n\n protected handleError(error: any): void {\n this.loading = false;\n if (String(error).includes('Unknown')) {\n error = new Error('Ocorreu um erro ao realizar essa operação, tente novamente');\n }\n if (error instanceof Error) {\n error = error.message;\n }\n this.addErrorMessage(error);\n throw error;\n }\n\n public getExistInRouterPath(value: string, validateParams: boolean = false): boolean {\n const url: string = this.baseService.router.url;\n const pathList: string[] = url.slice(1, url.indexOf('?') + 1).split('/');\n const parameterList: string[] = url.slice(url.indexOf('?') + 1, url.length).split('=');\n\n if (validateParams) {\n return parameterList.filter(path => path.toUpperCase() === value.toUpperCase()).length > 0;\n } else {\n return pathList.filter(path => path.toUpperCase() === value.toUpperCase()).length > 0;\n }\n }\n\n}\n","import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\nimport { INJECTOR } from '../../../shared/shared.module';\nimport { APP_MESSAGES } from '../../app.messages';\nimport { ObjectUtil } from '../../utils/object.util';\nimport { GIPIAbstractModel } from '../models/abstract.model';\nimport { GIPIAbstractCrudService } from '../services/abstract-crud.service';\nimport { GIPIBaseService } from '../services/base.service';\nimport { GIPIUuid } from '../types/uuid.type';\nimport { GIPIAbstractComponent } from './abstract.component';\n\n@Component({ template: '' })\nexport abstract class GIPIAbstractCrudComponent<TEntity extends GIPIAbstractModel> extends GIPIAbstractComponent implements OnInit, AfterViewInit, OnDestroy {\n\n private _entity: TEntity = this.newEntity();\n public set entity(value: TEntity) {\n this._entity = value;\n }\n public get entity(): TEntity {\n return this._entity;\n }\n\n constructor(\n protected abstractCrudService: GIPIAbstractCrudService<TEntity, any>,\n protected baseService: GIPIBaseService,\n protected activatedRoute: ActivatedRoute,\n ) {\n super(baseService, activatedRoute);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n if (ObjectUtil.isNull(this.basePermissionList)) {\n throw new Error('basePermissionList is required');\n }\n }\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n protected onInitForm(): void {\n try {\n this.loading = true;\n const id: GIPIUuid = this.activatedRoute.snapshot.params.id;\n\n if (this.UUIDIsValid(id)) {\n this.abstractCrudService.getOne<TEntity>(id).toPromise().then(entity => {\n this.entity = entity;\n this.onAfterGetOne();\n this.loading = false;\n }, error => {\n throw new Error(error);\n });\n } else {\n this.entity = this.newEntity();\n this.onAfterGetOne();\n this.loading = false;\n }\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n\n protected abstract newEntity(): TEntity;\n\n protected abstract isValid(entity: TEntity): boolean;\n\n protected onAfterGetOne(): void { }\n\n protected preSave(entity: TEntity): void { }\n\n public save(entity?: TEntity, toGoBack: boolean = true): void {\n try {\n this.loading = true;\n if (ObjectUtil.isNull(entity)) {\n entity = this.entity;\n }\n if (this.isValid(entity)) {\n this.preSave(entity);\n\n this.abstractCrudService.save(entity).toPromise().then(resp => {\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n if (toGoBack) {\n this.navigateByUrl(this.getPath(), [this.getPath()], true);\n }\n }, error => {\n throw new Error(error);\n });\n }\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n public goBack(showConfirmation: boolean = true): void {\n if (!this.isViewing() || showConfirmation) {\n this.baseService.confirmationService.confirm({\n title: 'Confirmação',\n message: INJECTOR.get(APP_MESSAGES).RETURN_CONFIRMATION,\n accept: () => this.navigateByUrl(this.getPath(), [this.getPath()], true)\n });\n } else {\n this.navigateByUrl(this.getPath(), [this.getPath()], true);\n }\n }\n\n}\n","export class GIPIPageModel<TEntity> {\n\n content: TEntity[];\n\n number: number;\n\n totalElements: number;\n\n totalPages: number;\n\n constructor() {\n this.content = [];\n this.number = 0;\n }\n\n}\n","import { GIPISortDirection, GIPISortDirectionEnum } from '../enums/sort-direction.enum';\n\nexport class GIPISortModel {\n\n direction: GIPISortDirectionEnum | GIPISortDirection;\n\n field: string;\n\n constructor(\n field: string,\n direction: GIPISortDirectionEnum | GIPISortDirection,\n ) {\n this.field = field;\n this.direction = direction;\n }\n\n}\n","import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { INJECTOR } from '../../../shared/shared.module';\nimport { APP_MESSAGES } from '../../app.messages';\nimport { TableColumnDTO } from '../../models/dto/table-column.dto';\nimport { TablePageEventDTO } from '../../models/dto/table-page-event.dto';\nimport { ArrayUtil } from '../../utils/array.util';\nimport { ObjectUtil } from '../../utils/object.util';\nimport { StringUtil } from '../../utils/string.util';\nimport { GIPIAbstractFilterModel } from '../models/abstract-filter.model';\nimport { GIPIAbstractModel } from '../models/abstract.model';\nimport { GIPIAppliedFilter } from '../models/applied-filter.model';\nimport { GIPIPageModel } from '../models/page.model';\nimport { GIPISortModel } from '../models/sort.model';\nimport { GIPIAbstractCrudService } from '../services/abstract-crud.service';\nimport { GIPIBaseService } from '../services/base.service';\nimport { GIPIUuid } from '../types/uuid.type';\nimport { GIPIAbstractComponent } from './abstract.component';\n\n@Component({ template: '' })\nexport abstract class GIPIAbstractFindComponent<TEntity extends GIPIAbstractModel, TFilter extends GIPIAbstractFilterModel> extends GIPIAbstractComponent implements OnInit, AfterViewInit, OnDestroy {\n\n private _filter: TFilter = null;\n public set filter(value: TFilter) {\n this._filter = value;\n }\n public get filter(): TFilter {\n return this._filter;\n }\n\n private _page: GIPIPageModel<TEntity> = null;\n public set page(value: GIPIPageModel<TEntity>) {\n this._page = value;\n }\n public get page(): GIPIPageModel<TEntity> {\n return this._page;\n }\n\n private _tablePageEventDTO: TablePageEventDTO;\n public set tablePageEventDTO(value: TablePageEventDTO) {\n this._tablePageEventDTO = value;\n }\n public get tablePageEventDTO(): TablePageEventDTO {\n return this._tablePageEventDTO;\n }\n\n private _columns: TableColumnDTO[] = [];\n public set columns(value: TableColumnDTO[]) {\n this._columns = value;\n }\n public get columns(): TableColumnDTO[] {\n return this._columns;\n }\n\n private _appliedFilters: GIPIAppliedFilter<any>[] = [];\n public set appliedFilters(value: GIPIAppliedFilter<any>[]) {\n this._appliedFilters = value;\n }\n public get appliedFilters(): GIPIAppliedFilter<any>[] {\n return this._appliedFilters;\n }\n\n constructor(\n protected abstractCrudService: GIPIAbstractCrudService<TEntity, TFilter>,\n protected baseService: GIPIBaseService,\n protected activatedRoute: ActivatedRoute,\n ) {\n super(baseService, activatedRoute);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n if (ObjectUtil.isNull(this.basePermissionList)) {\n throw new Error('basePermissionList is required');\n }\n\n this._onInitFilter();\n this.columns = this.createTableColumns();\n }\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n protected abstract newFilter(): TFilter;\n\n protected abstract createTableColumns(): TableColumnDTO[];\n\n protected abstract setAppliedFilters(): void;\n\n protected abstract clearAppliedFilters(): void;\n\n public abstract removeAppliedFilters(filter: { chip: GIPIAppliedFilter<any>; index: number; }): void;\n\n protected abstract setFilterSessionStorage(): void;\n\n protected abstract handleFilterSessionStorage(): void;\n\n protected newPage(): GIPIPageModel<TEntity> {\n return new GIPIPageModel<TEntity>();\n }\n\n protected createTableSorts(): GIPISortModel[] {\n return [];\n }\n\n protected preDelete(id?: GIPIUuid): void { }\n\n protected existInAppliedFilters<T = any>(key: T): boolean {\n return (\n !ArrayUtil.isEmpty(this.appliedFilters) &&\n (this.appliedFilters.findIndex(e => e.key === key) >= 0)\n );\n }\n\n /** @Internal */\n protected _onInitFilter(): void {\n this.page = this.newPage();\n this.filter = this.newFilter();\n\n if (!ObjectUtil.isNull(this.filter)) {\n this.setAppliedFilters();\n }\n\n const filterSessionStorage = this.baseService.sessionStorageService.get('filter');\n if (!ObjectUtil.isNull(filterSessionStorage)) {\n this.handleFilterSessionStorage();\n }\n }\n\n public findAll(pageEvent?: any): void {\n try {\n this.loading = true;\n\n this.page = this.newPage();\n if (ObjectUtil.isNull(this.filter)) {\n this.filter = this.newFilter();\n }\n\n // if (ObjectUtil.isNull(pageEvent) && !ObjectUtil.isNull(this.tablePageEventDTO)) {\n // pageEvent = this.tablePageEventDTO;\n // }\n\n if (pageEvent) {\n this.tablePageEventDTO = pageEvent;\n this.filter.pageNumber = pageEvent.pageIndex;\n this.filter.pageSize = pageEvent.pageSize;\n this.filter.offset = pageEvent.pageIndex * pageEvent.pageSize;\n\n if (pageEvent.sort) {\n this.filter.sorts = [\n new GIPISortModel(\n pageEvent.sort.active,\n StringUtil.isEmpty(pageEvent.sort.direction) ? 'DESC' : pageEvent.sort.direction.toUpperCase()\n )\n ];\n }\n } else {\n this.filter.pageNumber = 0;\n this.filter.offset = 0;\n this.filter.pageSize = 10;\n }\n\n this.abstractCrudService.findAll<TFilter, TEntity>(this.filter).toPromise().then(page => {\n this.page = page;\n this.setAppliedFilters();\n this.loading = false;\n }, error => {\n this.loading = false;\n throw new Error(error);\n });\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n public newRegister(permission?: string): void {\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this.setFilterSessionStorage();\n this.navigateByUrl(this.getPath(), [this.getPath(), 'new'], true);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.MAKE;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this.setFilterSessionStorage();\n this.navigateByUrl(this.getPath(), [this.getPath(), 'new'], true);\n }\n }\n\n public editRegister(id?: GIPIUuid, permission?: string): void {\n id = this.handleEntityId(id);\n if (ObjectUtil.isNull(id)) {\n return;\n }\n\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this.setFilterSessionStorage();\n this.navigateByUrl(this.getPath(), [this.getPath(), 'edit'], true);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.UPDATE;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this.setFilterSessionStorage();\n this.navigateByUrl(this.getPath(), [this.getPath(), 'edit', id], true);\n }\n }\n\n public deleteRegister(id?: GIPIUuid, permission?: string, fetchAgain: boolean = true): void {\n try {\n id = this.handleEntityId(id);\n if (ObjectUtil.isNull(id)) {\n return;\n }\n\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this._deleteRegister(id, fetchAgain);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.DELETE;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this._deleteRegister(id, fetchAgain);\n }\n } catch (e) {\n this.loading = false;\n if (this.isListing()) {\n this.clear();\n }\n throw new Error(e);\n }\n }\n\n /** @Internal */\n private _deleteRegister(id: GIPIUuid, fetchAgain: boolean = true): void {\n try {\n this.baseService.confirmationService.confirm({\n title: 'Confirmação',\n message: INJECTOR.get(APP_MESSAGES).DELETE_CONFIRMATION,\n accept: () => {\n this.setFilterSessionStorage();\n\n this.loading = true;\n this.page = this.newPage();\n this.preDelete(id);\n\n this.abstractCrudService.delete<TEntity>(id).toPromise().then(() => {\n if (fetchAgain) {\n this.findAll();\n }\n this.loading = false;\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n throw new Error(error);\n });\n }\n });\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n public deleteAllRegister(idList?: GIPIUuid[], permission?: string, fetchAgain: boolean = true): void {\n try {\n idList = this.handleEntityIdList(idList);\n if (ObjectUtil.isNull(idList) || ArrayUtil.isEmpty(idList)) {\n return;\n }\n\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this._deleteAllRegister(idList, fetchAgain);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.DELETE;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this._deleteAllRegister(idList, fetchAgain);\n }\n } catch (e) {\n this.loading = false;\n if (this.isListing()) {\n this.clear();\n }\n throw new Error(e);\n }\n }\n\n /** @Internal */\n private _deleteAllRegister(idList: GIPIUuid[], fetchAgain: boolean = true): void {\n try {\n this.baseService.confirmationService.confirm({\n title: 'Confirmação',\n message: INJECTOR.get(APP_MESSAGES).DELETE_CONFIRMATION,\n accept: () => {\n this.setFilterSessionStorage();\n\n this.loading = true;\n this.page = this.newPage();\n this.preDelete();\n\n this.abstractCrudService.deleteAll(idList).toPromise().then(() => {\n if (fetchAgain) {\n this.findAll();\n }\n this.loading = false;\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n throw new Error(error);\n });\n }\n });\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n public viewRegister(id?: GIPIUuid, permission?: string): void {\n id = this.handleEntityId(id);\n if (ObjectUtil.isNull(id)) {\n return;\n }\n\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this.setFilterSessionStorage();\n this.navigateByUrl(this.getPath(), [this.getPath(), 'view', id], true);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.READ;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this.setFilterSessionStorage();\n this.navigateByUrl(this.getPath(), [this.getPath(), 'view', id], true);\n }\n }\n\n public editOrViewRegister(id: GIPIUuid, permission: string): void {\n if (this.hasPermission(permission)) {\n this.editRegister(id, permission);\n } else {\n this.viewRegister(id, permission);\n }\n }\n\n public enableOrDisableRegister(action: 'DISABLE' | 'ENABLE', id?: GIPIUuid, permission?: string, fetchAgain: boolean = true): void {\n try {\n id = this.handleEntityId(id);\n if (ObjectUtil.isNull(id)) {\n return;\n }\n\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this._enableOrDisableRegister(action, id, fetchAgain);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.UPDATE;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this._enableOrDisableRegister(action, id, fetchAgain);\n }\n } catch (e) {\n this.loading = false;\n if (this.isListing()) {\n this.clear();\n }\n throw new Error(e);\n }\n }\n\n /** @Internal */\n private _enableOrDisableRegister(action: 'DISABLE' | 'ENABLE', id: GIPIUuid, fetchAgain: boolean = true): void {\n try {\n this.baseService.confirmationService.confirm({\n title: 'Confirmação',\n message: `Deseja realmente ${(action === 'DISABLE') ? 'inativar' : 'ativar'} este registro?`,\n accept: () => {\n this.setFilterSessionStorage();\n\n this.loading = true;\n this.page = this.newPage();\n\n this.abstractCrudService.enableOrDisable(id, action).toPromise().then(() => {\n if (fetchAgain) {\n this.findAll();\n }\n this.loading = false;\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n throw new Error(error);\n });\n }\n });\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n public enableAndDisableAllRegister(action: 'DISABLE' | 'ENABLE', idList?: GIPIUuid[], permission?: string, fetchAgain: boolean = true): void {\n try {\n idList = this.handleEntityIdList(idList);\n if (ObjectUtil.isNull(idList) || ArrayUtil.isEmpty(idList)) {\n return;\n }\n\n if (StringUtil.isEmpty(permission) && ObjectUtil.isNull(this.basePermissionList)) {\n this._enableAndDisableAllRegister(action, idList, fetchAgain);\n } else {\n if (StringUtil.isEmpty(permission) && !ObjectUtil.isNull(this.basePermissionList)) {\n permission = this.basePermissionList.UPDATE;\n }\n if (!this.hasPermission(permission)) {\n this.addWarningMessage(INJECTOR.get(APP_MESSAGES).NOT_PERMISSION);\n return;\n }\n\n this._enableAndDisableAllRegister(action, idList, fetchAgain);\n }\n } catch (e) {\n this.loading = false;\n if (this.isListing()) {\n this.clear();\n }\n throw new Error(e);\n }\n }\n\n /** @Internal */\n private _enableAndDisableAllRegister(action: 'DISABLE' | 'ENABLE', idList: GIPIUuid[], fetchAgain: boolean = true): void {\n try {\n this.baseService.confirmationService.confirm({\n title: 'Confirmação',\n message: `Deseja realmente ${(action === 'DISABLE') ? 'inativar' : 'ativar'} os registros selecionados?`,\n accept: () => {\n this.setFilterSessionStorage();\n\n this.loading = true;\n this.page = this.newPage();\n\n this.abstractCrudService.enableOrDisableAll(idList, action).toPromise().then(() => {\n if (fetchAgain) {\n this.findAll();\n }\n this.loading = false;\n this.addSuccessMessage(INJECTOR.get(APP_MESSAGES).SUCCESS);\n }, error => {\n throw new Error(error);\n });\n }\n });\n } catch (e) {\n this.loading = false;\n throw new Error(e);\n }\n }\n\n public clear(): void {\n this.baseService.sessionStorageService.remove('filter');\n this.page = this.newPage();\n this.filter = this.newFilter();\n this.clearAppliedFilters();\n this.findAll();\n }\n\n public handleEntityId(id: GIPIUuid): GIPIUuid {\n if (!this.UUIDIsValid(id)) {\n throw new Error('O identificador do registro não é válido');\n }\n\n if (ObjectUtil.isNull(id) && !ObjectUtil.isNull(this.page) && !ArrayUtil.isEmpty(this.page.content)) {\n const firstSeletected = this.page.content.filter(c => c.selected)[0];\n if (ObjectUtil.isNull(firstSeletected)) {\n return null;\n }\n\n return firstSeletected.id;\n }\n\n return id;\n }\n\n public handleEntityIdList(idList: GIPIUuid[]): GIPIUuid[] {\n if (!ArrayUtil.isEmpty(idList)) {\n for (let i = 0; i < idList.length; i++) {\n if (!this.UUIDIsValid(idList[i])) {\n throw new Error('O identificador do registro não é válido');\n }\n }\n }\n\n if (ArrayUtil.isEmpty(idList) && !ObjectUtil.isNull(this.page) && !ArrayUtil.isEmpty(this.page.content)) {\n const listSelected = this.page.content.filter(p => p.selected).map(p => p.id);\n if (ArrayUtil.isEmpty(listSelected)) {\n return null;\n }\n\n return listSelected;\n }\n\n return idList;\n }\n\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { NgxCurrencyModule } from 'ngx-currency';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { AppMessages } from './app-messages';\nimport { APP_MESSAGES, DEFAULT_MESSAGES } from './app.messages';\n\nimport { AlertComponent } from './components/alert/alert.component';\n\nimport { GIPI_BREAKPOINTS, GIPI_CUSTOM_BREAKPOINTS_PROVIDER } from './custom-breakpoints';\nimport { AuthInterceptor } from './interceptors/auth.interceptor';\nimport { ErrorInterceptor } from './interceptors/error.interceptor';\n\nimport { ConfirmationService } from './services/confirmation.service';\nimport { DialogService } from './services/dialog.service';\nimport { MessageService } from './services/message.service';\nimport { NavService } from './services/nav.service';\nimport { SvgRegisterService } from './services/svg-register.service';\n\nimport { ObjectUtil } from './utils/object.util';\n\nimport { LocalTimePipe } from './pipes/local-time.pipe';\n\nimport { GIPIAbstractCrudComponent } from './gipi-components/components/abstract-crud.component';\nimport { GIPIAbstractFindComponent } from './gipi-components/components/abstract-find.component';\nimport { GIPIAbstractComponent } from './gipi-components/components/abstract.component';\n\nconst GIPIComponents: any[] = [\n GIPIAbstractCrudComponent,\n GIPIAbstractFindComponent,\n GIPIAbstractComponent,\n];\n\nexport const customCurrencyMaskConfig = {\n align: '',\n allowNegative: true,\n allowZero: true,\n decimal: ',',\n precision: 2,\n prefix: 'R$ ',\n suffix: '',\n thousands: '.',\n nullable: true,\n max: 999999999.99\n};\n\n@NgModule({\n declarations: [\n AlertComponent,\n LocalTimePipe,\n GIPIComponents,\n ],\n entryComponents: [\n AlertComponent,\n // GIPIComponents,\n ],\n imports: [\n BrowserAnimationsModule,\n OverlayModule,\n HttpClientModule,\n RouterModule,\n FlexLayoutModule.withConfig({ disableDefaultBps: true }, GIPI_BREAKPOINTS),\n MatIconModule,\n MatToolbarModule,\n MatSidenavModule,\n MatListModule,\n MatButtonModule,\n MatMenuModule,\n NgxMaskModule.forRoot(),\n NgxCurrencyModule.forRoot(customCurrencyMaskConfig),\n SharedModule\n ],\n exports: [\n LocalTimePipe,\n GIPIComponents,\n ],\n providers: [\n NavService,\n SvgRegisterService,\n MessageService,\n ConfirmationService,\n DialogService,\n GIPI_CUSTOM_BREAKPOINTS_PROVIDER,\n { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true }\n ]\n})\nexport class CoreModule {\n static setMessages(messages: AppMessages): ModuleWithProviders<CoreModule> {\n return {\n ngModule: CoreModule,\n providers: [\n { provide: APP_MESSAGES, useValue: !ObjectUtil.isNull(messages) ? messages : DEFAULT_MESSAGES }\n ]\n };\n }\n}\n","export enum CriteriaOperationEnum {\n\n EQUALITY = 'EQUALITY',\n NEGATION = 'NEGATION',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n LIKE = 'LIKE',\n STARTS_WITH = 'STARTS_WITH',\n ENDS_WITH = 'ENDS_WITH',\n CONTAINS = 'CONTAINS',\n IN = 'IN'\n\n}\n","export enum CriteriaSortDirectionEnum {\n\n ASC = 'ASC',\n DESC = 'DESC'\n\n}\n","export enum MenuTypeEnum {\n GROUP = 'GROUP',\n COLLAPSABLE = 'COLLAPSABLE',\n ITEM = 'ITEM'\n}\n\nexport type MenuType = 'GROUP' | 'COLLAPSABLE' | 'ITEM';\n","export enum RadioButtonEnum {\n\n START_AND_END = 'Inicial/Final',\n BY_SELECTION = 'Por seleção',\n TO_OMIT = 'Omitir',\n ALL = 'Todos'\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { BaseUser } from '../models/base-user.model';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ObjectUtil } from '../utils/object.util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuard implements CanActivate, CanActivateChild {\n\n constructor(private router: Router, private authenticationService: AuthenticationService<BaseUser>) {\n }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n if (!ObjectUtil.isNull(this.authenticationService.tokenValueLocalStorage)) {\n return this.authenticationService.token.pipe(\n map(token => {\n if (this.authenticationService.isValidToken(token)) {\n return true;\n } else if (!ObjectUtil.isNull(token)) {\n this.authenticationService.removeToken();\n }\n this.router.navigate(['oauth/login'], { queryParams: { returnUrl: state.url } });\n return false;\n })\n );\n }\n this.router.navigate(['oauth/login'], { queryParams: { returnUrl: state.url } });\n return of(false);\n }\n\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n return this.canActivate(route, state);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { BaseUser } from '../models/base-user.model';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ObjectUtil } from '../utils/object.util';\nimport { MenuDTO } from './../models/dto/menu.dto';\nimport { ArrayUtil } from './../utils/array.util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionGuard implements CanActivate, CanActivateChild {\n\n constructor(private router: Router, private authenticationService: AuthenticationService<BaseUser>) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n if (!ObjectUtil.isNull(this.authenticationService.tokenValueLocalStorage)) {\n return this.authenticationService.token.pipe(\n map(token => {\n if (this.authenticationService.isValidToken(token)\n && (!this.hasPermission(token.user.menuList, state.url) && !this.hasAuthority(token.user, route.data.authority))) {\n this.router.navigate(['errors/403']);\n return false;\n }\n return true;\n })\n );\n }\n this.router.navigate(['errors/403']);\n return of(false);\n }\n\n hasAuthority(user: any, permission: string): boolean {\n return !!user.authorities.find(authority => authority.authority.match(permission));\n }\n\n hasPermission(menuList: MenuDTO[], url: string): boolean {\n for (const menu of menuList) {\n if (url.split('/').pop() === menu.route) {\n return true;\n } else if (!ArrayUtil.isEmpty(menu.menuList)) {\n return this.hasPermission(menu.menuList, url);\n }\n }\n return false;\n }\n\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n return this.canActivate(route, state);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { BaseUser } from '../models/base-user.model';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ObjectUtil } from '../utils/object.util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PublicGuard implements CanActivate, CanActivateChild {\n\n constructor(private router: Router, private authenticationService: AuthenticationService<BaseUser>) {\n }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n if (!ObjectUtil.isNull(this.authenticationService.tokenValueLocalStorage)) {\n return this.authenticationService.token.pipe(\n map(token => {\n if (this.authenticationService.isValidToken(token)) {\n this.router.navigate(['dashboard']);\n return false;\n }\n return true;\n })\n );\n }\n this.router.navigate(['dashboard']);\n return of(false);\n }\n\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n return this.canActivate(route, state);\n }\n}\n","export abstract class AbstractModel {\n\n id: number | string;\n\n}\n","import {AbstractModel} from './abstract.model';\nimport {MenuDTO} from './dto/menu.dto';\nimport {Authority} from './authority.model';\n\nexport class BaseUser extends AbstractModel {\n\n name: string;\n\n username: string;\n\n password: string;\n\n lastAccess: Date;\n\n authorities: Authority[];\n\n menuList: MenuDTO[];\n\n constructor() {\n super();\n this.menuList = [];\n }\n\n}\n","import {AbstractDTO} from './abstract.dto';\n\nexport class ChartDTO extends AbstractDTO {\n\n label: string;\n\n value: string;\n\n}\n","import { ComponentType } from '@angular/cdk/overlay';\nimport { TemplateRef } from '@angular/core';\nimport { DialogPosition } from '@angular/material';\nimport { AbstractDTO } from './abstract.dto';\n\nexport class DialogDTO<D = any> extends AbstractDTO {\n\n componentOrTemplateRef: ComponentType<any> | TemplateRef<any>;\n\n /** Classe personalizada para o painel de sobreposição. */\n panelClass?: string | string[];\n\n /** Se o usuário pode usar escape ou clicar no plano de fundo para fechar o modal. */\n disableClose?: boolean;\n\n /** Largura do dialog.*/\n width?: string;\n\n /** Altura do dialog. */\n height?: string;\n\n /** Largura mínima do dialog. Se um número for fornecido, serão assumidas unidades de pixels. */\n minWidth?: number | string;\n\n /** Altura mínima do dialog. Se um número for fornecido, serão assumidas unidades de pixels. */\n minHeight?: number | string;\n\n /** Largura máxima do dialog. Se um número for fornecido, serão assumidas unidades de pixels. O padrão é 80vw */\n maxWidth?: number | string;\n\n /** Altura máxima do dialog. Se um número for fornecido, serão assumidas unidades de pixels. */\n maxHeight?: number | string;\n\n /** Substituições de posição. */\n position?: DialogPosition;\n\n /** Dados sendo injetados no dialog */\n data?: D | null;\n\n /** Se a caixa de diálogo deve focar o primeiro elemento focável em aberto. */\n autoFocus?: boolean;\n\n /** Se a caixa de diálogo deve restaurar o foco para o elemento previamente focado, depois de fechado. */\n restoreFocus?: boolean;\n\n /**\n * Se o dialog deve fechar quando o usuário retrocede/avança no histórico.\n * Observe que isso geralmente não inclui clicar em links (a menos que o usuário esteja usando a `HashLocationStrategy`).\n */\n closeOnNavigation?: boolean;\n\n}\n","import {AbstractDTO} from './abstract.dto';\nimport {SortDTO} from './sort.dto';\n\nexport class FilterDTO extends AbstractDTO {\n\n sorts: SortDTO[];\n\n pageNumber: number;\n\n pageSize: number;\n\n offset: number;\n\n}\n","import { RadioButtonEnum } from '../enums/radio-button.enum';\n\nexport class InputListboxDTO {\n\n radiobuttonSelected: RadioButtonEnum | string;\n\n entitiesSelected: any[];\n\n constructor(radiobuttonSelected: RadioButtonEnum | string = 'ALL', entitentitiesSelected: any[] = []) {\n this.radiobuttonSelected = radiobuttonSelected;\n this.entitiesSelected = entitentitiesSelected;\n }\n\n}\n","import { MenuType, MenuTypeEnum } from '../enums/menu-type.enum';\nimport { AbstractDTO } from './abstract.dto';\n\nexport class MenuDTO extends AbstractDTO {\n\n index?: number;\n\n name: string;\n\n icon?: string;\n\n svgIcon?: string;\n\n route?: string;\n\n module?: string;\n\n type: MenuTypeEnum | MenuType;\n\n menuList?: MenuDTO[];\n\n action?: Function;\n\n // @Transient\n expanded?: boolean;\n\n constructor() {\n super();\n this.menuList = [];\n this.expanded = false;\n }\n\n}\n\n\n","import { TemplateRef } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AbstractModel } from '../abstract.model';\nimport { AbstractDTO } from './abstract.dto';\n\nexport class TableColumnDTO extends AbstractDTO {\n\n name: string;\n\n property: string;\n\n value: any;\n\n sortable = false;\n\n hiddenSm = false;\n\n visible = true;\n\n width: Observable<number | string>;\n\n marginLeft: Observable<number | string>;\n\n marginRight: Observable<number | string>;\n\n align: string;\n\n template: TemplateRef<any>;\n\n templateHeader: TemplateRef<any>;\n\n sliceLength: number;\n\n action: (obj: AbstractModel) => void;\n\n constructor(\n name: string,\n property: string,\n value: any,\n sortable: boolean,\n hiddenSm: boolean,\n visible: boolean,\n width: Observable<number | string>,\n marginLeft: Observable<number | string>,\n marginRight: Observable<number | string>,\n align: string,\n template: TemplateRef<any>,\n templateHeader: TemplateRef<any>,\n sliceLength: number,\n action: (obj: AbstractModel) => void\n ) {\n super();\n this.name = name;\n this.property = property;\n this.value = value;\n this.sortable = sortable;\n this.hiddenSm = hiddenSm;\n this.visible = visible;\n this.width = width;\n this.marginLeft = marginLeft;\n this.marginRight = marginRight;\n this.align = align;\n this.template = template;\n this.templateHeader = templateHeader;\n this.sliceLength = sliceLength;\n this.action = action;\n }\n\n}\n","import {BaseUser} from '../base-user.model';\nimport {AbstractDTO} from './abstract.dto';\n\nexport class TokenDTO<U extends BaseUser> extends AbstractDTO {\n\n user: U;\n\n accessToken: string;\n\n refreshToken: string;\n\n expiration: Date;\n\n}\n","import {AbstractModel} from './abstract.model';\n\nexport class MultitenantModel extends AbstractModel {\n\n tenantId: number;\n\n}\n","import {AbstractModel} from './abstract.model';\n\nexport class Permission extends AbstractModel {\n\n menu: string;\n\n make = true;\n\n update = true;\n\n read = true;\n\n delete = true;\n\n}\n","import {AbstractModel} from './abstract.model';\nimport {Permission} from './permission.model';\n\nexport class Role extends AbstractModel {\n\n name: string;\n\n permissionList: Permission[];\n\n constructor() {\n super();\n this.permissionList = [];\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { OnDestroy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError, map, takeUntil } from 'rxjs/operators';\n\nimport { AbstractModel } from '../models/abstract.model';\nimport { FilterDTO } from '../models/dto/filter.dto';\nimport { PageDTO } from '../models/dto/page.dto';\nimport { ObjectUtil } from '../utils/object.util';\nimport { StringUtil } from '../utils/string.util';\nimport { AbstractService } from './abstract.service';\n\nexport abstract class AbstractFindService<T extends AbstractModel, F extends FilterDTO> extends AbstractService implements OnDestroy {\n\n constructor(\n protected path: string,\n protected http: HttpClient\n ) {\n super();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n protected url(path?: string): string {\n const url = `api/${this.path}`;\n return path ? url.concat(`/${path}`) : url;\n }\n\n getOne(id: number | string): Observable<T> {\n return this.http.get(this.url(`${id}`), this.options()).pipe(\n takeUntil(this.onDestroy),\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n find(filter?: F): Observable<PageDTO<any>> {\n return this.http.post(this.url('find-all'), filter, this.options()).pipe(\n takeUntil(this.onDestroy),\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n findAll(): Observable<T[]> {\n return this.http.get(this.url(), this.options()).pipe(\n takeUntil(this.onDestroy),\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n findAllEnabled(page: number, size: number): Observable<PageDTO<T>> {\n if ((!page) || (page && (page < 0))) {\n page = 0;\n }\n if ((!size) || (size && (size <= 0))) {\n size = 10;\n }\n\n return this.http.get(this.url(`find-all-enabled?page=${page}&size=${size}`), this.options()).pipe(\n takeUntil(this.onDestroy),\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n /**\n * Pesquisa páginada por valor.\n * @param value valor para pesquisar\n * @param page página que ira consultar. default = 0;\n * @param size quantidade de registros a retornar. default = 10;\n * @param sort tipo de ordenação. default = null;\n * @returns Observable<PageDTO<T>>;\n */\n findByValue(value: string, page: number, size: number = 10, sort?: { property: string; direction: 'asc' | 'desc'; }): Observable<PageDTO<T>> {\n let lValue: string = value;\n if (value) {\n lValue = StringUtil.removeAccents(value).trim();\n } else {\n lValue = '';\n }\n if ((!page) || (page && (page < 0))) {\n page = 0;\n }\n if ((!size) || (size && (size <= 0))) {\n size = 10;\n }\n let lSort: string = '';\n if (!ObjectUtil.isNull(sort) && !StringUtil.isEmpty(sort.property)) {\n lSort = `&sort=${sort.property},${sort.direction}`;\n }\n\n return this.http.get(this.url(`find-by-value?page=${page}&size=${size}${lSort}&value=${lValue}`), this.options()).pipe(\n takeUntil(this.onDestroy),\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n}\n\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { AbstractModel } from '../models/abstract.model';\nimport { FilterDTO } from '../models/dto/filter.dto';\nimport { AbstractFindService } from './abstract-find.service';\n\nexport abstract class AbstractCrudService<T extends AbstractModel, F extends FilterDTO> extends AbstractFindService<T, F> {\n\n path: string;\n\n returnPath: string;\n\n constructor(\n path: string,\n http: HttpClient,\n ) {\n super(path, http);\n this.path = path;\n }\n\n save(entity: T): Observable<T> {\n this.validate(entity);\n return this.http.post(this.url(), entity, this.options()).pipe(\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n saveAll(entities: T[]): Observable<T[]> {\n entities.forEach(entity => this.validate(entity));\n return this.http.post(this.url('save-all'), entities, this.options()).pipe(\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n delete(id: number | string): Observable<T> {\n return this.http.delete(this.url(`${id}`)).pipe(\n map(() => null),\n catchError(this.handleError)\n );\n }\n\n deleteAll(entities: T[]): Observable<T[]> {\n return this.http.post(this.url('delete-all'), entities, this.options()).pipe(\n map(this.mapper),\n catchError(this.handleError)\n );\n }\n\n validate(entity: T): void { }\n\n}\n","// tslint:disable\ninterface String {\n numberFullName(this: string, isCurrency?: boolean): string;\n}\n\n// Função para converter número no formato string para número por extenso.\nString.prototype.numberFullName = function (this: String, isCurrency: boolean): string {\n var ex: string[][] = [\n ['zero', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove', 'dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove'],\n ['dez', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa'],\n ['cem', 'cento', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos'],\n ['mil', 'milhão', 'bilhão', 'trilhão', 'quadrilhão', 'quintilhão', 'sextilhão', 'setilhão', 'octilhão', 'nonilhão', 'decilhão', 'undecilhão', 'dodecilhão', 'tredecilhão', 'quatrodecilhão', 'quindecilhão', 'sedecilhão', 'septendecilhão', 'octencilhão', 'nonencilhão']\n ];\n\n let a;\n let v;\n let i;\n let n = this.replace(isCurrency ? /[^,\\d]/g : /\\D/g, '').split(',');\n let e = ' e ';\n let $ = 'real';\n let d = 'centavo';\n let sl;\n\n for (var f = n.length - 1, l, j = -1, r = [], s = [], t = ''; ++j <= f; s = []) {\n j && (n[j] = (Number('.' + n[j]) * 1).toFixed(2).slice(2));\n\n if (!(a = (v = n[j]).slice((l = v.length) % 3).match(/\\d{3}/g), v = l % 3 ? [v.slice(0, l % 3)] : [], v = a ? v.concat(a) : v).length) {\n continue;\n }\n\n for (a = -1, l = v.length; ++a < l; t = '') {\n if (!(i = v[a] * 1)) {\n continue;\n }\n\n i % 100 < 20\n && (t += ex[0][i % 100])\n || i % 100 + 1 && (t += ex[1][(i % 100 / 10 >> 0) - 1] + (i % 10 ? e + ex[0][i % 10] : ''));\n\n s.push((i < 100 ? t : !(i % 100) ? ex[2][i == 100 ? 0 : i / 100 >> 0] : (ex[2][i / 100 >> 0] + e + t)) +\n (Number(t = String(l - a - 2)) > -1 ? ' ' + (i > 1 && Number(t) > 0 ? ex[3][t].replace('ão', 'ões') : ex[3][t]) : ''));\n }\n\n a = ((sl = s.length) > 1 ? (a = s.pop(), s.join(' ') + e + a) : s.join('') || ((!j && (Number(n[j + 1]) * 1 > 0) || r.length) ? '' : ex[0][0]));\n\n a && r.push(a + (isCurrency ? (' ' + (v.join('') * 1 > 1 ? j ? d + 's' : (/0{6,}$/.test(n[0]) ? 'de ' : '') + $.replace('l', 'is') : j ? d : $)) : ''));\n }\n\n return r.join(e);\n}\n","import { formatCurrency, formatPercent } from '@angular/common';\nimport { ObjectUtil } from './object.util';\nimport { StringUtil } from './string.util';\n\nimport '../extensions/string.extension';\n\n/** @dynamic */\nexport class CurrencyUtil {\n\n public static transform(value: number, digitsInfo?: string, isPercent?: boolean): string {\n if (!ObjectUtil.isNull(value)) {\n return isPercent\n ? formatPercent(value, 'pt', digitsInfo)\n : formatCurrency(value, 'pt', 'R$', digitsInfo);\n }\n\n return StringUtil.EMPTY;\n }\n\n public static transformNumberFullName(value: number, isCurrency: boolean = true): string {\n const valueFormatted: string = this.transform(value, '1.2-2');\n const valueNotCurrency: string = valueFormatted.substring(2).trim();\n return valueNotCurrency.numberFullName(isCurrency);\n }\n\n}\n","export enum GIPISortDirectionEnum {\n ASC = 'ASC',\n DESC = 'DESC'\n}\n\nexport type GIPISortDirection = 'ASC' | 'DESC';\n","import * as BrasilianUtil from '@brazilian-utils/brazilian-utils';\nimport { STATES_DATA } from '@brazilian-utils/brazilian-utils/dist/common/states';\nimport { StringUtil } from './string.util';\n\nexport type AcronymState = keyof typeof STATES_DATA;\n\n/** @dynamic */\nexport class DocumentUtil {\n\n public static clearFormat(value: string): string {\n if (StringUtil.isEmpty(value)) {\n return '';\n }\n return value.replace(/\\D/g, '');\n }\n\n public static isValidCpf(cpf: string): boolean {\n if (StringUtil.isEmpty(cpf)) {\n return false;\n }\n\n cpf = StringUtil.removeAccents(cpf);\n\n if (cpf.length !== 11\n || cpf === '00000000000'\n || cpf === '11111111111'\n || cpf === '22222222222'\n || cpf === '33333333333'\n || cpf === '44444444444'\n || cpf === '55555555555'\n || cpf === '66666666666'\n || cpf === '77777777777'\n || cpf === '88888888888'\n || cpf === '99999999999') {\n return false;\n }\n\n let add: number = 0;\n for (let i: number = 0; i < 9; i++) {\n add += +cpf.charAt(i) * (10 - i);\n }\n let rev: number = 11 - (add % 11);\n\n if (rev === 10 || rev === 11) {\n rev = 0;\n }\n\n if (rev !== +cpf.charAt(9)) {\n return false;\n }\n\n add = 0;\n for (let i: number = 0; i < 10; i++) {\n add += +cpf.charAt(i) * (11 - i);\n }\n rev = 11 - (add % 11);\n\n if (rev === 10 || rev === 11) {\n rev = 0;\n }\n\n if (rev !== +cpf.charAt(10)) {\n return false;\n }\n\n return true;\n }\n\n public static isValidCnpj(cnpj: string): boolean {\n if (StringUtil.isEmpty(cnpj)) {\n return false;\n }\n\n cnpj = StringUtil.removeAccents(cnpj);\n\n if (StringUtil.isEmpty(cnpj)\n || cnpj.length !== 14\n || cnpj === '00000000000000'\n || cnpj === '11111111111111'\n || cnpj === '22222222222222'\n || cnpj === '33333333333333'\n || cnpj === '44444444444444'\n || cnpj === '55555555555555'\n || cnpj === '66666666666666'\n || cnpj === '77777777777777'\n || cnpj === '88888888888888'\n || cnpj === '99999999999999') {\n return false;\n }\n\n let length: number = cnpj.length - 2;\n let numbers = cnpj.substring(0, length);\n const digits = cnpj.substring(length);\n let sum: number = 0;\n let pos: number = length - 7;\n\n for (let i: number = length; i >= 1; i--) {\n sum += +numbers.charAt(length - i) * pos--;\n if (pos < 2) {\n pos = 9;\n }\n }\n let resultado: number = sum % 11 < 2 ? 0 : 11 - sum % 11;\n if (resultado !== +digits.charAt(0)) {\n return false;\n }\n\n length = length + 1;\n numbers = cnpj.substring(0, length);\n sum = 0;\n pos = length - 7;\n for (let i: number = length; i >= 1; i--) {\n sum += +numbers.charAt(length - i) * pos--;\n if (pos < 2) {\n pos = 9;\n }\n }\n resultado = sum % 11 < 2 ? 0 : 11 - sum % 11;\n\n if (resultado !== +digits.charAt(1)) {\n return false;\n }\n\n return true;\n }\n\n public static isValidStateRegistration(acronymState: AcronymState, stateRegistration: string): boolean {\n if (StringUtil.isEmpty(acronymState) || StringUtil.isEmpty(stateRegistration)) {\n return false;\n } else if (stateRegistration.toUpperCase() === 'ISENTO') {\n return true;\n } else {\n if (acronymState === 'GO') {\n const digits: string = BrasilianUtil.onlyNumbers(stateRegistration);\n return this.calcDigit(digits);\n } else {\n return BrasilianUtil.isValidIE(acronymState, stateRegistration);\n }\n }\n }\n\n public static isValidCep(cep: string): boolean {\n if (StringUtil.isEmpty(cep)) {\n return false;\n }\n\n return BrasilianUtil.isValidCEP(cep);\n }\n\n private static calcDigit(ie: string): boolean {\n const length: number = ie.length;\n const position: number = length - 1;\n let weight: number = length;\n const body: string = ie.substring(0, position);\n // const bodyInt: number = parseInt(body, 10);\n let sum: number = 0;\n\n body.split('').forEach((digit) => {\n sum += parseInt(digit, 10) * weight;\n weight--;\n });\n\n const rest: number = sum % 11;\n let dig: number = 11 - rest;\n\n let fatorG: number = 0;\n if ((Number(ie) >= 101031050) && (Number(ie) <= 101199979)) {\n fatorG = 1;\n }\n\n if (dig === 10) {\n dig = fatorG;\n } else if (dig === 11) {\n dig = 0;\n }\n\n const digIe: number = parseInt(ie.charAt(position), 10);\n return dig === digIe;\n }\n\n}\n","/** @dynamic */\nexport class EmailUtil {\n\n public static isValid(value: string): boolean {\n const regex: RegExp = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n return regex.test(value)\n && (value.includes('org')\n || value.includes('.com')\n || value.includes('.br')\n || value.includes('.net')\n || value.includes('.pt')\n || value.includes('.io')\n || value.includes('.ru')\n || value.includes('.uk')\n || value.includes('.de')\n || value.includes('.tk')\n || value.includes('.info')\n || value.includes('.nl')\n || value.includes('.eu')\n || value.includes('.it')\n || value.includes('.au')\n || value.includes('.fr')\n || value.includes('.site'));\n }\n\n}\n","import * as libPhone from 'libphonenumber-js';\n\nimport { NumberUtil } from './number.util';\nimport { StringUtil } from './string.util';\n\n/** @dynamic */\nexport class PhoneUtil {\n\n public static removeCharacters(value: string): string {\n if (StringUtil.isEmpty(value)) {\n return '';\n }\n return value.replace(/\\D/g, '');\n }\n\n public static maskLib(phoneNumber: string, state?: libPhone.Examples, country: libPhone.CountryCode = 'BR'): string {\n let exampleNumber: libPhone.PhoneNumber | undefined;\n\n if (!StringUtil.isEmpty(phoneNumber)) {\n const parsedNumber = libPhone.parsePhoneNumberFromString(phoneNumber, country);\n if (parsedNumber) {\n exampleNumber = parsedNumber;\n }\n } else {\n exampleNumber = libPhone.getExampleNumber(country, state);\n }\n\n if (exampleNumber) {\n const formattedNumber = exampleNumber.formatNational();\n return formattedNumber.replace(/\\d/g, '0');\n } else {\n throw new Error('Estado não suportado ou código de estado inválido.');\n }\n }\n\n public static formatLib(phoneNumber: string, country: libPhone.CountryCode = 'BR'): string {\n try {\n const parsedNumber = libPhone.parsePhoneNumberFromString(phoneNumber, country);\n if (parsedNumber) {\n return parsedNumber.formatNational();\n } else {\n throw new Error('Número de telefone inválido.');\n }\n } catch (error) {\n throw new Error('Erro ao formatar o número de telefone: ' + error.message);\n }\n }\n\n public static format(number: string, mask?: string): string {\n let numberNotFormatted: string = NumberUtil.onlyNumbers(number);\n let phoneFormatted: string = '';\n\n if (\n (numberNotFormatted.length < 8) ||\n (numberNotFormatted.length > 12) ||\n (!this.isPossible(numberNotFormatted) && !this.isValid(numberNotFormatted))\n ) {\n return numberNotFormatted;\n }\n\n if (StringUtil.isEmpty(mask)) {\n mask = this.mask(numberNotFormatted);\n }\n\n for (let i: number = 0, j: number = 0; i < mask.length && j < numberNotFormatted.length; i++) {\n phoneFormatted += mask.charAt(i) === '0' ? numberNotFormatted.charAt(j++) : mask.charAt(i);\n }\n\n return phoneFormatted;\n }\n\n public static mask(phone: string): string {\n const specialPrefixes: string[] = ['0900', '0800', '0700', '0600', '0500', '0400', '0300', '0200', '0100'];\n let phoneAux: string = this.removeCharacters(phone.replace(/\\D/g, ''));\n\n if (\n (phoneAux.length < 8) ||\n (phoneAux.length > 12) ||\n (!this.isPossible(phoneAux) && !this.isValid(phoneAux))\n ) {\n return '0*';\n }\n\n const existInArray: boolean = specialPrefixes.some(prefix => phoneAux.startsWith(prefix));\n if (existInArray) {\n return '0000 000 0000'; // Para números especiais como 0800\n }\n\n switch (phoneAux.length) {\n case 8: return '0000-0000';\n case 9: return '0 0000-0000';\n case 10: return '(00) 0000-0000';\n case 11: return '(00) 0 0000-0000';\n case 12: return '(000) 0 0000-0000';\n default: return '0*';\n }\n }\n\n public static isPossible(phoneNumber: string, country: libPhone.CountryCode = 'BR'): boolean {\n try {\n const parsedNumber = libPhone.parsePhoneNumberFromString(phoneNumber, country);\n return parsedNumber ? parsedNumber.isPossible() : false;\n } catch (error) {\n return false;\n }\n }\n\n public static isValid(phoneNumber: string, country: libPhone.CountryCode = 'BR'): boolean {\n try {\n const parsedNumber = libPhone.parsePhoneNumberFromString(phoneNumber, country);\n return parsedNumber ? parsedNumber.isValid() : false;\n } catch (error) {\n return false;\n }\n }\n\n public static getType(phoneNumber: string, country: libPhone.CountryCode = 'BR'): libPhone.NumberType | null {\n try {\n const parsedNumber = libPhone.parsePhoneNumberFromString(phoneNumber, country);\n return parsedNumber ? parsedNumber.getType() : null;\n } catch (error) {\n return null;\n }\n }\n\n public static isEqual(phoneNumber1: string, phoneNumber2: string, country: libPhone.CountryCode = 'BR'): boolean {\n try {\n const parsedNumber1 = libPhone.parsePhoneNumberFromString(phoneNumber1, country);\n const parsedNumber2 = libPhone.parsePhoneNumberFromString(phoneNumber2, country);\n if (parsedNumber1 && parsedNumber2) {\n return parsedNumber1.isEqual(parsedNumber2);\n } else {\n return false;\n }\n } catch (error) {\n return false;\n }\n }\n\n}\n","import { TemplateRef } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AbstractModel } from '../models/abstract.model';\nimport { TableColumnDTO } from '../models/dto/table-column.dto';\nimport { BreakpointObserverService } from '../services/breakpoint-observer.service';\n\n/** @dynamic */\nexport class TableColumnBuilder {\n\n private name$: string;\n\n private property$: string;\n\n private value$: any;\n\n private sortable$ = false;\n\n private hiddenSm$ = false;\n\n private visible$ = true;\n\n private width$: Observable<number | string>;\n\n private marginLeft$: Observable<number | string>;\n\n private marginRight$: Observable<number | string>;\n\n private align$ = 'start center';\n\n private template$: TemplateRef<any>;\n\n private templateHeader$: TemplateRef<any>;\n\n private sliceLength$: number;\n\n private action$: (obj: AbstractModel) => void;\n\n private breakpointObserverService$: BreakpointObserverService;\n\n constructor(breakpointObserverService?: BreakpointObserverService) {\n this.breakpointObserverService$ = breakpointObserverService;\n }\n\n public static instance(breakpointObserverService?: BreakpointObserverService): TableColumnBuilder {\n return new TableColumnBuilder(breakpointObserverService);\n }\n\n public name(name: any): TableColumnBuilder {\n this.name$ = name;\n return this;\n }\n\n public property(property: any): TableColumnBuilder {\n this.property$ = property;\n return this;\n }\n\n public value(value: any): TableColumnBuilder {\n this.value$ = value;\n return this;\n }\n\n public sortable(sortable: boolean): TableColumnBuilder {\n this.sortable$ = sortable;\n return this;\n }\n\n public hiddenSm(hiddenSm: boolean): TableColumnBuilder {\n this.hiddenSm$ = hiddenSm;\n return this;\n }\n\n public visible(visible: boolean): TableColumnBuilder {\n this.visible$ = visible;\n return this;\n }\n\n public width(width: number | string): TableColumnBuilder {\n this.width$ = of(width);\n return this;\n }\n\n public marginLeft(marginLeft: number | string): TableColumnBuilder {\n this.marginLeft$ = of(marginLeft);\n return this;\n }\n\n public marginRight(marginRight: number | string): TableColumnBuilder {\n this.marginRight$ = of(marginRight);\n return this;\n }\n\n public align(align: string): TableColumnBuilder {\n this.align$ = align;\n return this;\n }\n\n public breakpointWidth(breakpointMap: Map<string, string | number>): TableColumnBuilder {\n this.width$ = this.breakpointObserverService$.size$.pipe(map(breakpoint => {\n if (breakpointMap.has(breakpoint)) {\n return breakpointMap.get(breakpoint);\n }\n return 'auto';\n }));\n return this;\n }\n\n public template(template: TemplateRef<any>): TableColumnBuilder {\n this.template$ = template;\n return this;\n }\n\n public templateHeader(templateHeader: TemplateRef<any>): TableColumnBuilder {\n this.templateHeader$ = templateHeader;\n return this;\n }\n\n public sliceLength(sliceLength: number): TableColumnBuilder {\n this.sliceLength$ = sliceLength;\n return this;\n }\n\n public action(action: (obj: AbstractModel) => void): TableColumnBuilder {\n this.action$ = action;\n return this;\n }\n\n public build(): TableColumnDTO {\n return new TableColumnDTO(\n this.name$,\n this.property$,\n this.value$,\n this.sortable$,\n this.hiddenSm$,\n this.visible$,\n this.width$,\n this.marginLeft$,\n this.marginRight$,\n this.align$,\n this.template$,\n this.templateHeader$,\n this.sliceLength$,\n this.action$\n );\n }\n\n}\n","/** @dynamic */\nexport class URLParamsUtil {\n\n /** @Internal */\n private static _queryParams: URLSearchParams = new URLSearchParams(window.location.href);\n\n public static get(param: string): any {\n return this._queryParams.get(param);\n }\n\n public static has(param: string): boolean {\n return this._queryParams.has(param);\n }\n\n}\n","import { ɵComponentDef as ComponentDef, ɵɵdirectiveInject as directiveInject } from '@angular/core';\nimport { ObjectUtil } from '../../utils/object.util';\n\nexport type GIPIKey = string | symbol;\n\nexport type ClassRef<T = any> = new (...args: any[]) => T;\n\nexport const ƟPROV: 'ɵprov' = 'ɵprov';\nexport const ƟFAC: 'ɵfac' = 'ɵfac';\nexport const ƟCMP: 'ɵcmp' = 'ɵcmp';\n\nexport function getReflectType<T = any>(target: Object, propertyKey: string | symbol): ClassRef<T> {\n if (!(Reflect as any).getMetadata) {\n throw new Error(`You forgot add \"import 'reflect-metadata';\" to polyfills.ts`);\n }\n return (Reflect as any).getMetadata('design:type', target, propertyKey);\n}\n\nexport function GIPIAutowired(): PropertyDecorator {\n return (target: Object, propertyKey: GIPIKey) => {\n const isJIT: boolean = !target.constructor[ƟCMP];\n const classRef: ClassRef = getReflectType(target, propertyKey);\n\n // const inject = () => {\n // const compDef: ComponentDef<any> = target.constructor[ƟCMP];\n // const compFactory: any = compDef.factory || target.constructor[ƟFAC];\n // compDef.factory = function (...args: any[]) {\n // const instance = compFactory(...args);\n // instance[propertyKey] = directiveInject(classRef);\n // return instance;\n // }\n // };\n\n const inject = () => {\n const compDef: ComponentDef<any> = target.constructor[ƟCMP];\n let compFactory: any = null;\n if (!ObjectUtil.isNull(compDef)) {\n compFactory = compDef.factory;\n } else {\n compFactory = target.constructor[ƟFAC];\n }\n\n compDef.factory = function (...args: any[]) {\n const instance = compFactory(...args);\n instance[propertyKey] = directiveInject(classRef);\n return instance;\n }\n };\n\n isJIT\n ? Promise.resolve().then(inject).catch(() => {\n throw new Error(`An error occurred while injecting the class: ${classRef}`)\n })\n : inject();\n };\n}\n","import { GIPISortModel } from './sort.model';\n\nexport class GIPIAbstractFilterModel {\n\n sorts: GIPISortModel[];\n\n pageNumber: number;\n\n pageSize: number;\n\n offset: number;\n\n /** @Transient */\n originScreen: string;\n\n}\n","import { GIPIUuid } from '../types/uuid.type';\n\nexport abstract class GIPIAbstractModel {\n\n id: GIPIUuid;\n\n enabled: boolean;\n\n /** @Transient */\n selected: boolean;\n\n}\n","export class GIPIAppliedFilter<T = any> {\n\n private _description: string;\n\n private _key: T;\n\n constructor(description: string, key: T) {\n this.description = description;\n this.key = key;\n }\n\n public set description(description: string) {\n this._description = description;\n }\n public get description(): string {\n return this._description;\n }\n\n public set key(key: T) {\n this._key = key;\n }\n public get key(): T {\n return this._key;\n }\n\n}\n","import { GIPIUuid } from '../../types/uuid.type';\n\nexport abstract class GIPIAbstractDTO {\n\n id: GIPIUuid;\n\n enabled: boolean;\n\n /** @Transient */\n selected: boolean;\n\n}\n","export class GIPIPageEvent {\n\n /** The current page index. */\n private _pageIndex: number;\n\n /** The current page size */\n private _pageSize: number;\n\n /** The current total number of items being paged */\n private _length: number;\n\n constructor(\n pageIndex?: number,\n pageSize?: number,\n length?: number\n ) {\n if (pageIndex && pageIndex >= 0) {\n this.pageIndex = pageIndex;\n }\n if (pageSize && pageSize >= 0) {\n this.pageSize = pageSize;\n }\n if (length && length >= 0) {\n this.length = length;\n }\n }\n\n /** O índice da página atual. */\n public get pageIndex(): number {\n return this._pageIndex;\n }\n public set pageIndex(value: number) {\n this._pageIndex = value;\n }\n\n /** O tamanho da página atual */\n public get pageSize(): number {\n return this._pageSize;\n }\n public set pageSize(value: number) {\n this._pageSize = value;\n }\n\n /** O número total atual de itens sendo paginados */\n public get length(): number {\n return this._length;\n }\n public set length(value: number) {\n this._length = value;\n }\n\n}\n","import {ElementRef, Injectable, Injector, ViewContainerRef} from '@angular/core';\nimport {ConnectionPositionPair, Overlay, OverlayConfig, OverlayRef, PositionStrategy} from '@angular/cdk/overlay';\nimport {ComponentPortal, PortalInjector} from '@angular/cdk/portal';\n\nimport {PopoverContent, PopoverRef} from './popover-ref';\nimport {PopoverComponent} from './popover.component';\nimport {ObjectUtil} from '../../../core/utils/object.util';\n\nexport interface PopoverParams<T> {\n width?: string | number;\n height?: string | number;\n origin: ElementRef | HTMLElement;\n content: PopoverContent;\n data?: T;\n event?: MouseEvent;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PopoverService {\n\n\n constructor(private overlay: Overlay, private injector: Injector) {\n }\n\n open<T>({origin, content, data, width, height, event}: PopoverParams<T>): PopoverRef<T> {\n const overlayRef = this.overlay.create(this.getOverlayConfig({origin, width, height, event}));\n const popoverRef = new PopoverRef<T>(overlayRef, content, data);\n const injector = this.createInjector(popoverRef, this.injector);\n overlayRef.attach(new ComponentPortal(PopoverComponent, null, injector));\n\n return popoverRef;\n }\n\n private getOverlayConfig({origin, width, height, event}): OverlayConfig {\n return new OverlayConfig({\n hasBackdrop: true,\n width,\n height,\n backdropClass: 'popover-backdrop',\n positionStrategy: this.getOverlayPosition(origin, event),\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n }\n\n private getOverlayPosition(origin: ElementRef | HTMLElement, event?: MouseEvent): PositionStrategy {\n // @ts-ignore\n const offset = event.target.offsetTop - document.querySelector('.mat-sidenav-content').scrollTop;\n if (event) {\n return this.overlay.position()\n .global()\n .top(`${(offset + 50)}px`)\n .left(`${(event.clientX - 30)}px`);\n }\n return this.overlay.position()\n .flexibleConnectedTo(origin)\n .withPositions(this.getPositions())\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n updatePosition(popoverRef: PopoverRef, event: MouseEvent): void {\n popoverRef.overlay.updatePositionStrategy(this.overlay.position()\n .global()\n .top(`${event.clientY}px`)\n .left(`${event.clientX}px`));\n }\n\n createInjector(popoverRef: PopoverRef, injector: Injector) {\n const tokens = new WeakMap([[PopoverRef, popoverRef]]);\n return new PortalInjector(injector, tokens);\n }\n\n private getPositions(): ConnectionPositionPair[] {\n return [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n ];\n }\n\n}\n","import { TemplateRef } from '@angular/core';\n\nimport { PipeTransformModel } from './pipe-transform.model';\n\nexport class TableColumnModel {\n\n private _name: string;\n\n private _property: string;\n\n private _value: string | number | Date | ((obj: object) => string | number);\n\n private _sortable: boolean = false;\n\n private _visible: boolean = true;\n\n private _checkboxable: boolean = false;\n\n private _columnSpan: number;\n\n private _columnSpanXs: number;\n\n private _columnSpanSm: number;\n\n private _columnSpanMd: number;\n\n private _columnSpanLg: number;\n\n private _columnSpanXl: number;\n\n private _minWidth: number;\n\n private _maxWidth: number;\n\n private _paddingInline: number;\n\n private _align: 'left' | 'center' | 'right';\n\n private _templateCell: TemplateRef<any>;\n\n private _templateHeader: TemplateRef<any>;\n\n private _sliceLength: number;\n\n /**\n * Sort comparator\n */\n private _comparator: any;\n\n private _pipe: PipeTransformModel;\n\n private _action: (obj: any) => void;\n\n constructor(\n name: string,\n property: string,\n value: string | number | Date | ((obj: object) => string | number),\n sortable: boolean,\n visible: boolean,\n checkboxable: boolean,\n columnSpan: number,\n columnSpanXs: number,\n columnSpanSm: number,\n columnSpanMd: number,\n columnSpanLg: number,\n columnSpanXl: number,\n minWidth: number,\n maxWidth: number,\n paddingInline: number,\n align: 'left' | 'center' | 'right',\n templateCell: TemplateRef<any>,\n templateHeader: TemplateRef<any>,\n sliceLength: number,\n comparator: any,\n pipe: PipeTransformModel,\n action: (obj: any) => void,\n ) {\n this._name = name;\n this._property = property;\n this._value = value;\n this._sortable = sortable;\n this._visible = visible;\n this._checkboxable = checkboxable;\n this._columnSpan = columnSpan;\n this._columnSpanXs = columnSpanXs;\n this._columnSpanSm = columnSpanSm;\n this._columnSpanMd = columnSpanMd;\n this._columnSpanLg = columnSpanLg;\n this._columnSpanXl = columnSpanXl;\n this._minWidth = minWidth;\n this._maxWidth = maxWidth;\n this._paddingInline = paddingInline;\n this._align = align;\n this._templateCell = templateCell;\n this._templateHeader = templateHeader;\n this._sliceLength = sliceLength;\n this._comparator = comparator;\n this._pipe = pipe;\n this._action = action;\n }\n\n public get name(): string {\n return this._name;\n }\n public set name(value: string) {\n this._name = value;\n }\n\n public get property(): string {\n return this._property;\n }\n public set property(value: string) {\n this._property = value;\n }\n\n public get value(): string | number | Date | ((obj: object) => string | number) {\n return this._value;\n }\n public set value(value: string | number | Date | ((obj: object) => string | number)) {\n this._value = value;\n }\n\n public get sortable(): boolean {\n return this._sortable;\n }\n public set sortable(value: boolean) {\n this._sortable = value;\n }\n\n public get visible(): boolean {\n return this._visible;\n }\n public set visible(value: boolean) {\n this._visible = value;\n }\n\n public get checkboxable(): boolean {\n return this._checkboxable;\n }\n public set checkboxable(value: boolean) {\n this._checkboxable = value;\n }\n\n public get columnSpan(): number {\n return this._columnSpan;\n }\n public set columnSpan(value: number) {\n this._columnSpan = value;\n }\n\n public get columnSpanXs(): number {\n return this._columnSpanXs;\n }\n public set columnSpanXs(value: number) {\n this._columnSpanXs = value;\n }\n\n public get columnSpanSm(): number {\n return this._columnSpanSm;\n }\n public set columnSpanSm(value: number) {\n this._columnSpanSm = value;\n }\n\n public get columnSpanMd(): number {\n return this._columnSpanMd;\n }\n public set columnSpanMd(value: number) {\n this._columnSpanMd = value;\n }\n\n public get columnSpanLg(): number {\n return this._columnSpanLg;\n }\n public set columnSpanLg(value: number) {\n this._columnSpanLg = value;\n }\n\n public get columnSpanXl(): number {\n return this._columnSpanXl;\n }\n public set columnSpanXl(value: number) {\n this._columnSpanXl = value;\n }\n\n public get minWidth(): number {\n return this._minWidth;\n }\n public set minWidth(value: number) {\n this._minWidth = value;\n }\n\n public get maxWidth(): number {\n return this._maxWidth;\n }\n public set maxWidth(value: number) {\n this._maxWidth = value;\n }\n\n public get paddingInline(): number {\n return this._paddingInline;\n }\n public set paddingInline(value: number) {\n this._paddingInline = value;\n }\n\n public get align(): 'left' | 'center' | 'right' {\n return this._align;\n }\n public set align(value: 'left' | 'center' | 'right') {\n this._align = value;\n }\n\n public get templateCell(): TemplateRef<any> {\n return this._templateCell;\n }\n public set templateCell(value: TemplateRef<any>) {\n this._templateCell = value;\n }\n\n public get templateHeader(): TemplateRef<any> {\n return this._templateHeader;\n }\n public set templateHeader(value: TemplateRef<any>) {\n this._templateHeader = value;\n }\n\n public get sliceLength(): number {\n return this._sliceLength;\n }\n public set sliceLength(value: number) {\n this._sliceLength = value;\n }\n\n public get comparator(): any {\n return this._comparator;\n }\n public set comparator(value: any) {\n this._comparator = value;\n }\n\n public get pipe(): PipeTransformModel {\n return this._pipe;\n }\n public set pipe(value: PipeTransformModel) {\n this._pipe = value;\n }\n\n public get action(): (obj: any) => void {\n return this._action;\n }\n public set action(value: (obj: any) => void) {\n this._action = value;\n }\n\n}\n","import { TemplateRef } from '@angular/core';\n\nimport { PipeTransformModel } from './pipe-transform.model';\nimport { TableColumnModel } from './table-column.model';\n\nexport class TableColumnBuilderModel {\n\n private _name$: string;\n\n private _property$: string;\n\n private _value$: string | number | Date | ((obj: object) => string | number);\n\n private _sortable$: boolean = false;\n\n private _visible$: boolean = true;\n\n private _checkboxable$: boolean = false;\n\n private _columnSpan$: number;\n\n private _columnSpanXs$: number;\n\n private _columnSpanSm$: number;\n\n private _columnSpanMd$: number;\n\n private _columnSpanLg$: number;\n\n private _columnSpanXl$: number;\n\n private _minWidth$: number;\n\n private _maxWidth$: number;\n\n private _paddingInline$: number;\n\n private _align$: 'left' | 'center' | 'right' = 'left';\n\n private _templateCell$: TemplateRef<any>;\n\n private _templateHeader$: TemplateRef<any>;\n\n private _sliceLength$: number;\n\n private _comparator$: number;\n\n private _pipe$: PipeTransformModel;\n\n private _action$: (obj: any) => void;\n\n constructor() { }\n\n public static instance(): TableColumnBuilderModel {\n return new TableColumnBuilderModel();\n }\n\n public name(name: string): TableColumnBuilderModel {\n this._name$ = name;\n return this;\n }\n\n public property(property: string): TableColumnBuilderModel {\n this._property$ = property;\n return this;\n }\n\n public value(value: string | number | Date | ((obj: object) => string | number)): TableColumnBuilderModel {\n this._value$ = value;\n return this;\n }\n\n public sortable(sortable: boolean): TableColumnBuilderModel {\n this._sortable$ = sortable;\n return this;\n }\n\n public visible(visible: boolean): TableColumnBuilderModel {\n this._visible$ = visible;\n return this;\n }\n\n public checkboxable(checkboxable: boolean): TableColumnBuilderModel {\n this._checkboxable$ = checkboxable;\n return this;\n }\n\n public columnSpan(columnSpan: number): TableColumnBuilderModel {\n this._columnSpan$ = columnSpan;\n return this;\n }\n\n public columnSpanXs(columnSpanXs: number): TableColumnBuilderModel {\n this._columnSpanXs$ = columnSpanXs;\n return this;\n }\n\n public columnSpanSm(columnSpanSm: number): TableColumnBuilderModel {\n this._columnSpanSm$ = columnSpanSm;\n return this;\n }\n\n public columnSpanMd(columnSpanMd: number): TableColumnBuilderModel {\n this._columnSpanMd$ = columnSpanMd;\n return this;\n }\n\n public columnSpanLg(columnSpanLg: number): TableColumnBuilderModel {\n this._columnSpanLg$ = columnSpanLg;\n return this;\n }\n\n public columnSpanXl(columnSpanXl: number): TableColumnBuilderModel {\n this._columnSpanXl$ = columnSpanXl;\n return this;\n }\n\n public minWidth(minWidth: number): TableColumnBuilderModel {\n this._minWidth$ = minWidth;\n return this;\n }\n\n public maxWidth(maxWidth: number): TableColumnBuilderModel {\n this._maxWidth$ = maxWidth;\n return this;\n }\n\n public paddingInline(paddingInline: number): TableColumnBuilderModel {\n this._paddingInline$ = paddingInline;\n return this;\n }\n\n public align(align: 'left' | 'center' | 'right'): TableColumnBuilderModel {\n this._align$ = align;\n return this;\n }\n\n public templateCell(templateCell: TemplateRef<any>): TableColumnBuilderModel {\n this._templateCell$ = templateCell;\n return this;\n }\n\n public templateHeader(templateHeader: TemplateRef<any>): TableColumnBuilderModel {\n this._templateHeader$ = templateHeader;\n return this;\n }\n\n public sliceLength(sliceLength: number): TableColumnBuilderModel {\n this._sliceLength$ = sliceLength;\n return this;\n }\n\n public comparator(comparator: number): TableColumnBuilderModel {\n this._comparator$ = comparator;\n return this;\n }\n\n public pipe(pipe: PipeTransformModel): TableColumnBuilderModel {\n this._pipe$ = pipe;\n return this;\n }\n\n public action(action: (obj: any) => void): TableColumnBuilderModel {\n this._action$ = action;\n return this;\n }\n\n public build(): TableColumnModel {\n return new TableColumnModel(\n this._name$,\n this._property$,\n this._value$,\n this._sortable$,\n this._visible$,\n this._checkboxable$,\n this._columnSpan$,\n this._columnSpanXs$,\n this._columnSpanSm$,\n this._columnSpanMd$,\n this._columnSpanLg$,\n this._columnSpanXl$,\n this._minWidth$,\n this._maxWidth$,\n this._paddingInline$,\n this._align$,\n this._templateCell$,\n this._templateHeader$,\n this._sliceLength$,\n this._comparator$,\n this._pipe$,\n this._action$,\n );\n }\n\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { MatDateFormats } from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n parse: {\n dateInput: null,\n },\n display: {\n dateInput: { year: 'numeric', month: 'numeric', day: 'numeric' },\n monthYearLabel: { year: 'numeric', month: 'short' },\n dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n monthYearA11yLabel: { year: 'numeric', month: 'long' },\n }\n};\n"]}
|