design-angular-kit 1.0.0-9 → 1.0.0-prerelease.1
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 +77 -7
- package/assets/i18n/en.json +81 -12
- package/assets/i18n/it.json +80 -11
- package/esm2022/lib/abstracts/abstract-form.component.mjs +187 -0
- package/esm2022/lib/abstracts/abstract.component.mjs +45 -0
- package/esm2022/lib/components/components.module.mjs +218 -0
- package/esm2022/lib/components/core/accordion/accordion.component.mjs +38 -0
- package/esm2022/lib/components/core/alert/alert.component.mjs +72 -0
- package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
- package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +38 -0
- package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
- package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
- package/esm2022/lib/components/core/button/button.directive.mjs +86 -0
- package/esm2022/lib/components/core/callout/callout.component.mjs +57 -0
- package/esm2022/lib/components/core/card/card.component.mjs +59 -0
- package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +81 -0
- package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
- package/esm2022/lib/components/core/carousel/carousel.module.mjs +23 -0
- package/esm2022/lib/components/core/chip/chip.component.mjs +96 -0
- package/esm2022/lib/components/core/collapse/collapse.component.mjs +104 -0
- package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
- package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
- package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +59 -0
- package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +27 -0
- package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +141 -0
- package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +62 -0
- package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
- package/esm2022/lib/components/core/forward/forward.directive.mjs +53 -0
- package/esm2022/lib/components/core/link/link.component.mjs +42 -0
- package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
- package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +51 -0
- package/esm2022/lib/components/core/list/list.module.mjs +23 -0
- package/esm2022/lib/components/core/modal/modal.component.mjs +195 -0
- package/esm2022/lib/components/core/notifications/notifications.component.mjs +112 -0
- package/esm2022/lib/components/core/pagination/pagination.component.mjs +127 -0
- package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
- package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
- package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +26 -0
- package/esm2022/lib/components/core/spinner/spinner.component.mjs +31 -0
- package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +112 -0
- package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +19 -0
- package/esm2022/lib/components/core/steppers/steppers.module.mjs +23 -0
- package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +60 -0
- package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
- package/esm2022/lib/components/core/tab/tab.module.mjs +23 -0
- package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +136 -0
- package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
- package/esm2022/lib/components/core/table/table.component.mjs +45 -0
- package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +95 -0
- package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
- package/esm2022/lib/components/form/form.module.mjs +59 -0
- package/esm2022/lib/components/form/input/input.component.mjs +187 -0
- package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
- package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +58 -0
- package/esm2022/lib/components/form/range/range.component.mjs +64 -0
- package/esm2022/lib/components/form/rating/rating.component.mjs +51 -0
- package/esm2022/lib/components/form/select/select.component.mjs +70 -0
- package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
- package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +140 -0
- package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
- package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
- package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +58 -0
- package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +55 -0
- package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
- package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
- package/esm2022/lib/components/navigation/header/header.component.mjs +73 -0
- package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +41 -0
- package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +13 -0
- package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
- package/esm2022/lib/components/utils/error-page/error-page.component.mjs +75 -0
- package/esm2022/lib/components/utils/icon/icon.component.mjs +56 -0
- package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +47 -0
- package/esm2022/lib/design-angular-kit-config.mjs +15 -0
- package/esm2022/lib/design-angular-kit.module.mjs +68 -0
- package/esm2022/lib/enums/colors.enums.mjs +12 -0
- package/esm2022/lib/enums/sizes.enum.mjs +9 -0
- package/esm2022/lib/interfaces/core.mjs +16 -0
- package/esm2022/lib/interfaces/design-angular-kit-init.mjs +2 -0
- package/esm2022/lib/interfaces/form.mjs +2 -0
- package/esm2022/lib/interfaces/icon.mjs +165 -0
- package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
- package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
- package/esm2022/lib/pipes/duration.pipe.mjs +110 -0
- package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
- package/esm2022/lib/services/notification/notification.service.mjs +120 -0
- package/esm2022/lib/utils/coercion.mjs +18 -0
- package/esm2022/lib/utils/date-utils.mjs +160 -0
- package/esm2022/lib/utils/file-utils.mjs +73 -0
- package/esm2022/lib/utils/regex.mjs +31 -0
- package/esm2022/lib/validators/it-validators.mjs +153 -0
- package/esm2022/public_api.mjs +98 -0
- package/fesm2022/design-angular-kit.mjs +5450 -0
- package/fesm2022/design-angular-kit.mjs.map +1 -0
- package/lib/abstracts/{abstract-form-component.d.ts → abstract-form.component.d.ts} +12 -14
- package/lib/abstracts/abstract.component.d.ts +18 -8
- package/lib/components/components.module.d.ts +45 -0
- package/lib/components/core/accordion/accordion.component.d.ts +11 -5
- package/lib/components/core/alert/alert.component.d.ts +15 -10
- package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
- package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +13 -0
- package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
- package/lib/components/core/badge/badge.directive.d.ts +14 -7
- package/lib/components/core/button/button.directive.d.ts +25 -15
- package/lib/components/core/callout/callout.component.d.ts +18 -20
- package/lib/components/core/card/card.component.d.ts +46 -18
- package/lib/components/core/carousel/carousel/carousel.component.d.ts +34 -15
- package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +8 -3
- package/lib/components/core/carousel/carousel.module.d.ts +8 -0
- package/lib/components/core/chip/chip.component.d.ts +8 -5
- package/lib/components/core/collapse/collapse.component.d.ts +22 -15
- package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +3 -3
- package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +3 -3
- package/lib/components/core/dimmer/dimmer.component.d.ts +4 -4
- package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
- package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +24 -17
- package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +15 -12
- package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
- package/lib/components/core/forward/forward.directive.d.ts +3 -3
- package/lib/components/core/link/link.component.d.ts +14 -10
- package/lib/components/core/list/list/list.component.d.ts +20 -6
- package/lib/components/core/list/list-item/list-item.component.d.ts +23 -9
- package/lib/components/core/list/list.module.d.ts +8 -0
- package/lib/components/core/modal/modal.component.d.ts +89 -13
- package/lib/components/core/notifications/notifications.component.d.ts +9 -8
- package/lib/components/core/pagination/pagination.component.d.ts +71 -10
- package/lib/components/core/popover/popover.directive.d.ts +15 -14
- package/lib/components/core/progress-bar/progress-bar.component.d.ts +11 -8
- package/lib/components/core/progress-button/progress-button.component.d.ts +5 -6
- package/lib/components/core/spinner/spinner.component.d.ts +13 -10
- package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +55 -27
- package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +5 -4
- package/lib/components/core/steppers/steppers.module.d.ts +8 -0
- package/lib/components/core/tab/tab-container/tab-container.component.d.ts +15 -12
- package/lib/components/core/tab/tab-item/tab-item.component.d.ts +14 -10
- package/lib/components/core/tab/tab.module.d.ts +8 -0
- package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
- package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
- package/lib/components/core/table/table.component.d.ts +26 -20
- package/lib/components/core/tooltip/tooltip.directive.d.ts +12 -11
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +49 -0
- package/lib/components/form/checkbox/checkbox.component.d.ts +23 -12
- package/lib/components/form/form.module.d.ts +17 -0
- package/lib/components/form/input/input.component.d.ts +42 -43
- package/lib/components/form/password-input/password-input.component.d.ts +35 -10
- package/lib/components/form/radio-button/radio-button.component.d.ts +20 -11
- package/lib/components/form/range/range.component.d.ts +42 -0
- package/lib/components/form/rating/rating.component.d.ts +24 -0
- package/lib/components/form/select/select.component.d.ts +12 -6
- package/lib/components/form/textarea/textarea.component.d.ts +15 -5
- package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +5 -5
- package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +14 -11
- package/lib/components/navigation/back-button/back-button.component.d.ts +8 -8
- package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +15 -16
- package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +13 -10
- package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +9 -8
- package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
- package/lib/components/navigation/header/header.component.d.ts +22 -25
- package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +16 -0
- package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
- package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
- package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
- package/lib/components/utils/icon/icon.component.d.ts +15 -15
- package/lib/components/utils/language-switcher/language-switcher.component.d.ts +9 -5
- package/lib/design-angular-kit-config.d.ts +16 -0
- package/lib/design-angular-kit.module.d.ts +6 -4
- package/lib/enums/colors.enums.d.ts +10 -0
- package/lib/enums/sizes.enum.d.ts +7 -0
- package/lib/interfaces/core.d.ts +16 -15
- package/lib/interfaces/design-angular-kit-init.d.ts +7 -0
- package/lib/interfaces/form.d.ts +9 -9
- package/lib/interfaces/icon.d.ts +4 -3
- package/lib/interfaces/sortable-table.d.ts +33 -0
- package/lib/pipes/date-ago.pipe.d.ts +17 -0
- package/lib/pipes/duration.pipe.d.ts +35 -0
- package/lib/pipes/mark-matching-text.pipe.d.ts +15 -7
- package/lib/services/{notifications/notifications.service.d.ts → notification/notification.service.d.ts} +3 -3
- package/lib/utils/coercion.d.ts +14 -0
- package/lib/utils/date-utils.d.ts +78 -0
- package/lib/utils/file-utils.d.ts +1 -1
- package/lib/utils/regex.d.ts +5 -0
- package/lib/validators/it-validators.d.ts +9 -2
- package/package.json +14 -20
- package/public_api.d.ts +29 -4
- package/esm2020/lib/abstracts/abstract-form-component.mjs +0 -174
- package/esm2020/lib/abstracts/abstract.component.mjs +0 -27
- package/esm2020/lib/components/core/accordion/accordion.component.mjs +0 -31
- package/esm2020/lib/components/core/alert/alert.component.mjs +0 -69
- package/esm2020/lib/components/core/badge/badge.directive.mjs +0 -34
- package/esm2020/lib/components/core/button/button.directive.mjs +0 -80
- package/esm2020/lib/components/core/callout/callout.component.mjs +0 -84
- package/esm2020/lib/components/core/card/card.component.mjs +0 -58
- package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +0 -66
- package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +0 -14
- package/esm2020/lib/components/core/chip/chip.component.mjs +0 -89
- package/esm2020/lib/components/core/collapse/collapse.component.mjs +0 -101
- package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +0 -24
- package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +0 -11
- package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +0 -59
- package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +0 -130
- package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +0 -68
- package/esm2020/lib/components/core/forward/forward.directive.mjs +0 -51
- package/esm2020/lib/components/core/link/link.component.mjs +0 -40
- package/esm2020/lib/components/core/list/list/list.component.mjs +0 -13
- package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +0 -36
- package/esm2020/lib/components/core/modal/modal.component.mjs +0 -98
- package/esm2020/lib/components/core/notifications/notifications.component.mjs +0 -110
- package/esm2020/lib/components/core/pagination/pagination.component.mjs +0 -51
- package/esm2020/lib/components/core/popover/popover.directive.mjs +0 -179
- package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +0 -34
- package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +0 -27
- package/esm2020/lib/components/core/spinner/spinner.component.mjs +0 -35
- package/esm2020/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +0 -119
- package/esm2020/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +0 -18
- package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +0 -59
- package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +0 -36
- package/esm2020/lib/components/core/table/table.component.mjs +0 -57
- package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +0 -143
- package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +0 -40
- package/esm2020/lib/components/form/input/input.component.mjs +0 -222
- package/esm2020/lib/components/form/password-input/password-input.component.mjs +0 -112
- package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +0 -53
- package/esm2020/lib/components/form/select/select.component.mjs +0 -62
- package/esm2020/lib/components/form/textarea/textarea.component.mjs +0 -46
- package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +0 -137
- package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +0 -104
- package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +0 -69
- package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +0 -74
- package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +0 -45
- package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +0 -23
- package/esm2020/lib/components/navigation/header/header.component.mjs +0 -63
- package/esm2020/lib/components/utils/icon/icon.component.mjs +0 -54
- package/esm2020/lib/components/utils/language-switcher/language-switcher.component.mjs +0 -39
- package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +0 -13
- package/esm2020/lib/design-angular-kit.module.mjs +0 -56
- package/esm2020/lib/interfaces/core.mjs +0 -16
- package/esm2020/lib/interfaces/form.mjs +0 -2
- package/esm2020/lib/interfaces/icon.mjs +0 -2
- package/esm2020/lib/modules/components.module.mjs +0 -257
- package/esm2020/lib/pipes/mark-matching-text.pipe.mjs +0 -36
- package/esm2020/lib/services/notifications/notifications.service.mjs +0 -120
- package/esm2020/lib/utils/boolean-input.mjs +0 -15
- package/esm2020/lib/utils/file-utils.mjs +0 -73
- package/esm2020/lib/utils/regex.mjs +0 -26
- package/esm2020/lib/validators/it-validators.mjs +0 -134
- package/esm2020/public_api.mjs +0 -70
- package/fesm2015/design-angular-kit.mjs +0 -3850
- package/fesm2015/design-angular-kit.mjs.map +0 -1
- package/fesm2020/design-angular-kit.mjs +0 -3797
- package/fesm2020/design-angular-kit.mjs.map +0 -1
- package/lib/components/utils/not-found-page/not-found-page.component.d.ts +0 -5
- package/lib/modules/components.module.d.ts +0 -61
- package/lib/utils/boolean-input.d.ts +0 -11
- /package/{esm2020 → esm2022}/design-angular-kit.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/utils.mjs +0 -0
package/README.md
CHANGED
|
@@ -14,13 +14,29 @@
|
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
|
+
<a href="https://www.npmjs.com/package/design-angular-kit"><img src="https://img.shields.io/npm/v/design-angular-kit/prerelease.svg" alt="NPM"></a>
|
|
17
18
|
<a href="https://www.npmjs.com/package/design-angular-kit"><img src="https://img.shields.io/npm/v/design-angular-kit/unstable.svg" alt="NPM"></a>
|
|
18
|
-
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="https://github.com/italia/design-angular-kit/actions"><img src="https://github.com/italia/design-angular-kit/actions/workflows/publish-release.yml/badge.svg" alt="Build"></a>
|
|
19
23
|
<a href="https://codecov.io/gh/italia/design-angular-kit"><img src="https://codecov.io/gh/italia/design-angular-kit/branch/main/graph/badge.svg?token=0Ud6YSFi0r" alt="codecov"></a>
|
|
20
24
|
<a href="https://github.com/italia/design-angular-kit/blob/main/LICENSE"><img src="https://img.shields.io/github/license/italia/design-angular-kit.svg" alt="License"></a>
|
|
21
25
|
<a href="https://github.com/italia/design-angular-kit/issues"><img src="https://img.shields.io/github/issues/italia/design-angular-kit.svg" alt="GitHub issues"></a>
|
|
22
26
|
</p>
|
|
23
27
|
|
|
28
|
+
<p align="center">
|
|
29
|
+
<a href="https://github.com/semantic-release/semantic-release">
|
|
30
|
+
<img src="https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release" alt="semantic-release: angular" />
|
|
31
|
+
</a>
|
|
32
|
+
<a href="https://github.com/prettier/prettier">
|
|
33
|
+
<img src="https://img.shields.io/badge/code%20style-prettier-ff69b4?logo=Prettier" alt="code style: prettier" />
|
|
34
|
+
</a>
|
|
35
|
+
<a href="https://github.com/eslint/eslint">
|
|
36
|
+
<img src="https://img.shields.io/badge/formatter-angular--eslint-4B32C3?logo=eslint" alt="formatter: angular-eslint" />
|
|
37
|
+
</a>
|
|
38
|
+
</p>
|
|
39
|
+
|
|
24
40
|
<p align="center">
|
|
25
41
|
<a href="https://developersitalia.slack.com/messages/C04H3C19D52/">
|
|
26
42
|
<img src="https://img.shields.io/badge/Slack%20channel-%23design--dev--angular-blue.svg" alt="Join the #design-dev-angular channel" />
|
|
@@ -45,29 +61,83 @@ Sul branch `main` potete trovare il codice dei lavori in corso e nella [mileston
|
|
|
45
61
|
|
|
46
62
|
**Commenti e contributi di tutta la community sono più che benvenuti!** 🎉
|
|
47
63
|
|
|
48
|
-
|
|
49
|
-
[
|
|
50
|
-
[
|
|
51
|
-
[
|
|
64
|
+
## Link utili
|
|
65
|
+
- [Video Commit University: Sviluppare da zero una Angular Web App per la PA](https://www.youtube.com/watch?v=gH-0P36E5jk&t=385s) ([slide](https://www.slideshare.net/commitsoftware/sviluppare-da-zero-una-angular-web-app-per-la-pa))
|
|
66
|
+
- [Video Meetup Angular Roma: Angular, Bootstrap Italia e non solo..](https://www.youtube.com/live/asGk-mYU-zM?feature=share)
|
|
67
|
+
- [Demo Design Angular Kit](https://github.com/cri99/demo-design-angular-kit)
|
|
68
|
+
- [Preview di Vercel (aggiornata ad ogni commit)](https://design-angular-kit.vercel.app/)
|
|
69
|
+
- [Discussione sulla nuova release](https://github.com/italia/design-angular-kit/discussions/127)
|
|
70
|
+
- [Milestone 1.0.0](https://github.com/italia/design-angular-kit/milestone/3)
|
|
52
71
|
|
|
53
72
|
## Come iniziare
|
|
54
73
|
|
|
55
74
|
Design Angular Kit è disponibile su NPM, per installarlo su una applicazione esistente sulla quale provare la libreria (attualmente non stabile) esegui il comando
|
|
56
75
|
|
|
57
76
|
```
|
|
58
|
-
npm install design-angular-kit@
|
|
77
|
+
npm install design-angular-kit@prerelease --save
|
|
59
78
|
```
|
|
60
79
|
|
|
61
80
|
Procedi a registrare `DesignAngularKitModule` nel tuo **app.module.ts**.
|
|
62
81
|
|
|
63
82
|
```typescript
|
|
83
|
+
import {DesignAngularKitModule, ItComponentsModule} from 'design-angular-kit';
|
|
84
|
+
|
|
64
85
|
@NgModule({
|
|
65
86
|
imports: [
|
|
66
87
|
...
|
|
67
|
-
DesignAngularKitModule
|
|
88
|
+
DesignAngularKitModule,
|
|
89
|
+
ItComponentsModule // importa tutti i componenti della libreria
|
|
68
90
|
]
|
|
69
91
|
})
|
|
70
92
|
```
|
|
93
|
+
<details>
|
|
94
|
+
<summary>Configurazione custom della libreria</summary>
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
import {DesignAngularKitModule, DesignAngularKitInit} from 'design-angular-kit';
|
|
98
|
+
|
|
99
|
+
// Puoi aggiungere alla libreria una configurazione iniziale
|
|
100
|
+
const initConfig: DesignAngularKitInit | undefined = {
|
|
101
|
+
/**
|
|
102
|
+
* The initial path in the `href` attribute in the `IconComponent` component
|
|
103
|
+
* @default './bootstrap-italia/dist/svg/sprites.svg'
|
|
104
|
+
*/
|
|
105
|
+
iconHref: string | undefined,
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
@NgModule({
|
|
109
|
+
imports: [
|
|
110
|
+
...
|
|
111
|
+
DesignAngularKitModule.forRoot(initConfig)
|
|
112
|
+
]
|
|
113
|
+
})
|
|
114
|
+
```
|
|
115
|
+
</details>
|
|
116
|
+
|
|
117
|
+
Usa `ItComponentsModule` per importare tutti i componenti della libreria, in alternativa puoi importare solo i componenti/moduli di cui hai bisogno, ad es. Alert, Paginazione e Breadcrumb.
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
import {ItAlertComponent, ItPaginationComponent, ItBreadcrumbsModule} from 'design-angular-kit';
|
|
121
|
+
|
|
122
|
+
@NgModule({
|
|
123
|
+
imports: [
|
|
124
|
+
ItAlertComponent,
|
|
125
|
+
ItPaginationComponent,
|
|
126
|
+
ItBreadcrumbsModule // Include ItBreadcrumbComponent e ItBreadcrumbItemComponent
|
|
127
|
+
],
|
|
128
|
+
})
|
|
129
|
+
export class YourAppModule {
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@Component({
|
|
133
|
+
selector: 'app-product',
|
|
134
|
+
standalone: true,
|
|
135
|
+
imports: [ItAlertComponent],
|
|
136
|
+
templateUrl: './product.component.html'
|
|
137
|
+
})
|
|
138
|
+
export class ProductComponent {
|
|
139
|
+
}
|
|
140
|
+
```
|
|
71
141
|
|
|
72
142
|
### Importazione stili bootstrap-italia
|
|
73
143
|
Configura gli stili richiesti nel file `styles.scss`. Importa la libreria SCSS come mostrato nell'esempio qui sotto.
|
package/assets/i18n/en.json
CHANGED
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
"close": "Close",
|
|
8
8
|
"continue": "Continue",
|
|
9
9
|
"edit": "Edit",
|
|
10
|
+
"show": "Show",
|
|
10
11
|
"show-all": "Show all",
|
|
11
|
-
"details": "Details"
|
|
12
|
+
"details": "Details",
|
|
13
|
+
"download": "Download"
|
|
12
14
|
},
|
|
13
15
|
"errors": {
|
|
14
16
|
"generic": "An error has occurred",
|
|
@@ -19,29 +21,34 @@
|
|
|
19
21
|
"min-invalid": "The minimum value for this field is: {{min}}",
|
|
20
22
|
"max-invalid": "The maximum value for this field is: {{max}}",
|
|
21
23
|
"min-length-invalid": "The minimum length for this field is: {{min}}",
|
|
22
|
-
"max-length-invalid": "The
|
|
24
|
+
"max-length-invalid": "The maximum length for this field is: {{max}}",
|
|
23
25
|
"email-invalid": "Enter a valid email",
|
|
24
26
|
"tel-invalid": "Please enter a valid phone number format",
|
|
25
27
|
"url-invalid": "Please enter a valid URL",
|
|
26
28
|
"tax-code-invalid": "Enter a valid tax code",
|
|
27
29
|
"vat-number-invalid": "Enter a valid VAT number",
|
|
28
30
|
"cap-invalid": "Enter a valid zip code",
|
|
31
|
+
"iban-invalid": "Enter a valid IBAN",
|
|
29
32
|
"regex-invalid": "Please enter a valid REGEX expression",
|
|
30
33
|
"pattern-invalid": "The field must have the pattern {{pattern}}",
|
|
31
34
|
"password-no-match": "Passwords must match",
|
|
32
|
-
"password-min-length": "
|
|
33
|
-
"password-number": "The password must have at least
|
|
34
|
-
"password-capital-case": "The password should contain at least
|
|
35
|
-
"password-small-case": "
|
|
36
|
-
"password-special-character": "
|
|
35
|
+
"password-min-length": "The password must contain at least {{minLength}} characters!",
|
|
36
|
+
"password-number": "The password must have at least a number!",
|
|
37
|
+
"password-capital-case": "The password should contain at least an uppercase character!",
|
|
38
|
+
"password-small-case": "The password must contain at least a lowercase character!",
|
|
39
|
+
"password-special-character": "The password must contain at least a special character!"
|
|
37
40
|
},
|
|
38
41
|
"core": {
|
|
39
42
|
"close-modal": "Close modal window",
|
|
40
43
|
"close-notification": "Close Notification: {{title}}",
|
|
41
44
|
"close-alert": "Close alert",
|
|
42
45
|
"page": "Page",
|
|
46
|
+
"previous": "Previous",
|
|
43
47
|
"previous-page": "Previous page",
|
|
48
|
+
"next": "Next",
|
|
44
49
|
"next-page": "Next page",
|
|
50
|
+
"go-to": "Go to",
|
|
51
|
+
"page-of-total": "Page {{page}} of {{total}}",
|
|
45
52
|
"progress": "Progress",
|
|
46
53
|
"loading": "Loading",
|
|
47
54
|
"active": "Active",
|
|
@@ -51,9 +58,24 @@
|
|
|
51
58
|
"step": "Step",
|
|
52
59
|
"step-of": "Step {{current}} of {{available}}",
|
|
53
60
|
"back": "Back",
|
|
54
|
-
"forward": "Forward"
|
|
61
|
+
"forward": "Forward",
|
|
62
|
+
"rate-star": "Rate {{current}} out of {{total}} stars",
|
|
63
|
+
"rating-star": "Rating {{current}} out of {{total}} stars"
|
|
55
64
|
},
|
|
56
65
|
"form": {
|
|
66
|
+
"caps-inserted": "CAPS LOCK entered",
|
|
67
|
+
"password-strength-meter": {
|
|
68
|
+
"description": {
|
|
69
|
+
"default": "Enter at least {{minLength}} characters",
|
|
70
|
+
"number": "a number",
|
|
71
|
+
"capital-case": "an uppercase character",
|
|
72
|
+
"special-character": "a special character"
|
|
73
|
+
},
|
|
74
|
+
"password-short": "Very weak password",
|
|
75
|
+
"password-bad": "Weak password",
|
|
76
|
+
"password-good": "Secure password",
|
|
77
|
+
"password-strong": "Very secure password"
|
|
78
|
+
},
|
|
57
79
|
"increase-value": "Increase value",
|
|
58
80
|
"decrease-value": "Decrease value",
|
|
59
81
|
"upload": "Upload",
|
|
@@ -76,16 +98,63 @@
|
|
|
76
98
|
"website-search": "Search in the site",
|
|
77
99
|
"navigation-path": "Navigation path"
|
|
78
100
|
},
|
|
101
|
+
"navbar": {
|
|
102
|
+
"aria-label-main": "Main navigation",
|
|
103
|
+
"aria-label-toggle": "Show/Hide navigation",
|
|
104
|
+
"hide": "Hide navigation"
|
|
105
|
+
},
|
|
79
106
|
"utils": {
|
|
80
107
|
"selected": "Selected",
|
|
81
108
|
"language-selection": "Language selection: {{lang}}",
|
|
82
109
|
"select-language": "Select a language",
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
|
|
86
|
-
|
|
110
|
+
"error-page": {
|
|
111
|
+
"404": {
|
|
112
|
+
"title": "Resource not found",
|
|
113
|
+
"description": "Oops! The resource you are looking for was not found, go back to the homepage and use the menu to continue browsing."
|
|
114
|
+
},
|
|
115
|
+
"403": {
|
|
116
|
+
"title": "Forbidden",
|
|
117
|
+
"description": "You are not authorized to access this resource!"
|
|
118
|
+
},
|
|
119
|
+
"500": {
|
|
120
|
+
"title": "An error has occurred",
|
|
121
|
+
"description": "There was an unexpected error. Please try again later or contact support."
|
|
122
|
+
},
|
|
87
123
|
"go-to-homepage": "Return to homepage"
|
|
88
124
|
}
|
|
125
|
+
},
|
|
126
|
+
"date-ago-pipe": {
|
|
127
|
+
"just-now": "Just now",
|
|
128
|
+
"singular-year-ago": "{{count}} year ago",
|
|
129
|
+
"year-ago": "{{count}} years ago",
|
|
130
|
+
"singular-month-ago": "{{count}} month ago",
|
|
131
|
+
"month-ago": "{{count}} months ago",
|
|
132
|
+
"singular-week-ago": "{{count}} week ago",
|
|
133
|
+
"week-ago": "{{count}} weeks ago",
|
|
134
|
+
"singular-day-ago": "{{count}} day ago",
|
|
135
|
+
"day-ago": "{{count}} days ago",
|
|
136
|
+
"singular-hour-ago": "{{count}} hour ago",
|
|
137
|
+
"hour-ago": "{{count}} hours ago",
|
|
138
|
+
"singular-minute-ago": "{{count}} minute ago",
|
|
139
|
+
"minute-ago": "{{count}} minutes ago",
|
|
140
|
+
"singular-second-ago": "{{count}} second ago",
|
|
141
|
+
"second-ago": "{{count}} seconds ago"
|
|
142
|
+
},
|
|
143
|
+
"duration": {
|
|
144
|
+
"second": "{{count}} second",
|
|
145
|
+
"seconds": "{{count}} seconds",
|
|
146
|
+
"minute": "{{count}} minute",
|
|
147
|
+
"minutes": "{{count}} minutes",
|
|
148
|
+
"hour": "{{count}} hour",
|
|
149
|
+
"hours": "{{count}} hours",
|
|
150
|
+
"day": "{{count}} day",
|
|
151
|
+
"days": "{{count}} days",
|
|
152
|
+
"week": "{{count}} week",
|
|
153
|
+
"weeks": "{{count}} weeks",
|
|
154
|
+
"month": "{{count}} month",
|
|
155
|
+
"months": "{{count}} months",
|
|
156
|
+
"year": "{{count}} year",
|
|
157
|
+
"years": "{{count}} years"
|
|
89
158
|
}
|
|
90
159
|
}
|
|
91
160
|
}
|
package/assets/i18n/it.json
CHANGED
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
"close": "Chiudi",
|
|
8
8
|
"continue": "Continua",
|
|
9
9
|
"edit": "Modifica",
|
|
10
|
+
"show": "Visualizza",
|
|
10
11
|
"show-all": "Mostra tutto",
|
|
11
|
-
"details": "Dettagli"
|
|
12
|
+
"details": "Dettagli",
|
|
13
|
+
"download": "Scarica"
|
|
12
14
|
},
|
|
13
15
|
"errors": {
|
|
14
16
|
"generic": "Si è verificato un errore",
|
|
@@ -19,29 +21,34 @@
|
|
|
19
21
|
"min-invalid": "Il valore minimo per questo campo è: {{min}}",
|
|
20
22
|
"max-invalid": "Il valore massimo per questo campo è: {{max}}",
|
|
21
23
|
"min-length-invalid": "La lunghezza minima per questo campo è: {{min}}",
|
|
22
|
-
"max-length-invalid": "La lunghezza
|
|
24
|
+
"max-length-invalid": "La lunghezza massima per questo campo è: {{max}}",
|
|
23
25
|
"email-invalid": "Inserisci un email valida",
|
|
24
26
|
"tel-invalid": "Inserisci un formato telefonico valido",
|
|
25
27
|
"url-invalid": "Inserisci un url valido",
|
|
26
28
|
"tax-code-invalid": "Inserisci un codice fiscale valido",
|
|
27
29
|
"vat-number-invalid": "Inserisci una partita iva valida",
|
|
28
30
|
"cap-invalid": "Inserisci un CAP valido",
|
|
31
|
+
"iban-invalid": "Inserisci un IBAN valido",
|
|
29
32
|
"regex-invalid": "Inserisci un espressione REGEX valida",
|
|
30
33
|
"pattern-invalid": "Il campo deve avere il pattern {{pattern}}",
|
|
31
34
|
"password-no-match": "Le password devono essere identiche",
|
|
32
35
|
"password-min-length": "La password deve contenere almeno {{minLength}} caratteri!",
|
|
33
|
-
"password-number": "La password deve avere almeno
|
|
34
|
-
"password-capital-case": "La password deve contenere almeno
|
|
35
|
-
"password-small-case": "La password deve contenere almeno
|
|
36
|
-
"password-special-character": "La password deve contenere almeno
|
|
36
|
+
"password-number": "La password deve avere almeno un numero!",
|
|
37
|
+
"password-capital-case": "La password deve contenere almeno un carattere maiuscolo!",
|
|
38
|
+
"password-small-case": "La password deve contenere almeno un carattere minuscolo!",
|
|
39
|
+
"password-special-character": "La password deve contenere almeno un carattere speciale!"
|
|
37
40
|
},
|
|
38
41
|
"core": {
|
|
39
42
|
"close-modal": "Chiudi finestra modale",
|
|
40
43
|
"close-notification": "Chiudi notifica: {{title}}",
|
|
41
44
|
"close-alert": "Chiudi avviso",
|
|
42
45
|
"page": "Pagina",
|
|
46
|
+
"previous": "Precedente",
|
|
43
47
|
"previous-page": "Pagina precedente",
|
|
48
|
+
"next": "Successiva",
|
|
44
49
|
"next-page": "Pagina successiva",
|
|
50
|
+
"go-to": "Vai a",
|
|
51
|
+
"page-of-total": "Pagina {{page}} di {{total}}",
|
|
45
52
|
"progress": "Progresso",
|
|
46
53
|
"loading": "Caricamento",
|
|
47
54
|
"active": "Attivo",
|
|
@@ -51,9 +58,24 @@
|
|
|
51
58
|
"step": "Step",
|
|
52
59
|
"step-of": "Step {{current}} di {{available}}",
|
|
53
60
|
"back": "Indietro",
|
|
54
|
-
"forward": "Avanti"
|
|
61
|
+
"forward": "Avanti",
|
|
62
|
+
"rate-star": "Valuta {{current}} stelle su {{total}}",
|
|
63
|
+
"rating-star": "Valutazione {{current}} stelle su {{total}}"
|
|
55
64
|
},
|
|
56
65
|
"form": {
|
|
66
|
+
"caps-inserted": "CAPS LOCK inserito",
|
|
67
|
+
"password-strength-meter": {
|
|
68
|
+
"description": {
|
|
69
|
+
"default": "Inserisci almeno {{minLength}} caratteri",
|
|
70
|
+
"number": "un numero",
|
|
71
|
+
"capital-case": "un carattere maiuscolo",
|
|
72
|
+
"special-character": "un carattere speciale"
|
|
73
|
+
},
|
|
74
|
+
"password-short": "Password molto debole",
|
|
75
|
+
"password-bad": "Password debole",
|
|
76
|
+
"password-good": "Password sicura",
|
|
77
|
+
"password-strong": "Password molto sicura"
|
|
78
|
+
},
|
|
57
79
|
"increase-value": "Aumenta valore",
|
|
58
80
|
"decrease-value": "Diminuisci valore",
|
|
59
81
|
"upload": "Upload",
|
|
@@ -76,16 +98,63 @@
|
|
|
76
98
|
"website-search": "Cerca nel sito",
|
|
77
99
|
"navigation-path": "Percorso di navigazione"
|
|
78
100
|
},
|
|
101
|
+
"navbar": {
|
|
102
|
+
"aria-label-main": "Navigazione principale",
|
|
103
|
+
"aria-label-toggle": "Mostra/Nascondi la navigazione",
|
|
104
|
+
"hide": "Nascondi la navigazione"
|
|
105
|
+
},
|
|
79
106
|
"utils": {
|
|
80
107
|
"selected": "Selezionata",
|
|
81
108
|
"language-selection": "Selezione lingua: {{lang}}",
|
|
82
109
|
"select-language": "Seleziona una lingua",
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
|
|
86
|
-
|
|
110
|
+
"error-page": {
|
|
111
|
+
"404": {
|
|
112
|
+
"title": "Risorsa non trovata",
|
|
113
|
+
"description": "Oops! La risorsa che cerchi non è stata trovata, torna alla homepage e utilizza il menu per continuare la navigazione."
|
|
114
|
+
},
|
|
115
|
+
"403": {
|
|
116
|
+
"title": "Non autorizzato",
|
|
117
|
+
"description": "Non sei autorizzato ad accedere a questa risorsa!"
|
|
118
|
+
},
|
|
119
|
+
"500": {
|
|
120
|
+
"title": "Si è verificato un errore",
|
|
121
|
+
"description": "Si è verificato un errore imprevisto. Riprova più tardi o contatta il supporto."
|
|
122
|
+
},
|
|
87
123
|
"go-to-homepage": "Torna alla homepage"
|
|
88
124
|
}
|
|
125
|
+
},
|
|
126
|
+
"date-ago-pipe": {
|
|
127
|
+
"just-now": "Proprio adesso",
|
|
128
|
+
"singular-year-ago": "{{count}} anno fa",
|
|
129
|
+
"year-ago": "{{count}} anni fa",
|
|
130
|
+
"singular-month-ago": "{{count}} mese fa",
|
|
131
|
+
"month-ago": "{{count}} mesi fa",
|
|
132
|
+
"singular-week-ago": "{{count}} settimana fa",
|
|
133
|
+
"week-ago": "{{count}} settimane fa",
|
|
134
|
+
"singular-day-ago": "{{count}} giorno fa",
|
|
135
|
+
"day-ago": "{{count}} giorni fa",
|
|
136
|
+
"singular-hour-ago": "{{count}} ora fa",
|
|
137
|
+
"hour-ago": "{{count}} ore fa",
|
|
138
|
+
"singular-minute-ago": "{{count}} minuto fa",
|
|
139
|
+
"minute-ago": "{{count}} minuti fa",
|
|
140
|
+
"singular-second-ago": "{{count}} secondo fa",
|
|
141
|
+
"second-ago": "{{count}} secondi fa"
|
|
142
|
+
},
|
|
143
|
+
"duration": {
|
|
144
|
+
"second": "{{count}} secondo",
|
|
145
|
+
"seconds": "{{count}} secondi",
|
|
146
|
+
"minute": "{{count}} minuto",
|
|
147
|
+
"minutes": "{{count}} minuti",
|
|
148
|
+
"hour": "{{count}} ora",
|
|
149
|
+
"hours": "{{count}} ore",
|
|
150
|
+
"day": "{{count}} giorno",
|
|
151
|
+
"days": "{{count}} giorni",
|
|
152
|
+
"week": "{{count}} settimana",
|
|
153
|
+
"weeks": "{{count}} settimane",
|
|
154
|
+
"month": "{{count}} mese",
|
|
155
|
+
"months": "{{count}} mesi",
|
|
156
|
+
"year": "{{count}} anno",
|
|
157
|
+
"years": "{{count}} anni"
|
|
89
158
|
}
|
|
90
159
|
}
|
|
91
160
|
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { FormControl } from '@angular/forms';
|
|
2
|
+
import { Component, Input, Optional, Self } from '@angular/core';
|
|
3
|
+
import { ItAbstractComponent } from './abstract.component';
|
|
4
|
+
import { inputToBoolean } from '../utils/coercion';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@ngx-translate/core";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
export class ItAbstractFormComponent extends ItAbstractComponent {
|
|
9
|
+
/**
|
|
10
|
+
* Set the disabled state
|
|
11
|
+
*/
|
|
12
|
+
set disabled(isDisabled) {
|
|
13
|
+
this.setDisabledState(isDisabled);
|
|
14
|
+
}
|
|
15
|
+
constructor(_translateService, _ngControl) {
|
|
16
|
+
super();
|
|
17
|
+
this._translateService = _translateService;
|
|
18
|
+
this._ngControl = _ngControl;
|
|
19
|
+
/**
|
|
20
|
+
* Validation color display mode (validation triggered if field is touched or not pristine)
|
|
21
|
+
* - <b>true</b>: Always show the validation color
|
|
22
|
+
* - <b>false</b>: Never show validation color
|
|
23
|
+
* - <b>only-valid</b>: Show only valid validation color
|
|
24
|
+
* - <b>only-invalid</b>: Show only invalid validation color
|
|
25
|
+
* @default <b>only-invalid</b>: Show only invalid validation color
|
|
26
|
+
*/
|
|
27
|
+
this.validationMode = 'only-invalid';
|
|
28
|
+
this.onChange = (_) => {
|
|
29
|
+
};
|
|
30
|
+
this.onTouched = () => {
|
|
31
|
+
};
|
|
32
|
+
this.control = new FormControl();
|
|
33
|
+
this._ngControl && (this._ngControl.valueAccessor = this);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if field is invalid (Validation failed)
|
|
37
|
+
*/
|
|
38
|
+
get isInvalid() {
|
|
39
|
+
if (this.validationMode === 'only-valid' || (this.validationMode !== 'only-invalid' && !this.validationMode)) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (this._ngControl) {
|
|
43
|
+
return this._ngControl.invalid === true && (!this._ngControl.pristine || this._ngControl.touched === true);
|
|
44
|
+
}
|
|
45
|
+
return this.control.invalid && (!this.control.pristine || this.control.touched);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if field is valid (Validation successful)
|
|
49
|
+
*/
|
|
50
|
+
get isValid() {
|
|
51
|
+
if (this.validationMode === 'only-invalid' || (this.validationMode !== 'only-valid' && !this.validationMode)) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
if (this._ngControl) {
|
|
55
|
+
return this._ngControl.valid === true && (!this._ngControl.pristine || this._ngControl.touched === true);
|
|
56
|
+
}
|
|
57
|
+
return this.control.valid && (!this.control.pristine || this.control.touched);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Return the invalid message string from TranslateService
|
|
61
|
+
*/
|
|
62
|
+
get invalidMessage() {
|
|
63
|
+
if (this.hasError('required')) {
|
|
64
|
+
return this._translateService.get('it.errors.required-field');
|
|
65
|
+
}
|
|
66
|
+
return this._translateService.get('it.errors.invalid-field');
|
|
67
|
+
}
|
|
68
|
+
ngOnInit() {
|
|
69
|
+
if (this._ngControl?.control) {
|
|
70
|
+
this.control.setValidators(this._ngControl.control.validator);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
registerOnChange(fn) {
|
|
74
|
+
this.control.valueChanges.subscribe(fn);
|
|
75
|
+
this.onChange = fn;
|
|
76
|
+
}
|
|
77
|
+
registerOnTouched(fn) {
|
|
78
|
+
this.onTouched = fn;
|
|
79
|
+
}
|
|
80
|
+
setDisabledState(isDisabled) {
|
|
81
|
+
if (isDisabled) {
|
|
82
|
+
return this.control.disable();
|
|
83
|
+
}
|
|
84
|
+
this.control.enable();
|
|
85
|
+
}
|
|
86
|
+
writeValue(value) {
|
|
87
|
+
this.control.setValue(value, { emitEvent: false });
|
|
88
|
+
this._changeDetectorRef.detectChanges();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Mark the control as touched
|
|
92
|
+
*/
|
|
93
|
+
markAsTouched() {
|
|
94
|
+
if (!this.control.touched) {
|
|
95
|
+
this.onTouched();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Fired to check if form control is touched
|
|
100
|
+
*/
|
|
101
|
+
ngDoCheck() {
|
|
102
|
+
if (this._ngControl?.control) {
|
|
103
|
+
const ngControl = this._ngControl.control;
|
|
104
|
+
if (this.control.touched !== ngControl.touched) {
|
|
105
|
+
if (ngControl.touched) {
|
|
106
|
+
this.control.markAsTouched();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.control.markAsUntouched();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (this.control.pristine !== ngControl.pristine) {
|
|
113
|
+
if (ngControl.pristine) {
|
|
114
|
+
this.control.markAsPristine();
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.control.markAsDirty();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
this._changeDetectorRef.detectChanges();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Add the validators in control and parent control
|
|
125
|
+
* @param validators the validators
|
|
126
|
+
* @protected
|
|
127
|
+
*/
|
|
128
|
+
addValidators(validators) {
|
|
129
|
+
if (!Array.isArray(validators)) {
|
|
130
|
+
validators = [validators];
|
|
131
|
+
}
|
|
132
|
+
validators.forEach(validator => {
|
|
133
|
+
if (!this.control.hasValidator(validator)) {
|
|
134
|
+
this.control.addValidators(validator);
|
|
135
|
+
}
|
|
136
|
+
if (this._ngControl?.control && !this._ngControl.control.hasValidator(validator)) {
|
|
137
|
+
this._ngControl.control.addValidators(validator);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Reports whether the control with the given path has the error specified. <br/>
|
|
143
|
+
* If the control is not present, false is returned.
|
|
144
|
+
* @param errorCode The code of the error to check
|
|
145
|
+
* @param path A list of control names that designates how to move from the current control
|
|
146
|
+
* to the control that should be queried for errors.
|
|
147
|
+
* @returns whether the given error is present in the control at the given path.
|
|
148
|
+
*/
|
|
149
|
+
hasError(errorCode, path) {
|
|
150
|
+
if (this._ngControl) {
|
|
151
|
+
return this._ngControl.hasError(errorCode, path);
|
|
152
|
+
}
|
|
153
|
+
return this.control.hasError(errorCode, path);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Reports error data for the control with the given path.
|
|
157
|
+
* @param errorCode The code of the error to check
|
|
158
|
+
* @param path A list of control names that designates how to move from the current control
|
|
159
|
+
* to the control that should be queried for errors.
|
|
160
|
+
* @returns error data for that particular error. If the control or error is not present,
|
|
161
|
+
* null is returned.
|
|
162
|
+
*/
|
|
163
|
+
getError(errorCode, path) {
|
|
164
|
+
if (this._ngControl) {
|
|
165
|
+
return this._ngControl.getError(errorCode, path);
|
|
166
|
+
}
|
|
167
|
+
return this.control.getError(errorCode, path);
|
|
168
|
+
}
|
|
169
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItAbstractFormComponent, deps: [{ token: i1.TranslateService }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
170
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.7", type: ItAbstractFormComponent, selector: "ng-component", inputs: { label: "label", validationMode: "validationMode", disabled: ["disabled", "disabled", inputToBoolean] }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
|
|
171
|
+
}
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItAbstractFormComponent, decorators: [{
|
|
173
|
+
type: Component,
|
|
174
|
+
args: [{ template: '' }]
|
|
175
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.NgControl, decorators: [{
|
|
176
|
+
type: Self
|
|
177
|
+
}, {
|
|
178
|
+
type: Optional
|
|
179
|
+
}] }]; }, propDecorators: { label: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], validationMode: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], disabled: [{
|
|
184
|
+
type: Input,
|
|
185
|
+
args: [{ transform: inputToBoolean }]
|
|
186
|
+
}] } });
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9hYnN0cmFjdHMvYWJzdHJhY3QtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFNBQVMsRUFBVyxLQUFLLEVBQVUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUczRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFHbkQsTUFBTSxPQUFnQix1QkFBaUMsU0FBUSxtQkFBbUI7SUFpQmhGOztPQUVHO0lBQ0gsSUFBMEMsUUFBUSxDQUFDLFVBQW1CO1FBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBT0QsWUFDcUIsaUJBQW1DLEVBQ2YsVUFBcUI7UUFFNUQsS0FBSyxFQUFFLENBQUM7UUFIVyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQXhCOUQ7Ozs7Ozs7V0FPRztRQUNNLG1CQUFjLEdBQTRDLGNBQWMsQ0FBQztRQW9FbEYsYUFBUSxHQUFHLENBQUMsQ0FBSSxFQUFFLEVBQUU7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsY0FBUyxHQUFHLEdBQUcsRUFBRTtRQUNqQixDQUFDLENBQUM7UUFyREEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDNUcsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQzVHO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDNUcsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQzFHO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMs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O3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTmdDb250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbXBvbmVudCwgRG9DaGVjaywgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxzL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7IHRlbXBsYXRlOiAnJyB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50PFQgPSBhbnk+IGV4dGVuZHMgSXRBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2sge1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgZm9ybSBjb250cm9sXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogVmFsaWRhdGlvbiBjb2xvciBkaXNwbGF5IG1vZGUgKHZhbGlkYXRpb24gdHJpZ2dlcmVkIGlmIGZpZWxkIGlzIHRvdWNoZWQgb3Igbm90IHByaXN0aW5lKVxuICAgKiAtIDxiPnRydWU8L2I+OiBBbHdheXMgc2hvdyB0aGUgdmFsaWRhdGlvbiBjb2xvclxuICAgKiAtIDxiPmZhbHNlPC9iPjogTmV2ZXIgc2hvdyB2YWxpZGF0aW9uIGNvbG9yXG4gICAqIC0gPGI+b25seS12YWxpZDwvYj46IFNob3cgb25seSB2YWxpZCB2YWxpZGF0aW9uIGNvbG9yXG4gICAqIC0gPGI+b25seS1pbnZhbGlkPC9iPjogU2hvdyBvbmx5IGludmFsaWQgdmFsaWRhdGlvbiBjb2xvclxuICAgKiBAZGVmYXVsdCA8Yj5vbmx5LWludmFsaWQ8L2I+OiBTaG93IG9ubHkgaW52YWxpZCB2YWxpZGF0aW9uIGNvbG9yXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZGF0aW9uTW9kZTogYm9vbGVhbiB8ICdvbmx5LXZhbGlkJyB8ICdvbmx5LWludmFsaWQnID0gJ29ubHktaW52YWxpZCc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgc2V0IGRpc2FibGVkKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgZm9ybSBjb250cm9sXG4gICAqL1xuICBwcm90ZWN0ZWQgY29udHJvbDogRm9ybUNvbnRyb2w8VD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHJlYWRvbmx5IF9uZ0NvbnRyb2w6IE5nQ29udHJvbFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHRoaXMuX25nQ29udHJvbCAmJiAodGhpcy5fbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBmaWVsZCBpcyBpbnZhbGlkIChWYWxpZGF0aW9uIGZhaWxlZClcbiAgICovXG4gIGdldCBpc0ludmFsaWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbk1vZGUgPT09ICdvbmx5LXZhbGlkJyB8fCAodGhpcy52YWxpZGF0aW9uTW9kZSAhPT0gJ29ubHktaW52YWxpZCcgJiYgIXRoaXMudmFsaWRhdGlvbk1vZGUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgIHJldHVybiB0aGlzLl9uZ0NvbnRyb2wuaW52YWxpZCA9PT0gdHJ1ZSAmJiAoIXRoaXMuX25nQ29udHJvbC5wcmlzdGluZSB8fCB0aGlzLl9uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiAoIXRoaXMuY29udHJvbC5wcmlzdGluZSB8fCB0aGlzLmNvbnRyb2wudG91Y2hlZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZmllbGQgaXMgdmFsaWQgKFZhbGlkYXRpb24gc3VjY2Vzc2Z1bClcbiAgICovXG4gIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnZhbGlkYXRpb25Nb2RlID09PSAnb25seS1pbnZhbGlkJyB8fCAodGhpcy52YWxpZGF0aW9uTW9kZSAhPT0gJ29ubHktdmFsaWQnICYmICF0aGlzLnZhbGlkYXRpb25Nb2RlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sLnZhbGlkID09PSB0cnVlICYmICghdGhpcy5fbmdDb250cm9sLnByaXN0aW5lIHx8IHRoaXMuX25nQ29udHJvbC50b3VjaGVkID09PSB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC52YWxpZCAmJiAoIXRoaXMuY29udHJvbC5wcmlzdGluZSB8fCB0aGlzLmNvbnRyb2wudG91Y2hlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbnZhbGlkIG1lc3NhZ2Ugc3RyaW5nIGZyb20gVHJhbnNsYXRlU2VydmljZVxuICAgKi9cbiAgZ2V0IGludmFsaWRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnJlcXVpcmVkLWZpZWxkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMuaW52YWxpZC1maWVsZCcpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbD8uY29udHJvbCkge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbGlkYXRvcnMoKHRoaXMuX25nQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sKS52YWxpZGF0b3IpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlID0gKF86IFQpID0+IHtcbiAgfTtcblxuICBvblRvdWNoZWQgPSAoKSA9PiB7XG4gIH07XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZm4pO1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2wuZW5hYmxlKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZFxuICAgKi9cbiAgbWFya0FzVG91Y2hlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlZCB0byBjaGVjayBpZiBmb3JtIGNvbnRyb2wgaXMgdG91Y2hlZFxuICAgKi9cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLl9uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IG5nQ29udHJvbCA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sO1xuICAgICAgaWYgKHRoaXMuY29udHJvbC50b3VjaGVkICE9PSBuZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICBpZiAobmdDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udHJvbC5wcmlzdGluZSAhPT0gbmdDb250cm9sLnByaXN0aW5lKSB7XG4gICAgICAgIGlmIChuZ0NvbnRyb2wucHJpc3RpbmUpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSB2YWxpZGF0b3JzIGluIGNvbnRyb2wgYW5kIHBhcmVudCBjb250cm9sXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JzIHRoZSB2YWxpZGF0b3JzXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhZGRWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSkge1xuICAgICAgdmFsaWRhdG9ycyA9IFt2YWxpZGF0b3JzXTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3JzLmZvckVhY2godmFsaWRhdG9yID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250cm9sLmhhc1ZhbGlkYXRvcih2YWxpZGF0b3IpKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5hZGRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2w/LmNvbnRyb2wgJiYgIXRoaXMuX25nQ29udHJvbC5jb250cm9sLmhhc1ZhbGlkYXRvcih2YWxpZGF0b3IpKSB7XG4gICAgICAgIHRoaXMuX25nQ29udHJvbC5jb250cm9sLmFkZFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHdoZXRoZXIgdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gcGF0aCBoYXMgdGhlIGVycm9yIHNwZWNpZmllZC4gPGJyLz5cbiAgICogSWYgdGhlIGNvbnRyb2wgaXMgbm90IHByZXNlbnQsIGZhbHNlIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZXJyb3JDb2RlIFRoZSBjb2RlIG9mIHRoZSBlcnJvciB0byBjaGVja1xuICAgKiBAcGFyYW0gcGF0aCBBIGxpc3Qgb2YgY29udHJvbCBuYW1lcyB0aGF0IGRlc2lnbmF0ZXMgaG93IHRvIG1vdmUgZnJvbSB0aGUgY3VycmVudCBjb250cm9sXG4gICAqIHRvIHRoZSBjb250cm9sIHRoYXQgc2hvdWxkIGJlIHF1ZXJpZWQgZm9yIGVycm9ycy5cbiAgICogQHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZXJyb3IgaXMgcHJlc2VudCBpbiB0aGUgY29udHJvbCBhdCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcihlcnJvckNvZGU6IHN0cmluZywgcGF0aD86IEFycmF5PHN0cmluZyB8IG51bWJlcj4gfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSwgcGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnRyb2wuaGFzRXJyb3IoZXJyb3JDb2RlLCBwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIGVycm9yIGRhdGEgZm9yIHRoZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIHBhdGguXG4gICAqIEBwYXJhbSBlcnJvckNvZGUgVGhlIGNvZGUgb2YgdGhlIGVycm9yIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBwYXRoIEEgbGlzdCBvZiBjb250cm9sIG5hbWVzIHRoYXQgZGVzaWduYXRlcyBob3cgdG8gbW92ZSBmcm9tIHRoZSBjdXJyZW50IGNvbnRyb2xcbiAgICogdG8gdGhlIGNvbnRyb2wgdGhhdCBzaG91bGQgYmUgcXVlcmllZCBmb3IgZXJyb3JzLlxuICAgKiBAcmV0dXJucyBlcnJvciBkYXRhIGZvciB0aGF0IHBhcnRpY3VsYXIgZXJyb3IuIElmIHRoZSBjb250cm9sIG9yIGVycm9yIGlzIG5vdCBwcmVzZW50LFxuICAgKiBudWxsIGlzIHJldHVybmVkLlxuICAgKi9cbiAgcHVibGljIGdldEVycm9yKGVycm9yQ29kZTogc3RyaW5nLCBwYXRoPzogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiB8IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC5nZXRFcnJvcihlcnJvckNvZGUsIHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmdldEVycm9yKGVycm9yQ29kZSwgcGF0aCk7XG4gIH1cbn1cbiJdfQ==
|