@trimble-oss/moduswebcomponents-angular 1.8.0-ng21 → 1.9.0-ng17

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,64 +1,73 @@
1
- # ModuswebcomponentsAngular
1
+ # Modus Angular Components: moduswebcomponents-angular
2
2
 
3
- This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 21.2.0.
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
4
 
5
- ## Code scaffolding
5
+ The components in this library were programmatically generated using the [StencilJS](https://stenciljs.com/) [Angular Framework Integration](https://stenciljs.com/docs/angular).
6
6
 
7
- Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
7
+ ## Installation
8
8
 
9
- ```bash
10
- ng generate component component-name
11
- ```
9
+ - Install the Modus Angular Components Library and its Modus Web Component peer dependency
10
+ `npm install @trimble-oss/moduswebcomponents @trimble-oss/moduswebcomponents-angular`
12
11
 
13
- For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
12
+ - You will need to import our styling in your main JavaScript or CSS file:
14
13
 
15
- ```bash
16
- ng generate --help
17
- ```
14
+ ```js
15
+ import "@trimble-oss/moduswebcomponents/modus-wc-styles.css";
16
+ ```
18
17
 
19
- ## Building
18
+ - Add the following snippet to your `main.ts` (or any main module)
20
19
 
21
- To build the library, run:
20
+ ```typescript
21
+ import { defineCustomElements } from '@trimble-oss/moduswebcomponents/loader';
22
22
 
23
- ```bash
24
- ng build moduswebcomponents-angular
25
- ```
23
+ defineCustomElements();
24
+ ```
26
25
 
27
- This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
26
+ - Add the following snippet to your `app.module.ts` (or any app module)
28
27
 
29
- ### Publishing the Library
28
+ ```typescript
29
+ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
30
30
 
31
- Once the project is built, you can publish your library by following these steps:
31
+ @NgModule({
32
+ ...
33
+ schemas: [CUSTOM_ELEMENTS_SCHEMA]
34
+ })
35
+ ```
32
36
 
33
- 1. Navigate to the `dist` directory:
37
+ ## Example Usage
34
38
 
35
- ```bash
36
- cd dist/moduswebcomponents-angular
37
- ```
39
+ - Use a modus button in your `app.component.html`
38
40
 
39
- 2. Run the `npm publish` command to publish your library to the npm registry:
40
- ```bash
41
- npm publish
42
- ```
41
+ ```html
42
+ <modus-wc-button color="primary" [disabled]="false">Modus Button</modus-wc-button>
43
+ ```
43
44
 
44
- ## Running unit tests
45
+ ## Build
45
46
 
46
- To execute unit tests with the [Vitest](https://vitest.dev) test runner, use the following command:
47
+ To rebuild the Modus Angular Components you need to perform the following steps:
47
48
 
48
- ```bash
49
- ng test
50
- ```
49
+ - From the `./integrations/angular/ng17` project directory run
50
+ `npm install` then `npm run build`
51
51
 
52
- ## Running end-to-end tests
52
+ ### Referencing a local build of modus-wc
53
53
 
54
- For end-to-end (e2e) testing, run:
54
+ #### Using npm link
55
55
 
56
- ```bash
57
- ng e2e
58
- ```
56
+ - If you want to reference a local build of `modus-wc` you can run `npm link` from the `modus-wc-2.0` root
57
+ directory and then `npm link @trimble-oss/moduswebcomponents` from the `ng17` directory.
59
58
 
60
- Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
59
+ #### Using npm pack
61
60
 
62
- ## Additional Resources
61
+ - You can also run `npm pack` from the `modus-wc-2.0` root
62
+ directory and then `npm install path/to/modus-wc-tarball.tgz` from `ng17` directory.
63
63
 
64
- For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
64
+ ## Debugging Locally
65
+
66
+ To use the Modus Angular components locally for debugging and other purposes:
67
+
68
+ - From `./ng17` project directory run `npm run build`
69
+ - From `./ng17` project directory run `npm pack ./dist/trimble-oss/moduswebcomponents-angular`
70
+ - This will generate a tarball of the library: `trimble-cms-modus-wc-angular-0.0.1-ng17.tgz`
71
+
72
+ You can now test the build locally with any Angular project by running `npm install path/to/trimble-cms-modus-wc-angular-0.0.1-ng17.tgz`
73
+ and following the [installation steps](#installation).
@@ -0,0 +1,42 @@
1
+ import { APP_INITIALIZER, NgModule } from '@angular/core';
2
+ import { defineCustomElements } from '@trimble-oss/moduswebcomponents/loader';
3
+ import { setAssetPath } from '@trimble-oss/moduswebcomponents/components';
4
+ import { DIRECTIVES } from './stencil-generated';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./stencil-generated/components";
7
+ export class ModusAngularComponentsModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModusAngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: ModusAngularComponentsModule, declarations: [i1.ModusWcAccordion, i1.ModusWcAlert, i1.ModusWcAppMenu, i1.ModusWcAutocomplete, i1.ModusWcAvatar, i1.ModusWcBadge, i1.ModusWcBottomSheet, i1.ModusWcBreadcrumbs, i1.ModusWcButton, i1.ModusWcButtonGroup, i1.ModusWcCard, i1.ModusWcCheckbox, i1.ModusWcChip, i1.ModusWcCollapse, i1.ModusWcDate, i1.ModusWcDivider, i1.ModusWcDropdownMenu, i1.ModusWcFileDropzone, i1.ModusWcHandle, i1.ModusWcIcon, i1.ModusWcInputFeedback, i1.ModusWcInputLabel, i1.ModusWcLink, i1.ModusWcLoader, i1.ModusWcLogo, i1.ModusWcMenu, i1.ModusWcMenuItem, i1.ModusWcModal, i1.ModusWcNavbar, i1.ModusWcNumberInput, i1.ModusWcPagination, i1.ModusWcPanel, i1.ModusWcProfileMenu, i1.ModusWcProgress, i1.ModusWcRadio, i1.ModusWcRating, i1.ModusWcSelect, i1.ModusWcSideNavigation, i1.ModusWcSkeleton, i1.ModusWcSlider, i1.ModusWcStepper, i1.ModusWcSwitch, i1.ModusWcTable, i1.ModusWcTabs, i1.ModusWcTextInput, i1.ModusWcTextarea, i1.ModusWcThemeProvider, i1.ModusWcThemeSwitcher, i1.ModusWcTimeInput, i1.ModusWcToast, i1.ModusWcToolbar, i1.ModusWcTooltip, i1.ModusWcTreeItem, i1.ModusWcTreeMenu, i1.ModusWcTypography, i1.ModusWcUtilityPanel], exports: [i1.ModusWcAccordion, i1.ModusWcAlert, i1.ModusWcAppMenu, i1.ModusWcAutocomplete, i1.ModusWcAvatar, i1.ModusWcBadge, i1.ModusWcBottomSheet, i1.ModusWcBreadcrumbs, i1.ModusWcButton, i1.ModusWcButtonGroup, i1.ModusWcCard, i1.ModusWcCheckbox, i1.ModusWcChip, i1.ModusWcCollapse, i1.ModusWcDate, i1.ModusWcDivider, i1.ModusWcDropdownMenu, i1.ModusWcFileDropzone, i1.ModusWcHandle, i1.ModusWcIcon, i1.ModusWcInputFeedback, i1.ModusWcInputLabel, i1.ModusWcLink, i1.ModusWcLoader, i1.ModusWcLogo, i1.ModusWcMenu, i1.ModusWcMenuItem, i1.ModusWcModal, i1.ModusWcNavbar, i1.ModusWcNumberInput, i1.ModusWcPagination, i1.ModusWcPanel, i1.ModusWcProfileMenu, i1.ModusWcProgress, i1.ModusWcRadio, i1.ModusWcRating, i1.ModusWcSelect, i1.ModusWcSideNavigation, i1.ModusWcSkeleton, i1.ModusWcSlider, i1.ModusWcStepper, i1.ModusWcSwitch, i1.ModusWcTable, i1.ModusWcTabs, i1.ModusWcTextInput, i1.ModusWcTextarea, i1.ModusWcThemeProvider, i1.ModusWcThemeSwitcher, i1.ModusWcTimeInput, i1.ModusWcToast, i1.ModusWcToolbar, i1.ModusWcTooltip, i1.ModusWcTreeItem, i1.ModusWcTreeMenu, i1.ModusWcTypography, i1.ModusWcUtilityPanel] }); }
10
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModusAngularComponentsModule, providers: [
11
+ {
12
+ provide: APP_INITIALIZER,
13
+ useFactory: () => () => {
14
+ // Configure asset path for Angular applications
15
+ // Assets should be copied to /assets/ via angular.json configuration
16
+ setAssetPath('/assets/');
17
+ defineCustomElements(window);
18
+ },
19
+ multi: true,
20
+ }
21
+ ] }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModusAngularComponentsModule, decorators: [{
24
+ type: NgModule,
25
+ args: [{
26
+ declarations: [...DIRECTIVES],
27
+ exports: [...DIRECTIVES],
28
+ providers: [
29
+ {
30
+ provide: APP_INITIALIZER,
31
+ useFactory: () => () => {
32
+ // Configure asset path for Angular applications
33
+ // Assets should be copied to /assets/ via angular.json configuration
34
+ setAssetPath('/assets/');
35
+ defineCustomElements(window);
36
+ },
37
+ multi: true,
38
+ }
39
+ ]
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdXMtd2MtYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmltYmxlLW9zcy9tb2R1c3dlYmNvbXBvbmVudHMtYW5ndWxhci9zcmMvbGliL21vZHVzLXdjLWFuZ3VsYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWtCakQsTUFBTSxPQUFPLDRCQUE0QjsrR0FBNUIsNEJBQTRCO2dIQUE1Qiw0QkFBNEI7Z0hBQTVCLDRCQUE0QixhQWI1QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO29CQUNyQixnREFBZ0Q7b0JBQ2hELHFFQUFxRTtvQkFDckUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN6QixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzRGQUVVLDRCQUE0QjtrQkFoQnhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN4QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0NBQ3JCLGdEQUFnRDtnQ0FDaEQscUVBQXFFO2dDQUNyRSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7Z0NBQ3pCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUMvQixDQUFDOzRCQUNELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAdHJpbWJsZS1vc3MvbW9kdXN3ZWJjb21wb25lbnRzL2xvYWRlcic7XG5pbXBvcnQgeyBzZXRBc3NldFBhdGggfSBmcm9tICdAdHJpbWJsZS1vc3MvbW9kdXN3ZWJjb21wb25lbnRzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVNdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiAoKSA9PiB7XG4gICAgICAgIC8vIENvbmZpZ3VyZSBhc3NldCBwYXRoIGZvciBBbmd1bGFyIGFwcGxpY2F0aW9uc1xuICAgICAgICAvLyBBc3NldHMgc2hvdWxkIGJlIGNvcGllZCB0byAvYXNzZXRzLyB2aWEgYW5ndWxhci5qc29uIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgc2V0QXNzZXRQYXRoKCcvYXNzZXRzLycpO1xuICAgICAgICBkZWZpbmVDdXN0b21FbGVtZW50cyh3aW5kb3cpO1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNb2R1c0FuZ3VsYXJDb21wb25lbnRzTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,59 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+ import { fromEvent } from 'rxjs';
4
+ export const proxyInputs = (Cmp, inputs) => {
5
+ const Prototype = Cmp.prototype;
6
+ inputs.forEach((item) => {
7
+ Object.defineProperty(Prototype, item, {
8
+ get() {
9
+ return this.el[item];
10
+ },
11
+ set(val) {
12
+ this.z.runOutsideAngular(() => (this.el[item] = val));
13
+ },
14
+ /**
15
+ * In the event that proxyInputs is called
16
+ * multiple times re-defining these inputs
17
+ * will cause an error to be thrown. As a result
18
+ * we set configurable: true to indicate these
19
+ * properties can be changed.
20
+ */
21
+ configurable: true,
22
+ });
23
+ });
24
+ };
25
+ export const proxyMethods = (Cmp, methods) => {
26
+ const Prototype = Cmp.prototype;
27
+ methods.forEach((methodName) => {
28
+ Prototype[methodName] = function () {
29
+ const args = arguments;
30
+ return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));
31
+ };
32
+ });
33
+ };
34
+ export const proxyOutputs = (instance, el, events) => {
35
+ events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));
36
+ };
37
+ export const defineCustomElement = (tagName, customElement) => {
38
+ if (customElement !== undefined && typeof customElements !== 'undefined' && !customElements.get(tagName)) {
39
+ customElements.define(tagName, customElement);
40
+ }
41
+ };
42
+ // tslint:disable-next-line: only-arrow-functions
43
+ export function ProxyCmp(opts) {
44
+ const decorator = function (cls) {
45
+ const { defineCustomElementFn, inputs, methods } = opts;
46
+ if (defineCustomElementFn !== undefined) {
47
+ defineCustomElementFn();
48
+ }
49
+ if (inputs) {
50
+ proxyInputs(cls, inputs);
51
+ }
52
+ if (methods) {
53
+ proxyMethods(cls, methods);
54
+ }
55
+ return cls;
56
+ };
57
+ return decorator;
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmltYmxlLW9zcy9tb2R1c3dlYmNvbXBvbmVudHMtYW5ndWxhci9zcmMvbGliL3N0ZW5jaWwtZ2VuZXJhdGVkL2FuZ3VsYXItY29tcG9uZW50LWxpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBUSxFQUFFLE1BQWdCLEVBQUUsRUFBRTtJQUN4RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7WUFDckMsR0FBRztnQkFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUNELEdBQUcsQ0FBQyxHQUFRO2dCQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNEOzs7Ozs7ZUFNRztZQUNILFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBUSxFQUFFLE9BQWlCLEVBQUUsRUFBRTtJQUMxRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUM3QixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUc7WUFDdEIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFhLEVBQUUsRUFBTyxFQUFFLE1BQWdCLEVBQUUsRUFBRTtJQUN2RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQWUsRUFBRSxhQUFrQixFQUFFLEVBQUU7SUFDekUsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLE9BQU8sY0FBYyxLQUFLLFdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6RyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBeUU7SUFDaEcsTUFBTSxTQUFTLEdBQUcsVUFBVSxHQUFRO1FBQ2xDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXhELElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMscUJBQXFCLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyogdHNsaW50OmRpc2FibGUgKi9cbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgcHJveHlJbnB1dHMgPSAoQ21wOiBhbnksIGlucHV0czogc3RyaW5nW10pID0+IHtcbiAgY29uc3QgUHJvdG90eXBlID0gQ21wLnByb3RvdHlwZTtcbiAgaW5wdXRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCBpdGVtLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsW2l0ZW1dO1xuICAgICAgfSxcbiAgICAgIHNldCh2YWw6IGFueSkge1xuICAgICAgICB0aGlzLnoucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gKHRoaXMuZWxbaXRlbV0gPSB2YWwpKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIEluIHRoZSBldmVudCB0aGF0IHByb3h5SW5wdXRzIGlzIGNhbGxlZFxuICAgICAgICogbXVsdGlwbGUgdGltZXMgcmUtZGVmaW5pbmcgdGhlc2UgaW5wdXRzXG4gICAgICAgKiB3aWxsIGNhdXNlIGFuIGVycm9yIHRvIGJlIHRocm93bi4gQXMgYSByZXN1bHRcbiAgICAgICAqIHdlIHNldCBjb25maWd1cmFibGU6IHRydWUgdG8gaW5kaWNhdGUgdGhlc2VcbiAgICAgICAqIHByb3BlcnRpZXMgY2FuIGJlIGNoYW5nZWQuXG4gICAgICAgKi9cbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJveHlNZXRob2RzID0gKENtcDogYW55LCBtZXRob2RzOiBzdHJpbmdbXSkgPT4ge1xuICBjb25zdCBQcm90b3R5cGUgPSBDbXAucHJvdG90eXBlO1xuICBtZXRob2RzLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgICBQcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgcmV0dXJuIHRoaXMuei5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmVsW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMuZWwsIGFyZ3MpKTtcbiAgICB9O1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm94eU91dHB1dHMgPSAoaW5zdGFuY2U6IGFueSwgZWw6IGFueSwgZXZlbnRzOiBzdHJpbmdbXSkgPT4ge1xuICBldmVudHMuZm9yRWFjaCgoZXZlbnROYW1lKSA9PiAoaW5zdGFuY2VbZXZlbnROYW1lXSA9IGZyb21FdmVudChlbCwgZXZlbnROYW1lKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmluZUN1c3RvbUVsZW1lbnQgPSAodGFnTmFtZTogc3RyaW5nLCBjdXN0b21FbGVtZW50OiBhbnkpID0+IHtcbiAgaWYgKGN1c3RvbUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgY3VzdG9tRWxlbWVudHMgIT09ICd1bmRlZmluZWQnICYmICFjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpIHtcbiAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnTmFtZSwgY3VzdG9tRWxlbWVudCk7XG4gIH1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogb25seS1hcnJvdy1mdW5jdGlvbnNcbmV4cG9ydCBmdW5jdGlvbiBQcm94eUNtcChvcHRzOiB7IGRlZmluZUN1c3RvbUVsZW1lbnRGbj86ICgpID0+IHZvaWQ7IGlucHV0cz86IGFueTsgbWV0aG9kcz86IGFueSB9KSB7XG4gIGNvbnN0IGRlY29yYXRvciA9IGZ1bmN0aW9uIChjbHM6IGFueSkge1xuICAgIGNvbnN0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudEZuLCBpbnB1dHMsIG1ldGhvZHMgfSA9IG9wdHM7XG5cbiAgICBpZiAoZGVmaW5lQ3VzdG9tRWxlbWVudEZuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmluZUN1c3RvbUVsZW1lbnRGbigpO1xuICAgIH1cblxuICAgIGlmIChpbnB1dHMpIHtcbiAgICAgIHByb3h5SW5wdXRzKGNscywgaW5wdXRzKTtcbiAgICB9XG4gICAgaWYgKG1ldGhvZHMpIHtcbiAgICAgIHByb3h5TWV0aG9kcyhjbHMsIG1ldGhvZHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xzO1xuICB9O1xuICByZXR1cm4gZGVjb3JhdG9yO1xufVxuIl19