@nova-design-system/nova-angular 3.12.0 → 3.14.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -64
- package/dist/nova-components/esm2022/lib/nova-components.module.mjs +16 -3
- package/dist/nova-components/esm2022/lib/providers/index.mjs +3 -0
- package/dist/nova-components/esm2022/lib/providers/notification-service.component.mjs +183 -0
- package/dist/nova-components/esm2022/lib/providers/notification.service.mjs +134 -0
- package/dist/nova-components/esm2022/lib/stencil-generated/component-value-accessors.mjs +37 -1
- package/dist/nova-components/esm2022/lib/stencil-generated/components.mjs +58 -4
- package/dist/nova-components/esm2022/lib/stencil-generated/index.mjs +3 -1
- package/dist/nova-components/esm2022/public-api.mjs +2 -1
- package/dist/nova-components/fesm2022/nova-components.mjs +421 -8
- package/dist/nova-components/fesm2022/nova-components.mjs.map +1 -1
- package/dist/nova-components/lib/nova-components.module.d.ts +8 -2
- package/dist/nova-components/lib/providers/index.d.ts +2 -0
- package/dist/nova-components/lib/providers/notification-service.component.d.ts +56 -0
- package/dist/nova-components/lib/providers/notification.service.d.ts +116 -0
- package/dist/nova-components/lib/stencil-generated/component-value-accessors.d.ts +7 -0
- package/dist/nova-components/lib/stencil-generated/components.d.ts +27 -3
- package/dist/nova-components/lib/stencil-generated/index.d.ts +1 -1
- package/dist/nova-components/public-api.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,24 +6,23 @@
|
|
|
6
6
|
|
|
7
7
|
- [Nova Components Angular (Angular 17 and below)](#nova-components-angular-angular-17-and-below)
|
|
8
8
|
- [Installation](#installation)
|
|
9
|
-
- [
|
|
10
|
-
- [
|
|
9
|
+
- [Setting up Tailwind](#setting-up-tailwind)
|
|
10
|
+
- [About Tailwind and the Nova Plugin](#about-tailwind-and-the-nova-plugin)
|
|
11
11
|
- [1. Install Tailwind CSS](#1-install-tailwind-css)
|
|
12
12
|
- [2. Configure PostCSS Plugins](#2-configure-postcss-plugins)
|
|
13
13
|
- [3. Create `tailwind.config.ts`](#3-create-tailwindconfigts)
|
|
14
14
|
- [4. Configure Tailwind and Nova Plugin in `styles.css`](#4-configure-tailwind-and-nova-plugin-in-stylescss)
|
|
15
15
|
- [5. Include the Nova Tokens (Spark or Ocean)](#5-include-the-nova-tokens-spark-or-ocean)
|
|
16
|
-
|
|
17
|
-
- [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- [
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- [Module
|
|
25
|
-
|
|
26
|
-
- [Usage Example](#usage-example)
|
|
16
|
+
- [Nova Font Pro Integration](#nova-font-pro-integration)
|
|
17
|
+
- [Option 1: Angular.json Configuration (Recommended)](#option-1-angularjson-configuration-recommended)
|
|
18
|
+
- [Option 2: Import in Styles.css](#option-2-import-in-stylescss)
|
|
19
|
+
- [Option 3: HTML Integration](#option-3-html-integration)
|
|
20
|
+
- [Standalone Component Setup](#standalone-component-setup)
|
|
21
|
+
- [1. Provide Nova Components](#1-provide-nova-components)
|
|
22
|
+
- [2. Import Nova Components Module in Your Standalone Components](#2-import-nova-components-module-in-your-standalone-components)
|
|
23
|
+
- [Module-Based Setup](#module-based-setup)
|
|
24
|
+
- [1. Import Nova Components Module](#1-import-nova-components-module)
|
|
25
|
+
- [Usage Example](#usage-example)
|
|
27
26
|
- [Handling Angular Forms with Nova Components](#handling-angular-forms-with-nova-components)
|
|
28
27
|
- [Standalone Component Setup](#standalone-component-setup-1)
|
|
29
28
|
- [Module-Based Setup](#module-based-setup-1)
|
|
@@ -46,23 +45,30 @@ yarn add @nova-design-system/nova-webcomponents @nova-design-system/nova-base @n
|
|
|
46
45
|
```
|
|
47
46
|
|
|
48
47
|
> In some case, you might experience SSL certificate issues when working on Developers' VM. As documented in the [Developers' setup guide](https://wiki.eliagroup.eu/spaces/EAing/pages/89296007/2.3.3.10+Developer+Setup#id-2.3.3.10DeveloperSetup-NPMconfig), you need to turn off the SSL certificate verification:
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
npm config set strict-ssl false
|
|
52
|
-
```
|
|
48
|
+
>
|
|
49
|
+
> ```bash
|
|
50
|
+
> npm config set strict-ssl false
|
|
51
|
+
> ```
|
|
53
52
|
|
|
54
53
|
---
|
|
55
54
|
|
|
56
|
-
##
|
|
55
|
+
## Setting up Tailwind
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
We highly recommend using Tailwind CSS for styling, as it ensures an optimized bundle size and a powerful utility-first workflow. Nova offers a dedicated Tailwind plugin and theme, allowing you to seamlessly integrate Nova’s design tokens with Tailwind’s utility classes for a consistent and efficient styling workflow.
|
|
57
|
+
Nova Angular requires Tailwind CSS for styling. Tailwind provides a powerful utility-first workflow and an optimized bundle size. Nova includes a dedicated Tailwind theme and plugin that map Nova’s design tokens to Tailwind’s theme and utilities, enabling consistent, token-driven styling across your app.
|
|
61
58
|
|
|
62
59
|
> **Tailwind Version**
|
|
63
60
|
> This guide is written for Tailwind v4. While compatible with v3, some features may not work as expected.
|
|
61
|
+
> See the official [Angular + Tailwind guide](https://tailwindcss.com/docs/installation/framework-guides/angular) for more details.
|
|
62
|
+
|
|
63
|
+
### About Tailwind and the Nova Plugin
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
- **What is Tailwind?** A utility-first CSS framework with low-level, composable classes (flex, grid, spacing, color, typography) to rapidly build UIs.
|
|
66
|
+
- **Nova Tokens**: Nova ships design tokens as CSS variables (via the Spark and Ocean themes) for colors, spacing, typography, radii, shadows, and more.
|
|
67
|
+
- **Integration**:
|
|
68
|
+
- `novaTailwindTheme` wires Nova tokens into Tailwind’s theme scales.
|
|
69
|
+
- The Nova Tailwind plugin exposes utilities and variants that reference those tokens, so your Tailwind classes resolve to Nova’s token values at runtime.
|
|
70
|
+
- **Why import tokens CSS?** Import exactly one token CSS file (`spark.css` or `ocean.css`) so the underlying CSS variables exist at runtime. The Tailwind utilities generated by the plugin read from these variables.
|
|
71
|
+
- **Do not mix with legacy utilities**: When using Tailwind, do not import `@nova-design-system/nova-base/dist/css/nova-utils.css` to avoid redundant CSS and larger bundles.
|
|
66
72
|
|
|
67
73
|
#### 1. Install Tailwind CSS
|
|
68
74
|
|
|
@@ -97,7 +103,7 @@ export default {
|
|
|
97
103
|
|
|
98
104
|
#### 4. Configure Tailwind and Nova Plugin in `styles.css`
|
|
99
105
|
|
|
100
|
-
In `./src/styles.css`, add the
|
|
106
|
+
In `./src/styles.css`, add the Tailwind import, the config path, the dark mode class, and the Nova plugin:
|
|
101
107
|
|
|
102
108
|
```css
|
|
103
109
|
@import 'tailwindcss';
|
|
@@ -116,66 +122,48 @@ Add the Nova Tokens CSS file to the `styles` array in your `angular.json` config
|
|
|
116
122
|
|
|
117
123
|
```json
|
|
118
124
|
{
|
|
119
|
-
...
|
|
120
|
-
"styles": [
|
|
121
|
-
"src/styles.css",
|
|
122
|
-
"@nova-design-system/nova-base/dist/css/spark.css" // or ocean.css
|
|
123
|
-
],
|
|
124
|
-
...
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### CSS Integration Without Tailwind (Not Recommended)
|
|
129
|
-
|
|
130
|
-
If you don’t plan to use Tailwind, Nova provides a large utility CSS file for quick prototyping. Be aware that this approach will increase your CSS bundle size, offer less options, and lacks the flexibility and optimizations of Tailwind.
|
|
131
|
-
|
|
132
|
-
To include the Nova theme and util styles in your Angular project, add the CSSs file to the `styles` array in your `angular.json` configuration file:
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
...
|
|
125
|
+
...
|
|
137
126
|
"styles": [
|
|
138
127
|
"src/styles.css",
|
|
139
|
-
"@nova-design-system/nova-base/dist/css/nova-utils.css",
|
|
140
128
|
"@nova-design-system/nova-base/dist/css/spark.css" // or ocean.css
|
|
141
129
|
],
|
|
142
|
-
...
|
|
130
|
+
...
|
|
143
131
|
}
|
|
144
132
|
```
|
|
145
133
|
|
|
146
|
-
|
|
134
|
+
---
|
|
147
135
|
|
|
148
|
-
|
|
136
|
+
## Nova Font Pro Integration
|
|
149
137
|
|
|
150
138
|
> [!WARNING]
|
|
151
139
|
> Nova Fonts is a protected asset and is not included in the Nova Base package. You need to include the Nova Fonts CSS file in your project.
|
|
152
|
-
> To get the Nova Fonts URL,
|
|
140
|
+
> To get the Nova Fonts URL, **contact us via Teams** or see the Nova Design System internal wiki.
|
|
153
141
|
|
|
154
142
|
Once you have the URL, you can integrate it using any of these methods:
|
|
155
143
|
|
|
156
|
-
|
|
144
|
+
### Option 1: Angular.json Configuration (Recommended)
|
|
157
145
|
|
|
158
|
-
Add the Nova Font Pro
|
|
146
|
+
Add the Nova Font Pro URL to the styles array in your `angular.json` configuration:
|
|
159
147
|
|
|
160
148
|
```json
|
|
161
149
|
"styles": [
|
|
162
|
-
"
|
|
150
|
+
"contact-us-for-URL/nova-fonts-pro.css"
|
|
163
151
|
]
|
|
164
152
|
```
|
|
165
153
|
|
|
166
|
-
|
|
154
|
+
### Option 2: Import in Styles.css
|
|
167
155
|
|
|
168
156
|
```css
|
|
169
|
-
@import url('
|
|
157
|
+
@import url('contact-us-for-URL/nova-fonts-pro.css');
|
|
170
158
|
```
|
|
171
159
|
|
|
172
|
-
|
|
160
|
+
### Option 3: HTML Integration
|
|
173
161
|
|
|
174
162
|
```html
|
|
175
163
|
<!DOCTYPE html>
|
|
176
164
|
<html>
|
|
177
165
|
<head>
|
|
178
|
-
<link rel="stylesheet" href="
|
|
166
|
+
<link rel="stylesheet" href="contact-us-for-URL/nova-fonts-pro.css">
|
|
179
167
|
</head>
|
|
180
168
|
<body>
|
|
181
169
|
<app-root></app-root>
|
|
@@ -183,18 +171,21 @@ Add the Nova Font Pro CDN URL to the styles array in your `angular.json` configu
|
|
|
183
171
|
</html>
|
|
184
172
|
```
|
|
185
173
|
|
|
186
|
-
The
|
|
174
|
+
The font CSS includes both font definitions and a `body { font-family: ... }` rule to apply fonts across your Angular application.
|
|
187
175
|
|
|
188
|
-
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Standalone Component Setup
|
|
189
179
|
|
|
190
180
|
If you're using Angular's standalone components, follow these steps:
|
|
191
181
|
|
|
192
|
-
|
|
182
|
+
### 1. Provide Nova Components
|
|
193
183
|
|
|
194
184
|
Add the `defineCustomElements` function to your `app.config.ts` file to make Nova Web Components available across your application:
|
|
195
185
|
|
|
196
186
|
```typescript
|
|
197
|
-
import { APP_INITIALIZER } from '@angular/core';
|
|
187
|
+
import { ApplicationConfig, APP_INITIALIZER } from '@angular/core';
|
|
188
|
+
import { provideRouter } from '@angular/router';
|
|
198
189
|
import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
|
|
199
190
|
|
|
200
191
|
export const appConfig: ApplicationConfig = {
|
|
@@ -210,12 +201,13 @@ export const appConfig: ApplicationConfig = {
|
|
|
210
201
|
};
|
|
211
202
|
```
|
|
212
203
|
|
|
213
|
-
|
|
204
|
+
### 2. Import Nova Components Module in Your Standalone Components
|
|
214
205
|
|
|
215
206
|
For any standalone component where you want to use Nova Components, add the `NovaComponentsModule` to the `imports` array in the component decorator:
|
|
216
207
|
|
|
217
208
|
```typescript
|
|
218
209
|
import { Component } from '@angular/core';
|
|
210
|
+
import { RouterOutlet } from '@angular/router';
|
|
219
211
|
import { NovaComponentsModule } from '@nova-design-system/nova-angular';
|
|
220
212
|
|
|
221
213
|
@Component({
|
|
@@ -230,10 +222,11 @@ export class AppComponent {
|
|
|
230
222
|
}
|
|
231
223
|
```
|
|
232
224
|
|
|
233
|
-
If you are using
|
|
225
|
+
If you are using an older version than 17 and the above does not work, you will need to use the `CUSTOM_ELEMENTS_SCHEMA`. This removes strict type checking but allows the web components to be used:
|
|
234
226
|
|
|
235
227
|
```typescript
|
|
236
228
|
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
229
|
+
import { RouterOutlet } from '@angular/router';
|
|
237
230
|
|
|
238
231
|
@Component({
|
|
239
232
|
selector: 'app-root',
|
|
@@ -248,16 +241,19 @@ export class AppComponent {
|
|
|
248
241
|
}
|
|
249
242
|
```
|
|
250
243
|
|
|
251
|
-
|
|
244
|
+
---
|
|
252
245
|
|
|
253
|
-
|
|
246
|
+
## Module-Based Setup
|
|
254
247
|
|
|
255
|
-
|
|
248
|
+
If you're using Angular modules, the setup is straightforward:
|
|
249
|
+
|
|
250
|
+
### 1. Import Nova Components Module
|
|
256
251
|
|
|
257
252
|
In the module where you want to use Nova components, add the `NovaComponentsModule` to the `imports` array. This automatically adds the required providers:
|
|
258
253
|
|
|
259
254
|
```typescript
|
|
260
255
|
import { NgModule, APP_INITIALIZER } from '@angular/core';
|
|
256
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
261
257
|
import { NovaComponentsModule } from '@nova-design-system/nova-angular';
|
|
262
258
|
import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
|
|
263
259
|
|
|
@@ -283,7 +279,9 @@ export class AppModule {}
|
|
|
283
279
|
|
|
284
280
|
By including `NovaComponentsModule` in your imports, Nova's web components become available throughout the module.
|
|
285
281
|
|
|
286
|
-
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Usage Example
|
|
287
285
|
|
|
288
286
|
Once set up, you can use Nova components in your Angular templates just like any other Angular component. Here’s an example of using an `nv-button`:
|
|
289
287
|
|
|
@@ -303,6 +301,8 @@ export class AppComponent {
|
|
|
303
301
|
}
|
|
304
302
|
```
|
|
305
303
|
|
|
304
|
+
---
|
|
305
|
+
|
|
306
306
|
## Handling Angular Forms with Nova Components
|
|
307
307
|
|
|
308
308
|
Nova Components Angular also supports seamless integration with Angular's reactive forms and template-driven forms through the `NovaComponentsValueAccessorModule`. This module provides value accessor directives that allow Nova components to work effortlessly with Angular forms.
|
|
@@ -395,8 +395,10 @@ export class AppComponent {
|
|
|
395
395
|
|
|
396
396
|
This setup allows you to use `nv-fieldtext` just like any other Angular form control, complete with two-way binding and validation.
|
|
397
397
|
|
|
398
|
+
---
|
|
399
|
+
|
|
398
400
|
## Conclusion
|
|
399
401
|
|
|
400
|
-
Nova Components Angular provides an easy and flexible way to incorporate Nova's UI components into your Angular projects, whether you prefer using standalone components or a module-based approach.
|
|
402
|
+
Nova Components Angular provides an easy and flexible way to incorporate Nova's UI components into your Angular projects, whether you prefer using standalone components or a module-based approach. With Tailwind as the styling layer and Nova’s token-driven plugin, you can build consistent, scalable UIs across your application.
|
|
401
403
|
|
|
402
404
|
For more detailed documentation and examples, refer to the official Nova documentation.
|
|
@@ -2,6 +2,7 @@ import { APP_INITIALIZER, NgModule } from '@angular/core';
|
|
|
2
2
|
import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
|
|
3
3
|
import { DIRECTIVES } from './stencil-generated';
|
|
4
4
|
import { VALUE_ACCESSORS } from './stencil-generated/component-value-accessors';
|
|
5
|
+
import { NotificationServiceComponent } from './providers';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "./stencil-generated/components";
|
|
7
8
|
import * as i2 from "./stencil-generated/component-value-accessors";
|
|
@@ -19,7 +20,7 @@ export function provideNovaComponents() {
|
|
|
19
20
|
}
|
|
20
21
|
export class NovaComponentsModule {
|
|
21
22
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
22
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip] }); }
|
|
23
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvTablecolumn, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip] }); }
|
|
23
24
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule }); }
|
|
24
25
|
}
|
|
25
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, decorators: [{
|
|
@@ -31,7 +32,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
31
32
|
}] });
|
|
32
33
|
export class NovaComponentsValueAccessorModule {
|
|
33
34
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
34
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
|
|
35
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
|
|
35
36
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule }); }
|
|
36
37
|
}
|
|
37
38
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, decorators: [{
|
|
@@ -41,4 +42,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
41
42
|
exports: [...VALUE_ACCESSORS],
|
|
42
43
|
}]
|
|
43
44
|
}] });
|
|
44
|
-
|
|
45
|
+
export class NovaComponentsProvidersModule {
|
|
46
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
47
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, imports: [NotificationServiceComponent], exports: [NotificationServiceComponent] }); }
|
|
48
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, imports: [NotificationServiceComponent] }); }
|
|
49
|
+
}
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsProvidersModule, decorators: [{
|
|
51
|
+
type: NgModule,
|
|
52
|
+
args: [{
|
|
53
|
+
imports: [NotificationServiceComponent],
|
|
54
|
+
exports: [NotificationServiceComponent],
|
|
55
|
+
}]
|
|
56
|
+
}] });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RDLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFNRCxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDekI7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzs4R0FBakMsaUNBQWlDOytHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzs7MkZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCOztBQU9ELE1BQU0sT0FBTyw2QkFBNkI7OEdBQTdCLDZCQUE2QjsrR0FBN0IsNkJBQTZCLFlBSDlCLDRCQUE0QixhQUM1Qiw0QkFBNEI7K0dBRTNCLDZCQUE2QixZQUg5Qiw0QkFBNEI7OzJGQUczQiw2QkFBNkI7a0JBSnpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTmdNb2R1bGUsIHR5cGUgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmluZUN1c3RvbUVsZW1lbnRzIH0gZnJvbSAnQG5vdmEtZGVzaWduLXN5c3RlbS9ub3ZhLXdlYmNvbXBvbmVudHMvbG9hZGVyJztcblxuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgVkFMVUVfQUNDRVNTT1JTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZC9jb21wb25lbnQtdmFsdWUtYWNjZXNzb3JzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgTm92YSBDb21wb25lbnRzXG4gKlxuICogQHJldHVybnMge1Byb3ZpZGVyfSAtIFRoZSBwcm92aWRlciB0byBiZSB1c2VkIGZvciBub3ZhIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOb3ZhQ29tcG9uZW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgIG11bHRpOiB0cnVlLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c01vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5WQUxVRV9BQ0NFU1NPUlNdLFxuICBleHBvcnRzOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNWYWx1ZUFjY2Vzc29yTW9kdWxlIHt9XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW05vdGlmaWNhdGlvblNlcnZpY2VDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c1Byb3ZpZGVyc01vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './notification.service';
|
|
2
|
+
export * from './notification-service.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZhLWNvbXBvbmVudHMvc3JjL2xpYi9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Component, Input, ViewChildren, ElementRef, CUSTOM_ELEMENTS_SCHEMA, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./notification.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
/**
|
|
7
|
+
* Angular component that renders the notification container with active notifications.
|
|
8
|
+
*/
|
|
9
|
+
export class NotificationServiceComponent {
|
|
10
|
+
constructor(notificationService) {
|
|
11
|
+
this.notificationService = notificationService;
|
|
12
|
+
/**
|
|
13
|
+
* Array of active notifications.
|
|
14
|
+
*/
|
|
15
|
+
this.notifications = [];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Component initialization.
|
|
19
|
+
*/
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
// Use service config if no input provided
|
|
22
|
+
this.position ??= this.notificationService.config.position;
|
|
23
|
+
this.className ??= this.notificationService.config.className;
|
|
24
|
+
// Subscribe to notification changes
|
|
25
|
+
this.subscription = this.notificationService.notifications$.subscribe((list) => (this.notifications = list));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Synchronize notification elements/refs with the service.
|
|
29
|
+
*/
|
|
30
|
+
ngAfterViewInit() {
|
|
31
|
+
const sync = () => {
|
|
32
|
+
this.notificationService.clearRefs();
|
|
33
|
+
for (const elRef of this.notificationEls.toArray()) {
|
|
34
|
+
const el = elRef.nativeElement;
|
|
35
|
+
const id = el.getAttribute('data-id');
|
|
36
|
+
if (id)
|
|
37
|
+
this.notificationService.registerRef(id, el);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
sync();
|
|
41
|
+
this.notificationEls.changes.subscribe(sync);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Component cleanup.
|
|
45
|
+
*/
|
|
46
|
+
ngOnDestroy() {
|
|
47
|
+
this.subscription?.unsubscribe();
|
|
48
|
+
this.notificationService.clearRefs();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Track function for ngFor to optimize rendering.
|
|
52
|
+
*
|
|
53
|
+
* @param {number} index The index of the item
|
|
54
|
+
* @param {Notification} notification The notification item
|
|
55
|
+
* @returns {string} The notification ID
|
|
56
|
+
*/
|
|
57
|
+
trackByNotificationId(index, notification) {
|
|
58
|
+
return notification.id;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Handle notification hidden state change.
|
|
62
|
+
*
|
|
63
|
+
* @param {CustomEvent<boolean>} event The hidden changed event
|
|
64
|
+
* @param {string} id The notification ID
|
|
65
|
+
*/
|
|
66
|
+
handleHiddenChanged(event, id) {
|
|
67
|
+
if (event.detail && id) {
|
|
68
|
+
this.notificationService.remove(id);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationServiceComponent, deps: [{ token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: NotificationServiceComponent, isStandalone: true, selector: "nv-notification-service", inputs: { position: "position", className: "className" }, viewQueries: [{ propertyName: "notificationEls", predicate: ["notificationEl"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
73
|
+
<nv-notificationcontainer
|
|
74
|
+
[position]="position"
|
|
75
|
+
[class]="className"
|
|
76
|
+
data-testid="notification-container"
|
|
77
|
+
>
|
|
78
|
+
<nv-notification
|
|
79
|
+
*ngFor="
|
|
80
|
+
let notification of notifications;
|
|
81
|
+
trackBy: trackByNotificationId
|
|
82
|
+
"
|
|
83
|
+
#notificationEl
|
|
84
|
+
[attr.data-id]="notification.id"
|
|
85
|
+
[heading]="notification.heading"
|
|
86
|
+
[message]="notification.message"
|
|
87
|
+
[dismissible]="notification.dismissible"
|
|
88
|
+
[emphasis]="notification.emphasis"
|
|
89
|
+
[feedback]="notification.feedback"
|
|
90
|
+
[icon]="notification.icon"
|
|
91
|
+
[initiallyHidden]="true"
|
|
92
|
+
(hiddenChanged)="handleHiddenChanged($event, notification.id)"
|
|
93
|
+
>
|
|
94
|
+
<!-- Actions slot content for the custom element -->
|
|
95
|
+
<div
|
|
96
|
+
slot="actions"
|
|
97
|
+
class="flex gap-2"
|
|
98
|
+
*ngIf="notification.actions?.length || notification.actionSlot"
|
|
99
|
+
>
|
|
100
|
+
<!-- Config-driven actions -->
|
|
101
|
+
<nv-button
|
|
102
|
+
*ngFor="let action of notification.actions"
|
|
103
|
+
emphasis="low"
|
|
104
|
+
size="sm"
|
|
105
|
+
(click)="action.onClick()"
|
|
106
|
+
>
|
|
107
|
+
{{ action.label }}
|
|
108
|
+
</nv-button>
|
|
109
|
+
|
|
110
|
+
<!-- Component-driven actions -->
|
|
111
|
+
<ng-container
|
|
112
|
+
*ngIf="notification.actionSlot"
|
|
113
|
+
[ngComponentOutlet]="notification.actionSlot"
|
|
114
|
+
></ng-container>
|
|
115
|
+
</div>
|
|
116
|
+
</nv-notification>
|
|
117
|
+
</nv-notificationcontainer>
|
|
118
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
119
|
+
}
|
|
120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NotificationServiceComponent, decorators: [{
|
|
121
|
+
type: Component,
|
|
122
|
+
args: [{
|
|
123
|
+
selector: 'nv-notification-service',
|
|
124
|
+
standalone: true,
|
|
125
|
+
imports: [CommonModule],
|
|
126
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
127
|
+
template: `
|
|
128
|
+
<nv-notificationcontainer
|
|
129
|
+
[position]="position"
|
|
130
|
+
[class]="className"
|
|
131
|
+
data-testid="notification-container"
|
|
132
|
+
>
|
|
133
|
+
<nv-notification
|
|
134
|
+
*ngFor="
|
|
135
|
+
let notification of notifications;
|
|
136
|
+
trackBy: trackByNotificationId
|
|
137
|
+
"
|
|
138
|
+
#notificationEl
|
|
139
|
+
[attr.data-id]="notification.id"
|
|
140
|
+
[heading]="notification.heading"
|
|
141
|
+
[message]="notification.message"
|
|
142
|
+
[dismissible]="notification.dismissible"
|
|
143
|
+
[emphasis]="notification.emphasis"
|
|
144
|
+
[feedback]="notification.feedback"
|
|
145
|
+
[icon]="notification.icon"
|
|
146
|
+
[initiallyHidden]="true"
|
|
147
|
+
(hiddenChanged)="handleHiddenChanged($event, notification.id)"
|
|
148
|
+
>
|
|
149
|
+
<!-- Actions slot content for the custom element -->
|
|
150
|
+
<div
|
|
151
|
+
slot="actions"
|
|
152
|
+
class="flex gap-2"
|
|
153
|
+
*ngIf="notification.actions?.length || notification.actionSlot"
|
|
154
|
+
>
|
|
155
|
+
<!-- Config-driven actions -->
|
|
156
|
+
<nv-button
|
|
157
|
+
*ngFor="let action of notification.actions"
|
|
158
|
+
emphasis="low"
|
|
159
|
+
size="sm"
|
|
160
|
+
(click)="action.onClick()"
|
|
161
|
+
>
|
|
162
|
+
{{ action.label }}
|
|
163
|
+
</nv-button>
|
|
164
|
+
|
|
165
|
+
<!-- Component-driven actions -->
|
|
166
|
+
<ng-container
|
|
167
|
+
*ngIf="notification.actionSlot"
|
|
168
|
+
[ngComponentOutlet]="notification.actionSlot"
|
|
169
|
+
></ng-container>
|
|
170
|
+
</div>
|
|
171
|
+
</nv-notification>
|
|
172
|
+
</nv-notificationcontainer>
|
|
173
|
+
`,
|
|
174
|
+
}]
|
|
175
|
+
}], ctorParameters: () => [{ type: i1.NotificationService }], propDecorators: { position: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], className: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], notificationEls: [{
|
|
180
|
+
type: ViewChildren,
|
|
181
|
+
args: ['notificationEl', { read: ElementRef }]
|
|
182
|
+
}] } });
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvcHJvdmlkZXJzL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxZQUFZLEVBQ1osVUFBVSxFQUVWLHNCQUFzQixHQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLL0M7O0dBRUc7QUFzREgsTUFBTSxPQUFPLDRCQUE0QjtJQXdCdkMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFiNUQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFVNEIsQ0FBQztJQUVoRTs7T0FFRztJQUNILFFBQVE7UUFDTiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRTdELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUNuRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksRUFBRTtvQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsWUFBMEI7UUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLEtBQTJCLEVBQUUsRUFBVztRQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzs4R0FyRlUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsOE5BbUJDLFVBQVUsNkJBbkV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVCwyREFoRFMsWUFBWTs7MkZBa0RYLDRCQUE0QjtrQkFyRHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVDtpQkFDRjt3RkFLVSxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBV0UsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBRdWVyeUxpc3QsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuLy8gaW1wb3J0IHsgTm92YUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuLi9ub3ZhLWNvbXBvbmVudHMubW9kdWxlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UsIHR5cGUgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIHdpdGggYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ252LW5vdGlmaWNhdGlvbi1zZXJ2aWNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtbm90aWZpY2F0aW9uY29udGFpbmVyXG4gICAgICBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIm5vdGlmaWNhdGlvbi1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxudi1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IG5vdGlmaWNhdGlvbiBvZiBub3RpZmljYXRpb25zO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlOb3RpZmljYXRpb25JZFxuICAgICAgICBcIlxuICAgICAgICAjbm90aWZpY2F0aW9uRWxcbiAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJub3RpZmljYXRpb24uaWRcIlxuICAgICAgICBbaGVhZGluZ109XCJub3RpZmljYXRpb24uaGVhZGluZ1wiXG4gICAgICAgIFttZXNzYWdlXT1cIm5vdGlmaWNhdGlvbi5tZXNzYWdlXCJcbiAgICAgICAgW2Rpc21pc3NpYmxlXT1cIm5vdGlmaWNhdGlvbi5kaXNtaXNzaWJsZVwiXG4gICAgICAgIFtlbXBoYXNpc109XCJub3RpZmljYXRpb24uZW1waGFzaXNcIlxuICAgICAgICBbZmVlZGJhY2tdPVwibm90aWZpY2F0aW9uLmZlZWRiYWNrXCJcbiAgICAgICAgW2ljb25dPVwibm90aWZpY2F0aW9uLmljb25cIlxuICAgICAgICBbaW5pdGlhbGx5SGlkZGVuXT1cInRydWVcIlxuICAgICAgICAoaGlkZGVuQ2hhbmdlZCk9XCJoYW5kbGVIaWRkZW5DaGFuZ2VkKCRldmVudCwgbm90aWZpY2F0aW9uLmlkKVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWN0aW9ucyBzbG90IGNvbnRlbnQgZm9yIHRoZSBjdXN0b20gZWxlbWVudCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmFjdGlvbnM/Lmxlbmd0aCB8fCBub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIENvbmZpZy1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bnYtYnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG5vdGlmaWNhdGlvbi5hY3Rpb25zXCJcbiAgICAgICAgICAgIGVtcGhhc2lzPVwibG93XCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLm9uQ2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgICAgPC9udi1idXR0b24+XG5cbiAgICAgICAgICA8IS0tIENvbXBvbmVudC1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIm5vdGlmaWNhdGlvbi5hY3Rpb25TbG90XCJcbiAgICAgICAgICAgIFtuZ0NvbXBvbmVudE91dGxldF09XCJub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbnYtbm90aWZpY2F0aW9uPlxuICAgIDwvbnYtbm90aWZpY2F0aW9uY29udGFpbmVyPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBjb250YWluZXIgb24gdGhlIHNjcmVlbi5cbiAgICovXG4gIEBJbnB1dCgpIHBvc2l0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci5cbiAgICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBub3RpZmljYXRpb24gZWxlbWVudHMuXG4gICAqL1xuICBAVmlld0NoaWxkcmVuKCdub3RpZmljYXRpb25FbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIG5vdGlmaWNhdGlvbkVscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+PjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFVzZSBzZXJ2aWNlIGNvbmZpZyBpZiBubyBpbnB1dCBwcm92aWRlZFxuICAgIHRoaXMucG9zaXRpb24gPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcucG9zaXRpb247XG4gICAgdGhpcy5jbGFzc05hbWUgPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcuY2xhc3NOYW1lO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbiBjaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uubm90aWZpY2F0aW9ucyQuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+ICh0aGlzLm5vdGlmaWNhdGlvbnMgPSBsaXN0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIG5vdGlmaWNhdGlvbiBlbGVtZW50cy9yZWZzIHdpdGggdGhlIHNlcnZpY2UuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3luYyA9ICgpID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgICAgIGZvciAoY29uc3QgZWxSZWYgb2YgdGhpcy5ub3RpZmljYXRpb25FbHMudG9BcnJheSgpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTtcbiAgICAgICAgaWYgKGlkKSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJSZWYoaWQsIGVsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHN5bmMoKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkVscy5jaGFuZ2VzLnN1YnNjcmliZShzeW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY2xlYW51cC5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gb3B0aW1pemUgcmVuZGVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiBpdGVtXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIHRyYWNrQnlOb3RpZmljYXRpb25JZChpbmRleDogbnVtYmVyLCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikge1xuICAgIHJldHVybiBub3RpZmljYXRpb24uaWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vdGlmaWNhdGlvbiBoaWRkZW4gc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50PGJvb2xlYW4+fSBldmVudCBUaGUgaGlkZGVuIGNoYW5nZWQgZXZlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIGhhbmRsZUhpZGRlbkNoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50PGJvb2xlYW4+LCBpZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXRhaWwgJiYgaWQpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmUoaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
|