@siemens/element-ng 47.1.0 → 47.3.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/README.md +18 -6
- package/accordion/index.d.ts +9 -0
- package/accordion/package.json +3 -0
- package/accordion/si-accordion-hcollapse.service.d.ts +17 -0
- package/accordion/si-accordion.component.d.ts +37 -0
- package/accordion/si-accordion.module.d.ts +8 -0
- package/accordion/si-accordion.service.d.ts +17 -0
- package/accordion/si-collapsible-panel.component.d.ts +89 -0
- package/action-modal/index.d.ts +6 -0
- package/action-modal/package.json +3 -0
- package/action-modal/si-action-dialog.service.d.ts +49 -0
- package/action-modal/si-action-dialog.types.d.ts +92 -0
- package/action-modal/si-alert-dialog/si-alert-dialog.component.d.ts +32 -0
- package/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.d.ts +40 -0
- package/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.d.ts +45 -0
- package/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.d.ts +68 -0
- package/auto-collapsable-list/index.d.ts +10 -0
- package/auto-collapsable-list/package.json +3 -0
- package/auto-collapsable-list/si-auto-collapsable-list-additional-content.directive.d.ts +6 -0
- package/auto-collapsable-list/si-auto-collapsable-list-item.directive.d.ts +29 -0
- package/auto-collapsable-list/si-auto-collapsable-list-measurable.class.d.ts +16 -0
- package/auto-collapsable-list/si-auto-collapsable-list-overflow-item.directive.d.ts +12 -0
- package/auto-collapsable-list/si-auto-collapsable-list.directive.d.ts +47 -0
- package/auto-collapsable-list/si-auto-collapsable-list.module.d.ts +10 -0
- package/autocomplete/index.d.ts +8 -0
- package/autocomplete/package.json +3 -0
- package/autocomplete/si-autocomplete-listbox.directive.d.ts +31 -0
- package/autocomplete/si-autocomplete-option.directive.d.ts +31 -0
- package/autocomplete/si-autocomplete.directive.d.ts +14 -0
- package/autocomplete/si-autocomplete.model.d.ts +7 -0
- package/autocomplete/si-autocomplete.module.d.ts +9 -0
- package/badge/index.d.ts +5 -0
- package/badge/package.json +3 -0
- package/badge/si-badge.component.d.ts +17 -0
- package/color-picker/index.d.ts +5 -0
- package/color-picker/package.json +3 -0
- package/color-picker/si-color-picker.component.d.ts +61 -0
- package/common/models/menu.model.d.ts +2 -2
- package/connection-strength/index.d.ts +6 -0
- package/connection-strength/package.json +3 -0
- package/connection-strength/si-connection-strength.component.d.ts +19 -0
- package/connection-strength/si-connection-strength.module.d.ts +7 -0
- package/content-action-bar/index.d.ts +7 -0
- package/content-action-bar/package.json +3 -0
- package/content-action-bar/si-content-action-bar-toggle.component.d.ts +6 -0
- package/content-action-bar/si-content-action-bar.component.d.ts +72 -0
- package/content-action-bar/si-content-action-bar.model.d.ts +9 -0
- package/content-action-bar/si-content-action-bar.module.d.ts +7 -0
- package/copyright-notice/index.d.ts +7 -0
- package/copyright-notice/package.json +3 -0
- package/copyright-notice/si-copyright-notice.component.d.ts +18 -0
- package/copyright-notice/si-copyright-notice.d.ts +23 -0
- package/copyright-notice/si-copyright-notice.module.d.ts +7 -0
- package/empty-state/index.d.ts +6 -0
- package/empty-state/package.json +3 -0
- package/empty-state/si-empty-state.component.d.ts +18 -0
- package/empty-state/si-empty-state.module.d.ts +7 -0
- package/fesm2022/siemens-element-ng-accordion.mjs +314 -0
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-action-modal.mjs +363 -0
- package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +312 -0
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-autocomplete.mjs +235 -0
- package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-badge.mjs +59 -0
- package/fesm2022/siemens-element-ng-badge.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-color-picker.mjs +176 -0
- package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-common.mjs +1 -1
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-connection-strength.mjs +58 -0
- package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +200 -0
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-copyright-notice.mjs +71 -0
- package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-empty-state.mjs +59 -0
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-footer.mjs +55 -0
- package/fesm2022/siemens-element-ng-footer.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-form.mjs +827 -0
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-icon-status.mjs +65 -0
- package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-icon.mjs +19 -2
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs +82 -0
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-language-switcher.mjs +90 -0
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +248 -0
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-menu.mjs +350 -0
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-modal.mjs +345 -0
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-number-input.mjs +267 -0
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-pagination.mjs +145 -0
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-password-strength.mjs +177 -0
- package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-password-toggle.mjs +88 -0
- package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-pills-input.mjs +397 -0
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-popover-next.mjs +259 -0
- package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-popover.mjs +256 -0
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-progressbar.mjs +83 -0
- package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-select.mjs +1166 -0
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-skip-links.mjs +117 -0
- package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-summary-chip.mjs +77 -0
- package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-summary-widget.mjs +77 -0
- package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-toast-notification.mjs +227 -0
- package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tooltip.mjs +233 -0
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +746 -0
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-wizard.mjs +465 -0
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -0
- package/footer/index.d.ts +6 -0
- package/footer/package.json +3 -0
- package/footer/si-footer.component.d.ts +14 -0
- package/footer/si-footer.module.d.ts +7 -0
- package/form/form-fieldset/si-form-fieldset.component.d.ts +40 -0
- package/form/index.d.ts +14 -0
- package/form/package.json +3 -0
- package/form/si-form-container/si-form-container.component.d.ts +155 -0
- package/form/si-form-item/si-form-field-native.control.d.ts +22 -0
- package/form/si-form-item/si-form-item.component.d.ts +90 -0
- package/form/si-form-item-control-input.directive.d.ts +18 -0
- package/form/si-form-item.control.d.ts +35 -0
- package/form/si-form-validation-error.model.d.ts +55 -0
- package/form/si-form-validation-error.provider.d.ts +11 -0
- package/form/si-form-validation-error.service.d.ts +42 -0
- package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +13 -0
- package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +42 -0
- package/form/si-form.module.d.ts +25 -0
- package/icon/element-icons.d.ts +17 -0
- package/icon-status/index.d.ts +6 -0
- package/icon-status/package.json +3 -0
- package/icon-status/si-icon-status.component.d.ts +24 -0
- package/icon-status/si-icon-status.module.d.ts +7 -0
- package/inline-notification/index.d.ts +6 -0
- package/inline-notification/package.json +3 -0
- package/inline-notification/si-inline-notification.component.d.ts +42 -0
- package/inline-notification/si-inline-notification.module.d.ts +7 -0
- package/language-switcher/index.d.ts +7 -0
- package/language-switcher/iso-language-value.d.ts +14 -0
- package/language-switcher/package.json +3 -0
- package/language-switcher/si-language-switcher.component.d.ts +32 -0
- package/language-switcher/si-language-switcher.module.d.ts +7 -0
- package/loading-spinner/index.d.ts +9 -0
- package/loading-spinner/package.json +3 -0
- package/loading-spinner/si-loading-button.component.d.ts +31 -0
- package/loading-spinner/si-loading-spinner.component.d.ts +32 -0
- package/loading-spinner/si-loading-spinner.directive.d.ts +36 -0
- package/loading-spinner/si-loading-spinner.module.d.ts +8 -0
- package/loading-spinner/si-loading-spinner.service.d.ts +18 -0
- package/menu/index.d.ts +15 -0
- package/menu/package.json +3 -0
- package/menu/si-menu-action.service.d.ts +13 -0
- package/menu/si-menu-bar.directive.d.ts +12 -0
- package/menu/si-menu-divider.directive.d.ts +5 -0
- package/menu/si-menu-factory-item-guard.directive.d.ts +11 -0
- package/menu/si-menu-factory.component.d.ts +15 -0
- package/menu/si-menu-header.directive.d.ts +5 -0
- package/menu/si-menu-item-base.directive.d.ts +16 -0
- package/menu/si-menu-item-checkbox.component.d.ts +10 -0
- package/menu/si-menu-item-radio.component.d.ts +10 -0
- package/menu/si-menu-item.component.d.ts +10 -0
- package/menu/si-menu-model.d.ts +91 -0
- package/menu/si-menu.directive.d.ts +6 -0
- package/menu/si-menu.module.d.ts +14 -0
- package/modal/index.d.ts +7 -0
- package/modal/modal.helpers.d.ts +8 -0
- package/modal/modalref.d.ts +64 -0
- package/modal/package.json +3 -0
- package/modal/si-modal.component.d.ts +32 -0
- package/modal/si-modal.service.d.ts +57 -0
- package/number-input/index.d.ts +6 -0
- package/number-input/package.json +3 -0
- package/number-input/si-number-input.component.d.ts +106 -0
- package/number-input/si-number-input.module.d.ts +7 -0
- package/package.json +139 -3
- package/pagination/index.d.ts +6 -0
- package/pagination/package.json +3 -0
- package/pagination/si-pagination.component.d.ts +65 -0
- package/pagination/si-pagination.module.d.ts +7 -0
- package/password-strength/index.d.ts +7 -0
- package/password-strength/package.json +3 -0
- package/password-strength/si-password-strength.component.d.ts +25 -0
- package/password-strength/si-password-strength.directive.d.ts +54 -0
- package/password-strength/si-password-strength.module.d.ts +8 -0
- package/password-toggle/index.d.ts +6 -0
- package/password-toggle/package.json +3 -0
- package/password-toggle/si-password-toggle.component.d.ts +39 -0
- package/password-toggle/si-password-toggle.module.d.ts +7 -0
- package/pills-input/index.d.ts +9 -0
- package/pills-input/package.json +3 -0
- package/pills-input/si-input-pill.component.d.ts +9 -0
- package/pills-input/si-pills-input-csv.directive.d.ts +8 -0
- package/pills-input/si-pills-input-email.directive.d.ts +10 -0
- package/pills-input/si-pills-input-pattern-base.d.ts +19 -0
- package/pills-input/si-pills-input-value-handler.d.ts +12 -0
- package/pills-input/si-pills-input.component.d.ts +87 -0
- package/pills-input/si-pills-input.module.d.ts +9 -0
- package/popover/index.d.ts +6 -0
- package/popover/package.json +3 -0
- package/popover/si-popover.component.d.ts +26 -0
- package/popover/si-popover.directive.d.ts +89 -0
- package/popover/si-popover.module.d.ts +7 -0
- package/popover-next/index.d.ts +7 -0
- package/popover-next/package.json +3 -0
- package/popover-next/si-popover-description.directive.d.ts +7 -0
- package/popover-next/si-popover-next.directive.d.ts +61 -0
- package/popover-next/si-popover-title.directive.d.ts +7 -0
- package/popover-next/si-popover.component.d.ts +27 -0
- package/progressbar/index.d.ts +6 -0
- package/progressbar/package.json +3 -0
- package/progressbar/si-progressbar.component.d.ts +43 -0
- package/progressbar/si-progressbar.module.d.ts +7 -0
- package/select/index.d.ts +18 -0
- package/select/options/si-select-complex-options.directive.d.ts +69 -0
- package/select/options/si-select-lazy-options.directive.d.ts +38 -0
- package/select/options/si-select-option.source.d.ts +49 -0
- package/select/options/si-select-options-strategy.base.d.ts +35 -0
- package/select/options/si-select-options-strategy.d.ts +37 -0
- package/select/options/si-select-simple-options.directive.d.ts +34 -0
- package/select/package.json +3 -0
- package/select/select-input/si-select-input.component.d.ts +43 -0
- package/select/select-list/si-select-list-has-filter.component.d.ts +20 -0
- package/select/select-list/si-select-list.base.d.ts +37 -0
- package/select/select-list/si-select-list.component.d.ts +15 -0
- package/select/select-option/si-select-option-row.component.d.ts +16 -0
- package/select/select-option/si-select-option.component.d.ts +9 -0
- package/select/selection/si-select-multi-value.directive.d.ts +26 -0
- package/select/selection/si-select-selection-strategy.d.ts +58 -0
- package/select/selection/si-select-single-value.directive.d.ts +26 -0
- package/select/si-select-action.directive.d.ts +12 -0
- package/select/si-select-actions.directive.d.ts +5 -0
- package/select/si-select-group-template.directive.d.ts +20 -0
- package/select/si-select-option-row-template.directive.d.ts +9 -0
- package/select/si-select-option-template.directive.d.ts +21 -0
- package/select/si-select.component.d.ts +96 -0
- package/select/si-select.module.d.ts +15 -0
- package/select/si-select.types.d.ts +65 -0
- package/skip-links/index.d.ts +5 -0
- package/skip-links/package.json +3 -0
- package/skip-links/si-skip-link-target.directive.d.ts +27 -0
- package/skip-links/si-skip-links.component.d.ts +9 -0
- package/skip-links/skip-link.service.d.ts +14 -0
- package/summary-chip/index.d.ts +5 -0
- package/summary-chip/package.json +3 -0
- package/summary-chip/si-summary-chip.component.d.ts +44 -0
- package/summary-widget/index.d.ts +5 -0
- package/summary-widget/package.json +3 -0
- package/summary-widget/si-summary-widget.component.d.ts +44 -0
- package/template-i18n.json +47 -1
- package/toast-notification/index.d.ts +6 -0
- package/toast-notification/package.json +3 -0
- package/toast-notification/si-toast-notification/si-toast-notification.component.d.ts +17 -0
- package/toast-notification/si-toast-notification-drawer/si-toast-notification-drawer.component.d.ts +9 -0
- package/toast-notification/si-toast-notification.service.d.ts +41 -0
- package/toast-notification/si-toast.model.d.ts +25 -0
- package/tooltip/index.d.ts +7 -0
- package/tooltip/package.json +3 -0
- package/tooltip/si-tooltip.component.d.ts +25 -0
- package/tooltip/si-tooltip.directive.d.ts +45 -0
- package/tooltip/si-tooltip.module.d.ts +7 -0
- package/tooltip/si-tooltip.service.d.ts +44 -0
- package/translate/si-translatable-keys.interface.d.ts +46 -0
- package/typeahead/index.d.ts +8 -0
- package/typeahead/package.json +3 -0
- package/typeahead/si-typeahead-item-template.directive.d.ts +7 -0
- package/typeahead/si-typeahead.component.d.ts +22 -0
- package/typeahead/si-typeahead.directive.d.ts +196 -0
- package/typeahead/si-typeahead.model.d.ts +60 -0
- package/typeahead/si-typeahead.module.d.ts +8 -0
- package/typeahead/si-typeahead.sorting.d.ts +10 -0
- package/wizard/index.d.ts +7 -0
- package/wizard/package.json +3 -0
- package/wizard/si-wizard-step.component.d.ts +21 -0
- package/wizard/si-wizard.component.d.ts +196 -0
- package/wizard/si-wizard.module.d.ts +8 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { computed, input, output, Directive, contentChildren, inject, ElementRef, signal, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { SiPasswordToggleComponent } from '@siemens/element-ng/password-toggle';
|
|
4
|
+
import { NG_VALIDATORS } from '@angular/forms';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Copyright Siemens 2016 - 2025.
|
|
8
|
+
* SPDX-License-Identifier: MIT
|
|
9
|
+
*/
|
|
10
|
+
const RE_UPPER_CASE = /[A-Z]/;
|
|
11
|
+
const RE_LOWER_CASE = /[a-z]/;
|
|
12
|
+
const RE_DIGITS = /[0-9]/;
|
|
13
|
+
const RE_SPECIAL_CHARS = /[\x21-\x2F|\x3A-\x40|\x5B-\x60]/;
|
|
14
|
+
const RE_WHITESPACES = /\s/;
|
|
15
|
+
class SiPasswordStrengthDirective {
|
|
16
|
+
maxStrength = computed(() => {
|
|
17
|
+
const strength = this.siPasswordStrength();
|
|
18
|
+
return (1 +
|
|
19
|
+
(strength.uppercase ? 1 : 0) +
|
|
20
|
+
(strength.lowercase ? 1 : 0) +
|
|
21
|
+
(strength.digits ? 1 : 0) +
|
|
22
|
+
(strength.special ? 1 : 0));
|
|
23
|
+
});
|
|
24
|
+
noValidation = false;
|
|
25
|
+
/**
|
|
26
|
+
* Define Siemens password strength.
|
|
27
|
+
*
|
|
28
|
+
* @defaultValue
|
|
29
|
+
* ```
|
|
30
|
+
* {
|
|
31
|
+
* minLength: 8,
|
|
32
|
+
* uppercase: true,
|
|
33
|
+
* lowercase: true,
|
|
34
|
+
* digits: true,
|
|
35
|
+
* special: true
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
siPasswordStrength = input({
|
|
40
|
+
minLength: 8,
|
|
41
|
+
uppercase: true,
|
|
42
|
+
lowercase: true,
|
|
43
|
+
digits: true,
|
|
44
|
+
special: true
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* Output callback event called when the password changes. The number
|
|
48
|
+
* indicated the number of rules which still can be met. (`-2` --\> 2 rules are
|
|
49
|
+
* still unmet, `0` --\> all met)
|
|
50
|
+
*/
|
|
51
|
+
passwordStrengthChanged = output();
|
|
52
|
+
/** @internal */
|
|
53
|
+
validate(control) {
|
|
54
|
+
if (this.getStrength(control.value) >= this.maxStrength()) {
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
return { siPasswordStrength: true };
|
|
58
|
+
}
|
|
59
|
+
getStrength(password) {
|
|
60
|
+
let strength = 0;
|
|
61
|
+
if (password && password !== '') {
|
|
62
|
+
// Strength check
|
|
63
|
+
strength += password.length >= this.siPasswordStrength().minLength ? 1 : 0;
|
|
64
|
+
strength += this.siPasswordStrength().uppercase && password.match(RE_UPPER_CASE) ? 1 : 0;
|
|
65
|
+
strength += this.siPasswordStrength().lowercase && password.match(RE_LOWER_CASE) ? 1 : 0;
|
|
66
|
+
strength += this.siPasswordStrength().digits && password.match(RE_DIGITS) ? 1 : 0;
|
|
67
|
+
strength += this.siPasswordStrength().special && password.match(RE_SPECIAL_CHARS) ? 1 : 0;
|
|
68
|
+
// Hard limit check
|
|
69
|
+
strength = password.match(RE_WHITESPACES) ? 0 : strength;
|
|
70
|
+
this.noValidation = true;
|
|
71
|
+
// Notify listeners
|
|
72
|
+
this.passwordStrengthChanged.emit(strength - this.maxStrength());
|
|
73
|
+
return strength;
|
|
74
|
+
}
|
|
75
|
+
this.noValidation = false;
|
|
76
|
+
this.passwordStrengthChanged.emit();
|
|
77
|
+
return strength;
|
|
78
|
+
}
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
80
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.6", type: SiPasswordStrengthDirective, isStandalone: true, selector: "[siPasswordStrength]", inputs: { siPasswordStrength: { classPropertyName: "siPasswordStrength", publicName: "siPasswordStrength", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { passwordStrengthChanged: "passwordStrengthChanged" }, host: { properties: { "class.no-validation": "noValidation" } }, providers: [{ provide: NG_VALIDATORS, useExisting: SiPasswordStrengthDirective, multi: true }], ngImport: i0 });
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthDirective, decorators: [{
|
|
83
|
+
type: Directive,
|
|
84
|
+
args: [{
|
|
85
|
+
selector: '[siPasswordStrength]',
|
|
86
|
+
providers: [{ provide: NG_VALIDATORS, useExisting: SiPasswordStrengthDirective, multi: true }],
|
|
87
|
+
host: {
|
|
88
|
+
'[class.no-validation]': 'noValidation'
|
|
89
|
+
}
|
|
90
|
+
}]
|
|
91
|
+
}] });
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Copyright Siemens 2016 - 2025.
|
|
95
|
+
* SPDX-License-Identifier: MIT
|
|
96
|
+
*/
|
|
97
|
+
class SiPasswordStrengthComponent {
|
|
98
|
+
/**
|
|
99
|
+
* Whether to show the visibility toggle icon.
|
|
100
|
+
*
|
|
101
|
+
* @defaultValue true
|
|
102
|
+
*/
|
|
103
|
+
showVisibilityIcon = input(true);
|
|
104
|
+
passwordStrengthDirective = contentChildren(SiPasswordStrengthDirective);
|
|
105
|
+
elRef = inject(ElementRef);
|
|
106
|
+
bad = signal(false);
|
|
107
|
+
weak = signal(false);
|
|
108
|
+
medium = signal(false);
|
|
109
|
+
good = signal(false);
|
|
110
|
+
strong = signal(false);
|
|
111
|
+
toggle(type) {
|
|
112
|
+
const inputEl = this.elRef.nativeElement.querySelector('input');
|
|
113
|
+
if (inputEl) {
|
|
114
|
+
inputEl.type = type;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
ngAfterViewInit() {
|
|
118
|
+
this.passwordStrengthDirective().forEach(directive => {
|
|
119
|
+
directive.passwordStrengthChanged.subscribe((strength) => {
|
|
120
|
+
this.strong.set(strength === 0);
|
|
121
|
+
this.good.set(strength === -1);
|
|
122
|
+
this.medium.set(strength === -2);
|
|
123
|
+
this.weak.set(strength === -3);
|
|
124
|
+
this.bad.set(strength === -4);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
129
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.6", type: SiPasswordStrengthComponent, isStandalone: true, selector: "si-password-strength", inputs: { showVisibilityIcon: { classPropertyName: "showVisibilityIcon", publicName: "showVisibilityIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.bad": "bad()", "class.weak": "weak()", "class.medium": "medium()", "class.good": "good()", "class.strong": "strong()" } }, queries: [{ propertyName: "passwordStrengthDirective", predicate: SiPasswordStrengthDirective, isSignal: true }], ngImport: i0, template: `
|
|
130
|
+
<si-password-toggle [showVisibilityIcon]="showVisibilityIcon()" (typeChange)="toggle($event)">
|
|
131
|
+
<ng-content />
|
|
132
|
+
</si-password-toggle>
|
|
133
|
+
`, isInline: true, styles: [":host{--strength-border-radius: 0 var(--element-radius-1) var(--element-radius-1) 1px;display:block;position:relative}:host:before{background:var(--strength-background);inset-block-end:1px;content:\"\";block-size:3px;inset-inline-start:1px;position:absolute;transition:inline-size calc(.15s * var(--element-animations-enabled, 1)),background calc(.15s * var(--element-animations-enabled, 1)) ease-in-out;inline-size:calc(var(--strength-width) - 2px);border-radius:var(--strength-border-radius);z-index:1}:host.bad{--strength-background: var(--element-color-bad);--strength-width: 20%}:host.weak{--strength-background: var(--element-color-poor);--strength-width: 40%}:host.medium{--strength-background: var(--element-color-average);--strength-width: 60%}:host.good{--strength-background: var(--element-color-good);--strength-width: 80%}:host.strong{--strength-background: var(--element-color-excellent);--strength-width: 100%;--strength-border-radius: 0 0 1px 1px}\n"], dependencies: [{ kind: "component", type: SiPasswordToggleComponent, selector: "si-password-toggle", inputs: ["showVisibilityIcon", "showLabel", "hideLabel"], outputs: ["typeChange"] }] });
|
|
134
|
+
}
|
|
135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthComponent, decorators: [{
|
|
136
|
+
type: Component,
|
|
137
|
+
args: [{ selector: 'si-password-strength', template: `
|
|
138
|
+
<si-password-toggle [showVisibilityIcon]="showVisibilityIcon()" (typeChange)="toggle($event)">
|
|
139
|
+
<ng-content />
|
|
140
|
+
</si-password-toggle>
|
|
141
|
+
`, imports: [SiPasswordToggleComponent], host: {
|
|
142
|
+
'[class.bad]': 'bad()',
|
|
143
|
+
'[class.weak]': 'weak()',
|
|
144
|
+
'[class.medium]': 'medium()',
|
|
145
|
+
'[class.good]': 'good()',
|
|
146
|
+
'[class.strong]': 'strong()'
|
|
147
|
+
}, styles: [":host{--strength-border-radius: 0 var(--element-radius-1) var(--element-radius-1) 1px;display:block;position:relative}:host:before{background:var(--strength-background);inset-block-end:1px;content:\"\";block-size:3px;inset-inline-start:1px;position:absolute;transition:inline-size calc(.15s * var(--element-animations-enabled, 1)),background calc(.15s * var(--element-animations-enabled, 1)) ease-in-out;inline-size:calc(var(--strength-width) - 2px);border-radius:var(--strength-border-radius);z-index:1}:host.bad{--strength-background: var(--element-color-bad);--strength-width: 20%}:host.weak{--strength-background: var(--element-color-poor);--strength-width: 40%}:host.medium{--strength-background: var(--element-color-average);--strength-width: 60%}:host.good{--strength-background: var(--element-color-good);--strength-width: 80%}:host.strong{--strength-background: var(--element-color-excellent);--strength-width: 100%;--strength-border-radius: 0 0 1px 1px}\n"] }]
|
|
148
|
+
}] });
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Copyright Siemens 2016 - 2025.
|
|
152
|
+
* SPDX-License-Identifier: MIT
|
|
153
|
+
*/
|
|
154
|
+
class SiPasswordStrengthModule {
|
|
155
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
156
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthModule, imports: [SiPasswordStrengthComponent, SiPasswordStrengthDirective], exports: [SiPasswordStrengthComponent, SiPasswordStrengthDirective] });
|
|
157
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthModule, imports: [SiPasswordStrengthComponent] });
|
|
158
|
+
}
|
|
159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordStrengthModule, decorators: [{
|
|
160
|
+
type: NgModule,
|
|
161
|
+
args: [{
|
|
162
|
+
imports: [SiPasswordStrengthComponent, SiPasswordStrengthDirective],
|
|
163
|
+
exports: [SiPasswordStrengthComponent, SiPasswordStrengthDirective]
|
|
164
|
+
}]
|
|
165
|
+
}] });
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Copyright Siemens 2016 - 2025.
|
|
169
|
+
* SPDX-License-Identifier: MIT
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Generated bundle index. Do not edit.
|
|
174
|
+
*/
|
|
175
|
+
|
|
176
|
+
export { SiPasswordStrengthComponent, SiPasswordStrengthDirective, SiPasswordStrengthModule };
|
|
177
|
+
//# sourceMappingURL=siemens-element-ng-password-strength.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-password-strength.mjs","sources":["../../../../projects/element-ng/password-strength/si-password-strength.directive.ts","../../../../projects/element-ng/password-strength/si-password-strength.component.ts","../../../../projects/element-ng/password-strength/si-password-strength.module.ts","../../../../projects/element-ng/password-strength/index.ts","../../../../projects/element-ng/password-strength/siemens-element-ng-password-strength.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Directive, input, output } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\nconst RE_UPPER_CASE = /[A-Z]/;\nconst RE_LOWER_CASE = /[a-z]/;\nconst RE_DIGITS = /[0-9]/;\nconst RE_SPECIAL_CHARS = /[\\x21-\\x2F|\\x3A-\\x40|\\x5B-\\x60]/;\nconst RE_WHITESPACES = /\\s/;\n\nexport interface PasswordPolicy {\n /**\n * Define minimal number of characters.\n */\n minLength: number;\n /**\n * Define if uppercase characters are required in password.\n */\n uppercase: boolean;\n /**\n * Define if lowercase characters are required in password.\n */\n lowercase: boolean;\n /**\n * Define if digits are required in password.\n */\n digits: boolean;\n /**\n * Define if special characters are required in password.\n */\n special: boolean;\n}\n\n@Directive({\n selector: '[siPasswordStrength]',\n providers: [{ provide: NG_VALIDATORS, useExisting: SiPasswordStrengthDirective, multi: true }],\n host: {\n '[class.no-validation]': 'noValidation'\n }\n})\nexport class SiPasswordStrengthDirective implements Validator {\n private readonly maxStrength = computed(() => {\n const strength = this.siPasswordStrength();\n return (\n 1 +\n (strength.uppercase ? 1 : 0) +\n (strength.lowercase ? 1 : 0) +\n (strength.digits ? 1 : 0) +\n (strength.special ? 1 : 0)\n );\n });\n\n protected noValidation = false;\n\n /**\n * Define Siemens password strength.\n *\n * @defaultValue\n * ```\n * {\n * minLength: 8,\n * uppercase: true,\n * lowercase: true,\n * digits: true,\n * special: true\n * }\n * ```\n */\n readonly siPasswordStrength = input<PasswordPolicy>({\n minLength: 8,\n uppercase: true,\n lowercase: true,\n digits: true,\n special: true\n });\n\n /**\n * Output callback event called when the password changes. The number\n * indicated the number of rules which still can be met. (`-2` --\\> 2 rules are\n * still unmet, `0` --\\> all met)\n */\n readonly passwordStrengthChanged = output<number | void>();\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors {\n if (this.getStrength(control.value) >= this.maxStrength()) {\n return {};\n }\n return { siPasswordStrength: true };\n }\n\n private getStrength(password: string): number {\n let strength = 0;\n if (password && password !== '') {\n // Strength check\n strength += password.length >= this.siPasswordStrength().minLength ? 1 : 0;\n strength += this.siPasswordStrength().uppercase && password.match(RE_UPPER_CASE) ? 1 : 0;\n strength += this.siPasswordStrength().lowercase && password.match(RE_LOWER_CASE) ? 1 : 0;\n strength += this.siPasswordStrength().digits && password.match(RE_DIGITS) ? 1 : 0;\n strength += this.siPasswordStrength().special && password.match(RE_SPECIAL_CHARS) ? 1 : 0;\n // Hard limit check\n strength = password.match(RE_WHITESPACES) ? 0 : strength;\n this.noValidation = true;\n // Notify listeners\n this.passwordStrengthChanged.emit(strength - this.maxStrength());\n return strength;\n }\n this.noValidation = false;\n this.passwordStrengthChanged.emit();\n return strength;\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport {\n AfterViewInit,\n Component,\n contentChildren,\n ElementRef,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { SiPasswordToggleComponent } from '@siemens/element-ng/password-toggle';\n\nimport { SiPasswordStrengthDirective } from './si-password-strength.directive';\n\n@Component({\n selector: 'si-password-strength',\n template: `\n <si-password-toggle [showVisibilityIcon]=\"showVisibilityIcon()\" (typeChange)=\"toggle($event)\">\n <ng-content />\n </si-password-toggle>\n `,\n styleUrl: './si-password-strength.component.scss',\n imports: [SiPasswordToggleComponent],\n host: {\n '[class.bad]': 'bad()',\n '[class.weak]': 'weak()',\n '[class.medium]': 'medium()',\n '[class.good]': 'good()',\n '[class.strong]': 'strong()'\n }\n})\nexport class SiPasswordStrengthComponent implements AfterViewInit {\n /**\n * Whether to show the visibility toggle icon.\n *\n * @defaultValue true\n */\n readonly showVisibilityIcon = input(true);\n\n private readonly passwordStrengthDirective = contentChildren(SiPasswordStrengthDirective);\n private elRef = inject(ElementRef);\n\n protected readonly bad = signal(false);\n protected readonly weak = signal(false);\n protected readonly medium = signal(false);\n protected readonly good = signal(false);\n protected readonly strong = signal(false);\n\n protected toggle(type: string): void {\n const inputEl = this.elRef.nativeElement.querySelector('input');\n if (inputEl) {\n inputEl.type = type;\n }\n }\n\n ngAfterViewInit(): void {\n this.passwordStrengthDirective().forEach(directive => {\n directive.passwordStrengthChanged.subscribe((strength: number | void) => {\n this.strong.set(strength === 0);\n this.good.set(strength === -1);\n this.medium.set(strength === -2);\n this.weak.set(strength === -3);\n this.bad.set(strength === -4);\n });\n });\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiPasswordStrengthComponent } from './si-password-strength.component';\nimport { SiPasswordStrengthDirective } from './si-password-strength.directive';\n\n@NgModule({\n imports: [SiPasswordStrengthComponent, SiPasswordStrengthDirective],\n exports: [SiPasswordStrengthComponent, SiPasswordStrengthDirective]\n})\nexport class SiPasswordStrengthModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-password-strength.component';\nexport * from './si-password-strength.directive';\nexport * from './si-password-strength.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, signal, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { addIcons, elementShow, elementHide, SiIconNextComponent } from '@siemens/element-ng/icon';
|
|
4
|
+
import * as i1 from '@siemens/element-translate-ng/translate';
|
|
5
|
+
import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Copyright Siemens 2016 - 2025.
|
|
9
|
+
* SPDX-License-Identifier: MIT
|
|
10
|
+
*/
|
|
11
|
+
class SiPasswordToggleComponent {
|
|
12
|
+
/**
|
|
13
|
+
* Whether to show the visibility toggle icon.
|
|
14
|
+
*
|
|
15
|
+
* @defaultValue true
|
|
16
|
+
*/
|
|
17
|
+
showVisibilityIcon = input(true);
|
|
18
|
+
/**
|
|
19
|
+
* Emits the `type` attribute for the `<input>` ('password' | 'text')
|
|
20
|
+
* whenever the password visibility is getting toggled.
|
|
21
|
+
*/
|
|
22
|
+
typeChange = output();
|
|
23
|
+
/**
|
|
24
|
+
* The aria-label (translatable) for the password show icon.
|
|
25
|
+
*
|
|
26
|
+
* @defaultValue
|
|
27
|
+
* ```
|
|
28
|
+
* $localize`:@@SI_PASSWORD_TOGGLE.SHOW:show password`
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
showLabel = input($localize `:@@SI_PASSWORD_TOGGLE.SHOW:show password`);
|
|
32
|
+
/**
|
|
33
|
+
* The aria-label (translatable) for the password hide icon.
|
|
34
|
+
*
|
|
35
|
+
* @defaultValue
|
|
36
|
+
* ```
|
|
37
|
+
* $localize`:@@SI_PASSWORD_TOGGLE.HIDE:hide password`
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
hideLabel = input($localize `:@@SI_PASSWORD_TOGGLE.HIDE:hide password`);
|
|
41
|
+
showPassword = signal(false);
|
|
42
|
+
icons = addIcons({ elementHide, elementShow });
|
|
43
|
+
/** The `type` attribute for the `<input>` ('password' | 'text'). */
|
|
44
|
+
get inputType() {
|
|
45
|
+
return this.showPassword() ? 'text' : 'password';
|
|
46
|
+
}
|
|
47
|
+
toggle() {
|
|
48
|
+
this.showPassword.set(!this.showPassword());
|
|
49
|
+
this.typeChange.emit(this.inputType);
|
|
50
|
+
}
|
|
51
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiPasswordToggleComponent, isStandalone: true, selector: "si-password-toggle", inputs: { showVisibilityIcon: { classPropertyName: "showVisibilityIcon", publicName: "showVisibilityIcon", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, hideLabel: { classPropertyName: "hideLabel", publicName: "hideLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { typeChange: "typeChange" }, host: { properties: { "class.show-visibility-icon": "showVisibilityIcon()" } }, ngImport: i0, template: "<ng-content />\n@if (showVisibilityIcon()) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary btn-circle btn-xs text-body password-visibility-icon\"\n [attr.aria-label]=\"(showPassword() ? hideLabel() : showLabel()) | translate\"\n (click)=\"toggle()\"\n >\n <si-icon-next [icon]=\"showPassword() ? icons.elementHide : icons.elementShow\" />\n </button>\n}\n", styles: [":host{display:block;position:relative;inline-size:100%}:host.show-visibility-icon{--si-action-icon-offset: 28px}.password-visibility-icon{position:absolute;font-size:1.5rem;inset-inline-end:8px;inset-block-start:4px;z-index:2}\n"], dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordToggleComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: 'si-password-toggle', imports: [SiIconNextComponent, SiTranslateModule], host: {
|
|
57
|
+
'[class.show-visibility-icon]': 'showVisibilityIcon()'
|
|
58
|
+
}, template: "<ng-content />\n@if (showVisibilityIcon()) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary btn-circle btn-xs text-body password-visibility-icon\"\n [attr.aria-label]=\"(showPassword() ? hideLabel() : showLabel()) | translate\"\n (click)=\"toggle()\"\n >\n <si-icon-next [icon]=\"showPassword() ? icons.elementHide : icons.elementShow\" />\n </button>\n}\n", styles: [":host{display:block;position:relative;inline-size:100%}:host.show-visibility-icon{--si-action-icon-offset: 28px}.password-visibility-icon{position:absolute;font-size:1.5rem;inset-inline-end:8px;inset-block-start:4px;z-index:2}\n"] }]
|
|
59
|
+
}] });
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Copyright Siemens 2016 - 2025.
|
|
63
|
+
* SPDX-License-Identifier: MIT
|
|
64
|
+
*/
|
|
65
|
+
class SiPasswordToggleModule {
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordToggleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
67
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordToggleModule, imports: [SiPasswordToggleComponent], exports: [SiPasswordToggleComponent] });
|
|
68
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordToggleModule, imports: [SiPasswordToggleComponent] });
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPasswordToggleModule, decorators: [{
|
|
71
|
+
type: NgModule,
|
|
72
|
+
args: [{
|
|
73
|
+
exports: [SiPasswordToggleComponent],
|
|
74
|
+
imports: [SiPasswordToggleComponent]
|
|
75
|
+
}]
|
|
76
|
+
}] });
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Copyright Siemens 2016 - 2025.
|
|
80
|
+
* SPDX-License-Identifier: MIT
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Generated bundle index. Do not edit.
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
export { SiPasswordToggleComponent, SiPasswordToggleModule };
|
|
88
|
+
//# sourceMappingURL=siemens-element-ng-password-toggle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-password-toggle.mjs","sources":["../../../../projects/element-ng/password-toggle/si-password-toggle.component.ts","../../../../projects/element-ng/password-toggle/si-password-toggle.component.html","../../../../projects/element-ng/password-toggle/si-password-toggle.module.ts","../../../../projects/element-ng/password-toggle/index.ts","../../../../projects/element-ng/password-toggle/siemens-element-ng-password-toggle.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Component, input, output, signal } from '@angular/core';\nimport { addIcons, elementHide, elementShow, SiIconNextComponent } from '@siemens/element-ng/icon';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-password-toggle',\n templateUrl: './si-password-toggle.component.html',\n styleUrl: './si-password-toggle.component.scss',\n imports: [SiIconNextComponent, SiTranslateModule],\n host: {\n '[class.show-visibility-icon]': 'showVisibilityIcon()'\n }\n})\nexport class SiPasswordToggleComponent {\n /**\n * Whether to show the visibility toggle icon.\n *\n * @defaultValue true\n */\n readonly showVisibilityIcon = input(true);\n\n /**\n * Emits the `type` attribute for the `<input>` ('password' | 'text')\n * whenever the password visibility is getting toggled.\n */\n readonly typeChange = output<string>();\n\n /**\n * The aria-label (translatable) for the password show icon.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_PASSWORD_TOGGLE.SHOW:show password`\n * ```\n */\n readonly showLabel = input($localize`:@@SI_PASSWORD_TOGGLE.SHOW:show password`);\n /**\n * The aria-label (translatable) for the password hide icon.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_PASSWORD_TOGGLE.HIDE:hide password`\n * ```\n */\n readonly hideLabel = input($localize`:@@SI_PASSWORD_TOGGLE.HIDE:hide password`);\n\n protected readonly showPassword = signal<boolean>(false);\n protected readonly icons = addIcons({ elementHide, elementShow });\n\n /** The `type` attribute for the `<input>` ('password' | 'text'). */\n get inputType(): string {\n return this.showPassword() ? 'text' : 'password';\n }\n\n protected toggle(): void {\n this.showPassword.set(!this.showPassword());\n this.typeChange.emit(this.inputType);\n }\n}\n","<ng-content />\n@if (showVisibilityIcon()) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary btn-circle btn-xs text-body password-visibility-icon\"\n [attr.aria-label]=\"(showPassword() ? hideLabel() : showLabel()) | translate\"\n (click)=\"toggle()\"\n >\n <si-icon-next [icon]=\"showPassword() ? icons.elementHide : icons.elementShow\" />\n </button>\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiPasswordToggleComponent } from './si-password-toggle.component';\n\n@NgModule({\n exports: [SiPasswordToggleComponent],\n imports: [SiPasswordToggleComponent]\n})\nexport class SiPasswordToggleModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-password-toggle.component';\nexport * from './si-password-toggle.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|