@nova-design-system/nova-angular 3.0.0-beta.38 → 3.0.0-beta.39

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 CHANGED
@@ -1,10 +1,39 @@
1
- # Nova Components Angular
1
+ # Nova Components Angular (Angular 17 and below)
2
+
3
+ > If you are using **Angular 18**, please use the [Nova Angular 18 package]([@nova-design-system/nova-angular](https://www.npmjs.com/package/@nova-design-system/nova-angular)). For **Angular 19**, use the [Nova Angular 19 package]([@nova-design-system/nova-angular-19](https://www.npmjs.com/package/@nova-design-system/nova-angular-19)).
2
4
 
3
5
  **Nova Components Angular** allows you to integrate Nova's native UI elements into your Angular applications. It provides flexibility in usage with both standalone components and module-based setups. This guide will walk you through the necessary steps for setting up and using Nova Components in your Angular project.
4
6
 
7
+ - [Nova Components Angular (Angular 17 and below)](#nova-components-angular-angular-17-and-below)
8
+ - [Installation](#installation)
9
+ - [Setup](#setup)
10
+ - [CSS Integration Using Tailwind (Recommended)](#css-integration-using-tailwind-recommended)
11
+ - [1. Install Tailwind CSS](#1-install-tailwind-css)
12
+ - [2. Configure PostCSS Plugins](#2-configure-postcss-plugins)
13
+ - [3. Create `tailwind.config.ts`](#3-create-tailwindconfigts)
14
+ - [4. Configure Tailwind and Nova Plugin in `styles.css`](#4-configure-tailwind-and-nova-plugin-in-stylescss)
15
+ - [5. Include the Nova Tokens (Spark or Ocean)](#5-include-the-nova-tokens-spark-or-ocean)
16
+ - [CSS Integration Without Tailwind (Not Recommended)](#css-integration-without-tailwind-not-recommended)
17
+ - [Nova Font Pro Integration](#nova-font-pro-integration)
18
+ - [Option 1: Angular.json Configuration (Recommended)](#option-1-angularjson-configuration-recommended)
19
+ - [Option 2: Import in Styles.css](#option-2-import-in-stylescss)
20
+ - [Option 3: HTML Integration](#option-3-html-integration)
21
+ - [Standalone Component Setup](#standalone-component-setup)
22
+ - [1. Provide Nova Components](#1-provide-nova-components)
23
+ - [2. Import Nova Components Module in Your Standalone Components](#2-import-nova-components-module-in-your-standalone-components)
24
+ - [Module-Based Setup](#module-based-setup)
25
+ - [1. Import Nova Components Module](#1-import-nova-components-module)
26
+ - [Usage Example](#usage-example)
27
+ - [Handling Angular Forms with Nova Components](#handling-angular-forms-with-nova-components)
28
+ - [Standalone Component Setup](#standalone-component-setup-1)
29
+ - [Module-Based Setup](#module-based-setup-1)
30
+ - [Usage Example with Angular Forms](#usage-example-with-angular-forms)
31
+ - [Conclusion](#conclusion)
32
+
33
+
5
34
  ## Installation
6
35
 
7
- First, install the necessary Nova packages using your package manager:
36
+ Install the necessary Nova packages using your package manager:
8
37
 
9
38
  ```bash
10
39
  npm install @nova-design-system/nova-webcomponents @nova-design-system/nova-base @nova-design-system/nova-angular
@@ -16,36 +45,101 @@ or
16
45
  yarn add @nova-design-system/nova-webcomponents @nova-design-system/nova-base @nova-design-system/nova-angular
17
46
  ```
18
47
 
48
+ ---
49
+
19
50
  ## Setup
20
51
 
21
- ### CSS Integration
52
+ ### CSS Integration Using Tailwind (Recommended)
53
+
54
+ 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.
22
55
 
23
- To include the Nova UI styles in your Angular project, add the Nova CSS file to the `styles` array in your `angular.json` configuration file:
56
+ > **Tailwind Version**
57
+ > This guide is written for Tailwind v4. While compatible with v3, some features may not work as expected.
58
+
59
+ Visit the official [Tailwind CSS angular documentation](https://tailwindcss.com/docs/installation/framework-guides/angular) for more detailed installation instructions.
60
+
61
+ #### 1. Install Tailwind CSS
62
+
63
+ ```bash
64
+ npm install tailwindcss @tailwindcss/postcss postcss
65
+ ```
66
+
67
+ #### 2. Configure PostCSS Plugins
68
+
69
+ Create a `.postcssrc.json` file in the root of your project and add the `@tailwindcss/postcss` plugin to your PostCSS configuration.
24
70
 
25
71
  ```json
26
72
  {
27
- "projects": {
28
- "your-project-name": {
29
- "architect": {
30
- "build": {
31
- "options": {
32
- "styles": [
33
- "src/styles.css",
34
- "@nova-design-system/nova-base/dist/css/nova-utils.css",
35
- "@nova-design-system/nova-base/dist/css/spark.css", // or ocean.css
36
- ],
37
- "scripts": []
38
- }
39
- }
40
- }
41
- }
73
+ "plugins": {
74
+ "@tailwindcss/postcss": {}
42
75
  }
43
76
  }
44
77
  ```
45
78
 
79
+ #### 3. Create `tailwind.config.ts`
80
+
81
+ In the root of your project, create a `tailwind.config.ts` file and include the Nova theme:
82
+
83
+ ```ts
84
+ import type { Config } from 'tailwindcss'
85
+ import { novaTailwindTheme } from "@nova-design-system/nova-base/theme"
86
+
87
+ export default {
88
+ theme: novaTailwindTheme,
89
+ } satisfies Config
90
+ ```
91
+
92
+ #### 4. Configure Tailwind and Nova Plugin in `styles.css`
93
+
94
+ In `./src/styles.css`, add the tailwind import, the config path, the dark mode class, and the Nova plugin:
95
+
96
+ ```css
97
+ @import 'tailwindcss';
98
+
99
+ @config "../tailwind.config.ts";
100
+ @plugin "@nova-design-system/nova-base/theme/plugin";
101
+ @custom-variant dark (&:where(.dark, .dark *));
102
+ ```
103
+
104
+ > **Dark Mode**
105
+ > To enable dark mode, add the `dark` class to the `<body>` element.
106
+
107
+ #### 5. Include the Nova Tokens (Spark or Ocean)
108
+
109
+ Add the Nova Tokens CSS file to the `styles` array in your `angular.json` configuration:
110
+
111
+ ```json
112
+ {
113
+ ...
114
+ "styles": [
115
+ "src/styles.css",
116
+ "@nova-design-system/nova-base/dist/css/spark.css" // or ocean.css
117
+ ],
118
+ ...
119
+ }
120
+ ```
121
+
122
+ ### CSS Integration Without Tailwind (Not Recommended)
123
+
124
+ 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.
125
+
126
+ 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:
127
+
128
+ ```json
129
+ {
130
+ ...
131
+ "styles": [
132
+ "src/styles.css",
133
+ "@nova-design-system/nova-base/dist/css/nova-utils.css",
134
+ "@nova-design-system/nova-base/dist/css/spark.css" // or ocean.css
135
+ ],
136
+ ...
137
+ }
138
+ ```
139
+
46
140
  This setup ensures that the Nova styles are available throughout your application.
47
141
 
48
- ## Nova Font Pro Integration
142
+ ### Nova Font Pro Integration
49
143
 
50
144
  > [!WARNING]
51
145
  > 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.
@@ -53,7 +147,7 @@ This setup ensures that the Nova styles are available throughout your applicatio
53
147
 
54
148
  Once you have the URL, you can integrate it using any of these methods:
55
149
 
56
- ### Option 1: Angular.json Configuration (Recommended)
150
+ #### Option 1: Angular.json Configuration (Recommended)
57
151
 
58
152
  Add the Nova Font Pro CDN URL to the styles array in your `angular.json` configuration:
59
153
 
@@ -63,13 +157,13 @@ Add the Nova Font Pro CDN URL to the styles array in your `angular.json` configu
63
157
  ]
64
158
  ```
65
159
 
66
- ### Option 2: Import in Styles.css
160
+ #### Option 2: Import in Styles.css
67
161
 
68
162
  ```css
69
163
  @import url('https://novaassets.azureedge.net/fonts/nova-fonts-pro.css');
70
164
  ```
71
165
 
72
- ### Option 3: HTML Integration
166
+ #### Option 3: HTML Integration
73
167
 
74
168
  ```html
75
169
  <!DOCTYPE html>
@@ -85,27 +179,37 @@ Add the Nova Font Pro CDN URL to the styles array in your `angular.json` configu
85
179
 
86
180
  The `nova-fonts-pro.css` file includes both font definitions and the `font-family` rule for the `body`, automatically applying the fonts across your Angular application.
87
181
 
88
- ## Standalone Component Setup
182
+ ### Standalone Component Setup
89
183
 
90
184
  If you're using Angular's standalone components, follow these steps:
91
185
 
92
- ### 1. Provide Nova Components
186
+ #### 1. Provide Nova Components
93
187
 
94
- Add the `provideNovaComponents` function to your `app.config.ts` file to make Nova Web Components available across your application:
188
+ Add the `defineCustomElements` function to your `app.config.ts` file to make Nova Web Components available across your application:
95
189
 
96
190
  ```typescript
97
- import { provideNovaComponents } from '@nova-design-system/nova-angular';
191
+ import { APP_INITIALIZER } from '@angular/core';
192
+ import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
98
193
 
99
194
  export const appConfig: ApplicationConfig = {
100
- providers: [provideRouter(routes), provideNovaComponents()],
195
+ providers: [
196
+ provideRouter(routes),
197
+ {
198
+ provide: APP_INITIALIZER,
199
+ useFactory: () => defineCustomElements,
200
+ deps: [],
201
+ multi: true,
202
+ }
203
+ ],
101
204
  };
102
205
  ```
103
206
 
104
- ### 2. Import Nova Components Module in Your Standalone Components
207
+ #### 2. Import Nova Components Module in Your Standalone Components
105
208
 
106
209
  For any standalone component where you want to use Nova Components, add the `NovaComponentsModule` to the `imports` array in the component decorator:
107
210
 
108
211
  ```typescript
212
+ import { Component } from '@angular/core';
109
213
  import { NovaComponentsModule } from '@nova-design-system/nova-angular';
110
214
 
111
215
  @Component({
@@ -120,33 +224,60 @@ export class AppComponent {
120
224
  }
121
225
  ```
122
226
 
123
- ## Module-Based Setup
227
+ If you are using and older version than 17, and the above does not work, you will need to use the `CUSTOM_ELEMENTS_SCHEMA`, this will remove the strict typechecking but allow the webcomponents to be used:
228
+
229
+ ```typescript
230
+ import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
231
+
232
+ @Component({
233
+ selector: 'app-root',
234
+ standalone: true,
235
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
236
+ imports: [RouterOutlet],
237
+ templateUrl: './app.component.html',
238
+ styleUrls: ['./app.component.css']
239
+ })
240
+ export class AppComponent {
241
+ // Your component logic here
242
+ }
243
+ ```
244
+
245
+ ### Module-Based Setup
124
246
 
125
247
  If you're using Angular modules, the setup is even simpler:
126
248
 
127
- ### 1. Import Nova Components Module
249
+ #### 1. Import Nova Components Module
128
250
 
129
251
  In the module where you want to use Nova components, add the `NovaComponentsModule` to the `imports` array. This automatically adds the required providers:
130
252
 
131
253
  ```typescript
254
+ import { NgModule, APP_INITIALIZER } from '@angular/core';
132
255
  import { NovaComponentsModule } from '@nova-design-system/nova-angular';
256
+ import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
133
257
 
134
258
  @NgModule({
135
259
  declarations: [AppComponent],
136
260
  imports: [
137
261
  BrowserModule,
138
262
  AppRoutingModule,
139
- NovaComponentsModule // Add NovaComponentsModule here
263
+ NovaComponentsModule, // Add NovaComponentsModule here
140
264
  ],
141
- providers: [],
142
- bootstrap: [AppComponent]
265
+ providers: [
266
+ {
267
+ provide: APP_INITIALIZER,
268
+ useFactory: () => defineCustomElements, // Add the nova initializer here
269
+ deps: [],
270
+ multi: true,
271
+ },
272
+ ],
273
+ bootstrap: [AppComponent],
143
274
  })
144
275
  export class AppModule {}
145
276
  ```
146
277
 
147
278
  By including `NovaComponentsModule` in your imports, Nova's web components become available throughout the module.
148
279
 
149
- ## Usage Example
280
+ ### Usage Example
150
281
 
151
282
  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`:
152
283
 
@@ -205,13 +336,14 @@ This setup allows Nova components to be used seamlessly with Angular forms in yo
205
336
  If you're using Angular modules, you can also integrate the value accessors by importing the `NovaComponentsValueAccessorModule` in your module:
206
337
 
207
338
  ```typescript
208
- import { NgModule } from '@angular/core';
339
+ import { NgModule, APP_INITIALIZER } from '@angular/core';
209
340
  import { BrowserModule } from '@angular/platform-browser';
210
341
  import { FormsModule } from '@angular/forms';
211
342
  import {
212
343
  NovaComponentsModule,
213
344
  NovaComponentsValueAccessorModule,
214
345
  } from '@nova-design-system/nova-angular';
346
+ import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
215
347
 
216
348
  @NgModule({
217
349
  declarations: [AppComponent],
@@ -221,7 +353,14 @@ import {
221
353
  NovaComponentsModule, // Add NovaComponentsModule here
222
354
  NovaComponentsValueAccessorModule, // Import the Value Accessor Module here
223
355
  ],
224
- providers: [],
356
+ providers: [
357
+ {
358
+ provide: APP_INITIALIZER,
359
+ useFactory: () => defineCustomElements, // Add the nova initializer here
360
+ deps: [],
361
+ multi: true,
362
+ },
363
+ ],
225
364
  bootstrap: [AppComponent]
226
365
  })
227
366
  export class AppModule {}
@@ -229,7 +368,7 @@ export class AppModule {}
229
368
 
230
369
  This setup ensures that Nova components are fully compatible with Angular forms throughout your module.
231
370
 
232
- ## Usage Example with Angular Forms
371
+ ### Usage Example with Angular Forms
233
372
 
234
373
  With the value accessors set up, you can now use Nova components within Angular forms. Here's an example:
235
374
 
@@ -19,15 +19,14 @@ export function provideNovaComponents() {
19
19
  }
20
20
  export class NovaComponentsModule {
21
21
  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.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBase, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvCol, i1.NvDatagrid, i1.NvDatagridbody, i1.NvDatagridcolumn, i1.NvDatagriddatacell, i1.NvDatagridhead, i1.NvDatagridrow, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, 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.NvTablebody, i1.NvTablecolumn, i1.NvTabledatacell, i1.NvTablehead, i1.NvTablerow, i1.NvToggle, i1.NvTooltip], exports: [i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBase, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvCol, i1.NvDatagrid, i1.NvDatagridbody, i1.NvDatagridcolumn, i1.NvDatagriddatacell, i1.NvDatagridhead, i1.NvDatagridrow, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, 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.NvTablebody, i1.NvTablecolumn, i1.NvTabledatacell, i1.NvTablehead, i1.NvTablerow, i1.NvToggle, i1.NvTooltip] }); }
23
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, providers: [provideNovaComponents()] }); }
22
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBase, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridbody, i1.NvDatagridcolumn, i1.NvDatagriddatacell, i1.NvDatagridhead, i1.NvDatagridrow, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, 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.NvTablebody, i1.NvTablecolumn, i1.NvTabledatacell, i1.NvTablehead, i1.NvTablerow, i1.NvToggle, i1.NvTooltip], exports: [i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBase, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridbody, i1.NvDatagridcolumn, i1.NvDatagriddatacell, i1.NvDatagridhead, i1.NvDatagridrow, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, 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.NvTablebody, i1.NvTablecolumn, i1.NvTabledatacell, i1.NvTablehead, i1.NvTablerow, i1.NvToggle, i1.NvTooltip] }); }
23
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule }); }
24
24
  }
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, decorators: [{
26
26
  type: NgModule,
27
27
  args: [{
28
28
  declarations: [...DIRECTIVES],
29
29
  exports: [...DIRECTIVES],
30
- providers: [provideNovaComponents()],
31
30
  }]
32
31
  }] });
33
32
  export class NovaComponentsValueAccessorModule {
@@ -42,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
42
41
  exports: [...VALUE_ACCESSORS],
43
42
  }]
44
43
  }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7QUFFaEY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTztRQUNMLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0I7UUFDdEMsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDO0FBQ0osQ0FBQztBQU9ELE1BQU0sT0FBTyxvQkFBb0I7OEdBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0IsYUFGcEIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOzsyRkFFekIsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztvQkFDeEIsU0FBUyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDckM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzs4R0FBakMsaUNBQWlDOytHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzs7MkZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSwgdHlwZSBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAbm92YS1kZXNpZ24tc3lzdGVtL25vdmEtd2ViY29tcG9uZW50cy9sb2FkZXInO1xuXG5pbXBvcnQgeyBESVJFQ1RJVkVTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZCc7XG5pbXBvcnQgeyBWQUxVRV9BQ0NFU1NPUlMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkL2NvbXBvbmVudC12YWx1ZS1hY2Nlc3NvcnMnO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIE5vdmEgQ29tcG9uZW50c1xuICpcbiAqIEByZXR1cm5zIHtQcm92aWRlcn0gLSBUaGUgcHJvdmlkZXIgdG8gYmUgdXNlZCBmb3Igbm92YSBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTm92YUNvbXBvbmVudHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBkZWZpbmVDdXN0b21FbGVtZW50cyxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZU5vdmFDb21wb25lbnRzKCldLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c01vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5WQUxVRV9BQ0NFU1NPUlNdLFxuICBleHBvcnRzOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNWYWx1ZUFjY2Vzc29yTW9kdWxlIHt9XG4iXX0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7QUFFaEY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTztRQUNMLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0I7UUFDdEMsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDO0FBQ0osQ0FBQztBQU1ELE1BQU0sT0FBTyxvQkFBb0I7OEdBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBSmhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUN6Qjs7QUFPRCxNQUFNLE9BQU8saUNBQWlDOzhHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzsrR0FBakMsaUNBQWlDOzsyRkFBakMsaUNBQWlDO2tCQUo3QyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDO29CQUNsQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfSU5JVElBTElaRVIsIE5nTW9kdWxlLCB0eXBlIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWZpbmVDdXN0b21FbGVtZW50cyB9IGZyb20gJ0Bub3ZhLWRlc2lnbi1zeXN0ZW0vbm92YS13ZWJjb21wb25lbnRzL2xvYWRlcic7XG5cbmltcG9ydCB7IERJUkVDVElWRVMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkJztcbmltcG9ydCB7IFZBTFVFX0FDQ0VTU09SUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQvY29tcG9uZW50LXZhbHVlLWFjY2Vzc29ycyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgTm92YSBDb21wb25lbnRzXG4gKlxuICogQHJldHVybnMge1Byb3ZpZGVyfSAtIFRoZSBwcm92aWRlciB0byBiZSB1c2VkIGZvciBub3ZhIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOb3ZhQ29tcG9uZW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgIG11bHRpOiB0cnVlLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZhQ29tcG9uZW50c01vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5WQUxVRV9BQ0NFU1NPUlNdLFxuICBleHBvcnRzOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNWYWx1ZUFjY2Vzc29yTW9kdWxlIHt9XG4iXX0=