@scania/tegel-angular-17 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -0
- package/esm2022/lib/components.module.mjs +31 -0
- package/esm2022/lib/stencil-generated/angular-component-lib/utils.mjs +59 -0
- package/esm2022/lib/stencil-generated/components.mjs +2008 -0
- package/esm2022/lib/stencil-generated/index.mjs +84 -0
- package/esm2022/public-api.mjs +7 -0
- package/esm2022/scania-tegel-angular-17.mjs +5 -0
- package/fesm2022/scania-tegel-angular-17.mjs +2105 -0
- package/fesm2022/scania-tegel-angular-17.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components.module.d.ts +7 -0
- package/lib/stencil-generated/angular-component-lib/utils.d.ts +9 -0
- package/lib/stencil-generated/components.d.ts +967 -0
- package/lib/stencil-generated/index.d.ts +2 -0
- package/package.json +27 -0
- package/public-api.d.ts +3 -0
package/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
[](https://tds-storybook.tegel.scania.com/)
|
|
2
|
+

|
|
3
|
+

|
|
4
|
+

|
|
5
|
+
|
|
6
|
+
# @scania/tegel-angular-17
|
|
7
|
+
This is a ongoing project with the purpose to simplify the integration of Tegel in Angular apps.
|
|
8
|
+
|
|
9
|
+
This guide [here](https://stenciljs.com/docs/angular) has served as base for the configuration.
|
|
10
|
+
|
|
11
|
+
Official website: https://tegel.scania.com/
|
|
12
|
+
|
|
13
|
+
Storybook: https://tds-storybook.tegel.scania.com/
|
|
14
|
+
|
|
15
|
+
The design system supports the design and development of digital solutions at Scania. The purpose is to secure a coherent, premium brand and user experience across all of Scania's digital touchpoints.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
1. Run `npm install @scania/tegel-angular`
|
|
21
|
+
2. In your root module (app.component.ts) import the `TegelModule`:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { Component } from '@angular/core';
|
|
25
|
+
import { RouterOutlet } from '@angular/router';
|
|
26
|
+
import { TegelModule } from '@scania/tegel-angular';
|
|
27
|
+
|
|
28
|
+
@Component({
|
|
29
|
+
selector: 'app-root',
|
|
30
|
+
standalone: true,
|
|
31
|
+
imports: [RouterOutlet, TegelModule,],
|
|
32
|
+
templateUrl: './app.component.html',
|
|
33
|
+
styleUrl: './app.component.css'
|
|
34
|
+
})
|
|
35
|
+
export class AppComponent {
|
|
36
|
+
title = 'my-app';
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
3. In your global css file import the tegel stylesheet.
|
|
41
|
+
|
|
42
|
+
```css
|
|
43
|
+
@import url('@scania/tegel/dist/tegel/tegel.css');
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
4. In your main.ts import and call defineCustomElement.
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import { bootstrapApplication } from '@angular/platform-browser';
|
|
50
|
+
import { appConfig } from './app/app.config';
|
|
51
|
+
import { AppComponent } from './app/app.component';
|
|
52
|
+
import { defineCustomElements } from '@scania/tegel/loader';
|
|
53
|
+
|
|
54
|
+
defineCustomElements(window);
|
|
55
|
+
|
|
56
|
+
bootstrapApplication(AppComponent, appConfig).catch((err) =>
|
|
57
|
+
console.error(err)
|
|
58
|
+
);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
See all available components in the [Tegel Design System](https://tegel.scania.com/components/overview).
|
|
62
|
+
|
|
63
|
+
## Browser support
|
|
64
|
+
|
|
65
|
+
See the browser support section on [the Tegel website](https://tegel.scania.com/development/getting-started-development/introduction#browser-support).
|
|
66
|
+
|
|
67
|
+
## Community
|
|
68
|
+
|
|
69
|
+
Get in touch with the team and the community:
|
|
70
|
+
|
|
71
|
+
- [Teams](https://teams.microsoft.com/l/team/19%3a1257007a64d44c64954acca27a9d4b46%40thread.skype/conversations?groupId=79f9bfeb-73e2-424d-9477-b236191ece5e&tenantId=3bc062e4-ac9d-4c17-b4dd-3aad637ff1ac)
|
|
72
|
+
|
|
73
|
+
## License
|
|
74
|
+
|
|
75
|
+
All CSS, HTML and JS code are available under the MIT license. The Scania brand identity, logos and photographs found in this repository are copyrighted Scania CV AB and are not available on an open source basis or to be used as examples or in any other way, if not specifically ordered by Scania CV AB.
|
|
76
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { APP_INITIALIZER, NgModule } from '@angular/core';
|
|
2
|
+
import { DIRECTIVES } from './stencil-generated';
|
|
3
|
+
import { defineCustomElements } from '@scania/tegel/loader';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./stencil-generated/components";
|
|
6
|
+
export class TegelModule {
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TegelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
8
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: TegelModule, declarations: [i1.TdsAccordion, i1.TdsAccordionItem, i1.TdsBadge, i1.TdsBanner, i1.TdsBlock, i1.TdsBodyCell, i1.TdsBreadcrumb, i1.TdsBreadcrumbs, i1.TdsButton, i1.TdsCard, i1.TdsCheckbox, i1.TdsChip, i1.TdsCoreHeaderItem, i1.TdsDatetime, i1.TdsDivider, i1.TdsDropdown, i1.TdsDropdownOption, i1.TdsFolderTab, i1.TdsFolderTabs, i1.TdsFooter, i1.TdsFooterGroup, i1.TdsFooterItem, i1.TdsHeader, i1.TdsHeaderBrandSymbol, i1.TdsHeaderCell, i1.TdsHeaderDropdown, i1.TdsHeaderDropdownList, i1.TdsHeaderDropdownListItem, i1.TdsHeaderDropdownListUser, i1.TdsHeaderHamburger, i1.TdsHeaderItem, i1.TdsHeaderLauncher, i1.TdsHeaderLauncherButton, i1.TdsHeaderLauncherGrid, i1.TdsHeaderLauncherGridItem, i1.TdsHeaderLauncherGridTitle, i1.TdsHeaderLauncherList, i1.TdsHeaderLauncherListItem, i1.TdsHeaderLauncherListTitle, i1.TdsHeaderTitle, i1.TdsIcon, i1.TdsInlineTab, i1.TdsInlineTabs, i1.TdsLink, i1.TdsMessage, i1.TdsModal, i1.TdsNavigationTab, i1.TdsNavigationTabs, i1.TdsPopoverCanvas, i1.TdsPopoverCore, i1.TdsPopoverMenu, i1.TdsPopoverMenuItem, i1.TdsRadioButton, i1.TdsSideMenu, i1.TdsSideMenuCloseButton, i1.TdsSideMenuCollapseButton, i1.TdsSideMenuDropdown, i1.TdsSideMenuDropdownList, i1.TdsSideMenuDropdownListItem, i1.TdsSideMenuItem, i1.TdsSideMenuOverlay, i1.TdsSideMenuUser, i1.TdsSideMenuUserImage, i1.TdsSideMenuUserLabel, i1.TdsSlider, i1.TdsSpinner, i1.TdsStep, i1.TdsStepper, i1.TdsTable, i1.TdsTableBody, i1.TdsTableBodyRow, i1.TdsTableBodyRowExpandable, i1.TdsTableFooter, i1.TdsTableHeader, i1.TdsTableToolbar, i1.TdsTextField, i1.TdsTextarea, i1.TdsToast, i1.TdsToggle, i1.TdsTooltip], exports: [i1.TdsAccordion, i1.TdsAccordionItem, i1.TdsBadge, i1.TdsBanner, i1.TdsBlock, i1.TdsBodyCell, i1.TdsBreadcrumb, i1.TdsBreadcrumbs, i1.TdsButton, i1.TdsCard, i1.TdsCheckbox, i1.TdsChip, i1.TdsCoreHeaderItem, i1.TdsDatetime, i1.TdsDivider, i1.TdsDropdown, i1.TdsDropdownOption, i1.TdsFolderTab, i1.TdsFolderTabs, i1.TdsFooter, i1.TdsFooterGroup, i1.TdsFooterItem, i1.TdsHeader, i1.TdsHeaderBrandSymbol, i1.TdsHeaderCell, i1.TdsHeaderDropdown, i1.TdsHeaderDropdownList, i1.TdsHeaderDropdownListItem, i1.TdsHeaderDropdownListUser, i1.TdsHeaderHamburger, i1.TdsHeaderItem, i1.TdsHeaderLauncher, i1.TdsHeaderLauncherButton, i1.TdsHeaderLauncherGrid, i1.TdsHeaderLauncherGridItem, i1.TdsHeaderLauncherGridTitle, i1.TdsHeaderLauncherList, i1.TdsHeaderLauncherListItem, i1.TdsHeaderLauncherListTitle, i1.TdsHeaderTitle, i1.TdsIcon, i1.TdsInlineTab, i1.TdsInlineTabs, i1.TdsLink, i1.TdsMessage, i1.TdsModal, i1.TdsNavigationTab, i1.TdsNavigationTabs, i1.TdsPopoverCanvas, i1.TdsPopoverCore, i1.TdsPopoverMenu, i1.TdsPopoverMenuItem, i1.TdsRadioButton, i1.TdsSideMenu, i1.TdsSideMenuCloseButton, i1.TdsSideMenuCollapseButton, i1.TdsSideMenuDropdown, i1.TdsSideMenuDropdownList, i1.TdsSideMenuDropdownListItem, i1.TdsSideMenuItem, i1.TdsSideMenuOverlay, i1.TdsSideMenuUser, i1.TdsSideMenuUserImage, i1.TdsSideMenuUserLabel, i1.TdsSlider, i1.TdsSpinner, i1.TdsStep, i1.TdsStepper, i1.TdsTable, i1.TdsTableBody, i1.TdsTableBodyRow, i1.TdsTableBodyRowExpandable, i1.TdsTableFooter, i1.TdsTableHeader, i1.TdsTableToolbar, i1.TdsTextField, i1.TdsTextarea, i1.TdsToast, i1.TdsToggle, i1.TdsTooltip] }); }
|
|
9
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TegelModule, providers: [
|
|
10
|
+
{
|
|
11
|
+
provide: APP_INITIALIZER,
|
|
12
|
+
useFactory: () => defineCustomElements,
|
|
13
|
+
multi: true,
|
|
14
|
+
},
|
|
15
|
+
] }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TegelModule, decorators: [{
|
|
18
|
+
type: NgModule,
|
|
19
|
+
args: [{
|
|
20
|
+
declarations: [...DIRECTIVES],
|
|
21
|
+
exports: [...DIRECTIVES],
|
|
22
|
+
providers: [
|
|
23
|
+
{
|
|
24
|
+
provide: APP_INITIALIZER,
|
|
25
|
+
useFactory: () => defineCustomElements,
|
|
26
|
+
multi: true,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
}]
|
|
30
|
+
}] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFhNUQsTUFBTSxPQUFPLFdBQVc7OEdBQVgsV0FBVzsrR0FBWCxXQUFXOytHQUFYLFdBQVcsYUFSWDtZQUNUO2dCQUNFLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO2dCQUN0QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzJGQUVVLFdBQVc7a0JBWHZCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN4QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0I7NEJBQ3RDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAc2NhbmlhL3RlZ2VsL2xvYWRlcic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogWy4uLkRJUkVDVElWRVNdLFxuICBleHBvcnRzOiBbLi4uRElSRUNUSVZFU10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGVnZWxNb2R1bGUge31cbiJdfQ==
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc3RlbmNpbC1nZW5lcmF0ZWQvYW5ndWxhci1jb21wb25lbnQtbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO0lBQ3hELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRTtZQUNyQyxHQUFHO2dCQUNELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsR0FBRyxDQUFDLEdBQVE7Z0JBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQ0Q7Ozs7OztlQU1HO1lBQ0gsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFRLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQzFELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQzdCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRztZQUN0QixNQUFNLElBQUksR0FBRyxTQUFTLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQWEsRUFBRSxFQUFPLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO0lBQ3ZFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBZSxFQUFFLGFBQWtCLEVBQUUsRUFBRTtJQUN6RSxJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pHLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixpREFBaUQ7QUFDakQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUF5RTtJQUNoRyxNQUFNLFNBQVMsR0FBRyxVQUFVLEdBQVE7UUFDbEMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFeEQsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxxQkFBcUIsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBwcm94eUlucHV0cyA9IChDbXA6IGFueSwgaW5wdXRzOiBzdHJpbmdbXSkgPT4ge1xuICBjb25zdCBQcm90b3R5cGUgPSBDbXAucHJvdG90eXBlO1xuICBpbnB1dHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsIGl0ZW0sIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxbaXRlbV07XG4gICAgICB9LFxuICAgICAgc2V0KHZhbDogYW55KSB7XG4gICAgICAgIHRoaXMuei5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiAodGhpcy5lbFtpdGVtXSA9IHZhbCkpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogSW4gdGhlIGV2ZW50IHRoYXQgcHJveHlJbnB1dHMgaXMgY2FsbGVkXG4gICAgICAgKiBtdWx0aXBsZSB0aW1lcyByZS1kZWZpbmluZyB0aGVzZSBpbnB1dHNcbiAgICAgICAqIHdpbGwgY2F1c2UgYW4gZXJyb3IgdG8gYmUgdGhyb3duLiBBcyBhIHJlc3VsdFxuICAgICAgICogd2Ugc2V0IGNvbmZpZ3VyYWJsZTogdHJ1ZSB0byBpbmRpY2F0ZSB0aGVzZVxuICAgICAgICogcHJvcGVydGllcyBjYW4gYmUgY2hhbmdlZC5cbiAgICAgICAqL1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm94eU1ldGhvZHMgPSAoQ21wOiBhbnksIG1ldGhvZHM6IHN0cmluZ1tdKSA9PiB7XG4gIGNvbnN0IFByb3RvdHlwZSA9IENtcC5wcm90b3R5cGU7XG4gIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAgIFByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICByZXR1cm4gdGhpcy56LnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZWxbbWV0aG9kTmFtZV0uYXBwbHkodGhpcy5lbCwgYXJncykpO1xuICAgIH07XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb3h5T3V0cHV0cyA9IChpbnN0YW5jZTogYW55LCBlbDogYW55LCBldmVudHM6IHN0cmluZ1tdKSA9PiB7XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudE5hbWUpID0+IChpbnN0YW5jZVtldmVudE5hbWVdID0gZnJvbUV2ZW50KGVsLCBldmVudE5hbWUpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmaW5lQ3VzdG9tRWxlbWVudCA9ICh0YWdOYW1lOiBzdHJpbmcsIGN1c3RvbUVsZW1lbnQ6IGFueSkgPT4ge1xuICBpZiAoY3VzdG9tRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSkge1xuICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0YWdOYW1lLCBjdXN0b21FbGVtZW50KTtcbiAgfVxufTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBvbmx5LWFycm93LWZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIFByb3h5Q21wKG9wdHM6IHsgZGVmaW5lQ3VzdG9tRWxlbWVudEZuPzogKCkgPT4gdm9pZDsgaW5wdXRzPzogYW55OyBtZXRob2RzPzogYW55IH0pIHtcbiAgY29uc3QgZGVjb3JhdG9yID0gZnVuY3Rpb24gKGNsczogYW55KSB7XG4gICAgY29uc3QgeyBkZWZpbmVDdXN0b21FbGVtZW50Rm4sIGlucHV0cywgbWV0aG9kcyB9ID0gb3B0cztcblxuICAgIGlmIChkZWZpbmVDdXN0b21FbGVtZW50Rm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmaW5lQ3VzdG9tRWxlbWVudEZuKCk7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0cykge1xuICAgICAgcHJveHlJbnB1dHMoY2xzLCBpbnB1dHMpO1xuICAgIH1cbiAgICBpZiAobWV0aG9kcykge1xuICAgICAgcHJveHlNZXRob2RzKGNscywgbWV0aG9kcyk7XG4gICAgfVxuICAgIHJldHVybiBjbHM7XG4gIH07XG4gIHJldHVybiBkZWNvcmF0b3I7XG59XG4iXX0=
|