@siemens/element-ng 47.2.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.
Files changed (172) hide show
  1. package/README.md +18 -6
  2. package/autocomplete/index.d.ts +8 -0
  3. package/autocomplete/package.json +3 -0
  4. package/autocomplete/si-autocomplete-listbox.directive.d.ts +31 -0
  5. package/autocomplete/si-autocomplete-option.directive.d.ts +31 -0
  6. package/autocomplete/si-autocomplete.directive.d.ts +14 -0
  7. package/autocomplete/si-autocomplete.model.d.ts +7 -0
  8. package/autocomplete/si-autocomplete.module.d.ts +9 -0
  9. package/badge/index.d.ts +5 -0
  10. package/badge/package.json +3 -0
  11. package/badge/si-badge.component.d.ts +17 -0
  12. package/content-action-bar/index.d.ts +7 -0
  13. package/content-action-bar/package.json +3 -0
  14. package/content-action-bar/si-content-action-bar-toggle.component.d.ts +6 -0
  15. package/content-action-bar/si-content-action-bar.component.d.ts +72 -0
  16. package/content-action-bar/si-content-action-bar.model.d.ts +9 -0
  17. package/content-action-bar/si-content-action-bar.module.d.ts +7 -0
  18. package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
  19. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  20. package/fesm2022/siemens-element-ng-autocomplete.mjs +235 -0
  21. package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -0
  22. package/fesm2022/siemens-element-ng-badge.mjs +59 -0
  23. package/fesm2022/siemens-element-ng-badge.mjs.map +1 -0
  24. package/fesm2022/siemens-element-ng-common.mjs +1 -1
  25. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  26. package/fesm2022/siemens-element-ng-content-action-bar.mjs +200 -0
  27. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -0
  28. package/fesm2022/siemens-element-ng-form.mjs +827 -0
  29. package/fesm2022/siemens-element-ng-form.mjs.map +1 -0
  30. package/fesm2022/siemens-element-ng-icon-status.mjs +65 -0
  31. package/fesm2022/siemens-element-ng-icon-status.mjs.map +1 -0
  32. package/fesm2022/siemens-element-ng-icon.mjs +12 -2
  33. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  34. package/fesm2022/siemens-element-ng-language-switcher.mjs +90 -0
  35. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -0
  36. package/fesm2022/siemens-element-ng-number-input.mjs +267 -0
  37. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -0
  38. package/fesm2022/siemens-element-ng-password-strength.mjs +177 -0
  39. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -0
  40. package/fesm2022/siemens-element-ng-pills-input.mjs +397 -0
  41. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -0
  42. package/fesm2022/siemens-element-ng-popover-next.mjs +259 -0
  43. package/fesm2022/siemens-element-ng-popover-next.mjs.map +1 -0
  44. package/fesm2022/siemens-element-ng-popover.mjs +256 -0
  45. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -0
  46. package/fesm2022/siemens-element-ng-progressbar.mjs +83 -0
  47. package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -0
  48. package/fesm2022/siemens-element-ng-select.mjs +1166 -0
  49. package/fesm2022/siemens-element-ng-select.mjs.map +1 -0
  50. package/fesm2022/siemens-element-ng-skip-links.mjs +117 -0
  51. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -0
  52. package/fesm2022/siemens-element-ng-summary-widget.mjs +77 -0
  53. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -0
  54. package/fesm2022/siemens-element-ng-toast-notification.mjs +227 -0
  55. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -0
  56. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-typeahead.mjs +746 -0
  58. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -0
  59. package/fesm2022/siemens-element-ng-wizard.mjs +465 -0
  60. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -0
  61. package/form/form-fieldset/si-form-fieldset.component.d.ts +40 -0
  62. package/form/index.d.ts +14 -0
  63. package/form/package.json +3 -0
  64. package/form/si-form-container/si-form-container.component.d.ts +155 -0
  65. package/form/si-form-item/si-form-field-native.control.d.ts +22 -0
  66. package/form/si-form-item/si-form-item.component.d.ts +90 -0
  67. package/form/si-form-item-control-input.directive.d.ts +18 -0
  68. package/form/si-form-item.control.d.ts +35 -0
  69. package/form/si-form-validation-error.model.d.ts +55 -0
  70. package/form/si-form-validation-error.provider.d.ts +11 -0
  71. package/form/si-form-validation-error.service.d.ts +42 -0
  72. package/form/si-form-validation-tooltip/si-form-validation-tooltip.component.d.ts +13 -0
  73. package/form/si-form-validation-tooltip/si-form-validation-tooltip.directive.d.ts +42 -0
  74. package/form/si-form.module.d.ts +25 -0
  75. package/icon/element-icons.d.ts +10 -0
  76. package/icon-status/index.d.ts +6 -0
  77. package/icon-status/package.json +3 -0
  78. package/icon-status/si-icon-status.component.d.ts +24 -0
  79. package/icon-status/si-icon-status.module.d.ts +7 -0
  80. package/language-switcher/index.d.ts +7 -0
  81. package/language-switcher/iso-language-value.d.ts +14 -0
  82. package/language-switcher/package.json +3 -0
  83. package/language-switcher/si-language-switcher.component.d.ts +32 -0
  84. package/language-switcher/si-language-switcher.module.d.ts +7 -0
  85. package/number-input/index.d.ts +6 -0
  86. package/number-input/package.json +3 -0
  87. package/number-input/si-number-input.component.d.ts +106 -0
  88. package/number-input/si-number-input.module.d.ts +7 -0
  89. package/package.json +75 -3
  90. package/password-strength/index.d.ts +7 -0
  91. package/password-strength/package.json +3 -0
  92. package/password-strength/si-password-strength.component.d.ts +25 -0
  93. package/password-strength/si-password-strength.directive.d.ts +54 -0
  94. package/password-strength/si-password-strength.module.d.ts +8 -0
  95. package/pills-input/index.d.ts +9 -0
  96. package/pills-input/package.json +3 -0
  97. package/pills-input/si-input-pill.component.d.ts +9 -0
  98. package/pills-input/si-pills-input-csv.directive.d.ts +8 -0
  99. package/pills-input/si-pills-input-email.directive.d.ts +10 -0
  100. package/pills-input/si-pills-input-pattern-base.d.ts +19 -0
  101. package/pills-input/si-pills-input-value-handler.d.ts +12 -0
  102. package/pills-input/si-pills-input.component.d.ts +87 -0
  103. package/pills-input/si-pills-input.module.d.ts +9 -0
  104. package/popover/index.d.ts +6 -0
  105. package/popover/package.json +3 -0
  106. package/popover/si-popover.component.d.ts +26 -0
  107. package/popover/si-popover.directive.d.ts +89 -0
  108. package/popover/si-popover.module.d.ts +7 -0
  109. package/popover-next/index.d.ts +7 -0
  110. package/popover-next/package.json +3 -0
  111. package/popover-next/si-popover-description.directive.d.ts +7 -0
  112. package/popover-next/si-popover-next.directive.d.ts +61 -0
  113. package/popover-next/si-popover-title.directive.d.ts +7 -0
  114. package/popover-next/si-popover.component.d.ts +27 -0
  115. package/progressbar/index.d.ts +6 -0
  116. package/progressbar/package.json +3 -0
  117. package/progressbar/si-progressbar.component.d.ts +43 -0
  118. package/progressbar/si-progressbar.module.d.ts +7 -0
  119. package/select/index.d.ts +18 -0
  120. package/select/options/si-select-complex-options.directive.d.ts +69 -0
  121. package/select/options/si-select-lazy-options.directive.d.ts +38 -0
  122. package/select/options/si-select-option.source.d.ts +49 -0
  123. package/select/options/si-select-options-strategy.base.d.ts +35 -0
  124. package/select/options/si-select-options-strategy.d.ts +37 -0
  125. package/select/options/si-select-simple-options.directive.d.ts +34 -0
  126. package/select/package.json +3 -0
  127. package/select/select-input/si-select-input.component.d.ts +43 -0
  128. package/select/select-list/si-select-list-has-filter.component.d.ts +20 -0
  129. package/select/select-list/si-select-list.base.d.ts +37 -0
  130. package/select/select-list/si-select-list.component.d.ts +15 -0
  131. package/select/select-option/si-select-option-row.component.d.ts +16 -0
  132. package/select/select-option/si-select-option.component.d.ts +9 -0
  133. package/select/selection/si-select-multi-value.directive.d.ts +26 -0
  134. package/select/selection/si-select-selection-strategy.d.ts +58 -0
  135. package/select/selection/si-select-single-value.directive.d.ts +26 -0
  136. package/select/si-select-action.directive.d.ts +12 -0
  137. package/select/si-select-actions.directive.d.ts +5 -0
  138. package/select/si-select-group-template.directive.d.ts +20 -0
  139. package/select/si-select-option-row-template.directive.d.ts +9 -0
  140. package/select/si-select-option-template.directive.d.ts +21 -0
  141. package/select/si-select.component.d.ts +96 -0
  142. package/select/si-select.module.d.ts +15 -0
  143. package/select/si-select.types.d.ts +65 -0
  144. package/skip-links/index.d.ts +5 -0
  145. package/skip-links/package.json +3 -0
  146. package/skip-links/si-skip-link-target.directive.d.ts +27 -0
  147. package/skip-links/si-skip-links.component.d.ts +9 -0
  148. package/skip-links/skip-link.service.d.ts +14 -0
  149. package/summary-widget/index.d.ts +5 -0
  150. package/summary-widget/package.json +3 -0
  151. package/summary-widget/si-summary-widget.component.d.ts +44 -0
  152. package/template-i18n.json +29 -1
  153. package/toast-notification/index.d.ts +6 -0
  154. package/toast-notification/package.json +3 -0
  155. package/toast-notification/si-toast-notification/si-toast-notification.component.d.ts +17 -0
  156. package/toast-notification/si-toast-notification-drawer/si-toast-notification-drawer.component.d.ts +9 -0
  157. package/toast-notification/si-toast-notification.service.d.ts +41 -0
  158. package/toast-notification/si-toast.model.d.ts +25 -0
  159. package/translate/si-translatable-keys.interface.d.ts +28 -0
  160. package/typeahead/index.d.ts +8 -0
  161. package/typeahead/package.json +3 -0
  162. package/typeahead/si-typeahead-item-template.directive.d.ts +7 -0
  163. package/typeahead/si-typeahead.component.d.ts +22 -0
  164. package/typeahead/si-typeahead.directive.d.ts +196 -0
  165. package/typeahead/si-typeahead.model.d.ts +60 -0
  166. package/typeahead/si-typeahead.module.d.ts +8 -0
  167. package/typeahead/si-typeahead.sorting.d.ts +10 -0
  168. package/wizard/index.d.ts +7 -0
  169. package/wizard/package.json +3 -0
  170. package/wizard/si-wizard-step.component.d.ts +21 -0
  171. package/wizard/si-wizard.component.d.ts +196 -0
  172. package/wizard/si-wizard.module.d.ts +8 -0
@@ -0,0 +1,90 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, inject, computed, Component, NgModule } from '@angular/core';
3
+ import * as i1 from '@siemens/element-translate-ng/translate';
4
+ import { SiTranslateService, SiTranslateModule } from '@siemens/element-translate-ng/translate';
5
+
6
+ /**
7
+ * Copyright Siemens 2016 - 2025.
8
+ * SPDX-License-Identifier: MIT
9
+ */
10
+ class SiLanguageSwitcherComponent {
11
+ /**
12
+ * Key for translation.
13
+ * If the key is set to an empty string, the language of the underlying translation framework will not be switched.
14
+ *
15
+ * @defaultValue 'LANGUAGE'
16
+ */
17
+ translationKey = input('LANGUAGE');
18
+ /**
19
+ * Text for aria label for the language selector. Needed for a11y
20
+ *
21
+ * @defaultValue
22
+ * ```
23
+ * $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`
24
+ * ```
25
+ */
26
+ languageSwitcherLabel = input($localize `:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`);
27
+ /**
28
+ * List of all available languages in this application.
29
+ *
30
+ * @defaultValue null
31
+ */
32
+ availableLanguages = input(null);
33
+ translate = inject(SiTranslateService);
34
+ availableIsoLanguages = computed(() => {
35
+ let languages = this.availableLanguages() ?? this.translate.availableLanguages;
36
+ if (typeof languages[0] !== 'object') {
37
+ languages = languages.map(languageValue => {
38
+ const translationKey = this.translationKey();
39
+ return {
40
+ value: languageValue,
41
+ name: translationKey ? `${translationKey}.${languageValue.toUpperCase()}` : languageValue
42
+ };
43
+ });
44
+ }
45
+ return languages;
46
+ });
47
+ switchLanguage(target) {
48
+ const language = target?.value;
49
+ const translationKey = this.translationKey();
50
+ if (!language || !translationKey || translationKey.length === 0) {
51
+ return;
52
+ }
53
+ this.translate.setCurrentLanguage(language);
54
+ }
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLanguageSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiLanguageSwitcherComponent, isStandalone: true, selector: "si-language-switcher", inputs: { translationKey: { classPropertyName: "translationKey", publicName: "translationKey", isSignal: true, isRequired: false, transformFunction: null }, languageSwitcherLabel: { classPropertyName: "languageSwitcherLabel", publicName: "languageSwitcherLabel", isSignal: true, isRequired: false, transformFunction: null }, availableLanguages: { classPropertyName: "availableLanguages", publicName: "availableLanguages", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<select\n class=\"si-title-2 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n", styles: [":host{--language-switcher-color: var(--element-text-active)}.language-switcher-select{inline-size:100%;background-color:transparent;border:0;border-block-end:1px solid var(--input-border-color);padding:6px;cursor:pointer;color:var(--language-switcher-color)}@media (min-width: 768px){.language-switcher-select{max-inline-size:200px}}.language-switcher-select option{background-color:var(--element-base-1)}\n"], dependencies: [{ kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }] });
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLanguageSwitcherComponent, decorators: [{
59
+ type: Component,
60
+ args: [{ selector: 'si-language-switcher', imports: [SiTranslateModule], template: "<select\n class=\"si-title-2 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n", styles: [":host{--language-switcher-color: var(--element-text-active)}.language-switcher-select{inline-size:100%;background-color:transparent;border:0;border-block-end:1px solid var(--input-border-color);padding:6px;cursor:pointer;color:var(--language-switcher-color)}@media (min-width: 768px){.language-switcher-select{max-inline-size:200px}}.language-switcher-select option{background-color:var(--element-base-1)}\n"] }]
61
+ }] });
62
+
63
+ /**
64
+ * Copyright Siemens 2016 - 2025.
65
+ * SPDX-License-Identifier: MIT
66
+ */
67
+ class SiLanguageSwitcherModule {
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLanguageSwitcherModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
69
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiLanguageSwitcherModule, imports: [SiLanguageSwitcherComponent], exports: [SiLanguageSwitcherComponent] });
70
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLanguageSwitcherModule, imports: [SiLanguageSwitcherComponent] });
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiLanguageSwitcherModule, decorators: [{
73
+ type: NgModule,
74
+ args: [{
75
+ imports: [SiLanguageSwitcherComponent],
76
+ exports: [SiLanguageSwitcherComponent]
77
+ }]
78
+ }] });
79
+
80
+ /**
81
+ * Copyright Siemens 2016 - 2025.
82
+ * SPDX-License-Identifier: MIT
83
+ */
84
+
85
+ /**
86
+ * Generated bundle index. Do not edit.
87
+ */
88
+
89
+ export { SiLanguageSwitcherComponent, SiLanguageSwitcherModule };
90
+ //# sourceMappingURL=siemens-element-ng-language-switcher.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siemens-element-ng-language-switcher.mjs","sources":["../../../../projects/element-ng/language-switcher/si-language-switcher.component.ts","../../../../projects/element-ng/language-switcher/si-language-switcher.component.html","../../../../projects/element-ng/language-switcher/si-language-switcher.module.ts","../../../../projects/element-ng/language-switcher/index.ts","../../../../projects/element-ng/language-switcher/siemens-element-ng-language-switcher.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Component, computed, inject, input } from '@angular/core';\nimport { SiTranslateModule, SiTranslateService } from '@siemens/element-translate-ng/translate';\n\nimport { IsoLanguageValue } from './iso-language-value';\n\n@Component({\n selector: 'si-language-switcher',\n templateUrl: './si-language-switcher.component.html',\n styleUrl: './si-language-switcher.component.scss',\n imports: [SiTranslateModule]\n})\nexport class SiLanguageSwitcherComponent {\n /**\n * Key for translation.\n * If the key is set to an empty string, the language of the underlying translation framework will not be switched.\n *\n * @defaultValue 'LANGUAGE'\n */\n readonly translationKey = input('LANGUAGE');\n /**\n * Text for aria label for the language selector. Needed for a11y\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`\n * ```\n */\n readonly languageSwitcherLabel = input(\n $localize`:@@SI_LANGUAGE_SWITCHER.LABEL:Language switcher`\n );\n\n /**\n * List of all available languages in this application.\n *\n * @defaultValue null\n */\n readonly availableLanguages = input<(string | IsoLanguageValue)[] | null>(null);\n\n protected readonly translate = inject(SiTranslateService);\n\n protected readonly availableIsoLanguages = computed(() => {\n let languages = this.availableLanguages() ?? this.translate.availableLanguages;\n if (typeof languages[0] !== 'object') {\n languages = (languages as string[]).map(languageValue => {\n const translationKey = this.translationKey();\n return {\n value: languageValue,\n name: translationKey ? `${translationKey}.${languageValue.toUpperCase()}` : languageValue\n };\n });\n }\n return languages as IsoLanguageValue[];\n });\n\n protected switchLanguage(target: EventTarget | null): void {\n const language = (target as HTMLSelectElement)?.value;\n const translationKey = this.translationKey();\n if (!language || !translationKey || translationKey.length === 0) {\n return;\n }\n this.translate.setCurrentLanguage(language);\n }\n}\n","<select\n class=\"si-title-2 language-switcher-select\"\n [attr.aria-label]=\"languageSwitcherLabel() | translate\"\n (change)=\"switchLanguage($event.target)\"\n>\n @for (language of availableIsoLanguages(); track language.value) {\n <option [value]=\"language.value\" [selected]=\"language.value === translate.currentLanguage\">\n {{ language.name | translate }}\n </option>\n }\n</select>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiLanguageSwitcherComponent } from './si-language-switcher.component';\n\n@NgModule({\n imports: [SiLanguageSwitcherComponent],\n exports: [SiLanguageSwitcherComponent]\n})\nexport class SiLanguageSwitcherModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-language-switcher.component';\nexport * from './si-language-switcher.module';\nexport * from './iso-language-value';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,267 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, numberAttribute, booleanAttribute, computed, output, viewChild, signal, inject, ChangeDetectorRef, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
+ import { Validators, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
4
+ import { SI_FORM_ITEM_CONTROL } from '@siemens/element-ng/form';
5
+ import { addIcons, elementPlus, elementMinus, SiIconNextComponent } from '@siemens/element-ng/icon';
6
+ import * as i1 from '@siemens/element-translate-ng/translate';
7
+ import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
8
+ import { timer } from 'rxjs';
9
+
10
+ /**
11
+ * Copyright Siemens 2016 - 2025.
12
+ * SPDX-License-Identifier: MIT
13
+ */
14
+ class SiNumberInputComponent {
15
+ static idCounter = 0;
16
+ static formatValidator = control => {
17
+ if (control.value != null && isNaN(control.value)) {
18
+ return { numberFormat: true };
19
+ }
20
+ return null;
21
+ };
22
+ /**
23
+ * The min. value for HTML input
24
+ *
25
+ * @defaultValue undefined
26
+ */
27
+ minInput = input(undefined, {
28
+ // eslint-disable-next-line @angular-eslint/no-input-rename
29
+ alias: 'min',
30
+ transform: numberAttribute
31
+ });
32
+ /**
33
+ * The max. value for HTML input
34
+ *
35
+ * @defaultValue undefined
36
+ */
37
+ maxInput = input(undefined, {
38
+ // eslint-disable-next-line @angular-eslint/no-input-rename
39
+ alias: 'max',
40
+ transform: numberAttribute
41
+ });
42
+ /**
43
+ * The step size for HTML input
44
+ *
45
+ * @defaultValue 1
46
+ */
47
+ step = input(1);
48
+ /** The value */
49
+ value = input();
50
+ /** Optional unit label */
51
+ unit = input();
52
+ /**
53
+ * Show increment/decrement buttons?
54
+ *
55
+ * @defaultValue true
56
+ */
57
+ showButtons = input(true, { transform: booleanAttribute });
58
+ /**
59
+ * The aria-label passed to the input
60
+ *
61
+ * @defaultValue undefined
62
+ */
63
+ ariaLabel = input(undefined, { alias: 'aria-label' });
64
+ /**
65
+ * ID that is set on the input, e.g. for `<label for="...">`
66
+ *
67
+ * @defaultValue
68
+ * ```
69
+ * `__si-number-input-${SiNumberInputComponent.idCounter++}`
70
+ * ```
71
+ */
72
+ inputId = input(`__si-number-input-${SiNumberInputComponent.idCounter++}`);
73
+ id = computed(() => this.inputId());
74
+ /** @defaultValue false */
75
+ // eslint-disable-next-line @angular-eslint/no-input-rename
76
+ disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });
77
+ /** @defaultValue false */
78
+ readonly = input(false, { transform: booleanAttribute });
79
+ /**
80
+ * The placeholder for input field.
81
+ */
82
+ placeholder = input();
83
+ valueChange = output();
84
+ inputElement = viewChild.required('inputElement');
85
+ /** @internal */
86
+ errormessageId = `${this.id()}-errormessage`;
87
+ canInc = true;
88
+ canDec = true;
89
+ disabled = computed(() => this.disabledInput() || this.disabledNgControl());
90
+ disabledNgControl = signal(false);
91
+ onTouched = () => { };
92
+ onChange = () => { };
93
+ validator = SiNumberInputComponent.formatValidator;
94
+ onValidatorChanged = () => { };
95
+ min = computed(() => {
96
+ const minVal = this.minInput();
97
+ return minVal === undefined || isNaN(minVal) ? undefined : minVal;
98
+ });
99
+ max = computed(() => {
100
+ const maxVal = this.maxInput();
101
+ return maxVal === undefined || isNaN(maxVal) ? undefined : maxVal;
102
+ });
103
+ icons = addIcons({ elementMinus, elementPlus });
104
+ internalValue;
105
+ autoUpdate$ = timer(400, 80);
106
+ autoUpdateSubs;
107
+ changeDetectorRef = inject(ChangeDetectorRef);
108
+ ngOnChanges(changes) {
109
+ if (changes.value) {
110
+ this.writeValueToInput(this.value());
111
+ }
112
+ if (changes.minInput || changes.maxInput) {
113
+ const minValue = this.min();
114
+ const maxValue = this.max();
115
+ this.validator = Validators.compose([
116
+ minValue != null ? Validators.min(minValue) : null,
117
+ maxValue != null ? Validators.max(maxValue) : null,
118
+ SiNumberInputComponent.formatValidator
119
+ ]);
120
+ this.onValidatorChanged();
121
+ }
122
+ this.updateStepButtons();
123
+ }
124
+ /** @internal */
125
+ registerOnChange(fn) {
126
+ this.onChange = fn;
127
+ }
128
+ /** @internal */
129
+ registerOnTouched(fn) {
130
+ this.onTouched = fn;
131
+ }
132
+ /** @internal */
133
+ setDisabledState(isDisabled) {
134
+ this.disabledNgControl.set(isDisabled);
135
+ }
136
+ /** @internal */
137
+ writeValue(value) {
138
+ this.writeValueToInput(value);
139
+ this.updateStepButtons();
140
+ this.changeDetectorRef.markForCheck();
141
+ }
142
+ /** @internal */
143
+ validate(control) {
144
+ return this.validator ? this.validator(control) : null;
145
+ }
146
+ /** @internal */
147
+ registerOnValidatorChange(fn) {
148
+ this.onValidatorChanged = fn;
149
+ }
150
+ modelChanged() {
151
+ const value = this.inputElement().nativeElement.value
152
+ ? this.inputElement().nativeElement.valueAsNumber
153
+ : undefined;
154
+ this.internalValue = value;
155
+ this.updateStepButtons();
156
+ this.onChange(value);
157
+ this.valueChange.emit(value);
158
+ }
159
+ autoUpdateStart(event, isIncrement) {
160
+ const mouseButton = event.button;
161
+ if (mouseButton) {
162
+ return;
163
+ }
164
+ this.onTouched();
165
+ event.preventDefault();
166
+ const trigger = isIncrement ? () => this.increment() : () => this.decrement();
167
+ this.autoUpdateSubs?.unsubscribe();
168
+ this.autoUpdateSubs = this.autoUpdate$.subscribe(trigger);
169
+ trigger();
170
+ }
171
+ autoUpdateStop() {
172
+ this.autoUpdateSubs?.unsubscribe();
173
+ this.autoUpdateSubs = undefined;
174
+ }
175
+ updateStepButtons() {
176
+ const stepValue = this.step();
177
+ const step = typeof stepValue === 'number' ? stepValue : 1;
178
+ const max = this.max();
179
+ this.canInc = max == null || this.internalValue == null || this.internalValue + step <= max;
180
+ const min = this.min();
181
+ this.canDec = min == null || this.internalValue == null || this.internalValue - step >= min;
182
+ if (!this.canInc || !this.canDec) {
183
+ this.autoUpdateStop();
184
+ }
185
+ }
186
+ decrement() {
187
+ this.inputElement().nativeElement.stepDown();
188
+ this.modelChanged();
189
+ }
190
+ increment() {
191
+ this.inputElement().nativeElement.stepUp();
192
+ this.modelChanged();
193
+ }
194
+ writeValueToInput(value) {
195
+ this.inputElement().nativeElement.value = value == null ? '' : value.toString();
196
+ this.internalValue = value;
197
+ }
198
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
199
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiNumberInputComponent, isStandalone: true, selector: "si-number-input", inputs: { minInput: { classPropertyName: "minInput", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, maxInput: { classPropertyName: "maxInput", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.show-step-buttons": "showButtons()", "class.disabled": "disabled()", "class.readonly": "readonly()" } }, providers: [
200
+ {
201
+ provide: NG_VALUE_ACCESSOR,
202
+ useExisting: SiNumberInputComponent,
203
+ multi: true
204
+ },
205
+ {
206
+ provide: NG_VALIDATORS,
207
+ useExisting: SiNumberInputComponent,
208
+ multi: true
209
+ },
210
+ {
211
+ provide: SI_FORM_ITEM_CONTROL,
212
+ useExisting: SiNumberInputComponent
213
+ }
214
+ ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<input\n #inputElement\n type=\"number\"\n class=\"focus-none\"\n [attr.id]=\"inputId()\"\n [step]=\"step()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [attr.aria-describedby]=\"errormessageId\"\n [attr.placeholder]=\"placeholder() | translate\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n (blur)=\"onTouched()\"\n (input)=\"modelChanged()\"\n/>\n@if (unit()) {\n <span class=\"unit ms-2\" [class.text-secondary]=\"!disabled()\" [class.text-disabled]=\"disabled()\">{{\n unit()\n }}</span>\n} @else {\n <!-- To reserve space for feedback icon -->\n <span class=\"unit\"></span>\n}\n@if (showButtons()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"dec btn btn-circle btn-tertiary btn-xs my-n3 ms-2\"\n [disabled]=\"disabled() || readonly() || !canDec\"\n (mousedown)=\"autoUpdateStart($event, false)\"\n (touchstart)=\"autoUpdateStart($event, false)\"\n (touchend)=\"autoUpdateStop()\"\n (mouseup)=\"autoUpdateStop()\"\n (mouseleave)=\"autoUpdateStop()\"\n >\n <si-icon-next [icon]=\"icons.elementMinus\" />\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"inc btn btn-circle btn-tertiary btn-xs my-n3 me-n2\"\n [disabled]=\"disabled() || readonly() || !canInc\"\n (mousedown)=\"autoUpdateStart($event, true)\"\n (touchstart)=\"autoUpdateStart($event, true)\"\n (touchend)=\"autoUpdateStop()\"\n (mouseup)=\"autoUpdateStop()\"\n (mouseleave)=\"autoUpdateStop()\"\n >\n <si-icon-next [icon]=\"icons.elementPlus\" />\n </button>\n}\n", styles: [":host{display:flex;align-items:center;padding-inline-end:7px}:host.show-step-buttons{--si-action-icon-offset: 48px}:host:focus-within{outline:var(--element-button-focus-width) solid var(--element-focus-default);outline-offset:var(--element-button-focus-overlay-width)}:host.disabled ::placeholder{color:transparent}input{-moz-appearance:textfield;border:0;margin:0;padding-block:0;background:transparent;color:inherit;text-align:inherit;flex:1 0 0;min-inline-size:0}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.unit{padding-inline-end:var(--si-feedback-icon-offset, 0)}\n"], dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
+ }
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNumberInputComponent, decorators: [{
217
+ type: Component,
218
+ args: [{ selector: 'si-number-input', providers: [
219
+ {
220
+ provide: NG_VALUE_ACCESSOR,
221
+ useExisting: SiNumberInputComponent,
222
+ multi: true
223
+ },
224
+ {
225
+ provide: NG_VALIDATORS,
226
+ useExisting: SiNumberInputComponent,
227
+ multi: true
228
+ },
229
+ {
230
+ provide: SI_FORM_ITEM_CONTROL,
231
+ useExisting: SiNumberInputComponent
232
+ }
233
+ ], changeDetection: ChangeDetectionStrategy.OnPush, imports: [SiIconNextComponent, SiTranslateModule], host: {
234
+ '[class.show-step-buttons]': 'showButtons()',
235
+ '[class.disabled]': 'disabled()',
236
+ '[class.readonly]': 'readonly()'
237
+ }, template: "<input\n #inputElement\n type=\"number\"\n class=\"focus-none\"\n [attr.id]=\"inputId()\"\n [step]=\"step()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [attr.aria-describedby]=\"errormessageId\"\n [attr.placeholder]=\"placeholder() | translate\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n (blur)=\"onTouched()\"\n (input)=\"modelChanged()\"\n/>\n@if (unit()) {\n <span class=\"unit ms-2\" [class.text-secondary]=\"!disabled()\" [class.text-disabled]=\"disabled()\">{{\n unit()\n }}</span>\n} @else {\n <!-- To reserve space for feedback icon -->\n <span class=\"unit\"></span>\n}\n@if (showButtons()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"dec btn btn-circle btn-tertiary btn-xs my-n3 ms-2\"\n [disabled]=\"disabled() || readonly() || !canDec\"\n (mousedown)=\"autoUpdateStart($event, false)\"\n (touchstart)=\"autoUpdateStart($event, false)\"\n (touchend)=\"autoUpdateStop()\"\n (mouseup)=\"autoUpdateStop()\"\n (mouseleave)=\"autoUpdateStop()\"\n >\n <si-icon-next [icon]=\"icons.elementMinus\" />\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"inc btn btn-circle btn-tertiary btn-xs my-n3 me-n2\"\n [disabled]=\"disabled() || readonly() || !canInc\"\n (mousedown)=\"autoUpdateStart($event, true)\"\n (touchstart)=\"autoUpdateStart($event, true)\"\n (touchend)=\"autoUpdateStop()\"\n (mouseup)=\"autoUpdateStop()\"\n (mouseleave)=\"autoUpdateStop()\"\n >\n <si-icon-next [icon]=\"icons.elementPlus\" />\n </button>\n}\n", styles: [":host{display:flex;align-items:center;padding-inline-end:7px}:host.show-step-buttons{--si-action-icon-offset: 48px}:host:focus-within{outline:var(--element-button-focus-width) solid var(--element-focus-default);outline-offset:var(--element-button-focus-overlay-width)}:host.disabled ::placeholder{color:transparent}input{-moz-appearance:textfield;border:0;margin:0;padding-block:0;background:transparent;color:inherit;text-align:inherit;flex:1 0 0;min-inline-size:0}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.unit{padding-inline-end:var(--si-feedback-icon-offset, 0)}\n"] }]
238
+ }] });
239
+
240
+ /**
241
+ * Copyright Siemens 2016 - 2025.
242
+ * SPDX-License-Identifier: MIT
243
+ */
244
+ class SiNumberInputModule {
245
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNumberInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
246
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiNumberInputModule, imports: [SiNumberInputComponent], exports: [SiNumberInputComponent] });
247
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNumberInputModule, imports: [SiNumberInputComponent] });
248
+ }
249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNumberInputModule, decorators: [{
250
+ type: NgModule,
251
+ args: [{
252
+ imports: [SiNumberInputComponent],
253
+ exports: [SiNumberInputComponent]
254
+ }]
255
+ }] });
256
+
257
+ /**
258
+ * Copyright Siemens 2016 - 2025.
259
+ * SPDX-License-Identifier: MIT
260
+ */
261
+
262
+ /**
263
+ * Generated bundle index. Do not edit.
264
+ */
265
+
266
+ export { SiNumberInputComponent, SiNumberInputModule };
267
+ //# sourceMappingURL=siemens-element-ng-number-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siemens-element-ng-number-input.mjs","sources":["../../../../projects/element-ng/number-input/si-number-input.component.ts","../../../../projects/element-ng/number-input/si-number-input.component.html","../../../../projects/element-ng/number-input/si-number-input.module.ts","../../../../projects/element-ng/number-input/index.ts","../../../../projects/element-ng/number-input/siemens-element-ng-number-input.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n numberAttribute,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { SI_FORM_ITEM_CONTROL, SiFormItemControl } from '@siemens/element-ng/form';\nimport { elementMinus, elementPlus, addIcons, SiIconNextComponent } from '@siemens/element-ng/icon';\nimport { SiTranslateModule, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { Subscription, timer } from 'rxjs';\n\n@Component({\n selector: 'si-number-input',\n templateUrl: './si-number-input.component.html',\n styleUrl: './si-number-input.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SiNumberInputComponent,\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: SiNumberInputComponent,\n multi: true\n },\n {\n provide: SI_FORM_ITEM_CONTROL,\n useExisting: SiNumberInputComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SiIconNextComponent, SiTranslateModule],\n host: {\n '[class.show-step-buttons]': 'showButtons()',\n '[class.disabled]': 'disabled()',\n '[class.readonly]': 'readonly()'\n }\n})\nexport class SiNumberInputComponent\n implements OnChanges, ControlValueAccessor, Validator, SiFormItemControl\n{\n private static idCounter = 0;\n private static formatValidator: ValidatorFn = control => {\n if (control.value != null && isNaN(control.value)) {\n return { numberFormat: true };\n }\n return null;\n };\n\n /**\n * The min. value for HTML input\n *\n * @defaultValue undefined\n */\n readonly minInput = input<number | undefined, unknown>(undefined, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'min',\n transform: numberAttribute\n });\n /**\n * The max. value for HTML input\n *\n * @defaultValue undefined\n */\n readonly maxInput = input<number | undefined, unknown>(undefined, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'max',\n transform: numberAttribute\n });\n /**\n * The step size for HTML input\n *\n * @defaultValue 1\n */\n readonly step = input<number | 'any'>(1);\n /** The value */\n readonly value = input<number>();\n /** Optional unit label */\n readonly unit = input<string>();\n /**\n * Show increment/decrement buttons?\n *\n * @defaultValue true\n */\n readonly showButtons = input(true, { transform: booleanAttribute });\n /**\n * The aria-label passed to the input\n *\n * @defaultValue undefined\n */\n readonly ariaLabel = input<TranslatableString>(undefined, { alias: 'aria-label' });\n /**\n * ID that is set on the input, e.g. for `<label for=\"...\">`\n *\n * @defaultValue\n * ```\n * `__si-number-input-${SiNumberInputComponent.idCounter++}`\n * ```\n */\n readonly inputId = input(`__si-number-input-${SiNumberInputComponent.idCounter++}`);\n\n readonly id = computed(() => this.inputId());\n\n /** @defaultValue false */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n /** @defaultValue false */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n /**\n * The placeholder for input field.\n */\n readonly placeholder = input<TranslatableString>();\n\n readonly valueChange = output<number | undefined>();\n\n readonly inputElement = viewChild.required<ElementRef<HTMLInputElement>>('inputElement');\n\n /** @internal */\n readonly errormessageId = `${this.id()}-errormessage`;\n\n protected canInc = true;\n protected canDec = true;\n protected readonly disabled = computed(() => this.disabledInput() || this.disabledNgControl());\n private readonly disabledNgControl = signal(false);\n protected onTouched: () => void = () => {};\n protected onChange: (val: any) => void = () => {};\n protected validator: ValidatorFn | null = SiNumberInputComponent.formatValidator;\n protected onValidatorChanged: () => void = () => {};\n protected readonly min = computed(() => {\n const minVal = this.minInput();\n return minVal === undefined || isNaN(minVal) ? undefined : minVal;\n });\n protected readonly max = computed(() => {\n const maxVal = this.maxInput();\n return maxVal === undefined || isNaN(maxVal) ? undefined : maxVal;\n });\n protected readonly icons = addIcons({ elementMinus, elementPlus });\n private internalValue?: number;\n private autoUpdate$ = timer(400, 80);\n private autoUpdateSubs?: Subscription;\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.writeValueToInput(this.value());\n }\n if (changes.minInput || changes.maxInput) {\n const minValue = this.min();\n const maxValue = this.max();\n this.validator = Validators.compose([\n minValue != null ? Validators.min(minValue) : null,\n maxValue != null ? Validators.max(maxValue) : null,\n SiNumberInputComponent.formatValidator\n ])!;\n this.onValidatorChanged();\n }\n this.updateStepButtons();\n }\n\n /** @internal */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /** @internal */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @internal */\n setDisabledState(isDisabled: boolean): void {\n this.disabledNgControl.set(isDisabled);\n }\n\n /** @internal */\n writeValue(value: number | undefined): void {\n this.writeValueToInput(value);\n this.updateStepButtons();\n this.changeDetectorRef.markForCheck();\n }\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n return this.validator ? this.validator(control) : null;\n }\n\n /** @internal */\n registerOnValidatorChange?(fn: () => void): void {\n this.onValidatorChanged = fn;\n }\n\n protected modelChanged(): void {\n const value = this.inputElement().nativeElement.value\n ? this.inputElement().nativeElement.valueAsNumber\n : undefined;\n this.internalValue = value;\n this.updateStepButtons();\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n protected autoUpdateStart(event: Event, isIncrement: boolean): void {\n const mouseButton = (event as MouseEvent).button;\n if (mouseButton) {\n return;\n }\n\n this.onTouched();\n event.preventDefault();\n const trigger = isIncrement ? () => this.increment() : () => this.decrement();\n this.autoUpdateSubs?.unsubscribe();\n this.autoUpdateSubs = this.autoUpdate$.subscribe(trigger);\n trigger();\n }\n\n protected autoUpdateStop(): void {\n this.autoUpdateSubs?.unsubscribe();\n this.autoUpdateSubs = undefined;\n }\n\n private updateStepButtons(): void {\n const stepValue = this.step();\n const step = typeof stepValue === 'number' ? stepValue : 1;\n const max = this.max();\n this.canInc = max == null || this.internalValue == null || this.internalValue + step <= max;\n const min = this.min();\n this.canDec = min == null || this.internalValue == null || this.internalValue - step >= min;\n if (!this.canInc || !this.canDec) {\n this.autoUpdateStop();\n }\n }\n\n private decrement(): void {\n this.inputElement().nativeElement.stepDown();\n this.modelChanged();\n }\n\n private increment(): void {\n this.inputElement().nativeElement.stepUp();\n this.modelChanged();\n }\n\n private writeValueToInput(value: number | undefined): void {\n this.inputElement().nativeElement.value = value == null ? '' : value.toString();\n this.internalValue = value;\n }\n}\n","<input\n #inputElement\n type=\"number\"\n class=\"focus-none\"\n [attr.id]=\"inputId()\"\n [step]=\"step()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() | translate\"\n [attr.aria-describedby]=\"errormessageId\"\n [attr.placeholder]=\"placeholder() | translate\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n (blur)=\"onTouched()\"\n (input)=\"modelChanged()\"\n/>\n@if (unit()) {\n <span class=\"unit ms-2\" [class.text-secondary]=\"!disabled()\" [class.text-disabled]=\"disabled()\">{{\n unit()\n }}</span>\n} @else {\n <!-- To reserve space for feedback icon -->\n <span class=\"unit\"></span>\n}\n@if (showButtons()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"dec btn btn-circle btn-tertiary btn-xs my-n3 ms-2\"\n [disabled]=\"disabled() || readonly() || !canDec\"\n (mousedown)=\"autoUpdateStart($event, false)\"\n (touchstart)=\"autoUpdateStart($event, false)\"\n (touchend)=\"autoUpdateStop()\"\n (mouseup)=\"autoUpdateStop()\"\n (mouseleave)=\"autoUpdateStop()\"\n >\n <si-icon-next [icon]=\"icons.elementMinus\" />\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"inc btn btn-circle btn-tertiary btn-xs my-n3 me-n2\"\n [disabled]=\"disabled() || readonly() || !canInc\"\n (mousedown)=\"autoUpdateStart($event, true)\"\n (touchstart)=\"autoUpdateStart($event, true)\"\n (touchend)=\"autoUpdateStop()\"\n (mouseup)=\"autoUpdateStop()\"\n (mouseleave)=\"autoUpdateStop()\"\n >\n <si-icon-next [icon]=\"icons.elementPlus\" />\n </button>\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiNumberInputComponent } from './si-number-input.component';\n\n@NgModule({\n imports: [SiNumberInputComponent],\n exports: [SiNumberInputComponent]\n})\nexport class SiNumberInputModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-number-input.component';\nexport * from './si-number-input.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -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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"}