@testgorilla/tgo-ui 8.19.1 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/accordion/index.d.ts +7 -7
- package/components/ai-audio-circle/index.d.ts +3 -3
- package/components/ai-caveat/index.d.ts +5 -5
- package/components/ai-feedback/index.d.ts +14 -14
- package/components/alert-banner/index.d.ts +8 -8
- package/components/autocomplete/index.d.ts +15 -16
- package/components/autocomplete-v2/index.d.ts +45 -35
- package/components/avatar/index.d.ts +7 -7
- package/components/badge/index.d.ts +6 -6
- package/components/breadcrumb/index.d.ts +11 -11
- package/components/button/index.d.ts +23 -13
- package/components/card/index.d.ts +4 -4
- package/components/checkbox/index.d.ts +24 -24
- package/components/core/index.d.ts +39 -31
- package/components/datepicker/index.d.ts +18 -18
- package/components/dialog/index.d.ts +29 -21
- package/components/divider/index.d.ts +4 -4
- package/components/donut-chart/index.d.ts +3 -3
- package/components/dropdown/index.d.ts +37 -33
- package/components/elevation-shadow/index.d.ts +3 -3
- package/components/empty-state/index.d.ts +7 -7
- package/components/field/index.d.ts +33 -44
- package/components/file-upload/index.d.ts +14 -13
- package/components/filter-button/index.d.ts +19 -19
- package/components/gaussian-chart/index.d.ts +8 -8
- package/components/icon/index.d.ts +20 -18
- package/components/icon-label/index.d.ts +5 -5
- package/components/inline-field/index.d.ts +20 -24
- package/components/logo/index.d.ts +2 -3
- package/components/media-dialog/index.d.ts +3 -3
- package/components/multi-input/index.d.ts +25 -16
- package/components/navbar/index.d.ts +30 -30
- package/components/overflow-menu/index.d.ts +20 -19
- package/components/page-header/index.d.ts +5 -5
- package/components/paginator/index.d.ts +4 -4
- package/components/password-criteria/index.d.ts +13 -12
- package/components/password-strength/index.d.ts +6 -6
- package/components/phone-input/index.d.ts +28 -30
- package/components/progress-bar/index.d.ts +5 -5
- package/components/prompt/index.d.ts +25 -25
- package/components/radial-progress/index.d.ts +5 -5
- package/components/radio-button/index.d.ts +28 -29
- package/components/rating/index.d.ts +5 -5
- package/components/scale/index.d.ts +4 -4
- package/components/segmented-bar/index.d.ts +8 -8
- package/components/segmented-button/index.d.ts +17 -16
- package/components/selectable-card/index.d.ts +6 -6
- package/components/side-navigation/index.d.ts +14 -14
- package/components/side-panel/index.d.ts +8 -8
- package/components/side-sheet/index.d.ts +19 -17
- package/components/snackbar/index.d.ts +16 -15
- package/components/spider-chart/index.d.ts +12 -12
- package/components/spinner/index.d.ts +5 -5
- package/components/stepper/index.d.ts +35 -35
- package/components/table/index.d.ts +36 -34
- package/components/tabs/index.d.ts +18 -17
- package/components/tag/index.d.ts +10 -10
- package/components/toggle/index.d.ts +10 -9
- package/components/tooltip/index.d.ts +16 -18
- package/components/universal-skills/index.d.ts +16 -16
- package/components/validation-error/index.d.ts +22 -10
- package/components/write-with-ai/index.d.ts +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +36 -15
- package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs +7 -10
- package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +39 -27
- package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +25 -14
- package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +4 -2
- package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +147 -121
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +47 -48
- package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +30 -18
- package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +25 -18
- package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs +155 -120
- package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-card.mjs +7 -9
- package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +51 -47
- package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-core.mjs +2232 -2210
- package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +44 -25
- package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +55 -31
- package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +8 -11
- package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +8 -10
- package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +105 -90
- package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +5 -7
- package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +24 -13
- package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs +65 -57
- package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +35 -23
- package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +34 -27
- package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +26 -16
- package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +6 -7
- package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +63 -57
- package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +24 -24
- package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +6 -6
- package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +6 -6
- package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +4 -4
- package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +42 -21
- package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +44 -32
- package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +39 -21
- package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +10 -14
- package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +7 -9
- package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +33 -20
- package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +82 -73
- package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +8 -11
- package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +47 -40
- package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +7 -10
- package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +43 -48
- package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +7 -12
- package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +6 -10
- package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +30 -16
- package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +15 -14
- package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +8 -11
- package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +27 -21
- package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +5 -2
- package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +34 -26
- package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +5 -5
- package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +10 -10
- package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +31 -20
- package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +28 -23
- package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +9 -12
- package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +85 -79
- package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs +74 -51
- package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +57 -25
- package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +16 -17
- package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +25 -17
- package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +44 -28
- package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +34 -27
- package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +30 -14
- package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +13 -11
- package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
- package/fesm2022/testgorilla-tgo-ui.mjs +6 -8
- package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
- package/index.d.ts +4 -4
- package/mcp/catalog.json +1 -1
- package/package.json +1 -2
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Output, Input, Optional, Inject, Component, NgModule } from '@angular/core';
|
|
3
|
-
import
|
|
4
|
-
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
2
|
+
import { EventEmitter, Output, Input, Optional, Inject, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
5
4
|
import { CommonModule } from '@angular/common';
|
|
6
5
|
|
|
7
6
|
class PaginatorComponent {
|
|
@@ -62,11 +61,11 @@ class PaginatorComponent {
|
|
|
62
61
|
this.paginatorChange.emit(paginator);
|
|
63
62
|
}
|
|
64
63
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PaginatorComponent, isStandalone:
|
|
64
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: PaginatorComponent, isStandalone: true, selector: "ui-paginator", inputs: { pageSizeOptions: "pageSizeOptions", length: "length", pageSize: "pageSize", disabled: "disabled", applicationTheme: "applicationTheme", currentPage: "currentPage" }, outputs: { paginatorChange: "paginatorChange" }, ngImport: i0, template: "<mat-paginator\n [disabled]=\"disabled\"\n [length]=\"length\"\n [pageIndex]=\"currentPage ? currentPage : 0\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [attr.theme]=\"applicationTheme\"\n [selectConfig]=\"selectConfig\"\n [color]=\"'accent'\"\n (page)=\"onPaginatorChange($event)\"\n></mat-paginator>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.flex-center,::ng-deep .mat-mdc-paginator .mat-mdc-select-arrow-wrapper,::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button{display:flex;justify-content:center;align-items:center}::ng-deep .mat-mdc-paginator{border-radius:0 0 8px 8px}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions{height:40px!important;margin-left:16px!important}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions .mat-mdc-paginator-range-label{margin:0 16px 0 0}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button{width:40px!important;padding:0}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button.mat-mdc-button-disabled svg{fill:#919191!important}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button svg{height:24px!important;width:24px!important}::ng-deep .mat-mdc-paginator .mat-mdc-select-arrow-wrapper{width:24px}::ng-deep .mat-mdc-paginator .mat-mdc-form-field-infix{padding:4px 0!important;min-height:28px!important}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select{width:64px}::ng-deep .mat-mdc-paginator .mat-mdc-text-field-wrapper{height:32px!important;padding:0 8px;width:64px}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container{border-radius:0 0 8px 8px;font-weight:400;font-size:14px;padding:8px 24px;line-height:20px;color:#000}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container{padding:0}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container .mat-mdc-select-value-text{font-size:14px}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container .mat-mdc-paginator-range-actions{height:100%}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container .mat-mdc-paginator-range-actions button{height:100%;width:70px;border-radius:0}::ng-deep .mat-mdc-paginator[theme=dark] .mdc-icon-button__ripple,::ng-deep .mat-mdc-paginator[theme=light] .mdc-icon-button__ripple{display:none}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button{border-radius:50%!important}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused{padding:1px;border:1px dashed #888888;outline:0}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:active,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:active{transform:scale(.98)}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button .mat-mdc-button-touch-target,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button .mat-mdc-button-touch-target{width:40px;height:40px}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button{color:#242424!important}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button svg{fill:#242424}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:hover{background-color:#e9e9e9}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused{border-color:#666}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button{color:#fff!important}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button svg{fill:#fff!important}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:hover{background-color:#666}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused{border-color:#e9e9e9}\n"], dependencies: [{ kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
66
65
|
}
|
|
67
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponent, decorators: [{
|
|
68
67
|
type: Component,
|
|
69
|
-
args: [{ selector: 'ui-paginator',
|
|
68
|
+
args: [{ selector: 'ui-paginator', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatPaginator], template: "<mat-paginator\n [disabled]=\"disabled\"\n [length]=\"length\"\n [pageIndex]=\"currentPage ? currentPage : 0\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [attr.theme]=\"applicationTheme\"\n [selectConfig]=\"selectConfig\"\n [color]=\"'accent'\"\n (page)=\"onPaginatorChange($event)\"\n></mat-paginator>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.flex-center,::ng-deep .mat-mdc-paginator .mat-mdc-select-arrow-wrapper,::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button{display:flex;justify-content:center;align-items:center}::ng-deep .mat-mdc-paginator{border-radius:0 0 8px 8px}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions{height:40px!important;margin-left:16px!important}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions .mat-mdc-paginator-range-label{margin:0 16px 0 0}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button{width:40px!important;padding:0}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button.mat-mdc-button-disabled svg{fill:#919191!important}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-range-actions button svg{height:24px!important;width:24px!important}::ng-deep .mat-mdc-paginator .mat-mdc-select-arrow-wrapper{width:24px}::ng-deep .mat-mdc-paginator .mat-mdc-form-field-infix{padding:4px 0!important;min-height:28px!important}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-page-size-select{width:64px}::ng-deep .mat-mdc-paginator .mat-mdc-text-field-wrapper{height:32px!important;padding:0 8px;width:64px}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container{border-radius:0 0 8px 8px;font-weight:400;font-size:14px;padding:8px 24px;line-height:20px;color:#000}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container{padding:0}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container .mat-mdc-select-value-text{font-size:14px}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container .mat-mdc-paginator-range-actions{height:100%}::ng-deep .mat-mdc-paginator .mat-mdc-paginator-outer-container .mat-mdc-paginator-container .mat-mdc-paginator-range-actions button{height:100%;width:70px;border-radius:0}::ng-deep .mat-mdc-paginator[theme=dark] .mdc-icon-button__ripple,::ng-deep .mat-mdc-paginator[theme=light] .mdc-icon-button__ripple{display:none}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button{border-radius:50%!important}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused{padding:1px;border:1px dashed #888888;outline:0}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:active,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:active{transform:scale(.98)}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button .mat-mdc-button-touch-target,::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button .mat-mdc-button-touch-target{width:40px;height:40px}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button{color:#242424!important}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button svg{fill:#242424}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:hover{background-color:#e9e9e9}::ng-deep .mat-mdc-paginator[theme=light] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused{border-color:#666}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button{color:#fff!important}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button svg{fill:#fff!important}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:hover{background-color:#666}::ng-deep .mat-mdc-paginator[theme=dark] .mat-mdc-paginator-range-actions .mdc-icon-button:focus.cdk-focused{border-color:#e9e9e9}\n"] }]
|
|
70
69
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
71
70
|
type: Optional
|
|
72
71
|
}, {
|
|
@@ -90,14 +89,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
90
89
|
|
|
91
90
|
class PaginatorComponentModule {
|
|
92
91
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
93
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponentModule,
|
|
94
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponentModule, imports: [CommonModule, MatPaginatorModule] }); }
|
|
92
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponentModule, imports: [CommonModule, MatPaginatorModule, PaginatorComponent], exports: [PaginatorComponent] }); }
|
|
93
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponentModule, imports: [CommonModule, MatPaginatorModule, PaginatorComponent] }); }
|
|
95
94
|
}
|
|
96
95
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PaginatorComponentModule, decorators: [{
|
|
97
96
|
type: NgModule,
|
|
98
97
|
args: [{
|
|
99
|
-
|
|
100
|
-
imports: [CommonModule, MatPaginatorModule],
|
|
98
|
+
imports: [CommonModule, MatPaginatorModule, PaginatorComponent],
|
|
101
99
|
exports: [PaginatorComponent],
|
|
102
100
|
}]
|
|
103
101
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-paginator.mjs","sources":["../../../components/paginator/paginator.component.ts","../../../components/paginator/paginator.component.html","../../../components/paginator/paginator.component.module.ts","../../../components/paginator/testgorilla-tgo-ui-components-paginator.ts"],"sourcesContent":["import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';\nimport { MatPaginatorSelectConfig, PageEvent } from '@angular/material/paginator';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\n\n@Component({\n selector: 'ui-paginator',\n templateUrl: './paginator.component.html',\n styleUrls: ['./paginator.component.scss'],\n
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-paginator.mjs","sources":["../../../components/paginator/paginator.component.ts","../../../components/paginator/paginator.component.html","../../../components/paginator/paginator.component.module.ts","../../../components/paginator/testgorilla-tgo-ui-components-paginator.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';\nimport { MatPaginatorSelectConfig, PageEvent, MatPaginator } from '@angular/material/paginator';\n\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\n\n@Component({\n selector: 'ui-paginator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './paginator.component.html',\n styleUrls: ['./paginator.component.scss'],\n imports: [MatPaginator],\n})\nexport class PaginatorComponent {\n /**\n * Paginator size options\n *\n * @type {number[]}\n * @memberof PaginatorComponent\n */\n @Input() pageSizeOptions = [10, 25, 50];\n\n /**\n * Data length\n *\n * @type {number}\n * @memberof PaginatorComponent\n */\n @Input() length = 0;\n\n /**\n * Page size\n *\n * @type {number}\n * @memberof PaginatorComponent\n */\n @Input() pageSize = 25;\n\n /**\n * Disabled\n *\n * @type {boolean}\n * @memberOf PaginatorComponent\n */\n @Input() disabled = false;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof PaginatorComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n *\n * Defines the current page\n * @default 0\n *\n * @type {number}\n * @memberof PaginatorComponent\n */\n @Input() currentPage = 0;\n\n @Output() paginatorChange: EventEmitter<PageEvent> = new EventEmitter<PageEvent>();\n\n selectConfig: MatPaginatorSelectConfig = { panelClass: 'ui-dropdown-list' };\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n onPaginatorChange(paginator: PageEvent) {\n this.paginatorChange.emit(paginator);\n }\n}\n","<mat-paginator\n [disabled]=\"disabled\"\n [length]=\"length\"\n [pageIndex]=\"currentPage ? currentPage : 0\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [attr.theme]=\"applicationTheme\"\n [selectConfig]=\"selectConfig\"\n [color]=\"'accent'\"\n (page)=\"onPaginatorChange($event)\"\n></mat-paginator>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatPaginatorModule } from '@angular/material/paginator';\n\nimport { PaginatorComponent } from './paginator.component';\n\n@NgModule({\n imports: [CommonModule, MatPaginatorModule, PaginatorComponent],\n exports: [PaginatorComponent],\n})\nexport class PaginatorComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
+
import { NgClass, AsyncPipe, CommonModule } from '@angular/common';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, forwardRef, ViewChild, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
|
-
import * as i3 from '@angular/forms';
|
|
4
|
-
import { FormControl, Validators, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { EventEmitter, inject, ChangeDetectorRef, forwardRef, ViewChild, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
5
4
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
-
import * as i1 from '@angular/
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';
|
|
10
|
-
import * as
|
|
5
|
+
import * as i1 from '@angular/forms';
|
|
6
|
+
import { FormControl, Validators, FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
7
|
+
import { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
|
|
8
|
+
import { FieldComponent, FieldComponentModule } from '@testgorilla/tgo-ui/components/field';
|
|
9
|
+
import * as i3 from '@testgorilla/tgo-ui/components/icon';
|
|
11
10
|
import { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
|
|
12
|
-
import * as
|
|
11
|
+
import * as i2 from '@testgorilla/tgo-ui/components/progress-bar';
|
|
13
12
|
import { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';
|
|
14
|
-
import * as i6 from '@testgorilla/tgo-ui/components/core';
|
|
15
|
-
import { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
|
|
16
13
|
|
|
17
14
|
class PasswordComponent {
|
|
18
15
|
constructor(destroyRef) {
|
|
@@ -33,6 +30,7 @@ class PasswordComponent {
|
|
|
33
30
|
this.required = false;
|
|
34
31
|
this.passwordChange = new EventEmitter();
|
|
35
32
|
this.allCriteriaPassed = new EventEmitter();
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method -- Validators.required is a static Angular validator with no `this` binding
|
|
36
34
|
this.formControl = new FormControl('', Validators.required);
|
|
37
35
|
this.criteriaPassed = {};
|
|
38
36
|
this.criteria = [
|
|
@@ -44,6 +42,7 @@ class PasswordComponent {
|
|
|
44
42
|
];
|
|
45
43
|
this.onChange = (_v) => { };
|
|
46
44
|
this.onTouch = () => { };
|
|
45
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
47
46
|
this.formControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
48
47
|
this.checkCriteria();
|
|
49
48
|
});
|
|
@@ -73,7 +72,10 @@ class PasswordComponent {
|
|
|
73
72
|
return count;
|
|
74
73
|
}
|
|
75
74
|
writeValue(obj) {
|
|
76
|
-
this.formControl.setValue(obj);
|
|
75
|
+
this.formControl.setValue(obj ?? null);
|
|
76
|
+
// setValue() re-evaluates the criteria fields the template renders; the
|
|
77
|
+
// forms API calls this from outside the component's own change detection.
|
|
78
|
+
this.cdr.markForCheck();
|
|
77
79
|
}
|
|
78
80
|
registerOnChange(fn) {
|
|
79
81
|
this.onChange = fn;
|
|
@@ -82,16 +84,16 @@ class PasswordComponent {
|
|
|
82
84
|
this.onTouch = fn;
|
|
83
85
|
}
|
|
84
86
|
get allRequirementsMet() {
|
|
85
|
-
return this.countPassed() === Object.keys(this.criteriaPassed).length &&
|
|
87
|
+
return this.countPassed() === Object.keys(this.criteriaPassed).length && Boolean(this.countPassed());
|
|
86
88
|
}
|
|
87
89
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
88
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PasswordComponent, isStandalone:
|
|
90
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PasswordComponent, isStandalone: true, selector: "ui-password-criteria", inputs: { showCriteria: "showCriteria", required: "required" }, outputs: { passwordChange: "passwordChange", allCriteriaPassed: "allCriteriaPassed" }, providers: [
|
|
89
91
|
{
|
|
90
92
|
provide: NG_VALUE_ACCESSOR,
|
|
91
93
|
useExisting: forwardRef(() => PasswordComponent),
|
|
92
94
|
multi: true,
|
|
93
95
|
},
|
|
94
|
-
], viewQueries: [{ propertyName: "requiredCriteria", first: true, predicate: ["requiredCriteria"], descendants: true }], ngImport: i0, template: "<div class=\"password-criteria-container\">\n <ui-field\n [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n @if (showCriteria) {\n <div class=\"criteria-container\" #requiredCriteria>\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"'dark'\"\n ></ui-progress-bar>\n </div>\n @if (allRequirementsMet) {\n <span style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{\n 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async\n }}</span>\n }\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{\n (criteriaPassed[criterion.key] ? 'COMMON.PASSED' : 'COMMON.FAILED') | uiTranslate | async\n }}</span>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.password-criteria-container .criteria-container{margin-top:14px}.password-criteria-container .criteria-container .progress{margin-bottom:16px}.password-criteria-container .criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.password-criteria-container .criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.password-criteria-container .criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.password-criteria-container .criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.password-criteria-container .criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.password-criteria-container .criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.password-criteria-container .criteria-container .criterion.error span{color:#e02800}\n"], dependencies: [{ kind: "
|
|
96
|
+
], viewQueries: [{ propertyName: "requiredCriteria", first: true, predicate: ["requiredCriteria"], descendants: true }], ngImport: i0, template: "<div class=\"password-criteria-container\">\n <ui-field\n [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n @if (showCriteria) {\n <div class=\"criteria-container\" #requiredCriteria>\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"'dark'\"\n ></ui-progress-bar>\n </div>\n @if (allRequirementsMet) {\n <span style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{\n 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async\n }}</span>\n }\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{\n (criteriaPassed[criterion.key] ? 'COMMON.PASSED' : 'COMMON.FAILED') | uiTranslate | async\n }}</span>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.password-criteria-container .criteria-container{margin-top:14px}.password-criteria-container .criteria-container .progress{margin-bottom:16px}.password-criteria-container .criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.password-criteria-container .criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.password-criteria-container .criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.password-criteria-container .criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.password-criteria-container .criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.password-criteria-container .criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.password-criteria-container .criteria-container .criterion.error span{color:#e02800}\n"], dependencies: [{ kind: "component", type: FieldComponent, selector: "ui-field", inputs: ["fullWidth", "fullHeight", "label", "labelHtml", "labelIcon", "fieldName", "placeholder", "id", "value", "badgeVariant", "errors", "disabled", "required", "readOnly", "hintMessage", "type", "updateOnBlur", "allowOnlyDigits", "isAutocompleteOff", "allowNegative", "showBottomContent", "applicationTheme", "ariaLabel", "loading", "isValid", "maxCharacters", "trimOnBlur", "trimOnSubmit", "maxRows", "hasTextAreaCounter", "hideBuiltInErrors", "hideLabelInErrors", "max", "min", "textareaHeight", "borderless", "autosizableTextarea", "isAIVariant", "ariaLabelledby", "ariaDescribedby", "hasError"], outputs: ["validateEvent", "fieldBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ProgressBarComponentModule }, { kind: "component", type: i2.ProgressBarComponent, selector: "ui-progress-bar", inputs: ["companyColor", "progress", "mode", "buffer", "applicationTheme", "ariaLabel", "ariaDescribedBy", "showPercentage"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: IconComponentModule }, { kind: "component", type: i3.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
95
97
|
}
|
|
96
98
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponent, decorators: [{
|
|
97
99
|
type: Component,
|
|
@@ -101,7 +103,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
101
103
|
useExisting: forwardRef(() => PasswordComponent),
|
|
102
104
|
multi: true,
|
|
103
105
|
},
|
|
104
|
-
], changeDetection: ChangeDetectionStrategy.OnPush,
|
|
106
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
107
|
+
FieldComponent,
|
|
108
|
+
FormsModule,
|
|
109
|
+
ReactiveFormsModule,
|
|
110
|
+
ProgressBarComponentModule,
|
|
111
|
+
NgClass,
|
|
112
|
+
IconComponentModule,
|
|
113
|
+
AsyncPipe,
|
|
114
|
+
UiTranslatePipe,
|
|
115
|
+
], template: "<div class=\"password-criteria-container\">\n <ui-field\n [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n @if (showCriteria) {\n <div class=\"criteria-container\" #requiredCriteria>\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"'dark'\"\n ></ui-progress-bar>\n </div>\n @if (allRequirementsMet) {\n <span style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{\n 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async\n }}</span>\n }\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{\n (criteriaPassed[criterion.key] ? 'COMMON.PASSED' : 'COMMON.FAILED') | uiTranslate | async\n }}</span>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.password-criteria-container .criteria-container{margin-top:14px}.password-criteria-container .criteria-container .progress{margin-bottom:16px}.password-criteria-container .criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.password-criteria-container .criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.password-criteria-container .criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.password-criteria-container .criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.password-criteria-container .criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.password-criteria-container .criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.password-criteria-container .criteria-container .criterion.error span{color:#e02800}\n"] }]
|
|
105
116
|
}], ctorParameters: () => [{ type: i0.DestroyRef }], propDecorators: { showCriteria: [{
|
|
106
117
|
type: Input
|
|
107
118
|
}], required: [{
|
|
@@ -117,22 +128,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
117
128
|
|
|
118
129
|
class PasswordComponentModule {
|
|
119
130
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
120
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponentModule,
|
|
131
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponentModule, imports: [CommonModule,
|
|
121
132
|
FieldComponentModule,
|
|
122
133
|
ReactiveFormsModule,
|
|
123
134
|
IconComponentModule,
|
|
124
135
|
ProgressBarComponentModule,
|
|
125
|
-
UiTranslatePipe
|
|
136
|
+
UiTranslatePipe,
|
|
137
|
+
PasswordComponent], exports: [PasswordComponent] }); }
|
|
126
138
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponentModule, imports: [CommonModule,
|
|
127
139
|
FieldComponentModule,
|
|
128
140
|
ReactiveFormsModule,
|
|
129
141
|
IconComponentModule,
|
|
130
|
-
ProgressBarComponentModule
|
|
142
|
+
ProgressBarComponentModule,
|
|
143
|
+
PasswordComponent] }); }
|
|
131
144
|
}
|
|
132
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordComponentModule, decorators: [{
|
|
133
146
|
type: NgModule,
|
|
134
147
|
args: [{
|
|
135
|
-
declarations: [PasswordComponent],
|
|
136
148
|
exports: [PasswordComponent],
|
|
137
149
|
imports: [
|
|
138
150
|
CommonModule,
|
|
@@ -141,6 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
141
153
|
IconComponentModule,
|
|
142
154
|
ProgressBarComponentModule,
|
|
143
155
|
UiTranslatePipe,
|
|
156
|
+
PasswordComponent,
|
|
144
157
|
],
|
|
145
158
|
}]
|
|
146
159
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-password-criteria.mjs","sources":["../../../components/password-criteria/password.component.ts","../../../components/password-criteria/password.component.html","../../../components/password-criteria/password.component.module.ts","../../../components/password-criteria/testgorilla-tgo-ui-components-password-criteria.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ui-password-criteria',\n templateUrl: './password.component.html',\n styleUrls: ['./password.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PasswordComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PasswordComponent implements ControlValueAccessor {\n /**\n * Show criteria for password. Defaults true\n *\n * @type {boolean}\n * @memberof PasswordComponent\n */\n @Input() showCriteria = true;\n\n /**\n * Password is required or not\n *\n * @type {boolean}\n * @memberof PasswordComponent\n */\n @Input() required = false;\n\n @Output() passwordChange = new EventEmitter<string>();\n\n @Output() allCriteriaPassed = new EventEmitter<boolean>();\n\n @ViewChild('requiredCriteria') requiredCriteria: ElementRef<HTMLElement>;\n\n protected formControl = new FormControl('', Validators.required);\n protected criteriaPassed: { [key: string]: boolean } = {};\n protected showError: boolean;\n protected progressValue: number;\n protected criteria: { translateKey: string; key: string }[] = [\n { translateKey: 'PASSWORD.LOWERCASE', key: 'hasLowercase' },\n { translateKey: 'PASSWORD.UPPERCASE', key: 'hasUppercase' },\n { translateKey: 'PASSWORD.NUMBER', key: 'hasNumber' },\n { translateKey: 'PASSWORD.SPECIAL_CHARACTER', key: 'hasSpecialChar' },\n { translateKey: 'PASSWORD.CHARACTERS', key: 'hasMinLength' },\n ];\n\n constructor(private readonly destroyRef: DestroyRef) {\n this.formControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.checkCriteria();\n });\n }\n\n checkCriteria(): void {\n const password = this.formControl.value ?? '';\n this.criteriaPassed = {\n hasLowercase: /^(?=.*?[a-z])/.test(password),\n hasUppercase: /^(?=.*?[A-Z])/.test(password),\n hasNumber: /^(?=.*?[0-9])/.test(password),\n hasSpecialChar: /^(?=.*?[\" !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~])/.test(password),\n hasMinLength: password.length >= 12,\n };\n\n const passedCount = this.countPassed();\n this.progressValue = Math.min(Math.max(passedCount * (100 / Object.keys(this.criteriaPassed).length), 1), 100);\n this.passwordChange.emit(password);\n this.allCriteriaPassed.emit(passedCount === Object.keys(this.criteriaPassed).length);\n this.onChange(password);\n }\n\n countPassed(): number {\n let count = 0;\n for (const key in this.criteriaPassed) {\n if (Object.prototype.hasOwnProperty.call(this.criteriaPassed, key) && this.criteriaPassed[key]) {\n count++;\n }\n }\n return count;\n }\n onChange = (_v: any) => {};\n onTouch = () => {};\n\n writeValue(obj: any): void {\n this.formControl.setValue(obj);\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 get allRequirementsMet(): boolean {\n return this.countPassed() === Object.keys(this.criteriaPassed).length && !!this.countPassed();\n }\n}\n","<div class=\"password-criteria-container\">\n <ui-field\n [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n @if (showCriteria) {\n <div class=\"criteria-container\" #requiredCriteria>\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"'dark'\"\n ></ui-progress-bar>\n </div>\n @if (allRequirementsMet) {\n <span style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{\n 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async\n }}</span>\n }\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{\n (criteriaPassed[criterion.key] ? 'COMMON.PASSED' : 'COMMON.FAILED') | uiTranslate | async\n }}</span>\n </div>\n }\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PasswordComponent } from './password.component';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\n\n@NgModule({\n declarations: [PasswordComponent],\n exports: [PasswordComponent],\n imports: [\n CommonModule,\n FieldComponentModule,\n ReactiveFormsModule,\n IconComponentModule,\n ProgressBarComponentModule,\n UiTranslatePipe,\n ],\n})\nexport class PasswordComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-password-criteria.mjs","sources":["../../../components/password-criteria/password.component.ts","../../../components/password-criteria/password.component.html","../../../components/password-criteria/password.component.module.ts","../../../components/password-criteria/testgorilla-tgo-ui-components-password-criteria.ts"],"sourcesContent":["import { NgClass, AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\n\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponent } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\n@Component({\n selector: 'ui-password-criteria',\n templateUrl: './password.component.html',\n styleUrls: ['./password.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PasswordComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FieldComponent,\n FormsModule,\n ReactiveFormsModule,\n ProgressBarComponentModule,\n NgClass,\n IconComponentModule,\n AsyncPipe,\n UiTranslatePipe,\n ],\n})\nexport class PasswordComponent implements ControlValueAccessor {\n /**\n * Show criteria for password. Defaults true\n *\n * @type {boolean}\n * @memberof PasswordComponent\n */\n @Input() showCriteria = true;\n\n /**\n * Password is required or not\n *\n * @type {boolean}\n * @memberof PasswordComponent\n */\n @Input() required = false;\n\n @Output() passwordChange = new EventEmitter<string>();\n\n @Output() allCriteriaPassed = new EventEmitter<boolean>();\n\n @ViewChild('requiredCriteria') requiredCriteria: ElementRef<HTMLElement>;\n\n // eslint-disable-next-line @typescript-eslint/unbound-method -- Validators.required is a static Angular validator with no `this` binding\n protected formControl = new FormControl('', Validators.required);\n protected criteriaPassed: { [key: string]: boolean } = {};\n protected showError: boolean;\n protected progressValue: number;\n protected criteria: { translateKey: string; key: string }[] = [\n { translateKey: 'PASSWORD.LOWERCASE', key: 'hasLowercase' },\n { translateKey: 'PASSWORD.UPPERCASE', key: 'hasUppercase' },\n { translateKey: 'PASSWORD.NUMBER', key: 'hasNumber' },\n { translateKey: 'PASSWORD.SPECIAL_CHARACTER', key: 'hasSpecialChar' },\n { translateKey: 'PASSWORD.CHARACTERS', key: 'hasMinLength' },\n ];\n\n constructor(private readonly destroyRef: DestroyRef) {\n this.formControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.checkCriteria();\n });\n }\n\n checkCriteria(): void {\n const password = this.formControl.value ?? '';\n this.criteriaPassed = {\n hasLowercase: /^(?=.*?[a-z])/.test(password),\n hasUppercase: /^(?=.*?[A-Z])/.test(password),\n hasNumber: /^(?=.*?[0-9])/.test(password),\n hasSpecialChar: /^(?=.*?[\" !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~])/.test(password),\n hasMinLength: password.length >= 12,\n };\n\n const passedCount = this.countPassed();\n this.progressValue = Math.min(Math.max(passedCount * (100 / Object.keys(this.criteriaPassed).length), 1), 100);\n this.passwordChange.emit(password);\n this.allCriteriaPassed.emit(passedCount === Object.keys(this.criteriaPassed).length);\n this.onChange(password);\n }\n\n countPassed(): number {\n let count = 0;\n for (const key in this.criteriaPassed) {\n if (Object.prototype.hasOwnProperty.call(this.criteriaPassed, key) && this.criteriaPassed[key]) {\n count++;\n }\n }\n return count;\n }\n onChange = (_v: string) => {};\n onTouch = () => {};\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n writeValue(obj?: string | null): void {\n this.formControl.setValue(obj ?? null);\n // setValue() re-evaluates the criteria fields the template renders; the\n // forms API calls this from outside the component's own change detection.\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n get allRequirementsMet(): boolean {\n return this.countPassed() === Object.keys(this.criteriaPassed).length && Boolean(this.countPassed());\n }\n}\n","<div class=\"password-criteria-container\">\n <ui-field\n [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n @if (showCriteria) {\n <div class=\"criteria-container\" #requiredCriteria>\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"'dark'\"\n ></ui-progress-bar>\n </div>\n @if (allRequirementsMet) {\n <span style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{\n 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async\n }}</span>\n }\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{\n (criteriaPassed[criterion.key] ? 'COMMON.PASSED' : 'COMMON.FAILED') | uiTranslate | async\n }}</span>\n </div>\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { FieldComponentModule } from '@testgorilla/tgo-ui/components/field';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { PasswordComponent } from './password.component';\n\n@NgModule({\n exports: [PasswordComponent],\n imports: [\n CommonModule,\n FieldComponentModule,\n ReactiveFormsModule,\n IconComponentModule,\n ProgressBarComponentModule,\n UiTranslatePipe,\n PasswordComponent,\n ],\n})\nexport class PasswordComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
+
import { NgClass, AsyncPipe, CommonModule } from '@angular/common';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Output, Input, Optional, Inject, Component, NgModule } from '@angular/core';
|
|
3
|
-
import
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { EventEmitter, Output, Input, Optional, Inject, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
4
|
+
import { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
|
|
5
5
|
import * as i2 from '@testgorilla/tgo-ui/components/icon';
|
|
6
6
|
import { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
|
|
7
|
-
import * as
|
|
7
|
+
import * as i1 from '@testgorilla/tgo-ui/components/progress-bar';
|
|
8
8
|
import { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';
|
|
9
|
-
import * as i4 from '@testgorilla/tgo-ui/components/core';
|
|
10
|
-
import { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
|
|
11
9
|
|
|
12
10
|
class PasswordStrengthComponent {
|
|
13
11
|
/**
|
|
@@ -82,11 +80,11 @@ class PasswordStrengthComponent {
|
|
|
82
80
|
return this.applicationTheme === 'classic' ? 'Round-check' : 'Check-round-in-line';
|
|
83
81
|
}
|
|
84
82
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
85
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PasswordStrengthComponent, isStandalone:
|
|
83
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: PasswordStrengthComponent, isStandalone: true, selector: "ui-password-strength", inputs: { applicationTheme: "applicationTheme", password: "password" }, outputs: { validationCheck: "validationCheck" }, ngImport: i0, template: "<div class=\"criteria-container\">\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-progress-bar>\n </div>\n\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] ? infoIcon : checkIcon\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n </div>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.criteria-container{margin-top:14px}.criteria-container .progress{margin-bottom:16px}.criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.criteria-container .criterion.error span{color:#e02800}\n"], dependencies: [{ kind: "ngmodule", type: ProgressBarComponentModule }, { kind: "component", type: i1.ProgressBarComponent, selector: "ui-progress-bar", inputs: ["companyColor", "progress", "mode", "buffer", "applicationTheme", "ariaLabel", "ariaDescribedBy", "showPercentage"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: IconComponentModule }, { kind: "component", type: i2.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
86
84
|
}
|
|
87
85
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponent, decorators: [{
|
|
88
86
|
type: Component,
|
|
89
|
-
args: [{ selector: 'ui-password-strength',
|
|
87
|
+
args: [{ selector: 'ui-password-strength', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ProgressBarComponentModule, NgClass, IconComponentModule, AsyncPipe, UiTranslatePipe], template: "<div class=\"criteria-container\">\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-progress-bar>\n </div>\n\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] ? infoIcon : checkIcon\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n </div>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.criteria-container{margin-top:14px}.criteria-container .progress{margin-bottom:16px}.criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.criteria-container .criterion.error span{color:#e02800}\n"] }]
|
|
90
88
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
91
89
|
type: Optional
|
|
92
90
|
}, {
|
|
@@ -102,14 +100,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
102
100
|
|
|
103
101
|
class PasswordStrengthComponentModule {
|
|
104
102
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
105
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponentModule,
|
|
106
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponentModule, imports: [CommonModule, IconComponentModule, ProgressBarComponentModule] }); }
|
|
103
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponentModule, imports: [CommonModule, IconComponentModule, ProgressBarComponentModule, UiTranslatePipe, PasswordStrengthComponent], exports: [PasswordStrengthComponent] }); }
|
|
104
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponentModule, imports: [CommonModule, IconComponentModule, ProgressBarComponentModule, PasswordStrengthComponent] }); }
|
|
107
105
|
}
|
|
108
106
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: PasswordStrengthComponentModule, decorators: [{
|
|
109
107
|
type: NgModule,
|
|
110
108
|
args: [{
|
|
111
|
-
|
|
112
|
-
imports: [CommonModule, IconComponentModule, ProgressBarComponentModule, UiTranslatePipe],
|
|
109
|
+
imports: [CommonModule, IconComponentModule, ProgressBarComponentModule, UiTranslatePipe, PasswordStrengthComponent],
|
|
113
110
|
exports: [PasswordStrengthComponent],
|
|
114
111
|
}]
|
|
115
112
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-ui-components-password-strength.mjs","sources":["../../../components/password-strength/password-strength.component.ts","../../../components/password-strength/password-strength.component.html","../../../components/password-strength/password-strength.component.module.ts","../../../components/password-strength/testgorilla-tgo-ui-components-password-strength.ts"],"sourcesContent":["import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';\nimport { IconName } from '@testgorilla/tgo-ui/components/icon';\n\n@Component({\n selector: 'ui-password-strength',\n templateUrl: './password-strength.component.html',\n styleUrls: ['./password-strength.component.scss'],\n
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-ui-components-password-strength.mjs","sources":["../../../components/password-strength/password-strength.component.ts","../../../components/password-strength/password-strength.component.html","../../../components/password-strength/password-strength.component.module.ts","../../../components/password-strength/testgorilla-tgo-ui-components-password-strength.ts"],"sourcesContent":["import { NgClass, AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';\n\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconName, IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\n@Component({\n selector: 'ui-password-strength',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './password-strength.component.html',\n styleUrls: ['./password-strength.component.scss'],\n imports: [ProgressBarComponentModule, NgClass, IconComponentModule, AsyncPipe, UiTranslatePipe],\n})\nexport class PasswordStrengthComponent {\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof PasswordStrengthComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * The password that needs to be checked\n * @property password\n * @type {string}\n * @memberof PasswordStrengthComponent\n */\n @Input() set password(value: string) {\n this._password = value;\n if (value && value.length > 0) {\n this.showError = true;\n }\n this.checkCriteria(this._password);\n }\n\n /**\n * Event that outputs validation check result\n * @property validationCheck\n * @type {boolean}\n * @memberof PasswordStrengthComponent\n */\n @Output() validationCheck = new EventEmitter<boolean>();\n\n protected progressValue: number;\n protected criteriaPassed: { [key: string]: boolean } = {};\n protected showError = false;\n private _password = '';\n protected criteria: { translateKey: string; key: string }[] = [\n { translateKey: 'PASSWORD.LOWERCASE', key: 'hasLowercase' },\n { translateKey: 'PASSWORD.UPPERCASE', key: 'hasUppercase' },\n { translateKey: 'PASSWORD.NUMBER', key: 'hasNumber' },\n { translateKey: 'PASSWORD.SPECIAL_CHARACTER', key: 'hasSpecialChar' },\n { translateKey: 'PASSWORD.CHARACTERS', key: 'hasMinLength' },\n ];\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme\n ) {\n if (this.defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n checkCriteria(password: string): void {\n this.criteriaPassed = {\n hasLowercase: /^(?=.*?[a-z])/.test(password),\n hasUppercase: /^(?=.*?[A-Z])/.test(password),\n hasNumber: /^(?=.*?[0-9])/.test(password),\n hasSpecialChar: /^(?=.*?[\" !#$%&'()*+,-./:;<=>?@[\\]^_`{|}~])/.test(password),\n hasMinLength: password.length >= 12,\n };\n\n const passedCount = this.countPassed();\n this.progressValue = Math.min(Math.max(passedCount * (100 / Object.keys(this.criteriaPassed).length), 1), 100);\n this.validationCheck.emit(passedCount === Object.keys(this.criteriaPassed).length);\n }\n\n private countPassed(): number {\n let count = 0;\n for (const key in this.criteriaPassed) {\n if (Object.prototype.hasOwnProperty.call(this.criteriaPassed, key) && this.criteriaPassed[key]) {\n count++;\n }\n }\n return count;\n }\n\n get infoIcon(): IconName {\n return this.applicationTheme === 'classic' ? 'Info' : 'Info-in-line';\n }\n\n get checkIcon(): IconName {\n return this.applicationTheme === 'classic' ? 'Round-check' : 'Check-round-in-line';\n }\n}\n","<div class=\"criteria-container\">\n <div class=\"progress\">\n <ui-progress-bar\n [progress]=\"progressValue === 1 ? 0 : progressValue\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-progress-bar>\n </div>\n\n @for (criterion of criteria; track criterion) {\n <div\n class=\"criterion\"\n [ngClass]=\"{ passed: criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] ? infoIcon : checkIcon\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { PasswordStrengthComponent } from './password-strength.component';\n\n@NgModule({\n imports: [CommonModule, IconComponentModule, ProgressBarComponentModule, UiTranslatePipe, PasswordStrengthComponent],\n exports: [PasswordStrengthComponent],\n})\nexport class PasswordStrengthComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|