design-angular-kit 1.0.0-1 → 1.0.0-2
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 +152 -18
- package/assets/i18n/it.json +81 -0
- package/esm2020/lib/abstracts/abstract-form-component.mjs +165 -0
- package/esm2020/lib/abstracts/abstract.component.mjs +20 -0
- package/esm2020/lib/components/core/accordion/accordion.component.mjs +20 -0
- package/esm2020/lib/components/core/alert/alert.component.mjs +29 -0
- package/esm2020/lib/components/core/badge/badge.directive.mjs +34 -0
- package/esm2020/lib/components/core/button/button.directive.mjs +78 -0
- package/esm2020/lib/components/core/callout/callout.component.mjs +59 -0
- package/esm2020/lib/components/core/card/card.component.mjs +58 -0
- package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +66 -0
- package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +14 -0
- package/esm2020/lib/components/core/chip/chip.component.mjs +89 -0
- package/esm2020/lib/components/core/collapse/collapse.component.mjs +96 -0
- package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
- package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
- package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +59 -0
- package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +60 -0
- package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +71 -0
- package/esm2020/lib/components/core/forward/forward.directive.mjs +51 -0
- package/esm2020/lib/components/core/link/link.component.mjs +39 -0
- package/esm2020/lib/components/core/list/list/list.component.mjs +13 -0
- package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +36 -0
- package/esm2020/lib/components/core/modal/modal.component.mjs +98 -0
- package/esm2020/lib/components/core/notifications/notifications.component.mjs +66 -0
- package/esm2020/lib/components/core/pagination/pagination.component.mjs +51 -0
- package/esm2020/lib/components/core/popover/popover.directive.mjs +176 -0
- package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
- package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +27 -0
- package/esm2020/lib/components/core/spinner/spinner.component.mjs +35 -0
- package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +33 -0
- package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +36 -0
- package/esm2020/lib/components/core/table/table.component.mjs +57 -0
- package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +140 -0
- package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +40 -0
- package/esm2020/lib/components/form/input/input.component.mjs +159 -0
- package/esm2020/lib/components/form/password-input/password-input.component.mjs +112 -0
- package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +53 -0
- package/esm2020/lib/components/form/select/select.component.mjs +62 -0
- package/esm2020/lib/components/form/textarea/textarea.component.mjs +46 -0
- package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +134 -0
- package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +99 -0
- package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +69 -0
- package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +39 -0
- package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +45 -0
- package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +23 -0
- package/esm2020/lib/components/navigation/header/header.component.mjs +61 -0
- package/esm2020/lib/components/utils/icon/icon.component.mjs +54 -0
- package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +13 -0
- package/esm2020/lib/design-angular-kit.module.mjs +32 -132
- package/esm2020/lib/interfaces/core.mjs +16 -0
- package/esm2020/lib/interfaces/form.mjs +2 -0
- package/esm2020/lib/interfaces/icon.mjs +2 -0
- package/esm2020/lib/modules/components.module.mjs +241 -0
- package/esm2020/lib/services/notifications/notifications.service.mjs +122 -0
- package/esm2020/lib/utils/boolean-input.mjs +15 -0
- package/esm2020/lib/utils/file-utils.mjs +65 -0
- package/esm2020/lib/utils/regex.mjs +26 -0
- package/esm2020/lib/validators/it-validators.mjs +131 -0
- package/esm2020/public_api.mjs +60 -36
- package/fesm2015/design-angular-kit.mjs +2750 -2660
- package/fesm2015/design-angular-kit.mjs.map +1 -1
- package/fesm2020/design-angular-kit.mjs +2726 -2655
- package/fesm2020/design-angular-kit.mjs.map +1 -1
- package/lib/abstracts/abstract-form-component.d.ts +84 -0
- package/lib/abstracts/abstract.component.d.ts +14 -0
- package/lib/components/core/accordion/accordion.component.d.ts +16 -0
- package/lib/components/core/alert/alert.component.d.ts +17 -0
- package/lib/components/core/badge/badge.directive.d.ts +16 -0
- package/lib/components/core/button/button.directive.d.ts +38 -0
- package/lib/components/core/callout/callout.component.d.ts +36 -0
- package/lib/components/core/card/card.component.d.ts +41 -0
- package/lib/components/core/carousel/carousel/carousel.component.d.ts +46 -0
- package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +10 -0
- package/lib/components/core/chip/chip.component.d.ts +62 -0
- package/lib/components/core/collapse/collapse.component.d.ts +59 -0
- package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
- package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
- package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
- package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +43 -0
- package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +44 -0
- package/lib/components/core/forward/forward.directive.d.ts +14 -0
- package/lib/components/core/link/link.component.d.ts +34 -0
- package/lib/components/core/list/list/list.component.d.ts +10 -0
- package/lib/components/core/list/list-item/list-item.component.d.ts +24 -0
- package/lib/components/core/modal/modal.component.d.ts +59 -0
- package/lib/components/core/notifications/notifications.component.d.ts +30 -0
- package/lib/components/core/pagination/pagination.component.d.ts +31 -0
- package/lib/components/core/popover/popover.directive.d.ts +97 -0
- package/lib/components/core/progress-bar/progress-bar.component.d.ts +28 -0
- package/lib/components/core/progress-button/progress-button.component.d.ts +22 -0
- package/lib/components/core/spinner/spinner.component.d.ts +21 -0
- package/lib/components/core/tab/tab-container/tab-container.component.d.ts +28 -0
- package/lib/components/core/tab/tab-item/tab-item.component.d.ts +34 -0
- package/lib/components/core/table/table.component.d.ts +54 -0
- package/lib/components/core/tooltip/tooltip.directive.d.ts +80 -0
- package/lib/components/form/checkbox/checkbox.component.d.ts +30 -0
- package/lib/components/form/input/input.component.d.ts +66 -0
- package/lib/components/form/password-input/password-input.component.d.ts +54 -0
- package/lib/components/form/radio-button/radio-button.component.d.ts +29 -0
- package/lib/components/form/select/select.component.d.ts +30 -0
- package/lib/components/form/textarea/textarea.component.d.ts +24 -0
- package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +53 -0
- package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +57 -0
- package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
- package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +27 -0
- package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +30 -0
- package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +22 -0
- package/lib/components/navigation/header/header.component.d.ts +28 -0
- package/lib/components/utils/icon/icon.component.d.ts +40 -0
- package/lib/components/utils/not-found-page/not-found-page.component.d.ts +5 -0
- package/lib/design-angular-kit.module.d.ts +4 -24
- package/lib/interfaces/core.d.ts +36 -0
- package/lib/interfaces/form.d.ts +43 -0
- package/lib/interfaces/icon.d.ts +3 -0
- package/lib/modules/components.module.d.ts +57 -0
- package/lib/services/notifications/notifications.service.d.ts +63 -0
- package/lib/utils/boolean-input.d.ts +11 -0
- package/lib/utils/file-utils.d.ts +27 -0
- package/lib/utils/regex.d.ts +25 -0
- package/lib/validators/it-validators.d.ts +58 -0
- package/package.json +20 -13
- package/public_api.d.ts +53 -35
- package/esm2020/lib/badge/badge.directive.mjs +0 -83
- package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +0 -66
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +0 -89
- package/esm2020/lib/button/button.directive.mjs +0 -185
- package/esm2020/lib/button/button.module.mjs +0 -18
- package/esm2020/lib/checkbox/checkbox.component.mjs +0 -138
- package/esm2020/lib/collapse/collapse-group.component.mjs +0 -57
- package/esm2020/lib/collapse/collapse-item.component.mjs +0 -79
- package/esm2020/lib/collapse/collapse.config.mjs +0 -12
- package/esm2020/lib/collapse/collapse.directive.mjs +0 -55
- package/esm2020/lib/collapse/collapse.module.mjs +0 -22
- package/esm2020/lib/dropdown/dropdown-divider.component.mjs +0 -11
- package/esm2020/lib/dropdown/dropdown-item.component.mjs +0 -97
- package/esm2020/lib/dropdown/dropdown.component.mjs +0 -143
- package/esm2020/lib/dropdown/dropdown.config.mjs +0 -12
- package/esm2020/lib/dropdown/dropdown.directive.mjs +0 -156
- package/esm2020/lib/dropdown/dropdown.module.mjs +0 -25
- package/esm2020/lib/enums/icons.enum.mjs +0 -27
- package/esm2020/lib/form-input/form-input-password.utils.mjs +0 -154
- package/esm2020/lib/form-input/form-input.component.mjs +0 -495
- package/esm2020/lib/form-input/it-prefix.directive.mjs +0 -13
- package/esm2020/lib/form-input/it-suffix.directive.mjs +0 -13
- package/esm2020/lib/form-input/it-text-prefix.directive.mjs +0 -13
- package/esm2020/lib/form-input/it-text-suffix.directive.mjs +0 -13
- package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +0 -36
- package/esm2020/lib/icon/icon.component.mjs +0 -87
- package/esm2020/lib/icon/icon.module.mjs +0 -18
- package/esm2020/lib/models/Alignment.mjs +0 -15
- package/esm2020/lib/models/ButtonSize.mjs +0 -15
- package/esm2020/lib/models/InputType.mjs +0 -44
- package/esm2020/lib/models/ThemeColor.mjs +0 -30
- package/esm2020/lib/popover/popover.config.mjs +0 -17
- package/esm2020/lib/popover/popover.directive.mjs +0 -33
- package/esm2020/lib/popover/popover.module.mjs +0 -19
- package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -98
- package/esm2020/lib/radio/radio.component.mjs +0 -287
- package/esm2020/lib/radio/unique-selection-dispatcher.mjs +0 -55
- package/esm2020/lib/tabs/tab-group.component.mjs +0 -177
- package/esm2020/lib/tabs/tab.component.mjs +0 -73
- package/esm2020/lib/tabs/tabs.module.mjs +0 -20
- package/esm2020/lib/toggle/toggle.component.mjs +0 -86
- package/esm2020/lib/tooltip/tooltip.config.mjs +0 -17
- package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -43
- package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
- package/esm2020/lib/util/focus-mouse.directive.mjs +0 -32
- package/esm2020/lib/util/util.mjs +0 -12
- package/esm2020/lib/util/utils.module.mjs +0 -16
- package/lib/badge/badge.directive.d.ts +0 -33
- package/lib/breadcrumb/breadcrumb-item.component.d.ts +0 -33
- package/lib/breadcrumb/breadcrumb.component.d.ts +0 -33
- package/lib/button/button.directive.d.ts +0 -72
- package/lib/button/button.module.d.ts +0 -8
- package/lib/checkbox/checkbox.component.d.ts +0 -61
- package/lib/collapse/collapse-group.component.d.ts +0 -16
- package/lib/collapse/collapse-item.component.d.ts +0 -46
- package/lib/collapse/collapse.config.d.ts +0 -6
- package/lib/collapse/collapse.directive.d.ts +0 -25
- package/lib/collapse/collapse.module.d.ts +0 -12
- package/lib/dropdown/dropdown-divider.component.d.ts +0 -5
- package/lib/dropdown/dropdown-item.component.d.ts +0 -56
- package/lib/dropdown/dropdown.component.d.ts +0 -65
- package/lib/dropdown/dropdown.config.d.ts +0 -6
- package/lib/dropdown/dropdown.directive.d.ts +0 -77
- package/lib/dropdown/dropdown.module.d.ts +0 -15
- package/lib/enums/icons.enum.d.ts +0 -23
- package/lib/form-input/form-input-password.utils.d.ts +0 -45
- package/lib/form-input/form-input.component.d.ts +0 -283
- package/lib/form-input/it-prefix.directive.d.ts +0 -5
- package/lib/form-input/it-suffix.directive.d.ts +0 -5
- package/lib/form-input/it-text-prefix.directive.d.ts +0 -5
- package/lib/form-input/it-text-suffix.directive.d.ts +0 -5
- package/lib/form-input/mark-matching-text.pipe.d.ts +0 -10
- package/lib/icon/icon.component.d.ts +0 -34
- package/lib/icon/icon.module.d.ts +0 -8
- package/lib/models/Alignment.d.ts +0 -12
- package/lib/models/ButtonSize.d.ts +0 -11
- package/lib/models/InputType.d.ts +0 -36
- package/lib/models/ThemeColor.d.ts +0 -21
- package/lib/popover/popover.config.d.ts +0 -11
- package/lib/popover/popover.directive.d.ts +0 -20
- package/lib/popover/popover.module.d.ts +0 -9
- package/lib/progress-bar/progress-bar.component.d.ts +0 -55
- package/lib/radio/radio.component.d.ts +0 -116
- package/lib/radio/unique-selection-dispatcher.d.ts +0 -36
- package/lib/tabs/tab-group.component.d.ts +0 -71
- package/lib/tabs/tab.component.d.ts +0 -44
- package/lib/tabs/tabs.module.d.ts +0 -10
- package/lib/toggle/toggle.component.d.ts +0 -46
- package/lib/tooltip/tooltip.config.d.ts +0 -11
- package/lib/tooltip/tooltip.directive.d.ts +0 -27
- package/lib/tooltip/tooltip.module.d.ts +0 -9
- package/lib/util/focus-mouse.directive.d.ts +0 -13
- package/lib/util/util.d.ts +0 -5
- package/lib/util/utils.module.d.ts +0 -7
package/README.md
CHANGED
|
@@ -1,39 +1,83 @@
|
|
|
1
|
-
|
|
2
|
-
[](https://github.com/italia/design-angular-kit/actions)
|
|
3
|
-
[](https://codecov.io/gh/italia/design-angular-kit)
|
|
4
|
-
[](https://github.com/italia/design-angular-kit/blob/main/LICENSE)
|
|
5
|
-
[](https://github.com/italia/design-angular-kit/issues)
|
|
6
|
-
[](https://developersitalia.slack.com/messages/C7VPAUVB3/)
|
|
7
|
-
[](https://slack.developers.italia.it/)
|
|
1
|
+
<h1 align="center">Design Angular Kit</h1>
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src=".github/angular_design_kit.png" alt="angular-logo" width="120px" height="120px"/>
|
|
5
|
+
<br>
|
|
6
|
+
<i>Design Angular Kit è un toolkit basato su Bootstrap Italia
|
|
7
|
+
<br> per la creazione di applicazioni web sviluppate con Angular.</i>
|
|
8
|
+
<br>
|
|
9
|
+
</p>
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://italia.github.io/design-angular-kit"><strong>italia.github.io/design-angular-kit</strong></a>
|
|
13
|
+
<br>
|
|
14
|
+
</p>
|
|
12
15
|
|
|
13
|
-
|
|
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/unstable.svg" alt="NPM"></a>
|
|
18
|
+
<a href="https://github.com/italia/design-angular-kit/actions"><img src="https://github.com/italia/design-angular-kit/actions/workflows/ci.yml/badge.svg" alt="Build"></a>
|
|
19
|
+
<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
|
+
<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
|
+
<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
|
+
</p>
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<a href="https://developersitalia.slack.com/messages/C04H3C19D52/">
|
|
26
|
+
<img src="https://img.shields.io/badge/Slack%20channel-%23design--dev--angular-blue.svg" alt="Join the #design-dev-angular channel" />
|
|
27
|
+
</a>
|
|
28
|
+
<a href="https://slack.developers.italia.it/">
|
|
29
|
+
<img src="https://slack.developers.italia.it/badge.svg" alt="Get invited" />
|
|
30
|
+
</a>
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
_⚠️ Attenzione: questo codice è ancora in fase di sviluppo e non è pronto per essere utilizzato! Stiamo lavorando all'aggiornamento per portare il kit alla versione 1.0.0, commenti e contributi di tutta la community sono più che benvenuti! Se si necessita della vecchia versione il codice e la sua documentazione possono essere reperiti [qua](https://github.com/italia/design-angular-kit/tree/0.x)._
|
|
34
|
+
|
|
35
|
+
## Verso la versione 1.0.0 📣
|
|
36
|
+
|
|
37
|
+
Sono partite le lavorazioni per l'aggiornamento del kit Angular a Bootstrap Italia 2 (basato su Bootstrap 5).
|
|
38
|
+
Sul branch `main` potete trovare il codice dei lavori in corso e nella [milestone Version 1.0.0](https://github.com/italia/design-angular-kit/milestone/3) un piano preliminare delle attività. La vecchia versione è da considerarsi deprecata.
|
|
39
|
+
|
|
40
|
+
👉🏻 È possibile contribuire a questa nuova versione in vari modi:
|
|
41
|
+
|
|
42
|
+
* Con il proprio codice, prendendo in carico una issue tra quelle aperte e non già assegnate tra [le issue](https://github.com/italia/design-angular-kit/issues) di Angular Kit (è sufficiente anche un commento sulla issue per notificare la volontà di presa in carico).
|
|
43
|
+
* Attraverso la segnalazione di bug o miglioramenti al [repository ufficiale](https://github.com/italia/design-angular-kit/) di Angular Kit.
|
|
44
|
+
* Scrivendoci sul [canale dedicato](https://developersitalia.slack.com/messages/C04H3C19D52/) di Slack.
|
|
45
|
+
|
|
46
|
+
**Commenti e contributi di tutta la community sono più che benvenuti!** 🎉
|
|
14
47
|
|
|
15
48
|
#### Link veloci
|
|
16
49
|
[Preview di Vercel (aggiornata ad ogni commit)](https://design-angular-kit.vercel.app/) |
|
|
17
50
|
[Discussione sulla nuova release](https://github.com/italia/design-angular-kit/discussions/127) |
|
|
18
|
-
[
|
|
51
|
+
[Milestone 1.0.0](https://github.com/italia/design-angular-kit/milestone/3)
|
|
19
52
|
|
|
20
53
|
## Come iniziare
|
|
21
54
|
|
|
22
|
-
Design Angular Kit è disponibile su NPM,
|
|
55
|
+
Design Angular Kit è disponibile su NPM, per installarlo su una applicazione esistente sulla quale provare la libreria (attualmente non stabile) esegui il comando
|
|
56
|
+
|
|
23
57
|
```
|
|
24
|
-
npm install design-angular-kit --save
|
|
58
|
+
npm install design-angular-kit@unstable --save
|
|
25
59
|
```
|
|
26
60
|
|
|
27
|
-
|
|
61
|
+
Procedi a registrare `DesignAngularKitModule` nel tuo **app.module.ts**.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
imports: [
|
|
65
|
+
...
|
|
66
|
+
TranslateModule.forRoot(),
|
|
67
|
+
DesignAngularKitModule
|
|
68
|
+
]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Importazione stili bootstrap-italia
|
|
28
72
|
Configura gli stili richiesti nel file `styles.scss`. Importa la libreria SCSS come mostrato nell'esempio qui sotto.
|
|
29
73
|
|
|
30
74
|
```scss
|
|
31
75
|
// Importazione libreria SCSS di bootstrap-italia
|
|
32
|
-
@import
|
|
33
|
-
|
|
76
|
+
@import "bootstrap-italia/src/scss/bootstrap-italia";
|
|
34
77
|
```
|
|
35
78
|
|
|
36
|
-
|
|
79
|
+
<details>
|
|
80
|
+
<summary>Come personalizzare e sovrascrivere le variabili di default della libreria (es. colori, font-family, misure, ecc.)</summary>
|
|
37
81
|
|
|
38
82
|
Bootstrap Italia eredita ed estende tutte le variabili di default di Bootstrap, sovrascrivendo
|
|
39
83
|
alcuni valori in fase di compilazione e impostandone di nuovi all’occorenza. Un esempio fra tutti è
|
|
@@ -65,10 +109,84 @@ $font-family-sans-serif: 'Custom Font', Arial, Helvetica, sans-serif;
|
|
|
65
109
|
$font-family-monospace: 'Custom Font', 'Courier New', Courier, monospace;
|
|
66
110
|
|
|
67
111
|
// Importazione libreria SCSS di bootstrap-italia
|
|
68
|
-
@import '
|
|
112
|
+
@import 'bootstrap-italia/src/scss/bootstrap-italia';
|
|
113
|
+
```
|
|
114
|
+
</details>
|
|
115
|
+
|
|
116
|
+
### Supporto icone e assets
|
|
117
|
+
|
|
118
|
+
Per aggiungere il supporto icone/assets, modifica il tuo `angular.json` aggiungendo:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
"assets": [
|
|
122
|
+
...
|
|
123
|
+
{
|
|
124
|
+
"glob": "**/*",
|
|
125
|
+
"input": "./node_modules/bootstrap-italia/",
|
|
126
|
+
"output": "/bootstrap-italia/"
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Supporto i18n (localizzazione)
|
|
132
|
+
|
|
133
|
+
La libreria usa [ngx-translate](https://github.com/ngx-translate/core) per aggiungere le localizazioni i18n.
|
|
134
|
+
|
|
135
|
+
Modifica il tuo `angular.json` aggiungendo:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
"assets": [
|
|
139
|
+
...
|
|
140
|
+
{
|
|
141
|
+
"glob": "**/*",
|
|
142
|
+
"input": "./node_modules/design-angular-kit/assets/i18n",
|
|
143
|
+
"output": "/bootstrap-italia/i18n/"
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Se utilizzi già i file di localizzazione nella tua app, puoi utilizzare la libreria [ngx-translate-multi-http-loader](https://www.npmjs.com/package/ngx-translate-multi-http-loader)
|
|
149
|
+
per caricare i file di localizzazione dell'app e di `design-angular-kit`
|
|
150
|
+
|
|
151
|
+
Modifica nel tuo `app.module.ts`:
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
imports: [
|
|
155
|
+
...
|
|
156
|
+
HttpClientModule,
|
|
157
|
+
TranslateModule.forRoot({
|
|
158
|
+
loader: {
|
|
159
|
+
provide: TranslateLoader,
|
|
160
|
+
useFactory: (http: HttpBackend) => new MultiTranslateHttpLoader(http, [
|
|
161
|
+
'./assets/i18n/', // Your i18n location
|
|
162
|
+
'./bootstrap-italia/i18n/'
|
|
163
|
+
]),
|
|
164
|
+
deps: [HttpBackend],
|
|
165
|
+
defaultLanguage: 'it'
|
|
166
|
+
}
|
|
167
|
+
}),
|
|
168
|
+
DesignAngularKitModule
|
|
169
|
+
]
|
|
69
170
|
```
|
|
70
171
|
|
|
172
|
+
#### Usa la localizzazione personalizzata
|
|
173
|
+
|
|
174
|
+
Aggiungi la localizzazione personalizzata nella tua cartella `assets/bootstrap-italia/i18n/` (crea il percorso se non esiste). Il json deve avere [questo formato](projects/design-angular-kit/assets/i18n/it.json).
|
|
175
|
+
|
|
176
|
+
Se utilizzi già i file di localizzazione nella tua app, puoi aggiungere le localizzazioni nei tuoi file json, sovrascrivendo le chiavi del json della libreria.
|
|
177
|
+
|
|
178
|
+
### Supporto animazione
|
|
179
|
+
|
|
180
|
+
La libreria usa BrowserAnimationsModule per gestire alcune animazioni.
|
|
71
181
|
|
|
182
|
+
Per abilitarle, bisogna aggiungere al tuo `app.module.ts` il modulo :
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
imports: [
|
|
186
|
+
...
|
|
187
|
+
BrowserAnimationsModule
|
|
188
|
+
]
|
|
189
|
+
```
|
|
72
190
|
|
|
73
191
|
## Segnalazione bug e richieste di aiuto
|
|
74
192
|
|
|
@@ -112,3 +230,19 @@ npm run start
|
|
|
112
230
|
```
|
|
113
231
|
npm run test
|
|
114
232
|
```
|
|
233
|
+
|
|
234
|
+
# Contributor della libreria
|
|
235
|
+
|
|
236
|
+
Un grazie speciale a chi ha reso possibile lo sviluppo di questa nuova versione!
|
|
237
|
+
|
|
238
|
+
[](https://github.com/cri99) | [](https://github.com/AntoninoBonanno) | [](https://www.net-serv.it/) | [](https://github.com/alenap93) |
|
|
239
|
+
--- | --- | --- | --- |
|
|
240
|
+
Cristian Borelli | Antonino Bonanno | NetService | Alessio Napolitano |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
Tutti i contributor (*made with [contributors-img](https://contrib.rocks)*)
|
|
245
|
+
|
|
246
|
+
<a href = "https://github.com/italia/design-angular-kit/graphs/contributors">
|
|
247
|
+
<img src = "https://contrib.rocks/image?repo=italia/design-angular-kit"/>
|
|
248
|
+
</a>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"it": {
|
|
3
|
+
"general": {
|
|
4
|
+
"save": "Salva",
|
|
5
|
+
"send": "Invia",
|
|
6
|
+
"abort": "Annulla",
|
|
7
|
+
"continue": "Continua",
|
|
8
|
+
"edit": "Modifica",
|
|
9
|
+
"show-all": "Mostra tutto",
|
|
10
|
+
"details": "Dettagli"
|
|
11
|
+
},
|
|
12
|
+
"errors": {
|
|
13
|
+
"generic": "Si è verificato un errore",
|
|
14
|
+
"generic-support-message": "Si è verificato un errore imprevisto. Riprova più tardi o contatta il supporto.",
|
|
15
|
+
"invalid-field": "Questo campo non è valido",
|
|
16
|
+
"required-field": "Questo campo è obbligatorio",
|
|
17
|
+
"check-all-fields": "Verifica di aver compilato correttamente tutti i campi",
|
|
18
|
+
"min-invalid": "Il valore minimo per questo campo è: {{min}}",
|
|
19
|
+
"max-invalid": "Il valore massimo per questo campo è: {{max}}",
|
|
20
|
+
"min-length-invalid": "La lunghezza minima per questo campo è: {{min}}",
|
|
21
|
+
"max-length-invalid": "La lunghezza minima per questo campo è: {{max}}",
|
|
22
|
+
"email-invalid": "Inserisci un email valida",
|
|
23
|
+
"tel-invalid": "Inserisci un formato telefonico valido",
|
|
24
|
+
"url-invalid": "Inserisci un url valido",
|
|
25
|
+
"tax-code-invalid": "Inserisci un codice fiscale valido",
|
|
26
|
+
"vat-number-invalid": "Inserisci una partita iva valida",
|
|
27
|
+
"cap-invalid": "Inserisci un CAP valido",
|
|
28
|
+
"regex-invalid": "Inserisci un espressione REGEX valida",
|
|
29
|
+
"pattern-invalid": "Il campo deve avere il pattern {{pattern}}",
|
|
30
|
+
"password-no-match": "Le password devono essere identiche",
|
|
31
|
+
"password-min-length": "La password deve contenere almeno {{minLength}} caratteri!",
|
|
32
|
+
"password-number": "La password deve avere almeno 1 numero!",
|
|
33
|
+
"password-capital-case": "La password deve contenere almeno 1 carattere maiuscolo!",
|
|
34
|
+
"password-small-case": "La password deve contenere almeno 1 carattere minuscolo!",
|
|
35
|
+
"password-special-character": "La password deve contenere almeno 1 carattere speciale!"
|
|
36
|
+
},
|
|
37
|
+
"core": {
|
|
38
|
+
"close-modal": "Chiudi finestra modale",
|
|
39
|
+
"close-notification": "Chiudi notifica: {{title}}",
|
|
40
|
+
"close-alert": "Chiudi avviso",
|
|
41
|
+
"page": "Pagina",
|
|
42
|
+
"previous-page": "Pagina precedente",
|
|
43
|
+
"next-page": "Pagina successiva",
|
|
44
|
+
"progress": "Progresso",
|
|
45
|
+
"loading": "Caricamento",
|
|
46
|
+
"active": "Attivo",
|
|
47
|
+
"remove": "Elimina"
|
|
48
|
+
},
|
|
49
|
+
"form": {
|
|
50
|
+
"increase-value": "Aumenta valore",
|
|
51
|
+
"decrease-value": "Diminuisci valore",
|
|
52
|
+
"upload": "Upload",
|
|
53
|
+
"upload-drag-file": "Trascina il file per caricarlo",
|
|
54
|
+
"upload-loading": "Caricamento in corso...",
|
|
55
|
+
"upload-complete": "Caricamento completato",
|
|
56
|
+
"upload-or": "oppure",
|
|
57
|
+
"upload-select-device": "selezionalo dal dispositivo",
|
|
58
|
+
"uploaded-file": "File caricato: {{name}}",
|
|
59
|
+
"delete-file": "Elimina file {{name}}"
|
|
60
|
+
},
|
|
61
|
+
"navigation": {
|
|
62
|
+
"home": "Home",
|
|
63
|
+
"go-back": "Torna indietro",
|
|
64
|
+
"upper-level": "Livello superiore",
|
|
65
|
+
"secondary-navigation": "Navigazione secondaria",
|
|
66
|
+
"login": "Accedi",
|
|
67
|
+
"full-login": "Accedi all'area personale",
|
|
68
|
+
"search": "Cerca",
|
|
69
|
+
"website-search": "Cerca nel sito",
|
|
70
|
+
"navigation-path": "Percorso di navigazione"
|
|
71
|
+
},
|
|
72
|
+
"utils": {
|
|
73
|
+
"404": {
|
|
74
|
+
"title": "Risorsa non trovata",
|
|
75
|
+
"description": "Oops! La risorsa che cerchi non è stata trovata, torna alla homepage e utilizza il menu per continuare la navigazione.",
|
|
76
|
+
"go-back": "Torna indietro",
|
|
77
|
+
"go-to-homepage": "Torna alla homepage"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { FormControl } from '@angular/forms';
|
|
2
|
+
import { Component, Input, Optional, Self } from '@angular/core';
|
|
3
|
+
import { AbstractComponent } from './abstract.component';
|
|
4
|
+
import { isFalseBooleanInput } from '../utils/boolean-input';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "@ngx-translate/core";
|
|
8
|
+
export class AbstractFormComponent extends AbstractComponent {
|
|
9
|
+
constructor(_ngControl, _translateService, _renderer, _elementRef) {
|
|
10
|
+
super(_renderer, _elementRef);
|
|
11
|
+
this._ngControl = _ngControl;
|
|
12
|
+
this._translateService = _translateService;
|
|
13
|
+
this._renderer = _renderer;
|
|
14
|
+
this._elementRef = _elementRef;
|
|
15
|
+
/**
|
|
16
|
+
* Validation color display mode (validation triggered if field is touched or not pristine)
|
|
17
|
+
* - <b>true</b>: Always show the validation color
|
|
18
|
+
* - <b>false</b>: Never show validation color
|
|
19
|
+
* - <b>only-valid</b>: Show only valid validation color
|
|
20
|
+
* - <b>only-invalid</b>: Show only invalid validation color
|
|
21
|
+
* @default <b>only-invalid</b>: Show only invalid validation color
|
|
22
|
+
*/
|
|
23
|
+
this.validationMode = 'only-invalid';
|
|
24
|
+
this.onChange = (_) => {
|
|
25
|
+
};
|
|
26
|
+
this.onTouched = () => {
|
|
27
|
+
};
|
|
28
|
+
this.control = new FormControl();
|
|
29
|
+
this._ngControl && (this._ngControl.valueAccessor = this);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if field is invalid (Validation failed)
|
|
33
|
+
*/
|
|
34
|
+
get isInvalid() {
|
|
35
|
+
if (this.validationMode === 'only-valid' || (this.validationMode !== 'only-invalid' && isFalseBooleanInput(this.validationMode))) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
if (this._ngControl) {
|
|
39
|
+
return this._ngControl.invalid === true && (!this._ngControl.pristine || this._ngControl.touched === true);
|
|
40
|
+
}
|
|
41
|
+
return this.control.invalid && (!this.control.pristine || this.control.touched);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if field is valid (Validation successful)
|
|
45
|
+
*/
|
|
46
|
+
get isValid() {
|
|
47
|
+
if (this.validationMode === 'only-invalid' || (this.validationMode !== 'only-valid' && isFalseBooleanInput(this.validationMode))) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
if (this._ngControl) {
|
|
51
|
+
return this._ngControl.valid === true && (!this._ngControl.pristine || this._ngControl.touched === true);
|
|
52
|
+
}
|
|
53
|
+
return this.control.valid && (!this.control.pristine || this.control.touched);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Return the invalid message string from TranslateService
|
|
57
|
+
*/
|
|
58
|
+
get invalidMessage() {
|
|
59
|
+
if (this.control.hasError('required')) {
|
|
60
|
+
return this._translateService.get('it.errors.required-field');
|
|
61
|
+
}
|
|
62
|
+
return this._translateService.get('it.errors.invalid-field');
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
if (this._ngControl) {
|
|
66
|
+
this.control.setValidators(this._ngControl.control.validator);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
registerOnChange(fn) {
|
|
70
|
+
this.control.valueChanges.subscribe(fn);
|
|
71
|
+
this.onChange = fn;
|
|
72
|
+
}
|
|
73
|
+
registerOnTouched(fn) {
|
|
74
|
+
this.onTouched = fn;
|
|
75
|
+
}
|
|
76
|
+
setDisabledState(isDisabled) {
|
|
77
|
+
if (isDisabled) {
|
|
78
|
+
return this.control.disable();
|
|
79
|
+
}
|
|
80
|
+
this.control.enable();
|
|
81
|
+
}
|
|
82
|
+
writeValue(value) {
|
|
83
|
+
this.control.setValue(value, { emitEvent: false });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Mark the control as touched
|
|
87
|
+
*/
|
|
88
|
+
markAsTouched() {
|
|
89
|
+
if (!this.control.touched) {
|
|
90
|
+
this.onTouched();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Fired to check if form control is touched
|
|
95
|
+
*/
|
|
96
|
+
ngDoCheck() {
|
|
97
|
+
if (this.control.touched) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (this._ngControl?.control?.touched) {
|
|
101
|
+
this.control.markAsTouched();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Add the validators in control and parent control
|
|
106
|
+
* @param validators the validators
|
|
107
|
+
* @protected
|
|
108
|
+
*/
|
|
109
|
+
addValidators(validators) {
|
|
110
|
+
if (!Array.isArray(validators)) {
|
|
111
|
+
validators = [validators];
|
|
112
|
+
}
|
|
113
|
+
validators.forEach(validator => {
|
|
114
|
+
if (!this.control.hasValidator(validator)) {
|
|
115
|
+
this.control.addValidators(validator);
|
|
116
|
+
}
|
|
117
|
+
if (this._ngControl?.control && !this._ngControl.control.hasValidator(validator)) {
|
|
118
|
+
this._ngControl.control.addValidators(validator);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reports whether the control with the given path has the error specified. <br/>
|
|
124
|
+
* If the control is not present, false is returned.
|
|
125
|
+
* @param errorCode The code of the error to check
|
|
126
|
+
* @param path A list of control names that designates how to move from the current control
|
|
127
|
+
* to the control that should be queried for errors.
|
|
128
|
+
* @returns whether the given error is present in the control at the given path.
|
|
129
|
+
*/
|
|
130
|
+
hasError(errorCode, path) {
|
|
131
|
+
if (this._ngControl) {
|
|
132
|
+
return this._ngControl.hasError(errorCode, path);
|
|
133
|
+
}
|
|
134
|
+
return this.control.hasError(errorCode, path);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Reports error data for the control with the given path.
|
|
138
|
+
* @param errorCode The code of the error to check
|
|
139
|
+
* @param path A list of control names that designates how to move from the current control
|
|
140
|
+
* to the control that should be queried for errors.
|
|
141
|
+
* @returns error data for that particular error. If the control or error is not present,
|
|
142
|
+
* null is returned.
|
|
143
|
+
*/
|
|
144
|
+
getError(errorCode, path) {
|
|
145
|
+
if (this._ngControl) {
|
|
146
|
+
return this._ngControl.getError(errorCode, path);
|
|
147
|
+
}
|
|
148
|
+
return this.control.getError(errorCode, path);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
AbstractFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AbstractFormComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.TranslateService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
152
|
+
AbstractFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AbstractFormComponent, selector: "ng-component", inputs: { label: "label", validationMode: "validationMode" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AbstractFormComponent, decorators: [{
|
|
154
|
+
type: Component,
|
|
155
|
+
args: [{ template: '' }]
|
|
156
|
+
}], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
|
|
157
|
+
type: Self
|
|
158
|
+
}, {
|
|
159
|
+
type: Optional
|
|
160
|
+
}] }, { type: i2.TranslateService }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { label: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], validationMode: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}] } });
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9hYnN0cmFjdHMvYWJzdHJhY3QtZm9ybS1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFNBQVMsRUFBdUIsS0FBSyxFQUFVLFFBQVEsRUFBYSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFnQixtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBSzNFLE1BQU0sT0FBTyxxQkFBK0IsU0FBUSxpQkFBaUI7SUFzQm5FLFlBQ3lDLFVBQXFCLEVBQ3pDLGlCQUFtQyxFQUMxQixTQUFvQixFQUNwQixXQUF1QjtRQUVuRCxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBTFMsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUN6QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFuQnJEOzs7Ozs7O1dBT0c7UUFDTSxtQkFBYyxHQUFpRCxjQUFjLENBQUM7UUErRHZGLGFBQVEsR0FBRyxDQUFDLENBQUksRUFBRSxFQUFFO1FBQ3BCLENBQUMsQ0FBQztRQUVGLGNBQVMsR0FBRyxHQUFHLEVBQUU7UUFDakIsQ0FBQyxDQUFDO1FBckRBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENB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T0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxRQUFRLENBQUMsU0FBaUIsRUFBRSxJQUFzQztRQUN2RSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDOztrSEE5S1UscUJBQXFCO3NHQUFyQixxQkFBcUIseUlBRFgsRUFBRTsyRkFDWixxQkFBcUI7a0JBRGpDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFOzswQkF3QnRCLElBQUk7OzBCQUFJLFFBQVE7NEhBbEJWLEtBQUs7c0JBQWIsS0FBSztnQkFVRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIyLCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJy4vYWJzdHJhY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgaXNGYWxzZUJvb2xlYW5JbnB1dCB9IGZyb20gJy4uL3V0aWxzL2Jvb2xlYW4taW5wdXQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RGb3JtQ29tcG9uZW50PFQgPSBhbnk+IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrIHtcblxuICAvKipcbiAgICogVGhlIGxhYmVsIG9mIGZvcm0gY29udHJvbFxuICAgKi9cbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gY29sb3IgZGlzcGxheSBtb2RlICh2YWxpZGF0aW9uIHRyaWdnZXJlZCBpZiBmaWVsZCBpcyB0b3VjaGVkIG9yIG5vdCBwcmlzdGluZSlcbiAgICogLSA8Yj50cnVlPC9iPjogQWx3YXlzIHNob3cgdGhlIHZhbGlkYXRpb24gY29sb3JcbiAgICogLSA8Yj5mYWxzZTwvYj46IE5ldmVyIHNob3cgdmFsaWRhdGlvbiBjb2xvclxuICAgKiAtIDxiPm9ubHktdmFsaWQ8L2I+OiBTaG93IG9ubHkgdmFsaWQgdmFsaWRhdGlvbiBjb2xvclxuICAgKiAtIDxiPm9ubHktaW52YWxpZDwvYj46IFNob3cgb25seSBpbnZhbGlkIHZhbGlkYXRpb24gY29sb3JcbiAgICogQGRlZmF1bHQgPGI+b25seS1pbnZhbGlkPC9iPjogU2hvdyBvbmx5IGludmFsaWQgdmFsaWRhdGlvbiBjb2xvclxuICAgKi9cbiAgQElucHV0KCkgdmFsaWRhdGlvbk1vZGU6IEJvb2xlYW5JbnB1dCB8ICdvbmx5LXZhbGlkJyB8ICdvbmx5LWludmFsaWQnID0gJ29ubHktaW52YWxpZCc7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGZvcm0gY29udHJvbFxuICAgKi9cbiAgY29udHJvbDogRm9ybUNvbnRyb2w7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcmVhZG9ubHkgX25nQ29udHJvbDogTmdDb250cm9sLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKF9yZW5kZXJlciwgX2VsZW1lbnRSZWYpO1xuICAgIHRoaXMuY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHRoaXMuX25nQ29udHJvbCAmJiAodGhpcy5fbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBmaWVsZCBpcyBpbnZhbGlkIChWYWxpZGF0aW9uIGZhaWxlZClcbiAgICovXG4gIGdldCBpc0ludmFsaWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbk1vZGUgPT09ICdvbmx5LXZhbGlkJyB8fCAodGhpcy52YWxpZGF0aW9uTW9kZSAhPT0gJ29ubHktaW52YWxpZCcgJiYgaXNGYWxzZUJvb2xlYW5JbnB1dCh0aGlzLnZhbGlkYXRpb25Nb2RlKSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC5pbnZhbGlkID09PSB0cnVlICYmICghdGhpcy5fbmdDb250cm9sLnByaXN0aW5lIHx8IHRoaXMuX25nQ29udHJvbC50b3VjaGVkID09PSB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5pbnZhbGlkICYmICghdGhpcy5jb250cm9sLnByaXN0aW5lIHx8IHRoaXMuY29udHJvbC50b3VjaGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBmaWVsZCBpcyB2YWxpZCAoVmFsaWRhdGlvbiBzdWNjZXNzZnVsKVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbk1vZGUgPT09ICdvbmx5LWludmFsaWQnIHx8ICh0aGlzLnZhbGlkYXRpb25Nb2RlICE9PSAnb25seS12YWxpZCcgJiYgaXNGYWxzZUJvb2xlYW5JbnB1dCh0aGlzLnZhbGlkYXRpb25Nb2RlKSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC52YWxpZCA9PT0gdHJ1ZSAmJiAoIXRoaXMuX25nQ29udHJvbC5wcmlzdGluZSB8fCB0aGlzLl9uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnRyb2wudmFsaWQgJiYgKCF0aGlzLmNvbnRyb2wucHJpc3RpbmUgfHwgdGhpcy5jb250cm9sLnRvdWNoZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaW52YWxpZCBtZXNzYWdlIHN0cmluZyBmcm9tIFRyYW5zbGF0ZVNlcnZpY2VcbiAgICovXG4gIGdldCBpbnZhbGlkTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnJlcXVpcmVkLWZpZWxkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMuaW52YWxpZC1maWVsZCcpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbGlkYXRvcnMoKHRoaXMuX25nQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sKS52YWxpZGF0b3IpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlID0gKF86IFQpID0+IHtcbiAgfTtcblxuICBvblRvdWNoZWQgPSAoKSA9PiB7XG4gIH07XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZm4pO1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2wuZW5hYmxlKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGUgY29udHJvbCBhcyB0b3VjaGVkXG4gICAqL1xuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVkIHRvIGNoZWNrIGlmIGZvcm0gY29udHJvbCBpcyB0b3VjaGVkXG4gICAqL1xuICBuZ0RvQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMuY29udHJvbC50b3VjaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9uZ0NvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgdmFsaWRhdG9ycyBpbiBjb250cm9sIGFuZCBwYXJlbnQgY29udHJvbFxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyB0aGUgdmFsaWRhdG9yc1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10pOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykpIHtcbiAgICAgIHZhbGlkYXRvcnMgPSBbdmFsaWRhdG9yc107XG4gICAgfVxuXG4gICAgdmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udHJvbC5oYXNWYWxpZGF0b3IodmFsaWRhdG9yKSkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbmdDb250cm9sPy5jb250cm9sICYmICF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5oYXNWYWxpZGF0b3IodmFsaWRhdG9yKSkge1xuICAgICAgICB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hZGRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIHRoZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIHBhdGggaGFzIHRoZSBlcnJvciBzcGVjaWZpZWQuIDxici8+XG4gICAqIElmIHRoZSBjb250cm9sIGlzIG5vdCBwcmVzZW50LCBmYWxzZSBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIGVycm9yQ29kZSBUaGUgY29kZSBvZiB0aGUgZXJyb3IgdG8gY2hlY2tcbiAgICogQHBhcmFtIHBhdGggQSBsaXN0IG9mIGNvbnRyb2wgbmFtZXMgdGhhdCBkZXNpZ25hdGVzIGhvdyB0byBtb3ZlIGZyb20gdGhlIGN1cnJlbnQgY29udHJvbFxuICAgKiB0byB0aGUgY29udHJvbCB0aGF0IHNob3VsZCBiZSBxdWVyaWVkIGZvciBlcnJvcnMuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVycm9yIGlzIHByZXNlbnQgaW4gdGhlIGNvbnRyb2wgYXQgdGhlIGdpdmVuIHBhdGguXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3IoZXJyb3JDb2RlOiBzdHJpbmcsIHBhdGg/OiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC5oYXNFcnJvcihlcnJvckNvZGUsIHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSwgcGF0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIGVycm9yIGRhdGEgZm9yIHRoZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIHBhdGguXG4gICAqIEBwYXJhbSBlcnJvckNvZGUgVGhlIGNvZGUgb2YgdGhlIGVycm9yIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBwYXRoIEEgbGlzdCBvZiBjb250cm9sIG5hbWVzIHRoYXQgZGVzaWduYXRlcyBob3cgdG8gbW92ZSBmcm9tIHRoZSBjdXJyZW50IGNvbnRyb2xcbiAgICogdG8gdGhlIGNvbnRyb2wgdGhhdCBzaG91bGQgYmUgcXVlcmllZCBmb3IgZXJyb3JzLlxuICAgKiBAcmV0dXJucyBlcnJvciBkYXRhIGZvciB0aGF0IHBhcnRpY3VsYXIgZXJyb3IuIElmIHRoZSBjb250cm9sIG9yIGVycm9yIGlzIG5vdCBwcmVzZW50LFxuICAgKiBudWxsIGlzIHJldHVybmVkLlxuICAgKi9cbiAgcHVibGljIGdldEVycm9yKGVycm9yQ29kZTogc3RyaW5nLCBwYXRoPzogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiB8IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC5nZXRFcnJvcihlcnJvckNvZGUsIHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmdldEVycm9yKGVycm9yQ29kZSwgcGF0aCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Component, Input } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AbstractComponent {
|
|
4
|
+
constructor(_renderer, _elementRef) {
|
|
5
|
+
this._renderer = _renderer;
|
|
6
|
+
this._elementRef = _elementRef;
|
|
7
|
+
}
|
|
8
|
+
ngAfterViewInit() {
|
|
9
|
+
this._renderer.removeAttribute(this._elementRef.nativeElement, 'id');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
AbstractComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AbstractComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
+
AbstractComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AbstractComponent, selector: "ng-component", inputs: { id: "id" }, ngImport: i0, template: '', isInline: true });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AbstractComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ template: '' }]
|
|
17
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { id: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}] } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvYWJzdHJhY3RzL2Fic3RyYWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBYyxLQUFLLEVBQVksTUFBTSxlQUFlLENBQUM7O0FBR3JGLE1BQU0sT0FBTyxpQkFBaUI7SUFPNUIsWUFDcUIsU0FBb0IsRUFDcEIsV0FBdUI7UUFEdkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtJQUU1QyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7OzhHQWZVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBFQURSLEVBQUU7MkZBQ1gsaUJBQWlCO2tCQUQ3QixTQUFTO21CQUFDLEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBQzt5SEFNZCxFQUFFO3NCQUFWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQENvbXBvbmVudCh7dGVtcGxhdGU6ICcnfSlcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBJRFxuICAgKi9cbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaWQnKTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { AbstractComponent } from "../../../abstracts/abstract.component";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class AccordionComponent extends AbstractComponent {
|
|
5
|
+
ngAfterViewInit() {
|
|
6
|
+
super.ngAfterViewInit();
|
|
7
|
+
this._renderer.removeAttribute(this._elementRef.nativeElement, 'title');
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
AccordionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AccordionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
+
AccordionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AccordionComponent, selector: "it-accordion[id][title]", inputs: { title: "title", opened: "opened" }, usesInheritance: true, ngImport: i0, template: "<div class=\"accordion\">\n <div class=\"accordion-item\">\n\n <h2 class=\"accordion-header\" id=\"collapse-{{id}}-heading\">\n <button\n class=\"accordion-button px-0\"\n type=\"button\"\n data-bs-toggle=\"collapse\"\n [class.collapsed]=\"!opened\"\n [attr.data-bs-target]=\"'#collapse-' + id\"\n [attr.aria-controls]=\"'collapse-' + id\"\n [attr.aria-expanded]=\"opened ? 'true' : 'false'\">\n {{title}}\n </button>\n </h2>\n\n <div id=\"collapse-{{id}}\"\n class=\"accordion-collapse collapse\"\n role=\"region\"\n [class.show]=\"opened\"\n [attr.aria-labelledby]=\"'collapse-' + id + '-heading'\">\n\n <div class=\"accordion-body p-0\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n\n", styles: [""] });
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AccordionComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'it-accordion[id][title]', template: "<div class=\"accordion\">\n <div class=\"accordion-item\">\n\n <h2 class=\"accordion-header\" id=\"collapse-{{id}}-heading\">\n <button\n class=\"accordion-button px-0\"\n type=\"button\"\n data-bs-toggle=\"collapse\"\n [class.collapsed]=\"!opened\"\n [attr.data-bs-target]=\"'#collapse-' + id\"\n [attr.aria-controls]=\"'collapse-' + id\"\n [attr.aria-expanded]=\"opened ? 'true' : 'false'\">\n {{title}}\n </button>\n </h2>\n\n <div id=\"collapse-{{id}}\"\n class=\"accordion-collapse collapse\"\n role=\"region\"\n [class.show]=\"opened\"\n [attr.aria-labelledby]=\"'collapse-' + id + '-heading'\">\n\n <div class=\"accordion-body p-0\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n\n" }]
|
|
15
|
+
}], propDecorators: { title: [{
|
|
16
|
+
type: Input
|
|
17
|
+
}], opened: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}] } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOztBQVF4RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBWTlDLGVBQWU7UUFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLENBQUM7OytHQWZVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9JQ1QvQixzMEJBNkJBOzJGRHBCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UseUJBQXlCOzhCQVMxQixLQUFLO3NCQUFiLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QuY29tcG9uZW50XCI7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2Jvb2xlYW4taW5wdXRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaXQtYWNjb3JkaW9uW2lkXVt0aXRsZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3JkaW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBBY2NvcmRpb24gVGl0bGVcbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUcnVlIHRvIHNldCBhY2NvcmRpb24gb3BlbmVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5lZD86IEJvb2xlYW5JbnB1dDtcblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RpdGxlJyk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImFjY29yZGlvblwiPlxuICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWl0ZW1cIj5cblxuICAgIDxoMiBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIiBpZD1cImNvbGxhcHNlLXt7aWR9fS1oZWFkaW5nXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWJ1dHRvbiBweC0wXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgICBbY2xhc3MuY29sbGFwc2VkXT1cIiFvcGVuZWRcIlxuICAgICAgICBbYXR0ci5kYXRhLWJzLXRhcmdldF09XCInI2NvbGxhcHNlLScgKyBpZFwiXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ2NvbGxhcHNlLScgKyBpZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbmVkID8gJ3RydWUnIDogJ2ZhbHNlJ1wiPlxuICAgICAgICB7e3RpdGxlfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvaDI+XG5cbiAgICA8ZGl2IGlkPVwiY29sbGFwc2Ute3tpZH19XCJcbiAgICAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWNvbGxhcHNlIGNvbGxhcHNlXCJcbiAgICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICAgW2NsYXNzLnNob3ddPVwib3BlbmVkXCJcbiAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCInY29sbGFwc2UtJyArIGlkICsgJy1oZWFkaW5nJ1wiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWJvZHkgcC0wXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { isTrueBooleanInput } from '../../../utils/boolean-input';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../../utils/icon/icon.component";
|
|
6
|
+
import * as i3 from "@ngx-translate/core";
|
|
7
|
+
export class AlertComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* The alert color
|
|
11
|
+
* @default info
|
|
12
|
+
*/
|
|
13
|
+
this.color = 'info';
|
|
14
|
+
}
|
|
15
|
+
get isDismissible() {
|
|
16
|
+
return isTrueBooleanInput(this.dismissible);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
AlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
+
AlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AlertComponent, selector: "it-alert", inputs: { color: "color", dismissible: "dismissible" }, ngImport: i0, template: "<div class=\"alert alert-{{color}}\"\n [class.alert-dismissible]=\"isDismissible\"\n [class.fade]=\"isDismissible\"\n [class.show]=\"isDismissible\"\n role=\"alert\">\n <h4 class=\"alert-heading\">\n <ng-content select=\"[heading]\"></ng-content>\n </h4>\n\n <ng-content></ng-content>\n\n <button *ngIf=\"isDismissible\"\n type=\"button\"\n class=\"btn-close\"\n data-bs-dismiss=\"alert\"\n [attr.aria-label]=\"'it.core.close-alert'|translate\">\n <it-icon name=\"close\"></it-icon>\n </button>\n</div>\n", styles: [".alert-heading:empty{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "class"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AlertComponent, decorators: [{
|
|
22
|
+
type: Component,
|
|
23
|
+
args: [{ selector: 'it-alert', template: "<div class=\"alert alert-{{color}}\"\n [class.alert-dismissible]=\"isDismissible\"\n [class.fade]=\"isDismissible\"\n [class.show]=\"isDismissible\"\n role=\"alert\">\n <h4 class=\"alert-heading\">\n <ng-content select=\"[heading]\"></ng-content>\n </h4>\n\n <ng-content></ng-content>\n\n <button *ngIf=\"isDismissible\"\n type=\"button\"\n class=\"btn-close\"\n data-bs-dismiss=\"alert\"\n [attr.aria-label]=\"'it.core.close-alert'|translate\">\n <it-icon name=\"close\"></it-icon>\n </button>\n</div>\n", styles: [".alert-heading:empty{display:none}\n"] }]
|
|
24
|
+
}], propDecorators: { color: [{
|
|
25
|
+
type: Input
|
|
26
|
+
}], dismissible: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}] } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9hbGVydC9hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBT2hGLE1BQU0sT0FBTyxjQUFjO0lBTDNCO1FBT0U7OztXQUdHO1FBQ00sVUFBSyxHQUFlLE1BQU0sQ0FBQztLQVVyQztJQUhDLElBQUksYUFBYTtRQUNmLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7OzJHQWZVLGNBQWM7K0ZBQWQsY0FBYyx3R0NUM0IseWpCQW1CQTsyRkRWYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFVBQVU7OEJBVVgsS0FBSztzQkFBYixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGVydENvbG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9jb3JlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgaXNUcnVlQm9vbGVhbklucHV0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYm9vbGVhbi1pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LWFsZXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsZXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBbGVydENvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGVydCBjb2xvclxuICAgKiBAZGVmYXVsdCBpbmZvXG4gICAqL1xuICBASW5wdXQoKSBjb2xvcjogQWxlcnRDb2xvciA9ICdpbmZvJztcblxuICAvKipcbiAgICogSW5zZXJ0cyB0aGUgY2xvc2UgYnV0dG9uXG4gICAqL1xuICBASW5wdXQoKSBkaXNtaXNzaWJsZT86IEJvb2xlYW5JbnB1dDtcblxuICBnZXQgaXNEaXNtaXNzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUcnVlQm9vbGVhbklucHV0KHRoaXMuZGlzbWlzc2libGUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQte3tjb2xvcn19XCJcbiAgICAgW2NsYXNzLmFsZXJ0LWRpc21pc3NpYmxlXT1cImlzRGlzbWlzc2libGVcIlxuICAgICBbY2xhc3MuZmFkZV09XCJpc0Rpc21pc3NpYmxlXCJcbiAgICAgW2NsYXNzLnNob3ddPVwiaXNEaXNtaXNzaWJsZVwiXG4gICAgIHJvbGU9XCJhbGVydFwiPlxuICA8aDQgY2xhc3M9XCJhbGVydC1oZWFkaW5nXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRpbmddXCI+PC9uZy1jb250ZW50PlxuICA8L2g0PlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICA8YnV0dG9uICpuZ0lmPVwiaXNEaXNtaXNzaWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4tY2xvc2VcIlxuICAgICAgICAgIGRhdGEtYnMtZGlzbWlzcz1cImFsZXJ0XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidpdC5jb3JlLmNsb3NlLWFsZXJ0J3x0cmFuc2xhdGVcIj5cbiAgICA8aXQtaWNvbiBuYW1lPVwiY2xvc2VcIj48L2l0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Directive, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import { isTrueBooleanInput } from '../../../utils/boolean-input';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class BadgeDirective {
|
|
5
|
+
get badgeClass() {
|
|
6
|
+
let badgeClass = 'badge';
|
|
7
|
+
if (isTrueBooleanInput(this.rounded)) {
|
|
8
|
+
badgeClass += ` rounded-pill`;
|
|
9
|
+
}
|
|
10
|
+
if (this.color) {
|
|
11
|
+
badgeClass += ` bg-${this.color}`;
|
|
12
|
+
}
|
|
13
|
+
return badgeClass;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
BadgeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BadgeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17
|
+
BadgeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: BadgeDirective, selector: "[itBadge]", inputs: { color: ["itBadge", "color"], rounded: "rounded" }, host: { properties: { "class": "this.badgeClass" } }, exportAs: ["itBadge"], ngImport: i0 });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BadgeDirective, decorators: [{
|
|
19
|
+
type: Directive,
|
|
20
|
+
args: [{
|
|
21
|
+
selector: '[itBadge]',
|
|
22
|
+
exportAs: 'itBadge'
|
|
23
|
+
}]
|
|
24
|
+
}], propDecorators: { color: [{
|
|
25
|
+
type: Input,
|
|
26
|
+
args: ['itBadge']
|
|
27
|
+
}], rounded: [{
|
|
28
|
+
type: Input,
|
|
29
|
+
args: ['rounded']
|
|
30
|
+
}], badgeClass: [{
|
|
31
|
+
type: HostBinding,
|
|
32
|
+
args: ['class']
|
|
33
|
+
}] } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhZGdlL2JhZGdlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQU1oRixNQUFNLE9BQU8sY0FBYztJQVl6QixJQUNJLFVBQVU7UUFDWixJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDekIsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEMsVUFBVSxJQUFJLGVBQWUsQ0FBQztTQUMvQjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7OzJHQXZCVSxjQUFjOytGQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFKMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7aUJBQ3BCOzhCQU1tQixLQUFLO3NCQUF0QixLQUFLO3VCQUFDLFNBQVM7Z0JBS0UsT0FBTztzQkFBeEIsS0FBSzt1QkFBQyxTQUFTO2dCQUdaLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhZGdlQ29sb3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2NvcmUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBpc1RydWVCb29sZWFuSW5wdXQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ib29sZWFuLWlucHV0JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2l0QmFkZ2VdJyxcbiAgZXhwb3J0QXM6ICdpdEJhZGdlJ1xufSlcbmV4cG9ydCBjbGFzcyBCYWRnZURpcmVjdGl2ZSB7XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgYmFkZ2UgY29sb3JcbiAgICovXG4gIEBJbnB1dCgnaXRCYWRnZScpIGNvbG9yPzogQmFkZ2VDb2xvcjtcblxuICAvKipcbiAgICogU2hvdyByb3VuZGVkIGJhZGdlXG4gICAqL1xuICBASW5wdXQoJ3JvdW5kZWQnKSByb3VuZGVkPzogQm9vbGVhbklucHV0O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgYmFkZ2VDbGFzcygpOiBzdHJpbmcge1xuICAgIGxldCBiYWRnZUNsYXNzID0gJ2JhZGdlJztcbiAgICBpZiAoaXNUcnVlQm9vbGVhbklucHV0KHRoaXMucm91bmRlZCkpIHtcbiAgICAgIGJhZGdlQ2xhc3MgKz0gYCByb3VuZGVkLXBpbGxgO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb2xvcikge1xuICAgICAgYmFkZ2VDbGFzcyArPSBgIGJnLSR7dGhpcy5jb2xvcn1gO1xuICAgIH1cblxuICAgIHJldHVybiBiYWRnZUNsYXNzO1xuICB9XG5cbn1cbiJdfQ==
|