@trimble-oss/moduswebcomponents-angular 1.3.0-ng19 → 1.4.0-ng18
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 +14 -8
- package/esm2022/lib/modus-wc-angular.module.mjs +42 -0
- package/esm2022/lib/stencil-generated/angular-component-lib/utils.mjs +59 -0
- package/esm2022/lib/stencil-generated/components.mjs +1419 -0
- package/esm2022/lib/stencil-generated/index.mjs +55 -0
- package/esm2022/public-api.mjs +7 -0
- package/esm2022/trimble-oss-moduswebcomponents-angular.mjs +5 -0
- package/fesm2022/trimble-oss-moduswebcomponents-angular.mjs +183 -175
- package/fesm2022/trimble-oss-moduswebcomponents-angular.mjs.map +1 -1
- package/lib/modus-wc-angular.module.d.ts +1 -1
- package/lib/stencil-generated/components.d.ts +51 -51
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Modus Angular Components: moduswebcomponents-angular
|
|
2
2
|
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.
|
|
4
4
|
|
|
5
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
|
|
|
@@ -9,6 +9,12 @@ The components in this library were programmatically generated using the [Stenci
|
|
|
9
9
|
- Install the Modus Angular Components Library and its Modus Web Component peer dependency
|
|
10
10
|
`npm install @trimble-oss/moduswebcomponents @trimble-oss/moduswebcomponents-angular`
|
|
11
11
|
|
|
12
|
+
- You will need to import our styling in your main JavaScript or CSS file:
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
import "@trimble-oss/moduswebcomponents/modus-wc-styles.css";
|
|
16
|
+
```
|
|
17
|
+
|
|
12
18
|
- Add the following snippet to your `main.ts` (or any main module)
|
|
13
19
|
|
|
14
20
|
```typescript
|
|
@@ -40,7 +46,7 @@ The components in this library were programmatically generated using the [Stenci
|
|
|
40
46
|
|
|
41
47
|
To rebuild the Modus Angular Components you need to perform the following steps:
|
|
42
48
|
|
|
43
|
-
- From the `./integrations/angular/
|
|
49
|
+
- From the `./integrations/angular/ng18` project directory run
|
|
44
50
|
`npm install` then `npm run build`
|
|
45
51
|
|
|
46
52
|
### Referencing a local build of modus-wc
|
|
@@ -48,20 +54,20 @@ To rebuild the Modus Angular Components you need to perform the following steps:
|
|
|
48
54
|
#### Using npm link
|
|
49
55
|
|
|
50
56
|
- If you want to reference a local build of `modus-wc` you can run `npm link` from the `modus-wc-2.0` root
|
|
51
|
-
directory and then `npm link @trimble-oss/moduswebcomponents` from the `
|
|
57
|
+
directory and then `npm link @trimble-oss/moduswebcomponents` from the `ng18` directory.
|
|
52
58
|
|
|
53
59
|
#### Using npm pack
|
|
54
60
|
|
|
55
61
|
- You can also run `npm pack` from the `modus-wc-2.0` root
|
|
56
|
-
directory and then `npm install path/to/modus-wc-tarball.tgz` from `
|
|
62
|
+
directory and then `npm install path/to/modus-wc-tarball.tgz` from `ng18` directory.
|
|
57
63
|
|
|
58
64
|
## Debugging Locally
|
|
59
65
|
|
|
60
66
|
To use the Modus Angular components locally for debugging and other purposes:
|
|
61
67
|
|
|
62
|
-
- From `./
|
|
63
|
-
- From `./
|
|
64
|
-
- This will generate a tarball of the library: `trimble-cms-modus-wc-angular-0.0.1-
|
|
68
|
+
- From `./ng18` project directory run `npm run build`
|
|
69
|
+
- From `./ng18` 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-ng18.tgz`
|
|
65
71
|
|
|
66
|
-
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-
|
|
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-ng18.tgz`
|
|
67
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 ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ModusAngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ModusAngularComponentsModule, declarations: [i1.ModusWcAccordion, i1.ModusWcAlert, i1.ModusWcAutocomplete, i1.ModusWcAvatar, i1.ModusWcBadge, 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.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.ModusWcTypography, i1.ModusWcUtilityPanel], exports: [i1.ModusWcAccordion, i1.ModusWcAlert, i1.ModusWcAutocomplete, i1.ModusWcAvatar, i1.ModusWcBadge, 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.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.ModusWcTypography, i1.ModusWcUtilityPanel] });
|
|
10
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", 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: "18.2.9", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdXMtd2MtYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmltYmxlLW9zcy9tb2R1c3dlYmNvbXBvbmVudHMtYW5ndWxhci9zcmMvbGliL21vZHVzLXdjLWFuZ3VsYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWtCakQsTUFBTSxPQUFPLDRCQUE0Qjt1R0FBNUIsNEJBQTRCO3dHQUE1Qiw0QkFBNEI7d0dBQTVCLDRCQUE0QixhQWI1QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO29CQUNyQixnREFBZ0Q7b0JBQ2hELHFFQUFxRTtvQkFDckUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN6QixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzJGQUVVLDRCQUE0QjtrQkFoQnhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN4QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0NBQ3JCLGdEQUFnRDtnQ0FDaEQscUVBQXFFO2dDQUNyRSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7Z0NBQ3pCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUMvQixDQUFDOzRCQUNELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAdHJpbWJsZS1vc3MvbW9kdXN3ZWJjb21wb25lbnRzL2xvYWRlcic7XG5pbXBvcnQgeyBzZXRBc3NldFBhdGggfSBmcm9tICdAdHJpbWJsZS1vc3MvbW9kdXN3ZWJjb21wb25lbnRzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVNdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiAoKSA9PiB7XG4gICAgICAgIC8vIENvbmZpZ3VyZSBhc3NldCBwYXRoIGZvciBBbmd1bGFyIGFwcGxpY2F0aW9uc1xuICAgICAgICAvLyBBc3NldHMgc2hvdWxkIGJlIGNvcGllZCB0byAvYXNzZXRzLyB2aWEgYW5ndWxhci5qc29uIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgc2V0QXNzZXRQYXRoKCcvYXNzZXRzLycpO1xuICAgICAgICBkZWZpbmVDdXN0b21FbGVtZW50cyh3aW5kb3cpO1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNb2R1c0FuZ3VsYXJDb21wb25lbnRzTW9kdWxlIHt9XG4iXX0=
|
|
@@ -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
|