@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 ADDED
@@ -0,0 +1,76 @@
1
+ [![Storybook](https://img.shields.io/badge/docs-storybook-ff69b4)](https://tds-storybook.tegel.scania.com/)
2
+ ![](https://img.shields.io/github/license/scania-digital-design-system/tegel)
3
+ ![Status: Beta](https://img.shields.io/badge/status-beta-red)
4
+ ![npm](https://img.shields.io/npm/v/%40scania%2Ftegel-angular-17)
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=